From 44824520ab2140f561a741bc486bc2f3459da2fe Mon Sep 17 00:00:00 2001 From: Glease <4586901+Glease@users.noreply.github.com> Date: Mon, 27 Feb 2023 13:49:05 +0800 Subject: implement save & load for single recipe lock (#1771) * implement save & load for single recipe lock * fix fat finger * fix NPE * disable machine if old locked recipe is gone * address reviews * spotless --- .../GT_MetaTileEntity_LargeChemicalReactor.java | 5 ++++ .../multi/GT_MetaTileEntity_ProcessingArray.java | 29 ++++++++++++++++------ .../multi/GT_MetaTileEntity_PyrolyseOven.java | 5 ++++ 3 files changed, 32 insertions(+), 7 deletions(-) (limited to 'src/main/java/gregtech/common/tileentities') diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeChemicalReactor.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeChemicalReactor.java index 76d2ce80d3..70d9250206 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeChemicalReactor.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeChemicalReactor.java @@ -128,6 +128,11 @@ public class GT_MetaTileEntity_LargeChemicalReactor return true; } + @Override + public GT_Recipe.GT_Recipe_Map getRecipeMap() { + return GT_Recipe.GT_Recipe_Map.sMultiblockChemicalRecipes; + } + @Override public boolean checkRecipe(ItemStack aStack) { long tVoltage = getMaxInputVoltage(); diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ProcessingArray.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ProcessingArray.java index f5f485b53e..b988f1f7a5 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ProcessingArray.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ProcessingArray.java @@ -53,6 +53,7 @@ import gregtech.api.util.GT_Multiblock_Tooltip_Builder; import gregtech.api.util.GT_ProcessingArray_Manager; import gregtech.api.util.GT_Recipe; import gregtech.api.util.GT_Recipe.GT_Recipe_Map; +import gregtech.api.util.GT_Single_Recipe_Check; import gregtech.api.util.GT_Single_Recipe_Check_Processing_Array; import gregtech.api.util.GT_Utility; import gregtech.common.blocks.GT_Item_Machines; @@ -194,13 +195,7 @@ public class GT_MetaTileEntity_ProcessingArray } if (mLastRecipe == null) { - IMetaTileEntity aMachine = GT_Item_Machines.getMetaTileEntity(mInventory[1]); - if (aMachine != null) tTier = ((GT_MetaTileEntity_TieredMachineBlock) aMachine).mTier; - mMult = 0; - if (downtierUEV && tTier > 9) { - tTier--; // Lowers down the tier by 1 to allow for bigger parallel - mMult = 2; // Multiplies Parallels by 4x, keeping the energy cost - } + setTierAndMult(); } ArrayList tFluidList = getStoredFluids(); FluidStack[] tFluids = tFluidList.toArray(new FluidStack[0]); @@ -223,9 +218,24 @@ public class GT_MetaTileEntity_ProcessingArray return false; } + private void setTierAndMult() { + IMetaTileEntity aMachine = GT_Item_Machines.getMetaTileEntity(mInventory[1]); + if (aMachine != null) tTier = ((GT_MetaTileEntity_TieredMachineBlock) aMachine).mTier; + mMult = 0; + if (downtierUEV && tTier > 9) { + tTier--; // Lowers down the tier by 1 to allow for bigger parallel + mMult = 2; // Multiplies Parallels by 4x, keeping the energy cost + } + } + public boolean processLockedRecipe() { GT_Single_Recipe_Check_Processing_Array tSingleRecipeCheck = (GT_Single_Recipe_Check_Processing_Array) mSingleRecipeCheck; + if (mLastRecipe == null) { + setTierAndMult(); + mLastRecipe = tSingleRecipeCheck.getRecipe(); + } + int machines = mInventory[1].stackSize << mMult; int parallel = tSingleRecipeCheck.checkRecipeInputs(true, machines); @@ -409,6 +419,11 @@ public class GT_MetaTileEntity_ProcessingArray mEUPerTick = aNBT.getLong("mEUPerTick"); } + @Override + protected GT_Single_Recipe_Check loadSingleRecipeChecker(NBTTagCompound aNBT) { + return GT_Single_Recipe_Check_Processing_Array.tryLoad(this, getRecipeMap(), aNBT, mInventory[1]); + } + @Override public final void onScrewdriverRightClick(byte aSide, EntityPlayer aPlayer, float aX, float aY, float aZ) { if (aPlayer.isSneaking()) { diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_PyrolyseOven.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_PyrolyseOven.java index f87664a5fb..6d0b194612 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_PyrolyseOven.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_PyrolyseOven.java @@ -129,6 +129,11 @@ public class GT_MetaTileEntity_PyrolyseOven extends return true; } + @Override + public GT_Recipe.GT_Recipe_Map getRecipeMap() { + return GT_Recipe.GT_Recipe_Map.sPyrolyseRecipes; + } + @Override public boolean checkRecipe(ItemStack aStack) { long tVoltage = getMaxInputVoltage(); -- cgit