• Posts

    • I followed a tutorial on how to make custom potions for a minecraft mod, however, this was before deferred registries were used frequently. So I pieced together things from regular registries and deferred registries, however, I am having trouble. All but one of my custom recipes that use the Awkward Potion as a base results in an uncraftable potion, even though I can see, obtain, and use my custom potions from the creative tabs. The recipes that use my custom potions don't work at all.   I think this is all because of the way I inputted my custom potions into the recipes, because the one recipe that uses all vanilla items works fine (an awkward potion and an emerald, creating a Potion of Luck). Am I missing something? Am I way off as to where the problem lies? My main class: package com.oberonpuck.minormagicks; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import com.oberonpuck.minormagicks.util.ItemRegistryHandler; import com.oberonpuck.minormagicks.util.PotionRegistryHandler; // The value here should match an entry in the META-INF/mods.toml file @Mod("minormagicks") public class MinorMagicks { private static final Logger LOGGER = LogManager.getLogger(); public static final String MOD_ID = "minormagicks"; public MinorMagicks() { FMLJavaModLoadingContext.get().getModEventBus().addListener(this::setup); FMLJavaModLoadingContext.get().getModEventBus().addListener(this::doClientStuff); ItemRegistryHandler.init(); PotionRegistryHandler.init(); MinecraftForge.EVENT_BUS.register(this); } private void setup(final FMLCommonSetupEvent event){} private void doClientStuff(final FMLClientSetupEvent event){} }   My potion class for registering potions and recipes: package com.oberonpuck.minormagicks.util; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.function.Supplier; import com.oberonpuck.minormagicks.MinorMagicks; import com.oberonpuck.minormagicks.items.ItemBase; import net.minecraft.entity.ai.attributes.Attributes; import net.minecraft.item.Item; import net.minecraft.item.Items; import net.minecraft.potion.Effect; import net.minecraft.potion.EffectInstance; import net.minecraft.potion.EffectType; import net.minecraft.potion.Effects; import net.minecraft.potion.Potion; import net.minecraft.potion.PotionBrewing; import net.minecraft.potion.Potions; import net.minecraft.util.ResourceLocation; import net.minecraftforge.fml.RegistryObject; import net.minecraftforge.fml.common.ObfuscationReflectionHelper; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.ForgeRegistries; import net.minecraftforge.registries.ObjectHolder; public class PotionRegistryHandler { public static final DeferredRegister<Potion> POTIONS = DeferredRegister.create(ForgeRegistries.POTION_TYPES, MinorMagicks.MOD_ID); public static final DeferredRegister<Effect> EFFECTS = DeferredRegister.create(ForgeRegistries.POTIONS, MinorMagicks.MOD_ID); public static void init () { POTIONS.register(FMLJavaModLoadingContext.get().getModEventBus()); PotionRegistryHandler.addBrewingRecipes(); } //Potions public static final RegistryObject<Potion> HUNGER = POTIONS.register("hunger", () -> new Potion(new EffectInstance(Effects.HUNGER, 3600))); public static final RegistryObject<Potion> RESISTANCE = POTIONS.register("resistance", () -> new Potion(new EffectInstance(Effects.RESISTANCE, 3600))); public static final RegistryObject<Potion> ABSORPTION = POTIONS.register("absorption", () -> new Potion(new EffectInstance(Effects.ABSORPTION, 3600))); public static final RegistryObject<Potion> HEALTH_BOOST = POTIONS.register("health_boost", () -> new Potion(new EffectInstance(Effects.HEALTH_BOOST, 3600))); public static final RegistryObject<Potion> HASTE = POTIONS.register("haste", () -> new Potion(new EffectInstance(Effects.HASTE, 3600))); public static final RegistryObject<Potion> MINING_FATIGUE = POTIONS.register("mining_fatigue", () -> new Potion(new EffectInstance(Effects.MINING_FATIGUE, 3600))); public static final RegistryObject<Potion> NASUEA = POTIONS.register("nausea", () -> new Potion(new EffectInstance(Effects.NAUSEA, 3600))); public static final RegistryObject<Potion> BLINDNESS = POTIONS.register("blindness", () -> new Potion(new EffectInstance(Effects.BLINDNESS, 3600))); public static final RegistryObject<Potion> GLOWING = POTIONS.register("glowing", () -> new Potion(new EffectInstance(Effects.GLOWING, 3600))); public static final RegistryObject<Potion> LEVITATION = POTIONS.register("levitation", () -> new Potion(new EffectInstance(Effects.LEVITATION, 3600))); public static final RegistryObject<Potion> DOLPHINS_GRACE = POTIONS.register("dolphins_grace", () -> new Potion(new EffectInstance(Effects.DOLPHINS_GRACE, 3600))); public static final RegistryObject<Potion> UNLUCK = POTIONS.register("unluck", () -> new Potion(new EffectInstance(Effects.UNLUCK, 3600))); private static Method brewing_mixes; private static void addMix(Potion start, Item ingredient, Potion result) { if(brewing_mixes == null) { brewing_mixes = ObfuscationReflectionHelper.findMethod(PotionBrewing.class, "addMix", Potion.class, Item.class, Potion.class); brewing_mixes.setAccessible(true); } try { brewing_mixes.invoke(null, start, ingredient, result); } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { // TODO Auto-generated catch block e.printStackTrace(); } } static ResourceLocation nausea = new ResourceLocation("minormagicks:nausea"); static ResourceLocation hunger = new ResourceLocation("minormagicks:hunger"); static ResourceLocation unluck = new ResourceLocation("minormagicks:unluck"); static ResourceLocation dolphins_grace = new ResourceLocation("minormagicks:dolphins_grace"); static ResourceLocation resistance = new ResourceLocation("minormagicks:resistance"); static ResourceLocation health_boost = new ResourceLocation("minormagicks:health_boost"); static ResourceLocation haste = new ResourceLocation("minormagicks:haste"); static ResourceLocation mining_fatigue = new ResourceLocation("minormagicks:mining_fatigue"); static ResourceLocation absorption = new ResourceLocation("minormagicks:absorption"); static ResourceLocation levitation = new ResourceLocation("minormagicks:levitation"); public static void addBrewingRecipes() { addMix(Potions.AWKWARD, Items.ROTTEN_FLESH, ForgeRegistries.POTION_TYPES.getValue(nausea)); addMix(ForgeRegistries.POTION_TYPES.getValue(nausea), Items.FERMENTED_SPIDER_EYE, ForgeRegistries.POTION_TYPES.getValue(hunger)); addMix(Potions.AWKWARD, Items.EMERALD, Potions.LUCK); addMix(Potions.LUCK, Items.FERMENTED_SPIDER_EYE, ForgeRegistries.POTION_TYPES.getValue(unluck)); addMix(Potions.WATER_BREATHING, Items.FERMENTED_SPIDER_EYE, ForgeRegistries.POTION_TYPES.getValue(dolphins_grace)); addMix(Potions.AWKWARD, Items.SHULKER_SHELL, ForgeRegistries.POTION_TYPES.getValue(resistance)); addMix(ForgeRegistries.POTION_TYPES.getValue(resistance), Items.FERMENTED_SPIDER_EYE, ForgeRegistries.POTION_TYPES.getValue(health_boost)); addMix(Potions.AWKWARD, Items.PRISMARINE_CRYSTALS, ForgeRegistries.POTION_TYPES.getValue(haste)); addMix(ForgeRegistries.POTION_TYPES.getValue(haste), Items.FERMENTED_SPIDER_EYE, ForgeRegistries.POTION_TYPES.getValue(mining_fatigue)); addMix(Potions.FIRE_RESISTANCE, Items.FERMENTED_SPIDER_EYE, ForgeRegistries.POTION_TYPES.getValue(absorption)); addMix(Potions.SLOW_FALLING, Items.FERMENTED_SPIDER_EYE, ForgeRegistries.POTION_TYPES.getValue(levitation)); } }  
    • setAllowedSpawnTypes(boolean hostile, boolean peaceful) in World and public void checkDespawn() in MobEntity
    • Can this potentially be a forge bug?   EDIT: I was also trying to figure out how/where in the code, zombies despawn when changing to peaceful. Couldn't find it tho
    • My IDE says onDifficultyChange(Difficulty difficulty, Difficulty oldDifficulty) in ForgeHooks is never called in all places, not sure why is this happening
    • Hi everyone,   I'm having issues using this event. All I did was add a simple logger to it, and it does not log when I change difficulty through commands in game (/difficulty peaceful), while other events do log properly. Here is the code: package com.eon.sharkmod.events; import com.eon.sharkmod.SharkMod; import net.minecraft.world.Difficulty; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.event.DifficultyChangeEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.Mod.EventBusSubscriber.Bus; @Mod.EventBusSubscriber(modid = SharkMod.MOD_ID, bus = Bus.FORGE) public class DifficultyChangeEventHandler { @SubscribeEvent public static void difficultyChangeEvent(DifficultyChangeEvent event) { SharkMod.LOGGER.info("testing"); Difficulty newDiff = event.getDifficulty(); SharkMod.LOGGER.info("Hey! New dif: " + newDiff + ", old dif: " + event.getOldDifficulty()); } }   Neither of these logs print. Can anyone point me in the right direction? I've tried changing the bus to MOD, even tho I knew it was dumb (it didn't work). I was also maybe thinking that this event only fires if the difficulty is changed through actual java code (instead of commands), so I tried this: this.entity.world.getWorldInfo().setDifficulty(Difficulty.HARD); First, this did change the difficulty but did not fire the event. I also put this line in the tick() method, and then launched my game and tried changing difficulty with commands all while difficulty was changing with the every tick, but nothing logged.   What am I doing wrong? Is there some other way of knowing when the difficulty changes? I'd like to adjust my shark's ai goals and stats   Thank you!
  • Topics

  • Who's Online (See full list)