From bca969349fc7db4ff20eeb78ae956e2142683b43 Mon Sep 17 00:00:00 2001 From: GDCloud <93287602+GDCloudstrike@users.noreply.github.com> Date: Thu, 12 Jan 2023 15:33:10 +0100 Subject: Add batch mode to gt++ multis (#486) * buffs * Base logic * Fixes * Spotless * Social Experiment * swap separate input bus to screwdriver * It lives * Spotless * Fix Massfab * Fix LPF, packager, replicator * address reviews + spotless * address more requested changes * more fixes * fix fix * Spotless --- .../base/GregtechMeta_MultiBlockBase.java | 40 ++++++++++++++++++++++ .../machines/multi/misc/GMTE_AmazonPackager.java | 19 +++++++++- .../GregtechMetaTileEntity_IndustrialMixer.java | 4 +-- ...gtechMetaTileEntity_IndustrialMultiMachine.java | 18 ++++++++++ .../GregtechMTE_ElementalDuplicator.java | 19 +++++++++- .../GregtechMetaTileEntity_AlloyBlastSmelter.java | 4 +-- .../GregtechMetaTileEntity_MassFabricator.java | 34 ++++++++++++++++++ 7 files changed, 130 insertions(+), 8 deletions(-) (limited to 'src/main/java') diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/GregtechMeta_MultiBlockBase.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/GregtechMeta_MultiBlockBase.java index 7cfe59fa06..b37d042ff9 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/GregtechMeta_MultiBlockBase.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/GregtechMeta_MultiBlockBase.java @@ -169,6 +169,9 @@ public abstract class GregtechMeta_MultiBlockBase 0) { + + float batchMultiplier = 1.0f; + if (mUseMultiparallelMode) { + int extraParallelRecipes = 0; + for (; extraParallelRecipes + parallelRecipes < aMaxParallelRecipes * 128; extraParallelRecipes++) { + if (!tRecipe.isRecipeInputEqual(true, aFluidInputs, aItemInputs)) { + break; + } + } + batchMultiplier = 1.0f + (float) extraParallelRecipes / aMaxParallelRecipes; + parallelRecipes += extraParallelRecipes; + } + // -- Try not to fail after this point - inputs have already been // consumed! -- @@ -337,6 +350,9 @@ public class GregtechMetaTileEntity_MassFabricator // duration. aSpeedBonusPercent = Math.max(-99, aSpeedBonusPercent); float tTimeFactor = 100.0f / (100.0f + aSpeedBonusPercent); + if (mUseMultiparallelMode) { + tTimeFactor *= batchMultiplier; + } this.mMaxProgresstime = (int) (tRecipe.mDuration * tTimeFactor); this.lEUt = (long) Math.ceil(tTotalEUt); this.mEfficiency = (10000 - (getIdealStatus() - getRepairStatus()) * 1000); @@ -480,12 +496,26 @@ public class GregtechMetaTileEntity_MassFabricator return false; } + if (mUseMultiparallelMode) { + int extraParallelRecipes = 0; + for (; + extraParallelRecipes + parallelRecipes < aMaxParallelRecipes * MAX_BATCH_SIZE; + extraParallelRecipes++) { + if (!tRecipe.isRecipeInputEqual(true, aFluidInputs, aItemInputs)) { + break; + } + } + batchMultiplier = 1.0f + (float) extraParallelRecipes / aMaxParallelRecipes; + parallelRecipes += extraParallelRecipes; + } + // -- Try not to fail after this point - inputs have already been consumed! -- // Convert speed bonus to duration multiplier // e.g. 100% speed bonus = 200% speed = 100%/200% = 50% recipe duration. aSpeedBonusPercent = Math.max(-99, aSpeedBonusPercent); float tTimeFactor = 100.0f / (100.0f + aSpeedBonusPercent); + this.mMaxProgresstime = (int) (tRecipe.mDuration * tTimeFactor); this.lEUt = (long) Math.ceil(tTotalEUt); @@ -510,6 +540,10 @@ public class GregtechMetaTileEntity_MassFabricator this.mMaxProgresstime = Math.max(1, this.mMaxProgresstime); + if (mUseMultiparallelMode) { + mMaxProgresstime = (int) Math.ceil(mMaxProgresstime * batchMultiplier); + } + // Collect fluid outputs FluidStack[] tOutputFluids = new FluidStack[tRecipe.mFluidOutputs.length]; for (int h = 0; h < tRecipe.mFluidOutputs.length; h++) { -- cgit