diff options
Diffstat (limited to 'src')
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); + } } |