aneyky
本帖最后由 aneyky 于 2021-2-13 23:58 编辑

这是注册酿造配方的类和方法:
  1. package com.kkyykyky.usefultools;
  2. import net.minecraft.item.ItemStack;
  3. import net.minecraft.item.Items;
  4. import net.minecraft.item.crafting.Ingredient;
  5. import net.minecraft.potion.PotionUtils;
  6. import net.minecraft.potion.Potions;
  7. import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
  8. import static net.minecraftforge.common.brewing.BrewingRecipeRegistry.addRecipe;

  9. public class BrewingRecipeRegistry {//此处和forge中的BrewingRecipeRegistry重名了
  10.     public static void initiate(FMLCommonSetupEvent event) {
  11.         System.out.println("Registration checkpoint");
  12.         event.enqueueWork(()->addRecipe(
  13.                 Ingredient.fromStacks(PotionUtils.addPotionToItemStack(new ItemStack(Items.POTION), Potions.WATER)),
  14.                 Ingredient.fromStacks(new ItemStack(new ItemA())),
  15.                 new ItemStack(new ItemB())));
  16.     }
  17. }

复制代码

通过检查控制台输出,可确定initiate方法被调用,但是有以下问题:
1.若ItemA和ItemB为自定义的Item,则在游戏中无法使用此酿造方案,具体体现在ItemA无法放入对应的酿造台槽位;
2.若将IemA改为泥土等原版Item,则可以使用此酿造方案,但是酿造得到的是item.minecraft.air。

在一次调试中,我注意到控制台输出"Registration checkpoint"的时间要比注册mod Item的时间稍早
请问该如何处理?








aneyky
本帖最后由 aneyky 于 2021-2-13 23:22 编辑

检查了一下,创建ItemStack的时候应该用注册Item时使用的实例,如:
  1. public static final DeferredRegister<Item> itemRegister = DeferredRegister.create(ForgeRegistries.ITEMS, MOD_ID);
  2. public static final RegistryObject<Item> itemA = itemRegister.register("item_a", ItemA::new);
复制代码


则在创建ItemStack的时候应该使用:
  1. new ItemStack(itemA.get());
复制代码



洞穴夜莺
把代码帖全
根本看不到你的addRecipe调用的是哪个类的addRecipe

第一页 上一页 下一页 最后一页