diff options
author | BlueWeabo <ilia.iliev2005@gmail.com> | 2023-07-28 13:13:57 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-07-28 12:13:57 +0200 |
commit | 4647e2e8be384582ad09c4f97a4c50dff4e05e4b (patch) | |
tree | 24093c64b1c8f8e700b12efedb0c197ca8a1a62e /src/main/java/gregtech/common | |
parent | c82e45b0aa87ba9e982a770fab08040d9e6d9459 (diff) | |
download | GT5-Unofficial-4647e2e8be384582ad09c4f97a4c50dff4e05e4b.tar.gz GT5-Unofficial-4647e2e8be384582ad09c4f97a4c50dff4e05e4b.tar.bz2 GT5-Unofficial-4647e2e8be384582ad09c4f97a4c50dff4e05e4b.zip |
Add more API to ParallelHelper and rework OverclockCalculator (#2185)
* refactor OC calc
* somewhat refactor parallel helper
* fix PA not OCing correctly
no clue why it wasn't using super and then setting the duration again.
* make use of new api to make fusion cleaner
* make batch mode actually dynamic
* add another reason for 0 parallel
* move variables around to try and group them together
* address reviews
* add overclocking past 1 tick by adding parallels
* add null check and make a basic calculator to prevent npe
* check null recipeMap supplier
* address reviews
* addressing of reviews
* make it possible to call some OverclockCalculator methods through static methods
* address reviews
* make sure one doesn't get too many OCs when calculatin under 1 tick
* add api for custom duration under one tick and fix batch mode doing 0 ticking
* fix not calculating duration under 1 tick correctly
* spotless
* try to have correct eut consumption
* address review
* make sure mk5 fusion is said in nei
* fix eutCalculating under one tick way too much and address reviews
* remove roundUp voltage
Diffstat (limited to 'src/main/java/gregtech/common')
7 files changed, 38 insertions, 104 deletions
diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ElectricBlastFurnace.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ElectricBlastFurnace.java index d7c34af6d0..2a4bb0f907 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ElectricBlastFurnace.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ElectricBlastFurnace.java @@ -55,7 +55,6 @@ 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; @@ -195,12 +194,11 @@ public class GT_MetaTileEntity_ElectricBlastFurnace extends @Nonnull @Override - protected GT_OverclockCalculator createOverclockCalculator(@Nonnull GT_Recipe recipe, - @Nonnull GT_ParallelHelper helper) { - return super.createOverclockCalculator(recipe, helper).setRecipeHeat(recipe.mSpecialValue) - .setMultiHeat(mHeatingCapacity) - .enableHeatOC() - .enableHeatDiscount(); + protected GT_OverclockCalculator createOverclockCalculator(@Nonnull GT_Recipe recipe) { + return super.createOverclockCalculator(recipe).setRecipeHeat(recipe.mSpecialValue) + .setMachineHeat(mHeatingCapacity) + .setHeatOC(true) + .setHeatDiscount(true); } @Override diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_FusionComputer.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_FusionComputer.java index 9b390ae822..d7dcaea6ae 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_FusionComputer.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_FusionComputer.java @@ -300,26 +300,13 @@ public abstract class GT_MetaTileEntity_FusionComputer @Override protected GT_ParallelHelper createParallelHelper(@NotNull GT_Recipe recipe) { // When the fusion first loads and is still processing, it does the recipe check without consuming. - if (mRunningOnLoad) { - return new GT_ParallelHelper().setRecipe(recipe) - .setItemInputs(inputItems) - .setFluidInputs(inputFluids) - .setAvailableEUt(availableVoltage * availableAmperage) - .setMachine(machine, protectItems, protectFluids) - .setRecipeLocked(recipeLockableMachine, isRecipeLocked) - .setMaxParallel(maxParallel) - .enableBatchMode(batchSize) - .enableOutputCalculation(); - } - return super.createParallelHelper(recipe); + return super.createParallelHelper(recipe).setConsumption(!mRunningOnLoad); } @NotNull @Override - protected GT_OverclockCalculator createOverclockCalculator(@NotNull GT_Recipe recipe, - @NotNull GT_ParallelHelper helper) { - return super.createOverclockCalculator(recipe, helper) - .limitOverclockCount(overclock(recipe.mSpecialValue)); + protected GT_OverclockCalculator createOverclockCalculator(@NotNull GT_Recipe recipe) { + return super.createOverclockCalculator(recipe).limitOverclockCount(overclock(recipe.mSpecialValue)); } @NotNull @@ -351,6 +338,7 @@ public abstract class GT_MetaTileEntity_FusionComputer protected void setProcessingLogicPower(ProcessingLogic logic) { logic.setAvailableVoltage(GT_Values.V[tier()]); logic.setAvailableAmperage(1); + logic.setAmperageOC(false); } public abstract int tierOverclock(); diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_NanoForge.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_NanoForge.java index ca68d3ad4c..b30fb6495f 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_NanoForge.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_NanoForge.java @@ -248,6 +248,7 @@ public class GT_MetaTileEntity_NanoForge extends protected void setProcessingLogicPower(ProcessingLogic logic) { logic.setAvailableVoltage(getMaxInputEu()); logic.setAvailableAmperage(1); + logic.setAmperageOC(false); } @Override diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_PCBFactory.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_PCBFactory.java index 2cfbd1a30e..dff6b7d3b4 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_PCBFactory.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_PCBFactory.java @@ -557,28 +557,18 @@ public class GT_MetaTileEntity_PCBFactory extends return CheckRecipeResultRegistry.SUCCESSFUL; } - @Override - protected double calculateDuration(@Nonnull GT_Recipe recipe, @Nonnull GT_ParallelHelper helper, - @Nonnull GT_OverclockCalculator calculator) { - if (isNoOC()) { - return super.calculateDuration(recipe, helper, calculator) * getDurationMultiplierFromRoughness(); - } - return super.calculateDuration(recipe, helper, calculator); - } - @Nonnull @Override - protected GT_OverclockCalculator createOverclockCalculator(@Nonnull GT_Recipe recipe, - @Nonnull GT_ParallelHelper helper) { + protected GT_OverclockCalculator createOverclockCalculator(@Nonnull GT_Recipe recipe) { if (isNoOC()) { - return GT_OverclockCalculator.ofNoOverclock(recipe); + return GT_OverclockCalculator.ofNoOverclock(recipe) + .setEUtDiscount((float) Math.sqrt(mUpgradesInstalled == 0 ? 1 : mUpgradesInstalled)) + .setSpeedBoost(getDurationMultiplierFromRoughness()); } - GT_OverclockCalculator calculator = super.createOverclockCalculator(recipe, helper) + GT_OverclockCalculator calculator = super.createOverclockCalculator(recipe) .setEUtDiscount((float) Math.sqrt(mUpgradesInstalled == 0 ? 1 : mUpgradesInstalled)) - .setSpeedBoost(getDurationMultiplierFromRoughness()); - if (mOCTier2) { - calculator.enablePerfectOC(); - } + .setSpeedBoost(getDurationMultiplierFromRoughness()) + .setDurationDecreasePerOC(mOCTier2 ? 2 : 1); return calculator; } @@ -586,42 +576,24 @@ public class GT_MetaTileEntity_PCBFactory extends @Override protected GT_ParallelHelper createParallelHelper(@Nonnull GT_Recipe recipe) { return super.createParallelHelper(recipe) - .setEUtModifier((float) Math.sqrt(mUpgradesInstalled == 0 ? 1 : mUpgradesInstalled)); - } - - @NotNull - @Override - public CheckRecipeResult process() { - CheckRecipeResult result = super.process(); - - if (!result.wasSuccessful()) { - return result; - } - - mCurrentParallel = calculatedParallels; - - ItemStack controllerStack = getControllerSlot(); - - if (mCurrentParallel > 0) { - ArrayList<ItemStack> chancedOutputs = new ArrayList<>(); - int remainingEfficiency = getMaxEfficiency(controllerStack); - for (int j = 0; j < (int) Math.ceil(getMaxEfficiency(controllerStack) / 10000.0f); j++) { - int chanced = getBaseMetaTileEntity().getRandomNumber(10000); - if (chanced >= remainingEfficiency) { - continue; - } - for (ItemStack tOutput : outputItems) { - if (tOutput == null) { - break; + .setEUtModifier((float) Math.sqrt(mUpgradesInstalled == 0 ? 1 : mUpgradesInstalled)) + .setCustomItemOutputCalculation(currentParallel -> { + ArrayList<ItemStack> chancedOutputs = new ArrayList<>(); + for (int i = 0; i < currentParallel; i++) { + for (ItemStack item : recipe.mOutputs) { + int remainingEfficiency = getMaxEfficiency(getControllerSlot()); + while (remainingEfficiency > 0) { + if (getBaseMetaTileEntity().getRandomNumber(10000) >= remainingEfficiency) { + remainingEfficiency -= 10000; + continue; + } + chancedOutputs.add(item); + remainingEfficiency -= 10000; + } } - chancedOutputs.add(tOutput); } - remainingEfficiency -= 10000; - } - setOutputItems(chancedOutputs.toArray(new ItemStack[0])); - } - - return result; + return chancedOutputs.toArray(new ItemStack[0]); + }); } }; } 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 8d3504a1d7..3c254cf1aa 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 @@ -70,8 +70,6 @@ import gregtech.api.recipe.check.SimpleCheckRecipeResult; import gregtech.api.render.TextureFactory; import gregtech.api.util.GT_ExoticEnergyInputHelper; 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_ProcessingArray_Manager; import gregtech.api.util.GT_Recipe; import gregtech.api.util.GT_Recipe.GT_Recipe_Map; @@ -237,25 +235,6 @@ public class GT_MetaTileEntity_ProcessingArray extends protected ProcessingLogic createProcessingLogic() { return new ProcessingLogic() { - @Override - protected double calculateDuration(@Nonnull GT_Recipe recipe, @Nonnull GT_ParallelHelper helper, - @Nonnull GT_OverclockCalculator calculator) { - return calculator.getDuration(); - } - - @Nonnull - @Override - protected GT_OverclockCalculator createOverclockCalculator(@Nonnull GT_Recipe recipe, - @Nonnull GT_ParallelHelper helper) { - return new GT_OverclockCalculator().setRecipeEUt(recipe.mEUt) - .setParallel((int) Math.floor(helper.getCurrentParallel() / helper.getDurationMultiplierDouble())) - .setDuration((int) Math.ceil(recipe.mDuration * helper.getDurationMultiplierDouble())) - .setAmperage(availableAmperage) - .setEUt(availableVoltage) - .setDurationDecreasePerOC(overClockTimeReduction) - .setEUtIncreasePerOC(overClockPowerIncrease); - } - @Nonnull @Override protected CheckRecipeResult validateRecipe(@Nonnull GT_Recipe recipe) { @@ -278,6 +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); } private void setTierAndMult() { diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_PyrolyseOven.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_PyrolyseOven.java index c76ac32863..2d601b9055 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_PyrolyseOven.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_PyrolyseOven.java @@ -164,12 +164,8 @@ public class GT_MetaTileEntity_PyrolyseOven @NotNull @Override public CheckRecipeResult process() { - CheckRecipeResult result = super.process(); - if (!result.wasSuccessful()) { - return result; - } - duration = Math.max(duration * 2 / (1 + coilHeat.getTier()), 1); - return result; + setSpeedBonus(2f / (1 + coilHeat.getTier())); + return super.process(); } }; } diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_TranscendentPlasmaMixer.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_TranscendentPlasmaMixer.java index 54f903299e..be034dbc1f 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_TranscendentPlasmaMixer.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_TranscendentPlasmaMixer.java @@ -43,7 +43,6 @@ 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.common.items.GT_IntegratedCircuit_Item; @@ -164,8 +163,7 @@ public class GT_MetaTileEntity_TranscendentPlasmaMixer @Nonnull @Override - protected GT_OverclockCalculator createOverclockCalculator(@Nonnull GT_Recipe recipe, - @Nonnull GT_ParallelHelper helper) { + protected GT_OverclockCalculator createOverclockCalculator(@Nonnull GT_Recipe recipe) { return GT_OverclockCalculator.ofNoOverclock(recipe); } @@ -191,6 +189,7 @@ public class GT_MetaTileEntity_TranscendentPlasmaMixer // The voltage is only used for recipe finding logic.setAvailableVoltage(Long.MAX_VALUE); logic.setAvailableAmperage(1); + logic.setAmperageOC(false); } @Override |