本篇教程的视频

(待发布)

本篇教程的源代码

(待发布)

本篇教程目标

  • 理解原版的花和盆栽花的注册
  • 学会自己注册花和盆栽花

查看源代码

这篇教程我们来看看小植物如何添加,并添加它们的盆栽

当然,这里我们只讲一个方块大小的花,像玫瑰花这种两个方块大小的,感兴趣的同学可以自行研究

这里我们还是来看看源代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public static final Block DANDELION = register(
"dandelion",
new FlowerBlock(
StatusEffects.SATURATION,
7,
AbstractBlock.Settings.create()
.mapColor(MapColor.DARK_GREEN)
.noCollision()
.breakInstantly()
.sounds(BlockSoundGroup.GRASS)
.offset(AbstractBlock.OffsetType.XZ)
.pistonBehavior(PistonBehavior.DESTROY)
)
);

这里我们以DANDELION为例,这也就是蒲公英

可以看到,它实例化的是FlowerBlock

FlowerBlock的第一个参数是合成谜之炖菜时携带的效果,第二个参数是持续时间,单位

后面就是方块的设置,里面的参数除了offset,其他我们也都见过了,这里就不解释了

offset这个是随机偏移,当我们放置花这种比较小的东西时,你会发现它并不是放置在方块正中央的,
而是向XZ轴上随机偏移了一些,这正是offset方法起的作用

接下来再看看盆栽花

1
2
3
4
5
6
7
8
9
10
public static final Block POTTED_DANDELION = register("potted_dandelion", createFlowerPotBlock(DANDELION));

public static FlowerPotBlock createFlowerPotBlock(Block flower, FeatureFlag... requiredFeatures) {
AbstractBlock.Settings settings = AbstractBlock.Settings.create().breakInstantly().nonOpaque().pistonBehavior(PistonBehavior.DESTROY);
if (requiredFeatures.length > 0) {
settings = settings.requires(requiredFeatures);
}

return new FlowerPotBlock(flower, settings);
}

盆栽花的注册封装了一个方法,不过它也没有什么特别的地方,实例化的是FlowerPotBlock

requireFeatures这个参数是可选的,用来指定这个盆栽花需要哪些世界生成特性,但原版似乎没有用到这个

注册花

接下来我们就来注册自己的盆栽花

注册方块

1
2
3
4
public static final Block SIMPLE_FLOWER = register("simple_flower",
new FlowerBlock(StatusEffects.NIGHT_VISION, 4, AbstractBlock.Settings.copy(Blocks.DANDELION)));
public static final Block POTTED_SIMPLE_FLOWER = Registry.register(Registries.BLOCK, new Identifier(TutorialModRe.MOD_ID, "potted_simple_flower"),
new FlowerPotBlock(SIMPLE_FLOWER, AbstractBlock.Settings.copy(Blocks.POTTED_DANDELION)));

花实例化的是FlowerBlock,盆栽花实例化的是FlowerPotBlock

注意,盆栽花是没有对应的方块物品的,所以我们直接使用Registry.register来注册

加入物品栏

1
entries.add(ModBlocks.SIMPLE_FLOWER);

渲染层设置

花的材质一般也是带有全透明区域的,所以我们也加一下,加上花和盆栽花

1
BlockRenderLayerMap.INSTANCE.putBlocks(RenderLayer.getCutout(), ModBlocks.SIMPLE_FLOWER, ModBlocks.POTTED_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,它会生成花和盆栽花对应的方块状态和方块模型文件

测试

那么放好贴图文件之后,我们就可以进入游戏进行测试了