CorpseJS

CorpseJS

CorpseJS是一个Forge 1.20.1集成模组,允许KubeJS脚本创建和自定义Corpse尸体。

KubeJS

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 示例

以下示例演示了完整的工作流程:从死亡事件创建尸体,在创建前取消选定的源,替换或添加物品,将物品分配到随机物品栏槽位,以及移除尸体而不掉落其内容。

// 当僵尸死亡时创建带有初始物品的尸体。
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')
  ])
})

// 此事件在尸体实体构建之前运行。
CorpseJSEvents.beforeCorpseCreated(event => {
  if (event.entityId == 'simpleenemymod:pmcunit') {
    event.cancel()
  }
})

// 此事件在新的尸体添加到世界后运行。
CorpseJSEvents.corpseCreated(event => {
  if (event.sourceEntityId != 'minecraft:zombie') return

  // 替换所有现有的尸体内容并使用随机主物品栏槽位。
  event.replaceItems([
    Item.of('minecraft:diamond_sword'),
    Item.of('minecraft:bread', 4)
  ], true)

  // 添加物品而不清除现有内容,同样使用随机槽位。
  event.addItems([
    Item.of('minecraft:gold_ingot', 2),
    Item.of('minecraft:paper')
  ], true)

  // 等效的显式模式 API:
  // event.setItems('replace', [Item.of('minecraft:diamond')], true)
  // event.setItems('add', [Item.of('minecraft:emerald')], true)
})

// 静默移除尸体,包括其所有存储的物品。
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 许可证分发。