告示牌 1.20 Fabric 长线教程计划
本篇教程的视频
(待发布)
本篇教程的源代码
GitHub地址:TutorialMod-Sign-1.20.1
本篇教程目标
- 利用
TerraformAPI
添加告示牌
添加API依赖
告示牌是属于方块实体
了,如果你挖过相关的源代码,你就会发现它在方块实体注册时,它的方块实体类型注册是硬编码的
也就是说,如果我们要实现原版的告示牌,在注册方块实体上,就得用Mixin
加入原版的方块实体类型中
要么就是自己从头到尾实现一个告示牌,当然我们教程会做,但那是方块实体的内容了,未来再说
所以本期教程和下期的船,都是用TerraformAPI
来实现的
前面一篇教程我们重点讲解了build.gradle
文件的配置,现在我们就来实践一下
今天我们使用TerraformAPI
来添加告示牌,所以要先引入这个API
操作方法在它的GitHub仓库上也有,可参阅TerraformAPI
在build.gradle
的repositories
中添加
1 | maven { |
在dependencies中添加
1 | modImplementation "com.terraformersmc.terraform-api:terraform-wood-api-v1:7.0.3" |
版本号可以在它仓库的gradle.properties
文件中找到
这里我们就直接include
了,因为这个库相当较小,可以直接包含在我们模组中
注册
在TerraformAPI
的仓库中,它也给出了示例,可以在example
的主类文件中找到
注册方块
首先我们得写一堆Identifier
,用于指定贴图位置
1 | public static final Identifier ICE_ETHER_SIGN_TEXTURE = new Identifier(TutorialMod.MOD_ID, "entity/signs/ice_ether"); |
它分为普通告示牌、悬挂告示牌和悬挂告示牌的GUI,普通告示牌的GUI是从它的材质文件中截取的,我们就不用指定了
然后我们注册方块
1 | public static final Block ICE_ETHER_SIGN = Registry.register(Registries.BLOCK, new Identifier(TutorialMod.MOD_ID, "ice_ether_sign"), |
这里我们注册了四种方块,分别是普通告示牌、悬挂告示牌和它们放在墙上的类型
这里注意实例化的有TerraformSignBlock
、TerraformWallSignBlock
、TerraformHangingSignBlock
、TerraformWallHangingSignBlock
这四个,都是TerraformAPI
提供的
也要注意,这里我们直接使用Registry.register
来注册,不注册它的方块物品,物品我们待会还要另外再写
注册物品
1 | public static final Item ICE_ETHER_SIGN = registerItem("ice_ether_sign", |
这里我们注册了两种物品,分别是普通告示牌和悬挂告示牌
实例化SignItem
、HangingSignItem
,这两个是原版的类,传入我们写好的方块
物品设置可以像原版的告示牌一样,设置堆叠堆叠数量为16
加入物品栏
1 | entries.add(ModItems.ICE_ETHER_HANGING_SIGN); |
数据文件
语言文件
1 | translationBuilder.add(ModItems.ICE_ETHER_SIGN, "Ice Ether Sign"); |
模型文件
物品的模型文件只要写悬挂告示牌的模型文件即可
1 | itemModelGenerator.register(ModItems.ICE_ETHER_HANGING_SIGN, Models.GENERATED); |
另外,我们在之前写的方块族中,再另起一个,用来生成告示牌的模型文件
1 | public static final BlockFamily ICE_ETHER_PLANKS = register(ModBlocks.ICE_ETHER_PLANKS) |
我们另外注册一个方块族,父级就用之前写的木板,用sign
方法指定告示牌
当然,原本写在数据生成类中的这句话也要去掉
1 | // blockStateModelGenerator.registerSimpleCubeAll(ModBlocks.ICE_ETHER_PLANKS); |
至于悬挂告示牌的模型文件,可能是TerraformAPI
会生成吧
另外就是材质文件,注意我们之前写的三个Identifier
,位置放对,还要有两个物品栏中的物品材质文件
测试
跑好数据生成,我们就可以启动游戏进行测试了