aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/api
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/gregtech/api')
-rw-r--r--src/main/java/gregtech/api/GregTech_API.java4
-rw-r--r--src/main/java/gregtech/api/enums/GT_Values.java4
-rw-r--r--src/main/java/gregtech/api/enums/Materials.java8
-rw-r--r--src/main/java/gregtech/api/enums/ModIDs.java84
-rw-r--r--src/main/java/gregtech/api/enums/SoundResource.java48
-rw-r--r--src/main/java/gregtech/api/interfaces/IGT_RecipeMap.java64
-rw-r--r--src/main/java/gregtech/api/interfaces/internal/IGT_RecipeAdder.java3
-rw-r--r--src/main/java/gregtech/api/items/GT_MetaGenerated_Item.java4
-rw-r--r--src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Cable.java9
-rw-r--r--src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine_GT_Recipe.java6
-rw-r--r--src/main/java/gregtech/api/util/GT_BaseCrop.java4
-rw-r--r--src/main/java/gregtech/api/util/GT_ModReference.java29
-rw-r--r--src/main/java/gregtech/api/util/GT_Recipe.java601
-rw-r--r--src/main/java/gregtech/api/util/GT_RecipeBuilder.java713
-rw-r--r--src/main/java/gregtech/api/util/GT_RecipeConstants.java258
-rw-r--r--src/main/java/gregtech/api/util/GT_RecipeMapUtil.java196
-rw-r--r--src/main/java/gregtech/api/util/GT_Utility.java83
17 files changed, 2035 insertions, 83 deletions
diff --git a/src/main/java/gregtech/api/GregTech_API.java b/src/main/java/gregtech/api/GregTech_API.java
index 68d1afdebd..d8ad1ca07b 100644
--- a/src/main/java/gregtech/api/GregTech_API.java
+++ b/src/main/java/gregtech/api/GregTech_API.java
@@ -3,7 +3,7 @@ package gregtech.api;
import static gregtech.api.enums.GT_Values.B;
import static gregtech.api.enums.GT_Values.L;
import static gregtech.api.enums.GT_Values.M;
-import static gregtech.api.enums.GT_Values.MOD_ID_IC2;
+import static gregtech.api.enums.ModIDs.IndustrialCraft2;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
@@ -284,7 +284,7 @@ public class GregTech_API {
public static boolean mUseOnlyGoodSolderingMaterials = false;
- private static final String aTextIC2Lower = MOD_ID_IC2.toLowerCase(Locale.ENGLISH);
+ private static final String aTextIC2Lower = IndustrialCraft2.modID.toLowerCase(Locale.ENGLISH);
/**
* Getting assigned by the Mod loading
*/
diff --git a/src/main/java/gregtech/api/enums/GT_Values.java b/src/main/java/gregtech/api/enums/GT_Values.java
index d06e70b0b5..6ccf092461 100644
--- a/src/main/java/gregtech/api/enums/GT_Values.java
+++ b/src/main/java/gregtech/api/enums/GT_Values.java
@@ -1,5 +1,7 @@
package gregtech.api.enums;
+import static gregtech.api.enums.ModIDs.IndustrialCraft2;
+
import java.math.BigInteger;
import java.util.*;
@@ -206,7 +208,7 @@ public class GT_Values {
TEX_DIR_ASPECTS = TEX_DIR + "aspects/", RES_PATH = MOD_ID + ":" + TEX_DIR,
RES_PATH_GUI = MOD_ID + ":" + TEX_DIR_GUI, RES_PATH_ITEM = MOD_ID + ":", RES_PATH_BLOCK = MOD_ID + ":",
RES_PATH_ENTITY = MOD_ID + ":" + TEX_DIR_ENTITY, RES_PATH_ASPECTS = MOD_ID + ":" + TEX_DIR_ASPECTS,
- RES_PATH_IC2 = MOD_ID_IC2.toLowerCase(Locale.ENGLISH) + ":",
+ RES_PATH_IC2 = IndustrialCraft2.modID.toLowerCase(Locale.ENGLISH) + ":",
RES_PATH_MODEL = MOD_ID + ":" + TEX_DIR + "models/";
/**
diff --git a/src/main/java/gregtech/api/enums/Materials.java b/src/main/java/gregtech/api/enums/Materials.java
index 9932cf3b09..3ff4d70920 100644
--- a/src/main/java/gregtech/api/enums/Materials.java
+++ b/src/main/java/gregtech/api/enums/Materials.java
@@ -2,7 +2,8 @@ package gregtech.api.enums;
import static gregtech.api.enums.FluidState.GAS;
import static gregtech.api.enums.GT_Values.M;
-import static gregtech.api.enums.GT_Values.MOD_ID_DC;
+import static gregtech.api.enums.ModIDs.NewHorizonsCoreMod;
+import static gregtech.api.enums.ModIDs.Thaumcraft;
import java.util.*;
import java.util.stream.Collectors;
@@ -13,7 +14,6 @@ import net.minecraft.item.ItemStack;
import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidStack;
-import cpw.mods.fml.common.Loader;
import gregtech.GT_Mod;
import gregtech.api.GregTech_API;
import gregtech.api.enums.TC_Aspects.TC_AspectStack;
@@ -2316,7 +2316,7 @@ public class Materials implements IColorModulationContainer, ISubTagContainer {
MATERIALS_ARRAY = MATERIALS_MAP.values().toArray(new Materials[0]); // Generate standard object array. This is a
// lot faster to loop over.
VALUES = Arrays.asList(MATERIALS_ARRAY);
- if (!Loader.isModLoaded(MOD_ID_DC) && !GT_Mod.gregtechproxy.mEnableAllComponents)
+ if (!NewHorizonsCoreMod.isModLoaded() && !GT_Mod.gregtechproxy.mEnableAllComponents)
OrePrefixes.initMaterialComponents();
else {
OrePrefixes.ingotHot.mDisabledItems.addAll(
@@ -2442,7 +2442,7 @@ public class Materials implements IColorModulationContainer, ISubTagContainer {
: aMaterial == Diamond || aMaterial == Thaumium ? Wood
: aMaterial.contains(SubTag.BURNING) ? Blaze
: aMaterial.contains(SubTag.MAGICAL) && aMaterial.contains(SubTag.CRYSTAL)
- && Loader.isModLoaded(GT_Values.MOD_ID_TC) ? Thaumium
+ && Thaumcraft.isModLoaded() ? Thaumium
: aMaterial.getMass() > Element.Tc.getMass() * 2 ? TungstenSteel
: aMaterial.getMass() > Element.Tc.getMass() ? Steel : Wood);
diff --git a/src/main/java/gregtech/api/enums/ModIDs.java b/src/main/java/gregtech/api/enums/ModIDs.java
new file mode 100644
index 0000000000..16c03e3ae5
--- /dev/null
+++ b/src/main/java/gregtech/api/enums/ModIDs.java
@@ -0,0 +1,84 @@
+package gregtech.api.enums;
+
+import cpw.mods.fml.common.Loader;
+
+public enum ModIDs {
+
+ AdvancedSolarPanel("AdvancedSolarPanel"),
+ AE2FluidCraft("ae2fc"),
+ AppleCore("AppleCore"),
+ AppliedEnergistics2("appliedenergistics2"),
+ Avaritia("Avaritia"),
+ AvaritiaAddons("avaritiaddons"),
+ BartWorks("bartworks"),
+ BetterLoadingScreen("betterloadingscreen"),
+ BiomesOPlanty("BiomesOPlenty"),
+ BuildCraftFactory("BuildCraft|Factory"),
+ BuildCraftSilicon("BuildCraft|Silicon"),
+ BuildCraftTransport("BuildCraft|Transport"),
+ Computronics("computronics"),
+ CraftTweaker("MineTweaker3"),
+ EnderIO("EnderIO"),
+ EnderStorage("EnderStorage"),
+ EternalSingularity("eternalsingularity"),
+ ExtraCells2("extracells"),
+ ExtraUtilities("ExtraUtilities"),
+ ForbiddenMagic("ForbiddenMagic"),
+ Forestry("Forestry"),
+ GalacticraftCore("GalacticraftCore"),
+ GalacticraftMars("GalacticraftMars"),
+ GalaxySpace("GalaxySpace"),
+ Gendustry("gendustry"),
+ GoodGenerator("GoodGenerator"),
+ GregTech("gregtech"),
+ GraviSuite("GraviSuite"),
+ GTNHLanthanides("gtnhlanth"),
+ GTPlusPlus("miscutils"),
+ PamsHarvestCraft("harvestcraft"),
+ HardcoreEnderExpansion("HardcoreEnderExpansion"),
+ HodgePodge("hodgepodge"),
+ IC2CropPlugin("Ic2Nei"),
+ IC2NuclearControl("IC2NuclearControl"),
+ IguanaTweaksTinkerConstruct("IguanaTweaksTConstruct"),
+ IndustrialCraft2("IC2"),
+ IronChests("IronChest"),
+ IronTanks("irontank"),
+ Minecraft("minecraft"),
+ Natura("Natura"),
+ NEICustomDiagrams("neicustomdiagram"),
+ NewHorizonsCoreMod("dreamcraft"),
+ NotEnoughItems("NotEnoughItems"),
+ OpenComputers("OpenComputers"),
+ ProjectRedCore("ProjRed|Core"),
+ Railcraft("Railcraft"),
+ TaintedMagic("TaintedMagic"),
+ Thaumcraft("Thaumcraft"),
+ ThaumicBases("thaumicbases"),
+ ThaumicTinkerer("ThaumicTinkerer"),
+ TinkerConstruct("TConstruct"),
+ TinkersGregworks("TGregworks"),
+ Translocator("Translocator"),
+ TwilightForest("TwilightForest"),
+ Waila("Waila"),
+ // Do we keep compat of those?
+ IndustrialCraft2Classic("IC2-Classic-Spmod"),
+ Metallurgy("Metallurgy"),
+ RotaryCraft("RotaryCraft"),
+ ThermalExpansion("ThermalExpansion"),
+ ThermalFondation("ThermalFoundation"),
+ UndergroundBiomes("UndergroundBiomes");
+
+ public final String modID;
+ private Boolean modLoaded;
+
+ ModIDs(String modID) {
+ this.modID = modID;
+ }
+
+ public boolean isModLoaded() {
+ if (this.modLoaded == null) {
+ this.modLoaded = Loader.isModLoaded(modID);
+ }
+ return this.modLoaded;
+ }
+}
diff --git a/src/main/java/gregtech/api/enums/SoundResource.java b/src/main/java/gregtech/api/enums/SoundResource.java
index f1dffb3884..63a8331496 100644
--- a/src/main/java/gregtech/api/enums/SoundResource.java
+++ b/src/main/java/gregtech/api/enums/SoundResource.java
@@ -1,7 +1,7 @@
package gregtech.api.enums;
import static gregtech.api.enums.GT_Values.MOD_ID;
-import static gregtech.api.enums.GT_Values.MOD_ID_IC2;
+import static gregtech.api.enums.ModIDs.IndustrialCraft2;
import java.util.EnumSet;
import java.util.Locale;
@@ -30,31 +30,31 @@ public enum SoundResource {
RANDOM_EXPLODE(5, "random.explode"),
FIRE_IGNITE(6, "fire.ignite"),
- IC2_TOOLS_WRENCH(100, MOD_ID_IC2, "tools.Wrench"),
- IC2_TOOLS_RUBBER_TRAMPOLINE(101, MOD_ID_IC2, "tools.RubberTrampoline"),
- IC2_TOOLS_PAINTER(102, MOD_ID_IC2, "tools.Painter"),
- IC2_TOOLS_BATTERY_USE(103, MOD_ID_IC2, "tools.BatteryUse"),
- IC2_TOOLS_CHAINSAW_CHAINSAW_USE_ONE(104, MOD_ID_IC2, "tools.chainsaw.ChainsawUseOne"),
- IC2_TOOLS_CHAINSAW_CHAINSAW_USE_TWO(105, MOD_ID_IC2, "tools.chainsaw.ChainsawUseTwo"),
- IC2_TOOLS_DRILL_DRILL_SOFT(106, MOD_ID_IC2, "tools.drill.DrillSoft"),
- IC2_TOOLS_DRILL_DRILL_HARD(107, MOD_ID_IC2, "tools.drill.DrillHard"),
- IC2_TOOLS_OD_SCANNER(108, MOD_ID_IC2, "tools.ODScanner"),
- IC2_TOOLS_INSULATION_CUTTERS(109, MOD_ID_IC2, "tools.InsulationCutters"),
+ IC2_TOOLS_WRENCH(100, IndustrialCraft2.modID, "tools.Wrench"),
+ IC2_TOOLS_RUBBER_TRAMPOLINE(101, IndustrialCraft2.modID, "tools.RubberTrampoline"),
+ IC2_TOOLS_PAINTER(102, IndustrialCraft2.modID, "tools.Painter"),
+ IC2_TOOLS_BATTERY_USE(103, IndustrialCraft2.modID, "tools.BatteryUse"),
+ IC2_TOOLS_CHAINSAW_CHAINSAW_USE_ONE(104, IndustrialCraft2.modID, "tools.chainsaw.ChainsawUseOne"),
+ IC2_TOOLS_CHAINSAW_CHAINSAW_USE_TWO(105, IndustrialCraft2.modID, "tools.chainsaw.ChainsawUseTwo"),
+ IC2_TOOLS_DRILL_DRILL_SOFT(106, IndustrialCraft2.modID, "tools.drill.DrillSoft"),
+ IC2_TOOLS_DRILL_DRILL_HARD(107, IndustrialCraft2.modID, "tools.drill.DrillHard"),
+ IC2_TOOLS_OD_SCANNER(108, IndustrialCraft2.modID, "tools.ODScanner"),
+ IC2_TOOLS_INSULATION_CUTTERS(109, IndustrialCraft2.modID, "tools.InsulationCutters"),
- IC2_MACHINES_EXTRACTOR_OP(200, MOD_ID_IC2, "machines.ExtractorOp"),
- IC2_MACHINES_MACERATOR_OP(201, MOD_ID_IC2, "machines.MaceratorOp"),
- IC2_MACHINES_INDUCTION_LOOP(202, MOD_ID_IC2, "machines.InductionLoop"),
- IC2_MACHINES_COMPRESSOR_OP(203, MOD_ID_IC2, "machines.CompressorOp"),
- IC2_MACHINES_RECYCLER_OP(204, MOD_ID_IC2, "machines.RecyclerOp"),
- IC2_MACHINES_MINER_OP(205, MOD_ID_IC2, "machines.MinerOp"),
- IC2_MACHINES_PUMP_OP(206, MOD_ID_IC2, "machines.PumpOp"),
- IC2_MACHINES_ELECTROFURNACE_LOOP(207, MOD_ID_IC2, "machines.ElectroFurnaceLoop"),
+ IC2_MACHINES_EXTRACTOR_OP(200, IndustrialCraft2.modID, "machines.ExtractorOp"),
+ IC2_MACHINES_MACERATOR_OP(201, IndustrialCraft2.modID, "machines.MaceratorOp"),
+ IC2_MACHINES_INDUCTION_LOOP(202, IndustrialCraft2.modID, "machines.InductionLoop"),
+ IC2_MACHINES_COMPRESSOR_OP(203, IndustrialCraft2.modID, "machines.CompressorOp"),
+ IC2_MACHINES_RECYCLER_OP(204, IndustrialCraft2.modID, "machines.RecyclerOp"),
+ IC2_MACHINES_MINER_OP(205, IndustrialCraft2.modID, "machines.MinerOp"),
+ IC2_MACHINES_PUMP_OP(206, IndustrialCraft2.modID, "machines.PumpOp"),
+ IC2_MACHINES_ELECTROFURNACE_LOOP(207, IndustrialCraft2.modID, "machines.ElectroFurnaceLoop"),
@Deprecated
- DEPRECATED_DUPE_OF_IC2_MACHINES_INDUCTION_LOOP(208, MOD_ID_IC2, "machines.InductionLoop"),
- IC2_MACHINES_MACHINE_OVERLOAD(209, MOD_ID_IC2, "machines.MachineOverload"),
- IC2_MACHINES_INTERRUPT_ONE(210, MOD_ID_IC2, "machines.InterruptOne"),
- IC2_MACHINES_KA_CHING(211, MOD_ID_IC2, "machines.KaChing"),
- IC2_MACHINES_MAGNETIZER_LOOP(212, MOD_ID_IC2, "machines.MagnetizerLoop"),
+ DEPRECATED_DUPE_OF_IC2_MACHINES_INDUCTION_LOOP(208, IndustrialCraft2.modID, "machines.InductionLoop"),
+ IC2_MACHINES_MACHINE_OVERLOAD(209, IndustrialCraft2.modID, "machines.MachineOverload"),
+ IC2_MACHINES_INTERRUPT_ONE(210, IndustrialCraft2.modID, "machines.InterruptOne"),
+ IC2_MACHINES_KA_CHING(211, IndustrialCraft2.modID, "machines.KaChing"),
+ IC2_MACHINES_MAGNETIZER_LOOP(212, IndustrialCraft2.modID, "machines.MagnetizerLoop"),
GT_MACHINES_FUSION_LOOP(230, MOD_ID, "machines.FusionLoop"),
GT_MACHINES_DISTILLERY_LOOP(231, MOD_ID, "machines.DistilleryLoop"),
diff --git a/src/main/java/gregtech/api/interfaces/IGT_RecipeMap.java b/src/main/java/gregtech/api/interfaces/IGT_RecipeMap.java
new file mode 100644
index 0000000000..69f87161d1
--- /dev/null
+++ b/src/main/java/gregtech/api/interfaces/IGT_RecipeMap.java
@@ -0,0 +1,64 @@
+package gregtech.api.interfaces;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.function.Function;
+
+import javax.annotation.Nonnull;
+
+import gregtech.api.util.GT_Recipe;
+import gregtech.api.util.GT_RecipeBuilder;
+import gregtech.api.util.GT_Utility;
+
+/**
+ * Represents the target of a recipe adding action, usually, but not necessarily, is a recipe map itself.
+ */
+public interface IGT_RecipeMap {
+
+ /**
+ * Add a downstream recipe map that will get to handle the original builder.
+ *
+ * @param downstream
+ */
+ void addDownstream(IGT_RecipeMap downstream);
+
+ /**
+ * Actually add the recipe represented by the builder. CAN modify the builder's internal states!!!
+ */
+ @Nonnull
+ Collection<GT_Recipe> doAdd(GT_RecipeBuilder builder);
+
+ /**
+ * Return a variant of this recipe map that will perform a deep copy on input recipe builder before doing anything
+ * to it.
+ *
+ * The returned recipe map will not have any downstreams, but can accept new downstreams.
+ */
+ default IGT_RecipeMap deepCopyInput() {
+ return newRecipeMap(b -> doAdd(b.copy()));
+ }
+
+ static IGT_RecipeMap newRecipeMap(Function<? super GT_RecipeBuilder, Collection<GT_Recipe>> func) {
+ return new IGT_RecipeMap() {
+
+ private final Collection<IGT_RecipeMap> downstreams = new ArrayList<>();
+
+ @Override
+ public void addDownstream(IGT_RecipeMap downstream) {
+ downstreams.add(downstream);
+ }
+
+ @Nonnull
+ @Override
+ public Collection<GT_Recipe> doAdd(GT_RecipeBuilder builder) {
+ List<Collection<GT_Recipe>> ret = new ArrayList<>();
+ ret.add(func.apply(builder));
+ for (IGT_RecipeMap downstream : downstreams) {
+ ret.add(downstream.doAdd(builder));
+ }
+ return GT_Utility.concat(ret);
+ }
+ };
+ }
+}
diff --git a/src/main/java/gregtech/api/interfaces/internal/IGT_RecipeAdder.java b/src/main/java/gregtech/api/interfaces/internal/IGT_RecipeAdder.java
index bda2523811..149600b426 100644
--- a/src/main/java/gregtech/api/interfaces/internal/IGT_RecipeAdder.java
+++ b/src/main/java/gregtech/api/interfaces/internal/IGT_RecipeAdder.java
@@ -5,6 +5,7 @@ import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidStack;
import gregtech.api.util.GT_Recipe;
+import gregtech.api.util.GT_RecipeBuilder;
public interface IGT_RecipeAdder {
@@ -960,4 +961,6 @@ public interface IGT_RecipeAdder {
*/
GT_Recipe addIC2ReactorFuelCell(ItemStack input, ItemStack output, boolean aMox, float aHeat, float aEnergy,
int aCells);
+
+ GT_RecipeBuilder stdBuilder();
}
diff --git a/src/main/java/gregtech/api/items/GT_MetaGenerated_Item.java b/src/main/java/gregtech/api/items/GT_MetaGenerated_Item.java
index 32a46c8641..b6ea08213b 100644
--- a/src/main/java/gregtech/api/items/GT_MetaGenerated_Item.java
+++ b/src/main/java/gregtech/api/items/GT_MetaGenerated_Item.java
@@ -1,6 +1,7 @@
package gregtech.api.items;
import static gregtech.api.enums.GT_Values.*;
+import static gregtech.api.enums.ModIDs.AppleCore;
import java.util.ArrayList;
import java.util.Arrays;
@@ -20,7 +21,6 @@ import net.minecraft.world.World;
import squeek.applecore.api.food.FoodValues;
import squeek.applecore.api.food.IEdible;
-import cpw.mods.fml.common.Loader;
import cpw.mods.fml.common.Optional;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
@@ -321,7 +321,7 @@ public abstract class GT_MetaGenerated_Item extends GT_MetaBase_Item implements
public final ItemStack onEaten(ItemStack aStack, World aWorld, EntityPlayer aPlayer) {
IFoodStat tStat = mFoodStats.get((short) getDamage(aStack));
if (tStat != null) {
- if (Loader.isModLoaded(MOD_ID_APC)) {
+ if (AppleCore.isModLoaded()) {
aPlayer.getFoodStats().func_151686_a(
(ItemFood) GT_Utility.callConstructor(
"squeek.applecore.api.food.ItemFoodProxy.ItemFoodProxy",
diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Cable.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Cable.java
index 1ea2e3e756..e2e0b13f12 100644
--- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Cable.java
+++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Cable.java
@@ -1,6 +1,7 @@
package gregtech.api.metatileentity.implementations;
import static gregtech.api.enums.GT_Values.ALL_VALID_SIDES;
+import static gregtech.api.enums.ModIDs.GalacticraftCore;
import java.util.ArrayList;
import java.util.HashSet;
@@ -19,13 +20,9 @@ import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
import cofh.api.energy.IEnergyReceiver;
-import cpw.mods.fml.common.Loader;
import gregtech.GT_Mod;
import gregtech.api.GregTech_API;
-import gregtech.api.enums.Dyes;
-import gregtech.api.enums.Materials;
-import gregtech.api.enums.TextureSet;
-import gregtech.api.enums.Textures;
+import gregtech.api.enums.*;
import gregtech.api.graphs.Node;
import gregtech.api.graphs.NodeList;
import gregtech.api.graphs.PowerNode;
@@ -348,7 +345,7 @@ public class GT_MetaPipeEntity_Cable extends MetaPipeEntity implements IMetaTile
// ((tIsGregTechTileEntity && tIsTileEntityCable) && (tAlwaysLookConnected || tLetEnergyIn || tLetEnergyOut) )
// --> Not needed
- if (Loader.isModLoaded("GalacticraftCore") && GT_GC_Compat.canConnect(tTileEntity, tDir)) return true;
+ if (GalacticraftCore.isModLoaded() && GT_GC_Compat.canConnect(tTileEntity, tDir)) return true;
// AE2-p2p Compat
if (GT_Mod.gregtechproxy.mAE2Integration) {
diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine_GT_Recipe.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine_GT_Recipe.java
index 7976ea94c6..e51da3bbdc 100644
--- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine_GT_Recipe.java
+++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine_GT_Recipe.java
@@ -4,6 +4,7 @@ import static gregtech.api.enums.GT_Values.V;
import static gregtech.api.enums.GT_Values.VN;
import static gregtech.api.enums.GT_Values.W;
import static gregtech.api.enums.GT_Values.ticksBetweenSounds;
+import static gregtech.api.enums.ModIDs.BartWorks;
import static gregtech.api.objects.XSTR.XSTR_INSTANCE;
import java.util.Locale;
@@ -23,7 +24,6 @@ import com.gtnewhorizons.modularui.api.math.Pos2d;
import com.gtnewhorizons.modularui.api.math.Size;
import com.gtnewhorizons.modularui.common.widget.ProgressBar;
-import cpw.mods.fml.common.Loader;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import gregtech.api.enums.*;
@@ -206,12 +206,12 @@ public class GT_MetaTileEntity_BasicMachine_GT_Recipe extends GT_MetaTileEntity_
case 6:
case 7:
case 8:
- if (Loader.isModLoaded("bartworks")) { // todo remove via provider pattern on all enums?
+ if (BartWorks.isModLoaded()) { // todo remove via provider pattern on all enums?
aRecipe[i] = "blockGlass" + VN[aTier];
break;
}
default:
- if (Loader.isModLoaded("bartworks")) { // todo remove via provider pattern on all enums?
+ if (BartWorks.isModLoaded()) { // todo remove via provider pattern on all enums?
aRecipe[i] = "blockGlass" + VN[8];
} else {
aRecipe[i] = Ic2Items.reinforcedGlass;
diff --git a/src/main/java/gregtech/api/util/GT_BaseCrop.java b/src/main/java/gregtech/api/util/GT_BaseCrop.java
index 65d2900176..bfffbe8572 100644
--- a/src/main/java/gregtech/api/util/GT_BaseCrop.java
+++ b/src/main/java/gregtech/api/util/GT_BaseCrop.java
@@ -1,6 +1,7 @@
package gregtech.api.util;
import static gregtech.api.enums.GT_Values.E;
+import static gregtech.api.enums.ModIDs.IC2CropPlugin;
import java.util.ArrayList;
import java.util.List;
@@ -12,7 +13,6 @@ import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import speiger.src.crops.api.ICropCardInfo;
-import cpw.mods.fml.common.Loader;
import gregtech.GT_Mod;
import gregtech.api.GregTech_API;
import gregtech.api.enums.ConfigCategories;
@@ -33,7 +33,7 @@ public class GT_BaseCrop extends CropCard implements ICropCardInfo {
mGrowthSpeed = 0;
private ItemStack mDrop = null, mSpecialDrops[] = null;
private Materials mBlock = null;
- private static boolean bIc2NeiLoaded = Loader.isModLoaded("Ic2Nei");
+ private static boolean bIc2NeiLoaded = IC2CropPlugin.isModLoaded();
/**
* To create new Crops
diff --git a/src/main/java/gregtech/api/util/GT_ModReference.java b/src/main/java/gregtech/api/util/GT_ModReference.java
new file mode 100644
index 0000000000..02a1116f68
--- /dev/null
+++ b/src/main/java/gregtech/api/util/GT_ModReference.java
@@ -0,0 +1,29 @@
+package gregtech.api.util;
+
+import static gregtech.api.enums.ModIDs.GTPlusPlus;
+import static gregtech.api.enums.ModIDs.Railcraft;
+
+import cpw.mods.fml.common.Loader;
+
+@Deprecated // use gregtech.api.enums.ModIDs instead
+public enum GT_ModReference {
+
+ RAILCRAFT(Railcraft.modID),
+ GTPP(GTPlusPlus.modID),;
+
+ private final boolean loaded;
+ private final String modID;
+
+ GT_ModReference(String modID) {
+ loaded = Loader.isModLoaded(modID);
+ this.modID = modID;
+ }
+
+ public boolean isLoaded() {
+ return loaded;
+ }
+
+ public String getModID() {
+ return modID;
+ }
+}
diff --git a/src/main/java/gregtech/api/util/GT_Recipe.java b/src/main/java/gregtech/api/util/GT_Recipe.java
index 3b7f64aae8..e7443a63b5 100644
--- a/src/main/java/gregtech/api/util/GT_Recipe.java
+++ b/src/main/java/gregtech/api/util/GT_Recipe.java
@@ -1,7 +1,14 @@
package gregtech.api.util;
import static gregtech.api.enums.GT_Values.*;
+import static gregtech.api.enums.ModIDs.GTPlusPlus;
+import static gregtech.api.enums.ModIDs.NEICustomDiagrams;
+import static gregtech.api.enums.ModIDs.Railcraft;
+import static gregtech.api.util.GT_RecipeConstants.ADDITIVE_AMOUNT;
+import static gregtech.api.util.GT_RecipeMapUtil.*;
import static gregtech.api.util.GT_Utility.formatNumbers;
+import static gregtech.api.util.GT_Utility.isArrayEmptyOrNull;
+import static gregtech.api.util.GT_Utility.isArrayOfLength;
import static net.minecraft.util.EnumChatFormatting.GRAY;
import static net.minecraft.util.StatCollector.translateToLocal;
@@ -9,10 +16,15 @@ import java.awt.*;
import java.util.*;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
+import java.util.function.Consumer;
+import java.util.function.Function;
import java.util.function.Supplier;
import javax.annotation.Nullable;
+import mods.railcraft.common.blocks.aesthetics.cube.EnumCube;
+import mods.railcraft.common.items.RailcraftToolItems;
+
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.FontRenderer;
import net.minecraft.init.Blocks;
@@ -27,6 +39,8 @@ import net.minecraftforge.fluids.FluidContainerRegistry;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.IFluidContainerItem;
+import org.apache.commons.lang3.ArrayUtils;
+import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.tuple.ImmutablePair;
import org.apache.commons.lang3.tuple.Pair;
@@ -34,6 +48,7 @@ import appeng.util.ReadableNumberConverter;
import codechicken.lib.gui.GuiDraw;
import codechicken.nei.PositionedStack;
+import com.google.common.collect.Iterables;
import com.gtnewhorizons.modularui.api.GlStateManager;
import com.gtnewhorizons.modularui.api.ModularUITextures;
import com.gtnewhorizons.modularui.api.drawable.FallbackableUITexture;
@@ -60,6 +75,7 @@ import gregtech.api.gui.GT_GUIColorOverride;
import gregtech.api.gui.modularui.FallbackableSteamTexture;
import gregtech.api.gui.modularui.GT_UITextures;
import gregtech.api.gui.modularui.SteamTexture;
+import gregtech.api.interfaces.IGT_RecipeMap;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.interfaces.tileentity.IHasWorldObjectAndCoords;
import gregtech.api.objects.GT_FluidStack;
@@ -155,13 +171,13 @@ public class GT_Recipe implements Comparable<GT_Recipe> {
*/
public List<List<StackTraceElement>> stackTraces = new ArrayList<>();
- private GT_Recipe(GT_Recipe aRecipe) {
- mInputs = GT_Utility.copyStackArray((Object[]) aRecipe.mInputs);
- mOutputs = GT_Utility.copyStackArray((Object[]) aRecipe.mOutputs);
+ private GT_Recipe(GT_Recipe aRecipe, boolean shallow) {
+ mInputs = shallow ? aRecipe.mInputs : GT_Utility.copyStackArray((Object[]) aRecipe.mInputs);
+ mOutputs = shallow ? aRecipe.mOutputs : GT_Utility.copyStackArray((Object[]) aRecipe.mOutputs);
mSpecialItems = aRecipe.mSpecialItems;
mChances = aRecipe.mChances;
- mFluidInputs = GT_Utility.copyFluidArray(aRecipe.mFluidInputs);
- mFluidOutputs = GT_Utility.copyFluidArray(aRecipe.mFluidOutputs);
+ mFluidInputs = shallow ? aRecipe.mFluidInputs : GT_Utility.copyFluidArray(aRecipe.mFluidInputs);
+ mFluidOutputs = shallow ? aRecipe.mFluidOutputs : GT_Utility.copyFluidArray(aRecipe.mFluidOutputs);
mDuration = aRecipe.mDuration;
mSpecialValue = aRecipe.mSpecialValue;
mEUt = aRecipe.mEUt;
@@ -174,6 +190,29 @@ public class GT_Recipe implements Comparable<GT_Recipe> {
reloadOwner();
}
+ // only used for GT_RecipeBuilder. Should not be called otherwise
+ GT_Recipe(ItemStack[] mInputs, ItemStack[] mOutputs, FluidStack[] mFluidInputs, FluidStack[] mFluidOutputs,
+ int[] mChances, Object mSpecialItems, int mDuration, int mEUt, int mSpecialValue, boolean mEnabled,
+ boolean mHidden, boolean mFakeRecipe, boolean mCanBeBuffered, boolean mNeedsEmptyOutput, String[] neiDesc) {
+ this.mInputs = mInputs;
+ this.mOutputs = mOutputs;
+ this.mFluidInputs = mFluidInputs;
+ this.mFluidOutputs = mFluidOutputs;
+ this.mChances = mChances;
+ this.mSpecialItems = mSpecialItems;
+ this.mDuration = mDuration;
+ this.mEUt = mEUt;
+ this.mSpecialValue = mSpecialValue;
+ this.mEnabled = mEnabled;
+ this.mHidden = mHidden;
+ this.mFakeRecipe = mFakeRecipe;
+ this.mCanBeBuffered = mCanBeBuffered;
+ this.mNeedsEmptyOutput = mNeedsEmptyOutput;
+ this.neiDesc = neiDesc;
+
+ reloadOwner();
+ }
+
public GT_Recipe(boolean aOptimize, ItemStack[] aInputs, ItemStack[] aOutputs, Object aSpecialItems, int[] aChances,
FluidStack[] aFluidInputs, FluidStack[] aFluidOutputs, int aDuration, int aEUt, int aSpecialValue) {
if (aInputs == null) aInputs = new ItemStack[0];
@@ -556,7 +595,11 @@ public class GT_Recipe implements Comparable<GT_Recipe> {
}
public GT_Recipe copy() {
- return new GT_Recipe(this);
+ return new GT_Recipe(this, false);
+ }
+
+ public GT_Recipe copyShallow() {
+ return new GT_Recipe(this, true);
}
public boolean isRecipeInputEqual(boolean aDecreaseStacksizeBySuccess, FluidStack[] aFluidInputs,
@@ -768,6 +811,7 @@ public class GT_Recipe implements Comparable<GT_Recipe> {
final List<String> excludedClasses = Arrays.asList(
"java.lang.Thread",
"gregtech.api.util.GT_Recipe",
+ "gregtech.api.util.GT_RecipeBuilder",
"gregtech.api.util.GT_Recipe$GT_Recipe_Map",
"gregtech.common.GT_RecipeAdder");
if (GT_Mod.gregtechproxy.mNEIRecipeOwnerStackTrace) {
@@ -800,6 +844,37 @@ public class GT_Recipe implements Comparable<GT_Recipe> {
}
}
+ public GT_Recipe setInputs(ItemStack... aInputs) {
+ // TODO determine if we need this without trailing nulls call
+ this.mInputs = ArrayExt.withoutTrailingNulls(aInputs, ItemStack[]::new);
+ return this;
+ }
+
+ public GT_Recipe setOutputs(ItemStack... aOutputs) {
+ this.mOutputs = ArrayExt.withoutTrailingNulls(aOutputs, ItemStack[]::new);
+ return this;
+ }
+
+ public GT_Recipe setFluidInputs(FluidStack... aInputs) {
+ this.mFluidInputs = ArrayExt.withoutTrailingNulls(aInputs, FluidStack[]::new);
+ return this;
+ }
+
+ public GT_Recipe setFluidOutputs(FluidStack... aOutputs) {
+ this.mFluidOutputs = ArrayExt.withoutTrailingNulls(aOutputs, FluidStack[]::new);
+ return this;
+ }
+
+ public GT_Recipe setDuration(int aDuration) {
+ this.mDuration = aDuration;
+ return this;
+ }
+
+ public GT_Recipe setEUt(int aEUt) {
+ this.mEUt = aEUt;
+ return this;
+ }
+
public static class GT_Recipe_AssemblyLine {
public static final ArrayList<GT_Recipe_AssemblyLine> sAssemblylineRecipes = new ArrayList<GT_Recipe_AssemblyLine>();
@@ -992,7 +1067,7 @@ public class GT_Recipe implements Comparable<GT_Recipe> {
}
@SuppressWarnings("StaticInitializerReferencesSubClass")
- public static class GT_Recipe_Map {
+ public static class GT_Recipe_Map implements IGT_RecipeMap {
/**
* Contains all Recipe Maps
@@ -1020,6 +1095,7 @@ public class GT_Recipe implements Comparable<GT_Recipe> {
true,
true).setSlotOverlay(false, false, GT_UITextures.OVERLAY_SLOT_CRUSHED_ORE)
.setSlotOverlay(false, true, GT_UITextures.OVERLAY_SLOT_DUST)
+ .setRecipeConfigFile("orewasher", FIRST_ITEM_INPUT)
.setProgressBar(GT_UITextures.PROGRESSBAR_BATH, ProgressBar.Direction.CIRCULAR_CW);
public static final GT_Recipe_Map sThermalCentrifugeRecipes = new GT_Recipe_Map(
new HashSet<>(1000),
@@ -1038,6 +1114,7 @@ public class GT_Recipe implements Comparable<GT_Recipe> {
true,
true).setSlotOverlay(false, false, GT_UITextures.OVERLAY_SLOT_CRUSHED_ORE)
.setSlotOverlay(false, true, GT_UITextures.OVERLAY_SLOT_DUST)
+ .setRecipeConfigFile("thermalcentrifuge", FIRST_ITEM_INPUT)
.setProgressBar(GT_UITextures.PROGRESSBAR_ARROW, ProgressBar.Direction.RIGHT);
public static final GT_Recipe_Map sCompressorRecipes = new GT_Recipe_Map(
new HashSet<>(750),
@@ -1055,6 +1132,7 @@ public class GT_Recipe implements Comparable<GT_Recipe> {
E,
true,
true).setSlotOverlay(false, false, GT_UITextures.OVERLAY_SLOT_COMPRESSOR)
+ .setRecipeConfigFile("compressor", FIRST_ITEM_INPUT)
.setProgressBar(GT_UITextures.PROGRESSBAR_COMPRESS, ProgressBar.Direction.RIGHT)
.setSlotOverlaySteam(false, GT_UITextures.OVERLAY_SLOT_COMPRESSOR_STEAM)
.setProgressBarSteam(GT_UITextures.PROGRESSBAR_COMPRESS_STEAM);
@@ -1074,6 +1152,7 @@ public class GT_Recipe implements Comparable<GT_Recipe> {
E,
true,
true).setSlotOverlay(false, false, GT_UITextures.OVERLAY_SLOT_CENTRIFUGE)
+ .setRecipeConfigFile("extractor", FIRST_ITEM_INPUT)
.setProgressBar(GT_UITextures.PROGRESSBAR_EXTRACT, ProgressBar.Direction.RIGHT)
.setSlotOverlaySteam(false, GT_UITextures.OVERLAY_SLOT_CENTRIFUGE_STEAM)
.setProgressBarSteam(GT_UITextures.PROGRESSBAR_EXTRACT_STEAM);
@@ -1257,7 +1336,7 @@ public class GT_Recipe implements Comparable<GT_Recipe> {
E,
true,
true).setSlotOverlay(false, false, true, true, GT_UITextures.OVERLAY_SLOT_DATA_ORB)
- .setUsualFluidInputCount(4);
+ .setUsualFluidInputCount(4).setDisableOptimize(true);
public static final GT_Recipe_Map sPlasmaArcFurnaceRecipes = new GT_Recipe_Map(
new HashSet<>(20000),
"gt.recipe.plasmaarcfurnace",
@@ -1273,7 +1352,8 @@ public class GT_Recipe implements Comparable<GT_Recipe> {
1,
E,
true,
- true).setProgressBar(GT_UITextures.PROGRESSBAR_ARROW, ProgressBar.Direction.RIGHT);
+ true).setP