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-175vs: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虚增等。
相关条目
- Drawbridge - 同一方块 ID 的 meta 0,本变体的 15 格版本
- Advanced Drawbridge - 同一方块 ID 的 meta 2
- Drawbridge GUI - 与 meta 0 共用 GUI ID 0
- Drawbridge 放置规则 - 与 Drawbridge 共用同一套白名单