BabyChest 方块
基本信息
| 属性 | 值 |
|---|---|
| 方块类 | com.dreammaster.modbabychest.BlockBabyChest |
| 继承 | BlockContainer(同时实现 ITileEntityProvider) |
| TileEntity | com.dreammaster.modbabychest.TileEntityBabyChest |
| ItemBlock | com.dreammaster.modbabychest.ItemBlockBabyChest |
| 渲染器 | RenderBabyChest / RenderItemBabyChest(方块与物品各一) |
| GUI 容器 | ContainerBabyChest / GuiBabyChest |
| 注册名 | dreamcraft:BabyChest |
| 材质 | Material.wood(BlockBabyChest.java:36) |
| 硬度 | 2.0F(BlockBabyChest.java:37) |
| 爆炸抗性 | 5.0F(BlockBabyChest.java:38) |
| 创造标签 | 最终为 ModTabList.BLOCKS(MainRegistry.java:299,覆盖构造器里的 tabDecorations,见下文) |
| GUI ID | 1(GuiHandler.GUI_BABYCHEST,GuiHandler.java:15) |
| 开关 | CoreModConfig.Modules.BabyChest(默认 true) |
⚠️ 不在 BlockList 内
这是本 mod 唯一带 TileEntity 的方块,但它不在 BlockList 枚举中。注册走独立路径:
public static Block blockBabyChest = new BlockBabyChest(); // MainRegistry.java:295
private void InitAdditionalBlocks() {
GameRegistry.registerBlock(blockBabyChest, ItemBlockBabyChest.class, "BabyChest"); // MainRegistry.java:298
blockBabyChest.setCreativeTab(ModTabList.BLOCKS); // MainRegistry.java:299
}
InitAdditionalBlocks() 由 load(FMLInitializationEvent) 在 CoreModConfig.Modules.BabyChest 为 true 时调用(MainRegistry.java:268-270)。源码注释称其为 A complete, full working example for a custom chest, with its own renderer for items and blocks, custom sound and a GUI(CoreModConfig.java:50)—— 即它同时是本 mod 面向附属作者的教学范例。
注意注册名与贴图的两处特殊之处:
- 注册名首字母大写:
GameRegistry.registerBlock第三个参数是"BabyChest"(MainRegistry.java:298),但方块名在构造器里被设为"babyChest"(BlockBabyChest.java:39)。两者不一致,属事实记录,不作缺陷断言 —— 仓库中无相关注释说明意图。 - 贴图复用原版:本 mod 没有为它准备贴图。
registerBlockIcons直接取原版橡木木板图标:
blockIcon = pIconRegister.registerIcon("minecraft:planks_oak");
(BlockBabyChest.java:172-173)。同时 ItemBlockBabyChest 中不存在 setUnlocalizedName 或 setTextureName 调用(grep 'setUnlocalizedName\|setTextureName' ItemBlockBabyChest.java 无命中)。
- 创造标签被设置两次:构造器先设
CreativeTabs.tabDecorations(BlockBabyChest.java:40),InitAdditionalBlocks再覆盖为ModTabList.BLOCKS(MainRegistry.java:299)。最终生效的是后者。
功能
一个自带渲染器与 GUI 的自定义箱子:
- 右键打开自定义 GUI:
pPlayer.openGui(MainRegistry.instance, GuiHandler.GUI_BABYCHEST, pWorld, pX, pY, pZ)(BlockBabyChest.java:82) GuiHandler按 GUI ID 分发:getServerGuiElement返回ContainerBabyChest,getClientGuiElement返回GuiBabyChest(GuiHandler.java:18-27、:29-39)- 两端都先
pWorld.getTileEntity(...)并instanceof TileEntityBabyChest校验(GuiHandler.java:20-21、:32-33) - 支持比较器:重写
hasComparatorInputOverride(BlockBabyChest.java:177)与getComparatorInputOverride(BlockBabyChest.java:182) - 破坏时清理 TileEntity(
breakBlock,BlockBabyChest.java:133) - 接收方块事件(
onBlockEventReceived,BlockBabyChest.java:139) - 放置后写入朝向(
onBlockPlacedBy,BlockBabyChest.java:151) isOpaqueCube()(BlockBabyChest.java:71)与renderAsNormalBlock()(BlockBabyChest.java:66)均被重写
数值
| 数值名 | 值 |
|---|---|
| 硬度 | 2.0 |
| 爆炸抗性 | 5.0 |
| GUI ID | 1(本 mod 唯一一个 GUI ID) |
| 碰撞箱 | 委托 super(BlockBabyChest.java:44-47) |
| 选中箱 | 单独重写 getSelectedBoundingBoxFromPool(BlockBabyChest.java:51) |
交互
| 触发 | 行为 |
|---|---|
| 右键方块 | 打开 BabyChest GUI(BlockBabyChest.java:76-83) |
| 比较器读取 | 返回容器红石强度(BlockBabyChest.java:182) |
| 破坏 | 掉落物品 + 清理 TileEntity |
关闭 Modules.BabyChest |
方块完全不存在,GUI ID 1 也不再注册 |
相关条目
- BlockList - 本 mod 的 50 个无 TileEntity 方块,BabyChest 不在其中
- CoreModConfig -
BabyChest开关定义