工具部件限制 Part Restrictions

限制某些工具部件不能被用在特定工具上(例如禁止把镐头装到剑上),防止出现超规格的畸形组合。

  • 模块:Restrictions(脉冲 Restrictions)
  • 主类:iguanaman.iguanatweakstconstruct.restriction.IguanaPartRestriction
  • 实现:restriction/RestrictionHelper.java、restriction/PartRestrictionHandler.java
  • 总开关:toolPartRestrictions(配置键 Restrictions,默认 true)

配置结构

限制通过一份独立的 restrictions.cfg 文件管理(不在主 IguanaTweaksTConstruct.cfg 内),分类为 PartRestrictions,键值对形式为:

partRestriction:<部件注册名>=<允许的工具注册名列表,逗号分隔>

RestrictionHelper.defaultRestrictions 是内置的保守默认:

alt.<各种部件> = Pickaxe,Axe,Shovel,Mattock

即各种手柄/绑定件(alt.rod, alt.stonebow, alt.limbs, alt.spruce_handle, alt.battle.handle, alt.fishing.rod, alt.chain, alt.tether, alt.wooden.core, alt.copper.tine, alt.steel.tine, alt.iron.tine, alt.wooden.core 等)只允许装到镐、斧、锹、Mattock 上。

defaultAllowed 则是白名单兜底:如果某部件的注册名在 defaultAllowed 中(wooden.toolcore、stone.toolcore、iron.toolcore、flint.toolcore、gold.toolcore、diamond.toolcore、slime.toolcore、bone.toolcore、flesh.toolcore 等工具核心),则不受任何限制。

判定流程

IguanaPartRestriction 监听 ToolCraftEvent.NormalTool(优先级 HIGHEST,receiveCanceled = false):

  1. 若 Config.toolPartRestrictions == false → 放行;
  2. 对每条「部件 → 允许工具」规则,检查该部件是否被本次合成使用;
  3. 若被使用且目标工具不在允许列表 → event.setCanceled(true),把「无法使用该部件」的提示塞进事件消息;
  4. 客户端 PartRestrictionHandler 负责在 GUI 中显示被禁用的部件。

与替换系统的关系

部件替换 会走同一套 IguanaModToolAssembly 组装逻辑,因此受限的部件在替换路径上同样会被拦截。

关闭方式

  • 主配置 Restrictions 设为 false(全局关闭)
  • 直接编辑 config/iguanatweakstconstruct/restrictions.cfg 增删规则

可覆盖

restrictions.cfg 是可由整合包直接改写的独立文件;PartRestrictionHandler 读取时对不存在的部件名静默跳过,不会中断加载。