由于网上找到的 Minecraft Forge 文档实在是少的可怜,我决定自己写一份以防未来的自己忘记。具体的实践可以在我的客运铁路 mod 见到。
红石的更新本质上也是方块更新,因此当一个方块想要检测红石信号,处理的代码应当放在 Block
类的 onNeighborBlockChange(World worldIn, BlockPos pos, IBlockState state, Block neighborBlock)
方法。
BlockState
与 IBlockState
可以在方块的 Class
建立 BlockState
以允许方块拥有不同的状态 (IProperty
),不同的状态可以在 assets/<MODID>/blockstates/<block_instance_name>.json
中定义不同的方块模型。
每一个 IProperty
拥有自己的 name
和可以取到的有限个值,这些值在 Java 内部以 enum
的形式实现。关于 enum
变量类型,可以在王八壳的 javadoc 上找到。
一个方块的 BlockState
可以包含一个或多个 IProperty
,可以使用已经定义好的 IProperty
子类(PropertyDirection
, PropertyBool
)也可以自己定义 enum
建立 PropertyEnum
。
Class: public CustomBlock extends Block
通过以下方式建立 IProperty
及其子类的实例:
public static final PropertyDirection FACING = PropertyDirection.create("facing", EnumFacing.Plane.HORIZONTAL);
建立新的方向属性,名称为"facing"
,可以取的值为平面方向的朝向,为EnumFacing
下的NORTH
,EAST
,SOUTH
,WEST
。public static final PropertyBool POWERED = PropertyBool.create("powered");
建立布尔型只能为true
或false
的方块属性。