aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/common/tileentities
diff options
context:
space:
mode:
authorBlueWeabo <ilia.iliev2005@gmail.com>2023-07-28 13:13:57 +0300
committerGitHub <noreply@github.com>2023-07-28 12:13:57 +0200
commit4647e2e8be384582ad09c4f97a4c50dff4e05e4b (patch)
tree24093c64b1c8f8e700b12efedb0c197ca8a1a62e /src/main/java/gregtech/common/tileentities
parentc82e45b0aa87ba9e982a770fab08040d9e6d9459 (diff)
downloadGT5-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/tileentities')
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ElectricBlastFurnace.java12
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_FusionComputer.java20
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_NanoForge.java1
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_PCBFactory.java74
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ProcessingArray.java22
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_PyrolyseOven.java8
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_TranscendentPlasmaMixer.java5
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