From f74c7cc297d1d19d38a19683cd277ad9ce605d3a Mon Sep 17 00:00:00 2001 From: miozune Date: Mon, 4 Dec 2023 05:34:27 +0900 Subject: Refactor RecipeMap (#2345) * Remove deprecated and unused things * Move recipemap subclasses * Move GT_Recipe_Map to outside and rename to RecipeMap * Move recipemap instances to separated class & remove prepending s * Remove useless GT_Recipe constructors * Always use ModularUI * Rename IGT_RecipeMap -> IRecipeMap * Add RecipeMapBuilder * Remove more deprecated and unused things * Fix RecipeMap type parameters * Use multimap for recipe index * Fix bending recipe error in dev env * Remove mUniqueIdentifier * Update AE2FC * Less edgy texture for NEI recipe background * Add replicator fluid output slot for NEI and machine GUI * Fix fluid fuels not having fuel value in large boilers * Remove GT_RectHandler and NEI_TransferRectHost * Remove RecipeMapHandler * Move NEI energy description from RecipeMapFrontend to Power * Refactor the way to filter fusion recipes * Check restriction for some properties * Remove showVoltageAmperage * Make Power accept GT_Recipe * Fix NPE * Move NEI duration description to Power from Frontend * Directly implement IRecipeProcessingAwareHatch for GT_MetaTileEntity_Hatch_InputBus_ME * Make Power integrated with GT_OverclockCalculator * Rename Power -> OverclockDescriber * Don't modify recipe find logic until postload finishes * Reformat reserved MTE ids * Fix check for too few inputs on recipe addition * Move replicator logic to backend * Stop un-hiding assline recipes * Allow setting custom recipe comparator & implement for fusion * Update AE2FC * Rename getRecipeList and getRecipes -> getRecipeMap * Automatically register recipe catalysts * Cleanup the way to detect recipe collision * Make use of BasicUIProperties for basic machines * Make use of BasicUIProperties for UIHelper * Rename specialHandler -> recipeTransformer * Add way to automatically register handler info * Add recipe category * Add some APIs for addons * Rename blastRecipes -> blastFurnaceRecipes * Remove GT_MetaTileEntity_BasicMachine_GT_Recipe#mSharedTank and #mRequiresFluidForFiltering * Don't require setting duration and EU/t for fuel recipes * Don't require setting EU/t for primitive blast furnace recipes * Revert change to addMultiblockChemicalRecipe * Fix large boiler general desc recipe not being added * Hide duration and EU/t from large boiler * Cleanup recipe stacktrace draw * Extend metadata usage of recipe builder to recipe itself * Implement metadata handling & NEI comparator for PCB factory * Some rename around NEIRecipeInfo * Some toString implementations * Add more APIs for addons & some rename * Infer handler icon from recipe catalyst if one is not set * Also shrink recipe title when OC is not used * Remove rare earth centrifuge recipe * Use metadata for replicator backend * Adjust geothermal generator output slot * Allow having multiple transferrects * Store recipemap reference in backend * Rename vacuumRecipes -> vacuumFreezerRecipes * Add config to tweak visibility of recipe categories * Remove mHideRecyclingRecipes in favor of recipe category config * Fix typo fluidSolidfierRecipes -> fluidSolidifierRecipes * Refactor findRecipe and ProcessingLogic to use Stream * Fix BBF handler icon & remove bronze blast furnace * Add fluent API for findRecipe * Add way to stop adding progressbar * Change arg order for special texture * Avoid overwriting interesting failure with NO_RECIPE * Some changes for FuelBackend * Set space project icon * Remove localization from TT * Remove CNC recipe adder * Move recipe extractor from AE2FC * Minor internal change for ProcessingLogic#applyRecipe * More javadoc on #getAvailableRecipeMaps * Better implementation of #ofSupplier * Move replicator exponent config to GT_Proxy * Remove RC & IC2 macerator handling * Rename StreamUtil -> GT_StreamUtil * Refactor code around RecipeMetadataStorage * Revise #compileRecipe javadoc * Switch extreme diesel recipe loader to downstream recipe map * Optimize #reMap * Rename reload -> reloadNEICache * Minor tweak for drawEnergyInfo * a bit more doc * Adjust recipe catalysts * Add toString implementation for GT_Fluid for debug * Minor revision for OilCrackerBackend * Index replicator recipes by material --------- Co-authored-by: Glease <4586901+Glease@users.noreply.github.com> --- .../preload/GT_Loader_Item_Block_And_Fluid.java | 36 +++++++-------- .../preload/GT_Loader_MetaTileEntities.java | 9 ---- .../java/gregtech/loaders/preload/GT_PreLoad.java | 53 +++++++++++++++++++++- 3 files changed, 69 insertions(+), 29 deletions(-) (limited to 'src/main/java/gregtech/loaders/preload') diff --git a/src/main/java/gregtech/loaders/preload/GT_Loader_Item_Block_And_Fluid.java b/src/main/java/gregtech/loaders/preload/GT_Loader_Item_Block_And_Fluid.java index 20b0b46098..0d1257350d 100644 --- a/src/main/java/gregtech/loaders/preload/GT_Loader_Item_Block_And_Fluid.java +++ b/src/main/java/gregtech/loaders/preload/GT_Loader_Item_Block_And_Fluid.java @@ -9,10 +9,10 @@ import static gregtech.api.enums.Mods.PamsHarvestCraft; import static gregtech.api.enums.Mods.Railcraft; import static gregtech.api.enums.Mods.Thaumcraft; import static gregtech.api.enums.Mods.TwilightForest; -import static gregtech.api.util.GT_Recipe.GT_Recipe_Map.sCentrifugeRecipes; -import static gregtech.api.util.GT_Recipe.GT_Recipe_Map.sFluidCannerRecipes; -import static gregtech.api.util.GT_Recipe.GT_Recipe_Map.sMaceratorRecipes; -import static gregtech.api.util.GT_Recipe.GT_Recipe_Map.sThermalCentrifugeRecipes; +import static gregtech.api.recipe.RecipeMaps.centrifugeRecipes; +import static gregtech.api.recipe.RecipeMaps.fluidCannerRecipes; +import static gregtech.api.recipe.RecipeMaps.maceratorRecipes; +import static gregtech.api.recipe.RecipeMaps.thermalCentrifugeRecipes; import static gregtech.api.util.GT_RecipeBuilder.SECONDS; import static gregtech.api.util.GT_RecipeBuilder.TICKS; import static gregtech.api.util.GT_RecipeBuilder.WILDCARD; @@ -275,7 +275,7 @@ public class GT_Loader_Item_Block_And_Fluid implements Runnable { GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Iron, 1L)) .duration(25 * SECONDS) .eut(48) - .addTo(sThermalCentrifugeRecipes); + .addTo(thermalCentrifugeRecipes); GT_Values.RA.stdBuilder() .itemInputs(ItemList.Depleted_Thorium_2.get(1)) @@ -285,7 +285,7 @@ public class GT_Loader_Item_Block_And_Fluid implements Runnable { GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Iron, 3L)) .duration(25 * SECONDS) .eut(48) - .addTo(sThermalCentrifugeRecipes); + .addTo(thermalCentrifugeRecipes); GT_Values.RA.stdBuilder() .itemInputs(ItemList.Depleted_Thorium_4.get(1)) @@ -295,7 +295,7 @@ public class GT_Loader_Item_Block_And_Fluid implements Runnable { GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Iron, 6L)) .duration(25 * SECONDS) .eut(48) - .addTo(sThermalCentrifugeRecipes); + .addTo(thermalCentrifugeRecipes); ItemList.Depleted_Naquadah_1 .set(new GT_DepletetCell_Item("NaquadahcellDep", "Fuel Rod (Depleted Naquadah)", 1)); @@ -349,7 +349,7 @@ public class GT_Loader_Item_Block_And_Fluid implements Runnable { .outputChances(10_000, 5_000, 5_000, 2_500, 10_000, 10_000) .duration(25 * SECONDS) .eut(2000) - .addTo(sCentrifugeRecipes); + .addTo(centrifugeRecipes); GT_Values.RA.stdBuilder() .itemInputs(ItemList.Depleted_Naquadah_2.get(1)) @@ -363,7 +363,7 @@ public class GT_Loader_Item_Block_And_Fluid implements Runnable { .outputChances(10_000, 5_000, 5_000, 2_500, 10_000, 10_000) .duration(50 * SECONDS) .eut(2000) - .addTo(sCentrifugeRecipes); + .addTo(centrifugeRecipes); GT_Values.RA.stdBuilder() .itemInputs(ItemList.Depleted_Naquadah_4.get(1)) @@ -377,7 +377,7 @@ public class GT_Loader_Item_Block_And_Fluid implements Runnable { .outputChances(10_000, 5_000, 5_000, 2_500, 10_000, 10_000) .duration(100 * SECONDS) .eut(2000) - .addTo(sCentrifugeRecipes); + .addTo(centrifugeRecipes); ItemList.Depleted_MNq_1.set(new GT_DepletetCell_Item("MNqCellDep", "Fuel Rod (Depleted Nq*)", 1)); ItemList.Depleted_MNq_2.set(new GT_DepletetCell_Item("Double_MNqCellDep", "Dual Fuel Rod (Depleted Nq*)", 1)); @@ -428,7 +428,7 @@ public class GT_Loader_Item_Block_And_Fluid implements Runnable { .outputChances(10_000, 5_000, 5_000, 2_500, 10_000, 10_000) .duration(25 * SECONDS) .eut(2000) - .addTo(sCentrifugeRecipes); + .addTo(centrifugeRecipes); GT_Values.RA.stdBuilder() .itemInputs(ItemList.Depleted_MNq_2.get(1)) @@ -442,7 +442,7 @@ public class GT_Loader_Item_Block_And_Fluid implements Runnable { .outputChances(10_000, 5_000, 5_000, 2_500, 10_000, 10_000) .duration(50 * SECONDS) .eut(2000) - .addTo(sCentrifugeRecipes); + .addTo(centrifugeRecipes); GT_Values.RA.stdBuilder() .itemInputs(ItemList.Depleted_MNq_4.get(1)) @@ -456,7 +456,7 @@ public class GT_Loader_Item_Block_And_Fluid implements Runnable { .outputChances(10_000, 5_000, 5_000, 2_500, 10_000, 10_000) .duration(100 * SECONDS) .eut(2000) - .addTo(sCentrifugeRecipes); + .addTo(centrifugeRecipes); ItemList.Uraniumcell_1.set( new GT_RadioactiveCellIC_Item( @@ -827,7 +827,7 @@ public class GT_Loader_Item_Block_And_Fluid implements Runnable { .fluidInputs(GT_ModHandler.getSteam(1000)) .duration(16 * TICKS) .eut(1) - .addTo(sFluidCannerRecipes); + .addTo(fluidCannerRecipes); Materials.Ice.mGas = Materials.Water.mGas; Materials.Water.mGas.setTemperature(375) @@ -2072,7 +2072,7 @@ public class GT_Loader_Item_Block_And_Fluid implements Runnable { .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Stone, 1L)) .duration(20 * SECONDS) .eut(2) - .addTo(sMaceratorRecipes); + .addTo(maceratorRecipes); GT_Values.RA.stdBuilder() .itemInputs(new ItemStack(Blocks.gravel, 1, WILDCARD)) @@ -2080,21 +2080,21 @@ public class GT_Loader_Item_Block_And_Fluid implements Runnable { .outputChances(10000, 1000) .duration(20 * SECONDS) .eut(2) - .addTo(sMaceratorRecipes); + .addTo(maceratorRecipes); GT_Values.RA.stdBuilder() .itemInputs(new ItemStack(Blocks.furnace, 1, WILDCARD)) .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Stone, 8L)) .duration(20 * SECONDS) .eut(2) - .addTo(sMaceratorRecipes); + .addTo(maceratorRecipes); GT_Values.RA.stdBuilder() .itemInputs(new ItemStack(Blocks.lit_furnace, 1, WILDCARD)) .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Stone, 8L)) .duration(20 * SECONDS) .eut(2) - .addTo(sMaceratorRecipes); + .addTo(maceratorRecipes); GT_OreDictUnificator.set( OrePrefixes.ingot, diff --git a/src/main/java/gregtech/loaders/preload/GT_Loader_MetaTileEntities.java b/src/main/java/gregtech/loaders/preload/GT_Loader_MetaTileEntities.java index 8ab21db198..9977af29f8 100644 --- a/src/main/java/gregtech/loaders/preload/GT_Loader_MetaTileEntities.java +++ b/src/main/java/gregtech/loaders/preload/GT_Loader_MetaTileEntities.java @@ -65,7 +65,6 @@ import static gregtech.api.enums.MetaTileEntityIDs.BREWERY_IV; import static gregtech.api.enums.MetaTileEntityIDs.BREWERY_LV; import static gregtech.api.enums.MetaTileEntityIDs.BREWERY_MV; import static gregtech.api.enums.MetaTileEntityIDs.BRICKED_BLAST_FURNACE_CONTROLLER; -import static gregtech.api.enums.MetaTileEntityIDs.BRONZE_BLAST_FURNACE_CONTROLLER; import static gregtech.api.enums.MetaTileEntityIDs.CHARCOAL_PILE_IGNITER_CONTROLLER; import static gregtech.api.enums.MetaTileEntityIDs.CHEST_BUFFER_EV; import static gregtech.api.enums.MetaTileEntityIDs.CHEST_BUFFER_HV; @@ -536,7 +535,6 @@ import gregtech.common.tileentities.machines.long_distance.GT_MetaTileEntity_Lon import gregtech.common.tileentities.machines.long_distance.GT_MetaTileEntity_LongDistancePipelineItem; import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_AssemblyLine; import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_BrickedBlastFurnace; -import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_BronzeBlastFurnace; import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_Charcoal_Pit; import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_Cleanroom; import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_ConcreteBackfiller1; @@ -815,13 +813,6 @@ public class GT_Loader_MetaTileEntities implements Runnable { // TODO CHECK CIRC "multimachine.brickedblastfurnace", "Bricked Blast Furnace").getStackForm(1L)); - // deprecated since ages, maybe time to remove it from the game? - ItemList.Machine_Bronze_BlastFurnace.set( - new GT_MetaTileEntity_BronzeBlastFurnace( - BRONZE_BLAST_FURNACE_CONTROLLER.ID, - "bronzemachine.blastfurnace", - "Bronze Plated Blast Furnace").getStackForm(1L)); - ItemList.Machine_Multi_BlastFurnace.set( new GT_MetaTileEntity_ElectricBlastFurnace( EBF_CONTROLLER.ID, diff --git a/src/main/java/gregtech/loaders/preload/GT_PreLoad.java b/src/main/java/gregtech/loaders/preload/GT_PreLoad.java index 2f7ed5ca16..412eb3bba9 100644 --- a/src/main/java/gregtech/loaders/preload/GT_PreLoad.java +++ b/src/main/java/gregtech/loaders/preload/GT_PreLoad.java @@ -17,6 +17,7 @@ import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.PrintStream; +import java.lang.reflect.Field; import java.util.ArrayList; import java.util.Arrays; import java.util.Calendar; @@ -33,6 +34,8 @@ import org.apache.commons.lang3.StringUtils; import cpw.mods.fml.common.LoadController; import cpw.mods.fml.common.Loader; import cpw.mods.fml.common.ModContainer; +import cpw.mods.fml.common.discovery.ASMDataTable; +import cpw.mods.fml.common.discovery.ModDiscoverer; import gregtech.GT_Mod; import gregtech.api.GregTech_API; import gregtech.api.enums.ConfigCategories; @@ -40,6 +43,9 @@ import gregtech.api.enums.Dyes; import gregtech.api.enums.GT_Values; import gregtech.api.enums.Materials; import gregtech.api.enums.OrePrefixes; +import gregtech.api.recipe.RecipeCategory; +import gregtech.api.recipe.RecipeCategoryHolder; +import gregtech.api.recipe.RecipeCategorySetting; import gregtech.api.util.GT_Config; import gregtech.api.util.GT_LanguageManager; import gregtech.api.util.GT_Log; @@ -516,8 +522,6 @@ public class GT_PreLoad { .getBoolean(true); GT_Mod.gregtechproxy.mHideUnusedOres = tMainConfig.get(GT_Mod.aTextGeneral, "HideUnusedOres", true) .getBoolean(true); - GT_Mod.gregtechproxy.mHideRecyclingRecipes = tMainConfig.get(GT_Mod.aTextGeneral, "HideRecyclingRecipes", true) - .getBoolean(true); GT_Mod.gregtechproxy.mArcSmeltIntoAnnealed = tMainConfig .get(GT_Mod.aTextGeneral, "ArcSmeltIntoAnnealedWrought", true) .getBoolean(true); @@ -853,6 +857,18 @@ public class GT_PreLoad { .get("nei", "RecipeOwnerStackTrace", false); GT_Mod.gregtechproxy.mNEIOriginalVoltage = GregTech_API.sClientDataFile.get("nei", "OriginalVoltage", false); + GT_Mod.gregtechproxy.recipeCategorySettings.clear(); + for (RecipeCategory recipeCategory : findRecipeCategories()) { + RecipeCategorySetting setting = RecipeCategorySetting.find( + GregTech_API.sClientDataFile.getWithValidValues( + "nei.recipe_categories", + recipeCategory.unlocalizedName, + RecipeCategorySetting.NAMES, + RecipeCategorySetting.getDefault() + .toName())); + GT_Mod.gregtechproxy.recipeCategorySettings.put(recipeCategory, setting); + } + GT_Mod.gregtechproxy.mWailaTransformerVoltageTier = GregTech_API.sClientDataFile .get("waila", "WailaTransformerVoltageTier", true); GT_Mod.gregtechproxy.wailaAverageNS = GregTech_API.sClientDataFile.get("waila", "WailaAverageNS", false); @@ -862,5 +878,38 @@ public class GT_PreLoad { for (int i = 0; i < Circuits.length; i++) { GT_Mod.gregtechproxy.mCircuitsOrder.putIfAbsent(Circuits[i], i); } + + GT_Mod.gregtechproxy.reloadNEICache(); + } + + private static List findRecipeCategories() { + List ret = new ArrayList<>(); + try { + Field discovererField = Loader.class.getDeclaredField("discoverer"); + discovererField.setAccessible(true); + ModDiscoverer discoverer = (ModDiscoverer) discovererField.get(Loader.instance()); + for (ASMDataTable.ASMData asmData : discoverer.getASMTable() + .getAll(RecipeCategoryHolder.class.getName())) { + try { + Object obj = Class.forName(asmData.getClassName()) + .getDeclaredField(asmData.getObjectName()) + .get(null); + if (obj instanceof RecipeCategory recipeCategory) { + ret.add(recipeCategory); + } else { + GT_FML_LOGGER.error( + "{}#{} is not an instance of RecipeCategory", + asmData.getClassName(), + asmData.getObjectName()); + } + } catch (ClassNotFoundException | NoSuchFieldException | IllegalAccessException e) { + GT_FML_LOGGER.error("Failed to find RecipeCategory"); + GT_FML_LOGGER.catching(e); + } + } + } catch (NoSuchFieldException | IllegalAccessException e) { + throw new RuntimeException(e); + } + return ret; } } -- cgit