覆盖模块 Override

整个 mod 的数值都可通过一组独立于主配置的覆盖文件改写,用于整合包做深度平衡。这是 IguanaOverride 提供的扩展点。

  • 模块:Override(脉冲 Override)
  • 默认状态:defaultEnable = false——覆盖模块默认关闭(由 PulsarCFG / Modules.cfg 控制)
  • 执行时机:FMLPostInitializationEvent(postInit)——必须在所有 mod 都注册完材料后执行
  • 分类:override/(8 个类)

类头注释给出的设计范围

/**
 * Allows to override: - All material properties - Mining Levels of all tools - Harvest Levels of all oredict Entries -
 * Harvest Levels of all blocks (overrides oredict)
 */

前置动作

new ForgeHooks();   // 触发 ForgeHooks 静态初始化,防止 initTools() 覆盖我们的改动

与 挖掘等级系统 中 modifyVanillaBlocks 开头做的事完全相同,注释:// new ForgeHooks() needed to avoid ForgeHooks.initTools() overwriting our changes。

5 组覆盖

doOverride(type, overrider) 对每组做两阶段处理:

  1. 用 <Type>Defaults.cfg 生成默认文件(overrider.createDefault)——失败时通过 IMCHandler.bigWarning 打印警告并记日志,不中断;
  2. 读入 <Type>Override.cfg(overrider.processConfig),有变更则 config.save() 写回。
type 文件 实现类 覆盖内容
Material MaterialOverride.cfg override/MaterialOverride.java 全部材料属性:挖掘等级、耐久、速度、攻击、手柄系数
Tool ToolOverride.cfg override/ToolOverride.java 所有工具(物品)的挖掘等级
Block BlockOverride.cfg override/BlockOverride.java 所有方块的挖掘等级(含 OreDict 分类)
BonusModifier BonusModifierOverride.cfg override/ModifierOverride.java 全部 随机奖励 权重与有用性标记
HarvestLevelNames HarvestLevelNameOverride.cfg override/HarvestLevelNameOverride.java 10 档 挖掘等级 的显示名与颜色

因此配置目录下会生成 10 个文件:5 个 *Defaults.cfg(只读参考)+ 5 个 *Override.cfg(实际生效)。

附加注册

MinecraftForge.EVENT_BUS.register(new ExtraHarvestLevelHandler());

override/ExtraHarvestLevelHandler 解决「同一方块部分 meta 需要工具」的漏洞,见 挖掘等级系统 的「混合等级方块的补充判定」一节。

BlockOverride 分类

BlockOverride.cfg 的 generaloredict 分类存放 10 档的通用 OreDict 材料名后缀(覆盖 HarvestLevelTweaks.oreDictLevels),oredict 分类存放完整的「前缀+材料 → 等级」组合(对应 8 个 oreDictPrefixes:ore, denseore, oreNether, denseoreNether, block, stone, brick, orePoor),blocks_<toolclass> 分类存放按工具类别划分的具体方块条目。

与主配置的关系

覆盖模块不改主配置。主配置的数值(见 各配置分类等条目)在覆盖模块关闭时生效;覆盖模块开启时,*Override.cfg 提供的值优先。

错误处理

所有 IOverride.processConfig 调用都包在 try { } catch (RuntimeException e) 中。IMCHandler.bigWarning 是 Tinkers’ 自己的告警通道(会打进日志并在某些情况下提示玩家),因此整合包写坏覆盖文件不会导致游戏崩溃。