IronTankMinecarts

[!INFO] Git Commit: b013486 | Updated: 2025-09-20

IronTankMinecarts(Iron Tank Minecarts,modid irontankminecarts)是 GTNH / Minecraft 1.7.10 下一个极小的附属 mod,由 2ndDerivative 维护。它只做一件事:把 Irontanks 的每一种罐体做成一个可放在铁轨上的运输罐车。mod 本身不注册任何方块、不含 TileEntity、不含 GUI 处理器、不提供指令与配置项,全部内容是 10 个物品 + 10 个实体。

依赖声明为 @Mod(dependencies = "required-after:Forge@[10.10,);required-after:irontank");gradle.properties 目标为 Minecraft 1.7.10 / Forge 10.13.4.1614;dependencies.gradle 声明编译期依赖 Irontanks 1.4.2 与 Railcraft 9.16.33。源码直接继承 Railcraft 的罐车基类 mods.railcraft.common.carts.EntityCartTank,但 Railcraft 并未写入 @Mod 的 dependencies 字符串。

变体来源:由枚举穷举,不是配置项

变体集完全由 Irontanks 的 TankType 枚举决定,既不是本 mod 的配置项,也不是本 mod 自己定义的等级表:IronTankMinecarts.preInit 遍历 TankType.values(),跳过 GLASS 后为每个剩余值注册一个物品。TankType 共 11 个值,去掉 GLASS(capacity = 0)后恰好得到 10 个变体,与 minecarts/types/ 下的 10 个实体类一一对应。

命名有一处不一致:IronTankMinecarts.tankTypeName() 覆写了两个枚举值的注册名后缀 ——

TankType 枚举 capacity 注册名/贴图后缀 实体类 物品/实体英文名
COPPER 27 copper EntityMinecartCopperTank Copper Tank Cart
IRON 32 iron EntityMinecartIronTank Iron Tank Cart
GOLD 48 gold EntityMinecartGoldTank Gold Tank Cart
SILVER 43 steel EntityMinecartSteelTank Steel Tank Cart
DIAMOND 64 diamond EntityMinecartDiamondTank Diamond Tank Cart
OBSIDIAN 64 obsidian EntityMinecartObsidianTank Obsidian Tank Cart
GLASS 0 — 不存在(continue 跳过) —
EMERALD 96 aluminium EntityMinecartAluminiumTank Aluminium Tank Cart
STAINLESSSTEEL 128 stainlesssteel EntityMinecartStainlessSteelTank Stainless Steel Tank Cart
TITANIUM 256 titanium EntityMinecartTitaniumTank Titanium Tank Cart
TUNGSTENSTEEL 512 tungstensteel EntityMinecartTungstensteelTank Tungstensteel Tank Cart

即:枚举 SILVER 的罐车叫 钢罐车,枚举 EMERALD 的罐车叫 铝罐车。合成时这两者分别用 irontank:silverTank 与 irontank:emeraldTank。

各变体究竟差在哪

穷举 10 个实体类与 10 个物品类后,源码层面的差异只有三项:

  1. TankType 常量 —— 决定注册名后缀、贴图、合成用罐体方块、实体 ID。
  2. 容量系数 TankType.capacity —— 27 ~ 512,见 容量设定 的公式与假设说明。
  3. 黑曜石的爆炸免疫 —— EntityMinecartObsidianTank 是唯一额外覆写方法的类。

其余全部相同,没有任何一项随变体改变:

关注点 结论
速度 / 摩擦 / 滚动阻力 本 mod 未覆写,10 种罐车完全一致(沿用 Railcraft 基类)
GUI 行为 本 mod 未覆写任何 doInteract/GUI 方法,10 种一致
升级(upgrade)支持 不存在升级槽位或升级模块机制
装填速率 本 mod 从未引用 getTankCartFillRate(),不由本 mod 决定
生命值 / 掉落 / 生成条件 本 mod 未覆写;罐车是纯运输实体,无生成条件
碰撞箱 继承自 Railcraft 基类,本 mod 未覆写

实体 ID 直接取 TankType.ordinal()(COPPER=3、IRON=0、GOLD=1、SILVER=4、DIAMOND=2、OBSIDIAN=5、EMERALD=7、STAINLESSSTEEL=8、TITANIUM=9、TUNGSTENSTEEL=10),追踪范围 80,更新频率 3 tick。实体注册不是硬编码列表,而是 EntityMinecartTankAbstract 的静态块用 Guava ClassPath 扫描 minecarts/types 包、反射调用 (World) 构造器读取 tankType() 后完成。

合成

全部 10 种都是同一种两格有形状配方,唯一差别是罐体方块:

 T      T = 对应的 Irontanks 罐体方块
 M      M = 矿车(Minecraft 原版)

渲染

ClientProxy.postInit 为每个物品注册 Railcraft 的 RenderCartItemFiltered(RendererType.Tank),并为每个实体类向 CartModelManager.modelsContents 放入一个 ModelSimpleCube,贴图取自 irontankminecarts:textures/entities/carts/<后缀>.png,关闭背面剔除。语言文件提供 en_US 与 de_DE 两套名称。

实体列表

物品列表

游戏设定列表