diff options
author | Draknyte1 <Draknyte1@hotmail.com> | 2016-06-30 02:39:21 +1000 |
---|---|---|
committer | Draknyte1 <Draknyte1@hotmail.com> | 2016-06-30 02:39:21 +1000 |
commit | 3304d37df6a306fa0b554ee25e99c78115b46c2b (patch) | |
tree | c9c719e35af7b8928d66eef5b057530ee43b0ec5 /src/Java/miscutil | |
parent | 240149f91145e7427ee5f84260419255f435d9aa (diff) | |
download | GT5-Unofficial-3304d37df6a306fa0b554ee25e99c78115b46c2b.tar.gz GT5-Unofficial-3304d37df6a306fa0b554ee25e99c78115b46c2b.tar.bz2 GT5-Unofficial-3304d37df6a306fa0b554ee25e99c78115b46c2b.zip |
+Attempted to add Ingot/Plate/Block processing chains for my own Materials.
Diffstat (limited to 'src/Java/miscutil')
12 files changed, 1028 insertions, 144 deletions
diff --git a/src/Java/miscutil/core/intermod/thermalfoundation/recipe/TF_Gregtech_Recipes.java b/src/Java/miscutil/core/intermod/thermalfoundation/recipe/TF_Gregtech_Recipes.java index 527c9e947d..deb513d770 100644 --- a/src/Java/miscutil/core/intermod/thermalfoundation/recipe/TF_Gregtech_Recipes.java +++ b/src/Java/miscutil/core/intermod/thermalfoundation/recipe/TF_Gregtech_Recipes.java @@ -29,7 +29,7 @@ public class TF_Gregtech_Recipes { //Gelid Cryotheum Utils.LOG_INFO("Adding Recipes for Gelid Cryotheum"); - GT_Values.RA.addFluidExtractionRecipe(dust_Cryotheum, GT_Values.NI, getFluidStack("cryotheum", 250), 10000, 32, 2); + GT_Values.RA.addFluidExtractionRecipe(dust_Cryotheum, GT_Values.NI, getFluidStack("cryotheum", 250), 10000, 240, 2); GT_Values.RA.addChemicalBathRecipe((GT_OreDictUnificator.get(OrePrefixes.ore, Materials.Cinnabar, 1L)), getFluidStack("cryotheum", 200), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Cinnabar, 2L), GT_Values.NI, GT_Values.NI, null, 400, 2); //Blizz Powder @@ -43,7 +43,7 @@ public class TF_Gregtech_Recipes { //Blazing Pyrotheum Utils.LOG_INFO("Adding Recipes for Blazing Pyrotheum"); - GT_Values.RA.addFluidExtractionRecipe(dust_Pyrotheum, GT_Values.NI, getFluidStack("pyrotheum", 250), 10000, 32, 2); + GT_Values.RA.addFluidExtractionRecipe(dust_Pyrotheum, GT_Values.NI, getFluidStack("pyrotheum", 250), 10000, 240, 2); } diff --git a/src/Java/miscutil/gregtech/HANDLER_Gregtech.java b/src/Java/miscutil/gregtech/HANDLER_Gregtech.java index f0793d63fd..3fdb5aab63 100644 --- a/src/Java/miscutil/gregtech/HANDLER_Gregtech.java +++ b/src/Java/miscutil/gregtech/HANDLER_Gregtech.java @@ -3,6 +3,9 @@ package miscutil.gregtech; import gregtech.api.util.GT_Config; import miscutil.gregtech.api.enums.GregtechOrePrefixes.GT_Materials; import miscutil.gregtech.common.blocks.fluid.GregtechFluidHandler; +import miscutil.gregtech.loaders.Processing_Block; +import miscutil.gregtech.loaders.Processing_Ingot1; +import miscutil.gregtech.loaders.Processing_Plate1; public class HANDLER_Gregtech { @@ -12,7 +15,11 @@ public class HANDLER_Gregtech { if (mMaterialProperties != null){ GT_Materials.init(mMaterialProperties); GregtechFluidHandler.run(); - } + new Processing_Ingot1(); + new Processing_Plate1(); + new Processing_Block(); + } + } public static void init(){ diff --git a/src/Java/miscutil/gregtech/api/enums/GregtechOrePrefixes.java b/src/Java/miscutil/gregtech/api/enums/GregtechOrePrefixes.java index c3fd890a63..89f1b46e52 100644 --- a/src/Java/miscutil/gregtech/api/enums/GregtechOrePrefixes.java +++ b/src/Java/miscutil/gregtech/api/enums/GregtechOrePrefixes.java @@ -1,5 +1,6 @@ package miscutil.gregtech.api.enums; +import static gregtech.api.enums.GT_Values.B; import static gregtech.api.enums.GT_Values.D2; import static gregtech.api.enums.GT_Values.M; import gregtech.api.enums.ConfigCategories; @@ -28,6 +29,7 @@ import java.util.List; import miscutil.core.lib.CORE; import miscutil.gregtech.api.interfaces.internal.Interface_OreRecipeRegistrator; import miscutil.gregtech.api.objects.GregtechItemData; +import miscutil.gregtech.api.objects.GregtechMaterialStack; import net.minecraft.enchantment.Enchantment; import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.Fluid; @@ -47,6 +49,25 @@ public enum GregtechOrePrefixes { * Ultimate (Tier 8) : Data Orb and Lapotronic Energy Orb * Infinite (Cheaty) */ + + ingot("Ingots", "", " Ingot", true, true, false, false, false, false, false, true, false, false, B[1], M * 1, 64, 11), // A regular Ingot. Introduced by Eloraam + dustTiny("Tiny Dusts", "Tiny Pile of ", " Dust", true, true, false, false, false, false, false, true, false, false, B[0] | B[1] | B[2] | B[3], M / 9, 64, 0), // 1/9th of a Dust. + dustSmall("Small Dusts", "Small Pile of ", " Dust", true, true, false, false, false, false, false, true, false, false, B[0] | B[1] | B[2] | B[3], M / 4, 64, 1), // 1/4th of a Dust. + dustImpure("Impure Dusts", "Impure Pile of ", " Dust", true, true, false, false, false, false, false, true, false, true, B[3], M * 1, 64, 3), // Dust with impurities. 1 Unit of Main Material and 1/9 - 1/4 Unit of secondary Material + dustRefined("Refined Dusts", "Refined Pile of ", " Dust", true, true, false, false, false, false, false, true, false, true, B[3], M * 1, 64, 2), + dustPure("Purified Dusts", "Purified Pile of ", " Dust", true, true, false, false, false, false, false, true, false, true, B[3], M * 1, 64, 4), + dust("Dusts", "", " Dust", true, true, false, false, false, false, false, true, false, false, B[0] | B[1] | B[2] | B[3], M * 1, 64, 2), // Pure Dust worth of one Ingot or Gem. Introduced by Alblaka. + nugget("Nuggets", "", " Nugget", true, true, false, false, false, false, false, true, false, false, B[1], M / 9, 64, 9), // A Nugget. Introduced by Eloraam + plate("Plates", "", " Plate", true, true, false, false, false, false, true, true, false, false, B[1] | B[2], M * 1, 64, 17), // Regular Plate made of one Ingot/Dust. Introduced by Calclavia + block("Storage Blocks", "Block of ", "", true, true, false, false, false, true, true, false, false, false, 0, M * 9, 64, 71), // Storage Block consisting out of 9 Ingots/Gems/Dusts. Introduced by CovertJaguar + gem("Gemstones", "", "", true, true, true, false, false, false, true, true, false, false, B[2], M * 1, 64, 8), // A regular Gem worth one Dust. Introduced by Eloraam + gemChipped("Chipped Gemstones", "Chipped ", "", true, true, true, false, false, false, true, true, false, false, B[2], M / 4, 64, 59), // A regular Gem worth one small Dust. Introduced by TerraFirmaCraft + gemFlawed("Flawed Gemstones", "Flawed ", "", true, true, true, false, false, false, true, true, false, false, B[2], M / 2, 64, 60), // A regular Gem worth two small Dusts. Introduced by TerraFirmaCraft + gemFlawless("Flawless Gemstones", "Flawless ", "", true, true, true, false, false, false, true, true, false, false, B[2], M * 2, 32, 61), // A regular Gem worth two Dusts. Introduced by TerraFirmaCraft + gemExquisite("Exquisite Gemstones", "Exquisite ", "", true, true, true, false, false, false, true, true, false, false, B[2], M * 4, 16, 62), // A regular Gem worth four Dusts. Introduced by TerraFirmaCraft + stick("Sticks/Rods", "", " Rod", true, true, false, false, false, false, true, true, false, false, B[1] | B[2], M / 2, 64, 23), // Stick made of half an Ingot. Introduced by Eloraam + + batterySingleuse("Single Use Batteries", "", "", false, true, false, false, false, false, false, false, false, false, 0, -1, 64, -1), battery("Reusable Batteries", "", "", false, true, false, false, false, false, false, false, false, false, 0, -1, 64, -1), // Introduced by Calclavia circuit("Circuits", "", "", true, true, false, false, false, false, false, false, false, false, 0, -1, 64, -1), // Introduced by Calclavia @@ -73,7 +94,7 @@ public enum GregtechOrePrefixes { public ItemStack mContainerItem = null; public ICondition<ISubTagContainer> mCondition = null; public byte mDefaultStackSize = 64; - public MaterialStack mSecondaryMaterial = null; + public GregtechMaterialStack mSecondaryMaterial = null; public GregtechOrePrefixes mPrefixInto = this; public float mHeatDamage = 0.0F; // Negative for Frost Damage /** @@ -210,7 +231,7 @@ public enum GregtechOrePrefixes { return true; } - public boolean isIgnored(Materials aMaterial) { + public boolean isIgnored(GT_Materials aMaterial) { if (aMaterial != null && (!aMaterial.mUnificatable || aMaterial != aMaterial.mMaterialInto)) return true; return mIgnoredMaterials.contains(aMaterial); } @@ -225,8 +246,8 @@ public enum GregtechOrePrefixes { return mOreProcessing.add(aRegistrator); } - public void processOre(Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack) { - if (aMaterial != null && (aMaterial != Materials._NULL || mIsSelfReferencing || !mIsMaterialBased) && GT_Utility.isStackValid(aStack)) + public void processOre(GT_Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack) { + if (aMaterial != null && (aMaterial != GT_Materials._NULL || mIsSelfReferencing || !mIsMaterialBased) && GT_Utility.isStackValid(aStack)) for (Interface_OreRecipeRegistrator tRegistrator : mOreProcessing) { if (D2) GT_Log.ore.println("Processing '" + aOreDictName + "' with the Prefix '" + name() + "' and the Material '" + aMaterial.name() + "' at " + GT_Utility.getClassName(tRegistrator)); @@ -235,11 +256,10 @@ public enum GregtechOrePrefixes { } public Object get(Object aMaterial) { - if (aMaterial instanceof Materials) return new GregtechItemData(this, (Materials) aMaterial); + if (aMaterial instanceof GT_Materials) return new GregtechItemData(this, (GT_Materials) aMaterial); return name() + aMaterial; } - @SuppressWarnings("incomplete-switch") public String getDefaultLocalNameForItem(Materials aMaterial) { @@ -255,13 +275,13 @@ public enum GregtechOrePrefixes { * This is the Default Material returned in case no Material has been found or a NullPointer has been inserted at a location where it shouldn't happen. * <p/> * Mainly for preventing NullPointer Exceptions and providing Default Values. - * + * * Unknown Material Components. Dead End Section. * * Alkalus Range 730-799 & 970-998 * (aMetaItemSubID, TextureSet, aToolSpeed, aToolDurability, aToolQuality, aTypes, R, G, B, Alpha, aLocalName, * aFuelType, aFuelPower, aMeltingPoint, aBlastFurnaceTemp, aBlastFurnaceRequired, aTransparent, aOreValue, aDensityMultiplier, aDensityDivider, aColor - * this(aMetaItemSubID, aIconSet, aToolSpeed, aToolDurability, aToolQuality, true); + * this(aMetaItemSubID, aIconSet, aToolSpeed, aToolDurability, aToolQuality, true); * */ _NULL(-1, TextureSet.SET_NONE, 1.0F, 0, 0, 0, 255, 255, 255, 0, "NULL", 0, 0, 0, 0, false, false, 1, 1, 1, Dyes._NULL, Element._NULL, Arrays.asList(new TC_AspectStack(TC_Aspects.VACUOS, 1))), diff --git a/src/Java/miscutil/gregtech/api/interfaces/internal/Interface_OreRecipeRegistrator.java b/src/Java/miscutil/gregtech/api/interfaces/internal/Interface_OreRecipeRegistrator.java index 83a7a1d1fc..4c80bd1cd6 100644 --- a/src/Java/miscutil/gregtech/api/interfaces/internal/Interface_OreRecipeRegistrator.java +++ b/src/Java/miscutil/gregtech/api/interfaces/internal/Interface_OreRecipeRegistrator.java @@ -1,7 +1,7 @@ package miscutil.gregtech.api.interfaces.internal; -import gregtech.api.enums.Materials; import miscutil.gregtech.api.enums.GregtechOrePrefixes; +import miscutil.gregtech.api.enums.GregtechOrePrefixes.GT_Materials; import net.minecraft.item.ItemStack; public interface Interface_OreRecipeRegistrator { @@ -12,5 +12,5 @@ public interface Interface_OreRecipeRegistrator { * @param aMaterial always != null, and can be == _NULL if the Prefix is Self Referencing or not Material based! * @param aStack always != null */ - public void registerOre(GregtechOrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack); + public void registerOre(GregtechOrePrefixes aPrefix, GT_Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack); }
\ No newline at end of file diff --git a/src/Java/miscutil/gregtech/api/interfaces/internal/Interface_OreRecipeRegistrator_GT.java b/src/Java/miscutil/gregtech/api/interfaces/internal/Interface_OreRecipeRegistrator_GT.java new file mode 100644 index 0000000000..468c690ccf --- /dev/null +++ b/src/Java/miscutil/gregtech/api/interfaces/internal/Interface_OreRecipeRegistrator_GT.java @@ -0,0 +1,16 @@ +package miscutil.gregtech.api.interfaces.internal; + +import gregtech.api.enums.OrePrefixes; +import miscutil.gregtech.api.enums.GregtechOrePrefixes.GT_Materials; +import net.minecraft.item.ItemStack; + +public interface Interface_OreRecipeRegistrator_GT { + /** + * Contains a Code Fragment, used in the OrePrefix to register Recipes. Better than using a switch/case, like I did before. + * + * @param aPrefix always != null + * @param aMaterial always != null, and can be == _NULL if the Prefix is Self Referencing or not Material based! + * @param aStack always != null + */ + public void registerOre(OrePrefixes aPrefix, GT_Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack); +}
\ No newline at end of file diff --git a/src/Java/miscutil/gregtech/api/objects/GregtechItemData.java b/src/Java/miscutil/gregtech/api/objects/GregtechItemData.java deleted file mode 100644 index 1a0351a00f..0000000000 --- a/src/Java/miscutil/gregtech/api/objects/GregtechItemData.java +++ /dev/null @@ -1,131 +0,0 @@ -package miscutil.gregtech.api.objects; - -import gregtech.api.enums.Materials; -import gregtech.api.objects.GT_ArrayList; -import gregtech.api.objects.MaterialStack; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.Comparator; -import java.util.List; - -import miscutil.gregtech.api.enums.GregtechOrePrefixes; -import net.minecraft.item.ItemStack; - -public class GregtechItemData { - private static final MaterialStack[] EMPTY_MATERIALSTACK_ARRAY = new MaterialStack[0]; - - public final List<Object> mExtraData = new GT_ArrayList<Object>(false, 1); - public final GregtechOrePrefixes mPrefix; - public final MaterialStack mMaterial; - public final MaterialStack[] mByProducts; - public boolean mBlackListed = false; - public ItemStack mUnificationTarget = null; - - public GregtechItemData(GregtechOrePrefixes aPrefix, Materials aMaterial, boolean aBlackListed) { - mPrefix = aPrefix; - mMaterial = aMaterial == null ? null : new MaterialStack(aMaterial, aPrefix.mMaterialAmount); - mBlackListed = aBlackListed; - mByProducts = aPrefix.mSecondaryMaterial == null || aPrefix.mSecondaryMaterial.mMaterial == null ? EMPTY_MATERIALSTACK_ARRAY : new MaterialStack[]{aPrefix.mSecondaryMaterial.clone()}; - } - - public GregtechItemData(GregtechOrePrefixes aPrefix, Materials aMaterial) { - this(aPrefix, aMaterial, false); - } - - public GregtechItemData(MaterialStack aMaterial, MaterialStack... aByProducts) { - mPrefix = null; - mMaterial = aMaterial.mMaterial == null ? null : aMaterial.clone(); - mBlackListed = true; - if (aByProducts == null) { - mByProducts = EMPTY_MATERIALSTACK_ARRAY; - } else { - MaterialStack[] tByProducts = aByProducts.length < 1 ? EMPTY_MATERIALSTACK_ARRAY : new MaterialStack[aByProducts.length]; - int j = 0; - for (int i = 0; i < aByProducts.length; i++) - if (aByProducts[i] != null && aByProducts[i].mMaterial != null) - tByProducts[j++] = aByProducts[i].clone(); - mByProducts = j > 0 ? new MaterialStack[j] : EMPTY_MATERIALSTACK_ARRAY; - for (int i = 0; i < mByProducts.length; i++) mByProducts[i] = tByProducts[i]; - } - } - - public GregtechItemData(Materials aMaterial, long aAmount, MaterialStack... aByProducts) { - this(new MaterialStack(aMaterial, aAmount), aByProducts); - } - - public GregtechItemData(Materials aMaterial, long aAmount, Materials aByProduct, long aByProductAmount) { - this(new MaterialStack(aMaterial, aAmount), new MaterialStack(aByProduct, aByProductAmount)); - } - - public GregtechItemData(GregtechItemData... aData) { - mPrefix = null; - mBlackListed = true; - - ArrayList<MaterialStack> aList = new ArrayList<MaterialStack>(), rList = new ArrayList<MaterialStack>(); - - for (GregtechItemData tData : aData) - if (tData != null) { - if (tData.hasValidMaterialData() && tData.mMaterial.mAmount > 0) aList.add(tData.mMaterial.clone()); - for (MaterialStack tMaterial : tData.mByProducts) - if (tMaterial.mAmount > 0) aList.add(tMaterial.clone()); - } - - for (MaterialStack aMaterial : aList) { - boolean temp = true; - for (MaterialStack tMaterial : rList) - if (aMaterial.mMaterial == tMaterial.mMaterial) { - tMaterial.mAmount += aMaterial.mAmount; - temp = false; - break; - } - if (temp) rList.add(aMaterial.clone()); - } - - Collections.sort(rList, new Comparator<MaterialStack>() { - @Override - public int compare(MaterialStack a, MaterialStack b) { - return a.mAmount == b.mAmount ? 0 : a.mAmount > b.mAmount ? -1 : +1; - } - }); - - if (rList.isEmpty()) { - mMaterial = null; - } else { - mMaterial = rList.get(0); - rList.remove(0); - } - - mByProducts = rList.toArray(new MaterialStack[rList.size()]); - } - - public boolean hasValidPrefixMaterialData() { - return mPrefix != null && mMaterial != null && mMaterial.mMaterial != null; - } - - public boolean hasValidPrefixData() { - return mPrefix != null; - } - - public boolean hasValidMaterialData() { - return mMaterial != null && mMaterial.mMaterial != null; - } - - public ArrayList<MaterialStack> getAllMaterialStacks() { - ArrayList<MaterialStack> rList = new ArrayList(); - if (hasValidMaterialData()) rList.add(mMaterial); - rList.addAll(Arrays.asList(mByProducts)); - return rList; - } - - public MaterialStack getByProduct(int aIndex) { - return aIndex >= 0 && aIndex < mByProducts.length ? mByProducts[aIndex] : null; - } - - @Override - public String toString() { - if (mPrefix == null || mMaterial == null || mMaterial.mMaterial == null) return ""; - return mPrefix.name() + mMaterial.mMaterial.name(); - } -}
\ No newline at end of file diff --git a/src/Java/miscutil/gregtech/api/objects/GregtechMaterialStack.java b/src/Java/miscutil/gregtech/api/objects/GregtechMaterialStack.java new file mode 100644 index 0000000000..936689de97 --- /dev/null +++ b/src/Java/miscutil/gregtech/api/objects/GregtechMaterialStack.java @@ -0,0 +1,42 @@ +package miscutil.gregtech.api.objects; + +import miscutil.gregtech.api.enums.GregtechOrePrefixes.GT_Materials; + +public class GregtechMaterialStack implements Cloneable { + public long mAmount; + public GT_Materials mMaterial; + + public GregtechMaterialStack(GT_Materials aMaterial, long aAmount) { + mMaterial = aMaterial == null ? GT_Materials._NULL : aMaterial; + mAmount = aAmount; + } + + public GregtechMaterialStack copy(long aAmount) { + return new GregtechMaterialStack(mMaterial, aAmount); + } + + @Override + public GregtechMaterialStack clone() { + return new GregtechMaterialStack(mMaterial, mAmount); + } + + @Override + public boolean equals(Object aObject) { + if (aObject == this) return true; + if (aObject == null) return false; + if (aObject instanceof GT_Materials) return aObject == mMaterial; + if (aObject instanceof GregtechMaterialStack) + return ((GregtechMaterialStack) aObject).mMaterial == mMaterial && (mAmount < 0 || ((GregtechMaterialStack) aObject).mAmount < 0 || ((GregtechMaterialStack) aObject).mAmount == mAmount); + return false; + } + + @Override + public String toString() { + return (mMaterial.mMaterialList.size() > 1 && mAmount > 1 ? "(" : "") + mMaterial.getToolTip(true) + (mMaterial.mMaterialList.size() > 1 && mAmount > 1 ? ")" : "") + (mAmount > 1 ? mAmount : ""); + } + + @Override + public int hashCode() { + return mMaterial.hashCode(); + } +}
\ No newline at end of file diff --git a/src/Java/miscutil/gregtech/api/util/GregtechOreDictUnificator.java b/src/Java/miscutil/gregtech/api/util/GregtechOreDictUnificator.java new file mode 100644 index 0000000000..60b8be6dcd --- /dev/null +++ b/src/Java/miscutil/gregtech/api/util/GregtechOreDictUnificator.java @@ -0,0 +1,360 @@ +package miscutil.gregtech.api.util; + +import static gregtech.api.enums.GT_Values.E; +import static gregtech.api.enums.GT_Values.M; +import static gregtech.api.enums.GT_Values.W; +import gregtech.api.GregTech_API; +import gregtech.api.enums.Dyes; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.SubTag; +import gregtech.api.objects.GT_HashSet; +import gregtech.api.objects.GT_ItemStack; +import gregtech.api.util.GT_Log; +import gregtech.api.util.GT_ModHandler; +import gregtech.api.util.GT_Utility; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map.Entry; + +import miscutil.gregtech.api.enums.GregtechOrePrefixes; +import miscutil.gregtech.api.enums.GregtechOrePrefixes.GT_Materials; +import miscutil.gregtech.api.objects.GregtechItemData; +import miscutil.gregtech.api.objects.GregtechMaterialStack; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraftforge.oredict.OreDictionary; + +/** + * NEVER INCLUDE THIS FILE IN YOUR MOD!!! + * <p/> + * This is the Core of my OreDict Unification Code + * <p/> + * If you just want to use this to unificate your Items, then use the Function in the GregTech_API File + * <p/> + * P.S. It is intended to be named "Unificator" and not "Unifier", because that sounds more awesome. + */ +public class GregtechOreDictUnificator { + private static final HashMap<String, ItemStack> sName2StackMap = new HashMap<String, ItemStack>(); + private static final HashMap<GT_ItemStack, GregtechItemData> sItemStack2DataMap = new HashMap<GT_ItemStack, GregtechItemData>(); + private static final GT_HashSet<GT_ItemStack> sNoUnificationList = new GT_HashSet<GT_ItemStack>(); + public static volatile int VERSION = 508; + private static int isRegisteringOre = 0, isAddingOre = 0; + private static boolean mRunThroughTheList = true; + + static { + GregTech_API.sItemStackMappings.add(sItemStack2DataMap); + } + + /** + * The Blacklist just prevents the Item from being unificated into something else. + * Useful if you have things like the Industrial Diamond, which is better than regular Diamond, but also usable in absolutely all Diamond Recipes. + */ + public static void addToBlacklist(ItemStack aStack) { + if (GT_Utility.isStackValid(aStack) && !GT_Utility.isStackInList(aStack, sNoUnificationList)) + sNoUnificationList.add(aStack); + } + + public static boolean isBlacklisted(ItemStack aStack) { + return GT_Utility.isStackInList(aStack, sNoUnificationList); + } + + public static void add(GregtechOrePrefixes aPrefix, GT_Materials aMaterial, ItemStack aStack) { + set(aPrefix, aMaterial, aStack, false, false); + } + + public static void set(GregtechOrePrefixes aPrefix, GT_Materials aMaterial, ItemStack aStack) { + set(aPrefix, aMaterial, aStack, true, false); + } + + public static void set(GregtechOrePrefixes aPrefix, GT_Materials aMaterial, ItemStack aStack, boolean aOverwrite, boolean aAlreadyRegistered) { + if (aMaterial == null || aPrefix == null || GT_Utility.isStackInvalid(aStack) || Items.feather.getDamage(aStack) == W) + return; + isAddingOre++; + aStack = GT_Utility.copyAmount(1, aStack); + if (!aAlreadyRegistered) registerOre(aPrefix.get(aMaterial), aStack); + addAssociation(aPrefix, aMaterial, aStack, isBlacklisted(aStack)); + if (aOverwrite || GT_Utility.isStackInvalid(sName2StackMap.get(aPrefix.get(aMaterial).toString()))) + sName2StackMap.put(aPrefix.get(aMaterial).toString(), aStack); + isAddingOre--; + } + + public static ItemStack getFirstOre(Object aName, long aAmount) { + if (GT_Utility.isStringInvalid(aName)) return null; + ItemStack tStack = sName2StackMap.get(aName.toString()); + if (GT_Utility.isStackValid(tStack)) return GT_Utility.copyAmount(aAmount, tStack); + return GT_Utility.copyAmount(aAmount, getOres(aName).toArray()); + } + + public static ItemStack get(Object aName, long aAmount) { + return get(aName, null, aAmount, true, true); + } + + public static ItemStack get(Object aName, ItemStack aReplacement, long aAmount) { + return get(aName, aReplacement, aAmount, true, true); + } + + public static ItemStack get(GregtechOrePrefixes aPrefix, Object aMaterial, long aAmount) { + return get(aPrefix, aMaterial, null, aAmount); + } + + public static ItemStack get(GregtechOrePrefixes aPrefix, Object aMaterial, ItemStack aReplacement, long aAmount) { + return get(aPrefix.get(aMaterial), aReplacement, aAmount, false, true); + } + + public static ItemStack get(Object aName, ItemStack aReplacement, long aAmount, boolean aMentionPossibleTypos, boolean aNoInvalidAmounts) { + if (aNoInvalidAmounts && aAmount < 1) return null; + if (!sName2StackMap.containsKey(aName.toString()) && aMentionPossibleTypos) + GT_Log.err.println("Unknown Key for Unification, Typo? " + aName); + return GT_Utility.copyAmount(aAmount, sName2StackMap.get(aName.toString()), getFirstOre(aName, aAmount), aReplacement); + } + + public static ItemStack[] setStackArray(boolean aUseBlackList, ItemStack... aStacks) { + for (int i = 0; i < aStacks.length; i++) aStacks[i] = get(aUseBlackList, GT_Utility.copy(aStacks[i])); + return aStacks; + } + + public static ItemStack[] getStackArray(boolean aUseBlackList, Object... aStacks) { + ItemStack[] rStacks = new ItemStack[aStacks.length]; + for (int i = 0; i < aStacks.length; i++) rStacks[i] = get(aUseBlackList, GT_Utility.copy(aStacks[i])); + return rStacks; + } + + public static ItemStack setStack(ItemStack aStack) { + return setStack(true, aStack); + } + + public static ItemStack setStack(boolean aUseBlackList, ItemStack aStack) { + if (GT_Utility.isStackInvalid(aStack)) return aStack; + ItemStack tStack = get(aUseBlackList, aStack); + if (GT_Utility.areStacksEqual(aStack, tStack)) return aStack; + aStack.func_150996_a(tStack.getItem()); + Items.feather.setDamage(aStack, Items.feather.getDamage(tStack)); + return aStack; + } + + public static ItemStack get(ItemStack aStack) { + return get(true, aStack); + } + + public static ItemStack get(boolean aUseBlackList, ItemStack aStack) { + if (GT_Utility.isStackInvalid(aStack)) return null; + GregtechItemData tPrefixMaterial = getAssociation(aStack); + ItemStack rStack = null; + if (tPrefixMaterial == null || !tPrefixMaterial.hasValidPrefixMaterialData() || (aUseBlackList && tPrefixMaterial.mBlackListed)) + return GT_Utility.copy(aStack); + if (aUseBlackList && !GregTech_API.sUnificationEntriesRegistered && isBlacklisted(aStack)) { + tPrefixMaterial.mBlackListed = true; + return GT_Utility.copy(aStack); + } + if (tPrefixMaterial.mUnificationTarget == null) + tPrefixMaterial.mUnificationTarget = sName2StackMap.get(tPrefixMaterial.toString()); + rStack = tPrefixMaterial.mUnificationTarget; + if (GT_Utility.isStackInvalid(rStack)) return GT_Utility.copy(aStack); + assert rStack != null; + rStack.setTagCompound(aStack.getTagCompound()); + return GT_Utility.copyAmount(aStack.stackSize, rStack); + } + + public static void addItemData(ItemStack aStack, GregtechItemData aData) { + if (GT_Utility.isStackValid(aStack) && getItemData(aStack) == null && aData != null) setItemData(aStack, aData); + } + + public static void setItemData(ItemStack aStack, GregtechItemData aData) { + if (GT_Utility.isStackInvalid(aStack) || aData == null) return; + GregtechItemData tData = getItemData(aStack); + if (tData == null || !tData.hasValidPrefixMaterialData()) { + if (tData != null) for (Object tObject : tData.mExtraData) + if (!aData.mExtraData.contains(tObject)) aData.mExtraData.add(tObject); + if (aStack.stackSize > 1) { + if (aData.mMaterial != null) aData.mMaterial.mAmount /= aStack.stackSize; + for (GregtechMaterialStack tMaterial : aData.mByProducts) tMaterial.mAmount /= aStack.stackSize; + aStack = GT_Utility.copyAmount(1, aStack); + } + sItemStack2DataMap.put(new GT_ItemStack(aStack), aData); + if (aData.hasValidMaterialData()) { + long tValidMaterialAmount = aData.mMaterial.mMaterial.contains(SubTag.NO_RECYCLING) ? 0 : aData.mMaterial.mAmount >= 0 ? aData.mMaterial.mAmount : M; + for (GregtechMaterialStack tMaterial : aData.mByProducts) + tValidMaterialAmount += tMaterial.mMaterial.contains(SubTag.NO_RECYCLING) ? 0 : tMaterial.mAmount >= 0 ? tMaterial.mAmount : M; + if (tValidMaterialAmount < M) GT_ModHandler.addToRecyclerBlackList(aStack); + } + if (mRunThroughTheList) { + if (GregTech_API.sLoadStarted) { + mRunThroughTheList = false; + for (Entry<GT_ItemStack, GregtechItemData> tEntry : sItemStack2DataMap.entrySet()) + if (!tEntry.getValue().hasValidPrefixData() || tEntry.getValue().mPrefix.mAllowNormalRecycling) + GregtechRecipeRegistrator.registerMaterialRecycling(tEntry.getKey().toStack(), tEntry.getValue()); + } + } else { + if (!aData.hasValidPrefixData() || aData.mPrefix.mAllowNormalRecycling) + GregtechRecipeRegistrator.registerMaterialRecycling(aStack, aData); + } + } else { + for (Object tObject : aData.mExtraData) + if (!tData.mExtraData.contains(tObject)) tData.mExtraData.add(tObject); + } + } + + public static void addAssociation(GregtechOrePrefixes aPrefix, GT_Materials aMaterial, ItemStack aStack, boolean aBlackListed) { + if (aPrefix == null || aMaterial == null || GT_Utility.isStackInvalid(aStack)) return; + if (Items.feather.getDamage(aStack) == W) for (byte i = 0; i < 16; i++) + setItemData(GT_Utility.copyAmountAndMetaData(1, i, aStack), new GregtechItemData(aPrefix, aMaterial, aBlackListed)); + setItemData(aStack, new GregtechItemData(aPrefix, aMaterial, aBlackListed)); + } + + public static GregtechItemData getItemData(ItemStack aStack) { + if (GT_Utility.isStackInvalid(aStack)) return null; + GregtechItemData rData = sItemStack2DataMap.get(new GT_ItemStack(aStack)); + if (rData == null) rData = sItemStack2DataMap.get(new GT_ItemStack(GT_Utility.copyMetaData(W, aStack))); + return rData; + } + + public static GregtechItemData getAssociation(ItemStack aStack) { + GregtechItemData rData = getItemData(aStack); + return rData != null && rData.hasValidPrefixMaterialData() ? rData : null; + } + + public static boolean isItemStackInstanceOf(ItemStack aStack, Object aName) { + if (GT_Utility.isStringInvalid(aName) || GT_Utility.isStackInvalid(aStack)) return false; + for (ItemStack tOreStack : getOres(aName.toString())) + if (GT_Utility.areStacksEqual(tOreStack, aStack, true)) return true; + return false; + } + + public static boolean isItemStackDye(ItemStack aStack) { + if (GT_Utility.isStackInvalid(aStack)) return false; + for (Dyes tDye : Dyes.VALUES) if (isItemStackInstanceOf(aStack, tDye.toString())) return true; + return false; + } + + public static boolean registerOre(OrePrefixes aPrefix, Object aMaterial, ItemStack aStack) { + return registerOre(aPrefix.get(aMaterial), aStack); + } + + public static boolean registerOre(Object aName, ItemStack aStack) { + if (aName == null || GT_Utility.isStackInvalid(aStack)) return false; + String tName = aName.toString(); + if (GT_Utility.isStringInvalid(tName)) return false; + ArrayList<ItemStack> tList = getOres(tName); + for (int i = 0; i < tList.size(); i++) if (GT_Utility.areStacksEqual(tList.get(i), aStack, true)) return false; + isRegisteringOre++; + OreDictionary.registerOre(tName, GT_Utility.copyAmount(1, aStack)); + isRegisteringOre--; + return true; + } + + public static boolean isRegisteringOres() { + return isRegisteringOre > 0; + } + + public static boolean isAddingOres() { + return isAddingOre > 0; + } + + public static void resetUnificationEntries() { + for (GregtechItemData tPrefixMaterial : sItemStack2DataMap.values()) tPrefixMaterial.mUnificationTarget = null; + } + + public static ItemStack getGem(GregtechMaterialStack aMaterial) { + return aMaterial == null ? null : getGem(aMaterial.mMaterial, aMaterial.mAmount); + } + + public static ItemStack getGem(GT_Materials aMaterial, OrePrefixes aPrefix) { + return aMaterial == null ? null : getGem(aMaterial, aPrefix.mMaterialAmount); + } + + public static ItemStack getGem(GT_Materials aMaterial, long aMaterialAmount) { + ItemStack rStack = null; + if (((aMaterialAmount >= M) || aMaterialAmount >= M * 32)) + rStack = get(GregtechOrePrefixes.gem, aMaterial, aMaterialAmount / M); + if (rStack == null && (((aMaterialAmount * 2) % M == 0) || aMaterialAmount >= M * 16)) + rStack = get(GregtechOrePrefixes.gemFlawed, aMaterial, (aMaterialAmount * 2) / M); + if (rStack == null && (((aMaterialAmount * 4) >= M))) + rStack = get(GregtechOrePrefixes.gemChipped, aMaterial, (aMaterialAmount * 4) / M); + return rStack; + } + + public static ItemStack getDust(GregtechMaterialStack aMaterial) { + return aMaterial == null ? null : getDust(aMaterial.mMaterial, aMaterial.mAmount); + } + + public static ItemStack getDust(GT_Materials aMaterial, OrePrefixes aPrefix) { + return aMaterial == null ? null : getDust(aMaterial, aPrefix.mMaterialAmount); + } + + public static ItemStack getDust(GT_Materials aMaterial, long aMaterialAmount) { + if (aMaterialAmount <= 0) return null; + ItemStack rStack = null; + if (((aMaterialAmount % M == 0) || aMaterialAmount >= M * 16)) + rStack = get(GregtechOrePrefixes.dust, aMaterial, aMaterialAmount / M); + if (rStack == null && (((aMaterialAmount * 4) % M == 0) || aMaterialAmount >= M * 8)) + rStack = get(GregtechOrePrefixes.dustSmall, aMaterial, (aMaterialAmount * 4) / M); + if (rStack == null && (((aMaterialAmount * 9) >= M))) + rStack = get(GregtechOrePrefixes.dustTiny, aMaterial, (aMaterialAmount * 9) / M); + return rStack; + } + + public static ItemStack getIngot(GregtechMaterialStack aMaterial) { + return aMaterial == null ? null : getIngot(aMaterial.mMaterial, aMaterial.mAmount); + } + + public static ItemStack getIngot(GT_Materials aMaterial, OrePrefixes aPrefix) { + return aMaterial == null ? null : getIngot(aMaterial, aPrefix.mMaterialAmount); + } + + public static ItemStack getIngot(GT_Materials aMaterial, long aMaterialAmount) { + if (aMaterialAmount <= 0) return null; + ItemStack rStack = null; + if (((aMaterialAmount % (M * 9) == 0 && aMaterialAmount / (M * 9) > 1) || aMaterialAmount >= M * 72)) + rStack = get(GregtechOrePrefixes.block, aMaterial, aMaterialAmount / (M * 9)); + if (rStack == null && ((aMaterialAmount % M == 0) || aMaterialAmount >= M * 8)) + rStack = get(GregtechOrePrefixes.ingot, aMaterial, aMaterialAmount / M); + if (rStack == null && (((aMaterialAmount * 9) >= M))) + rStack = get(GregtechOrePrefixes.nugget, aMaterial, (aMaterialAmount * 9) / M); + return rStack; + } + + public static ItemStack getIngotOrDust(GT_Materials aMaterial, long aMaterialAmount) { + if (aMaterialAmount <= 0) return null; + ItemStack rStack = getIngot(aMaterial, aMaterialAmount); + if (rStack == null) rStack = getDust(aMaterial, aMaterialAmount); + return rStack; + } + + public static ItemStack getIngotOrDust(GregtechMaterialStack aMaterial) { + ItemStack rStack = getIngot(aMaterial); + if(aMaterial!=null&&aMaterial.mMaterial!=null)rStack = getDust(aMaterial); + if (rStack == null) rStack = getDust(aMaterial); + return rStack; + } + + public static ItemStack getDustOrIngot(GT_Materials aMaterial, long aMaterialAmount) { + if (aMaterialAmount <= 0) return null; + ItemStack rStack = getDust(aMaterial, aMaterialAmount); + if (rStack == null) rStack = getIngot(aMaterial, aMaterialAmount); + return rStack; + } + + public static ItemStack getDustOrIngot(GregtechMaterialStack aMaterial) { + ItemStack rStack = getDust(aMaterial); + if (rStack == null) rStack = getIngot(aMaterial); + return rStack; + } + + /** + * @return a Copy of the OreDictionary.getOres() List + */ + public static ArrayList<ItemStack> getOres(OrePrefixes aPrefix, Object aMaterial) { + return getOres(aPrefix.get(aMaterial)); + } + + /** + * @return a Copy of the OreDictionary.getOres() List + */ + public static ArrayList<ItemStack> getOres(Object aOreName) { + String aName = aOreName == null ? E : aOreName.toString(); + ArrayList<ItemStack> rList = new ArrayList<ItemStack>(); + if (GT_Utility.isStringValid(aName)) rList.addAll(OreDictionary.getOres(aName)); + return rList; + } +} diff --git a/src/Java/miscutil/gregtech/api/util/GregtechRecipeRegistrator.java b/src/Java/miscutil/gregtech/api/util/GregtechRecipeRegistrator.java new file mode 100644 index 0000000000..81a8780a54 --- /dev/null +++ b/src/Java/miscutil/gregtech/api/util/GregtechRecipeRegistrator.java @@ -0,0 +1,339 @@ +package miscutil.gregtech.api.util; + +import static gregtech.api.enums.GT_Values.L; +import static gregtech.api.enums.GT_Values.M; +import static gregtech.api.enums.GT_Values.RA; +import gregtech.api.GregTech_API; +import gregtech.api.enums.ConfigCategories; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.SubTag; +import gregtech.api.enums.TC_Aspects; +import gregtech.api.enums.TC_Aspects.TC_AspectStack; +import gregtech.api.interfaces.internal.IThaumcraftCompat; +import gregtech.api.util.GT_ModHandler; +import gregtech.api.util.GT_Utility; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import miscutil.gregtech.api.enums.GregtechOrePrefixes; +import miscutil.gregtech.api.enums.GregtechOrePrefixes.GT_Materials; +import miscutil.gregtech.api.objects.GregtechItemData; +import miscutil.gregtech.api.objects.GregtechMaterialStack; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; + +/** + * Class for Automatic Recipe registering. + */ +public class GregtechRecipeRegistrator { + /** + * List of GT_Materials, which are used in the Creation of Sticks. All Rod GT_Materials are automatically added to this List. + */ + public static final List<GT_Materials> sRodMaterialList = new ArrayList<GT_Materials>(); + private static final ItemStack sMt1 = new ItemStack(Blocks.dirt, 1, 0), sMt2 = new ItemStack(Blocks.dirt, 1, 0); + private static final String s_H = "h", s_F = "f", s_I = "I", s_P = "P", s_R = "R"; + private static final ItemStack[][] + sShapes1 = new ItemStack[][]{ + {sMt1, null, sMt1, sMt1, sMt1, sMt1, null, sMt1, null}, + {sMt1, null, sMt1, sMt1, null, sMt1, sMt1, sMt1, sMt1}, + {null, sMt1, null, sMt1, sMt1, sMt1, sMt1, null, sMt1}, + {sMt1, sMt1, sMt1, sMt1, null, sMt1, null, null, null}, + {sMt1, null, sMt1, sMt1, sMt1, sMt1, sMt1, sMt1, sMt1}, + {sMt1, sMt1, sMt1, sMt1, null, sMt1, sMt1, null, sMt1}, + {null, null, null, sMt1, null, sMt1, sMt1, null, sMt1}, + {null, sMt1, null, null, sMt1, null, null, sMt2, null}, + {sMt1, sMt1, sMt1, null, sMt2, null, null, sMt2, null}, + {null, sMt1, null, null, sMt2, null, null, sMt2, null}, + {sMt1, sMt1, null, sMt1, sMt2, null, null, sMt2, null}, + {null, sMt1, sMt1, null, sMt2, sMt1, null, sMt2, null}, + {sMt1, sMt1, null, null, sMt2, null, null, sMt2, null}, + {null, sMt1, sMt1, null, sMt2, null, null, sMt2, null}, + {null, sMt1, null, sMt1, null, null, null, sMt1, sMt2}, + {null, sMt1, null, null, null, sMt1, sMt2, sMt1, null}, + {null, sMt1, null, sMt1, null, sMt1, null, null, sMt2}, + {null, sMt1, null, sMt1, null, sMt1, sMt2, null, null}, + {null, sMt2, null, null, sMt1, null, null, sMt1, null}, + {null, sMt2, null, null, sMt2, null, sMt1, sMt1, sMt1}, + {null, sMt2, null, null, sMt2, null, null, sMt1, null}, + {null, sMt2, null, sMt1, sMt2, null, sMt1, sMt1, null}, + {null, sMt2, null, null, sMt2, sMt1, null, sMt1, sMt1}, + {null, sMt2, null, null, sMt2, null, sMt1, sMt1, null}, + {sMt1, null, null, null, sMt2, null, null, null, sMt2}, + {null, null, sMt1, null, sMt2, null, sMt2, null, null}, + {sMt1, null, null, null, sMt2, null, null, null, null}, + {null, null, sMt1, null, sMt2, null, null, null, null}, + {sMt1, sMt2, null, null, null, null, null, null, null}, + {sMt2, sMt1, null, null, null, null, null, null, null}, + {sMt1, null, null, sMt2, null, null, null, null, null}, + {sMt2, null, null, sMt1, null, null, null, null, null}, + {sMt1, sMt1, sMt1, sMt1, sMt1, sMt1, null, sMt2, null}, + {sMt1, sMt1, null, sMt1, sMt1, sMt2, sMt1, sMt1, null}, + {null, sMt1, sMt1, sMt2, sMt1, sMt1, null, sMt1, sMt1}, + {null, sMt2, null, sMt1, sMt1, sMt1, sMt1, sMt1, sMt1}, + {sMt1, sMt1, sMt1, sMt1, sMt2, sMt1, null, sMt2, null}, + {sMt1, sMt1, null, sMt1, sMt2, sMt2, sMt1, sMt1, null}, + {null, sMt1, sMt1, sMt2, sMt2, sMt1, null, sMt1, sMt1}, + {null, sMt2, null, sMt1, sMt2, sMt1, sMt1, sMt1, sMt1}, + {sMt1, null, null, null, sMt1, null, null, null, null}, + {null, sMt1, null, sMt1, null, null, null, null, null}, + {sMt1, sMt1, null, sMt2, null, sMt1, sMt2, null, null}, + {null, sMt1, sMt1, sMt1, null, sMt2, null, null, sMt2} + }; + private static final String[][] sShapesA = new String[][]{ + null, + null, + null, + {"Helmet", s_P + s_P + s_P, s_P + s_H + s_P}, + {"ChestPlate", s_P + s_H + s_P, s_P + s_P + s_P, s_P + s_P + s_P}, + {"Pants", s_P + s_P + s_P, s_P + s_H + s_P, s_P + " " + s_P}, + {"Boots", s_P + " " + s_P, s_P + s_H + s_P}, + {"Sword", " " + s_P + " ", s_F + s_P + s_H, " " + s_R + " "}, + {"Pickaxe", s_P + s_I + s_I, s_F + s_R + s_H, " " + s_R + " "}, + {"Shovel", s_F + s_P + s_H, " " + s_R + " ", " " + s_R + " "}, + {"Axe", s_P + s_I + s_H, s_P + s_R + " ", s_F + s_R + " "}, + {"Axe", s_P + s_I + s_H, s_P + s_R + " ", s_F + s_R + " "}, + {"Hoe", s_P + s_I + s_H, s_F + s_R + " ", " " + s_R + " "}, + {"Hoe", s_P + s_I + s_H, s_F + s_R + " ", " " + s_R + " "}, + {"Sickle", " " + s_P + " ", s_P + s_F + " ", s_H + s_P + s_R}, + {"Sickle", " " + s_P + " ", s_P + s_F + " ", s_H + s_P + s_R}, + {"Sickle", " " + s_P + " ", s_P + s_F + " ", s_H + s_P + s_R}, + {"Sickle", " " + s_P + " ", s_P + s_F + " ", s_H + s_P + s_R}, + {"Sword", " " + s_R + " ", s_F + s_P + s_H, " " + s_P + " "}, + {"Pickaxe", " " + s_R + " ", s_F + s_R + s_H, s_P + s_I + s_I}, + {"Shovel", " " + s_R + " ", " " + s_R + " ", s_F + s_P + s_H}, + {"Axe", s_F + s_R + " ", s_P + s_R + " ", s_P + s_I + s_H}, + {"Axe", s_F + s_R + " ", s_P + s_R + " ", s_P + s_I + s_H}, + {"Hoe", " " + s_R + " ", s_F + s_R + " ", s_P + s_I + s_H}, + {"Hoe", " " + s_R + " ", s_F + s_R + " ", s_P + s_I + s_H}, + {"Spear", s_P + s_H + " ", s_F + s_R + " ", " " + " " + s_R}, + {"Spear", s_P + s_H + " ", s_F + s_R + " ", " " + " " + s_R}, + {"Knive", s_H + s_P, s_R + s_F}, + {"Knive", s_F + s_H, s_P + s_R}, + {"Knive", s_F + s_H, s_P + s_R}, + {"Knive", s_P + s_F, s_R + s_H}, + {"Knive", s_P + s_F, s_R + s_H}, + null, + null, + null, + null, + {"WarAxe", s_P + s_P + s_P, s_P + s_R + s_P, s_F + s_R + s_H}, + null, + null, + null, + {"Shears", s_H + s_P, s_P + s_F}, + {"Shears", s_H + s_P, s_P + s_F}, + {"Scythe", s_I + s_P + s_H, s_R + s_F + s_P, s_R + " " + " "}, + {"Scythe", s_H + s_P + s_I, s_P + s_F + s_R, " " + " " + s_R} + }; + public static volatile int VERSION = 508; + + public static void registerMaterialRecycling(ItemStack aStack, GT_Materials aMaterial, long aMaterialAmount, GregtechMaterialStack aByproduct) { + if (GT_Utility.isStackInvalid(aStack)) return; + if (aByproduct != null) { + aByproduct = aByproduct.clone(); + aByproduct.mAmount /= aStack.stackSize; + } + GregtechOreDictUnificator.addItemData(GT_Utility.copyAmount(1, aStack), new GregtechItemData(aMaterial, aMaterialAmount / aStack.stackSize, aByproduct)); + } + + public static void registerMaterialRecycling(ItemStack aStack, GregtechItemData aData) { + if (GT_Utility.isStackInvalid(aStack) || GT_Utility.areStacksEqual(new ItemStack(Items.blaze_rod), aStack) || aData == null || !aData.hasValidMaterialData() || aData.mMaterial.mAmount <= 0 || GT_Utility.getFluidForFilledItem(aStack, false) != null) + return; + registerReverseMacerating(GT_Utility.copyAmount(1, aStack), aData, aData.mPrefix == null); + registerReverseSmelting(GT_Utility.copyAmount(1, aStack), aData.mMaterial.mMaterial, aData.mMaterial.mAmount, true); + registerReverseFluidSmelting(GT_Utility.copyAmount(1, aStack), aData.mMaterial.mMaterial, aData.mMaterial.mAmount, aData.getByProduct(0)); + registerReverseArcSmelting(GT_Utility.copyAmount(1, aStack), aData); + } + + /** + * @param aStack the stack to be recycled. + * @param aMaterial the Material. + * @param aMaterialAmount the amount of it in Material Units. + */ + public static void registerReverseFluidSmelting(ItemStack aStack, GT_Materials aMaterial, long aMaterialAmount, GregtechMaterialStack aByproduct) { + if (aStack == null || aMaterial == null || aMaterial.mSmeltInto.mStandardMoltenFluid == null || !aMaterial.contains(SubTag.SMELTING_TO_FLUID) || (L * aMaterialAmount) / (M * aStack.stackSize) <= 0) + return; + RA.addFluidSmelterRecipe(GT_Utility.copyAmount(1, aStack), aByproduct == null ? null : aByproduct.mMaterial.contains(SubTag.NO_SMELTING) || !aByproduct.mMaterial.contains(SubTag.METAL) ? aByproduct.mMaterial.contains(SubTag.FLAMMABLE) ? GregtechOreDictUnificator.getDust(GT_Materials._NULL, aByproduct.mAmount / 2) : aByproduct.mMaterial.contains(SubTag.UNBURNABLE) ? GregtechOreDictUnificator.getDustOrIngot(aByproduct.mMaterial.mSmeltInto, aByproduct.mAmount) : null : GregtechOreDictUnificator.getIngotOrDust(aByproduct.mMaterial.mSmeltInto, aByproduct.mAmount), aMaterial.mSmeltInto.getMolten((L * aMaterialAmount) / (M * aStack.stackSize)), 10000, (int) Math.max(1, (24 * aMaterialAmount) / M), Math.max(8, (int) Math.sqrt(2 * aMaterial.mSmeltInto.mStandardMoltenFluid.getTemperature()))); + } + + /** + * @param aStack the stack to be recycled. + * @param aMaterial the Material. + * @param aMaterialAmount the amount of it in Material Units. + * @param aAllowAlloySmelter if it is allowed to be recycled inside the Alloy Smelter. + */ + public static void registerReverseSmelting(ItemStack aStack, GT_Materials aMaterial, long aMaterialAmount, boolean aAllowAlloySmelter) { + if (aStack == null || aMaterial == null || aMaterialAmount <= 0 || aMaterial.contains(SubTag.NO_SMELTING) || (aMaterialAmount > M && aMaterial.contains(SubTag.METAL))) + return; + aMaterialAmount /= aStack.stackSize; + + if (aAllowAlloySmelter) + GT_ModHandler.addSmeltingAndAlloySmeltingRecipe(GT_Utility.copyAmount(1, aStack), GregtechOreDictUnificator.getIngot(aMaterial.mSmeltInto, aMaterialAmount)); + else + GT_ModHandler.addSmeltingRecipe(GT_Utility.copyAmount(1, aStack), GregtechOreDictUnificator.getIngot(aMaterial.mSmeltInto, aMaterialAmount)); + } + + public static void registerReverseArcSmelting(ItemStack aStack, GT_Materials aMaterial, long aMaterialAmount, GregtechMaterialStack aByProduct01, GregtechMaterialStack aByProduct02, GregtechMaterialStack aByProduct03) { + registerReverseArcSmelting(aStack, new GregtechItemData(aMaterial == null ? null : new GregtechMaterialStack(aMaterial, aMaterialAmount), aByProduct01, aByProduct02, aByProduct03)); + } + + public static void registerReverseArcSmelting(ItemStack aStack, GregtechItemData aData) { + if (aStack == null || aData == null) return; + aData = new GregtechItemData(aData); + + if (!aData.hasValidMaterialData()) return; + + for (GregtechMaterialStack tMaterial : aData.getAllGT_MaterialStacks()) { + if (tMaterial.mMaterial.contains(SubTag.UNBURNABLE)) { + tMaterial.mMaterial = tMaterial.mMaterial.mSmeltInto.mArcSmeltInto; + continue; + } + if (tMaterial.mMaterial.contains(SubTag.EXPLOSIVE)) { + tMaterial.mAmount /= 4; + continue; + } + if (tMaterial.mMaterial.contains(SubTag.FLAMMABLE)) { + tMaterial.mAmount /= 2; + continue; + } + if (tMaterial.mMaterial.contains(SubTag.NO_SMELTING)) { + tMaterial.mAmount = 0; + continue; + } + if (tMaterial.mMaterial.contains(SubTag.METAL)) { + tMaterial.mMaterial = tMaterial.mMaterial.mSmeltInto.mArcSmeltInto; + continue; + } + tMaterial.mAmount = 0; + } + + aData = new GregtechItemData(aData); + + if (aData.mByProducts.length > 3) for (GregtechMaterialStack tMaterial : aData.getAllGT_MaterialStacks()) + + aData = new GregtechItemData(aData); + + if (!aData.hasValidMaterialData()) return; + + long tAmount = 0; + for (GregtechMaterialStack tMaterial : aData.getAllGT_MaterialStacks()) + tAmount += tMaterial.mAmount * tMaterial.mMaterial.getMass(); + + RA.addArcFurnaceRecipe(aStack, new ItemStack[]{GregtechOreDictUnificator.getIngotOrDust(aData.mMaterial), GregtechOreDictUnificator.getIngotOrDust(aData.getByProduct(0)), GregtechOreDictUnificator.getIngotOrDust(aData.getByProduct(1)), GregtechOreDictUnificator.getIngotOrDust(aData.getByProduct(2))}, null, (int) Math.max(16, tAmount / M), 96); + } + + public static void registerReverseMacerating(ItemStack aStack, GT_Materials aMaterial, long aMaterialAmount, GregtechMaterialStack aByProduct01, GregtechMaterialStack aByProduct02, GregtechMaterialStack aByProduct03, boolean aAllowHammer) { + registerReverseMacerating(aStack, new GregtechItemData(aMaterial == null ? null : new GregtechMaterialStack(aMaterial, aMaterialAmount), aByProduct01, aByProduct02, aByProduct03), aAllowHammer); + } + + public static void registerReverseMacerating(ItemStack aStack, GregtechItemData aData, boolean aAllowHammer) { + if (aStack == null || aData == null) return; + aData = new GregtechItemData(aData); + + if (!aData.hasValidMaterialData()) return; + + for (GregtechMaterialStack tMaterial : aData.getAllGT_MaterialStacks()) + tMaterial.mMaterial = tMaterial.mMaterial.mMacerateInto; + + aData = new GregtechItemData(aData); + + if (!aData.hasValidMaterialData()) return; + + long tAmount = 0; + for (GregtechMaterialStack tMaterial : aData.getAllGT_MaterialStacks()) + tAmount += tMaterial.mAmount * tMaterial.mMaterial.getMass(); + + RA.addPulveriserRecipe(aStack, new ItemStack[]{GregtechOreDictUnificator.getDust(aData.mMaterial), GregtechOreDictUnificator.getDust(aData.getByProduct(0)), GregtechOreDictUnificator.getDust(aData.getByProduct(1)), GregtechOreDictUnificator.getDust(aData.getByProduct(2))}, null, (int) Math.max(16, tAmount / M), 4); + + if (aAllowHammer) for (GregtechMaterialStack tMaterial : aData.getAllGT_MaterialStacks()) + if (tMaterial.mMaterial.contains(SubTag.CRYSTAL) && !tMaterial.mMaterial.contains(SubTag.METAL)) { + if (RA.addForgeHammerRecipe(GT_Utility.copyAmount(1, aStack), GregtechOreDictUnificator.getDust(aData.mMaterial), 200, 32)) + break; + } + ItemStack tDust = GregtechOreDictUnificator.getDust(aData.mMaterial); + if (tDust != null && GT_ModHandler.addPulverisationRecipe(GT_Utility.copyAmount(1, aStack), tDust, GregtechOreDictUnificator.getDust(aData.getByProduct(0)), 100, GregtechOreDictUnificator.getDust(aData.getByProduct(1)), 100, true)) { + if (GregTech_API.sThaumcraftCompat != null) + GregTech_API.sThaumcraftCompat.addCrucibleRecipe(IThaumcraftCompat.ADVANCEDENTROPICPROCESSING, aStack, tDust, Arrays.asList(new TC_AspectStack(TC_Aspects.PERDITIO, Math.max(1, (aData.mMaterial.mAmount * 2) / M)))); + } + } + + /** + * You give this Function a Material and it will scan almost everything for adding recycling Recipes + * + * @param aMat a Material, for example an Ingot or a Gem. + * @param aOutput the Dust you usually get from macerating aMat + * @param aRecipeReplacing allows to replace the Recipe with a Plate variant + */ + public static synchronized void registerUsagesForGT_Materials(ItemStack aMat, String aPlate, boolean aRecipeReplacing) { + if (aMat == null) return; + aMat = GT_Utility.copy(aMat); + ItemStack tStack; + GregtechItemData aItemData = GregtechOreDictUnificator.getItemData(aMat); + if (aItemData == null || aItemData.mPrefix != GregtechOrePrefixes.ingot) aPlate = null; + if (aPlate != null && GregtechOreDictUnificator.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)) { + GregtechOreDictUnificator.addItemData(tCrafted, new GregtechItemData(aItemData.mMaterial.mMaterial, aItemData.mMaterial.mAmount * tAmount1)); + } + } + + for (GT_Materials tMaterial : sRodMaterialList) { + ItemStack tMt2 = GregtechOreDictUnificator.get(GregtechOrePrefixes.stick, tMaterial, 1); + if (tMt2 != null) { + sMt2.func_150996_a(tMt2.getItem()); + sMt2.stackSize = 1; + Items.feather.setDamage(sMt2, Items.feather.getDamage(tMt2)); + + for (int i = 0; i < sShapes1.length; i++) { + ItemStack[] tRecipe = sShapes1[i]; + + int tAmount1 = 0, tAmount2 = 0; + for (ItemStack tMat : tRecipe) { + if (tMat == sMt1) tAmount1++; + if (tMat == sMt2) tAmount2++; + } + for (ItemStack tCrafted : GT_ModHandler.getVanillyToolRecipeOutputs(tRecipe)) { + if (aItemData != null && aItemData.hasValidPrefixMaterialData()) + GregtechOreDictUnificator.addItemData(tCrafted, new GregtechItemData(aItemData.mMaterial.mMaterial, aItemData.mMaterial.mAmount * tAmount1, new GregtechMaterialStack(tMaterial, OrePrefixes.stick.mMaterialAmount * tAmount2))); + + if (aRecipeReplacing && aPlate != null && sShapesA[i] != null && sShapesA[i].length > 1) { + 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))) { + 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}); + break; + case 3: + GT_ModHandler.addCraftingRecipe(tStack, GT_ModHandler.RecipeBits.BUFFERED, new Object[]{sShapesA[i][1], sShapesA[i][2], s_P.charAt(0), aPlate, s_R.charAt(0), OrePrefixes.stick.get(tMaterial), s_I.charAt(0), aItemData}); + break; + default: + GT_ModHandler.addCraftingRecipe(tStack, GT_ModHandler.RecipeBits.BUFFERED, new Object[]{sShapesA[i][1], sShapesA[i][2], sShapesA[i][3], s_P.charAt(0), aPlate, s_R.charAt(0), OrePrefixes.stick.get(tMaterial), s_I.charAt(0), aItemData}); + break; + } + } + } + } + } + } + } + } + } +} diff --git a/src/Java/miscutil/gregtech/loaders/Processing_Block.java b/src/Java/miscutil/gregtech/loaders/Processing_Block.java new file mode 100644 index 0000000000..e2389a43d5 --- /dev/null +++ b/src/Java/miscutil/gregtech/loaders/Processing_Block.java @@ -0,0 +1,107 @@ +package miscutil.gregtech.loaders; + +import gregtech.api.GregTech_API; +import gregtech.api.enums.ConfigCategories; +import gregtech.api.enums.GT_Values; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.SubTag; +import gregtech.api.util.GT_ModHandler; +import gregtech.api.util.GT_Utility; +import miscutil.core.util.Utils; +import miscutil.gregtech.api.enums.GregtechOrePrefixes; +import miscutil.gregtech.api.enums.GregtechOrePrefixes.GT_Materials; +import miscutil.gregtech.api.interfaces.internal.Interface_OreRecipeRegistrator; +import miscutil.gregtech.api.util.GregtechOreDictUnificator; +import net.minecraft.item.ItemStack; + +public class Processing_Block implements Interface_OreRecipeRegistrator { + + private boolean isGem = false; + + public Processing_Block() { + GregtechOrePrefixes.block.add(this); + } + + @Override + public void registerOre(GregtechOrePrefixes aPrefix, GT_Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack) { + Utils.LOG_INFO("Processing Blocks"); + GT_Values.RA.addCutterRecipe(GT_Utility.copyAmount(1L, new Object[]{aStack}), GregtechOreDictUnificator.get(GregtechOrePrefixes.plate, aMaterial, 9L), null, (int) Math.max(aMaterial.getMass() * 10L, 1L), 30); + + ItemStack tStack1 = GregtechOreDictUnificator.get(GregtechOrePrefixes.ingot, aMaterial, 1L); + ItemStack tStack2 = GregtechOreDictUnificator.get(GregtechOrePrefixes.gem, aMaterial, 1L); + ItemStack tStack3 = GregtechOreDictUnificator.get(GregtechOrePrefixes.dust, aMaterial, 1L); + + GT_ModHandler.removeRecipe(new ItemStack[]{GT_Utility.copyAmount(1L, new Object[]{aStack})}); + + if (tStack1 != null) { + GT_ModHandler.removeRecipe(new ItemStack[]{tStack1, tStack1, tStack1, tStack1, tStack1, tStack1, tStack1, tStack1, tStack1}); + } + if (tStack2 != null) { + GT_ModHandler.removeRecipe(new ItemStack[]{tStack2, tStack2, tStack2, tStack2, tStack2, tStack2, tStack2, tStack2, tStack2}); + } + if (tStack3 != null) { + GT_ModHandler.removeRecipe(new ItemStack[]{tStack3, tStack3, tStack3, tStack3, tStack3, tStack3, tStack3, tStack3, tStack3}); + } + if (aMaterial.mStandardMoltenFluid != null) { + GT_Values.RA.addFluidSolidifierRecipe(ItemList.Shape_Mold_Block.get(0L, new Object[0]), aMaterial.getMolten(1296L), GregtechOreDictUnificator.get(GregtechOrePrefixes.block, aMaterial, 1L), 288, 8); + } + if (GregTech_API.sRecipeFile.get(ConfigCategories.Recipes.storageblockcrafting, GregtechOrePrefixes.block.get(aMaterial).toString(), false)) { + if ((tStack1 == null) && (tStack2 == null) && (tStack3 != null)){ + GT_ModHandler.addCraftingRecipe(GregtechOreDictUnificator.get(GregtechOrePrefixes.block, aMaterial, 1L), new Object[]{"XXX", "XXX", "XXX", Character.valueOf('X'), GregtechOrePrefixes.dust.get(aMaterial)}); + } + if (tStack2 != null){ + GT_ModHandler.addCraftingRecipe(GregtechOreDictUnificator.get(GregtechOrePrefixes.block, aMaterial, 1L), new Object[]{"XXX", "XXX", "XXX", Character.valueOf('X'), GregtechOrePrefixes.gem.get(aMaterial)}); + } + if (tStack1 != null) { + GT_ModHandler.addCraftingRecipe(GregtechOreDictUnificator.get(GregtechOrePrefixes.block, aMaterial, 1L), new Object[]{"XXX", "XXX", "XXX", Character.valueOf('X'), GregtechOrePrefixes.ingot.get(aMaterial)}); + } + } + + if (aMaterial.contains(SubTag.CRYSTAL) && !aMaterial.contains(SubTag.METAL)){ + isGem = true; + } + else { + isGem = false; + } + //Ingot + if (tStack1 != null) { + tStack1.stackSize = 9; + } + //Gem + if (tStack2 != null && !isGem) { + tStack2.stackSize = 9; + } + else if (tStack2 != null && isGem) { + tStack2.stackSize = 0; + } + //Dust + if (tStack3 != null && !isGem) { + tStack3.stackSize = 9; + } + else if (tStack3 != null && isGem) { + tStack3.stackSize = 0; + } + + //Gems in FORGE HAMMER + if (tStack2 != null && !isGem) { + tStack2.stackSize = 9; + GT_Values.RA.addForgeHammerRecipe(aStack, tStack2, 100, 24); + } + else if (tStack2 != null && isGem) { + tStack2.stackSize = 9; + GT_Values.RA.addForgeHammerRecipe(aStack, tStack2, 100, 24); + tStack2.stackSize = 0; + } + + + if (GregTech_API.sRecipeFile.get(ConfigCategories.Recipes.storageblockdecrafting, GregtechOrePrefixes.block.get(aMaterial).toString(), tStack2 != null)) { + if (tStack3 != null) + GT_ModHandler.addShapelessCraftingRecipe(tStack3, new Object[]{GregtechOrePrefixes.block.get(aMaterial)}); + if (tStack2 != null) + GT_ModHandler.addShapelessCraftingRecipe(tStack2, new Object[]{GregtechOrePrefixes.block.get(aMaterial)}); + if (tStack1 != null) { + GT_ModHandler.addShapelessCraftingRecipe(tStack1, new Object[]{GregtechOrePrefixes.block.get(aMaterial)}); + } + } + } +} diff --git a/src/Java/miscutil/gregtech/loaders/Processing_Ingot1.java b/src/Java/miscutil/gregtech/loaders/Processing_Ingot1.java new file mode 100644 index 0000000000..77097042d6 --- /dev/null +++ b/src/Java/miscutil/gregtech/loaders/Processing_Ingot1.java @@ -0,0 +1,68 @@ +package miscutil.gregtech.loaders; + +import gregtech.api.enums.GT_Values; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.SubTag; +import gregtech.api.util.GT_ModHandler; +import gregtech.api.util.GT_OreDictUnificator; +import gregtech.api.util.GT_Utility; +import miscutil.core.util.Utils; +import miscutil.gregtech.api.enums.GregtechOrePrefixes; +import miscutil.gregtech.api.enums.GregtechOrePrefixes.GT_Materials; +import miscutil.gregtech.api.interfaces.internal.Interface_OreRecipeRegistrator; +import miscutil.gregtech.api.util.GregtechRecipeRegistrator; +import net.minecraft.item.ItemStack; + +public class Processing_Ingot1 implements Interface_OreRecipeRegistrator { + public Processing_Ingot1() { + GregtechOrePrefixes.ingot.add(this); + } + + @Override + public void registerOre(GregtechOrePrefixes aPrefix, GT_Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack) { + Utils.LOG_INFO("Processing Ingots"); + if (aMaterial.mFuelPower > 0) { + GT_Values.RA.addFuel(GT_Utility.copyAmount(1L, new Object[]{aStack}), null, aMaterial.mFuelPower, aMaterial.mFuelType); + } + GT_Values.RA.addBoxingRecipe(GT_Utility.copyAmount(16L, new Object[]{aStack}), ItemList.Crate_Empty.get(1L, new Object[0]), GT_OreDictUnificator.get(OrePrefixes.crateGtIngot, aMaterial, 1L), 100, 8); + GT_Values.RA.addUnboxingRecipe(GT_OreDictUnificator.get(OrePrefixes.crateGtIngot, aMaterial, 1L), GT_OreDictUnificator.get(OrePrefixes.ingot, aMaterial, 16L), ItemList.Crate_Empty.get(1L, new Object[0]), 800, 1); + + if (aMaterial.mStandardMoltenFluid != null) + GT_Values.RA.addFluidSolidifierRecipe(ItemList.Shape_Mold_Ingot.get(0L, new Object[0]), aMaterial.getMolten(144L), GT_OreDictUnificator.get(OrePrefixes.ingot, aMaterial, 1L), 32, 8); + GregtechRecipeRegistrator.registerReverseFluidSmelting(aStack, aMaterial, aPrefix.mMaterialAmount, null); + GregtechRecipeRegistrator.registerReverseMacerating(aStack, aMaterial, aPrefix.mMaterialAmount, null, null, null, false); + if (aMaterial.mSmeltInto.mArcSmeltInto != aMaterial) { + GregtechRecipeRegistrator.registerReverseArcSmelting(GT_Utility.copyAmount(1L, new Object[]{aStack}), aMaterial, aPrefix.mMaterialAmount, null, null, null); + } + if (!aMaterial.contains(SubTag.NO_SMASHING)) { + GT_Values.RA.addWiremillRecipe(GT_Utility.copyAmount(1L, new Object[]{aStack}), GT_Utility.copy(new Object[]{GT_OreDictUnificator.get(OrePrefixes.wireGt01, aMaterial, 2L), GT_OreDictUnificator.get(OrePrefixes.wireFine, aMaterial, 8L)}), 100, 4); + GT_Values.RA.addForgeHammerRecipe(GT_Utility.copyAmount(2L, new Object[]{aStack}), GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial, 1L), (int) Math.max(aMaterial.getMass(), 1L), 16); + GT_Values.RA.addBenderRecipe(GT_Utility.copyAmount(1L, new Object[]{aStack}), GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial, 1L), (int) Math.max(aMaterial.getMass() * 1L, 1L), 24); + GT_Values.RA.addBenderRecipe(GT_Utility.copyAmount(2L, new Object[]{aStack}), GT_OreDictUnificator.get(OrePrefixes.plateDouble, aMaterial, 1L), (int) Math.max(aMaterial.getMass() * 2L, 1L), 96); + GT_Values.RA.addBenderRecipe(GT_Utility.copyAmount(3L, new Object[]{aStack}), GT_OreDictUnificator.get(OrePrefixes.plateTriple, aMaterial, 1L), (int) Math.max(aMaterial.getMass() * 3L, 1L), 96); + GT_Values.RA.addBenderRecipe(GT_Utility.copyAmount(4L, new Object[]{aStack}), GT_OreDictUnificator.get(OrePrefixes.plateQuadruple, aMaterial, 1L), (int) Math.max(aMaterial.getMass() * 4L, 1L), 96); + GT_Values.RA.addBenderRecipe(GT_Utility.copyAmount(5L, new Object[]{aStack}), GT_OreDictUnificator.get(OrePrefixes.plateQuintuple, aMaterial, 1L), (int) Math.max(aMaterial.getMass() * 5L, 1L), 96); + GT_Values.RA.addBenderRecipe(GT_Utility.copyAmount(9L, new Object[]{aStack}), GT_OreDictUnificator.get(OrePrefixes.plateDense, aMaterial, 1L), (int) Math.max(aMaterial.getMass() * 9L, 1L), 96); + } + + + if (!GregtechOrePrefixes.block.isIgnored(aMaterial)) + GT_ModHandler.addCompressionRecipe(GT_Utility.copyAmount(9L, new Object[]{aStack}), GT_OreDictUnificator.get(OrePrefixes.block, aMaterial, 1L)); + if (!aMaterial.contains(SubTag.NO_WORKING)) + GT_Values.RA.addLatheRecipe(GT_Utility.copyAmount(1L, new Object[]{aStack}), GT_OreDictUnificator.get(OrePrefixes.stick, aMaterial, 1L), GT_OreDictUnificator.get(OrePrefixes.dustSmall, aMaterial.mMacerateInto, 2L), (int) Math.max(aMaterial.getMass() * 5L, 1L), 16); + if (!aMaterial.contains(SubTag.NO_SMELTING)) { + GT_Values.RA.addAlloySmelterRecipe(GT_Utility.copyAmount(1L, new Object[]{aStack}), ItemList.Shape_Mold_Nugget.get(0L, new Object[0]), GT_OreDictUnificator.get(OrePrefixes.nugget, aMaterial, 9L), 100, 1); + if ((GT_ModHandler.getSmeltingOutput(aStack, false, null) == null) && (GT_OreDictUnificator.get(OrePrefixes.nugget, aMaterial.mSmeltInto, 1L) != null) && (!GT_ModHandler.addSmeltingRecipe(aStack, GT_OreDictUnificator.get(OrePrefixes.nugget, aMaterial.mSmeltInto, 9L)))) + GT_ModHandler.addShapelessCraftingRecipe(GT_OreDictUnificator.get(OrePrefixes.nugget, aMaterial.mSmeltInto, 9L), new Object[]{aOreDictName}); + } + ItemStack tStack; + if ((null != (tStack = GT_OreDictUnificator.get(OrePrefixes.dust, aMaterial.mMacerateInto, 1L))) && ( + (aMaterial.mBlastFurnaceRequired) || (aMaterial.contains(SubTag.NO_SMELTING)))) { + GT_ModHandler.removeFurnaceSmelting(tStack); + } + + GregtechRecipeRegistrator.registerUsagesForGT_Materials(GT_Utility.copyAmount(1L, new Object[]{aStack}), OrePrefixes.plate.get(aMaterial).toString(), !aMaterial.contains(SubTag.NO_SMASHING)); + + } +} diff --git a/src/Java/miscutil/gregtech/loaders/Processing_Plate1.java b/src/Java/miscutil/gregtech/loaders/Processing_Plate1.java new file mode 100644 index 0000000000..636d8c5377 --- /dev/null +++ b/src/Java/miscutil/gregtech/loaders/Processing_Plate1.java @@ -0,0 +1,56 @@ +package miscutil.gregtech.loaders; + +import gregtech.api.enums.GT_Values; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.util.GT_ModHandler; +import gregtech.api.util.GT_OreDictUnificator; +import gregtech.api.util.GT_Utility; +import miscutil.core.util.Utils; +import miscutil.gregtech.api.enums.GregtechOrePrefixes; +import miscutil.gregtech.api.interfaces.internal.Interface_OreRecipeRegistrator; +import net.minecraft.item.ItemStack; + +public class Processing_Plate1 implements Interface_OreRecipeRegistrator { + public Processing_Plate1() { + GregtechOrePrefixes.plate.add(this); + } + + @Override + public void registerOre(GregtechOrePrefixes aPrefix, GregtechOrePrefixes.GT_Materials aMaterial, String aOreDictName, String aModName, ItemStack aStack) { + Utils.LOG_INFO("Processing Plates"); + GT_ModHandler.removeRecipeByOutput(aStack); + GT_ModHandler.removeRecipe(new ItemStack[]{aStack}); + + GT_Values.RA.addBoxingRecipe(GT_Utility.copyAmount(16L, new Object[]{aStack}), ItemList.Crate_Empty.get(1L, new Object[0]), GT_OreDictUnificator.get(OrePrefixes.crateGtPlate, aMaterial, 1L), 100, 8); + GT_Values.RA.addUnboxingRecipe(GT_OreDictUnificator.get(OrePrefixes.crateGtPlate, aMaterial, 1L), GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial, 16L), ItemList.Crate_Empty.get(1L, new Object[0]), 800, 1); + + GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial, 4L), GT_OreDictUnificator.get(OrePrefixes.ring, aMaterial, 1L), Materials.Tin.getMolten(32), GT_OreDictUnificator.get(OrePrefixes.rotor, aMaterial, 1L), 240, 24); + GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial, 4L), GT_OreDictUnificator.get(OrePrefixes.ring, aMaterial, 1L), Materials.Lead.getMolten(48), GT_OreDictUnificator.get(OrePrefixes.rotor, aMaterial, 1L), 240, 24); + GT_Values.RA.addAssemblerRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial, 4L), GT_OreDictUnificator.get(OrePrefixes.ring, aMaterial, 1L), Materials.SolderingAlloy.getMolten(16), GT_OreDictUnificator.get(OrePrefixes.rotor, aMaterial, 1L), 240, 24); + + + + if (aMaterial.mStandardMoltenFluid != null) { + GT_Values.RA.addFluidSolidifierRecipe(ItemList.Shape_Mold_Plate.get(0L, new Object[0]), aMaterial.getMolten(144L), GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial, 1L), 32, 8); + } + + + if (aMaterial.mFuelPower > 0) + GT_Values.RA.addFuel(GT_Utility.copyAmount(1L, new Object[]{aStack}), null, aMaterial.mFuelPower, aMaterial.mFuelType); + GT_Utility.removeSimpleIC2MachineRecipe(GT_Utility.copyAmount(9L, new Object[]{aStack}), GT_ModHandler.getCompressorRecipeList(), GT_OreDictUnificator.get(OrePrefixes.plateDense, aMaterial, 1L)); + GT_Values.RA.addImplosionRecipe(GT_Utility.copyAmount(2L, new Object[]{aStack}), 2, GT_OreDictUnificator.get(OrePrefixes.compressed, aMaterial, 1L), GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 1L)); + if (!aMaterial.contains(gregtech.api.enums.SubTag.NO_WORKING)) { + GT_Values.RA.addLatheRecipe(GT_Utility.copyAmount(1L, new Object[]{aStack}), GT_OreDictUnificator.get(OrePrefixes.lens, aMaterial, 1L), GT_OreDictUnificator.get(OrePrefixes.dustSmall, aMaterial, 1L), (int) Math.max(aMaterial.getMass() / 2L, 1L), 16); + } + if (!aMaterial.contains(gregtech.api.enums.SubTag.NO_SMASHING)) { + GT_Values.RA.addBenderRecipe(GT_Utility.copyAmount(1L, new Object[]{aStack}), GT_OreDictUnificator.get(OrePrefixes.foil, aMaterial, 4L), (int) Math.max(aMaterial.getMass() * 1L, 1L), 24); + GT_Values.RA.addBenderRecipe(GT_Utility.copyAmount(2L, new Object[]{aStack}), GT_OreDictUnificator.get(OrePrefixes.plateDouble, aMaterial, 1L), (int) Math.max(aMaterial.getMass() * 2L, 1L), 96); + GT_Values.RA.addBenderRecipe(GT_Utility.copyAmount(3L, new Object[]{aStack}), GT_OreDictUnificator.get(OrePrefixes.plateTriple, aMaterial, 1L), (int) Math.max(aMaterial.getMass() * 3L, 1L), 96); + GT_Values.RA.addBenderRecipe(GT_Utility.copyAmount(4L, new Object[]{aStack}), GT_OreDictUnificator.get(OrePrefixes.plateQuadruple, aMaterial, 1L), (int) Math.max(aMaterial.getMass() * 4L, 1L), 96); + GT_Values.RA.addBenderRecipe(GT_Utility.copyAmount(5L, new Object[]{aStack}), GT_OreDictUnificator.get(OrePrefixes.plateQuintuple, aMaterial, 1L), (int) Math.max(aMaterial.getMass() * 5L, 1L), 96); + GT_Values.RA.addBenderRecipe(GT_Utility.copyAmount(9L, new Object[]{aStack}), GT_OreDictUnificator.get(OrePrefixes.plateDense, aMaterial, 1L), (int) Math.max(aMaterial.getMass() * 9L, 1L), 96); + } + } +} |