Smeltery
熔炉——本 mod 的核心多方块结构。⚠️ 已订正:原文「Max size 7×7×7」对常量的语义理解有误,且未提及「必须至少有一个岩浆槽」这一硬性判定条件。
结构
| 角色 | 方块注册名 | TileEntity |
|---|---|---|
| 控制器 | TConstruct:Smeltery |
SmelteryLogic(IMasterLogic) |
| 从属(必需) | TConstruct:LavaTank |
LavaTankLogic(IServantLogic) |
| 从属 | TConstruct:SearedBlock |
CastingTableLogic / FaucetLogic / CastingBasinLogic |
| 从属 | TConstruct:CastingChannel |
CastingChannelLogic |
| 墙壁材料 | TConstruct:SearedBrick |
无 |
| 观察窗 | TConstruct:GlassBlock |
无 |
已订正 1:原文写「Controller: SmelteryLogic tile entity」——把逻辑类当成方块。控制器方块是
TConstruct:Smeltery(类SmelteryBlock),SmelteryLogic是它的 TileEntity。 已订正 2:原文称「Drains: SmelteryDrainLogic」并列为独立方块。SmelteryDrainLogic确实存在(GameRegistry.registerTileEntity(SmelteryDrainLogic.class, "TConstruct.Smeltery_Drain")),但它是 TileEntity 而非已注册的独立方块,原文表述易误导。 已订正 3:原文遗漏下界变体TConstruct:SmelteryNether(独立注册名,TinkerSmeltery.java:562)。 modid 实测为TConstruct(TConstruct.java:129)。
尺寸与几何
已订正:原文写「Max size: 7×7×7(MAX_SMELTERY_SIZE = 7)」——对该常量的语义理解有误。
MAX_SMELTERY_SIZE = 7(SmelteryLogic.java:63)在源码中只用作向四周探测空气的循环上界,不是「立方体边长 7」:
for (int i = 1; i < MAX_SMELTERY_SIZE; i++) // don't check farther than needed
alignInitialPlacement()(SmelteryLogic.java:714-756)从控制器朝内那一格出发,分别向 ±X、±Z 交替探测空气格直到撞墙(记录 xd1/xd2/zd1/zd2),再把控制器平移并对齐到内腔中心。
因此真实行为是:
| 属性 | 正确描述 |
|---|---|
| 尺寸 | 可变、随已建墙体自动适配,非固定立方体 |
| 7 的含义 | 探测半径上界(源码注释「don’t check farther than needed」) |
| 居中 | 探测器壁差 > 1 时自动微调 x/z 使四壁差平衡 |
| 精确最大外廓 | 无法核实 — 源码未硬编码最大边长;该值由玩家所砌墙体与 MAX_SMELTERY_SIZE 探测上界共同决定 |
形成机制
- 自动检测:放置
TConstruct:Smeltery控制器后自动沿墙面探测与校验 checkValidStructure→checkSameLevel→checkBricksOnLevel(SmelteryLogic.java:776-860)- ⚠️ 硬性条件:必须至少 1 个岩浆槽——
return check && lavaTanks.size() > 0;(SmelteryLogic.java:859)。没有岩浆槽则整个结构判定失败,熔炉不成立 - 朝向由
alignInitialPlacement的 switch 决定(6 个朝向)
数值
| 数值 | 值 | 证据 |
|---|---|---|
MAX_SMELTERY_SIZE |
7(探测上界,非边长) | SmelteryLogic.java:63 |
MB_PER_BLOCK_CAPACITY |
ingotLiquidValue * 10 = 1440 mB/格 |
SmelteryLogic.java:64;ingotLiquidValue = 144 |
| 总容量公式 | getBlocksPerLayer() * MB_PER_BLOCK_CAPACITY |
SmelteryLogic.java:115 |
原文「Capacity: MB_PER_BLOCK_CAPACITY = ingotLiquidValue × 10 per block」表述正确,此处仅补上具体数值 1440 mB。
功能
熔炼矿石、浇铸金属与合金。液体伤害来源为 SmelteryDamageSource(熔融金属伤害)。
熔融金属种类
28 个 molten*Fluid 标识符:alubrass、aluminum、alumite、ardite、bronze、cobalt、copper、electrum、emerald、ender、enderium、glass、gold、invar、iron、lead、lumium、manyullyn、mithril、nickel、obsidian、quartz、shiny、signalum、silver、steel、stone、tin(另有 pigIronFluid,共 29)。
原文称「20+ molten metal registrations」——方向正确(实测 29 个)。 ⚠️ 但其中 mithril、enderium、lumium、signalum、invar、electrum、nickel、silver、lead、shiny 等来自其它 mod 的整合(如 TinkerMechworks / EnderIO / Thaumcraft),并非 TConstruct 自有材料。
⚠️ 幻觉模式规避提示:TConstruct 是上游库,为大量其它 mod 提供
addToolMaterial/addMoltenFluid等注册 API。审计时不可把这些整合方注册的材料当成 TConstruct 自家注册。TConstruct 自有材料仅 19 种,完整实测表见 ToolPart。 同类上游库条目:Tinkers-Defense、TinkersGregworks。 (另有一处上游库 ThaumicTinkerer 已登记在 relation.md,但data/thaumictinkerer/目录与分类页均尚未建立,故此处不建链接。)
限制
- 必须有 ≥1 个岩浆槽
- 控制器必须贴墙成腔,否则探测失败
- 液体容量随内腔格数线性增长,超出即溢出
接口
SmelteryLogic extends InventoryLogic implements IActiveLogic, IFacingLogic, IFluidTank, IMasterLogic(SmelteryLogic.java:61)
IMasterLogic— 主控方块IServantLogic— 从属方块IFacingLogic— 朝向IFluidTank— 液体存储(maxLiquid/currentLiquid)IActiveLogic— 激活状态
相关条目
- SmelteryBlock — 控制器方块
- LavaTankBlock — 岩浆槽(必需)
- CastingChannelBlock — 浇注通道
- GlassBlockConnected — 观察窗
- SearedSlab — 焦石台阶
- MaterialItem — 浇铸产物材料
- ToolPart — 部件与材料属性
- TAchievements —
smelteryMaker成就