From 0a09c4fbb8f2bd0ab74c7ee000a1ef5fd827de3d Mon Sep 17 00:00:00 2001 From: D-Cysteine <54219287+D-Cysteine@users.noreply.github.com> Date: Mon, 27 Sep 2021 00:47:27 -0600 Subject: Move assembly line NEI tab before all other GT NEI tabs --- src/main/java/gregtech/nei/NEI_GT_Config.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'src/main/java/gregtech/nei') diff --git a/src/main/java/gregtech/nei/NEI_GT_Config.java b/src/main/java/gregtech/nei/NEI_GT_Config.java index 5aef5b2901..96c2e97d02 100644 --- a/src/main/java/gregtech/nei/NEI_GT_Config.java +++ b/src/main/java/gregtech/nei/NEI_GT_Config.java @@ -12,15 +12,15 @@ public class NEI_GT_Config implements IConfigureNEI { @Override public void loadConfig() { sIsAdded = false; + if (FMLCommonHandler.instance().getEffectiveSide().isClient()) { + ALH = new GT_NEI_AssLineHandler(GT_Recipe.GT_Recipe_Map.sAssemblylineVisualRecipes); + codechicken.nei.api.API.addItemListEntry(ItemList.VOLUMETRIC_FLASK.get(1)); + } for (GT_Recipe.GT_Recipe_Map tMap : GT_Recipe.GT_Recipe_Map.sMappings) { if (tMap.mNEIAllowed) { new GT_NEI_DefaultHandler(tMap); } } - if (FMLCommonHandler.instance().getEffectiveSide().isClient()) { - ALH = new GT_NEI_AssLineHandler(GT_Recipe.GT_Recipe_Map.sAssemblylineVisualRecipes); - codechicken.nei.api.API.addItemListEntry(ItemList.VOLUMETRIC_FLASK.get(1)); - } sIsAdded = true; } -- cgit From 2426e485340ef9f9934a1df03c5ba67115720a1a Mon Sep 17 00:00:00 2001 From: D-Cysteine <54219287+D-Cysteine@users.noreply.github.com> Date: Tue, 28 Sep 2021 03:39:57 -0600 Subject: Support arbitrary ordering of NEI handlers --- .../java/gregtech/nei/GT_NEI_AssLineHandler.java | 12 +---- .../java/gregtech/nei/GT_NEI_DefaultHandler.java | 12 +---- src/main/java/gregtech/nei/NEI_GT_Config.java | 52 +++++++++++++++++++--- src/main/java/gregtech/nei/RecipeMapHandler.java | 20 +++++++++ 4 files changed, 71 insertions(+), 25 deletions(-) create mode 100644 src/main/java/gregtech/nei/RecipeMapHandler.java (limited to 'src/main/java/gregtech/nei') diff --git a/src/main/java/gregtech/nei/GT_NEI_AssLineHandler.java b/src/main/java/gregtech/nei/GT_NEI_AssLineHandler.java index 6c31a8ab6a..6aa8d50b98 100644 --- a/src/main/java/gregtech/nei/GT_NEI_AssLineHandler.java +++ b/src/main/java/gregtech/nei/GT_NEI_AssLineHandler.java @@ -9,7 +9,6 @@ import codechicken.nei.recipe.GuiCraftingRecipe; import codechicken.nei.recipe.GuiRecipe; import codechicken.nei.recipe.GuiUsageRecipe; import codechicken.nei.recipe.TemplateRecipeHandler; -import cpw.mods.fml.common.event.FMLInterModComms; import gregtech.GT_Mod; import gregtech.api.enums.GT_Values; import gregtech.api.enums.OrePrefixes; @@ -36,7 +35,7 @@ import java.util.List; import static gregtech.api.util.GT_Utility.trans; -public class GT_NEI_AssLineHandler extends TemplateRecipeHandler { +public class GT_NEI_AssLineHandler extends RecipeMapHandler { public static final int sOffsetX = 5; public static final int sOffsetY = 11; @@ -45,16 +44,9 @@ public class GT_NEI_AssLineHandler extends TemplateRecipeHandler { GuiContainerManager.addTooltipHandler(new GT_RectHandler()); } - protected final GT_Recipe.GT_Recipe_Map mRecipeMap; - public GT_NEI_AssLineHandler(GT_Recipe.GT_Recipe_Map aRecipeMap) {//this is called when recipes should be shown - this.mRecipeMap = aRecipeMap; + super(aRecipeMap); this.transferRects.add(new RecipeTransferRect(new Rectangle(138, 18, 18, 18), getOverlayIdentifier())); - if (!NEI_GT_Config.sIsAdded) { - FMLInterModComms.sendRuntimeMessage(GT_Values.GT, "NEIPlugins", "register-crafting-handler", "gregtech@" + getRecipeName() + "@" + getOverlayIdentifier()); - GuiCraftingRecipe.craftinghandlers.add(this); - GuiUsageRecipe.usagehandlers.add(this); - } } public List getSortedRecipes() { diff --git a/src/main/java/gregtech/nei/GT_NEI_DefaultHandler.java b/src/main/java/gregtech/nei/GT_NEI_DefaultHandler.java index 802fcdbc6e..d91f8d7ab5 100644 --- a/src/main/java/gregtech/nei/GT_NEI_DefaultHandler.java +++ b/src/main/java/gregtech/nei/GT_NEI_DefaultHandler.java @@ -9,7 +9,6 @@ import codechicken.nei.recipe.GuiCraftingRecipe; import codechicken.nei.recipe.GuiRecipe; import codechicken.nei.recipe.GuiUsageRecipe; import codechicken.nei.recipe.TemplateRecipeHandler; -import cpw.mods.fml.common.event.FMLInterModComms; import gregtech.GT_Mod; import gregtech.api.enums.GT_Values; import gregtech.api.enums.OrePrefixes; @@ -36,7 +35,7 @@ import java.util.Collections; import java.util.Iterator; import java.util.List; -public class GT_NEI_DefaultHandler extends TemplateRecipeHandler { +public class GT_NEI_DefaultHandler extends RecipeMapHandler { public static final int sOffsetX = 5; public static final int sOffsetY = 11; @@ -45,16 +44,9 @@ public class GT_NEI_DefaultHandler extends TemplateRecipeHandler { GuiContainerManager.addTooltipHandler(new GT_RectHandler()); } - protected final GT_Recipe.GT_Recipe_Map mRecipeMap; - public GT_NEI_DefaultHandler(GT_Recipe.GT_Recipe_Map aRecipeMap) { - this.mRecipeMap = aRecipeMap; + super(aRecipeMap); this.transferRects.add(new TemplateRecipeHandler.RecipeTransferRect(new Rectangle(65, 13, 36, 18), getOverlayIdentifier())); - if (!NEI_GT_Config.sIsAdded) { - FMLInterModComms.sendRuntimeMessage(GT_Values.GT, "NEIPlugins", "register-crafting-handler", "gregtech@" + getRecipeName() + "@" + getOverlayIdentifier()); - GuiCraftingRecipe.craftinghandlers.add(this); - GuiUsageRecipe.usagehandlers.add(this); - } } public List getSortedRecipes() { diff --git a/src/main/java/gregtech/nei/NEI_GT_Config.java b/src/main/java/gregtech/nei/NEI_GT_Config.java index 96c2e97d02..0b4476eeef 100644 --- a/src/main/java/gregtech/nei/NEI_GT_Config.java +++ b/src/main/java/gregtech/nei/NEI_GT_Config.java @@ -1,25 +1,67 @@ package gregtech.nei; import codechicken.nei.api.IConfigureNEI; +import codechicken.nei.recipe.GuiCraftingRecipe; +import codechicken.nei.recipe.GuiUsageRecipe; +import codechicken.nei.recipe.TemplateRecipeHandler; +import com.google.common.collect.ImmutableMap; import cpw.mods.fml.common.FMLCommonHandler; +import cpw.mods.fml.common.event.FMLInterModComms; +import gregtech.api.enums.GT_Values; import gregtech.api.enums.ItemList; import gregtech.api.util.GT_Recipe; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; + public class NEI_GT_Config implements IConfigureNEI { + /** + * This map determines the order in which NEI handlers will be registered and displayed in tabs. + * + *

Handlers will be displayed in ascending order of integer value. Any recipe map that is not + * present in this map will be assigned a value of 0. Negative values are fine. + */ + private static final ImmutableMap RECIPE_MAP_ORDERING = + ImmutableMap.builder() + .put(GT_Recipe.GT_Recipe_Map.sAssemblylineVisualRecipes, 1) + .put(GT_Recipe.GT_Recipe_Map.sScannerFakeRecipes, 2) + .build(); + + private static final Comparator RECIPE_MAP_HANDLER_COMPARATOR = + Comparator.comparingInt( + handler -> RECIPE_MAP_ORDERING.getOrDefault(handler.getRecipeMap(), 0)); + public static boolean sIsAdded = true; public static GT_NEI_AssLineHandler ALH; + private static void addHandler(TemplateRecipeHandler handler) { + FMLInterModComms.sendRuntimeMessage( + GT_Values.GT, "NEIPlugins", "register-crafting-handler", + "gregtech@" + handler.getRecipeName() + "@" + handler.getOverlayIdentifier()); + GuiCraftingRecipe.craftinghandlers.add(handler); + GuiUsageRecipe.usagehandlers.add(handler); + } + @Override public void loadConfig() { sIsAdded = false; if (FMLCommonHandler.instance().getEffectiveSide().isClient()) { + List handlers = new ArrayList<>(); + ALH = new GT_NEI_AssLineHandler(GT_Recipe.GT_Recipe_Map.sAssemblylineVisualRecipes); - codechicken.nei.api.API.addItemListEntry(ItemList.VOLUMETRIC_FLASK.get(1)); - } - for (GT_Recipe.GT_Recipe_Map tMap : GT_Recipe.GT_Recipe_Map.sMappings) { - if (tMap.mNEIAllowed) { - new GT_NEI_DefaultHandler(tMap); + handlers.add(ALH); + + for (GT_Recipe.GT_Recipe_Map tMap : GT_Recipe.GT_Recipe_Map.sMappings) { + if (tMap.mNEIAllowed) { + handlers.add(new GT_NEI_DefaultHandler(tMap)); + } } + + handlers.sort(RECIPE_MAP_HANDLER_COMPARATOR); + handlers.forEach(NEI_GT_Config::addHandler); + + codechicken.nei.api.API.addItemListEntry(ItemList.VOLUMETRIC_FLASK.get(1)); } sIsAdded = true; } diff --git a/src/main/java/gregtech/nei/RecipeMapHandler.java b/src/main/java/gregtech/nei/RecipeMapHandler.java new file mode 100644 index 0000000000..aac322d303 --- /dev/null +++ b/src/main/java/gregtech/nei/RecipeMapHandler.java @@ -0,0 +1,20 @@ +package gregtech.nei; + +import codechicken.nei.recipe.TemplateRecipeHandler; +import gregtech.api.util.GT_Recipe; + +/** + * This abstract class represents an NEI handler that is constructed from a + * {@link GT_Recipe.GT_Recipe_Map}, and allows us to sort NEI handlers by recipe map. + */ +abstract class RecipeMapHandler extends TemplateRecipeHandler { + protected final GT_Recipe.GT_Recipe_Map mRecipeMap; + + RecipeMapHandler(GT_Recipe.GT_Recipe_Map mRecipeMap) { + this.mRecipeMap = mRecipeMap; + } + + GT_Recipe.GT_Recipe_Map getRecipeMap() { + return mRecipeMap; + } +} -- cgit