loot_tables/ → loot_table/,advancements/ → advancement/,recipes/ → recipe/。目录名写错的数据包会被静默忽略, 不报错也不生效 —— 这是最难排查的一类问题。设计自定义掉落:物品池、权重、附魔函数。
免费在线数据更新至 26.2
正在加载工具…
一张战利品表由若干个 pools 组成,每个池独立抽取; 池里的 entries 按权重竞争,抽中的条目再经过 functions 加工(数量、附魔、NBT)。
# 数据包路径(1.21 起目录名从复数改为单数)
data/<命名空间>/loot_table/<名字>.json
# 用指令直接给玩家一份战利品
loot give @s loot minecraft:chests/simple_dungeon
# 把战利品放进一个箱子
loot insert ~ ~ ~ loot my:treasure
# 让方块被破坏时使用自定义表(先 setblock 再改 NBT)
data merge block ~ ~ ~ {LootTable:"my:treasure"}loot_tables/ → loot_table/,advancements/ → advancement/,recipes/ → recipe/。目录名写错的数据包会被静默忽略, 不报错也不生效 —— 这是最难排查的一类问题。同一个池里每抽一次只出一个条目。想让多种物品同时出现,请拆成多个 pool。
放进数据包的 data/<命名空间>/loot_table/<表名>.json。目录名从 24w21a(1.21 开发版)起改成了单数 loot_table,1.20.6 及更早必须用复数 loot_tables,而且没有兼容回退,放错目录会被直接忽略且不报错。数据包整体放在存档的 datapacks 文件夹下,进游戏 /reload 生效,再用 /loot give @s loot <命名空间>:<表名> 验货。路径必须全小写,不能有空格和中文。
命名空间填 minecraft、表名填 entities/<实体id>,比如 entities/zombie,你的文件就会整张覆盖原版那张表。想在保留原版掉落的基础上加东西,需要先把原版 JSON 抄过来再追加奖池。做怪物掉落别忘了加 enchanted_count_increase 函数(1.21 之前叫 looting_enchant),否则抢夺附魔对你新加的掉落完全无效。
每一次抽取都从同一个奖池里按权重随机挑 1 个条目,某条目的概率等于它的权重除以该奖池所有条目权重之和。想做「30% 概率掉钻石」,标准写法是加一个空条目吃掉剩余权重,比如钻石权重 3、空条目权重 7。抽取次数决定抽几轮,不同奖池之间互相独立、各自结算,所以多个奖池是叠加而不是竞争。