跳到主要内容

宝箱组 loot.yml

宝箱组让地图上某个箱子每一场都随机抽内容:打开时依权重抽几次,放进一个宝箱界面给玩家拿。可以每人一份、可以上锁(打倒 Boss 才打得开)。

loot.yml 是选用的,不用宝箱就不必建这个文件。

loot.yml
王座宝箱:
point: 王座宝箱
mode: personal
rolls: 3
condition:
- "{group:霜烬守卫:state} == done"
locked-message: "&c宝箱被寒冰封住了,先击败霜烬守卫。"
loot:
- { material: IRON_INGOT, amount: "2-5", weight: 30 }
- { material: GOLD_INGOT, amount: "1-3", weight: 20 }
- { material: DIAMOND, amount: 1, weight: 5, name: "&b冰封钻石" }

先在地图上放箱子​

  1. 在 编辑模式 里,地图上放一个箱子(普通箱子、陷阱箱、木桶、潜影盒都可以)。
  2. 用箱子工具点那个箱子、输入名称(例如 王座宝箱),points.yml 会多一个 type: chest 的点位。
  3. loot.yml 里用 point: 王座宝箱 指定它。

同一个名称可以点好几个箱子,它们都会用同一组设置(每个箱子各自抽、各自一份内容)。

设置项​

设置项类型默认说明
point点位名称宝箱组名称箱子的点位(别名 marker)
modepersonal / sharedpersonalpersonal 每个人打开都是自己的一份;shared 全队共用一份,先拿先得
rolls整数3抽几次(每次依权重抽一项)
condition条件清单或一行条件空全部成立才打得开(别名 conditions);可以写成清单,也可以只写一行:condition: "{v:钥匙} >= 3"。空 = 随时都能开
locked-message文字空打不开时显示的消息
title文字&8宝箱宝箱界面的标题
loot清单必填战利品,见下表

loot 的每一项​

键类型默认说明
weight小数1权重,越大越容易抽到
material物品种类放进宝箱的物品;不写 = 这一项只执行指令
amount数字或范围1数量,"1-3" = 1 到 3 个随机
name文字空物品名称;只有指令时,抽到会提示玩家「获得 名称」
lore文字清单空物品说明行
item-model文字空1.21.4+ 物品模型
custom-model-data整数0CustomModelData
glow是 / 否false附魔光泽
commands指令清单空抽到时以控制台执行;{player} = 打开宝箱的人、{uuid} = 他的 UUID

概率怎么算:每一次抽,某一项被抽中的概率 = 它的 weight ÷ 全部 weight 的总和。 上面的例子总和是 55:铁锭 30/55 ≈ 55%、金锭 20/55 ≈ 36%、钻石 5/55 ≈ 9%,抽 3 次,同一项可能被抽到好几次。

loot.yml
秘宝箱:
point: 秘宝箱
mode: personal
rolls: 2
title: "&6&l古殿秘宝"
loot:
- { material: EMERALD, amount: "3-8", weight: 40 }
- material: ENCHANTED_BOOK
amount: 1
weight: 10
name: "&d古老的魔导书"
lore: ["&7记载着失传的冰系咒语"]
glow: true
- commands: ["mi give SWORD FROST_BLADE {player} 1"]
name: "&b寒冰剑"
weight: 2
- commands: ["eco give {player} 300"]
name: "&e300 金币"
weight: 20

打开时发生什么​

  1. 玩家右键箱子。
  2. 检查 condition:不成立 → 显示 locked-message、播放上锁音效,打不开。每次打开都会重新检查。
  3. 第一次打开时抽内容:抽 rolls 次,物品放进宝箱界面随机的格子;抽到的 commands 马上对这位玩家执行。
  4. 打开宝箱界面(27 格),玩家自己把东西拿走。
  • personal:每个人第一次打开时各自抽一份,互不影响。
  • shared:第一个打开的人抽,之后所有人打开的都是同一份,先拿先得。
  • 抽出来的内容整场都留着:关掉再打开,拿剩的东西还在。
  • 地图上箱子本身放的东西不会被用到,箱子方块也不会被改动。
shared 宝箱的指令奖励

commands 是在抽的那一刻对「打开的人」执行。shared 模式只有第一个打开的人会抽,所以指令奖励只有他拿得到。 想让每个人都拿到指令奖励,用 mode: personal。

什么时候能开​

  • 副本进行中都能开(condition 允许的话)。
  • 通关后的结算时间(end-delay,默认 20 秒)也能开,这正好用来放 Boss 的奖励宝箱: condition 写 {group:Boss组:state} == done,打倒 Boss 后在结算时间内打开。
  • before.yml 与倒数期间、失败之后都打不开。
loot.yml
王座宝箱:
point: 王座宝箱
condition:
- "{group:霜烬守卫:state} == done"
locked-message: "&c宝箱被寒冰封住了,先击败霜烬守卫。"
loot:
- { material: DIAMOND, amount: "1-2", weight: 1 }
end.yml
clear:
- "message &6王座宝箱的寒冰融化了,结算时间内记得打开!"

condition 可以用任何条件,例如收集够钥匙:{v:钥匙} >= 3、所有人都在场:players >= 2。见 条件。

没写进 loot.yml 的箱子​

地图上其他的箱子照 config.yml 的 chest-mode 处理:

chest-mode效果
vanilla(默认)一般箱子,全队共用,拿走就没了
personal每个人打开都是自己的一份,内容 = 地图上箱子原本放的东西
explore右键直接把箱子里的东西捡进背包,每场每个箱子只能捡一次(DungeonPlus 的箱子探索)

所以「固定内容、每人一份」的箱子不必写 loot.yml:在地图上把东西放进箱子,chest-mode: personal 就好。 每一场都会重新贴地图,箱子内容每场都是满的。

与 DungeonPlus 对照​

DungeonPlus 没有随机宝箱,地图上的箱子就是原版箱子(或用箱子探索直接拾取)。云副本对应:

想要写法
原版箱子chest-mode: vanilla
箱子探索(右键直接拾取)chest-mode: explore
每人一份、固定内容chest-mode: personal
每场随机抽、可以上锁loot.yml