Long Drawbridge

基本信息

属性 值
注册名 TMechworks:redstoneMachine
metadata 3
方块类 RedstoneMachine(与 Drawbridge 同一方块类)
TileEntity DrawbridgeLogic(与 meta 0 完全相同的类)
唯一差异 createNewTileEntity 中调用 logic.setMaximumExtension((byte) 64)
最大伸展 64 格(maxExtension = 64)
库存槽数 2(同 Drawbridge)
材质 / 硬度 / 步声 Material.iron / 12 / soundTypeMetal
GUI ID 0(getGui 的 case 0 与 case 3 共用 drawbridgeID)
伸/缩频率 每 5 tick 1 格
贴图 drawbridge_top_extended / drawbridge_side_extended / drawbridge_bottom_extended + 3 张 *_face_extended(索引 10–16)

机制

Long Drawbridge 不是独立的类,而是 RedstoneMachine.createNewTileEntity 中 meta 3 的一个特化分支:

case 3:
    DrawbridgeLogic logic = new DrawbridgeLogic();
    logic.setMaximumExtension((byte) 64);
    return logic;

(blocks/RedstoneMachine.java:104-107)

maxExtension 是 DrawbridgeLogic 的 byte 字段,默认 15,经 setMaximumExtension(byte) 修改。该值会写入 NBT(writeToNBT 的 tags.setByte("MaxExtension", maxExtension)),因此放置后拆掉重放仍保持 64。

功能与 Drawbridge 完全一致:红石激活逐格放置槽 0 的方块,取消时逐格收回。区别只有 3 点:

项 Drawbridge (meta 0) Long (meta 3)
maxExtension 15 64
贴图 drawbridge_*(索引 0–5) drawbridge_*_extended(索引 10–16)
getIcon 偏移 offset = 0 offset = 10

数值

数值 值
metadata 3
最大伸展 64 格(setMaximumExtension((byte) 64))
库存槽数 2
伸/缩频率 每 5 tick 1 格
全程耗时 64 格 × 5 tick = 320 tick = 16 s
GUI ID 0(与 meta 0 共用)
假玩家 FakePlayerLogic(Player.Drawbridge)
越界检查 yPos < 0 或 yPos >= 256 → 回退(extension--)
NBT 键 MaxExtension(byte)
亮度 与 meta 0 相同:读槽 1 的方块亮度
硬度 12
贴图索引 getTextureIndex(side) + 10(side 5 固定用 icons[13])

交互

触发 行为
红石脉冲 每 5 tick 伸 1 格,直到槽 0 空或达 64 格或触及世界边界
红石撤除 每 5 tick 缩 1 格
右键 打开 GUI(ID 0),界面与 meta 0 相同
垂直放置 64 格 < 世界高度 256,可完整向上/向下展开

配方

common/MechRecipes.java:99-109,1 条无序(shapeless)配方,是 4 个 RedstoneMachine 变体中唯一不用工作台的:

材料 数量
ingotCobalt 3
ingotArdite 3
minecraft:redstone_block 1
redstoneMachine meta 0(普通 Drawbridge) 1

产出 redstoneMachine meta 3。TCon 手册无对应配方。

源码缺陷

  • meta 3 在 getIcon(int side, int meta) 与 getIcon(IBlockAccess, ...) 中走的是不同的分支(blocks/RedstoneMachine.java:172-175 vs :184-197):前者用固定偏移 +10,后者用 meta == 0 ? 0 : 10。逻辑等价但重复实现,易在后续修改时走偏。
  • getTextureNames() 共 17 项但索引 9(drawbridge_side_advanced)属于 meta 2,meta 3 用索引 10–16,索引 6–8 属 meta 1。三套贴图共用一个数组,无编译期校验。
  • getTextureDomain() 返回 "tinker" 但 registerBlockIcons 用 "tmechworks:machines/"(:145-156)—— 前者是 Mantle 抽象方法的无效遗留。
  • 64 格全伸需要 16 秒,源码无进度反馈(GUI 不显示 extension),玩家无法判断是否已到顶。
  • canDropInventorySlot 恒 false(DrawbridgeLogic.java:102),破坏时槽内容物不返还。
  • 完全复用 DrawbridgeLogic,因此继承其全部缺陷:setDirection(int) 空方法、bufferStack 字段跨 tick 残留、placeBlockAt 前 extension 虚增等。

相关条目