From a88a13e7cf483f8e1dd425bc1a3da2c5bd6a1b8a Mon Sep 17 00:00:00 2001 From: Jason Mitchell Date: Tue, 13 Apr 2021 20:16:56 -0700 Subject: [PATCH] Use a config file instead of a hardcoded list so modpacks can customize it. Defaults to BloodMagic "NEIAlchemyRecipeHandler" for non GTNH usage. --- src/codechicken/nei/ClientHandler.java | 34 +++++++++++++++++++ src/codechicken/nei/NEIClientConfig.java | 8 +++-- .../nei/recipe/GuiCraftingRecipe.java | 3 +- src/codechicken/nei/recipe/GuiRecipe.java | 4 --- .../nei/recipe/GuiUsageRecipe.java | 3 +- 5 files changed, 44 insertions(+), 8 deletions(-) diff --git a/src/codechicken/nei/ClientHandler.java b/src/codechicken/nei/ClientHandler.java index d2e27c31..9d48955e 100644 --- a/src/codechicken/nei/ClientHandler.java +++ b/src/codechicken/nei/ClientHandler.java @@ -7,6 +7,7 @@ import codechicken.nei.api.API; import codechicken.nei.api.ItemInfo; import cpw.mods.fml.client.CustomModLoadingErrorDisplayException; import cpw.mods.fml.common.FMLCommonHandler; +import cpw.mods.fml.common.Loader; import cpw.mods.fml.common.eventhandler.SubscribeEvent; import cpw.mods.fml.common.gameevent.TickEvent; import cpw.mods.fml.common.gameevent.TickEvent.Phase; @@ -23,13 +24,25 @@ import net.minecraft.entity.item.EntityItem; import net.minecraft.world.World; import net.minecraftforge.client.event.RenderWorldLastEvent; import net.minecraftforge.common.MinecraftForge; +import org.apache.commons.io.IOUtils; +import java.io.File; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.HashSet; import java.util.Iterator; import java.util.List; public class ClientHandler { + private static String[] defaultSerialHandlers = { + "WayofTime.alchemicalWizardry.client.nei.NEIAlchemyRecipeHandler" + }; private static ClientHandler instance; private ArrayList SMPmagneticItems = new ArrayList<>(); @@ -114,8 +127,29 @@ public class ClientHandler } public static void preInit() { + loadSerialHandlers(); ItemInfo.preInit(); } + + public static void loadSerialHandlers() { + File file = NEIClientConfig.serialHandlersFile; + if(!file.exists()) { + try(FileWriter writer = new FileWriter(file)) { + NEIClientConfig.logger.info("Creating default serial handlers list {}", file); + Collection toSave = Loader.isModLoaded("dreamcraft") ? Collections.singletonList("") : Arrays.asList(defaultSerialHandlers); + IOUtils.writeLines(toSave, "\n", writer); + } catch (IOException e) { + NEIClientConfig.logger.error("Failed to save default serial handlers list to file {}", file, e); + } + } + try (FileReader reader = new FileReader(file)) { + NEIClientConfig.logger.info("Loading serial handlers from file {}", file); + NEIClientConfig.serialHandlers = new HashSet<>(IOUtils.readLines(reader)); + } catch (IOException e) { + NEIClientConfig.logger.error("Failed to load serial handlers from file {}", file, e); + } + + } public static void load() { instance = new ClientHandler(); diff --git a/src/codechicken/nei/NEIClientConfig.java b/src/codechicken/nei/NEIClientConfig.java index f812c7dc..49ac2bb2 100644 --- a/src/codechicken/nei/NEIClientConfig.java +++ b/src/codechicken/nei/NEIClientConfig.java @@ -41,8 +41,7 @@ import java.io.File; import java.util.HashSet; import java.util.List; -public class NEIClientConfig -{ +public class NEIClientConfig { private static boolean configLoaded; private static boolean enabledOverride; @@ -54,6 +53,11 @@ public class NEIClientConfig public static ConfigSet world; public static final File bookmarkFile = new File(configDir, "bookmarks.ini"); public static final File handlerFile = new File(configDir, "handlers.csv"); + public static final File serialHandlersFile = new File(configDir, "serialhandlers.cfg"); + + // Set of handlers that need to be run in serial + public static HashSet serialHandlers = new HashSet<>(); + public static ItemStack[] creativeInv; diff --git a/src/codechicken/nei/recipe/GuiCraftingRecipe.java b/src/codechicken/nei/recipe/GuiCraftingRecipe.java index 85ece919..60b3809b 100644 --- a/src/codechicken/nei/recipe/GuiCraftingRecipe.java +++ b/src/codechicken/nei/recipe/GuiCraftingRecipe.java @@ -2,6 +2,7 @@ package codechicken.nei.recipe; import codechicken.core.TaskProfiler; import codechicken.nei.ItemList; +import codechicken.nei.NEIClientConfig; import codechicken.nei.NEIClientUtils; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiScreen; @@ -58,7 +59,7 @@ public class GuiCraftingRecipe extends GuiRecipe return; final String handlerClassStr = handlerClass.getName(); - if(Arrays.asList(serialHandlers).contains(handlerClassStr)) + if(NEIClientConfig.serialHandlers.contains(handlerClassStr)) serialCraftingHandlers.add(handler); else craftinghandlers.add(handler); diff --git a/src/codechicken/nei/recipe/GuiRecipe.java b/src/codechicken/nei/recipe/GuiRecipe.java index 9d992655..52a06056 100644 --- a/src/codechicken/nei/recipe/GuiRecipe.java +++ b/src/codechicken/nei/recipe/GuiRecipe.java @@ -36,10 +36,6 @@ import java.util.Collections; import java.util.List; public abstract class GuiRecipe extends GuiContainer implements IGuiContainerOverlay, IGuiClientSide, IGuiHandleMouseWheel, IContainerTooltipHandler, INEIGuiHandler { - // List of handlers that need to be run in serial - protected static final String[] serialHandlers = { - "WayofTime.alchemicalWizardry.client.nei.NEIAlchemyRecipeHandler" - }; // Background image calculations private static final int BG_TOP_HEIGHT = 6; private static final int BG_MIDDLE_HEIGHT = 154; diff --git a/src/codechicken/nei/recipe/GuiUsageRecipe.java b/src/codechicken/nei/recipe/GuiUsageRecipe.java index 7db48a26..f4c3231e 100644 --- a/src/codechicken/nei/recipe/GuiUsageRecipe.java +++ b/src/codechicken/nei/recipe/GuiUsageRecipe.java @@ -2,6 +2,7 @@ package codechicken.nei.recipe; import codechicken.core.TaskProfiler; import codechicken.nei.ItemList; +import codechicken.nei.NEIClientConfig; import codechicken.nei.NEIClientUtils; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.inventory.GuiContainer; @@ -58,7 +59,7 @@ public class GuiUsageRecipe extends GuiRecipe return; final String handlerClassStr = handlerClass.getName(); - if(Arrays.asList(serialHandlers).contains(handlerClassStr)) + if(NEIClientConfig.serialHandlers.contains(handlerClassStr)) serialUsageHandlers.add(handler); else usagehandlers.add(handler);