From 328376ff618b14aac4ba57d790066129c8ad95e8 Mon Sep 17 00:00:00 2001 From: Maxim Date: Mon, 17 Jul 2023 10:21:49 +0200 Subject: [PATCH] Implement generic processing logic (#176) * Removed deprecated bartworks interface * Migrated PrAss * Migrated CoAL * Migrated CoolantTower * Migrated EHE * Migrated compacts * Migrated large turbine base * Migrated UCFE * Migrated FRF * Migrated naq gen * Migrated YOTTA * Migrated LEG * Migrated LES * Migrated NA * Updated deps * Updated deps * Derp * Fixed PrAss in precise mode * Added missing GPL getters in NA * Fixed power of NA * Enabled batch mode and void protection in FRF * Addressed reviews * Deleted LongPowerUsageBase in favor of ExtendedPowerMultiBlockBase * Addressed reviews * Limit recipe duration to 1 tick * Updated dep --- dependencies.gradle | 4 +- .../tileEntity/ComponentAssemblyLine.java | 61 ++---- .../blocks/tileEntity/CoolantTower.java | 8 +- .../tileEntity/ExtremeHeatExchanger.java | 12 +- .../blocks/tileEntity/FuelRefineFactory.java | 129 +++++-------- .../tileEntity/LargeEssentiaGenerator.java | 8 +- .../tileEntity/LargeEssentiaSmeltery.java | 14 +- .../blocks/tileEntity/MegaPlasmaTurbine.java | 52 ------ .../blocks/tileEntity/MultiNqGenerator.java | 30 +-- .../blocks/tileEntity/NeutronActivator.java | 102 +++++----- .../blocks/tileEntity/PreciseAssembler.java | 111 ++++------- .../UniversalChemicalFuelEngine.java | 14 +- .../blocks/tileEntity/YottaFluidTank.java | 13 +- .../GT_MetaTileEntity_LargeTurbineBase.java | 30 +-- .../GT_MetaTileEntity_LongPowerUsageBase.java | 174 ------------------ .../tileEntity/base/LargeFusionComputer.java | 18 +- .../base/LargeFusionComputerPP.java | 18 +- .../assets/goodgenerator/lang/en_US.lang | 2 + 18 files changed, 264 insertions(+), 536 deletions(-) delete mode 100644 src/main/java/goodgenerator/blocks/tileEntity/MegaPlasmaTurbine.java delete mode 100644 src/main/java/goodgenerator/blocks/tileEntity/base/GT_MetaTileEntity_LongPowerUsageBase.java diff --git a/dependencies.gradle b/dependencies.gradle index 83281e00..661b34ef 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -1,8 +1,8 @@ // Add your dependencies here dependencies { - api('com.github.GTNewHorizons:GT5-Unofficial:5.09.43.104:dev') - api('com.github.GTNewHorizons:bartworks:0.7.24:dev') + api('com.github.GTNewHorizons:GT5-Unofficial:5.09.43.130:dev') + api('com.github.GTNewHorizons:bartworks:0.7.30:dev') implementation('thaumcraft:Thaumcraft:1.7.10-4.2.3.5:dev') implementation('com.github.GTNewHorizons:GTplusplus:1.9.52:dev') diff --git a/src/main/java/goodgenerator/blocks/tileEntity/ComponentAssemblyLine.java b/src/main/java/goodgenerator/blocks/tileEntity/ComponentAssemblyLine.java index 1dfdfa91..88527f80 100644 --- a/src/main/java/goodgenerator/blocks/tileEntity/ComponentAssemblyLine.java +++ b/src/main/java/goodgenerator/blocks/tileEntity/ComponentAssemblyLine.java @@ -5,7 +5,6 @@ import static gregtech.api.enums.GT_HatchElement.*; import static gregtech.api.enums.Textures.BlockIcons.*; -import java.util.ArrayList; import java.util.stream.Collectors; import java.util.stream.IntStream; @@ -15,16 +14,15 @@ import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.StatCollector; import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidStack; import org.apache.commons.lang3.tuple.Pair; +import org.jetbrains.annotations.NotNull; import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; import com.gtnewhorizon.structurelib.structure.IStructureDefinition; import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; import com.gtnewhorizon.structurelib.structure.StructureDefinition; -import goodgenerator.blocks.tileEntity.base.GT_MetaTileEntity_LongPowerUsageBase; import goodgenerator.loader.Loaders; import goodgenerator.util.MyRecipeAdder; import gregtech.api.GregTech_API; @@ -34,18 +32,20 @@ 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_InputBus; +import gregtech.api.logic.ProcessingLogic; +import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_ExtendedPowerMultiBlockBase; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; import gregtech.api.render.TextureFactory; import gregtech.api.util.GT_Multiblock_Tooltip_Builder; import gregtech.api.util.GT_Recipe; import gregtech.api.util.GT_StructureUtility; import gregtech.api.util.GT_Utility; -public class ComponentAssemblyLine extends GT_MetaTileEntity_LongPowerUsageBase +public class ComponentAssemblyLine extends GT_MetaTileEntity_ExtendedPowerMultiBlockBase implements ISurvivalConstructable { private int casingTier; - private GT_Recipe lastRecipe; protected static final String STRUCTURE_PIECE_MAIN = "main"; private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition .builder() @@ -262,45 +262,24 @@ public boolean isCorrectMachinePart(ItemStack aStack) { } @Override - public boolean checkRecipe(ItemStack aStack) { - this.mEfficiencyIncrease = 10000; - this.mEfficiency = (10000 - (this.getIdealStatus() - this.getRepairStatus()) * 1000); - FluidStack[] tFluids = getStoredFluids().toArray(new FluidStack[0]); - - if (inputSeparation) { - ArrayList tInputList = new ArrayList<>(); - for (GT_MetaTileEntity_Hatch_InputBus tHatch : mInputBusses) { - IGregTechTileEntity tInputBus = tHatch.getBaseMetaTileEntity(); - for (int i = tInputBus.getSizeInventory() - 1; i >= 0; i--) { - if (tInputBus.getStackInSlot(i) != null) tInputList.add(tInputBus.getStackInSlot(i)); + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic() { + + @NotNull + @Override + protected CheckRecipeResult validateRecipe(@NotNull GT_Recipe recipe) { + if (recipe.mSpecialValue > casingTier + 1) { + return CheckRecipeResultRegistry.insufficientMachineTier(recipe.mSpecialValue); } - ItemStack[] tInputs = tInputList.toArray(new ItemStack[0]); - if (processRecipe(tInputs, tFluids)) return true; - else tInputList.clear(); + return CheckRecipeResultRegistry.SUCCESSFUL; } - } else { - ItemStack[] tItems = getStoredInputs().toArray(new ItemStack[0]); - return processRecipe(tItems, tFluids); - } - return false; + }; } - private boolean processRecipe(ItemStack[] tInputs, FluidStack[] tFluidInputs) { - long totalEU = getRealVoltage(); - this.lastRecipe = getRecipeMap() - .findRecipe(getBaseMetaTileEntity(), this.lastRecipe, false, totalEU, tFluidInputs, tInputs); - if (this.lastRecipe == null) return false; - if (this.lastRecipe.mSpecialValue > casingTier + 1) return false; - if (!this.lastRecipe.isRecipeInputEqual(true, tFluidInputs, tInputs)) return false; - - calculateOverclockedNessMulti((long) this.lastRecipe.mEUt, this.lastRecipe.mDuration, 1, totalEU); - if (this.lEUt > 0) { - this.lEUt = (-this.lEUt); - } - - mOutputItems = this.lastRecipe.mOutputs; - updateSlots(); - return true; + @Override + protected void setProcessingLogicPower(ProcessingLogic logic) { + logic.setAvailableVoltage(getMaxInputEu()); + logic.setAvailableAmperage(1); } @Override diff --git a/src/main/java/goodgenerator/blocks/tileEntity/CoolantTower.java b/src/main/java/goodgenerator/blocks/tileEntity/CoolantTower.java index 73d33f96..c1edce0e 100644 --- a/src/main/java/goodgenerator/blocks/tileEntity/CoolantTower.java +++ b/src/main/java/goodgenerator/blocks/tileEntity/CoolantTower.java @@ -10,6 +10,8 @@ import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.fluids.FluidStack; +import org.jetbrains.annotations.NotNull; + import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; import com.gtnewhorizon.structurelib.alignment.constructable.IConstructable; import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; @@ -29,6 +31,8 @@ import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input; import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_MultiInput; import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Output; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; import gregtech.api.render.TextureFactory; import gregtech.api.util.GT_ModHandler; import gregtech.api.util.GT_Multiblock_Tooltip_Builder; @@ -188,7 +192,7 @@ public boolean onRunningTick(ItemStack aStack) { } @Override - public boolean checkRecipe_EM(ItemStack aStack) { + protected @NotNull CheckRecipeResult checkProcessing_EM() { this.mMaxProgresstime = 20; int steam = 0; @@ -196,7 +200,7 @@ public boolean checkRecipe_EM(ItemStack aStack) { steam += maybeDrainHatch(tHatch); } addOutput(GT_ModHandler.getDistilledWater(steam / 160)); - return true; + return CheckRecipeResultRegistry.SUCCESSFUL; } private int maybeDrainHatch(GT_MetaTileEntity_Hatch_Input tHatch) { diff --git a/src/main/java/goodgenerator/blocks/tileEntity/ExtremeHeatExchanger.java b/src/main/java/goodgenerator/blocks/tileEntity/ExtremeHeatExchanger.java index 9e30e744..4abbe010 100644 --- a/src/main/java/goodgenerator/blocks/tileEntity/ExtremeHeatExchanger.java +++ b/src/main/java/goodgenerator/blocks/tileEntity/ExtremeHeatExchanger.java @@ -21,6 +21,8 @@ import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidStack; +import org.jetbrains.annotations.NotNull; + import com.gtnewhorizon.structurelib.alignment.constructable.IConstructable; import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; import com.gtnewhorizon.structurelib.structure.IItemSource; @@ -41,6 +43,8 @@ import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input; import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Output; import gregtech.api.multitileentity.multiblock.casing.Glasses; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; import gregtech.api.render.TextureFactory; import gregtech.api.util.*; @@ -190,12 +194,12 @@ protected GT_Multiblock_Tooltip_Builder createTooltip() { } @Override - public boolean checkRecipe_EM(ItemStack aStack) { + public @NotNull CheckRecipeResult checkProcessing_EM() { tRunningRecipe = null; - if (mHotFluidHatch.getFluid() == null) return true; + if (mHotFluidHatch.getFluid() == null) return CheckRecipeResultRegistry.SUCCESSFUL; MyRecipeAdder.ExtremeHeatExchangerRecipe tRecipe = MyRecipeAdder.mXHeatExchangerFuelMap .get(mHotFluidHatch.getFluid().getFluid()); - if (tRecipe == null) return false; + if (tRecipe == null) return CheckRecipeResultRegistry.NO_RECIPE; tRunningRecipe = tRecipe; this.hotName = mHotFluidHatch.getFluid().getFluid().getName(); int tMaxConsume = tRecipe.getMaxHotFluidConsume(); @@ -224,7 +228,7 @@ public boolean checkRecipe_EM(ItemStack aStack) { mCooledFluidHatch.fill(new FluidStack(tRecipe.getCooledFluid(), tRealConsume), true); this.mEfficiencyIncrease = 160; - return true; + return CheckRecipeResultRegistry.SUCCESSFUL; } @Override diff --git a/src/main/java/goodgenerator/blocks/tileEntity/FuelRefineFactory.java b/src/main/java/goodgenerator/blocks/tileEntity/FuelRefineFactory.java index d386cff3..60dd527f 100644 --- a/src/main/java/goodgenerator/blocks/tileEntity/FuelRefineFactory.java +++ b/src/main/java/goodgenerator/blocks/tileEntity/FuelRefineFactory.java @@ -2,12 +2,8 @@ import static com.gtnewhorizon.structurelib.structure.StructureUtility.*; import static goodgenerator.util.DescTextLocalization.BLUE_PRINT_INFO; -import static gregtech.api.enums.GT_Values.V; import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; -import java.util.ArrayList; -import java.util.List; - import net.minecraft.block.Block; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.ItemStack; @@ -15,11 +11,10 @@ import net.minecraft.util.StatCollector; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidStack; -import com.github.bartimaeusnek.crossmod.tectech.TecTechEnabledMulti; +import org.jetbrains.annotations.NotNull; + import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_EnergyMulti; -import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_EnergyTunnel; import com.gtnewhorizon.structurelib.StructureLibAPI; import com.gtnewhorizon.structurelib.alignment.constructable.IConstructable; import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; @@ -37,15 +32,19 @@ import gregtech.api.interfaces.ITexture; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.logic.ProcessingLogic; import gregtech.api.metatileentity.implementations.*; import gregtech.api.objects.GT_RenderedTexture; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; import gregtech.api.render.TextureFactory; import gregtech.api.util.GT_Multiblock_Tooltip_Builder; +import gregtech.api.util.GT_OverclockCalculator; +import gregtech.api.util.GT_ParallelHelper; import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; public class FuelRefineFactory extends GT_MetaTileEntity_TooltipMultiBlockBase_EM - implements TecTechEnabledMulti, IConstructable, ISurvivalConstructable { + implements IConstructable, ISurvivalConstructable { private IStructureDefinition multiDefinition = null; private int Tier = -1; @@ -54,25 +53,17 @@ public class FuelRefineFactory extends GT_MetaTileEntity_TooltipMultiBlockBase_E public FuelRefineFactory(String name) { super(name); + turnOffMaintenance(); } public FuelRefineFactory(int id, String name, String nameRegional) { super(id, name, nameRegional); + turnOffMaintenance(); } @Override - public List getVanillaEnergyHatches() { - return this.mEnergyHatches; - } - - @Override - public List getTecTechEnergyTunnels() { - return new ArrayList<>(); - } - - @Override - public List getTecTechEnergyMultis() { - return new ArrayList<>(); + public void onFirstTick_EM(IGregTechTileEntity aBaseMetaTileEntity) { + if (!hasMaintenanceChecks) turnOffMaintenance(); } @Override @@ -190,12 +181,6 @@ public boolean checkMachine_EM(IGregTechTileEntity aBaseMetaTileEntity, ItemStac cnt[0] = 0; cnt[1] = 0; cnt[2] = 0; - mWrench = true; - mScrewdriver = true; - mSoftHammer = true; - mHardHammer = true; - mSolderingTool = true; - mCrowbar = true; return structureCheck_EM(mName, 7, 12, 1) && getTier() != -1; } @@ -211,64 +196,38 @@ public int getTier() { } @Override - public boolean checkRecipe_EM(ItemStack aStack) { - - mWrench = true; - mScrewdriver = true; - mSoftHammer = true; - mHardHammer = true; - mSolderingTool = true; - mCrowbar = true; - - ArrayList tFluids = getStoredFluids(); - ArrayList tItems = getStoredInputs(); - MyRecipeAdder.NaqFuelRefineMapper tRecipes = MyRecipeAdder.instance.FRF; - - for (int i = 0; i < tFluids.size() - 1; i++) { - for (int j = i + 1; j < tFluids.size(); j++) { - if (GT_Utility.areFluidsEqual(tFluids.get(i), tFluids.get(j))) { - if ((tFluids.get(i)).amount >= (tFluids.get(j)).amount) { - tFluids.remove(j--); - } else { - tFluids.remove(i--); - break; - } - } - } - } + public GT_Recipe.GT_Recipe_Map getRecipeMap() { + return MyRecipeAdder.instance.FRF; + } - for (int i = 0; i < tItems.size() - 1; i++) { - for (int j = i + 1; j < tItems.size(); j++) { - if (GT_Utility.areStacksEqual(tItems.get(i), tItems.get(j))) { - if ((tItems.get(i)).stackSize >= (tItems.get(j)).stackSize) { - tItems.remove(j--); - } else { - tItems.remove(i--); - break; - } + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic() { + + @NotNull + @Override + protected CheckRecipeResult validateRecipe(@NotNull GT_Recipe recipe) { + if (recipe.mSpecialValue > Tier) { + return CheckRecipeResultRegistry.insufficientMachineTier(recipe.mSpecialValue); } + return CheckRecipeResultRegistry.SUCCESSFUL; } - } - FluidStack[] inFluids = tFluids.toArray(new FluidStack[0]); - ItemStack[] inItems = tItems.toArray(new ItemStack[0]); - this.mEfficiency = 10000; - - long tPower = getMaxInputEnergy_EM(); - byte tTier = (byte) Math.max(1, GT_Utility.getTier(tPower)); - GT_Recipe recipe = tRecipes.findRecipe(this.getBaseMetaTileEntity(), false, V[tTier], inFluids, inItems); - if (recipe != null) { - if (recipe.mSpecialValue > Tier) return false; - if (recipe.isRecipeInputEqual(true, inFluids, inItems)) { - mEUt = recipe.mEUt * (1 << (Tier - recipe.mSpecialValue)); - mEUt = -Math.abs(mEUt); - mMaxProgresstime = recipe.mDuration / (1 << (Tier - recipe.mSpecialValue)); - this.mOutputFluids = recipe.mFluidOutputs; - this.updateSlots(); - return true; + @NotNull + @Override + protected GT_OverclockCalculator createOverclockCalculator(@NotNull GT_Recipe recipe, + @NotNull GT_ParallelHelper helper) { + long ocFactor = 1L << (Tier - recipe.mSpecialValue); + return GT_OverclockCalculator + .ofNoOverclock(((long) recipe.mEUt) * ocFactor, (int) Math.max(recipe.mDuration / ocFactor, 1)); } - } - return false; + }; + } + + @Override + protected void setProcessingLogicPower(ProcessingLogic logic) { + logic.setAvailableVoltage(getMaxInputEu()); + logic.setAvailableAmperage(1); } public final boolean addToFRFList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { @@ -337,6 +296,16 @@ public String[] getInfoData() { return infoData; } + @Override + public boolean supportsBatchMode() { + return true; + } + + @Override + public boolean supportsVoidProtection() { + return true; + } + @Override @SuppressWarnings("ALL") public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, diff --git a/src/main/java/goodgenerator/blocks/tileEntity/LargeEssentiaGenerator.java b/src/main/java/goodgenerator/blocks/tileEntity/LargeEssentiaGenerator.java index a1c02cb8..8b35e0be 100644 --- a/src/main/java/goodgenerator/blocks/tileEntity/LargeEssentiaGenerator.java +++ b/src/main/java/goodgenerator/blocks/tileEntity/LargeEssentiaGenerator.java @@ -16,6 +16,8 @@ import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.fluids.FluidRegistry; +import org.jetbrains.annotations.NotNull; + import com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_DynamoMulti; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_DynamoTunnel; @@ -43,6 +45,8 @@ import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Maintenance; import gregtech.api.objects.GT_RenderedTexture; import gregtech.api.objects.XSTR; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; import gregtech.api.render.TextureFactory; import gregtech.api.util.GT_Multiblock_Tooltip_Builder; import gregtech.api.util.GT_Utility; @@ -237,11 +241,11 @@ public final boolean addLargeEssentiaGeneratorList(IGregTechTileEntity aTileEnti } @Override - public boolean checkRecipe_EM(ItemStack aStack) { + public @NotNull CheckRecipeResult checkProcessing_EM() { this.mEfficiency = 10000; this.mMaxProgresstime = 1; setEssentiaToEUVoltageAndAmp(getVoltageLimit(), getAmpLimit()); - return true; + return CheckRecipeResultRegistry.GENERATING; } public int getVoltageLimit() { diff --git a/src/main/java/goodgenerator/blocks/tileEntity/LargeEssentiaSmeltery.java b/src/main/java/goodgenerator/blocks/tileEntity/LargeEssentiaSmeltery.java index 71ee2203..ce2b6b4c 100644 --- a/src/main/java/goodgenerator/blocks/tileEntity/LargeEssentiaSmeltery.java +++ b/src/main/java/goodgenerator/blocks/tileEntity/LargeEssentiaSmeltery.java @@ -17,6 +17,8 @@ import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; +import org.jetbrains.annotations.NotNull; + import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_EnergyMulti; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; import com.gtnewhorizon.structurelib.alignment.constructable.IConstructable; @@ -37,6 +39,9 @@ import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.metatileentity.implementations.*; import gregtech.api.objects.XSTR; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.recipe.check.SimpleCheckRecipeResult; import gregtech.api.render.TextureFactory; import gregtech.api.util.GT_Multiblock_Tooltip_Builder; import thaumcraft.api.aspects.Aspect; @@ -279,13 +284,12 @@ protected void runMachine(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { } @Override - public boolean checkRecipe_EM(ItemStack aStack) { - if (!isFullPower()) return false; + public @NotNull CheckRecipeResult checkProcessing_EM() { + if (!isFullPower()) return SimpleCheckRecipeResult.ofFailure("node_too_small"); ArrayList tInputList = getStoredInputs(); - // ArrayList tFluidList = getStoredFluids(); - if (tInputList.size() == 0) return false; + if (tInputList.size() == 0) return CheckRecipeResultRegistry.NO_RECIPE; int p = (int) this.mParallel; for (int i = tInputList.size() - 1; i >= 0; i--) { @@ -327,7 +331,7 @@ public boolean checkRecipe_EM(ItemStack aStack) { this.updateSlots(); if (this.mEUt > 0) this.mEUt = -this.mEUt; - return true; + return CheckRecipeResultRegistry.SUCCESSFUL; } private AspectList getEssentia(ItemStack itemStack, int amount) { diff --git a/src/main/java/goodgenerator/blocks/tileEntity/MegaPlasmaTurbine.java b/src/main/java/goodgenerator/blocks/tileEntity/MegaPlasmaTurbine.java deleted file mode 100644 index 364b030b..00000000 --- a/src/main/java/goodgenerator/blocks/tileEntity/MegaPlasmaTurbine.java +++ /dev/null @@ -1,52 +0,0 @@ -package goodgenerator.blocks.tileEntity; - -import java.util.ArrayList; -import java.util.List; - -import net.minecraft.item.ItemStack; - -import com.github.bartimaeusnek.crossmod.tectech.TecTechEnabledMulti; -import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_EnergyMulti; -import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_EnergyTunnel; -import com.gtnewhorizon.structurelib.alignment.constructable.IConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; - -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Energy; -import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_LargeTurbine_Plasma; - -public class MegaPlasmaTurbine extends GT_MetaTileEntity_LargeTurbine_Plasma - implements TecTechEnabledMulti, IConstructable { - - private IStructureDefinition multiDefinition = null; - - public MegaPlasmaTurbine(String name) { - super(name); - } - - public MegaPlasmaTurbine(int id, String name, String nameRegional) { - super(id, name, nameRegional); - } - - @Override - public void construct(ItemStack itemStack, boolean b) {} - - @Override - public String[] getStructureDescription(ItemStack itemStack) { - return new String[0]; - } - - @Override - public List getVanillaEnergyHatches() { - return this.mEnergyHatches; - } - - @Override - public List getTecTechEnergyTunnels() { - return new ArrayList<>(); - } - - @Override - public List getTecTechEnergyMultis() { - return new ArrayList<>(); - } -} diff --git a/src/main/java/goodgenerator/blocks/tileEntity/MultiNqGenerator.java b/src/main/java/goodgenerator/blocks/tileEntity/MultiNqGenerator.java index 81db81a0..7e86888e 100644 --- a/src/main/java/goodgenerator/blocks/tileEntity/MultiNqGenerator.java +++ b/src/main/java/goodgenerator/blocks/tileEntity/MultiNqGenerator.java @@ -17,11 +17,10 @@ import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fluids.FluidStack; +import org.jetbrains.annotations.NotNull; + import com.github.bartimaeusnek.bartworks.util.Pair; -import com.github.bartimaeusnek.crossmod.tectech.TecTechEnabledMulti; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_DynamoMulti; -import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_EnergyMulti; -import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_EnergyTunnel; import com.gtnewhorizon.structurelib.alignment.constructable.IConstructable; import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; import com.gtnewhorizon.structurelib.structure.IItemSource; @@ -43,13 +42,15 @@ import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.metatileentity.implementations.*; import gregtech.api.objects.GT_RenderedTexture; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; import gregtech.api.render.TextureFactory; import gregtech.api.util.GT_Multiblock_Tooltip_Builder; import gregtech.api.util.GT_Recipe; import gregtech.api.util.GT_Utility; public class MultiNqGenerator extends GT_MetaTileEntity_TooltipMultiBlockBase_EM - implements TecTechEnabledMulti, IConstructable, ISurvivalConstructable { + implements IConstructable, ISurvivalConstructable { protected IStructureDefinition multiDefinition = null; protected long leftEnergy = 0; @@ -184,7 +185,7 @@ public void saveNBTData(NBTTagCompound aNBT) { } @Override - public boolean checkRecipe_EM(ItemStack aStack) { + public @NotNull CheckRecipeResult checkProcessing_EM() { ArrayList tFluids = getStoredFluids(); @@ -215,11 +216,11 @@ public boolean checkRecipe_EM(ItemStack aStack) { times = pall; lockedFluid = excitedInfo == null ? null : excitedInfo.getKey(); mMaxProgresstime = tRecipe.mDuration; - return true; + return CheckRecipeResultRegistry.GENERATING; } } - return false; + return CheckRecipeResultRegistry.NO_FUEL_FOUND; } @Override @@ -416,21 +417,6 @@ public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirec return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(44) }; } - @Override - public List getVanillaEnergyHatches() { - return this.mEnergyHatches; - } - - @Override - public List getTecTechEnergyTunnels() { - return new ArrayList<>(); - } - - @Override - public List getTecTechEnergyMultis() { - return new ArrayList<>(); - } - @Override public int survivalConstruct(ItemStack stackSize, int elementBudget, IItemSource source, EntityPlayerMP actor) { if (mMachine) return -1; diff --git a/src/main/java/goodgenerator/blocks/tileEntity/NeutronActivator.java b/src/main/java/goodgenerator/blocks/tileEntity/NeutronActivator.java index 8bbf7d80..e555069e 100644 --- a/src/main/java/goodgenerator/blocks/tileEntity/NeutronActivator.java +++ b/src/main/java/goodgenerator/blocks/tileEntity/NeutronActivator.java @@ -1,7 +1,5 @@ package goodgenerator.blocks.tileEntity; -import static com.github.bartimaeusnek.bartworks.util.RecipeFinderForParallel.getMultiOutput; -import static com.github.bartimaeusnek.bartworks.util.RecipeFinderForParallel.handleParallelRecipe; import static com.gtnewhorizon.structurelib.structure.StructureUtility.*; import static goodgenerator.util.DescTextLocalization.BLUE_PRINT_INFO; import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; @@ -16,9 +14,9 @@ import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.StatCollector; import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidStack; -import com.github.bartimaeusnek.bartworks.util.Pair; +import org.jetbrains.annotations.NotNull; + import com.gtnewhorizon.structurelib.alignment.constructable.IConstructable; import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; import com.gtnewhorizon.structurelib.structure.IItemSource; @@ -46,9 +44,11 @@ import gregtech.api.interfaces.ITexture; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.logic.ProcessingLogic; import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; import gregtech.api.multitileentity.multiblock.casing.Glasses; import gregtech.api.objects.XSTR; +import gregtech.api.recipe.check.CheckRecipeResult; import gregtech.api.render.TextureFactory; import gregtech.api.util.*; @@ -85,50 +85,42 @@ public NeutronActivator(int id, String name, String nameRegional) { } @Override - public boolean checkRecipe_EM(ItemStack aStack) { - this.mEfficiency = 10000; - - FluidStack[] inFluids = getStoredFluids().toArray(new FluidStack[0]); - ItemStack[] inItems = getStoredInputs().toArray(new ItemStack[0]); - int minNKE, maxNKE; - - lastRecipe = getRecipeMap() - .findRecipe(this.getBaseMetaTileEntity(), lastRecipe, false, Integer.MAX_VALUE, inFluids, inItems); - - if (lastRecipe != null) { - minNKE = (lastRecipe.mSpecialValue % 10000) * 1000000; - maxNKE = (lastRecipe.mSpecialValue / 10000) * 1000000; - if (batchMode) { - int pall = handleParallelRecipe(lastRecipe, inFluids, inItems, 128); - if (pall > 0) { - mFloor = minNKE; - mCeil = maxNKE; - mMaxProgresstime = Math.max((int) (lastRecipe.mDuration * pall * Math.pow(0.9, height - 4)), 1); - Pair, ArrayList> Outputs = getMultiOutput(this.lastRecipe, pall); - if (eV <= maxNKE && eV >= minNKE) { - this.mOutputFluids = Outputs.getKey().toArray(new FluidStack[0]); - this.mOutputItems = Outputs.getValue().toArray(new ItemStack[0]); - } else { - this.mOutputFluids = null; - this.mOutputItems = new ItemStack[] { ItemRefer.Radioactive_Waste.get(4) }; - } - return true; + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic() { + + @NotNull + @Override + protected GT_OverclockCalculator createOverclockCalculator(@NotNull GT_Recipe recipe, + @NotNull GT_ParallelHelper helper) { + return GT_OverclockCalculator.ofNoOverclock(recipe) + .setDuration((int) (recipe.mDuration * Math.pow(0.9f, height - 4))); + } + + @NotNull + @Override + public CheckRecipeResult process() { + CheckRecipeResult result = super.process(); + if (!result.wasSuccessful()) { + return result; } - } else if (lastRecipe.isRecipeInputEqual(true, inFluids, inItems)) { - mFloor = minNKE; - mCeil = maxNKE; - mMaxProgresstime = Math.max((int) (lastRecipe.mDuration * Math.pow(0.9, height - 4)), 1); - if (eV <= maxNKE && eV >= minNKE) { - this.mOutputFluids = lastRecipe.mFluidOutputs; - this.mOutputItems = lastRecipe.mOutputs; - } else { - this.mOutputFluids = null; - this.mOutputItems = new ItemStack[] { ItemRefer.Radioactive_Waste.get(4) }; + mFloor = (lastRecipe.mSpecialValue % 10000) * 1000000; + mCeil = (lastRecipe.mSpecialValue / 10000) * 1000000; + if (eV > mCeil || eV < mFloor) { + setOutputItems(ItemRefer.Radioactive_Waste.get(4)); } - return true; + // NA does not consume power, its hatches do. Set it to 0 to be sure + calculatedEut = 0; + return result; } - } - return false; + }; + } + + @Override + protected void setProcessingLogicPower(ProcessingLogic logic) { + // NA does not use power, to prevent GT_ParallelHelper from failing we trick it into thinking + // we have infinite power + logic.setAvailableVoltage(Long.MAX_VALUE); + logic.setAvailableAmperage(1); } @Override @@ -282,6 +274,26 @@ public int getCurrentNeutronKineticEnergy() { return eV; } + @Override + public boolean supportsBatchMode() { + return true; + } + + @Override + public boolean supportsVoidProtection() { + return true; + } + + @Override + public boolean protectsExcessItem() { + return !eSafeVoid; + } + + @Override + public boolean protectsExcessFluid() { + return !eSafeVoid; + } + @Override public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { return new NeutronActivator(this.mName); diff --git a/src/main/java/goodgenerator/blocks/tileEntity/PreciseAssembler.java b/src/main/java/goodgenerator/blocks/tileEntity/PreciseAssembler.java index eb4ad6a7..86b16fe6 100644 --- a/src/main/java/goodgenerator/blocks/tileEntity/PreciseAssembler.java +++ b/src/main/java/goodgenerator/blocks/tileEntity/PreciseAssembler.java @@ -1,15 +1,12 @@ package goodgenerator.blocks.tileEntity; import static com.github.bartimaeusnek.bartworks.util.BW_Util.ofGlassTieredMixed; -import static com.github.bartimaeusnek.bartworks.util.RecipeFinderForParallel.getMultiOutput; -import static com.github.bartimaeusnek.bartworks.util.RecipeFinderForParallel.handleParallelRecipe; import static com.gtnewhorizon.structurelib.structure.StructureUtility.*; import static goodgenerator.util.DescTextLocalization.BLUE_PRINT_INFO; import static gregtech.api.enums.GT_HatchElement.*; import static gregtech.api.metatileentity.BaseTileEntity.TOOLTIP_DELAY; import static gregtech.api.util.GT_StructureUtility.ofFrame; -import java.util.ArrayList; import java.util.Collections; import java.util.stream.Collectors; import java.util.stream.IntStream; @@ -20,9 +17,9 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.StatCollector; import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidStack; -import com.github.bartimaeusnek.bartworks.util.Pair; +import org.jetbrains.annotations.NotNull; + import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_EnergyMulti; import com.gtnewhorizon.structurelib.alignment.constructable.IConstructable; import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; @@ -34,7 +31,6 @@ import com.gtnewhorizons.modularui.api.screen.UIBuildContext; import com.gtnewhorizons.modularui.common.widget.CycleButtonWidget; -import goodgenerator.blocks.tileEntity.base.GT_MetaTileEntity_LongPowerUsageBase; import goodgenerator.client.GUI.GG_UITextures; import goodgenerator.loader.Loaders; import goodgenerator.util.DescTextLocalization; @@ -48,15 +44,20 @@ import gregtech.api.interfaces.ITexture; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.logic.ProcessingLogic; import gregtech.api.metatileentity.GregTechTileClientEvents; import gregtech.api.metatileentity.implementations.*; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; import gregtech.api.render.TextureFactory; import gregtech.api.util.GT_HatchElementBuilder; import gregtech.api.util.GT_Multiblock_Tooltip_Builder; +import gregtech.api.util.GT_OverclockCalculator; +import gregtech.api.util.GT_ParallelHelper; import gregtech.api.util.GT_Recipe; import gregtech.api.util.GT_Utility; -public class PreciseAssembler extends GT_MetaTileEntity_LongPowerUsageBase +public class PreciseAssembler extends GT_MetaTileEntity_ExtendedPowerMultiBlockBase implements IConstructable, ISurvivalConstructable { private static final IIconContainer textureFontOn = new Textures.BlockIcons.CustomIcon("iconsets/OVERLAY_QTANK"); @@ -72,7 +73,6 @@ public class PreciseAssembler extends GT_MetaTileEntity_LongPowerUsageBase 0) { - this.lEUt = (-this.lEUt); + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic() { + + @NotNull + @Override + protected CheckRecipeResult validateRecipe(@NotNull GT_Recipe recipe) { + if (mode == 0) { + if (recipe.mSpecialValue > (casingTier + 1)) { + return CheckRecipeResultRegistry.insufficientMachineTier(recipe.mSpecialValue); } - return true; } + return CheckRecipeResultRegistry.SUCCESSFUL; } - } else { - for (GT_MetaTileEntity_Hatch_InputBus bus : mInputBusses) { - if (!isValidMetaTileEntity(bus) || getStoredItemFromHatch(bus).length < 1) continue; - this.lastRecipe = getRecipeMap().findRecipe( - this.getBaseMetaTileEntity(), - this.lastRecipe, - false, - Math.min(getMachineVoltageLimit(), getRealVoltage()), - inputFluids, - getStoredItemFromHatch(bus)); - if (this.lastRecipe != null) { - this.mEfficiency = (10000 - (this.getIdealStatus() - this.getRepairStatus()) * 1000); - this.mEfficiencyIncrease = 10000; - long fullInput = getRealVoltage(); - int pall = handleParallelRecipe( - this.lastRecipe, - inputFluids, - getStoredItemFromHatch(bus), - (int) Math.min((long) Math.pow(2, 4 + (casingTier + 1)), fullInput / this.lastRecipe.mEUt)); - if (pall <= 0) continue; - Pair, ArrayList> Outputs = getMultiOutput(this.lastRecipe, pall); - mOutputItems = Outputs.getValue().toArray(new ItemStack[0]); - calculateOverclockedNessMulti( - (long) this.lastRecipe.mEUt * (long) pall, - this.lastRecipe.mDuration / 2, - 1, - getRealVoltage()); - this.updateSlots(); - if (this.lEUt > 0) { - this.lEUt = (-this.lEUt); - } - return true; - } + + @NotNull + @Override + protected GT_OverclockCalculator createOverclockCalculator(@NotNull GT_Recipe recipe, + @NotNull GT_ParallelHelper helper) { + return super.createOverclockCalculator(recipe, helper).setSpeedBoost(0.5F); } - } - return false; + }.setMaxParallelSupplier(() -> (int) Math.pow(2, 4 + (casingTier + 1))); + } + + @Override + protected void setProcessingLogicPower(ProcessingLogic logic) { + logic.setAvailableVoltage(getMachineVoltageLimit()); + logic.setAvailableAmperage(getMaxInputAmps()); } @Override @@ -277,15 +242,6 @@ public long getMachineVoltageLimit() { else return GT_Values.V[Math.min(machineTier, energyHatchTier)]; } - public ItemStack[] getStoredItemFromHatch(GT_MetaTileEntity_Hatch_InputBus tHatch) { - ArrayList rList = new ArrayList<>(); - for (int i = tHatch.getBaseMetaTileEntity().getSizeInventory() - 1; i >= 0; i--) { - if (tHatch.getBaseMetaTileEntity().getStackInSlot(i) != null) - rList.add(tHatch.getBaseMetaTileEntity().getStackInSlot(i)); - } - return rList.toArray(new ItemStack[0]); - } - @Override public GT_Recipe.GT_Recipe_Map getRecipeMap() { if (this.mode == 0) return MyRecipeAdder.instance.PA; @@ -476,4 +432,9 @@ public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildCont public boolean isInputSeparationEnabled() { return true; } + + @Override + public boolean supportsBatchMode() { + return true; + } } diff --git a/src/main/java/goodgenerator/blocks/tileEntity/UniversalChemicalFuelEngine.java b/src/main/java/goodgenerator/blocks/tileEntity/UniversalChemicalFuelEngine.java index b38717e9..0bc623c2 100644 --- a/src/main/java/goodgenerator/blocks/tileEntity/UniversalChemicalFuelEngine.java +++ b/src/main/java/goodgenerator/blocks/tileEntity/UniversalChemicalFuelEngine.java @@ -17,6 +17,8 @@ import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fluids.FluidStack; +import org.jetbrains.annotations.NotNull; + import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_DynamoMulti; import com.gtnewhorizon.structurelib.alignment.constructable.IConstructable; import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; @@ -34,6 +36,8 @@ import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.metatileentity.implementations.*; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; import gregtech.api.render.TextureFactory; import gregtech.api.util.GTPP_Recipe; import gregtech.api.util.GT_Multiblock_Tooltip_Builder; @@ -205,7 +209,7 @@ protected GT_Multiblock_Tooltip_Builder createTooltip() { } @Override - public boolean checkRecipe_EM(ItemStack aStack) { + public @NotNull CheckRecipeResult checkProcessing_EM() { ArrayList tFluids = getStoredFluids(); @@ -228,7 +232,7 @@ public boolean checkRecipe_EM(ItemStack aStack) { this.lEUt = (long) ((long) FuelAmount * recipe.mSpecialValue / 20.0D); this.mMaxProgresstime = 20; this.updateSlots(); - return true; + return CheckRecipeResultRegistry.GENERATING; } for (GT_Recipe recipe : tGasFuels) { @@ -245,7 +249,7 @@ public boolean checkRecipe_EM(ItemStack aStack) { this.lEUt = (long) ((long) FuelAmount * recipe.mSpecialValue / 20.0D); this.mMaxProgresstime = 20; this.updateSlots(); - return true; + return CheckRecipeResultRegistry.GENERATING; } if (LoadedList.GTPP) { @@ -264,11 +268,11 @@ public boolean checkRecipe_EM(ItemStack aStack) { this.lEUt = (long) ((long) FuelAmount * recipe.mSpecialValue * 3 / 20.0D); this.mMaxProgresstime = 20; this.updateSlots(); - return true; + return CheckRecipeResultRegistry.GENERATING; } } - return false; + return CheckRecipeResultRegistry.NO_FUEL_FOUND; } @Override diff --git a/src/main/java/goodgenerator/blocks/tileEntity/YottaFluidTank.java b/src/main/java/goodgenerator/blocks/tileEntity/YottaFluidTank.java index 1db70a50..45357016 100644 --- a/src/main/java/goodgenerator/blocks/tileEntity/YottaFluidTank.java +++ b/src/main/java/goodgenerator/blocks/tileEntity/YottaFluidTank.java @@ -21,6 +21,8 @@ import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidTankInfo; +import org.jetbrains.annotations.NotNull; + import com.github.bartimaeusnek.bartworks.API.BorosilicateGlass; import com.github.technus.tectech.TecTech; import com.github.technus.tectech.thing.gui.TecTechUITextures; @@ -47,6 +49,8 @@ import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input; import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Output; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.SimpleCheckRecipeResult; import gregtech.api.render.TextureFactory; import gregtech.api.util.GT_Multiblock_Tooltip_Builder; @@ -141,10 +145,10 @@ public void saveNBTData(NBTTagCompound aNBT) { } @Override - public boolean checkRecipe_EM(ItemStack aStack) { + public @NotNull CheckRecipeResult checkProcessing_EM() { this.mEUt = 0; this.mMaxProgresstime = 20; - return true; + return SimpleCheckRecipeResult.ofSuccess(""); } public boolean getIsVoidExcessEnabled() { @@ -541,6 +545,11 @@ public int survivalConstruct(ItemStack stackSize, int elementBudget, IItemSource return built; } + @Override + protected boolean shouldDisplayCheckRecipeResult() { + return false; + } + @Override protected void drawTexts(DynamicPositionedColumn screenElements, SlotWidget inventorySlot) { super.drawTexts(screenElements, inventorySlot); diff --git a/src/main/java/goodgenerator/blocks/tileEntity/base/GT_MetaTileEntity_LargeTurbineBase.java b/src/main/java/goodgenerator/blocks/tileEntity/base/GT_MetaTileEntity_LargeTurbineBase.java index bb85923c..fe679240 100644 --- a/src/main/java/goodgenerator/blocks/tileEntity/base/GT_MetaTileEntity_LargeTurbineBase.java +++ b/src/main/java/goodgenerator/blocks/tileEntity/base/GT_MetaTileEntity_LargeTurbineBase.java @@ -19,6 +19,8 @@ import net.minecraft.util.StatCollector; import net.minecraftforge.fluids.FluidStack; +import org.jetbrains.annotations.NotNull; + import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; import com.gtnewhorizon.structurelib.structure.IItemSource; import com.gtnewhorizon.structurelib.structure.IStructureDefinition; @@ -30,6 +32,8 @@ import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_EnhancedMultiBlockBase; import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Dynamo; import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Muffler; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; import gregtech.api.util.GT_Utility; import gregtech.common.items.GT_MetaGenerated_Tool_01; @@ -133,12 +137,14 @@ public void loadNBTData(NBTTagCompound aNBT) { } @Override - public boolean checkRecipe(ItemStack aStack) { - if ((counter & 7) == 0 && (aStack == null || !(aStack.getItem() instanceof GT_MetaGenerated_Tool) - || aStack.getItemDamage() < 170 - || aStack.getItemDamage() > 179)) { + public @NotNull CheckRecipeResult checkProcessing() { + ItemStack controllerSlot = getControllerSlot(); + if ((counter & 7) == 0 + && (controllerSlot == null || !(controllerSlot.getItem() instanceof GT_MetaGenerated_Tool) + || controllerSlot.getItemDamage() < 170 + || controllerSlot.getItemDamage() > 179)) { stopMachine(); - return false; + return CheckRecipeResultRegistry.NO_TURBINE_FOUND; } ArrayList tFluids = getStoredFluids(); if (tFluids.size() > 0) { @@ -148,16 +154,18 @@ public boolean checkRecipe(ItemStack aStack) { || this.getBaseMetaTileEntity().hasInventoryBeenModified()) { counter = 0; baseEff = GT_Utility.safeInt( - (long) ((5F + ((GT_MetaGenerated_Tool) aStack.getItem()).getToolCombatDamage(aStack)) * 1000F)); + (long) ((5F + ((GT_MetaGenerated_Tool) controllerSlot.getItem()) + .getToolCombatDamage(controllerSlot)) * 1000F)); optFlow = GT_Utility.safeInt( (long) Math.max( Float.MIN_NORMAL, - ((GT_MetaGenerated_Tool) aStack.getItem()).getToolStats(aStack).getSpeedMultiplier() - * GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mToolSpeed + ((GT_MetaGenerated_Tool) controllerSlot.getItem()).getToolStats(controllerSlot) + .getSpeedMultiplier() + * GT_MetaGenerated_Tool.getPrimaryMaterial(controllerSlot).mToolSpeed * 50)); if (optFlow <= 0 || baseEff <= 0) { stopMachine(); // in case the turbine got removed - return false; + return CheckRecipeResultRegistry.NO_FUEL_FOUND; } } else { counter++; @@ -182,12 +190,12 @@ public boolean checkRecipe(ItemStack aStack) { // stopMachine(); this.mEUt = 0; this.mEfficiency = 0; - return false; + return CheckRecipeResultRegistry.NO_FUEL_FOUND; } else { this.mMaxProgresstime = 1; this.mEfficiencyIncrease = 10; // Overvoltage is handled inside the MultiBlockBase when pushing out to dynamos. no need to do it here. - return true; + return CheckRecipeResultRegistry.GENERATING; } } diff --git a/src/main/java/goodgenerator/blocks/tileEntity/base/GT_MetaTileEntity_LongPowerUsageBase.java b/src/main/java/goodgenerator/blocks/tileEntity/base/GT_MetaTileEntity_LongPowerUsageBase.java deleted file mode 100644 index c36cfd7a..00000000 --- a/src/main/java/goodgenerator/blocks/tileEntity/base/GT_MetaTileEntity_LongPowerUsageBase.java +++ /dev/null @@ -1,174 +0,0 @@ -package goodgenerator.blocks.tileEntity.base; - -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; - -import com.github.bartimaeusnek.bartworks.util.BW_Util; -import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_EnergyMulti; - -import gregtech.api.metatileentity.implementations.*; -import gregtech.api.util.GT_Utility; - -/** - * Base class for multiblocks that supports TT energy hatches. - * - * @param - */ -public abstract class GT_MetaTileEntity_LongPowerUsageBase> - extends GT_MetaTileEntity_ExtendedPowerMultiBlockBase { - - protected GT_MetaTileEntity_LongPowerUsageBase(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - protected GT_MetaTileEntity_LongPowerUsageBase(String aName) { - super(aName); - } - - @Override - public void clearHatches() { - mExoticEnergyHatches.clear(); - super.clearHatches(); - } - - @Override - public long getMaxInputVoltage() { - long rVoltage = 0; - for (GT_MetaTileEntity_Hatch_Energy tHatch : mEnergyHatches) { - if (GT_MetaTileEntity_MultiBlockBase.isValidMetaTileEntity(tHatch)) { - rVoltage += tHatch.maxEUInput(); - } - } - for (GT_MetaTileEntity_Hatch tHatch : mExoticEnergyHatches) { - if (GT_MetaTileEntity_MultiBlockBase.isValidMetaTileEntity(tHatch)) { - rVoltage += tHatch.maxEUInput(); - } - } - return rVoltage; - } - - @Override - public String[] getInfoData() { - return getInfoDataArray(this); - } - - protected long getRealVoltage() { - long rEnergy = 0; - if (mEnergyHatches.size() == 1 && mExoticEnergyHatches.isEmpty()) { - // it works like most of the gt multies - return mEnergyHatches.get(0).getBaseMetaTileEntity().getInputVoltage(); - } - for (GT_MetaTileEntity_Hatch_Energy tHatch : mEnergyHatches) { - if (isValidMetaTileEntity(tHatch)) { - rEnergy += tHatch.maxEUInput() * tHatch.maxAmperesIn(); - } - } - for (GT_MetaTileEntity_Hatch tHatch : mExoticEnergyHatches) { - if (isValidMetaTileEntity(tHatch)) { - rEnergy += tHatch.maxEUInput() * ((GT_MetaTileEntity_Hatch_EnergyMulti) tHatch).Amperes; - } - } - return rEnergy; - } - - @Override - public long getMaxInputAmps() { - long rAmps = 0; - for (GT_MetaTileEntity_Hatch_Energy tHatch : mEnergyHatches) { - if (GT_MetaTileEntity_MultiBlockBase.isValidMetaTileEntity(tHatch)) { - rAmps += tHatch.maxAmperesIn(); - } - } - for (GT_MetaTileEntity_Hatch tHatch : mExoticEnergyHatches) { - if (GT_MetaTileEntity_MultiBlockBase.isValidMetaTileEntity(tHatch)) { - rAmps += ((GT_MetaTileEntity_Hatch_EnergyMulti) tHatch).Amperes; - } - } - return rAmps; - } - - protected String[] getInfoDataArray(GT_MetaTileEntity_MultiBlockBase multiBlockBase) { - int mPollutionReduction = 0; - - for (GT_MetaTileEntity_Hatch_Muffler tHatch : this.mMufflerHatches) { - if (GT_MetaTileEntity_MultiBlockBase.isValidMetaTileEntity(tHatch)) { - mPollutionReduction = Math.max(tHatch.calculatePollutionReduction(100), mPollutionReduction); - } - } - - long storedEnergy = 0; - long maxEnergy = 0; - - for (GT_MetaTileEntity_Hatch_Energy tHatch : this.mEnergyHatches) { - if (GT_MetaTileEntity_MultiBlockBase.isValidMetaTileEntity(tHatch)) { - storedEnergy += tHatch.getBaseMetaTileEntity().getStoredEU(); - maxEnergy += tHatch.getBaseMetaTileEntity().getEUCapacity(); - } - } - for (GT_MetaTileEntity_Hatch tHatch : this.mExoticEnergyHatches) { - if (GT_MetaTileEntity_MultiBlockBase.isValidMetaTileEntity(tHatch)) { - storedEnergy += tHatch.getBaseMetaTileEntity().getStoredEU(); - maxEnergy += tHatch.getBaseMetaTileEntity().getEUCapacity(); - } - } - - long nominalV = getRealVoltage(); - String tName = BW_Util.getTierNameFromVoltage(this.getMaxInputVoltage()); - if (tName.equals("MAX+")) tName = EnumChatFormatting.OBFUSCATED + "MAX+"; - - return new String[] { - StatCollector.translateToLocal("GT5U.multiblock.Progress") + ": " - + EnumChatFormatting.GREEN - + GT_Utility.formatNumbers(this.mProgresstime / 20) - + EnumChatFormatting.RESET - + " s / " - + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(this.mMaxProgresstime / 20) - + EnumChatFormatting.RESET - + " s", - StatCollector.translateToLocal("GT5U.multiblock.energy") + ": " - + EnumChatFormatting.GREEN - + GT_Utility.formatNumbers(storedEnergy) - + EnumChatFormatting.RESET - + " EU / " - + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(maxEnergy) - + EnumChatFormatting.RESET - + " EU", - StatCollector.translateToLocal("GT5U.multiblock.usage") + ": " - + EnumChatFormatting.RED - + GT_Utility.formatNumbers(-this.lEUt) - + EnumChatFormatting.RESET - + " EU/t", - StatCollector.translateToLocal("GT5U.multiblock.mei") + ": " - + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(this.getMaxInputVoltage()) - + EnumChatFormatting.RESET - + " EU/t(*" - + GT_Utility.formatNumbers(this.getMaxInputAmps()) - + "A) = " - + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(nominalV) - + EnumChatFormatting.RESET, - StatCollector.translateToLocal("GT5U.machines.tier") + ": " - + EnumChatFormatting.YELLOW - + tName - + EnumChatFormatting.RESET, - StatCollector.translateToLocal("GT5U.multiblock.problems") + ": " - + EnumChatFormatting.RED - + (this.getIdealStatus() - this.getRepairStatus()) - + EnumChatFormatting.RESET - + " " - + StatCollector.translateToLocal("GT5U.multiblock.efficiency") - + ": " - + EnumChatFormatting.YELLOW - + (float) this.mEfficiency / 100.0F - + EnumChatFormatting.RESET - + " %", - StatCollector.translateToLocal("GT5U.multiblock.pollution") + ": " - + EnumChatFormatting.GREEN - + mPollutionReduction - + EnumChatFormatting.RESET - + " %" }; - } -} diff --git a/src/main/java/goodgenerator/blocks/tileEntity/base/LargeFusionComputer.java b/src/main/java/goodgenerator/blocks/tileEntity/base/LargeFusionComputer.java index 92f51441..c997fd7b 100644 --- a/src/main/java/goodgenerator/blocks/tileEntity/base/LargeFusionComputer.java +++ b/src/main/java/goodgenerator/blocks/tileEntity/base/LargeFusionComputer.java @@ -19,6 +19,8 @@ import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.fluids.FluidStack; +import org.jetbrains.annotations.NotNull; + import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_EnergyMulti; import com.gtnewhorizon.structurelib.alignment.constructable.IConstructable; import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; @@ -43,6 +45,8 @@ import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Output; import gregtech.api.objects.GT_ChunkManager; import gregtech.api.objects.GT_ItemStack; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; import gregtech.api.render.TextureFactory; import gregtech.api.util.GT_HatchElementBuilder; import gregtech.api.util.GT_Recipe; @@ -233,7 +237,7 @@ public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { if (mEfficiency < 0) mEfficiency = 0; if (mRunningOnLoad && checkMachine(aBaseMetaTileEntity, mInventory[1])) { this.mEUStore = (int) aBaseMetaTileEntity.getStoredEU(); - checkRecipe(mInventory[1]); + checkRecipe(); } if (mUpdated) { mUpdate = 50; @@ -305,7 +309,7 @@ public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { mMaxProgresstime = 0; mEfficiencyIncrease = 0; this.mEUStore = (int) getBaseMetaTileEntity().getStoredEU(); - if (aBaseMetaTileEntity.isAllowedToWork()) checkRecipe(mInventory[1]); + if (aBaseMetaTileEntity.isAllowedToWork()) checkRecipe(); } } else { if (aTick % 100 == 0 || aBaseMetaTileEntity.hasWorkJustBeenEnabled() @@ -313,7 +317,7 @@ public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { turnCasingActive(mMaxProgresstime > 0); if (aBaseMetaTileEntity.isAllowedToWork()) { this.mEUStore = (int) getBaseMetaTileEntity().getStoredEU(); - if (checkRecipe(mInventory[1])) { + if (checkRecipe()) { if (this.mEUStore < this.mLastRecipe.mSpecialValue - this.mEUt) { mMaxProgresstime = 0; turnCasingActive(false); @@ -425,7 +429,7 @@ public int overclock(int mStartEnergy) { } @Override - public boolean checkRecipe_EM(ItemStack aStack) { + public @NotNull CheckRecipeResult checkProcessing_EM() { ArrayList tFluidList = getStoredFluids(); @@ -437,7 +441,7 @@ public boolean checkRecipe_EM(ItemStack aStack) { if ((tRecipe == null && !mRunningOnLoad) || (tRecipe != null && (maxEUStore() < tRecipe.mSpecialValue))) { turnCasingActive(false); this.mLastRecipe = null; - return false; + return CheckRecipeResultRegistry.NO_RECIPE; } int pall = handleParallelRecipe( tRecipe, @@ -456,10 +460,10 @@ public boolean checkRecipe_EM(ItemStack aStack) { this.mOutputFluids = getMultiOutput(mLastRecipe, pall).getKey().toArray(new FluidStack[0]); turnCasingActive(true); mRunningOnLoad = false; - return true; + return CheckRecipeResultRegistry.SUCCESSFUL; } } - return false; + return CheckRecipeResultRegistry.NO_RECIPE; } public long getMaxEUInput() { diff --git a/src/main/java/goodgenerator/blocks/tileEntity/base/LargeFusionComputerPP.java b/src/main/java/goodgenerator/blocks/tileEntity/base/LargeFusionComputerPP.java index c3adbe93..ecee690a 100644 --- a/src/main/java/goodgenerator/blocks/tileEntity/base/LargeFusionComputerPP.java +++ b/src/main/java/goodgenerator/blocks/tileEntity/base/LargeFusionComputerPP.java @@ -19,6 +19,8 @@ import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.fluids.FluidStack; +import org.jetbrains.annotations.NotNull; + import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_EnergyMulti; import com.gtnewhorizon.structurelib.alignment.constructable.IConstructable; import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; @@ -43,6 +45,8 @@ import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Output; import gregtech.api.objects.GT_ChunkManager; import gregtech.api.objects.GT_ItemStack; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; import gregtech.api.render.TextureFactory; import gregtech.api.util.AdvFusionPower; import gregtech.api.util.GT_HatchElementBuilder; @@ -232,7 +236,7 @@ public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { if (mEfficiency < 0) mEfficiency = 0; if (mRunningOnLoad && checkMachine(aBaseMetaTileEntity, mInventory[1])) { this.mEUStore = aBaseMetaTileEntity.getStoredEU(); - checkRecipe(mInventory[1]); + checkRecipe(); } if (mUpdated) { mUpdate = 50; @@ -304,7 +308,7 @@ public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { mMaxProgresstime = 0; mEfficiencyIncrease = 0; this.mEUStore = getBaseMetaTileEntity().getStoredEU(); - if (aBaseMetaTileEntity.isAllowedToWork()) checkRecipe(mInventory[1]); + if (aBaseMetaTileEntity.isAllowedToWork()) checkRecipe(); } } else { if (aTick % 100 == 0 || aBaseMetaTileEntity.hasWorkJustBeenEnabled() @@ -312,7 +316,7 @@ public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { turnCasingActive(mMaxProgresstime > 0); if (aBaseMetaTileEntity.isAllowedToWork()) { this.mEUStore = getBaseMetaTileEntity().getStoredEU(); - if (checkRecipe(mInventory[1])) { + if (checkRecipe()) { if (this.mEUStore < this.mLastRecipe.mSpecialValue - this.mEUt) { mMaxProgresstime = 0; turnCasingActive(false); @@ -409,7 +413,7 @@ public boolean onRunningTick(ItemStack aStack) { public abstract int extraPara(int startEnergy); @Override - public boolean checkRecipe_EM(ItemStack aStack) { + public @NotNull CheckRecipeResult checkProcessing_EM() { ArrayList tFluidList = getStoredFluids(); if (tFluidList.size() > 1) { @@ -420,7 +424,7 @@ public boolean checkRecipe_EM(ItemStack aStack) { if ((tRecipe == null && !mRunningOnLoad) || (tRecipe != null && (maxEUStore() < tRecipe.mSpecialValue))) { turnCasingActive(false); this.mLastRecipe = null; - return false; + return CheckRecipeResultRegistry.NO_RECIPE; } int pall = handleParallelRecipe( tRecipe, @@ -439,10 +443,10 @@ public boolean checkRecipe_EM(ItemStack aStack) { this.mOutputFluids = getMultiOutput(mLastRecipe, pall).getKey().toArray(new FluidStack[0]); turnCasingActive(true); mRunningOnLoad = false; - return true; + return CheckRecipeResultRegistry.SUCCESSFUL; } } - return false; + return CheckRecipeResultRegistry.NO_RECIPE; } public long getMaxEUInput() { diff --git a/src/main/resources/assets/goodgenerator/lang/en_US.lang b/src/main/resources/assets/goodgenerator/lang/en_US.lang index a123ae3b..36b2cd0c 100644 --- a/src/main/resources/assets/goodgenerator/lang/en_US.lang +++ b/src/main/resources/assets/goodgenerator/lang/en_US.lang @@ -293,6 +293,8 @@ scanner.info.UX.0=Running Parallel scanner.info.CASS.tier=Casing Tier: #GUI Info +GT5U.gui.text.node_too_small=ยง7Node too small + gui.NeutronSensor.0=Input the value of Neutron Kinetic Energy. gui.NeutronSensor.1=e.g. >5000KeV, <=30MeV . . . gui.NeutronSensor.2=Valid