本帖最后由 aneyky 于 2021-2-13 23:58 编辑
这是注册酿造配方的类和方法:复制代码
通过检查控制台输出,可确定initiate方法被调用,但是有以下问题:
1.若ItemA和ItemB为自定义的Item,则在游戏中无法使用此酿造方案,具体体现在ItemA无法放入对应的酿造台槽位;
2.若将IemA改为泥土等原版Item,则可以使用此酿造方案,但是酿造得到的是item.minecraft.air。
在一次调试中,我注意到控制台输出"Registration checkpoint"的时间要比注册mod Item的时间稍早
请问该如何处理?
这是注册酿造配方的类和方法:
- package com.kkyykyky.usefultools;
- import net.minecraft.item.ItemStack;
- import net.minecraft.item.Items;
- import net.minecraft.item.crafting.Ingredient;
- import net.minecraft.potion.PotionUtils;
- import net.minecraft.potion.Potions;
- import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
- import static net.minecraftforge.common.brewing.BrewingRecipeRegistry.addRecipe;
- public class BrewingRecipeRegistry {//此处和forge中的BrewingRecipeRegistry重名了
- public static void initiate(FMLCommonSetupEvent event) {
- System.out.println("Registration checkpoint");
- event.enqueueWork(()->addRecipe(
- Ingredient.fromStacks(PotionUtils.addPotionToItemStack(new ItemStack(Items.POTION), Potions.WATER)),
- Ingredient.fromStacks(new ItemStack(new ItemA())),
- new ItemStack(new ItemB())));
- }
- }
通过检查控制台输出,可确定initiate方法被调用,但是有以下问题:
1.若ItemA和ItemB为自定义的Item,则在游戏中无法使用此酿造方案,具体体现在ItemA无法放入对应的酿造台槽位;
2.若将IemA改为泥土等原版Item,则可以使用此酿造方案,但是酿造得到的是item.minecraft.air。
在一次调试中,我注意到控制台输出"Registration checkpoint"的时间要比注册mod Item的时间稍早
请问该如何处理?
本帖最后由 aneyky 于 2021-2-13 23:22 编辑
检查了一下,创建ItemStack的时候应该用注册Item时使用的实例,如:复制代码
则在创建ItemStack的时候应该使用:
复制代码
检查了一下,创建ItemStack的时候应该用注册Item时使用的实例,如:
- public static final DeferredRegister<Item> itemRegister = DeferredRegister.create(ForgeRegistries.ITEMS, MOD_ID);
- public static final RegistryObject<Item> itemA = itemRegister.register("item_a", ItemA::new);
则在创建ItemStack的时候应该使用:
- new ItemStack(itemA.get());
把代码帖全
根本看不到你的addRecipe调用的是哪个类的addRecipe
根本看不到你的addRecipe调用的是哪个类的addRecipe