aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/gregtech')
-rw-r--r--src/main/java/gregtech/GT_Mod.java175
-rw-r--r--src/main/java/gregtech/api/util/GT_ModHandler.java93
-rw-r--r--src/main/java/gregtech/api/util/GT_RecipeRegistrator.java103
-rw-r--r--src/main/java/gregtech/common/GT_Proxy.java64
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingCompressed.java4
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingGem.java80
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingIngot.java44
7 files changed, 338 insertions, 225 deletions
diff --git a/src/main/java/gregtech/GT_Mod.java b/src/main/java/gregtech/GT_Mod.java
index 68c52c44d1..4d826440b0 100644
--- a/src/main/java/gregtech/GT_Mod.java
+++ b/src/main/java/gregtech/GT_Mod.java
@@ -11,7 +11,6 @@ import gregtech.api.enchants.Enchantment_Radioactivity;
import gregtech.api.enums.*;
import gregtech.api.interfaces.internal.IGT_Mod;
import gregtech.api.objects.ItemData;
-import gregtech.api.objects.MaterialStack;
import gregtech.api.objects.XSTR;
import gregtech.api.util.*;
import gregtech.common.GT_DummyWorld;
@@ -61,6 +60,7 @@ import java.io.*;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import java.util.stream.Collectors;
import static gregtech.api.enums.GT_Values.MOD_ID_FR;
@@ -189,18 +189,18 @@ public class GT_Mod implements IGT_Mod {
if (!GT_Log.mLogFile.exists()) {
try {
GT_Log.mLogFile.createNewFile();
- } catch (Throwable e) {
+ } catch (Throwable ignored) {
}
}
try {
GT_Log.out = GT_Log.err = new PrintStream(GT_Log.mLogFile);
- } catch (FileNotFoundException e) {
+ } catch (FileNotFoundException ignored) {
}
GT_Log.mOreDictLogFile = new File(aEvent.getModConfigurationDirectory().getParentFile(), "logs/OreDict.log");
if (!GT_Log.mOreDictLogFile.exists()) {
try {
GT_Log.mOreDictLogFile.createNewFile();
- } catch (Throwable e) {
+ } catch (Throwable ignored) {
}
}
if (tMainConfig.get(aTextGeneral, "LoggingExplosions", true).getBoolean(true)) {
@@ -208,12 +208,12 @@ public class GT_Mod implements IGT_Mod {
if (!GT_Log.mExplosionLog.exists()) {
try {
GT_Log.mExplosionLog.createNewFile();
- } catch (Throwable e) {
+ } catch (Throwable ignored) {
}
}
try {
GT_Log.exp = new PrintStream(GT_Log.mExplosionLog);
- } catch (Throwable e) {
+ } catch (Throwable ignored) {
}
}
@@ -222,12 +222,12 @@ public class GT_Mod implements IGT_Mod {
if (!GT_Log.mPlayerActivityLogFile.exists()) {
try {
GT_Log.mPlayerActivityLogFile.createNewFile();
- } catch (Throwable e) {
+ } catch (Throwable ignored) {
}
}
try {
GT_Log.pal = new PrintStream(GT_Log.mPlayerActivityLogFile);
- } catch (Throwable e) {
+ } catch (Throwable ignored) {
}
}
try {
@@ -242,7 +242,7 @@ public class GT_Mod implements IGT_Mod {
for (Iterator i$ = tList.iterator(); i$.hasNext(); GT_Log.ore.println(tString)) {
tString = (String) i$.next();
}
- } catch (Throwable e) {
+ } catch (Throwable ignored) {
}
gregtechproxy.onPreLoad();
@@ -347,6 +347,7 @@ public class GT_Mod implements IGT_Mod {
gregtechproxy.mUndergroundOil.getConfig(tMainConfig, "undergroundfluid");
gregtechproxy.mEnableCleanroom = tMainConfig.get("general", "EnableCleanroom", true).getBoolean(true);
gregtechproxy.mLowGravProcessing = Loader.isModLoaded(GT_Values.MOD_ID_GC_CORE) && tMainConfig.get("general", "LowGravProcessing", true).getBoolean(true);
+ gregtechproxy.mUseGreatlyShrukenReplacementList = tMainConfig.get("general", "GTNH Optimised Material Loading", true).getBoolean(true);
Calendar now = Calendar.getInstance();
gregtechproxy.mAprilFool = GregTech_API.sSpecialFile.get(ConfigCategories.general, "AprilFool", now.get(Calendar.MONTH) == Calendar.APRIL && now.get(Calendar.DAY_OF_MONTH) == 1);
gregtechproxy.mCropNeedBlock = tMainConfig.get("general", "CropNeedBlockBelow", true).getBoolean(true);
@@ -375,8 +376,8 @@ public class GT_Mod implements IGT_Mod {
GregTech_API.mUseOnlyGoodSolderingMaterials = GregTech_API.sRecipeFile.get(ConfigCategories.Recipes.harderrecipes, "useonlygoodsolderingmaterials", GregTech_API.mUseOnlyGoodSolderingMaterials);
gregtechproxy.mChangeHarvestLevels = GregTech_API.sMaterialProperties.get("havestLevel", "activateHarvestLevelChange", false);//TODO CHECK
if(gregtechproxy.mChangeHarvestLevels) {
- gregtechproxy.mGraniteHavestLevel = (int) GregTech_API.sMaterialProperties.get("havestLevel", "graniteHarvestLevel", 3);
- gregtechproxy.mMaxHarvestLevel = (int) Math.min(15, GregTech_API.sMaterialProperties.get("havestLevel", "maxLevel", 7));
+ gregtechproxy.mGraniteHavestLevel = GregTech_API.sMaterialProperties.get("havestLevel", "graniteHarvestLevel", 3);
+ gregtechproxy.mMaxHarvestLevel = Math.min(15, GregTech_API.sMaterialProperties.get("havestLevel", "maxLevel", 7));
for (Materials tMaterial : Materials.values()) {
if (tMaterial != null && tMaterial.mToolQuality > 0 && tMaterial.mMetaItemSubID < gregtechproxy.mHarvestLevel.length && tMaterial.mMetaItemSubID >= 0) {
gregtechproxy.mHarvestLevel[tMaterial.mMetaItemSubID] = GregTech_API.sMaterialProperties.get("materialHavestLevel", tMaterial.mDefaultLocalName, tMaterial.mToolQuality);
@@ -422,7 +423,7 @@ public class GT_Mod implements IGT_Mod {
GT_Log.out.println("GT_Mod: Removing all original Scrapbox Drops.");
try {
- GT_Utility.getField("ic2.core.item.ItemScrapbox$Drop", "topChance", true, true).set(null, Integer.valueOf(0));
+ GT_Utility.getField("ic2.core.item.ItemScrapbox$Drop", "topChance", true, true).set(null, 0);
((List) GT_Utility.getFieldContent(GT_Utility.getFieldContent("ic2.api.recipe.Recipes", "scrapboxDrops", true, true), "drops", true, true)).clear();
} catch (Throwable e) {
if (GT_Values.D1) {
@@ -502,43 +503,48 @@ public class GT_Mod implements IGT_Mod {
}}
GT_FML_LOGGER.info("reenableMetaItems");
- for(String reEnable : mMTTags){
- OrePrefixes tPrefix = OrePrefixes.getOrePrefix(reEnable);
- if(tPrefix!=null){
- Materials tName = Materials.get(reEnable.replaceFirst(tPrefix.toString(), ""));
- if(tName!=null){
- tPrefix.mDisabledItems.remove(tName);
- tPrefix.mGeneratedItems.add(tName);
- if(tPrefix == OrePrefixes.screw){
- OrePrefixes.bolt.mDisabledItems.remove(tName);
- OrePrefixes.bolt.mGeneratedItems.add(tName);
- OrePrefixes.stick.mDisabledItems.remove(tName);
- OrePrefixes.stick.mGeneratedItems.add(tName);
- }
- if(tPrefix == OrePrefixes.round){
- OrePrefixes.nugget.mDisabledItems.remove(tName);
- OrePrefixes.nugget.mGeneratedItems.add(tName);
- }
- if(tPrefix == OrePrefixes.spring){
- OrePrefixes.stickLong.mDisabledItems.remove(tName);
- OrePrefixes.stickLong.mGeneratedItems.add(tName);
- OrePrefixes.stick.mDisabledItems.remove(tName);
- OrePrefixes.stick.mGeneratedItems.add(tName);
- }
- if(tPrefix == OrePrefixes.springSmall){
- OrePrefixes.stick.mDisabledItems.remove(tName);
- OrePrefixes.stick.mGeneratedItems.add(tName);
- }
- if(tPrefix == OrePrefixes.stickLong){
- OrePrefixes.stick.mDisabledItems.remove(tName);
- OrePrefixes.stick.mGeneratedItems.add(tName);
- }
- if(tPrefix == OrePrefixes.rotor){
- OrePrefixes.ring.mDisabledItems.remove(tName);
- OrePrefixes.ring.mGeneratedItems.add(tName);
- }
- }else{GT_FML_LOGGER.info("noMaterial "+reEnable);}
- }else{GT_FML_LOGGER.info("noPrefix "+reEnable);}}
+ for (String reEnable : mMTTags) {
+ OrePrefixes tPrefix = OrePrefixes.getOrePrefix(reEnable);
+ if (tPrefix != null) {
+ Materials tName = Materials.get(reEnable.replaceFirst(tPrefix.toString(), ""));
+ if (tName != null) {
+ tPrefix.mDisabledItems.remove(tName);
+ tPrefix.mGeneratedItems.add(tName);
+ if (tPrefix == OrePrefixes.screw) {
+ OrePrefixes.bolt.mDisabledItems.remove(tName);
+ OrePrefixes.bolt.mGeneratedItems.add(tName);
+ OrePrefixes.stick.mDisabledItems.remove(tName);
+ OrePrefixes.stick.mGeneratedItems.add(tName);
+ }
+ if (tPrefix == OrePrefixes.round) {
+ OrePrefixes.nugget.mDisabledItems.remove(tName);
+ OrePrefixes.nugget.mGeneratedItems.add(tName);
+ }
+ if (tPrefix == OrePrefixes.spring) {
+ OrePrefixes.stickLong.mDisabledItems.remove(tName);
+ OrePrefixes.stickLong.mGeneratedItems.add(tName);
+ OrePrefixes.stick.mDisabledItems.remove(tName);
+ OrePrefixes.stick.mGeneratedItems.add(tName);
+ }
+ if (tPrefix == OrePrefixes.springSmall) {
+ OrePrefixes.stick.mDisabledItems.remove(tName);
+ OrePrefixes.stick.mGeneratedItems.add(tName);
+ }
+ if (tPrefix == OrePrefixes.stickLong) {
+ OrePrefixes.stick.mDisabledItems.remove(tName);
+ OrePrefixes.stick.mGeneratedItems.add(tName);
+ }
+ if (tPrefix == OrePrefixes.rotor) {
+ OrePrefixes.ring.mDisabledItems.remove(tName);
+ OrePrefixes.ring.mGeneratedItems.add(tName);
+ }
+ } else {
+ GT_FML_LOGGER.info("noMaterial " + reEnable);
+ }
+ } else {
+ GT_FML_LOGGER.info("noPrefix " + reEnable);
+ }
+ }
new GT_Loader_OreProcessing().run();
new GT_Loader_OreDictionary().run();
@@ -551,17 +557,15 @@ public class GT_Mod implements IGT_Mod {
new GT_SonictronLoader().run();
new GT_SpawnEventHandler();
- if (true) {
- GT_Values.RA.addCentrifugeRecipe(Materials.Stone.getDust(1), GT_Values.NI, GT_Values.NF, GT_Values.NF,
- Materials.Quartzite.getDustSmall(1),Materials.PotassiumFeldspar.getDustSmall(1),Materials.Marble.getDustTiny(2),
- Materials.Biotite.getDustTiny(1), Materials.MetalMixture.getDustTiny(1), Materials.Sodalite.getDustTiny(1),
- new int[]{10000, 10000, 10000, 10000, 7500, 5000}, 480, 120);
- GT_Values.RA.addCentrifugeRecipe(Materials.MetalMixture.getDust(1), GT_Values.NI, GT_Values.NF, GT_Values.NF,
- Materials.BandedIron.getDustSmall(1), Materials.Bauxite.getDustSmall(1), Materials.Pyrolusite.getDustTiny(2),
- Materials.Barite.getDustTiny(1), Materials.Chromite.getDustTiny(1), Materials.Ilmenite.getDustTiny(1),
- new int[]{10000, 10000, 10000, 10000, 7500, 5000}, 1000, 900);
- }
- /*
+ GT_Values.RA.addCentrifugeRecipe(Materials.Stone.getDust(1), GT_Values.NI, GT_Values.NF, GT_Values.NF,
+ Materials.Quartzite.getDustSmall(1), Materials.PotassiumFeldspar.getDustSmall(1), Materials.Marble.getDustTiny(2),
+ Materials.Biotite.getDustTiny(1), Materials.MetalMixture.getDustTiny(1), Materials.Sodalite.getDustTiny(1),
+ new int[]{10000, 10000, 10000, 10000, 7500, 5000}, 480, 120);
+ GT_Values.RA.addCentrifugeRecipe(Materials.MetalMixture.getDust(1), GT_Values.NI, GT_Values.NF, GT_Values.NF,
+ Materials.BandedIron.getDustSmall(1), Materials.Bauxite.getDustSmall(1), Materials.Pyrolusite.getDustTiny(2),
+ Materials.Barite.getDustTiny(1), Materials.Chromite.getDustTiny(1), Materials.Ilmenite.getDustTiny(1),
+ new int[]{10000, 10000, 10000, 10000, 7500, 5000}, 1000, 900);
+ /*
if (GregTech_API.sRecipeFile.get(ConfigCategories.Recipes.gregtechrecipes, "SolarPanel", true)) {
GT_ModHandler.addCraftingRecipe(ItemList.Cover_SolarPanel.get(1L), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[]{"SGS", "CPC", 'C', OrePrefixes.circuit.get(Materials.Basic), 'G', new ItemStack(Blocks.glass_pane, 1), 'P', OrePrefixes.plateAlloy.get(Materials.Carbon), 'S', ItemList.Circuit_Silicon_Wafer});
GT_ModHandler.addCraftingRecipe(ItemList.Cover_SolarPanel_8V.get(1L), GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[]{"SGS", "CPC","R R", 'C', OrePrefixes.circuit.get(Materials.Advanced), 'G', new ItemStack(Blocks.glass_pane, 1), 'P', OrePrefixes.wireGt04.get(Materials.Graphene), 'S', ItemList.Circuit_Silicon_Wafer2,'R', OrePrefixes.plate.get(Materials.GalliumArsenide)});
@@ -627,11 +631,11 @@ public class GT_Mod implements IGT_Mod {
GT_Log.out.println("GT_Mod: Sorting GregTech to the end of the Mod List for further processing.");
LoadController tLoadController = (LoadController) GT_Utility.getFieldContent(Loader.instance(), "modController", true, true);
List<ModContainer> tModList = tLoadController.getActiveModList();
- List<ModContainer> tNewModsList = new ArrayList();
+ List<ModContainer> tNewModsList = new ArrayList<>();
ModContainer tGregTech = null;
short tModList_sS= (short) tModList.size();
for (short i = 0; i < tModList_sS; i = (short) (i + 1)) {
- ModContainer tMod = (ModContainer) tModList.get(i);
+ ModContainer tMod = tModList.get(i);
if (tMod.getModId().equalsIgnoreCase("gregtech")) {
tGregTech = tMod;
} else {
@@ -681,11 +685,6 @@ public class GT_Mod implements IGT_Mod {
gregtechproxy.mLowGravProcessing = false;
}
- //Disable Low Grav regardless of config if Cleanroom is disabled.
- if (!gregtechproxy.mEnableCleanroom){
- gregtechproxy.mLowGravProcessing = false;
- }
-
gregtechproxy.onLoad();
if (gregtechproxy.mSortToTheEnd) {
new GT_ItemIterator().run();
@@ -733,16 +732,13 @@ public class GT_Mod implements IGT_Mod {
new GT_AE2EnergyTunnelLoader().run();
LoadArmorComponents.init();
- GT_RecipeRegistrator.registerUsagesForMaterials(new ItemStack(Blocks.planks, 1), null, false);
- GT_RecipeRegistrator.registerUsagesForMaterials(new ItemStack(Blocks.cobblestone, 1), null, false);
- GT_RecipeRegistrator.registerUsagesForMaterials(new ItemStack(Blocks.stone, 1), null, false);
- GT_RecipeRegistrator.registerUsagesForMaterials(new ItemStack(Items.leather, 1), null, false);
+ GT_RecipeRegistrator.registerUsagesForMaterials(null, false, new ItemStack(Blocks.planks, 1), new ItemStack(Blocks.cobblestone, 1), new ItemStack(Blocks.stone, 1), new ItemStack(Items.leather, 1));
- GT_OreDictUnificator.addItemData(GT_ModHandler.getRecipeOutput(new ItemStack[]{null, GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Tin, 1L), null, GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Tin, 1L), null, GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Tin, 1L), null, null, null}), new ItemData(Materials.Tin, 10886400L, new MaterialStack[0]));
+ GT_OreDictUnificator.addItemData(GT_ModHandler.getRecipeOutput(null, GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Tin, 1L), null, GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Tin, 1L), null, GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Tin, 1L), null, null, null), new ItemData(Materials.Tin, 10886400L));
if (!GregTech_API.sRecipeFile.get(ConfigCategories.Recipes.storageblockcrafting, "tile.glowstone", false)) {
- GT_ModHandler.removeRecipe(new ItemStack[]{new ItemStack(Items.glowstone_dust, 1), new ItemStack(Items.glowstone_dust, 1), null, new ItemStack(Items.glowstone_dust, 1), new ItemStack(Items.glowstone_dust, 1)});
+ GT_ModHandler.removeRecipe(new ItemStack(Items.glowstone_dust, 1), new ItemStack(Items.glowstone_dust, 1), null, new ItemStack(Items.glowstone_dust, 1), new ItemStack(Items.glowstone_dust, 1));
}
- GT_ModHandler.removeRecipe(new ItemStack[]{new ItemStack(Blocks.wooden_slab, 1, 0), new ItemStack(Blocks.wooden_slab, 1, 1), new ItemStack(Blocks.wooden_slab, 1, 2)});
+ GT_ModHandler.removeRecipe(new ItemStack(Blocks.wooden_slab, 1, 0), new ItemStack(Blocks.wooden_slab, 1, 1), new ItemStack(Blocks.wooden_slab, 1, 2));
GT_ModHandler.addCraftingRecipe(new ItemStack(Blocks.wooden_slab, 6, 0), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[]{"WWW", 'W', new ItemStack(Blocks.planks, 1, 0)});
//Save a copy of these list before activateOreDictHandler(), then loop over them.
@@ -754,13 +750,31 @@ public class GT_Mod implements IGT_Mod {
GT_Log.out.println("GT_Mod: Activating OreDictionary Handler, this can take some time, as it scans the whole OreDictionary");
GT_FML_LOGGER.info("If your Log stops here, you were too impatient. Wait a bit more next time, before killing Minecraft with the Task Manager.");
+ long ms = System.currentTimeMillis();
gregtechproxy.activateOreDictHandler();
- GT_FML_LOGGER.info("Congratulations, you have been waiting long enough. Have a Cake.");
+ GT_FML_LOGGER.info("Congratulations, you have been waiting long enough (" + (System.currentTimeMillis() - ms) / 1000 + "s / " + (System.currentTimeMillis() - ms) + "ms). Have a Cake.");
GT_Log.out.println("GT_Mod: List of Lists of Tool Recipes: "+GT_ModHandler.sSingleNonBlockDamagableRecipeList_list.toString());
GT_Log.out.println("GT_Mod: Vanilla Recipe List -> Outputs null or stackSize <=0: " + GT_ModHandler.sVanillaRecipeList_warntOutput.toString());
GT_Log.out.println("GT_Mod: Single Non Block Damagable Recipe List -> Outputs null or stackSize <=0: " + GT_ModHandler.sSingleNonBlockDamagableRecipeList_warntOutput.toString());
//GT_Log.out.println("GT_Mod: sRodMaterialList cycles: " + GT_RecipeRegistrator.sRodMaterialList_cycles);
-
+ Set<Materials> replaceVanillaItemsSet = gregtechproxy.mUseGreatlyShrukenReplacementList ? Arrays.stream(Materials.values()).filter(GT_RecipeRegistrator::hasVanillaRecipes).collect(Collectors.toSet()) : new HashSet<>(Arrays.asList(Materials.values()));
+ GT_FML_LOGGER.info("Replacing Vanilla Materials in recipes, please wait.");
+
+ ProgressManager.ProgressBar progressBar = ProgressManager.push("Register materials", replaceVanillaItemsSet.size());
+ for (Materials m : replaceVanillaItemsSet) {
+ progressBar.step(m.mDefaultLocalName);
+ //GT_FML_LOGGER.info("Replacing Vanilla Recipes for: " + m.mDefaultLocalName);
+ String platename = OrePrefixes.plate.get(m).toString();
+ boolean noSmash = !m.contains(SubTag.NO_SMASHING);
+ if ((m.mTypes & 2) != 0)
+ GT_RecipeRegistrator.registerUsagesForMaterials(platename, noSmash, m.getIngots(1));
+ if ((m.mTypes & 4) != 0)
+ GT_RecipeRegistrator.registerUsagesForMaterials(platename, noSmash, m.getGems(1));
+ if (m.getBlocks(1) != null)
+ GT_RecipeRegistrator.registerUsagesForMaterials(null, noSmash, m.getBlocks(1));
+ }
+ ProgressManager.pop(progressBar);
+ GT_FML_LOGGER.info("Congratulations, you have been waiting long enough (" + (System.currentTimeMillis() - ms) / 1000 + "s / " + (System.currentTimeMillis() - ms) + "ms). Have a Cake.");
//Add default IC2 recipe to GT
GT_ModHandler.addIC2RecipesToGT(aMaceratorRecipeList, GT_Recipe.GT_Recipe_Map.sMaceratorRecipes, true, true, true);
GT_ModHandler.addIC2RecipesToGT(aCompressorRecipeList, GT_Recipe.GT_Recipe_Map.sCompressorRecipes, true, true, true);
@@ -1022,7 +1036,7 @@ public class GT_Mod implements IGT_Mod {
GT_ModHandler.addIC2RecipesToGT(GT_ModHandler.getOreWashingRecipeList(), GT_Recipe.GT_Recipe_Map.sOreWasherRecipes, false, true, true);
GT_ModHandler.addIC2RecipesToGT(GT_ModHandler.getThermalCentrifugeRecipeList(), GT_Recipe.GT_Recipe_Map.sThermalCentrifugeRecipes, true, true, true);
GT_Log.out.println("GT_Mod: Unificating outputs of all known Recipe Types.");
- ArrayList<ItemStack> tStacks = new ArrayList(10000);
+ ArrayList<ItemStack> tStacks = new ArrayList<>(10000);
GT_Log.out.println("GT_Mod: IC2 Machines");
for (RecipeOutput tRecipe : ic2.api.recipe.Recipes.cannerBottle.getRecipes().values()) {
ItemStack tStack;
@@ -1170,9 +1184,8 @@ public class GT_Mod implements IGT_Mod {
GT_Utility.reInit();
GT_Recipe.reInit();
try {
- for (Iterator i$ = GregTech_API.sItemStackMappings.iterator(); i$.hasNext(); ) {
- Map tMap = (Map) i$.next();
- GT_Utility.reMap(tMap);
+ for (Map<gregtech.api.objects.GT_ItemStack, ?> gt_itemStackMap : GregTech_API.sItemStackMappings) {
+ GT_Utility.reMap((Map) gt_itemStackMap);
}
} catch (Throwable e) {e.printStackTrace(GT_Log.err);}
@@ -1217,7 +1230,7 @@ public class GT_Mod implements IGT_Mod {
GT_Log.out.println("*");
GT_Log.out.println("*");
- tList = (String[]) FluidRegistry.getRegisteredFluids().keySet().toArray(new String[FluidRegistry.getRegisteredFluids().keySet().size()]);
+ tList = FluidRegistry.getRegisteredFluids().keySet().toArray(new String[0]);
Arrays.sort(tList);
for (String tFluidName : tList) {
GT_Log.out.println(tFluidName);
diff --git a/src/main/java/gregtech/api/util/GT_ModHandler.java b/src/main/java/gregtech/api/util/GT_ModHandler.java
index 8a1519234c..01279b01a4 100644
--- a/src/main/java/gregtech/api/util/GT_ModHandler.java
+++ b/src/main/java/gregtech/api/util/GT_ModHandler.java
@@ -40,6 +40,7 @@ import net.minecraftforge.oredict.ShapelessOreRecipe;
import java.util.*;
import java.util.Map.Entry;
+import java.util.stream.Collectors;
import static gregtech.api.enums.GT_Values.*;
@@ -1014,7 +1015,7 @@ public class GT_ModHandler {
Character chr = (Character) aRecipe[idx];
Object in = aRecipe[idx + 1];
if (in instanceof ItemStack) {
- tItemStackMap.put(chr, GT_Utility.copy((ItemStack) in));
+ tItemStackMap.put(chr, GT_Utility.copy(in));
tItemDataMap.put(chr, GT_OreDictUnificator.getItemData((ItemStack) in));
} else if (in instanceof ItemData) {
String tString = in.toString();
@@ -1392,7 +1393,7 @@ public class GT_ModHandler {
* If you have multiple Mods, which add Bronze Armor for example
* This also removes old Recipes from the List.
*/
- public static ArrayList<ItemStack> getVanillyToolRecipeOutputs(ItemStack... aRecipe) {
+ public static List<ItemStack> getVanillyToolRecipeOutputs(ItemStack... aRecipe) {
if (!GregTech_API.sPostloadStarted || GregTech_API.sPostloadFinished)
sSingleNonBlockDamagableRecipeList.clear();
if (sSingleNonBlockDamagableRecipeList.isEmpty()) {
@@ -1431,7 +1432,7 @@ public class GT_ModHandler {
}
GT_Log.out.println("GT_Mod: Created a List of Tool Recipes containing " + sSingleNonBlockDamagableRecipeList.size() + " Recipes for recycling." + (sSingleNonBlockDamagableRecipeList.size() > 1024 ? " Scanning all these Recipes is the reason for the startup Lag you receive right now." : E));
}
- ArrayList<ItemStack> rList = getRecipeOutputs(sSingleNonBlockDamagableRecipeList, true, aRecipe);
+ List<ItemStack> rList = getRecipeOutputs(sSingleNonBlockDamagableRecipeList, true, aRecipe);
if (!GregTech_API.sPostloadStarted || GregTech_API.sPostloadFinished)
sSingleNonBlockDamagableRecipeList.clear();
return rList;
@@ -1441,49 +1442,95 @@ public class GT_ModHandler {
* Gives you a list of the Outputs from a Crafting Recipe
* If you have multiple Mods, which add Bronze Armor for example
*/
- public static ArrayList<ItemStack> getRecipeOutputs(ItemStack... aRecipe) {
+ public static List<ItemStack> getRecipeOutputs(ItemStack... aRecipe) {
return getRecipeOutputs(CraftingManager.getInstance().getRecipeList(), false, aRecipe);
}
+ private static List<IRecipe> bufferedRecipes = null;
+
+ /**
+ * Gives you a list of the Outputs from a Crafting Recipe
+ * If you have multiple Mods, which add Bronze Armor for example
+ * Buffers a List which only has armor-alike crafting in it
+ */
+ public static List<ItemStack> getRecipeOutputsBuffered(ItemStack... aRecipe) {
+
+ if (bufferedRecipes == null)
+ bufferedRecipes = (List<IRecipe>) CraftingManager.getInstance().getRecipeList().stream().filter(
+ tRecipe -> !(tRecipe instanceof ShapelessRecipes) && !(tRecipe instanceof ShapelessOreRecipe) && !(tRecipe instanceof IGT_CraftingRecipe)
+ )
+ .filter(tRecipe ->
+ {
+ try {
+ ItemStack tOutput = ((IRecipe) tRecipe).getRecipeOutput();
+ if (tOutput.stackSize == 1 && tOutput.getMaxDamage() > 0 && tOutput.getMaxStackSize() == 1) {
+ return true;
+ }
+ } catch (Exception ignored) {
+ }
+ return false;
+ })
+ .collect(Collectors.toList());
+ return getRecipeOutputs(bufferedRecipes, false, aRecipe);
+ }
+
/**
* Gives you a list of the Outputs from a Crafting Recipe
* If you have multiple Mods, which add Bronze Armor for example
*/
- public static ArrayList<ItemStack> getRecipeOutputs(List<IRecipe> aList, boolean aDeleteFromList, ItemStack... aRecipe) {
- ArrayList<ItemStack> rList = new ArrayList<ItemStack>();
- if (aRecipe == null) return rList;
- boolean temp = false;
- for (byte i = 0; i < aRecipe.length; i++) {
- if (aRecipe[i] != null) {
- temp = true;
- break;
- }
- }
- if (!temp) return rList;
+ public static List<ItemStack> getRecipeOutputs(List<IRecipe> aList, boolean aDeleteFromList, ItemStack... aRecipe) {
+ List<ItemStack> rList = new ArrayList<>();
+ if (aRecipe == null || Arrays.stream(aRecipe).noneMatch(Objects::nonNull))
+ return rList;
InventoryCrafting aCrafting = new InventoryCrafting(new Container() {
@Override
public boolean canInteractWith(EntityPlayer var1) {
return false;
}
}, 3, 3);
- for (int i = 0; i < 9 && i < aRecipe.length; i++) aCrafting.setInventorySlotContents(i, aRecipe[i]);
- for (int i = 0; i < aList.size(); i++) {
- temp = false;
+ for (int i = 0; i < 9 && i < aRecipe.length; i++)
+ aCrafting.setInventorySlotContents(i, aRecipe[i]);
+ if (!aDeleteFromList) {
+ HashSet<ItemStack> stacks = new HashSet<>();
+ aList.stream().filter(
+ tRecipe -> {
+ if (tRecipe instanceof ShapelessRecipes || tRecipe instanceof ShapelessOreRecipe || tRecipe instanceof IGT_CraftingRecipe)
+ return false;
+ try {
+ return tRecipe.matches(aCrafting, DW);
+ } catch (Throwable e) {
+ e.printStackTrace(GT_Log.err);
+ return false;
+ }
+ }
+ ).forEach(tRecipe -> stacks.add(tRecipe.getCraftingResult(aCrafting)));
+ rList = stacks.stream().filter(tOutput -> tOutput.stackSize == 1 && tOutput.getMaxDamage() > 0 && tOutput.getMaxStackSize() == 1).collect(Collectors.toList());
+ } else for (int i = 0; i < aList.size(); i++) {
+ boolean temp = false;
+
try {
temp = aList.get(i).matches(aCrafting, DW);
} catch (Throwable e) {
e.printStackTrace(GT_Log.err);
}
if (temp) {
- ItemStack tOutput = aList.get(i).getCraftingResult(aCrafting);
+ IRecipe tRecipe = aList.get(i);
+ ItemStack tOutput = tRecipe.getCraftingResult(aCrafting);
+
if (tOutput == null || tOutput.stackSize <= 0) {
// Seriously, who would ever do that shit?
if (!GregTech_API.sPostloadFinished)
throw new GT_ItsNotMyFaultException("Seems another Mod added a Crafting Recipe with null Output. Tell the Developer of said Mod to fix that.");
- } else {
- rList.add(GT_Utility.copy(tOutput));
- if (aDeleteFromList) aList.remove(i--);
+ continue;
}
+ if (tOutput.stackSize != 1) continue;
+ if (tOutput.getMaxDamage() <= 0) continue;
+ if (tOutput.getMaxStackSize() != 1) continue;
+ if (tRecipe instanceof ShapelessRecipes) continue;
+ if (tRecipe instanceof ShapelessOreRecipe) continue;
+ if (tRecipe instanceof IGT_CraftingRecipe) continue;
+ rList.add(GT_Utility.copy(tOutput));
+ aList.remove(i--);
}
}
return rList;
@@ -1538,7 +1585,7 @@ public class GT_ModHandler {
for (Entry<IRecipeInput, RecipeOutput> tEntry : aRecipeList.entrySet()) {
if (tEntry.getKey().matches(aInput)) {
if (tEntry.getKey().getAmount() <= aInput.stackSize) {
- ItemStack[] tList = (ItemStack[]) tEntry.getValue().items.toArray(new ItemStack[tEntry.getValue().items.size()]);
+ ItemStack[] tList = tEntry.getValue().items.toArray(new ItemStack[tEntry.getValue().items.size()]);
if (tList.length == 0) break;
ItemStack[] rList = new ItemStack[aOutputSlots.length];
rRecipeMetaData.setTag("return", tEntry.getValue().metadata);
diff --git a/src/main/java/gregtech/api/util/GT_RecipeRegistrator.java b/src/main/java/gregtech/api/util/GT_RecipeRegistrator.java
index 0358dfec4b..d10f6da434 100644
--- a/src/main/java/gregtech/api/util/GT_RecipeRegistrator.java
+++ b/src/main/java/gregtech/api/util/GT_RecipeRegistrator.java
@@ -16,7 +16,8 @@ import java.util.Arrays;
import java.util.List;
import static gregtech.api.enums.GT_Values.*;
-
+import static gregtech.api.enums.Materials.Void;
+import static gregtech.api.enums.Materials.*;
/**
* Class for Automatic Recipe registering.
*/
@@ -275,39 +276,77 @@ public class GT_RecipeRegistrator {
}
/**
- * You give this Function a Material and it will scan almost everything for adding recycling Recipes
+ * Place Materials which you want to replace in Non-GT-Recipes here (warning HUGHE impact on loading times!)
+ */
+ private final static Materials[] VANILLA_MATS = {
+ Cobalt,
+ Gold,
+ Iron,
+ Lead,
+ FierySteel,
+ Void,
+ Bronze,
+ Diamond,
+ Ruby,
+ Sapphire,
+ Steel,
+ IronWood,
+ Steeleaf,
+ Knightmetal,
+ Thaumium,
+ DarkSteel,
+ };
+
+ /**
+ * You give this Function a Material and it will scan almost everything for adding recycling Recipes and replacing Ingots, Gems etc.
*
- * @param aMat a Material, for example an Ingot or a Gem.
- * @param aOutput the Dust you usually get from macerating aMat
+ * @param aMats Materials, for example an Ingot or a Gem.
+ * @param aPlate the Plate referenced to aMat
* @param aRecipeReplacing allows to replace the Recipe with a Plate variant
*/
- public static synchronized void registerUsagesForMaterials(ItemStack aMat, String aPlate, boolean aRecipeReplacing) {
- if (aMat == null) return;
- aMat = GT_Utility.copy(aMat);
- ItemStack tStack;
- ItemData aItemData = GT_OreDictUnificator.getItemData(aMat);
- if (aItemData == null || aItemData.mPrefix != OrePrefixes.ingot) aPlate = null;
- if (aPlate != null && GT_OreDictUnificator.getFirstOre(aPlate, 1) == null) aPlate = null;
-
- sMt1.func_150996_a(aMat.getItem());
- sMt1.stackSize = 1;
- Items.feather.setDamage(sMt1, Items.feather.getDamage(aMat));
-
- sMt2.func_150996_a(new ItemStack(Blocks.dirt).getItem());
- sMt2.stackSize = 1;
- Items.feather.setDamage(sMt2, 0);
-
- for (ItemStack[] tRecipe : sShapes1) {
- int tAmount1 = 0;
- for (ItemStack tMat : tRecipe) {
- if (tMat == sMt1) tAmount1++;
- }
- if (aItemData != null && aItemData.hasValidPrefixMaterialData())
- for (ItemStack tCrafted : GT_ModHandler.getRecipeOutputs(tRecipe)) {
- GT_OreDictUnificator.addItemData(tCrafted, new ItemData(aItemData.mMaterial.mMaterial, aItemData.mMaterial.mAmount * tAmount1));
+ public static synchronized void registerUsagesForMaterials(String aPlate, boolean aRecipeReplacing, ItemStack... aMats) {
+ for (ItemStack aMat : aMats) {
+ if (aMat == null)
+ continue;
+
+ aMat = GT_Utility.copy(aMat);
+
+ if (aMat == null)
+ continue;
+
+ ItemData aItemData = GT_OreDictUnificator.getItemData(aMat);
+ if (aItemData == null || aItemData.mPrefix != OrePrefixes.ingot) aPlate = null;
+ if (aPlate != null && GT_OreDictUnificator.getFirstOre(aPlate, 1) == null) aPlate = null;
+
+ sMt1.func_150996_a(aMat.getItem());
+ sMt1.stackSize = 1;
+ Items.feather.setDamage(sMt1, Items.feather.getDamage(aMat));
+
+ sMt2.func_150996_a(new ItemStack(Blocks.dirt).getItem());
+ sMt2.stackSize = 1;
+ Items.feather.setDamage(sMt2, 0);
+
+ for (ItemStack[] tRecipe : sShapes1) {
+ int tAmount1 = 0;
+ for (ItemStack tMat : tRecipe) {
+ if (tMat == sMt1) tAmount1++;
}
+ if (aItemData != null && aItemData.hasValidPrefixMaterialData())
+ for (ItemStack tCrafted : GT_ModHandler.getRecipeOutputsBuffered(tRecipe)) {
+ GT_OreDictUnificator.addItemData(tCrafted, new ItemData(aItemData.mMaterial.mMaterial, aItemData.mMaterial.mAmount * tAmount1));
+// GT_Log.out.println("###################################################################################");
+// GT_Log.out.println("registerUsagesForMaterials used aPlate: "+aPlate);
+// GT_Log.out.println("registerUsagesForMaterials used aPlate: "+aMat.getUnlocalizedName());
+// GT_Log.out.println("registerUsagesForMaterials used aPlate: "+aMat.getDisplayName());
+// GT_Log.out.println("###################################################################################");
+ }
+ }
+ registerStickStuff(aPlate, aItemData, aRecipeReplacing);
}
+ }
+ private static synchronized void registerStickStuff(String aPlate, ItemData aItemData, boolean aRecipeReplacing) {
+ ItemStack tStack;
for (Materials tMaterial : sRodMaterialList) {
ItemStack tMt2 = GT_OreDictUnificator.get(OrePrefixes.stick, tMaterial, 1);
if (tMt2 != null) {
@@ -331,6 +370,9 @@ public class GT_RecipeRegistrator {
assert aItemData != null;
if (GregTech_API.sRecipeFile.get(ConfigCategories.Recipes.recipereplacements, aItemData.mMaterial.mMaterial + "." + sShapesA[i][0], true)) {
if (null != (tStack = GT_ModHandler.removeRecipe(tRecipe))) {
+// GT_Log.out.println("###################################################################################");
+// GT_Log.out.println("registerStickStuff used aPlate: "+aPlate);
+// GT_Log.out.println("###################################################################################");
switch (sShapesA[i].length) {
case 2:
GT_ModHandler.addCraftingRecipe(tStack, GT_ModHandler.RecipeBits.BUFFERED, new Object[]{sShapesA[i][1], s_P.charAt(0), aPlate, s_R.charAt(0), OrePrefixes.stick.get(tMaterial), s_I.charAt(0), aItemData});
@@ -350,4 +392,9 @@ public class GT_RecipeRegistrator {
}
}
}
+
+ public static boolean hasVanillaRecipes(Materials materials) {
+ return Arrays.stream(VANILLA_MATS).anyMatch(mat -> mat == materials);
+ }
+
}
diff --git a/src/main/java/gregtech/common/GT_Proxy.java b/src/main/java/gregtech/common/GT_Proxy.java
index f99d4083c9..6b98488ee5 100644
--- a/src/main/java/gregtech/common/GT_Proxy.java
+++ b/src/main/java/gregtech/common/GT_Proxy.java
@@ -21,7 +21,10 @@ import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.items.GT_MetaGenerated_Item;
import gregtech.api.items.GT_MetaGenerated_Tool;
import gregtech.api.net.GT_Packet_Pollution;
-import gregtech.api.objects.*;
+import gregtech.api.objects.GT_Fluid;
+import gregtech.api.objects.GT_FluidStack;
+import gregtech.api.objects.GT_UO_DimensionList;
+import gregtech.api.objects.ItemData;
import gregtech.api.util.*;
import gregtech.common.entities.GT_Entity_Arrow;
import gregtech.common.gui.GT_ContainerVolumetricFlask;
@@ -171,6 +174,7 @@ public abstract class GT_Proxy implements IGT_Mod, IGuiHandler, IFuelHandler {
public boolean mHideRecyclingRecipes = true;
public boolean mPollution = true;
public boolean mExplosionItemDrop = false;
+ public boolean mUseGreatlyShrukenReplacementList = true;
public int mSkeletonsShootGTArrows = 16;
public int mMaxEqualEntitiesAtOneSpot = 3;
public int mFlintChance = 30;
@@ -246,7 +250,7 @@ public abstract class GT_Proxy implements IGT_Mod, IGuiHandler, IFuelHandler {
if (aOre.mPrefix != null) {
if (!aOre.mPrefix.isIgnored(aOre.mMaterial)) {
aOre.mPrefix.processOre(aOre.mMaterial == null ? Materials._NULL : aOre.mMaterial, aOre.mEvent.Name, aOre.mModID,
- GT_Utility.copyAmount(1L, new Object[]{aOre.mEvent.Ore}));
+ GT_Utility.copyAmount(1L, aOre.mEvent.Ore));
}
} else {
// GT_FML_LOGGER.info("Thingy Name: "+ aOre.mEvent.Name+ " !!!Unknown 'Thingy' detected!!! This Object seems to probably not follow a valid OreDictionary Convention, or I missed a Convention. Please report to GregTech Intergalactical for additional compatiblity. This is not an Error, an Issue nor a Lag Source, it is just an Information, which you should pass to me.");
@@ -344,7 +348,7 @@ public abstract class GT_Proxy implements IGT_Mod, IGuiHandler, IFuelHandler {
ItemList.IC2_Hops.set(GT_ModHandler.getIC2Item("hops", 1L));
ItemList.IC2_Resin.set(GT_ModHandler.getIC2Item("resin", 1L));
ItemList.IC2_Plantball.set(GT_ModHandler.getIC2Item("plantBall", 1L));
- ItemList.IC2_PlantballCompressed.set(GT_ModHandler.getIC2Item("compressedPlantBall", 1L, ItemList.IC2_Plantball.get(1L, new Object[0])));
+ ItemList.IC2_PlantballCompressed.set(GT_ModHandler.getIC2Item("compressedPlantBall", 1L, ItemList.IC2_Plantball.get(1L)));
ItemList.IC2_Crop_Seeds.set(GT_ModHandler.getIC2Item("cropSeed", 1L));
ItemList.IC2_Grin_Powder.set(GT_ModHandler.getIC2Item("grinPowder", 1L));
ItemList.IC2_Energium_Dust.set(GT_ModHandler.getIC2Item("energiumDust", 1L));
@@ -393,11 +397,11 @@ public abstract class GT_Proxy implements IGT_Mod, IGuiHandler, IFuelHandler {