Featured image of post 在MC1.21.4中创建食物的相同与区别

在MC1.21.4中创建食物的相同与区别

FirstFabricModDev 3

参考视频:

相同与区别

(PS:Bugjump是真能改)

  1. 仍然要创建一个FoodComponent
  2. FoodComponent类弃用了snack()、statusEffect()、createStew()等方法
  3. 药水效果需要通过ConsumableComponents类来实现
  4. 由于2,3,需要创建一个ModFoodConsumableComponents的新类
  5. 由于4,在register该食物Item时可能会需要传一个ModFoodConsumableComponents.XXX的参数
  6. 在register该食物Item时可以用useRemainder(BOWL)来实现归还碗的效果

文件结构如图:
File Tree
这里以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();
  ...
}
本作品采用知识共享署名-非商业性使用-相同方式共享4.0国际许可协议进行许可(CC BY-NC-SA 4.0)
文章浏览量:Loading
Powered By MC ZBD Studio
发表了21篇文章 · 总计29.03k字
载入天数...载入时分秒...
总浏览量Loading | 访客总数Loading

主题 StackJimmy 设计
由ZephyrBD修改