Config

基本信息

属性 值
处理器 openmodularturrets.handler.ConfigHandler
配置文件 event.getSuggestedConfigurationFile()(ModularTurrets.java:52)
读取时机 preInit 最开始,先于 Items.init() / Blocks.init()(ModularTurrets.java:51-57)
配置项总数 约 60 个键,覆盖 9 个分类
写入 仅在 config.hasChanged() 时 config.save()(ConfigHandler.java:328-330)

读取顺序至关重要:Blocks.init() 里每个炮塔是否注册、每种炮塔的爆炸抗性、底座的能量上限,全部在构造 Block 时读取 ConfigHandler 的静态字段。因此配置必须在方块注册前完成读取 —— ModularTurrets.preInit 的调用顺序保证了这一点(ConfigHandler.init 在 Blocks.init 之前 2 行)。

分类总览

分类 键数 内容
TurretBaseTierOne – TurretBaseTierFive 15 各等级底座的最大储能 / 最大 IO / 爆炸抗性
TurretDisposable、TurretPotatoCannon、TurretMachineGun、TurretIncendiary、TurretGrenade、TurretRelativistic、TurretRocket、TurretTeleporter、TurretLaser、TurretRailgun 10 × 6 每种炮塔的射程 / 射击间隔 / 伤害 / 精度 / 耗能 / 是否启用
upgrades 4 射程 / 射速 / 精度 / 效率的每件加成
addons 3 太阳能发电 / 红石反应堆 / 回收概率
Expanders 5 动力扩展器各等级容量
miscellaneous 12 告警、声音、破坏性、战斗、配方选择等
ModCompatibility 5 跨模组集成开关与潜势转换比
ModCompatability 3 EU 支持、离线模式、EU/RF 比
GlobalTargetingParameters 4 全局目标策略与索敌节流

ModCompatability 拼写错误:兼容分类名在源码中没有字母 i(ModCompatability),与 ModCompatibility(正确拼写,用于另外 5 个键)不是同一个分类。配置文件中会出现两个相似的节名。来源:ConfigHandler.java:322-326 vs :281-295。

炮塔数值

10 种炮塔的默认值见 Turret Heads。每组的键名固定为 Range、FireRateCooldown、Damage、Accuracy、PowerUsage、Enabled。

Enabled 决定注册本身:Blocks.init() 用 if (ConfigHandler.getXxxSettings().isEnabled()) 包住方块注册(Blocks.java 中 10 个 if 块)。把某炮塔的 Enabled 设为 false 等于该炮塔在世界里完全不存在:方块不注册、TileEntity 注册成为无用条目、其专属配方也不注册。

Accuracy 语义(配置原文,各组重复):“Value between 0 - 100, where 0 will miss 0% of the time over a distance of 10 blocks, subject to standard deviation.”

底座数值

分类 MaxCharge MaxIo BlastResistance
TurretBaseTierOne 500 50 10
TurretBaseTierTwo 50 000 100 10
TurretBaseTierThree 150 000 500 10
TurretBaseTierFour 500 000 1 500 10
TurretBaseTierFive 10 000 000 5 000 10

来源:ConfigHandler.java:76-94。

miscellaneous 分类

键 默认 作用
warningDistance 5 炮塔射程外多远开始警告玩家
Enable/Disable turret alarm sound. True=enabled, false=disabled true 炮塔告警音开关
Should turret warn message be displayed? true 聊天栏警告开关
Are turrets/turret bases breakable by anyone? false 为 false 时底座调用 setBlockUnbreakable()
Can turrets damage their trusted players when they accidentally hit them? true 是否误伤受信任玩家
Can rockets fired by the rocket launcher turret home on targets ? false 火箭是否追踪
Can rockets fired by the rocket launcher turret hurt the Ender Dragon? false 火箭能否伤末影龙
Should we generate dungeon loot? true 是否向地牢结构注入战利品
Which recipes should we do? (auto, enderio, thermalexpansion, mekanism, vanilla) auto 配方处理器选择
Turret sound volume percentage (Between 0 - 100) 40 源码中先 .getInt() 再 / 10,故实际系数为 4.0
Should turret bases be camouflage-able with normal blocks? true 底座伪装
Can OPs access all turrets? false OP 权限覆盖

来源:ConfigHandler.java:243-305。

ModCompatibility / ModCompatability 分类

分类 键 默认
ModCompatibility Should we enable items that integrate with Thaumcraft? true
ModCompatibility Should we enable items that integrate with ComputerCraft/OpenComputers? true
ModCompatibility Enable IGW Mod notification true
ModCompatibility Potentia Addons' RF conversion ratio per 1 essentia 500
ModCompatibility How much essentia the Potentia Addon can store 20
ModCompatability Can turrets be powered with EU? true
ModCompatability Enable offline mode support?(warning, makes turrets fairly unsafe) false
ModCompatability EU to RF Ratio 8.0

来源:ConfigHandler.java:281-295、:322-326。

无读取者的死配置

以下字段被写入但没有任何读取者,属于死代码:

字段 状态 证据
shouldDoComputerIntegration 声明 + 赋值,0 处读取 grep -rn 'shouldDoComputerIntegration' --include=*.java src/ 仅 2 处命中:字段声明(ConfigHandler.java:16)与赋值(:284)
ModCompatibility.GT5uNHLoaded 声明 + 赋值,0 处读取 grep -rn 'GT5uNHLoaded' --include=*.java src/ 仅 2 处命中:声明(ModCompatibility.java:27)与赋值(:62)

由此导致的实际缺陷(已核实):shouldDoComputerIntegration 的读者本应是 Addon - Serial Port 与 ComputerRecipeHandler 的开关,但 RecipeHandler.java:363-364 写的是 ConfigHandler.shouldDoThaumcraftIntegration:

if ((ModCompatibility.ComputercraftLoaded || ModCompatibility.OpenComputersLoaded)
        && ConfigHandler.shouldDoThaumcraftIntegration) {
    ComputerRecipeHandler.init();
}

结果是:关掉泰拉的物品集成会连带关掉计算机集成,反之亦然;Should we enable items that integrate with ComputerCraft/OpenComputers? 这个配置项对配方完全无效。注意附加件物品本身的注册(Items.java:105)判的是 ModCompatibility.ComputercraftLoaded \|\| OpenComputersLoaded,不受该错误影响。本条按源码原文记录。

ModCompatibility.java:63 另有一处 if (Loader.isModLoaded("gregtech")) 只打日志、不赋值,与相邻的 GT5uNHLoaded 赋值并列存在,源码注释为 “I feel like it should still say this with GT6”。

指令

模组注册 1 条服务端指令(ModularTurrets.java:76-78,FMLServerStartingEvent):

指令 用法 说明
/omtchangeowner <dimension> <x> <y> <z> <new owner> 改写指定坐标炮塔底座的主人

来源:CommandChangeOwner.java:19-31。参数数量必须恰为 5,否则输出用法文本。

相关条目