使用案例
这页不讲太多概念,只给你一批能直接改、能直接抄、能直接测试的示例。
建议把它当成:
- 配置模板库
- 快速起步参考
- 调试时的对照样本
使用这些案例前先做什么
- 把示例放进工作空间,例如:
plugins/Ratziel/workspace/examples.yml
- 执行重载:
/r reload
- 给予自己物品:
/r-item give 物品名
案例 1:最简单的基础物品
适合验证:
- 工作空间是否正常加载
- 命令是否能拿到物品
- 名称和 lore 是否正常显示
BlackApple:
item:
material: APPLE
name: '<black>Bad Black <red>Apple'
lore:
- '<white>But it tastes great!'
- '<gold>Mr.Black''s Apple <green>is so good!'
- '<blue>Let me press <key:key.jump> to jump!'
unbreakable: true
测试命令:
/r reload
/r-item give BlackApple
案例 2:右键发消息的交互物品
适合验证:
- 动作系统是否正常
onRight是否会触发
MessageStick:
item:
material: STICK
name: '<yellow>消息魔杖'
lore:
- '&7右键后给自己发一条消息'
action:
onRight:
- 'player.sendMessage("你右键了这根魔杖")'
测试命令:
/r reload
/r-item give MessageStick
拿到后右键即可测试。
案例 3:击杀计数武器
适合验证:
- 数据层
onKill触发器- 动态标签显示
KillCounter:
item:
material: DIAMOND_SWORD
name: '<blue>击杀之剑 <gray>[{dynamic:data:kills}]'
lore:
- '&7当前击杀数:{dynamic:data:kills}'
data:
kills: 0
action:
onKill:
- 'kills = item.get("kills") || 0'
- 'item.set("kills", kills + 1)'
测试方法:
- 获取物品
- 用它击杀生物
- 观察名字和 lore 中的数字变化
案例 4:认主物品
适合验证:
onDroponPick- 数据写入与读取
OwnedSword:
item:
material: DIAMOND_SWORD
name: '<aqua>认主之剑'
lore:
- '&7主人:{data:owner:未绑定}'
data:
owner: ''
action:
onDrop:
- 'if (!(item.get("owner") || "")) item.set("owner", player.getName())'
- 'dropped.setCustomName((item.get("owner") || player.getName()) + " 的物品")'
- 'dropped.setCustomNameVisible(true)'
onPick:
- 'owner = item.get("owner") || ""'
- 'if (owner && player && owner != player.getName()) event.setCancelled(true)'
说明:
- 第一次丢出时记录主人
- 被拾取时,如果不是主人就取消拾取
这是一个很适合继续扩展成“绑定装备”的基础案例。
案例 5:模板复用武器
适合验证:
templateinherit- 模板动作链
BaseWeapon:
template:
material: DIAMOND_SWORD
unbreakable: true
hideFlags:
- HIDE_ATTRIBUTES
- HIDE_UNBREAKABLE
lore:
- '&7这是一把基础武器'
action:
onAttack: 'player.sendMessage("基础攻击效果")'
FireSword:
item:
inherit: BaseWeapon
name: '<gold>烈焰之剑'
lore:
- '&c附带火焰之力'
action:
onAttack:
- 'player.sendMessage("烈焰灼烧了目标")'
测试重点:
- 能否正常生成
FireSword - 攻击时是否会依次执行模板动作和物品自身动作
案例 6:成长型武器
适合验证:
propsdatadefine- 动态显示
- 动作与数据联动
GrowthSword:
item:
material: DIAMOND_SWORD
name: '<gold>成长之剑'
lore:
- '&7主人:{data:owner:未绑定}'
- '&7击杀数:{dynamic:data:kills}'
- '&7等级:{data:level:1}'
- '&7评级:{define:rank}'
- '&7基础伤害:{props:base_damage}'
props:
base_damage: 12
upgrade_need: 10
data:
owner:
$js: 'player.getName()'
kills: 0
level: 1
define:
rank:
$js: 'kills >= 100 ? "传说" : (kills >= 10 ? "稀有" : "普通")'
action:
onKill:
- 'kills = item.get("kills") || 0'
- 'item.set("kills", kills + 1)'
这个案例是后续扩展成长武器、任务武器、数值武器的很好起点。
案例 7:玩家专属显示物品
适合验证:
- 动态 PAPI 标签
- 动态数据标签
PlayerCard:
item:
material: PAPER
name: '<green>{dynamic:papi:player_name} 的信息卡'
lore:
- '&7记录主人:{data:owner:未知}'
- '&7当前查看者:{dynamic:papi:player_name}'
- '&7等级:{dynamic:papi:player_level}'
data:
owner:
$js: 'player.getName()'
这个案例很适合做:
- 身份卡
- 玩家面板物品
- 菜单中的玩家信息展示
推荐测试顺序
如果你是第一次批量试这些案例,建议顺序如下:
BlackAppleMessageStickKillCounterBaseWeapon+FireSwordGrowthSwordOwnedSwordPlayerCard
这样会更容易定位问题,因为每个案例只比前一个多一层能力。
遇到问题时先查什么
1. 先重载
/r reload
2. 再看元素有没有加载
/r element list
3. 再试着给物品
/r-item give 物品名
4. 如果怀疑数据没写进去,就查 NBT
/r-nbt view main-hand
下一步
如果你已经能看懂这些案例,建议配合阅读: