diff options
author | Jordan Byrne <draknyte1@hotmail.com> | 2018-02-10 20:28:09 +1000 |
---|---|---|
committer | Jordan Byrne <draknyte1@hotmail.com> | 2018-02-10 20:28:09 +1000 |
commit | a9949c5fa2d839eb7f7fa98abf37772801620cf3 (patch) | |
tree | 107451dbca6b716ed58a5a8553a9672e0c4ebd84 /src | |
parent | 6929469358ab39b38eabf0c58ece297a3bb5ff1f (diff) | |
download | GT5-Unofficial-a9949c5fa2d839eb7f7fa98abf37772801620cf3.tar.gz GT5-Unofficial-a9949c5fa2d839eb7f7fa98abf37772801620cf3.tar.bz2 GT5-Unofficial-a9949c5fa2d839eb7f7fa98abf37772801620cf3.zip |
$ More rewrite.
Diffstat (limited to 'src')
-rw-r--r-- | src/Java/gregtech/api/util/Recipe_GT.java | 2 | ||||
-rw-r--r-- | src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/GregtechMetaTileEntity_MassFabricator.java | 163 |
2 files changed, 158 insertions, 7 deletions
diff --git a/src/Java/gregtech/api/util/Recipe_GT.java b/src/Java/gregtech/api/util/Recipe_GT.java index 5406d8e084..a6bd5d4b6c 100644 --- a/src/Java/gregtech/api/util/Recipe_GT.java +++ b/src/Java/gregtech/api/util/Recipe_GT.java @@ -29,7 +29,7 @@ public class Recipe_GT extends GT_Recipe{ public static volatile int VERSION = 508; - protected Recipe_GT(final boolean aOptimize, final ItemStack[] aInputs, final ItemStack[] aOutputs, final Object aSpecialItems, final int[] aChances, final FluidStack[] aFluidInputs, final FluidStack[] aFluidOutputs, final int aDuration, final int aEUt, final int aSpecialValue) { + public Recipe_GT(final boolean aOptimize, final ItemStack[] aInputs, final ItemStack[] aOutputs, final Object aSpecialItems, final int[] aChances, final FluidStack[] aFluidInputs, final FluidStack[] aFluidOutputs, final int aDuration, final int aEUt, final int aSpecialValue) { super(aOptimize, aInputs, aOutputs, aSpecialItems, aChances, aFluidInputs, aFluidOutputs, aDuration, aEUt, aSpecialValue); Logger.SPECIFIC_WARNING(this.getClass().getName()+" | [GregtechRecipe]", "Created new recipe instance for "+ItemUtils.getArrayStackNames(aInputs), 167); } diff --git a/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/GregtechMetaTileEntity_MassFabricator.java b/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/GregtechMetaTileEntity_MassFabricator.java index 02bab7fad7..daa631df25 100644 --- a/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/GregtechMetaTileEntity_MassFabricator.java +++ b/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/GregtechMetaTileEntity_MassFabricator.java @@ -4,18 +4,23 @@ import static gtPlusPlus.core.util.array.ArrayUtils.removeNulls; import java.util.ArrayList; import java.util.Arrays; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; import org.apache.commons.lang3.ArrayUtils; import gregtech.api.enums.ConfigCategories; +import gregtech.api.enums.GT_Values; import gregtech.api.enums.Materials; import gregtech.api.enums.TAE; import gregtech.api.enums.Textures; import gregtech.api.interfaces.ITexture; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input; import gregtech.api.objects.GT_RenderedTexture; import gregtech.api.util.GT_Config; +import gregtech.api.util.GT_ModHandler; import gregtech.api.util.GT_Recipe; import gregtech.api.util.GT_Recipe.GT_Recipe_Map; import gregtech.api.util.GT_Utility; @@ -31,6 +36,8 @@ import gtPlusPlus.core.util.item.ItemUtils; import gtPlusPlus.xmod.gregtech.api.gui.GUI_MatterFab; import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GregtechMeta_MultiBlockBase; import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; +import ic2.core.init.BlocksItems; +import ic2.core.init.InternalName; import net.minecraft.block.Block; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.item.Item; @@ -44,14 +51,17 @@ public class GregtechMetaTileEntity_MassFabricator extends GregtechMeta_MultiBlo public static int sUUASpeedBonus = 4; public static int sDurationMultiplier = 3215; public static boolean sRequiresUUA = false; + private int mAmplifierUsed = 0; private int mMatterProduced = 0; - ItemStack scrapPile = ItemUtils.getSimpleStack(ItemUtils.getItem("IC2:itemScrap")); - ItemStack scrapBox = ItemUtils.getSimpleStack(ItemUtils.getItem("IC2:itemScrapbox")); - - private boolean isUsingControllerCircuit = false; + private static final Item circuit = CI.getNumberedCircuit(0).getItem(); + public final static int JUNK_TO_SCRAP = 19; + public final static int JUNK_TO_UUA = 20; + public final static int SCRAP_UUA = 21; + public final static int PRODUCE_UUM = 22; + private static Block IC2Glass = Block.getBlockFromItem(ItemUtils.getItem("IC2:blockAlloyGlass")); FluidStack tempFake = FluidUtils.getFluidStack("uuamplifier", 1); GT_Recipe fakeRecipe; @@ -103,6 +113,20 @@ public class GregtechMetaTileEntity_MassFabricator extends GregtechMeta_MultiBlo public boolean hasSlotInGUI() { return false; } + + public static ItemStack mScrap[] = new ItemStack[2]; + public ItemStack getScrapPile() { + if (mScrap[0] == null) { + mScrap[0] = ItemUtils.getSimpleStack(ItemUtils.getItem("IC2:itemScrap")); + } + return mScrap[0]; + } + public ItemStack getScrapBox() { + if (mScrap[1] == null) { + mScrap[1] = ItemUtils.getSimpleStack(ItemUtils.getItem("IC2:itemScrapbox")); + } + return mScrap[1]; + } @Override public Object getClientGUI(final int aID, final InventoryPlayer aPlayerInventory, final IGregTechTileEntity aBaseMetaTileEntity) { @@ -303,7 +327,7 @@ public class GregtechMetaTileEntity_MassFabricator extends GregtechMeta_MultiBlo break; } if (h != null) { - if (h.getItem() == this.scrapPile.getItem() || h.getItem() == this.scrapBox.getItem()) { + if (h.getItem() == getScrapPile().getItem() || h.getItem() == getScrapBox().getItem()) { this.mMode = 21; foundScrap = true; } @@ -321,6 +345,131 @@ public class GregtechMetaTileEntity_MassFabricator extends GregtechMeta_MultiBlo return outputStack; } + + public static Map<Integer, GT_Recipe> mCachedRecipeMap = new ConcurrentHashMap<Integer, GT_Recipe>(); + + /** + * Special Recipe Generator + */ + + private GT_Recipe generateCustomRecipe(int mode, ItemStack[] aItemInputs) { + + ItemStack[] inputs = null; + ItemStack[] outputs = null; + FluidStack fluidIn = null; + FluidStack fluidOut = null; + + int euCostBase = 0; + int timeBase = 3200; + + //public static int sUUAperUUM = 1; + //public static int sUUASpeedBonus = 4; + //public static int sDurationMultiplier = 3215; + //public static boolean sRequiresUUA = false; + + + + if (mode == JUNK_TO_SCRAP) { + inputs = aItemInputs; + } + else if (mode == JUNK_TO_UUA) { + + } + else if (mode == SCRAP_UUA) { + + } + else if (mode == PRODUCE_UUM) { + if (doesHatchContainUUA()) { + fluidIn = FluidUtils.getFluidStack(mUU[0], 1); + fluidOut = FluidUtils.getFluidStack(mUU[1], 1); + } + else { + fluidIn = GT_Values.NF; + fluidOut = FluidUtils.getFluidStack(mUU[1], 1); + } + } + else { + + } + + + + + //The Recipe Itself. + return new Recipe_GT( + true, + inputs, //Inputs + outputs, //Outputs + null, // Special? + new int[] {10000}, //Chances + new FluidStack[] {fluidIn}, //Fluid Inputs + new FluidStack[] {fluidOut}, //Fluid Outputs + mode, //duration + mode, //eu/t + 0); + } + + private GT_Recipe getFakeRecipeForMode(ItemStack[] aItemInputs) { + if (this.mMode == JUNK_TO_SCRAP) { + if (mCachedRecipeMap.containsKey(JUNK_TO_SCRAP)) { + return mCachedRecipeMap.get(JUNK_TO_SCRAP); + } + else { + return mCachedRecipeMap.put(JUNK_TO_SCRAP, generateCustomRecipe(JUNK_TO_SCRAP, aItemInputs)); + } + } + else if (this.mMode == JUNK_TO_UUA) { + if (mCachedRecipeMap.containsKey(JUNK_TO_UUA)) { + return mCachedRecipeMap.get(JUNK_TO_UUA); + } + else { + return mCachedRecipeMap.put(JUNK_TO_UUA, generateCustomRecipe(JUNK_TO_UUA, aItemInputs)); + } + } + else if (this.mMode == SCRAP_UUA) { + if (mCachedRecipeMap.containsKey(SCRAP_UUA)) { + return mCachedRecipeMap.get(SCRAP_UUA); + } + else { + return mCachedRecipeMap.put(SCRAP_UUA, generateCustomRecipe(SCRAP_UUA, aItemInputs)); + } + } + else if (this.mMode == PRODUCE_UUM) { + if (mCachedRecipeMap.containsKey(PRODUCE_UUM)) { + return mCachedRecipeMap.get(PRODUCE_UUM); + } + else { + return mCachedRecipeMap.put(PRODUCE_UUM, generateCustomRecipe(PRODUCE_UUM, aItemInputs)); + } + } + else { + return null; + } + } + + private static FluidStack[] mUU = new FluidStack[2]; + + public boolean doesHatchContainUUA() { + if (mUU[0] == null) { + mUU[0] = Materials.UUAmplifier.getFluid(100); + } + if (mUU[1] == null) { + mUU[1] = Materials.UUMatter.getFluid(100); + } + + if (mUU[0] != null && mUU[1] != null) { + for (GT_MetaTileEntity_Hatch_Input g : this.mInputHatches) { + if (g.getFluid() != null) { + if (g.mFluid.isFluidEqual(mUU[0])) { + return true; + } + } + } + } + + return false; + } + /** * Special Recipe Handling @@ -347,11 +496,13 @@ public class GregtechMetaTileEntity_MassFabricator extends GregtechMeta_MultiBlo this.mMode = getGUICircuit(aItemInputs); int parallelRecipes = 1; + //Set Mode + GT_Recipe mFakeRecipe = getFakeRecipeForMode(); - //Generate Loot + //Generate Loot GenericStack mFishOutput = getOutputForMode(aItemInputs, aFluidInputs); |