花 & 盆栽花 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,即不着色
这个语句可以生成花和盆栽花的模型文件,就写这一个即可
随后我们跑完数据生成之后,将花的材质放在对应的位置,我们就可以启动我们的游戏了











