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)。