From ece12a200879adfb16fd9d8701f6e75a3d7c072e Mon Sep 17 00:00:00 2001 From: koiNoCirculation <57739338+koiNoCirculation@users.noreply.github.com> Date: Tue, 27 Feb 2024 22:16:04 -0800 Subject: [PATCH] =?UTF-8?q?Let=20remainingFlow=20become=20125%=20of=20real?= =?UTF-8?q?OptFlow,=20rather=20than=20raw=20optimal=E2=80=A6=20(#841)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Let remainingFlow become 125% of realOptFlow, rather than raw optimal flow. This can fix the inconsistance between optimal flow in tooltip and that in turbine. * criteria should be totalFlow != realOptFlow in HP Steam and Steam turbine * fluidIntoPower should be long type, because ichorium huge turbine can generate power greater than Integer.MAX_VALUE on SC Turbine. * Final change. * 1 -> 1L * revert the accidentally refactor in Plasma turbine --------- Co-authored-by: yiteng.liu --- .../turbines/GT_MTE_LargeTurbine_Gas.java | 2 +- .../turbines/GT_MTE_LargeTurbine_Plasma.java | 4 ++-- .../turbines/GT_MTE_LargeTurbine_SCSteam.java | 17 +++++++------ .../turbines/GT_MTE_LargeTurbine_SHSteam.java | 22 ++++++++++------- .../turbines/GT_MTE_LargeTurbine_Steam.java | 24 ++++++++++++------- ...gtechMetaTileEntity_LargerTurbineBase.java | 4 ++-- 6 files changed, 43 insertions(+), 30 deletions(-) diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/GT_MTE_LargeTurbine_Gas.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/GT_MTE_LargeTurbine_Gas.java index 759d7fc2ca..f2fd9a9a0a 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/GT_MTE_LargeTurbine_Gas.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/GT_MTE_LargeTurbine_Gas.java @@ -107,7 +107,7 @@ protected boolean filtersFluid() { } @Override - int fluidIntoPower(ArrayList aFluids, long aOptFlow, int aBaseEff, float[] flowMultipliers) { + long fluidIntoPower(ArrayList aFluids, long aOptFlow, int aBaseEff, float[] flowMultipliers) { if (aFluids.size() >= 1) { int tEU = 0; int actualOptimalFlow = 0; diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/GT_MTE_LargeTurbine_Plasma.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/GT_MTE_LargeTurbine_Plasma.java index 985c4e3e40..d65224f4df 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/GT_MTE_LargeTurbine_Plasma.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/GT_MTE_LargeTurbine_Plasma.java @@ -172,7 +172,7 @@ protected boolean filtersFluid() { } // How much the turbine should be producing with this flow - int newPower = fluidIntoPower(tFluids, optFlow, baseEff, flowMultipliers); + long newPower = fluidIntoPower(tFluids, optFlow, baseEff, flowMultipliers); // Reduce produced power depending on the ratio between fuel value and turbine EU/t with the following // formula: @@ -218,7 +218,7 @@ protected boolean filtersFluid() { } @Override - int fluidIntoPower(ArrayList aFluids, long aOptFlow, int aBaseEff, float[] flowMultipliers) { + long fluidIntoPower(ArrayList aFluids, long aOptFlow, int aBaseEff, float[] flowMultipliers) { if (aFluids.size() >= 1) { aOptFlow *= 800; // CHANGED THINGS HERE, check recipe runs once per 20 ticks int tEU = 0; diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/GT_MTE_LargeTurbine_SCSteam.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/GT_MTE_LargeTurbine_SCSteam.java index ea6753e7d7..627717695b 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/GT_MTE_LargeTurbine_SCSteam.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/GT_MTE_LargeTurbine_SCSteam.java @@ -55,14 +55,17 @@ public int getFuelValue(FluidStack aLiquid) { } @Override - int fluidIntoPower(ArrayList aFluids, long aOptFlow, int aBaseEff, float[] flowMultipliers) { + long fluidIntoPower(ArrayList aFluids, long aOptFlow, int aBaseEff, float[] flowMultipliers) { int tEU = 0; int totalFlow = 0; // Byproducts are based on actual flow int flow = 0; - int remainingFlow = MathUtils.safeInt((long) (aOptFlow * 1.25f)); // Allowed to use up to 125% of optimal flow. - // Variable required outside of loop for + // Variable required outside of loop for // multi-hatch scenarios. - this.realOptFlow = (double) aOptFlow * (double) flowMultipliers[0]; + this.realOptFlow = aOptFlow; + // this.realOptFlow = (double) aOptFlow * (double) flowMultipliers[0]; + // Will there be an multiplier for SC? + int remainingFlow = MathUtils.safeInt((long) (realOptFlow * 1.25f)); // Allowed to use up to + // 125% of optimal flow. storedFluid = 0; FluidStack tSCSteam = FluidRegistry.getFluidStack("supercriticalsteam", 1); @@ -78,8 +81,8 @@ int fluidIntoPower(ArrayList aFluids, long aOptFlow, int aBaseEff, f if (totalFlow <= 0) return 0; tEU = totalFlow; addOutput(GT_ModHandler.getSteam(totalFlow)); - if (totalFlow != aOptFlow) { - float efficiency = 1.0f - Math.abs((totalFlow - aOptFlow) / (float) aOptFlow); + if (totalFlow != realOptFlow) { + float efficiency = 1.0f - Math.abs((totalFlow - (float) realOptFlow) / (float) realOptFlow); // if(totalFlow>aOptFlow){efficiency = 1.0f;} tEU *= efficiency; tEU = Math.max(1, MathUtils.safeInt((long) tEU * (long) aBaseEff / 10000L)); @@ -87,7 +90,7 @@ int fluidIntoPower(ArrayList aFluids, long aOptFlow, int aBaseEff, f tEU = MathUtils.safeInt((long) tEU * (long) aBaseEff / 10000L); } - return (int) Math.min(tEU * 100L, Integer.MAX_VALUE); + return tEU * 100L; } @Override diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/GT_MTE_LargeTurbine_SHSteam.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/GT_MTE_LargeTurbine_SHSteam.java index 0824c7560d..7d36d35c77 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/GT_MTE_LargeTurbine_SHSteam.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/GT_MTE_LargeTurbine_SHSteam.java @@ -64,7 +64,7 @@ public int getFuelValue(FluidStack aLiquid) { } @Override - int fluidIntoPower(ArrayList aFluids, long aOptFlow, int aBaseEff, float[] flowMultipliers) { + long fluidIntoPower(ArrayList aFluids, long aOptFlow, int aBaseEff, float[] flowMultipliers) { if (looseFit) { aOptFlow *= 4; if (aBaseEff > 10000) { @@ -77,13 +77,17 @@ int fluidIntoPower(ArrayList aFluids, long aOptFlow, int aBaseEff, f aBaseEff *= 0.75f; } } - int tEU = 0; + // prevent overflow like that in SC Steam + long tEU = 0; int totalFlow = 0; // Byproducts are based on actual flow int flow = 0; - int remainingFlow = MathUtils.safeInt((long) (aOptFlow * 1.25f)); // Allowed to use up to 125% of optimal flow. - // Variable required outside of loop for + + // Variable required outside of loop for // multi-hatch scenarios. - this.realOptFlow = (double) aOptFlow * (double) flowMultipliers[0]; + this.realOptFlow = aOptFlow * flowMultipliers[0]; + + int remainingFlow = MathUtils.safeInt((long) (realOptFlow * 1.25f)); // Allowed to use up to + // 125% of optimal flow. storedFluid = 0; for (int i = 0; i < aFluids.size() && remainingFlow > 0; i++) { @@ -111,13 +115,13 @@ int fluidIntoPower(ArrayList aFluids, long aOptFlow, int aBaseEff, f if (totalFlow <= 0) return 0; tEU = totalFlow; addOutput(GT_ModHandler.getSteam(totalFlow)); - if (totalFlow != aOptFlow) { - float efficiency = 1.0f - Math.abs((totalFlow - aOptFlow) / (float) aOptFlow); + if (totalFlow != realOptFlow) { + float efficiency = 1.0f - Math.abs((totalFlow - (float) realOptFlow) / (float) realOptFlow); // if(totalFlow>aOptFlow){efficiency = 1.0f;} tEU *= efficiency; - tEU = Math.max(1, MathUtils.safeInt((long) tEU * (long) aBaseEff / 10000L)); + tEU = Math.max(1L, tEU * aBaseEff / 10000L); } else { - tEU = MathUtils.safeInt((long) tEU * (long) aBaseEff / 10000L); + tEU = tEU * aBaseEff / 10000L; } return tEU; diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/GT_MTE_LargeTurbine_Steam.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/GT_MTE_LargeTurbine_Steam.java index 750b62b43e..3173ef8f37 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/GT_MTE_LargeTurbine_Steam.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/GT_MTE_LargeTurbine_Steam.java @@ -73,7 +73,7 @@ public int getFuelValue(FluidStack aLiquid) { } @Override - int fluidIntoPower(ArrayList aFluids, long aOptFlow, int aBaseEff, float[] flowMultipliers) { + long fluidIntoPower(ArrayList aFluids, long aOptFlow, int aBaseEff, float[] flowMultipliers) { if (looseFit) { aOptFlow *= 4; if (aBaseEff > 10000) { @@ -86,13 +86,19 @@ int fluidIntoPower(ArrayList aFluids, long aOptFlow, int aBaseEff, f aBaseEff *= 0.75f; } } - int tEU = 0; + // prevent overflow like that in SC Steam + long tEU = 0; int totalFlow = 0; // Byproducts are based on actual flow int flow = 0; - int remainingFlow = MathUtils.safeInt((long) (aOptFlow * 1.25f)); // Allowed to use up to 125% of optimal flow. - // Variable required outside of loop for + + // Variable required outside of loop for // multi-hatch scenarios. - this.realOptFlow = (double) aOptFlow * (double) flowMultipliers[0]; + this.realOptFlow = aOptFlow * flowMultipliers[0]; + + int remainingFlow = MathUtils.safeInt((long) (realOptFlow * 1.25f)); // Allowed to + // use up to + // 125% of + // optimal flow. storedFluid = 0; for (int i = 0; i < aFluids.size() && remainingFlow > 0; i++) { // loop through each hatch; extract inputs and @@ -120,13 +126,13 @@ int fluidIntoPower(ArrayList aFluids, long aOptFlow, int aBaseEff, f tEU = totalFlow; int waterToOutput = useWater(totalFlow / 160.0f); addOutput(GT_ModHandler.getDistilledWater(waterToOutput)); - if (totalFlow != aOptFlow) { - float efficiency = 1.0f - Math.abs((totalFlow - aOptFlow) / (float) aOptFlow); + if (totalFlow != realOptFlow) { + float efficiency = 1.0f - Math.abs((totalFlow - (float) realOptFlow) / (float) realOptFlow); // if(totalFlow>aOptFlow){efficiency = 1.0f;} tEU *= efficiency; - tEU = Math.max(1, MathUtils.safeInt((long) tEU * (long) aBaseEff / 20000L)); + tEU = Math.max(1L, tEU * aBaseEff / 20000L); } else { - tEU = MathUtils.safeInt((long) tEU * (long) aBaseEff / 20000L); + tEU = tEU * aBaseEff / 20000L; } return tEU; diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/GregtechMetaTileEntity_LargerTurbineBase.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/GregtechMetaTileEntity_LargerTurbineBase.java index dc793a9282..f84cc77d46 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/GregtechMetaTileEntity_LargerTurbineBase.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/GregtechMetaTileEntity_LargerTurbineBase.java @@ -483,7 +483,7 @@ protected void depleteTurbineFromStock(ItemStack aTurbine) { } // How much the turbine should be producing with this flow - int newPower = fluidIntoPower(tFluids, optFlow, baseEff, flowMultipliers); + long newPower = fluidIntoPower(tFluids, optFlow, baseEff, flowMultipliers); long difference = newPower - this.lEUt; // difference between current output and new output // Magic numbers: can always change by at least 10 eu/t, but otherwise by at most 1 percent of the @@ -553,7 +553,7 @@ public int getMaxParallelRecipes() { return (getFullTurbineAssemblies().size()); } - abstract int fluidIntoPower(ArrayList aFluids, long aOptFlow, int aBaseEff, float[] flowMultipliers); + abstract long fluidIntoPower(ArrayList aFluids, long aOptFlow, int aBaseEff, float[] flowMultipliers); @Override public int getDamageToComponent(ItemStack aStack) {