loading_mode 三种加载模式
XML 文件的 loading_mode 属性决定该文件如何改写战利品表。取值来自枚举
dmillerw.tml.data.LootLoadingMode(LootLoadingMode.java:6-11),只有三个值:
| 枚举值 | 语义 | 源码 |
|---|---|---|
OVERRIDE |
用该文件的整张表替换目标分类的原版表 | ChestLootLoader.java:138-144 |
ADD |
把文件内每一条物品追加到目标分类 | ChestLootLoader.java:145-148 |
REMOVE |
按 ItemStack 从目标分类中删除匹配项 |
ChestLootLoader.java:149-152 |
解析与默认值
XMLDataBridge.parseToChestLootCat 用 LootLoadingMode.valueOf() 解析字符串,
解析失败(含未提供该属性导致 mLoading_mode == null 的情况)时回退到 OVERRIDE
并打一条 warning(XMLDataBridge.java:47-56)。
关键行为差异
OVERRIDE只认第一份。loadFiles遍历目录里的 XML(顺序取决于File.listFiles), 同一个category再次以OVERRIDE出现时,只打logOverrideError警告并丢弃, 后面的文件不生效(ChestLootLoader.java:139-144)ADD/REMOVE可叠加多份。它们分别收集到toAdd/toRemove两个SetMultimap,在所有文件解析完后统一应用(ChestLootLoader.java:167-175)OVERRIDE的表是直接putAll进原始 map(ChestLootLoader.java:160-162), 绕过ChestGenHooks.addItem,因此覆盖后原版物品彻底消失ADD走ChestGenHooks.getInfo(key).addItem(...),REMOVE走.removeItem(...), 两者作用在被覆盖之后的表上(ChestLootLoader.java:167-175)
数量缺省值
每条 loot 先过 ChestLootItem.checkCountValues()(ChestLootLoader.java:134-136):
count_min 与 count_max 都为 -1 → 两者设为 1;只有一个为 -1 → 用另一个的值补齐
(ChestLootItem.java:32-43)。
⚠️
ChestLootCategory也有同名同逻辑的checkCountValues()(ChestLootCategory.java:46-57), 但loadFiles从未调用它——分类级的count_min/count_max直接取 XML 原值, 不做-1归一化。