船 1.20 Fabric 长线教程计划
本篇教程的视频
本篇教程的源代码
GitHub地址:TutorialMod-Boat-1.20.1
本篇教程目标
- 利用
TerraformAPI添加船
注册船
船在游戏中是属于实体,与告示牌一样,在注册时,他们的注册表是硬编码的,所以如果你要实现像原版的那样的船
要么就用Mixin修改原版船的注册表,要么就自己从头到尾写一个船
不过那样的话,就属于实体相关的内容了,我们这里就还是先用第三方的API来写
同样它的示例也是在Terraform的仓库中有的
ModBoats
我们先创建一个ModBoats类,用来注册我们的船
1 | public class ModBoats { |
随后,我们写上两个Identifier
1 | public static final Identifier ICE_ETHER_BOAT = new Identifier(TutorialMod.MOD_ID, "ice_ether_boat"); |
这两个一个是普通的船,一个是带箱子的船
接下来我们再写一个注册键,用来注册我们的船
1 | public static final RegistryKey<TerraformBoatType> ICE_ETHER_BOAT_KEY = TerraformBoatTypeRegistry.createKey(ICE_ETHER_BOAT); |
注册键是TerraformBoatType类型的,也就是我们用TerraformAPI注册的船的注册表
我们用TerraformBoatTypeRegistry.createKey方法来创建一个注册键,传入的参数是普通的船的Identifier
接下来就写一个注册方法
1 | public static void registerBoats(){ |
注册方法中,我们首先创建了一个TerraformBoatType类型的对象
通过item和chestItem方法,我们传入了我们的船和带箱子的船对应的物品(当然现在我们还没写物品,所以会报错)
最后我们用Registry.register方法来注册我们的船
传入的参数是TerraformBoatTypeRegistry.INSTANCE,也就是TerraformBoatType的注册表
ICE_ETHER_BOAT_KEY,也就是我们的船的注册键
ICE_ETHER_BOAT_TYPE,也就是我们创建的TerraformBoatType类型的对象
随后,这个方法还要在主类中调用,就和以前的那些方法一样
1 | ModBoats.registerBoats(); |
添加物品
1 | public static final Item ICE_ETHER_BOAT = TerraformBoatItemHelper.registerBoatItem( |
这里我们使用TerraformBoatItemHelper.registerBoatItem方法来注册我们的船对应的物品
传入的参数有三个,分别是我们的船的Identifier,我们的船的注册键,以及是否是带箱子的船
然后不要忘记将船加入到物品栏中
1 | entries.add(ModItems.ICE_ETHER_BOAT); |
渲染层设置
因为船是实体,而实体都是要给它设置渲染层,以保证其正常的渲染,否则游戏会崩溃
这里我们到模组的客户端类中写上
1 | TerraformBoatClientHelper.registerModelLayers(ModBoats.ICE_ETHER_BOAT, false); |
这里使用TerraformBoatClientHelper.registerModelLayers方法来注册我们的船的渲染层
后面的布尔值代表的是这个船是否是竹筏类型的
船有两种,一种是普通船,四周围合;但竹筏则是一个平面,边上没有围合起来的结构,所以它们两个的渲染方法是不一样的
数据文件
语言文件
继续使用数据生成来写各个数据文件
1 | translationBuilder.add(ModItems.ICE_ETHER_BOAT, "Ice Ether Boat"); |
模型文件
1 | itemModelGenerator.register(ModItems.ICE_ETHER_BOAT, Models.GENERATED); |
模型文件只要写物品对应的模型即可
贴图文件
注意,贴图文件分两种,一个是物品贴图,一个是实体的展开图
物品贴图就和常规的物品一样放就可以
展开图也分两个,一个是普通的船,要放在texures/entity/boat/下,贴图名字与注册键的名字一致,也就是上面我们写的ICE_ETHER_BOAT_KEY,对应ice_ether_boat
另一个是带箱子的船,要放在texures/entity/chest_boat/下,贴图名字同上
测试
跑好数据生成之后,我们就可以进入游戏进行测试了











