食物 1.21 NeoForge 长线教程计划
本篇教程的视频
(待发布)
本篇教程的源代码
(待发布)
简介
食物在模组中也是非常重要的一个部分,玩家需要通过食物来恢复饥饿值
一些食物也可以为玩家提供正面或者负面的状态效果
食物
注册食物组件
在高版本中,食物是以组件的形式注册到物品上的
所以注册之前还要注册一个食物组件(Food Component),原版的可参见Foods类
在这里,我们先创建一个ModFoods类,用于注册食物组件
1 | public class ModFoods { |
然后,我们参考原版的Foods类,注册一个食物组件
1 | public static final FoodProperties CORN = new FoodProperties.Builder().nutrition(3).saturationModifier(0.7f).build(); |
这里我们创建了一个名为CORN的食物组件,类型是FoodProperties
然后我们使用FoodProperties.Builder来创建食物组件
nutrition方法用于设置食物的饥饿值恢复量,这里设置为3
saturationModifier方法用于设置食物的饱和度修正值,这里设置为0.7f
build方法用于构建食物组件对象
饱和度系数并不是直接增加饱和度值,而是通过一个计算公式来计算最终的饱和度增加量,具体可以在FoodConstants类中查看
其方法如下:
1 | public static float saturationByModifier(int foodLevel, float saturationModifier) { |
其中,foodLevel是饥饿值增加量,saturationModifier是饱和度修正值
拿Wiki上的金胡萝卜为例,金胡萝卜的饥饿值增加量为6,饱和度修正值为1.2f,那么最终的饱和度增加量为:
1 | 6 * 1.2f * 2.0F = 14.4f |
另外我们也可以来举一反三
1 | public static final FoodProperties STRAWBERRY = new FoodProperties.Builder().nutrition(1).saturationModifier(0.3f) |
这里我们注册了两个食物组件,分别是STRAWBERRY和CHEESE
要为食物添加状态效果,我们使用effect方法,第一个参数是一个Supplier<MobEffectInstance>,用于提供状态效果实例,
第二个参数是效果的概率
多个效果可以多次调用effect方法来添加
注册食物
接下来,我们在ModItems类中注册食物物品,并使用food方法将食物组件绑定到物品上
1 | public static final DeferredItem<Item> CORN = |
物品注册的方法和之前讲过的一样,只是这里我们在物品属性中使用了food方法,将之前注册的食物组件绑定到物品上
添加到物品栏
最后,我们还需要将食物物品添加到物品栏中,方便玩家获取
1 | output.accept(ModItems.CORN); |
数据文件
常规的,我们还需要为食物物品添加数据文件
前面既然讲了数据生成,那么就直接用数据生成来生成这些数据文件
语言文件
1 | add(ModItems.CORN.get(), "Corn"); |
物品模型
1 | basicItem(ModItems.CORN.get()); |
贴图
贴图就放到对应的文件夹下,命名为物品的注册名
之后就可以启动游戏进行测试了











