用户:MashKJo/1.12.2模组开发教程/9.第一个方块

MashKJo留言 | 贡献2024年12月16日 (一) 16:34的版本 (创建页面,内容为“在开始制作我们的第一个方块前,笔者先区分一下两个概念:方块(Block)和方块的物品形式(ItemBlock)——平时,我们说“方块”,是同时涵盖了这两个概念的:广义上的方块,被放置在世界中时,即为Block;而在物品栏中时,它则是一种特殊的物品,也即ItemBlock。 好,区分了这两个概念后,我们就可以开始了。 == 添加一个新方块的流程 == 所有方…”)
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)

在开始制作我们的第一个方块前,笔者先区分一下两个概念:方块(Block)和方块的物品形式(ItemBlock)——平时,我们说“方块”,是同时涵盖了这两个概念的:广义上的方块,被放置在世界中时,即为Block;而在物品栏中时,它则是一种特殊的物品,也即ItemBlock。

好,区分了这两个概念后,我们就可以开始了。

添加一个新方块的流程

所有方块都是net.minecraft.block.Block类的实例,该类和Item类不同,它没有零参构造器,我们在构造Block实例时,有2个构造器可供选择:(Material materialIn)(Material materialIn, MapColor mapColorIn)

MapColor用于指示地图上显示该方块所用的颜色,这个类的构造方法是private的,且它要求构造MapColor对象时指定该对象对应的序数,该类有许多静态MapColor字段供你使用,Mojang在这个类里把硬编码体现得淋漓尽致(捂脸)。

Material用于描述方块的“质地”,这个类纯粹用于封装许多和方块有关的信息,它能影响方块的许多属性,这个类的构造方法倒是public的,其中要求传入一个MapColor。不过我们也没必要新建Material,直接复用原版的即可。

上述的第一个构造方法,实际效果为this(materialIn, materialIn.getMaterialMapColor());。读者根据自己的需求自行选择合适的构造器,填入合适的参数就好。

想必读者肯定猜到了,Block类也有很多getter和setter可以用。与Item的类似,Block类的getter牵扯到BlockState这一概念,因此后面再讲,现在只讲setter:

添加方块对应的物品形式

为方块和ItemBlock提供模型和材质文件