物品修复系统
物品修复系统允许装备在耐久归零后进入"禁用"状态而非消失,玩家可以使用指定材料修复装备恢复使用。
耐久度禁用机制
当物品耐久即将归零时:
PlayerItemDamageEvent被取消,物品不会消失。- 物品 damage 设为 max_damage,标记为禁用状态。
- PDC 写入
emakiitem:disabled(BYTE=1)。 - 禁用状态下所有触发器不会触发,攻击等交互被阻止。
配置字段
repair 是物品定义文件中的顶层字段:
| 字段 | 类型 | 说明 |
|---|---|---|
enabled | boolean | 是否启用修复系统。 |
materials | list | 修复材料列表。 |
disabled_display | object | 物品禁用后的外观修改。 |
on_disabled | list | 物品变为禁用状态时执行的动作列表。 |
on_repaired | list | 物品修复成功后执行的动作列表。 |
materials 条目字段
| 字段 | 类型 | 说明 |
|---|---|---|
item | string | 材料物品来源(ItemSource shorthand 格式,如 minecraft-diamond)。 |
amount | integer | 需要消耗的数量。 |
restore | string | 恢复耐久量。支持固定值(如 250)或百分比(如 50%,相对于 max_damage)。 |
disabled_display 字段
| 字段 | 类型 | 说明 |
|---|---|---|
name_prefix | string | 物品禁用时在名称前追加的前缀(MiniMessage 格式)。 |
lore_append | list | 物品禁用时追加到 Lore 末尾的文本列表。 |
修复触发方式
玩家在背包中用光标持有修复材料,点击被禁用的物品即可修复。修复后:
- damage 减少对应的 restore 值。
- 如果 damage < max_damage,自动清除 PDC 禁用标记。
- 触发
on_repaired动作列表。
完整示例
yaml
id: legendary_sword
display_name: '<gold>传说之剑'
material: NETHERITE_SWORD
repair:
enabled: true
materials:
- item: "minecraft-NETHERITE_INGOT"
amount: 1
restore: "50%"
- item: "minecraft-DIAMOND"
amount: 3
restore: 200
disabled_display:
name_prefix: "<red>[已损坏] "
lore_append:
- ""
- "<red>此装备已损坏,无法使用。"
- "<gray>使用修复材料点击此物品进行修复。"
on_disabled:
- 'sendmessage text="<red>你的装备已损坏!"'
- 'playsound sound=ENTITY_ITEM_BREAK volume=1 pitch=0.5'
on_repaired:
- 'sendmessage text="<green>装备修复成功!"'
- 'playsound sound=BLOCK_ANVIL_USE volume=1 pitch=1.2'