参考视频:
相同与区别
(PS:Bugjump是真能改)
- 仍然要创建一个
FoodComponent
类
- FoodComponent类弃用了
snack()、statusEffect()、createStew()
等方法
- 药水效果需要通过
ConsumableComponents
类来实现
- 由于2,3,需要创建一个
ModFoodConsumableComponents
的新类
- 由于4,在register该食物Item时可能会需要传一个
ModFoodConsumableComponents.XXX
的参数
- 在register该食物Item时可以用
useRemainder(BOWL)
来实现归还碗的效果
文件结构如图:

这里以EXAMPLE_SOUP为例子
ModItems:
1
2
3
4
5
6
7
8
9
10
11
|
public class ModItems {
public static final Item EXAMPLE_SOUP =
register("example_soup", Item::new, new Item.Settings()
.maxCount(1)
.food(ModFoodComponents.EXAMPLE_SOUP,ModFoodConsumableComponents.EXAMPLE_SOUP)
//food两个参数,ModFoodComponents.XXX是食物的普通数值和属性
//ModFoodConsumableComponents.XXX是食物给予的药水效果等属性
//这里的XXX要与后面两个类中名称一致
.useRemainder(BOWL));//归还玩家一个碗
...
}
|
ModFoodComponents:
1
2
3
4
5
6
|
public class ModFoodComponents {
//使用alwaysEdible()将使得食物始终可以食用
public static final FoodComponent EXAMPLE_SOUP = new FoodComponent.Builder().nutrition(2).saturationModifier(0.3F).alwaysEdible().build();
...
}
|
ModFoodConsumableComponents:
1
2
3
4
5
6
7
8
9
10
|
public class ModFoodConsumableComponents {
//药水效果需要放到一个StatusEffectInstance类型的List中,但我这没开单独的容器
public static final ConsumableComponent EXAMPLE_SOUP =
food().consumeEffect(new ApplyEffectsConsumeEffect(List.of(
new StatusEffectInstance(StatusEffects.REGENERATION, 100, 1),
new StatusEffectInstance(StatusEffects.ABSORPTION, 2400, 0),
new StatusEffectInstance(StatusEffects.FIRE_RESISTANCE, 2400, 0))))
.build();
...
}
|