From 85cb9c653d1394f6e5e20ecc9eb7d8cfbe162784 Mon Sep 17 00:00:00 2001 From: Micle Date: Wed, 12 Jan 2022 17:20:33 +0000 Subject: [PATCH] Added new RecipeUpdateEventHandler for refreshing recipe list when config file changes. --- .../event/RecipeUpdateEventHandler.java | 65 +++++++++++++++++++ .../totemofreviving/setup/Registration.java | 19 ++++-- 2 files changed, 77 insertions(+), 7 deletions(-) create mode 100644 src/main/java/dev/micle/totemofreviving/event/RecipeUpdateEventHandler.java diff --git a/src/main/java/dev/micle/totemofreviving/event/RecipeUpdateEventHandler.java b/src/main/java/dev/micle/totemofreviving/event/RecipeUpdateEventHandler.java new file mode 100644 index 0000000..93544d6 --- /dev/null +++ b/src/main/java/dev/micle/totemofreviving/event/RecipeUpdateEventHandler.java @@ -0,0 +1,65 @@ +package dev.micle.totemofreviving.event; + +import dev.micle.totemofreviving.TotemOfReviving; +import dev.micle.totemofreviving.config.Config; +import dev.micle.totemofreviving.item.StrawTotemItem; +import net.minecraft.client.Minecraft; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.item.crafting.RecipeManager; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.event.entity.EntityJoinWorldEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.config.ModConfig; + +import java.util.ArrayList; + +public class RecipeUpdateEventHandler { + public static class ModBus { + @SubscribeEvent + @OnlyIn(Dist.CLIENT) + public void onModConfigReloadEvent(ModConfig.Reloading event) { + if (!event.getConfig().getModId().equals(TotemOfReviving.MOD_ID)) { + return; + } + if (Minecraft.getInstance().getSingleplayerServer() != null) { + updateRecipeManager(Minecraft.getInstance().getSingleplayerServer().getRecipeManager()); + return; + } + if (Minecraft.getInstance().getConnection() != null) { + updateRecipeManager(Minecraft.getInstance().getConnection().getRecipeManager()); + return; + } + System.out.println("FAILED TO GET RECIPE MANAGER!"); + } + } + + public static class EventBus { + @SubscribeEvent + @OnlyIn(Dist.CLIENT) + public void onPlayerJoinEvent(EntityJoinWorldEvent event) { + if (!(event.getEntity() instanceof PlayerEntity)) { return; } + updateRecipeManager(event.getEntity().level.getRecipeManager()); + } + } + + private static void updateRecipeManager(RecipeManager recipeManager) { + ArrayList> newRecipes = new ArrayList<>(); + for (IRecipe recipe : recipeManager.getRecipes()) { + if (recipe.getResultItem().getItem() instanceof StrawTotemItem) { + StrawTotemItem.setRecipe(recipe); + if (!Config.Server.getStrawTotemConfig().getIsEnabled()) { + continue; + } + } + newRecipes.add(recipe); + } + + if (!newRecipes.contains(StrawTotemItem.getRecipe()) && Config.Server.getStrawTotemConfig().getIsEnabled()) { + newRecipes.add(StrawTotemItem.getRecipe()); + } + + recipeManager.replaceRecipes(newRecipes); + } +} diff --git a/src/main/java/dev/micle/totemofreviving/setup/Registration.java b/src/main/java/dev/micle/totemofreviving/setup/Registration.java index a690687..4db7989 100755 --- a/src/main/java/dev/micle/totemofreviving/setup/Registration.java +++ b/src/main/java/dev/micle/totemofreviving/setup/Registration.java @@ -1,23 +1,28 @@ package dev.micle.totemofreviving.setup; import dev.micle.totemofreviving.TotemOfReviving; -import net.minecraft.block.Block; +import dev.micle.totemofreviving.event.RecipeUpdateEventHandler; import net.minecraft.item.Item; +import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.eventbus.api.IEventBus; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; -import net.minecraftforge.registries.*; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.registries.IForgeRegistry; +import net.minecraftforge.registries.IForgeRegistryEntry; public class Registration { - public static final DeferredRegister BLOCKS = create(ForgeRegistries.BLOCKS); public static final DeferredRegister ITEMS = create(ForgeRegistries.ITEMS); public static void register() { - IEventBus eventBus = FMLJavaModLoadingContext.get().getModEventBus(); + IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus(); - BLOCKS.register(eventBus); - ITEMS.register(eventBus); - + ITEMS.register(modEventBus); ModItems.register(); + + modEventBus.register(new RecipeUpdateEventHandler.ModBus()); + + MinecraftForge.EVENT_BUS.register(new RecipeUpdateEventHandler.EventBus()); } private static > DeferredRegister create(IForgeRegistry registry) {