船 1.21 Fabric
本篇教程的视频:
本篇教程源代码
GitHub地址:TutorialMod-Boat-1.21
介绍
船
是一个可以载人的实体,可以在水上行驶,箱子船
同样如此,不过是多了个箱子而已
不过要想添加像原版一样的船,这并不简单,而且比告示牌更复杂,因为船是实体,其逻辑比方块实体复杂得多
本期教程我们还将使用TerraForm API
来实现船和箱子船的添加
TerraForm API的GitHub地址:TerraForm API
关于其依赖的添加见前一篇教程Here,这里就不再赘述了
添加船
创建ModBoats类
首先我们创建一个ModBoats
类,这个类用来注册我们的船和箱子船
1 | public static final Identifier ICE_ETHER_BOAT = Identifier.of(TutorialMod.MOD_ID, "ice_ether_boat"); |
首先我们定义了两个Identifier
,标识了我们的船和箱子船,其实和我们前面写的Identifier
一样,也就是资源文件的位置
1 | public static final RegistryKey<TerraformBoatType> ICE_ETHER_BOAT_KEY = TerraformBoatTypeRegistry.createKey(ICE_ETHER_BOAT); |
随后我们定义了一个RegistryKey
,这个RegistryKey
是TerraformBoatType
的,这个类是TerraForm API
中的一个类,用来注册船的类型
下面我们写一个初始化方法,里面写船的注册
1 | public static void registerModBoats() { |
在初始化注册方法中,我们定义了一个TerraformBoatType
在这个类中,我们定义了船的物品,箱子船的物品,船对应的木板,当然,因为船的物品还没有写,所以这里会报错
而后我们用Registry
注册了这个TerraformBoatType
,将船和箱子船一起注册
主类初始化
我们在主类的onInitialize
方法中调用这个方法
1 | ModBoats.registerModBoats(); |
注册船和箱子船的物品
我们在ModItems
类中注册这两个物品
1 | public static final Item ICE_ETHER_BOAT = TerraformBoatItemHelper.registerBoatItem(ModBoats.ICE_ETHER_BOAT, ModBoats.ICE_ETHER_BOAT_KEY, false); |
这里我们用到了TerraformBoatItemHelper
这个类,这个类是TerraForm API
中的一个类
他们用到的参数分别是船的Identifier
,船的RegistryKey
,和一个boolean
,这个boolean
是用来判断是否是箱子船
加入物品栏
1 | entries.add(ModItems.ICE_ETHER_BOAT); |
设置渲染层
因为船是实体,它是要写渲染的,在之后的生物实体教程中,我们也会写到渲染
这里我们到模组的客户端类中,设置渲染层
1 | TerraformBoatClientHelper.registerModelLayers(ModBoats.ICE_ETHER_BOAT, false); |
这里我们用到了TerraformBoatClientHelper
这个类,同样是TerraForm API
中的一个类
我们将船的Identifier
和一个boolean
传入,这个boolean
是用来判断我们的船是不是竹筏这类的
因为普通的船是围合起来的,但竹筏是平的,在渲染上它俩是不一样的
数据文件
语言文件
1 | translationBuilder.add(ModItems.ICE_ETHER_BOAT, "Ice Ether Boat"); |
这里我们注册了船和箱子船的语言文件
模型文件
1 | itemModelGenerator.register(ModItems.ICE_ETHER_BOAT, Models.GENERATED); |
这里只要写物品的模型文件即可
材质文件
实体材质文件放在assets/tutorialmod/textures/entity/boat
和assets/tutorialmod/textures/entity/chest_boat
中
物品的材质文件还是常规的位置,放在assets/tutorialmod/textures/item
中,当然也是有两个
位置不要搞错,不然会出问题
随后,我们就可以启动游戏进行测试了