配置文件

基本信息

属性 值
文件名 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 日志中不易识别。

相关条目