多方块作物 1.20.1 Forge 长线教程计划
本篇教程的视频
本篇教程的源代码
GitHub地址:TutorialMod-1.20.1-Forge-DoubleCrop
作物方块类
上一期教程我们已经写了一个单方块作物,也了解了原版作物方块的逻辑,那么本期教程我们来实现一个两格高的作物
原版的话,也有多方块作物,比如甘蔗、仙人掌这种,不过它们的生长逻辑并不是像作物方块一样的,感兴趣的同学可以自己去研究,这里我们还是基于作物方块来写
创建方块类
这里我们新建一个CornCrop,同样还是继承CropBlock
1 | public class CornCrop extends CropBlock { |
常规参数
我们先把一些常规的参数和方法写了,生长逻辑后面再写
1 | public static final int FIRST_STAGE_AGE = 7; |
这里我们将作物的第一个阶段和第二个阶段分别设为7和1,这样两个阶段就会有8个阶段了
另外再重新设置一下碰撞箱,以契合我们的作物
canSurvive 方法
1 |
|
这里我们再来重写canSurvive方法,这里我们需要判断下方的方块是否是CornCrop,并且下方的方块的阶段是否为7
下面的方块如果没了,或者说还没长到7,上面的方块也不能存在
randomTick 方法
接下来我们重写随机刻生长逻辑
1 |
|
其实到最后一层if,前面的逻辑和原版的基本一致
而最后一层的逻辑,就是判断当前方块的阶段,如果为7,则判断上方方块是否为空,如果为空,则生成一个CornCrop,也就是长上去
不然就是让当前作物方块自己长
growCrops 方法
接下来我们重写growCrops方法,这是骨粉催熟执行的逻辑
1 |
|
use 方法
我们再重写use方法,这里我们来实现一下类似与农夫乐事中,右键成熟作物即可收获,并让作物回到最初的生长阶段这样的逻辑
1 |
|
当然,这里的逻辑只能右键成长阶段为8的作物,也就是右键第二格的作物才能执行逻辑
这里的逻辑简单来说就是:
- 移除方块
- 重置第一格作物的生长阶段为
0 - 掉落作物
- 掉落经验
- 返回成功
注册方块
接下来我们就来注册这个作物方块
1 | public static final RegistryObject<CornCrop> CORN_CROP = |
和前面写的StrawberryCrop一样,这里我们注册一个CornCrop
注册种子物品
这里因为我们直接将作物的果实作为了种子,所以我们改写一下之前的CORN
1 | public static final RegistryObject<Item> CORN = |
数据文件
战利品列表
1 | LootItemCondition.Builder builder2 = LootItemBlockStatePropertyCondition.hasBlockStateProperties(ModBlocks.CORN_CROP.get()) |
和StrawberryCrop一样,我们也需要为这个作物添加LootItemCondition,让它成熟时才能掉落果实和种子
方块模型文件
这里我们再变点花样,生成一种十字交叉型的作物(甜浆果这种),所以我们还需要两个新方法
1 | public void crossCrop(CropBlock block, String name, IntegerProperty property) { |
这里我们使用的语句是models().cross(),而之前使用的是models().crop(),这里的cross()方法会生成一个十字交叉的作物,而crop()方法则会生成一个四面围合的作物
然后我们使用这个方法生成作物的模型
1 | crossCrop(ModBlocks.CORN_CROP.get(), "corn_crop_stage", CornCrop.AGE); |
贴图文件
贴图文件还是一样的,这一次我们需要准备9张贴图,corn_crop_0.png到corn_crop_8.png









