LootGroup XML 文件格式

位置与发现

  • 扫描目录:config/TooMuchLoot/loot/(TooMuchLoot.java:47),递归包含 generated/
  • 文件过滤:只认 .xml(ChestLootLoader.FILTER,ChestLootLoader.java:35-41)
  • 目录为空时,serverStarting 会自动导出全部原版分类到 config/TooMuchLoot/loot/generated/,并建一个只读的 .firstrun.hidden 标记 (TooMuchLoot.java:92-101)

根元素

LootGroup(@XmlRootElement(name = "LootGroup"),LootGroupXML.java:13-15)。

根元素属性(LootGroupXML.java:17-27):

属性 类型 含义 备注
category String 目标 ChestGenHooks 的 key 例:pyramidDesertyChest、pyramidJungleDispenser(后者出现在源码注释里,CommandChestLoot.java:54)
loading_mode String OVERRIDE / ADD / REMOVE 缺省或非法 → OVERRIDE
count_min int 每次生成的最小堆数 直接透传给 ChestGenHooks 构造,不做 -1 归一化
count_max int 每次生成的最大堆数 同上

子元素 <loot>

LootGroupXML.LootEntry(LootGroupXML.java:43-62),属性:

属性 类型 含义
item String GameData 注册名,如 minecraft:diamond、Iron
damage int metadata / 耐久值,直接进 new ItemStack(item, 1, damage)(ChestLootItem.java:46)
nbt String NBT 文本,用 JsonToNBT.func_150315_a 解析(XMLDataBridge.java:66-77)
weight int 加权随机的权重,进 WeightedRandomChestContent.itemWeight
count_min int 单条物品最小堆数,缺省 -1
count_max int 单条物品最大堆数,缺省 -1

count_min / count_max 的 -1 会被 checkCountValues() 归一化,见同目录下的 loading_mode 三种加载模式。

NBT 解析失败

JsonToNBT 抛异常时只打 warning 并把该项的 nbt 置 null,该条目仍会被加入战利品表 (XMLDataBridge.java:69-77)——即 NBT 错的物品会变成"裸"物品而不是被跳过。

导出行为

generateFiles 导出的文件 loading_mode 一律写死为 OVERRIDE(ChestLootLoader.java:96), 并且会把无 tag 或空 tag 的 nbt 清成 null(ChestLootLoader.java:97-99)。 分类名会被 replaceAll("[^a-zA-Z0-9\\._]+", "_") 消毒后作为文件名 (ChestLootLoader.java:90-92)。已存在的同名文件会先 delete() 再写(ChestLootLoader.java:93)。