From 730024055f670fef1fd4ba76b0863736a03fe227 Mon Sep 17 00:00:00 2001 From: Alexdoru <57050655+Alexdoru@users.noreply.github.com> Date: Mon, 16 Sep 2024 01:12:03 +0200 Subject: cache some Enum.values() call to reduce RAM allocations --- .../common/loaders/StaticRecipeChangeLoaders.java | 84 +++++++++++----------- .../registration/BridgeMaterialsLoader.java | 3 +- .../dynconfig/DynamicDimensionConfig.java | 3 +- src/main/java/ggfab/GigaGramFab.java | 65 ++++++++--------- src/main/java/gregtech/api/enums/OrePrefixes.java | 16 +++-- .../java/gtPlusPlus/api/recipe/TGSFrontend.java | 7 +- .../xmod/forestry/bees/custom/CustomCombs.java | 2 +- .../xmod/forestry/bees/custom/ItemCustomComb.java | 9 ++- .../advanced/MTEAdvDistillationTower.java | 2 +- .../machines/multi/production/MTETreeFarm.java | 12 ++-- .../java/gtnhlanth/common/item/ItemParticle.java | 37 ++-------- src/main/java/kekztech/Items.java | 10 +-- .../tileentities/MTELapotronicSuperCapacitor.java | 4 +- .../thing/block/TileEntityEyeOfHarmony.java | 2 +- 14 files changed, 121 insertions(+), 135 deletions(-) (limited to 'src/main/java') diff --git a/src/main/java/bartworks/common/loaders/StaticRecipeChangeLoaders.java b/src/main/java/bartworks/common/loaders/StaticRecipeChangeLoaders.java index a27da26919..f266c2fdc2 100644 --- a/src/main/java/bartworks/common/loaders/StaticRecipeChangeLoaders.java +++ b/src/main/java/bartworks/common/loaders/StaticRecipeChangeLoaders.java @@ -98,6 +98,7 @@ public class StaticRecipeChangeLoaders { public static void unificationRecipeEnforcer() { List toRemove = new ArrayList<>(); + final OrePrefixes[] OREPREFIX_VALUES = OrePrefixes.values(); for (Werkstoff werkstoff : Werkstoff.werkstoffHashSet) { StaticRecipeChangeLoaders.runMaterialLinker(werkstoff); if (werkstoff.getGenerationFeatures().enforceUnification) { @@ -105,51 +106,54 @@ public class StaticRecipeChangeLoaders { oreDictNames.add(werkstoff.getVarName()); StaticRecipeChangeLoaders.runMoltenUnificationEnfocement(werkstoff); StaticRecipeChangeLoaders.runUnficationDeleter(werkstoff); - for (String s : oreDictNames) for (OrePrefixes prefixes : OrePrefixes.values()) { - if (!werkstoff.hasItemType(prefixes)) continue; - String fullOreName = prefixes + s; - List ores = OreDictionary.getOres(fullOreName, false); - if (ores.size() <= 1) // empty or one entry, i.e. no unification needed - continue; - for (ItemStack toReplace : ores) { - ItemStack replacement = werkstoff.get(prefixes); - if (toReplace == null || GTUtility.areStacksEqual(toReplace, replacement) - || replacement == null - || replacement.getItem() == null) continue; - for (RecipeMap map : RecipeMap.ALL_RECIPE_MAPS.values()) { - toRemove.clear(); - nextRecipe: for (GTRecipe recipe : map.getAllRecipes()) { - boolean removal = map.equals(RecipeMaps.fluidExtractionRecipes) - || map.equals(RecipeMaps.fluidSolidifierRecipes); - for (int i = 0; i < recipe.mInputs.length; i++) { - if (!GTUtility.areStacksEqual(recipe.mInputs[i], toReplace)) continue; - if (removal) { - toRemove.add(recipe); - continue nextRecipe; + for (String s : oreDictNames) { + for (OrePrefixes prefixes : OREPREFIX_VALUES) { + if (!werkstoff.hasItemType(prefixes)) continue; + String fullOreName = prefixes + s; + List ores = OreDictionary.getOres(fullOreName, false); + if (ores.size() <= 1) // empty or one entry, i.e. no unification needed + continue; + for (ItemStack toReplace : ores) { + ItemStack replacement = werkstoff.get(prefixes); + if (toReplace == null || GTUtility.areStacksEqual(toReplace, replacement) + || replacement == null + || replacement.getItem() == null) continue; + for (RecipeMap map : RecipeMap.ALL_RECIPE_MAPS.values()) { + toRemove.clear(); + nextRecipe: for (GTRecipe recipe : map.getAllRecipes()) { + boolean removal = map.equals(RecipeMaps.fluidExtractionRecipes) + || map.equals(RecipeMaps.fluidSolidifierRecipes); + for (int i = 0; i < recipe.mInputs.length; i++) { + if (!GTUtility.areStacksEqual(recipe.mInputs[i], toReplace)) continue; + if (removal) { + toRemove.add(recipe); + continue nextRecipe; + } + recipe.mInputs[i] = GTUtility + .copyAmount(recipe.mInputs[i].stackSize, replacement); } - recipe.mInputs[i] = GTUtility.copyAmount(recipe.mInputs[i].stackSize, replacement); - } - for (int i = 0; i < recipe.mOutputs.length; i++) { - if (!GTUtility.areStacksEqual(recipe.mOutputs[i], toReplace)) continue; - if (removal) { - toRemove.add(recipe); - continue nextRecipe; + for (int i = 0; i < recipe.mOutputs.length; i++) { + if (!GTUtility.areStacksEqual(recipe.mOutputs[i], toReplace)) continue; + if (removal) { + toRemove.add(recipe); + continue nextRecipe; + } + recipe.mOutputs[i] = GTUtility + .copyAmount(recipe.mOutputs[i].stackSize, replacement); } - recipe.mOutputs[i] = GTUtility - .copyAmount(recipe.mOutputs[i].stackSize, replacement); - } - if (recipe.mSpecialItems instanceof ItemStack specialItemStack) { - if (!GTUtility.areStacksEqual(specialItemStack, toReplace)) continue; - if (removal) { - toRemove.add(recipe); - continue nextRecipe; + if (recipe.mSpecialItems instanceof ItemStack specialItemStack) { + if (!GTUtility.areStacksEqual(specialItemStack, toReplace)) continue; + if (removal) { + toRemove.add(recipe); + continue nextRecipe; + } + recipe.mSpecialItems = GTUtility + .copyAmount(specialItemStack.stackSize, replacement); } - recipe.mSpecialItems = GTUtility - .copyAmount(specialItemStack.stackSize, replacement); } + map.getBackend() + .removeRecipes(toRemove); } - map.getBackend() - .removeRecipes(toRemove); } } } diff --git a/src/main/java/bartworks/system/material/werkstoff_loaders/registration/BridgeMaterialsLoader.java b/src/main/java/bartworks/system/material/werkstoff_loaders/registration/BridgeMaterialsLoader.java index 2bf712ed7a..d328474fa6 100644 --- a/src/main/java/bartworks/system/material/werkstoff_loaders/registration/BridgeMaterialsLoader.java +++ b/src/main/java/bartworks/system/material/werkstoff_loaders/registration/BridgeMaterialsLoader.java @@ -68,12 +68,13 @@ public class BridgeMaterialsLoader implements IWerkstoffRunnable { 1, 1, null); + final Element[] ELEMENT_VALUES = Element.values(); for (OrePrefixes prefixes : values()) { if (prefixes != cell || !Werkstoff.Types.ELEMENT.equals(werkstoff.getType())) { if (prefixes == dust && Werkstoff.Types.ELEMENT.equals(werkstoff.getType()) && Werkstoff.Types.ELEMENT.equals(werkstoff.getType())) { boolean ElementSet = false; - for (Element e : Element.values()) { + for (Element e : ELEMENT_VALUES) { if (e.toString() .equals(werkstoff.getToolTip())) { if (!e.mLinkedMaterials.isEmpty()) break; diff --git a/src/main/java/galacticgreg/dynconfig/DynamicDimensionConfig.java b/src/main/java/galacticgreg/dynconfig/DynamicDimensionConfig.java index 33e1f6a750..8e6a7ef6e2 100644 --- a/src/main/java/galacticgreg/dynconfig/DynamicDimensionConfig.java +++ b/src/main/java/galacticgreg/dynconfig/DynamicDimensionConfig.java @@ -39,6 +39,7 @@ public class DynamicDimensionConfig { public static boolean InitDynamicConfig() { try { + final Asteroids[] ASTEROIDS_VALUES = Asteroids.values(); for (ModContainer mc : GalacticGregRegistry.getModContainers()) { if (!mc.isModLoaded()) continue; @@ -56,7 +57,7 @@ public class DynamicDimensionConfig { } Asteroids AsteroidProperties = null; - for (Asteroids asteroidsConfig : Asteroids.values()) { + for (Asteroids asteroidsConfig : ASTEROIDS_VALUES) { if (!asteroidsConfig.modContainers.modContainer.getModName() .equals(mc.getModName())) { continue; diff --git a/src/main/java/ggfab/GigaGramFab.java b/src/main/java/ggfab/GigaGramFab.java index 8fc8ef26a9..b13b789f40 100644 --- a/src/main/java/ggfab/GigaGramFab.java +++ b/src/main/java/ggfab/GigaGramFab.java @@ -2,7 +2,7 @@ package ggfab; import static gregtech.api.enums.ToolDictNames.*; import static gregtech.common.items.IDMetaTool01.*; -import static gregtech.common.items.MetaGeneratedTool01.*; +import static gregtech.common.items.MetaGeneratedTool01.INSTANCE; import net.minecraft.item.ItemStack; @@ -140,46 +140,43 @@ public class GigaGramFab { private void initDumbItem1() { GGMetaItemDumbItems i1 = new GGMetaItemDumbItems("ggfab.d1"); int id = 0; - { - int idShape = 30; - final int budget = idShape; - String prefix = "One_Use_craftingTool"; - String prefix2 = "Shape_One_Use_craftingTool"; - for (GGItemList i : GGItemList.values()) { - ItemStack stack = null; - if (i.name() - .startsWith(prefix)) { + int idShape = 30; + final int budget = idShape; + String prefix = "One_Use_craftingTool"; + String prefix2 = "Shape_One_Use_craftingTool"; + for (GGItemList i : GGItemList.values()) { + ItemStack stack = null; + if (i.name() + .startsWith(prefix)) { + stack = i1.addItem( + id++, + "Single Use " + GGUtils.processSentence( + i.name() + .substring(prefix.length()), + ' ', + true, + true), + null, + i, + i.name() + .substring("One_Use_".length())); + } else if (i.name() + .startsWith(prefix2)) { stack = i1.addItem( - id++, - "Single Use " + GGUtils.processSentence( + idShape++, + "Tool Casting Mold (" + GGUtils.processSentence( i.name() - .substring(prefix.length()), + .substring(prefix2.length()), ' ', true, - true), + true) + ")", null, - i, - i.name() - .substring("One_Use_".length())); - } else if (i.name() - .startsWith(prefix2)) { - stack = i1.addItem( - idShape++, - "Tool Casting Mold (" + GGUtils.processSentence( - i.name() - .substring(prefix2.length()), - ' ', - true, - true) + ")", - null, - i); - } - if (stack != null) { - i.set(stack); + i); } + if (stack != null) { + i.set(stack); } - if (id >= budget || idShape >= 2 * budget || idShape - id != budget) throw new AssertionError(); - id = budget * 2; } + if (id >= budget || idShape >= 2 * budget || idShape - id != budget) throw new AssertionError(); } } diff --git a/src/main/java/gregtech/api/enums/OrePrefixes.java b/src/main/java/gregtech/api/enums/OrePrefixes.java index 003624007f..418fe71681 100644 --- a/src/main/java/gregtech/api/enums/OrePrefixes.java +++ b/src/main/java/gregtech/api/enums/OrePrefixes.java @@ -654,10 +654,18 @@ public enum OrePrefixes { ingot.addFamiliarPrefix(nugget); nugget.addFamiliarPrefix(ingot); - for (OrePrefixes tPrefix1 : values()) if (tPrefix1.name() - .startsWith("ore")) - for (OrePrefixes tPrefix2 : values()) if (tPrefix2.name() - .startsWith("ore")) tPrefix1.addFamiliarPrefix(tPrefix2); + final OrePrefixes[] THIS_VALUES = values(); + for (OrePrefixes tPrefix1 : THIS_VALUES) { + if (tPrefix1.name() + .startsWith("ore")) { + for (OrePrefixes tPrefix2 : THIS_VALUES) { + if (tPrefix2.name() + .startsWith("ore")) { + tPrefix1.addFamiliarPrefix(tPrefix2); + } + } + } + } // These are only the important ones. gem.mNotGeneratedItems.add(Materials.Coal); diff --git a/src/main/java/gtPlusPlus/api/recipe/TGSFrontend.java b/src/main/java/gtPlusPlus/api/recipe/TGSFrontend.java index e7253b6ea5..aa79537393 100644 --- a/src/main/java/gtPlusPlus/api/recipe/TGSFrontend.java +++ b/src/main/java/gtPlusPlus/api/recipe/TGSFrontend.java @@ -103,11 +103,12 @@ public class TGSFrontend extends RecipeMapFrontend { // Inputs int slot = 0; - for (int mode = 0; mode < Mode.values().length; ++mode) { + final Mode[] MODE_VALUES = Mode.values(); + for (int mode = 0; mode < MODE_VALUES.length; ++mode) { if (mode < recipe.mOreDictAlt.length && recipe.mOreDictAlt[mode] != null) { // There is a valid input in this mode. if (slot < neiCachedRecipe.mInputs.size() && stack == neiCachedRecipe.mInputs.get(slot).item) { - int toolMultiplier = MTETreeFarm.getToolMultiplier(stack, Mode.values()[mode]); + int toolMultiplier = MTETreeFarm.getToolMultiplier(stack, MODE_VALUES[mode]); currentTip.add(EnumChatFormatting.YELLOW + tooltipInputs[mode]); if (toolMultiplier > 0) { currentTip.add(EnumChatFormatting.YELLOW + tooltipMultiplier + " " + toolMultiplier + "x"); @@ -120,7 +121,7 @@ public class TGSFrontend extends RecipeMapFrontend { // Outputs slot = 0; - for (int mode = 0; mode < Mode.values().length; ++mode) { + for (int mode = 0; mode < MODE_VALUES.length; ++mode) { if (mode < recipe.mOutputs.length && recipe.mOutputs[mode] != null) { // There is a valid output in this mode. if (slot < neiCachedRecipe.mOutputs.size() && stack == neiCachedRecipe.mOutputs.get(slot).item) { diff --git a/src/main/java/gtPlusPlus/xmod/forestry/bees/custom/CustomCombs.java b/src/main/java/gtPlusPlus/xmod/forestry/bees/custom/CustomCombs.java index 05ab3c8711..73e01bac7a 100644 --- a/src/main/java/gtPlusPlus/xmod/forestry/bees/custom/CustomCombs.java +++ b/src/main/java/gtPlusPlus/xmod/forestry/bees/custom/CustomCombs.java @@ -69,7 +69,7 @@ public enum CustomCombs { public final int chance; private final String name; - private CustomCombs(String pName, boolean show, Materials material, int chance) { + CustomCombs(String pName, boolean show, Materials material, int chance) { this.name = pName; this.material = material; this.chance = chance; diff --git a/src/main/java/gtPlusPlus/xmod/forestry/bees/custom/ItemCustomComb.java b/src/main/java/gtPlusPlus/xmod/forestry/bees/custom/ItemCustomComb.java index 0ff3625a25..e136b825e6 100644 --- a/src/main/java/gtPlusPlus/xmod/forestry/bees/custom/ItemCustomComb.java +++ b/src/main/java/gtPlusPlus/xmod/forestry/bees/custom/ItemCustomComb.java @@ -82,13 +82,12 @@ public class ItemCustomComb extends Item { @Override @SideOnly(Side.CLIENT) public int getColorFromItemStack(ItemStack stack, int pass) { - int meta = Math.max(0, Math.min(CustomCombs.values().length - 1, stack.getItemDamage())); - int colour = CustomCombs.values()[meta].getColours()[0]; - + final CustomCombs[] COMB_VALUES = CustomCombs.values(); + int meta = Math.max(0, Math.min(COMB_VALUES.length - 1, stack.getItemDamage())); + int colour = COMB_VALUES[meta].getColours()[0]; if (pass >= 1) { - colour = CustomCombs.values()[meta].getColours()[1]; + colour = COMB_VALUES[meta].getColours()[1]; } - return colour; } diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/advanced/MTEAdvDistillationTower.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/advanced/MTEAdvDistillationTower.java index ad351caf55..a5ff70f047 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/advanced/MTEAdvDistillationTower.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/advanced/MTEAdvDistillationTower.java @@ -317,7 +317,7 @@ public class MTEAdvDistillationTower extends GTPPMultiBlockBase implements ISur int tierMultiplier = getTierMultiplier(tier); List outputs = new ArrayList<>(); - for (Mode mode : Mode.values()) { + final Mode[] MODE_VALUES = Mode.values(); + for (Mode mode : MODE_VALUES) { ItemStack output = outputPerMode.get(mode); if (output == null) continue; // This sapling has no output in this mode. @@ -379,7 +380,7 @@ public class MTETreeFarm extends GTPPMultiBlockBase implements ISur duration = TICKS_PER_OPERATION; calculatedEut = GTValues.VP[tier]; - for (Mode mode : Mode.values()) { + for (Mode mode : MODE_VALUES) { if (outputPerMode.get(mode) != null) { useToolForMode(mode, true); } @@ -780,10 +781,11 @@ public class MTETreeFarm extends GTPPMultiBlockBase implements ISur * the mode multiplier, but not tool/tier multipliers as those can change dynamically. If the sapling has an * output in this mode, also add the tools usable for this mode as inputs. */ - ItemStack[][] inputStacks = new ItemStack[Mode.values().length][]; - ItemStack[] outputStacks = new ItemStack[Mode.values().length]; + final Mode[] MODE_VALUES = Mode.values(); + ItemStack[][] inputStacks = new ItemStack[MODE_VALUES.length][]; + ItemStack[] outputStacks = new ItemStack[MODE_VALUES.length]; - for (Mode mode : Mode.values()) { + for (Mode mode : MODE_VALUES) { ItemStack output = switch (mode) { case LOG -> log; case SAPLING -> saplingOut; diff --git a/src/main/java/gtnhlanth/common/item/ItemParticle.java b/src/main/java/gtnhlanth/common/item/ItemParticle.java index 07286e8f45..00a6477978 100644 --- a/src/main/java/gtnhlanth/common/item/ItemParticle.java +++ b/src/main/java/gtnhlanth/common/item/ItemParticle.java @@ -18,21 +18,21 @@ import gtnhlanth.common.beamline.Particle; public class ItemParticle extends Item { public static final int NUMBER_OF_SUBTYPES = Particle.values().length; - - private static String[] names = new String[NUMBER_OF_SUBTYPES]; + private static final String[] names = new String[NUMBER_OF_SUBTYPES]; static { - populateNamesArray(); + for (int i = 0; i < NUMBER_OF_SUBTYPES; i++) { + Particle particle = Particle.values()[i]; + names[i] = particle.getName(); + } } @SideOnly(Side.CLIENT) private IIcon[] iconArray; public ItemParticle() { - this.setHasSubtypes(true); this.setMaxDamage(0); - } @SideOnly(Side.CLIENT) @@ -60,7 +60,6 @@ public class ItemParticle extends Item { @Override public void registerIcons(IIconRegister register) { this.iconArray = new IIcon[NUMBER_OF_SUBTYPES]; - for (int i = 0; i < NUMBER_OF_SUBTYPES; ++i) { this.iconArray[i] = register.registerIcon(Tags.MODID + ":" + "particle/" + names[i]); } @@ -69,11 +68,8 @@ public class ItemParticle extends Item { @SideOnly(Side.CLIENT) @Override public String getItemStackDisplayName(ItemStack stack) { - int i = MathHelper.clamp_int(stack.getItemDamage(), 0, NUMBER_OF_SUBTYPES - 1); - Particle particle = Particle.values()[i]; - return particle.getLocalisedName(); } @@ -81,43 +77,20 @@ public class ItemParticle extends Item { @SuppressWarnings({ "rawtypes", "unchecked" }) @Override public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool) { - int i = MathHelper.clamp_int(stack.getItemDamage(), 0, NUMBER_OF_SUBTYPES - 1); - Particle particle = Particle.values()[i]; - float restMass = particle.getMass(); - float charge = particle.getCharge(); - String chargeSpecial = particle.getChargeSpecial(); - String chargeStringToAppend; if (chargeSpecial != null) { - chargeStringToAppend = chargeSpecial; - } else { - if (charge > 0) chargeStringToAppend = "+" + charge; else chargeStringToAppend = "" + charge; } - list.add("Rest Mass: " + restMass + " MeV"); list.add("Charge: " + chargeStringToAppend + "e"); - - } - - private static void populateNamesArray() { - - for (int i = 0; i < NUMBER_OF_SUBTYPES; i++) { - - Particle particle = Particle.values()[i]; - - names[i] = particle.getName(); - - } - } } diff --git a/src/main/java/kekztech/Items.java b/src/main/java/kekztech/Items.java index 800f69c77e..7ba594f9e0 100644 --- a/src/main/java/kekztech/Items.java +++ b/src/main/java/kekztech/Items.java @@ -1,7 +1,5 @@ package kekztech; -import java.util.Arrays; - import net.minecraft.item.ItemStack; import net.minecraftforge.oredict.OreDictionary; @@ -45,9 +43,11 @@ public enum Items { } public static void registerOreDictNames() { - Arrays.stream(Items.values()) - .filter(e -> e.getOreDictName() != null) - .forEach(Items::registerOreDict); + for (Items e : Items.values()) { + if (e.getOreDictName() != null) { + e.registerOreDict(); + } + } } public ItemStack getNonOreDictedItemStack(int amount) { diff --git a/src/main/java/kekztech/common/tileentities/MTELapotronicSuperCapacitor.java b/src/main/java/kekztech/common/tileentities/MTELapotronicSuperCapacitor.java index e39a0b74eb..e6260bc7af 100644 --- a/src/main/java/kekztech/common/tileentities/MTELapotronicSuperCapacitor.java +++ b/src/main/java/kekztech/common/tileentities/MTELapotronicSuperCapacitor.java @@ -139,8 +139,8 @@ public class MTELapotronicSuperCapacitor extends MTEEnhancedMultiBlockBase