配置文件
基本信息
| 属性 | 值 |
|---|---|
| 文件名 | config/tmechworks.cfg(event.getSuggestedConfigurationFile(),modid 原样小写) |
| 加载类 | lib/ConfigCore.java(32 行,全文只有一个配置项) |
| 加载时机 | TMechworks.preInit 第一行(TMechworks.java:52) |
| 配置项总数 | 1 |
| 分类 | drawbridge |
唯一配置项
drawbridge.blacklist(字符串列表):
drawbridgeBlackList = conf.getStringList(
"blacklist", "drawbridge", drawbridgeBlackList,
"Add block names that should not be placed from the drawbridge");
| 语法 | 示例 | 解析结果 |
|---|---|---|
modid:blockname |
TMechworks:redstoneMachine |
指定 mod 的方块 |
blockname |
lavaTank |
补 minecraft: 前缀 |
| 无法解析 | a:b:c |
打日志后跳过 |
解析流程(lib/TMechworksRegistry.java:231-259):
for (String blockNameCompond : list) {
String[] parts = blockNameCompond.split(":");
String modId = parts.length > 1 ? parts[0] : "minecraft";
String blockName = parts.length > 1 ? parts[1] : blockNameCompond;
...
if (!result) TMechworks.logger.warn("Invaild block: " + blockNameCompond);
}
硬编码默认黑名单
除配置文件外,CommonProxy.init()(common/CommonProxy.java:44-51)在 init 阶段无条件追加 3 项:
| 条目 | 来源 | 目的 |
|---|---|---|
MechContent.redstoneMachine |
本 mod 自身 | 防止 Drawbridge 自我放置(递归造桥) |
TinkerSmeltery.lavaTank |
Tinkers’ Construct | 防止搬运 TCon 熔岩罐 |
TinkerSmeltery.lavaTankNether |
Tinkers’ Construct | 同上(下界变体) |
这 3 项无法通过配置关闭 —— 配置文件的内容在 preInit 读取,3 项在 init 追加,后者必然生效。
数值
| 数值 | 值 |
|---|---|
| 配置文件 | config/tmechworks.cfg |
| 加载类行数 | 32(lib/ConfigCore.java) |
| 配置项数 | 1 |
| 键 | drawbridge.blacklist |
| 类型 | 字符串列表(getStringList) |
| 分类 | drawbridge |
| 默认值 | 空数组 new String[0] |
| 硬编码黑名单 | 3 项(不可配置) |
| 解析失败行为 | logger.warn 后跳过 |
| 黑名单容器 | private static List<ItemBlock> |
| 查询 API | TMechworksRegistry.isItemDBBlacklisted(ItemBlock) |
| 运行时追加 API | addItemToDBBlackList(Item) / addItemToDBBlackList(Block) |
源码缺陷
- 拼写错误:
"Invaild block: " + blockNameCompond(lib/TMechworksRegistry.java:256)——Invaild应为Invalid;blockNameCompond(Comppond 拼写错误)在全仓 10+ 处沿用,改名成本高。 - 解析错误只 warn 不 throw(
:256):配置项写错时游戏正常启动但黑名单静默失效,玩家会遇到「明明写了黑名单却仍能放置」的困惑。日志是唯一线索。 - 空配置项不处理:
getStringList对空字符串会尝试解析""→ 打出Invaild block:的无意义警告。源码无isEmpty()短路。 ConfCore的conf.load()/conf.save()无异常处理(lib/ConfigCore.java:13,17):文件损坏时Configuration.load()抛ConfigurationException会直接冒泡到 FML 的 preInit 处理器,导致整个 mod 加载失败。对比 Thaumic Machina 的Config.loadConfig至少包了 try-catch。- 无热重载:
drawbridgeBlackList是静态字段,只在preInit从配置读一次;CommonProxy.init()的 3 项硬编码在init追加。修改配置必须重启。 ConfigCore类名与文件名不一致:类叫ConfigCore而文件处理只有loadDrawbridge一个私有方法;若将来加配置项需再加loadXxx,类名已名不副实。- 日志输出用
TMechworks.logger而非 Mantle/FML 日志(lib/ConfigCore.java:12,18):与其他 mod 的日志格式不一致,混在 FML 日志中不易识别。
相关条目
- Drawbridge 放置规则 - 黑名单在本条目实际生效的两个位置
- Drawbridge -
isItemValidForSlot调用isItemDBBlacklisted - Mesh Filter - 不受本配置影响(黑名单只作用于 Drawbridge 槽)