花 & 盆栽花 1.21 Fabric
本篇教程的视频:
本篇教程源代码
GitHub地址:TutorialMod-Flower-1.21
介绍
花
在游戏中作为一种小型植被,和草
一样,是一种装饰性
的方块
当然,在花
里面也分大小,比如玫瑰花
,就是两格高的花,而像蒲公英
,就是一格高的花
花
在游戏中可以制作染料,也可以制作谜之炖菜
(不同的花有不同的效果,这个等会会讲)
相比较树
而言,这种是小植被
的写法要简单得多
本篇教程我们来写一个单方块的花,这样它也可以种植在花盆里
查看源代码
常规操作,我们先来看看源代码
1 | public static final Block DANDELION = register( |
我们以DANDELION
为例,这个是蒲公英
可以看到它实例化的是FlowerBlock
,里面的参数是效果
、持续时间(秒)
、方块设置
这里的效果是SATURATION
,也就是饱和,持续时间和前面写食物时不一样,这里的单位是秒,这个效果也就是合成谜之炖菜时会带上的效果
方块设置里面的大部分东西我们都讲过,这里就讲一个offset
,这个是一个偏移方法
因为在实际游戏中,我们在放置这些花草的时候,它是有一个偏移的,并不是完完全全在一个方块的正中央,这里使用的是AbstractBlock.OffsetType.XZ
,即在XZ
轴方向进行随机偏移
接下来我们看看盆栽蒲公英的写法
1 | public static final Block POTTED_DANDELION = register("potted_dandelion", createFlowerPotBlock(DANDELION)); |
这里的POTTED_DANDELION
是盆栽蒲公英,它的注册方法是createFlowerPotBlock
,其实实例化的是FlowerPotBlock
,里面的参数是花
和方块设置
渲染层设置
1 | BlockRenderLayerMap.INSTANCE.putBlock(ModBlocks.SIMPLE_FLOWER, RenderLayer.getCutout()); |
这个是直接写在模组的ClientModInitializer
中的
1 | BLOCKS.put(ModBlocks.SIMPLE_FLOWER, RenderLayer.getCutout()); |
而这个是写在我们之前写的Mixin
类中,两者取其一即可
添加花
随后,我们来添加花
注册花
1 | public static final Block SIMPLE_FLOWER = register("simple_flower", |
我们简单写一个SIMPLE_FLOWER
,它的效果是夜视
,持续时间是4
秒,方块设置copyDANDELION
的
注册盆栽花
再写一个盆栽花
1 | public static final Block POTTED_SIMPLE_FLOWER = Registry.register(Registries.BLOCK, Identifier.of(TutorialMod.MOD_ID, "potted_simple_flower"), |
但要注意的是,我们这里注册盆栽花的时候,是直接调用Registry.register
方法,因为它不需要返回方块物品
,所以我们不能用之前的那个方法
加入物品栏
1 | entries.add(ModBlocks.SIMPLE_FLOWER); |
数据文件
语言文件
1 | translationBuilder.add(ModBlocks.SIMPLE_FLOWER, "Simple Flower"); |
模型文件
1 | blockStateModelGenerator.registerFlowerPotPlant(ModBlocks.SIMPLE_FLOWER, ModBlocks.POTTED_SIMPLE_FLOWER, BlockStateModelGenerator.TintType.NOT_TINTED); |
这里我们用到了registerFlowerPotPlant
方法,传入花
和盆栽花
,以及TintType
,这个是用来设置颜色的,这里我们用的是NOT_TINTED
,即不着色
这个语句可以生成花
和盆栽花
的模型文件,就写这一个即可
随后我们跑完数据生成之后,将花的材质放在对应的位置,我们就可以启动我们的游戏了