跳到正文

CorpseJS

作者:DxEVIL

CorpseJS 是一款适用于 Forge 1.20.1 的集成模组,可让 KubeJS 脚本创建并自定义 Corpse 尸体。

收藏

介绍

介绍由机器翻译自 CurseForge 原页面,仅供参考。

CorpseJS

CorpseJS 将 Corpse 模组与 KubeJS 连接起来,提供一种简单且可脚本化的方式来创建和自定义尸体实体。

Simple Enemy 和 CustomNPCs 实体不会自动生成尸体。脚本通过 CorpseJS API 明确指定何时生成尸体。当来源实体是受支持的 Simple Enemy 或 CustomNPC 人形实体时,CorpseJS 会自动选择对应的尸体模型。其他实体则使用通用尸体渲染器,该渲染器会复用来源实体已注册的渲染器。

功能

  • 通过 Java API 或 KubeJS 为任意服务端实体创建尸体。
  • 创建尸体时添加初始物品。
  • 创建后使用 replaceItems、addItems 或 setItems 自定义尸体内容。
  • 在尸体实体构造前取消尸体创建。
  • 使用 sourceEntity、sourceEntityId 和 sourcePersistentData 识别原始实体。
  • 在尸体上保留来源实体的 KubeJS persistentData。
  • 为 Simple Enemy 单位和受支持的 CustomNPC 人形实体使用专用模型。
  • 在同一游戏刻创建尸体时,防止正常死亡掉落物重复生成。
  • 移除尸体,不掉落或返还其中的物品。

KubeJS API

KubeJS 为可选前置。安装 KubeJS 后,CorpseJS 会提供全局 CorpseJS 绑定:

EntityEvents.death(event => {
  if (event.entity.type == 'minecraft:zombie') {
    const corpse = CorpseJS.spawn(event.entity, [
      Item.of('minecraft:rotten_flesh', 3),
      Item.of('minecraft:iron_ingot')
    ])
  }
})

可用方法:

  • CorpseJS.spawn(entity) 创建一具空尸体。
  • CorpseJS.spawn(entity, items) 使用提供的物品创建尸体。
  • CorpseJS.removeCorpse(corpse) 静默移除尸体并清空其内容。
  • CorpseJS.remove(corpse) 是 removeCorpse 的简写别名。

该 API 仅限服务端使用。创建成功时会返回新尸体实体;如果创建失败、来源实体位于客户端,或当前游戏刻内已为该来源实体创建过尸体,则返回 null。

KubeJS 完整示例

以下示例演示完整工作流程:从死亡事件创建尸体、在创建前取消指定来源的尸体生成、替换或添加物品、将物品分配到随机背包栏位,以及移除尸体且不掉落其中的物品。

// Create a corpse with initial items when a zombie dies.
EntityEvents.death(event => {
  if (event.entity.type != 'minecraft:zombie') return

  CorpseJS.spawn(event.entity, [
    Item.of('minecraft:rotten_flesh', 3),
    Item.of('minecraft:iron_ingot')
  ])
})

// This event runs before the corpse entity is constructed.
CorpseJSEvents.beforeCorpseCreated(event => {
  if (event.entityId == 'simpleenemymod:pmcunit') {
    event.cancel()
  }
})

// This event runs after a new corpse has been added to the world.
CorpseJSEvents.corpseCreated(event => {
  if (event.sourceEntityId != 'minecraft:zombie') return

  // Replace all existing corpse contents and use random main-inventory slots.
  event.replaceItems([
    Item.of('minecraft:diamond_sword'),
    Item.of('minecraft:bread', 4)
  ], true)

  // Add items without clearing existing contents, also using random slots.
  event.addItems([
    Item.of('minecraft:gold_ingot', 2),
    Item.of('minecraft:paper')
  ], true)

  // Equivalent explicit mode API:
  // event.setItems('replace', [Item.of('minecraft:diamond')], true)
  // event.setItems('add', [Item.of('minecraft:emerald')], true)
})

// Remove a corpse silently, including all of its stored items.
CorpseJSEvents.corpseCreated(event => {
  if (event.sourceEntityId == 'minecraft:zombie' && Math.random() < 0.1) {
    CorpseJS.removeCorpse(event.entity)
  }
})

replaceItems会在放入新物品前清空主物品栏、盔甲栏、副手、额外物品栏和装备栏。addItems 会保留现有物品;超出容量的物品会放入额外物品页面。将 true 作为第二个参数传入,即可随机排列主物品栏槽位。setItems 接受 replace 或 add 模式,并支持相同的随机槽位参数。

KubeJS 事件

CorpseJS 提供一个全局事件组:CorpseJSEvents。

CorpseJSEvents.beforeCorpseCreated(event => {
  if (event.entityId == 'simpleenemymod:pmcunit') {
    event.cancel()
  }
})

CorpseJSEvents.corpseCreated(event => {
  if (event.sourceEntityId == 'minecraft:zombie') {
    event.addItems(Item.of('minecraft:paper'))
  }
})

beforeCorpseCreated 会在尸体实体创建前运行,并可取消创建。corpseCreated 会在新创建的尸体加入世界后运行一次,并可修改尸体内容。

在 beforeCorpseCreated 中使用 event.entityId,并在 corpseCreated 中使用 event.sourceEntityId,即可针对特定来源实体类型应用规则。

支持的模型

  • Simple Enemy 实体使用对应的 Simple Enemy 单位模型。
  • 受支持的 CustomNPC 人形实体使用对应的 CustomNPC 模型。
  • 玩家使用玩家尸体模型。
  • 其他实体则通过通用尸体模型调用其已注册的实体渲染器。

运行要求

  • Minecraft 1.20.1
  • Minecraft Forge 47+
  • Corpse,用于提供尸体实体和物品栏实现
  • KubeJS Forge 2001.6 或更新版本;仅在需要 KubeJS 脚本支持时安装
  • Simple Enemy 和 CustomNPCs 为可选的兼容集成

CorpseJS 采用 LGPL-3.0 许可证发布。

常见问题

CorpseJS 支持哪些 Minecraft 版本?

CorpseJS 支持 Minecraft Java 版 1.20.1,可用的加载器:Forge。下载时注意选择和你游戏版本一致的文件。

CorpseJS 怎么安装?

先用 PCL2 或 HMCL 启动器安装对应版本的 Forge,再把下载的 .jar 文件放进游戏目录的 mods 文件夹,重新启动游戏即可。开启了版本隔离的,mods 文件夹在 versions/版本名 下面。

评论

登录后评论和评分

DxEVIL 的其他作品

查看全部 →