地穴:拟态怪

数据驱动的假玩家NPC

Made for ModFest: Carnival

不是我最初打算做的东西,但仍然很酷 :3

使用指南

生成

/crypt-mimic <identifier> <x> <y> <z> <nbt>
该 NPC 会像盔甲架一样行动,直到用以下命令将其锁定:
/data modify entity <seletor> Locked set value True
未锁定时,交互会修改物品;一旦锁定,对话动作就会显示。
你也可以像修改盔甲架那样修改模型各部位的旋转。

NBT 标签
NpcId - NPC 类型的 id
ArmourItems - 物品堆叠复合标签的列表
HandItems - 物品堆叠复合标签的列表
Small - 小型模型的布尔值
Locked - 锁定模型的布尔值
Pose - 姿态旋转的复合标签。
Pose.Head - 浮点数列表,头部旋转的欧拉角。
Pose.Body - 浮点数列表,身体旋转的欧拉角。
Pose.LeftArm - 浮点数列表,左臂旋转的欧拉角。
Pose.RightArm - 浮点数列表,右臂旋转的欧拉角。
Pose.LeftLeg - 浮点数列表,左腿旋转的欧拉角。
Pose.RightLeg - 浮点数列表,右腿旋转的欧拉角。

NPC

data/<namespace>/crypt-mimic/npc/<id>.json

// 注意:此示例使用 json5 来写注释,实际数据请使用普通 json
{
  // `name` 使用原版 Text 编解码器,因此你可以构建复杂的内容
  "name": [ // 必需
    {
      "type": "translatable",
      "translate": "npc.<namespace>.<id>.name"
    }
  ],
  // `title` 同样使用原版 Text 编解码器
  "title": [ // 可选
    {
      "type": "translatable",
      "translate": "npc.<namespace>.<id>.title"
    }
  ],
  "skin": { // 可选
    "texture": "<namespace>:textures/entity/npc/<id>.png", // 必需
    "hasSlimArms": true // 可选,默认为 false
  },
  "action": { // 可选
    "action": "crypt-mimic:show_dialog", // 必需
    "value": "<namespace>:dialog_<id>" // 可能必需,取决于 `action`
  }
}

对话

data/<namespace>/crypt-mimic/dialog/<id>.json

// 注意:此示例使用 json5 来写注释,实际数据请使用普通 json
{
  // `text` 使用原版 Text 编解码器
  "text": [ // 必需
    {
      "type": "translatable",
      "translate": "dialog.<namespace>.<id>"
    }
  ],
  "actions": [ // 必需,即使为空,但应至少包含一项
    {
      "action": "crypt_mimic:show_dialog", // 必需
      "value": "<namespace>:<different_id>" // 可能必需,取决于 `action`
    }
  ]
}

自定义对话动作

对话动作使用 action.<namespace>.<id> 翻译键。

import gay.pyrrha.mimic.dialog.DialogAction;
DialogAction.getEVENT().register((player, entity, action) -> {
    // do things
});
Kotlin 示例
import gay.pyrrha.mimic.dialog.DialogAction
DialogAction.EVENT.register { player, entity, action ->
    // do things (but in kotlin :3)
}