栅栏门
基本信息
| 属性 | 值 |
|---|---|
| 注册名 | malisisdoors:acaciaFenceGate、birchFenceGate、darkOakFenceGate、jungleFenceGate、spruceFenceGate、camoFenceGate,以及条件注册的 malisisdoors:fenceGate |
| 类 | net.malisis.doors.door.block.FenceGate(独立注册,非 DoorDescriptor 体系) |
| TileEntity | net.malisis.doors.door.tileentity.FenceGateTileEntity(注册名 fenceGateTileEntity,Registers.java:123) |
| 父类 | net.minecraft.block.BlockFenceGate(FenceGate.java:46) |
| 开门机制 | 沿用原版栅栏门,非自定义动画(源码中无 openingTime 字段) |
| TileEntity 移动方式 | FenceGateMovement(FenceGateTileEntity.java:40-43) |
| 硬度 | 2.0(FenceGate.java:76) |
| 爆炸抗性 | 5.0(FenceGate.java:77) |
| 脚步声 | soundTypeWood(FenceGate.java:78) |
| 创造标签 | 除 OAK 外全部设置(FenceGate.java:81) |
栅栏门不经 DoorDescriptor 注册,而是 FenceGate.register() 直接调 GameRegistry.registerBlock(this, type.name)——方块本身即物品,无独立 ItemBlock(FenceGate.java:84-97)。Registers.registerFenceGates() 注册 6 个(Registers.java:224-231),第 7 个 fenceGate(橡木)仅在 modifyVanillaDoors 开启时由 registerVanillaFenceGate() 注册(Registers.java:147-150)。
变体
FenceGate.Type 枚举定义于 FenceGate.java:48-58:
| 枚举 | 注册名 | 显示名(en_US) | 木板 meta | 注册条件 |
|---|---|---|---|---|
OAK |
malisisdoors:fenceGate |
Oak Fence Gate | 0 | 仅 modifyVanillaDoors = true |
SPRUCE |
malisisdoors:spruceFenceGate |
Spruce Fence Gate | 1 | 总是 |
BIRCH |
malisisdoors:birchFenceGate |
Birch Fence Gate | 2 | 总是 |
JUNGLE |
malisisdoors:jungleFenceGate |
Jungle Fence Gate | 3 | 总是 |
ACACIA |
malisisdoors:acaciaFenceGate |
Acacia Fence Gate | 4 | 总是 |
DARK_OAK |
malisisdoors:darkOakFenceGate |
Dark Oak Fence Gate | 5 | 总是 |
CAMO |
malisisdoors:camoFenceGate |
Camo Fence Gate | — | 总是 |
OAK 型不设创造标签(FenceGate.java:81),因此不会出现在 Malisis' Doors 标签页中——它只用于替换原版栅栏门。
功能
FenceGate 继承原版 BlockFenceGate(FenceGate.java:46),因此门的开合、碰撞箱与红石逻辑沿用原版实现,本类只做三件事:
- 挂接 TileEntity 以支持伪装贴图查询:
FenceGateTileEntity extends DoorTileEntity,在构造时装入一个只含FenceGateMovement的描述符(FenceGateTileEntity.java:37-44) - 按木种取贴图:
getIcon(int side, int meta)对非 CAMO 型直接返回对应Blocks.planks贴图,只有 CAMO 型走camoIcon(FenceGate.java:106-108)。CAMO 贴图由MalisisIcon注册为malisisdoors:camo_fencegate(FenceGate.java:100-103) - 伪装渲染:世界态查询
getIcon(IBlockAccess, x, y, z, side)在type == CAMO时改从 TileEntity 取getCamoIcon()(FenceGate.java:111-118);无 TileEntity 时回退父类实现(FenceGate.java:115-116)
放置时 onBlockPlacedBy 在 super 之后调用 te.updateAll() 刷新伪装采样(FenceGate.java:121-131)。FenceGateTileEntity.updateAll() 一次采样三项数据:周围方块 BlockState、染色颜色 camoColor、是否贴墙 isWall,随后 markBlockForUpdate 同步客户端(FenceGateTileEntity.java:54-64)。采样会沿栅栏门朝向偏移一格,若偏移后是配对的另一扇对开门则再偏移一格(FenceGateTileEntity.java:67-73)。
右键开合改由 TileEntity 驱动而非父类:onBlockActivated 取 DoorTileEntity,调 te.openOrCloseDoor(),并按玩家朝向修正 meta(FenceGate.java:134-157)。
数值
| 数值名 | 值 | 出处 |
|---|---|---|
| 硬度 | 2.0 | FenceGate.java:76 |
| 爆炸抗性 | 5.0 | FenceGate.java:77 |
| 开门时间 | 沿用原版 BlockFenceGate,源码中无自定义值 |
FenceGate.java:46(grep -n openingTime FenceGate.java 无匹配) |
合成配方
除 CAMO 外全部共用同一形状,材料随木种变化(FenceGate.java:88-95):
ABA
ABA
| 字符 | 物品 |
|---|---|
A |
木棍 Items.stick ×4 |
B |
对应木种木板 Blocks.planks,meta 见变体表 |
伪装栅栏门配方(FenceGate.java:86-87):
ABC
| 字符 | 物品 |
|---|---|
A |
金合欢栅栏门 acaciaFenceGate |
B |
丛林栅栏门 jungleFenceGate |
C |
白桦栅栏门 birchFenceGate |
注意该配方引用的三个静态字段在 FenceGate.register() 被调用时由 registerFenceGates() 的前三次赋值填充(Registers.java:225-227),依赖注册顺序。