diff options
Diffstat (limited to 'src/main/java/gregtech/api')
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 |
