Flag Pole

基本信息

属性 值
注册名 方块 battlegear2:flagpole(7 个 metadata 子类型)
类 mods.battlegear2.heraldry.BlockFlagPole
TileEntity mods.battlegear2.heraldry.TileEntityFlagPole
方块物品 mods.battlegear2.heraldry.ItemBlockFlagPole
材质 Material.wood(BlockFlagPole.java:47)
注册方式 GameRegistry.registerBlock(banner, ItemBlockFlagPole.class, "flagpole")(BattlegearConfig.java:200)
配置键 itemNames[10] = "flagpole"(BattlegearConfig.java:60-61)
子类型数 7(BlockFlagPole.java:52-56)

功能

旗杆是本模组唯一注册的方块,用于在世界中展示纹章旗帜。

核心特性:

  • TileEntity 存储旗帜:hasTileEntity 恒返回 true,createTileEntity 返回 TileEntityFlagPole(BlockFlagPole.java:130-138)
  • 自定义渲染:getRenderType 返回 -1,即没有方块渲染器;视觉完全由 FlagPoleTileRenderer 绘制(BlockFlagPole.java:116-119、ClientProxy.java:108)
  • 非实心方块:isOpaqueCube 与 renderAsNormalBlock 均返回 false(BlockFlagPole.java:121-129)
  • 破坏返还旗帜:breakBlock 遍历 TileEntity 中的旗帜并逐个生成 EntityItem,随后清空(BlockFlagPole.java:150-162)
  • 物品渲染器:ItemBlockFlagPole 注册 FlagPoleItemRenderer(ClientProxy.java:106-107)

碰撞箱

碰撞箱由 TileEntity 的朝向决定(BlockFlagPole.java:74-105):

朝向 碰撞箱(局部坐标)
0 (6/16, 0, 6/16) → (10/16, 1, 10/16)(4×16 细柱)
1 (6/16, 13/16, 0) → (10/16, 1, 1)
2 (0, 13/16, 6/16) → (1, 1, 10/16)

贴图复用

方块图标直接借用原版方块,不使用本模组贴图(BlockFlagPole.java:142-146):

metadata 图标来源
0–3 Blocks.log.getIcon(face, meta)(橡木 / 云杉 / 白桦 / 丛林原木)
4 Blocks.iron_block.getIcon(face, 0)
5–6 Blocks.log2.getIcon(face, meta - 5)(雪松 / 金合欢原木)

getTextDim 用两组偏移量选择模型上的贴图切片:木杆用 0 / 4 / 8 / 12 / 16,铁杆用 1 / 4.5 / 8 / 11.5 / 15(BlockFlagPole.java:29-44, 107-113)。

硬度与爆炸抗性无法核实。 全仓库检索 setHardness / setResistance 0 处匹配:

grep -rn 'setHardness\|setResistance' --include='*.java' src/   # 无输出

BlockFlagPole 构造函数仅调用 super(Material.wood),未覆写任何硬度属性(BlockFlagPole.java:46-48),因此沿用 net.minecraft.block.Block 的字段默认值。该默认值由原版实现,不在本仓库中,故不给出具体数字。

数值

数值 值 来源
子类型数 7 BlockFlagPole.java:52-56
掉落 metadata par1 % 7 BlockFlagPole.java:58-60
渲染类型 -1(无方块渲染器) BlockFlagPole.java:116-119
创造标签 BattlegearConfig.customTab BattlegearConfig.java:199
硬度 / 爆炸抗性 无法核实(未调用 setHardness / setResistance) 见上

交互

触发 行为
破坏 TileEntity 中所有旗帜散落为 EntityItem,随后清空(BlockFlagPole.java:150-162)
比较器 无法核实 —— 本仓库中未见 onNeighborChanged / 比较器处理覆写

合成配方

7 个 metadata 各 1 个 ShapedOreRecipe,每次产出 4 个旗杆(BattlegearConfig.java:523-529):

W
W
W
metadata 字符 W
0 Blocks.log meta 0(橡木原木)
1 Blocks.log meta 1(云杉原木)
2 Blocks.log meta 2(白桦原木)
3 Blocks.log meta 3(丛林原木)
4 "ingotIron"(物品字典)
5 Blocks.log2 meta 0(雪杉原木)
6 Blocks.log2 meta 1(金合欢原木)

材料选取逻辑:i < 4 ? log(i) : (i == 4 ? ingotIron : log2(i - 5))(BattlegearConfig.java:525-526)。可由 Disabled Recipies 中的 flagpole 关闭。

相关条目