工具部件限制 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):
- 若
Config.toolPartRestrictions == false→ 放行; - 对每条「部件 → 允许工具」规则,检查该部件是否被本次合成使用;
- 若被使用且目标工具不在允许列表 →
event.setCanceled(true),把「无法使用该部件」的提示塞进事件消息; - 客户端
PartRestrictionHandler负责在 GUI 中显示被禁用的部件。
与替换系统的关系
部件替换 会走同一套 IguanaModToolAssembly 组装逻辑,因此受限的部件在替换路径上同样会被拦截。
关闭方式
- 主配置
Restrictions设为false(全局关闭) - 直接编辑
config/iguanatweakstconstruct/restrictions.cfg增删规则
可覆盖
restrictions.cfg 是可由整合包直接改写的独立文件;PartRestrictionHandler 读取时对不存在的部件名静默跳过,不会中断加载。