aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBlueWeabo <ilia.iliev2005@gmail.com>2023-08-10 11:40:38 +0300
committerGitHub <noreply@github.com>2023-08-10 10:40:38 +0200
commit1311f59453d42bd36532d1c0c2580a5b56e3f7b1 (patch)
tree36782b0fa11f27aad65de1b0ff6435e599b5f470 /src
parent03ca60ddc5a1062a30db8a046065a29327d0d7bd (diff)
downloadGT5-Unofficial-1311f59453d42bd36532d1c0c2580a5b56e3f7b1.tar.gz
GT5-Unofficial-1311f59453d42bd36532d1c0c2580a5b56e3f7b1.tar.bz2
GT5-Unofficial-1311f59453d42bd36532d1c0c2580a5b56e3f7b1.zip
Fix PAs overclocking ulv recipes too much (#2220)
* fix PAs overclocking ulv recipes too much * make sure we save the returned value
Diffstat (limited to 'src')
-rw-r--r--src/main/java/gregtech/api/util/GT_OverclockCalculator.java17
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ProcessingArray.java2
-rw-r--r--src/test/java/gregtech/overclock/GT_OverclockCalculator_UnitTest.java59
3 files changed, 76 insertions, 2 deletions
diff --git a/src/main/java/gregtech/api/util/GT_OverclockCalculator.java b/src/main/java/gregtech/api/util/GT_OverclockCalculator.java
index 0ca9bf3f46..9a1ad267b0 100644
--- a/src/main/java/gregtech/api/util/GT_OverclockCalculator.java
+++ b/src/main/java/gregtech/api/util/GT_OverclockCalculator.java
@@ -4,6 +4,8 @@ import java.util.function.Supplier;
import javax.annotation.Nonnull;
+import gregtech.api.enums.GT_Values;
+
public class GT_OverclockCalculator {
private static final double LOG4 = Math.log(4);
@@ -382,12 +384,25 @@ public class GT_OverclockCalculator {
private void calculateOverclock() {
if (noOverclock) {
- calculateFinalRecipeEUt(calculateHeatDiscountMultiplier());
+ recipeVoltage = calculateFinalRecipeEUt(calculateHeatDiscountMultiplier());
return;
}
if (laserOC && amperageOC) {
throw new IllegalStateException("Tried to calculate overclock with both laser and amperage overclocking");
}
+ // ULV recipes are annoying in that those under 8 eut will overclock extra if there is too much amperage for
+ // them
+ // And those at 2 eut or 1 eut would overclock one extra more.
+ if (!amperageOC) {
+ if (recipeVoltage <= GT_Values.V[0]) {
+ // What we check here is to be able to remove extra amperage on the machine and also make sure one
+ // doesn't get more amperage from it
+ long oldMachineAmperage = machineAmperage;
+ machineAmperage = recipeVoltage <= 2 ? Math.max(parallel / machineAmperage, 1)
+ : Math.max(parallel * 4 / machineAmperage, 1);
+ machineAmperage = Math.min(machineAmperage, oldMachineAmperage);
+ }
+ }
double heatDiscountMultiplier = calculateHeatDiscountMultiplier();
duration = (int) Math.ceil(duration * speedBoost);
if (heatOC) {
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 3c254cf1aa..db17a76711 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
@@ -257,7 +257,7 @@ public class GT_MetaTileEntity_ProcessingArray extends
GT_Recipe_Map recipeMap = getRecipeMap();
logic.setAvailableVoltage(GT_Values.V[tTier] * (recipeMap != null ? recipeMap.mAmperage : 1));
logic.setAvailableAmperage(getMaxParallel());
- logic.setAmperageOC(true);
+ logic.setAmperageOC(false);
}
private void setTierAndMult() {
diff --git a/src/test/java/gregtech/overclock/GT_OverclockCalculator_UnitTest.java b/src/test/java/gregtech/overclock/GT_OverclockCalculator_UnitTest.java
index 58ce077537..e6e74fde7d 100644
--- a/src/test/java/gregtech/overclock/GT_OverclockCalculator_UnitTest.java
+++ b/src/test/java/gregtech/overclock/GT_OverclockCalculator_UnitTest.java
@@ -401,4 +401,63 @@ class GT_OverclockCalculator_UnitTest {
.setParallel(24 * 64);
assertEquals(100, calculator.calculateDurationUnderOneTick());
}
+
+ @Test
+ void ulvRecipeDoesntOverclockExtraWithAmperageWithoutAmperageOC() {
+ GT_OverclockCalculator calculator = new GT_OverclockCalculator().setRecipeEUt(2)
+ .setEUt(V[3])
+ .setParallel(16)
+ .setDuration(20)
+ .setAmperageOC(false)
+ .setAmperage(16)
+ .calculate();
+ assertEquals(32 * 16, calculator.getConsumption(), messageEUt);
+ }
+
+ @Test
+ void ulvRecipeDoesntOverclockExtraWithAmperageWithoutAmperageOCVersion2() {
+ GT_OverclockCalculator calculator = new GT_OverclockCalculator().setRecipeEUt(2)
+ .setEUt(V[3])
+ .setParallel(64)
+ .setDuration(20)
+ .setAmperageOC(false)
+ .setAmperage(16)
+ .calculate();
+ assertEquals(32 * 64, calculator.getConsumption(), messageEUt);
+ }
+
+ @Test
+ void ulvRecipeDoesntOverclockExtraWithAmperageWithoutAmperageOCVersion3() {
+ GT_OverclockCalculator calculator = new GT_OverclockCalculator().setRecipeEUt(2)
+ .setEUt(V[3])
+ .setParallel(16)
+ .setDuration(20)
+ .setAmperageOC(false)
+ .setAmperage(64)
+ .calculate();
+ assertEquals(32 * 16, calculator.getConsumption(), messageEUt);
+ }
+
+ @Test
+ void ulvRecipeDoesntOverclockExtraWithAmperageWithoutAmperageOCVersion4() {
+ GT_OverclockCalculator calculator = new GT_OverclockCalculator().setRecipeEUt(8)
+ .setEUt(V[3])
+ .setParallel(16)
+ .setDuration(20)
+ .setAmperageOC(false)
+ .setAmperage(16)
+ .calculate();
+ assertEquals((8 << 4) * 16, calculator.getConsumption(), messageEUt);
+ }
+
+ @Test
+ void ulvRecipeDoesntOverclockExtraWithAmperageWithoutAmperageOCVersion5() {
+ GT_OverclockCalculator calculator = new GT_OverclockCalculator().setRecipeEUt(8)
+ .setEUt(V[3])
+ .setParallel(16)
+ .setDuration(20)
+ .setAmperageOC(false)
+ .calculate();
+ assertEquals((8 << 2) * 16, calculator.getConsumption(), messageEUt);
+ }
}