Jump to content

DerpyNinjaFrog

Members
  • Posts

    9
  • Joined

Everything posted by DerpyNinjaFrog

  1. 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); } }
  2. 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; } }
  3. I specifically checked that but that was the problem. I must be blind. ๐Ÿ˜‚ Fixed it. I put this in my effect class constructor: @Override public void applyInstantenousEffect(@Nullable Entity p_180793_1_, @Nullable Entity p_180793_2_, LivingEntity p_180793_3_, int p_180793_4_, double p_180793_5_) { if (p_180793_3_ instanceof PlayerEntity) { FoodStats foodstats = ((PlayerEntity)p_180793_3_).getFoodData(); foodstats.setFoodLevel(foodstats.getFoodLevel()+2); foodstats.setSaturation(foodstats.getSaturationLevel()+1); } } Thank you!
  4. Debug error: My potion/effect/brewing recipe registry: @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))); @SubscribeEvent public static void registerPotions(FMLCommonSetupEvent event) { event.enqueueWork( ()-> BrewingRecipeRegistry.addRecipe(Ingredient.of(Items.POTION), Ingredient.of(Items.COCOA_BEANS), PotionUtils.setPotion(new ItemStack(Items.POTION), HOT_COCOA.get())) ); } } My "nourished" effect class: public class Nourished extends InstantEffect { public Nourished(EffectType typeIn, int liquidColorIn) { super(typeIn, liquidColorIn); } @Override public void applyInstantenousEffect(@Nullable Entity p_180793_1_, @Nullable Entity p_180793_2_, LivingEntity p_180793_3_, int p_180793_4_, double p_180793_5_) { if (p_180793_3_ == Minecraft.getInstance().player) { FoodStats foodstats = Minecraft.getInstance().player.getFoodData(); foodstats.setFoodLevel(foodstats.getFoodLevel()+2); foodstats.setSaturation(foodstats.getSaturationLevel()+1); } } } Should all my potion/effect/brewing recipe problems be in one thread?
  5. That fixed it, thanks! I'll work on changing my ModId. ๐Ÿ™‚ I put this in my mod class constructor: ModPotions.POTION_TYPES.register(FMLJavaModLoadingContext.get().getModEventBus());
  6. Ok, now that I've gotten my brewing recipe to work I'm trying to actually create a new potion type. I've looked at some other forum threads. This looks like it should be correct but I can no longer brew the item. I can't find the new potion type in the menu so something is wrong: @Mod.EventBusSubscriber(bus = Bus.MOD, modid = "wof") public class ModPotions { public static final DeferredRegister<Potion> POTION_TYPES = DeferredRegister.create(ForgeRegistries.POTION_TYPES, WorldOfFood.MOD_ID); public static final RegistryObject<Potion> HOT_COCOA = POTION_TYPES.register("hot_cocoa", () -> new Potion(new EffectInstance(Effects.SATURATION, 3600))); @SubscribeEvent public static void registerPotions(FMLCommonSetupEvent event) { event.enqueueWork( ()-> BrewingRecipeRegistry.addRecipe(Ingredient.of(Items.POTION), Ingredient.of(Items.COCOA_BEANS), PotionUtils.setPotion(new ItemStack(Items.POTION), HOT_COCOA.get())) ); } }
  7. Got it to work, thanks! 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.BrewingRecipeRegistry; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.Mod.EventBusSubscriber.Bus; import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; @Mod.EventBusSubscriber(bus = Bus.MOD, modid = "wof") public class ModPotions { @SubscribeEvent public static void registerPotions(FMLCommonSetupEvent event) { event.enqueueWork( ()-> BrewingRecipeRegistry.addRecipe(Ingredient.of(Items.POTION), Ingredient.of(Items.COCOA_BEANS), new ItemStack(ModItems.HOT_COCOA.get())) ); } }
  8. I am new to Java. Is this correct? public class ModPotions { @SubscribeEvent public static void registerPotions(FMLCommonSetupEvent event) { event.enqueueWork( ()-> BrewingRecipeRegistry.addRecipe(Ingredient.of(Items.POTION), Ingredient.of(Items.COCOA_BEANS), new ItemStack(HotCocoa::new)) ); } } And how do you register events with the event handler?
  9. I don't know how to make this work. It doesn't give any warnings, crashes, or errors. public class ModPotions { @SubscribeEvent public static void registerPotions(FMLCommonSetupEvent event) { BrewingRecipeRegistry.addRecipe(Ingredient.of(Items.POTION), Ingredient.of(Items.COCOA_BEANS), new ItemStack(HotCocoa::new)); } }
ร—
ร—
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.