Posted November 21, 20213 yr Hello, I'm trying to figure out how to specify the type of potion for the input of a brewing recipe. I can get the recipe to work with the basic Items.POTION but then you can use any potion for the input. I think you have to use NBT data but what I have currently doesn't seem to be working (it simply won't let you brew the recipe at all). I've seen some people using a different way of creating brewing recipes by creating a implementation of IBrewingRecipe, do I need to do that or is there a way to do it the way I have it now and I'm just missing something? (I made a getPotion() function to get an instance of the potion ItemStack with the NBT tag for the type of potion) package com.derpyninjafrog.worldoffood.init; import com.derpyninjafrog.worldoffood.WorldOfFood; import com.derpyninjafrog.worldoffood.effects.Nourished; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; import net.minecraft.item.crafting.Ingredient; import net.minecraft.nbt.CompoundNBT; import net.minecraft.potion.*; import net.minecraftforge.common.brewing.BrewingRecipeRegistry; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.RegistryObject; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.Mod.EventBusSubscriber.Bus; import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.ForgeRegistries; @Mod.EventBusSubscriber(bus = Bus.MOD, modid = "world_of_food") public class ModPotions { public static final DeferredRegister<Effect> EFFECTS = DeferredRegister.create(ForgeRegistries.POTIONS, WorldOfFood.MOD_ID); public static final DeferredRegister<Potion> POTIONS = DeferredRegister.create(ForgeRegistries.POTION_TYPES, WorldOfFood.MOD_ID); public static final RegistryObject<Effect> NOURISHED = EFFECTS.register("nourished", () -> new Nourished(EffectType.BENEFICIAL, 3087634)); public static final RegistryObject<Potion> HOT_COCOA = POTIONS.register("hot_cocoa", () -> new Potion(new EffectInstance(NOURISHED.get(), 3600))); public static final RegistryObject<Potion> APPLE_JUICE = POTIONS.register("apple_juice", () -> new Potion(new EffectInstance(NOURISHED.get(), 3600))); public static final RegistryObject<Potion> APPLE_CIDER = POTIONS.register("apple_cider", () -> new Potion(new EffectInstance(NOURISHED.get(), 3600))); public static final RegistryObject<Potion> VINEGAR = POTIONS.register("vinegar", () -> new Potion(new EffectInstance(NOURISHED.get(), 3600))); @SubscribeEvent public static void registerPotions(FMLCommonSetupEvent event) { event.enqueueWork( ()-> BrewingRecipeRegistry.addRecipe(Ingredient.of(Items.POTION), Ingredient.of(Items.COCOA_BEANS), PotionUtils.setPotion(getPotion("minecraft:water"), HOT_COCOA.get())) ); event.enqueueWork( ()-> BrewingRecipeRegistry.addRecipe(Ingredient.of(Items.POTION), Ingredient.of(Items.APPLE), PotionUtils.setPotion(getPotion("minecraft:water"), APPLE_JUICE.get())) ); event.enqueueWork( ()-> BrewingRecipeRegistry.addRecipe(Ingredient.of(Items.POTION), Ingredient.of(Items.APPLE), PotionUtils.setPotion(getPotion("world_of_food:apple_juice"), APPLE_CIDER.get())) ); event.enqueueWork( ()-> BrewingRecipeRegistry.addRecipe(Ingredient.of(Items.POTION), Ingredient.of(Items.SUGAR), PotionUtils.setPotion(getPotion("world_of_food:apple_juice"), VINEGAR.get())) ); } public static ItemStack getPotion(String potion) { ItemStack itemstack = new ItemStack(Items.POTION); CompoundNBT tag = itemstack.getTag(); tag.putString("Potion", potion); return itemstack; } }
December 5, 20213 yr Author Ok, here's what I've come up with. For some reason, I can't put the potions in the brewing stand though, they're not recognized as ingredients, I guess. I think I need to initialize the super with something other than "null", but I don't know what to put there, it's expecting a Stream<IItemList> package com.derpyninjafrog.worldoffood.init; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; import net.minecraft.item.crafting.Ingredient; import net.minecraftforge.common.brewing.IBrewingRecipe; import java.util.function.Predicate; public class PotionIngredient extends Ingredient implements Predicate<ItemStack> { String potion; public PotionIngredient(String potion) { super(null); this.potion = potion; } @Override public boolean test(ItemStack itemStack) { return itemStack.getTag().getString("Potion").equals(this.potion); } @Override public Predicate<ItemStack> and(Predicate<? super ItemStack> other) { return Predicate.super.and(other); } }
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.