-技术 -mod -java我的世界fabric-1-21-1mod制作心得四——食物和燃料(mixin)
‘祈止’
前面我们为模组添加了物品,当时我们没有深入到物品的不同类别。
本期我们就来为模组添加食物和燃料,一个可以通过API添加,一个不能。让我们了解食物组件和mixin。
另外推荐B站的一位mod教程up主——北山_Besson,我写的这些心得也可以说是看教程的课堂笔记。
AModFoodComponents.java
要添加食物就需要写一个食物组件。在注册物品的时候给物品添加这个组件就行了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| public class AModFoodComponents { public static final FoodComponent 组件名 = new FoodComponent.Builder().hunger(4).saturationModifier(0.7F) .statusEffect(new StatusEffectInstance(StatusEffects.SPEED, 100, 1), 1.0F) .alwaysEdible() .snack() .build(); }
|
AModItems.java
1 2 3 4 5 6 7 8 9
| public class CelestialModItems { public static final Item STAR_GEL = registerItem("star_gel", new Item(new Item.Settings() .food(CelestialModFoodComponents.组件名))); ...... }
|
AbstractFurnaceBlockEntityMixin.java
现在写燃料的代码,因为原版这里是硬编码,所以只能使用mixin。拦截原版返回的map然后添加我们的物品再返回回去。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| @Mixin(AbstractFurnaceBlockEntity.class) public class AbstractFurnaceBlockEntityMixin { @Inject(method = "createFuelTimeMap", at = @At("TAIL"))
private static void addFuelItem(CallbackInfoReturnable<Map<Item, Integer>> cir){ cir.getReturnValue().put(AModItems.物品, 30000); } }
|