diff options
author | Martin Robertz <dream-master@gmx.net> | 2021-12-08 19:59:16 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-12-08 19:59:16 +0100 |
commit | 8ad71b7500941a1e923c87d24b0d31b4b99c8210 (patch) | |
tree | c0fd624378d9e97ceba3f52fecf3291b1cef9510 /src/main/java/gregtech | |
parent | bbe81c345718d26882c1c575cf140079b0e4834b (diff) | |
download | GT5-Unofficial-8ad71b7500941a1e923c87d24b0d31b4b99c8210.tar.gz GT5-Unofficial-8ad71b7500941a1e923c87d24b0d31b4b99c8210.tar.bz2 GT5-Unofficial-8ad71b7500941a1e923c87d24b0d31b4b99c8210.zip |
Distillation circuit (#784)
* add input slots to Distillation Tower
* borrow Large chemical reactor code to make it show up in Nei
* add itemstack to Distillation multi machine code
(cherry picked from commit e6e4203979340fc21f8ef4e1d6e9d0376afd3ef6)
* remove unnecessary checks
Co-authored-by: Glease <4586901+Glease@users.noreply.github.com>
Diffstat (limited to 'src/main/java/gregtech')
4 files changed, 75 insertions, 9 deletions
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 9d66e38060..41e2007364 100644 --- a/src/main/java/gregtech/api/interfaces/internal/IGT_RecipeAdder.java +++ b/src/main/java/gregtech/api/interfaces/internal/IGT_RecipeAdder.java @@ -439,7 +439,7 @@ public interface IGT_RecipeAdder { * @param aOutput2 can be null */ boolean addDistillationTowerRecipe(FluidStack aInput, FluidStack[] aOutputs, ItemStack aOutput2, int aDuration, int aEUt); - + boolean addDistillationTowerRecipe(FluidStack aInput, ItemStack[] aCircuit, FluidStack[] aOutputs, ItemStack aOutput2, int aDuration, int aEUt); boolean addSimpleArcFurnaceRecipe(ItemStack aInput, FluidStack aFluidInput, ItemStack[] aOutputs, int[] aChances, int aDuration, int aEUt); diff --git a/src/main/java/gregtech/api/util/GT_Recipe.java b/src/main/java/gregtech/api/util/GT_Recipe.java index 6e12a3d36c..7d475b4dfd 100644 --- a/src/main/java/gregtech/api/util/GT_Recipe.java +++ b/src/main/java/gregtech/api/util/GT_Recipe.java @@ -1931,6 +1931,7 @@ public class GT_Recipe implements Comparable<GT_Recipe> { } } public static class GT_Recipe_Map_DistillationTower extends GT_Recipe_Map { + private static final int TOTAL_INPUT_COUNT = 6; private static final int FLUID_OUTPUT_COUNT = 11; private static final int ROW_SIZE = 3; @@ -1947,7 +1948,6 @@ public class GT_Recipe implements Comparable<GT_Recipe> { public GT_Recipe addRecipe(boolean aOptimize, ItemStack[] aInputs, ItemStack[] aOutputs, Object aSpecial, FluidStack[] aFluidInputs, FluidStack[] aFluidOutputs, int aDuration, int aEUt, int aSpecialValue) { return addRecipe(aOptimize, aInputs, aOutputs, aSpecial, null, aFluidInputs, aFluidOutputs, aDuration, aEUt, aSpecialValue); } - private static class GT_Recipe_DistillationTower extends GT_Recipe{ protected GT_Recipe_DistillationTower(boolean aOptimize, ItemStack[] aInputs, ItemStack[] aOutputs, Object aSpecialItems, int[] aChances, FluidStack[] aFluidInputs, FluidStack[] aFluidOutputs, int aDuration, int aEUt, int aSpecialValue) { super(aOptimize, aInputs, aOutputs, aSpecialItems, aChances, aFluidInputs, aFluidOutputs, aDuration, aEUt, aSpecialValue); @@ -1955,13 +1955,46 @@ public class GT_Recipe implements Comparable<GT_Recipe> { @Override public ArrayList<PositionedStack> getInputPositionedStacks() { - ArrayList<PositionedStack> inputStacks = new ArrayList<>(1); + int itemLimit = Math.min(mInputs.length, TOTAL_INPUT_COUNT); + int fluidLimit = Math.min(mFluidInputs.length, TOTAL_INPUT_COUNT - itemLimit); + int inputlimit = itemLimit + fluidLimit; + int j = 0; + + ArrayList<PositionedStack> inputStacks = new ArrayList<>(inputlimit); + + for (int i = 0; i < itemLimit; i++, j++) { + if (this.mInputs == null || (this.mInputs[i] == null && (i == 0 && itemLimit == 1))) { + if (this.mOutputs != null && this.mOutputs.length > 0 && this.mOutputs[0] != null) + GT_Log.out.println("recipe " + this + " Output 0:" + this.mOutputs[0].getDisplayName() + " has errored!"); + else + GT_Log.out.println("recipe " + this + " has errored!"); + + new Exception("Recipe Fixme").printStackTrace(GT_Log.out); + } + - if (this.mFluidInputs.length > 0 && this.mFluidInputs[0] != null) { - inputStacks.add(new FixedPositionedStack(GT_Utility.getFluidDisplayStack(this.mFluidInputs[0], true), 48, 52)); + if ((this.mInputs != null && this.mInputs[i] != null) || !GT_Values.allow_broken_recipemap) + inputStacks.add(new FixedPositionedStack(this.mInputs[i].copy(), 48 - j % 3 * 18, (j >= 3 ? 5 : 23))); + else + inputStacks.add(new FixedPositionedStack(new ItemStack(Items.command_block_minecart), 48 - j % 3 * 18, (j >= 3 ? 5 : 23))); + } + + for (int i = 0; i < fluidLimit; i++, j++) { + if (this.mFluidInputs == null || this.mFluidInputs[i] == null) { + if (this.mOutputs != null && this.mOutputs.length > 0 && this.mOutputs[0] != null) + GT_Log.out.println("recipe " + this + " Output 0:" + this.mOutputs[0].getDisplayName() + " has errored!"); + else + GT_Log.out.println("recipe " + this + " has errored!"); + + new Exception("Recipe Fixme").printStackTrace(GT_Log.out); + } + + if ((this.mFluidInputs != null && this.mFluidInputs[i] != null) || !GT_Values.allow_broken_recipemap) + inputStacks.add(new FixedPositionedStack(GT_Utility.getFluidDisplayStack(this.mFluidInputs[i], true), 48 - j % 3 * 18, (j >= 3 ? 5 : 23))); + } + + return inputStacks; } - return inputStacks; - } @Override public ArrayList<PositionedStack> getOutputPositionedStacks() { int fluidLimit = Math.min(mFluidOutputs.length, FLUID_OUTPUT_COUNT); diff --git a/src/main/java/gregtech/common/GT_RecipeAdder.java b/src/main/java/gregtech/common/GT_RecipeAdder.java index 4ba4601490..69a5254c44 100644 --- a/src/main/java/gregtech/common/GT_RecipeAdder.java +++ b/src/main/java/gregtech/common/GT_RecipeAdder.java @@ -663,6 +663,18 @@ public class GT_RecipeAdder implements IGT_RecipeAdder { } @Override + public boolean addDistillationTowerRecipe(FluidStack aInput, ItemStack[] aCircuit, FluidStack[] aOutputs, ItemStack aOutput2, int aDuration, int aEUt) { + if (aInput == null || aOutputs == null || aOutputs.length < 1 || aOutputs.length > 11) { + return false; + } + if ((aDuration = GregTech_API.sRecipeFile.get("distillation", aInput.getUnlocalizedName(), aDuration)) <= 0) { + return false; + } + GT_Recipe.GT_Recipe_Map.sDistillationRecipes.addRecipe(false, aCircuit, new ItemStack[]{aOutput2}, null, new FluidStack[]{aInput}, aOutputs, Math.max(1, aDuration), Math.max(1, aEUt), 0); + return false; + } + + @Override public boolean addVacuumFreezerRecipe(ItemStack aInput1, ItemStack aOutput1, int aDuration, int aEUt) { if ((aInput1 == null) || (aOutput1 == null)) { return false; diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_DistillationTower.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_DistillationTower.java index f83f6aa11d..0d7cc5a077 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_DistillationTower.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_DistillationTower.java @@ -144,6 +144,27 @@ public class GT_MetaTileEntity_DistillationTower extends GT_MetaTileEntity_Enhan @Override public boolean checkRecipe(ItemStack aStack) { + GT_Recipe tRecipe; + + ArrayList<ItemStack> tInputList = getStoredInputs(); + int tInputList_sS = tInputList.size(); + for (int i = 0; i < tInputList_sS - 1; i++) { + for (int j = i + 1; j < tInputList_sS; j++) { + if (GT_Utility.areStacksEqual(tInputList.get(i), tInputList.get(j))) { + if (tInputList.get(i).stackSize >= tInputList.get(j).stackSize) { + tInputList.remove(j--); + tInputList_sS = tInputList.size(); + } else { + tInputList.remove(i--); + tInputList_sS = tInputList.size(); + break; + } + } + } + } + tInputList.add(mInventory[1]); + ItemStack[] inputs = tInputList.toArray(new ItemStack[0]); + ArrayList<FluidStack> tFluidList = getStoredFluids(); for (int i = 0; i < tFluidList.size() - 1; i++) { for (int j = i + 1; j < tFluidList.size(); j++) { @@ -163,9 +184,9 @@ public class GT_MetaTileEntity_DistillationTower extends GT_MetaTileEntity_Enhan FluidStack[] tFluids = tFluidList.toArray(new FluidStack[0]); if (tFluids.length > 0) { for (FluidStack tFluid : tFluids) { - GT_Recipe tRecipe = GT_Recipe.GT_Recipe_Map.sDistillationRecipes.findRecipe(getBaseMetaTileEntity(), false, gregtech.api.enums.GT_Values.V[tTier], new FluidStack[]{tFluid}); + tRecipe = GT_Recipe.GT_Recipe_Map.sDistillationRecipes.findRecipe(getBaseMetaTileEntity(), false, gregtech.api.enums.GT_Values.V[tTier], new FluidStack[]{tFluid}, inputs); if (tRecipe != null) { - if (tRecipe.isRecipeInputEqual(true, tFluids)) { + if (tRecipe.isRecipeInputEqual(true, tFluids, inputs)) { this.mEfficiency = (10000 - (getIdealStatus() - getRepairStatus()) * 1000); this.mEfficiencyIncrease = 10000; calculateOverclockedNessMulti(tRecipe.mEUt, tRecipe.mDuration, 1, tVoltage); |