aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMaxim <maxim235@gmx.de>2023-07-20 17:30:30 +0200
committerGitHub <noreply@github.com>2023-07-20 17:30:30 +0200
commit637ed99e69adc95d6f830647cc0aaeaadbcd3a15 (patch)
treeabef4ea293fdc2714f57ec1b8ffb6510122dd55e /src
parente782c8f767a025db362f16646b3b40d3bcfa3858 (diff)
downloadGT5-Unofficial-637ed99e69adc95d6f830647cc0aaeaadbcd3a15.tar.gz
GT5-Unofficial-637ed99e69adc95d6f830647cc0aaeaadbcd3a15.tar.bz2
GT5-Unofficial-637ed99e69adc95d6f830647cc0aaeaadbcd3a15.zip
Generic processing logic GTPP API (#2155)
* Added getter for speed bonus and eut discount, making the migration of gtpp machines easier * Added getter for current parallel * Added method that exposes recipe finding * Extract setup of processing logic like in super * Added controller slot to input list of processing logic * Adressed review
Diffstat (limited to 'src')
-rw-r--r--src/main/java/gregtech/api/logic/ProcessingLogic.java49
-rw-r--r--src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_ExtendedPowerMultiBlockBase.java19
-rw-r--r--src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_MultiBlockBase.java9
3 files changed, 55 insertions, 22 deletions
diff --git a/src/main/java/gregtech/api/logic/ProcessingLogic.java b/src/main/java/gregtech/api/logic/ProcessingLogic.java
index bcf460e5e1..8a902e4fb5 100644
--- a/src/main/java/gregtech/api/logic/ProcessingLogic.java
+++ b/src/main/java/gregtech/api/logic/ProcessingLogic.java
@@ -4,6 +4,7 @@ import java.util.List;
import java.util.function.Supplier;
import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
import net.minecraft.item.ItemStack;
import net.minecraftforge.fluids.FluidStack;
@@ -49,6 +50,8 @@ public class ProcessingLogic {
protected int calculatedParallels = 0;
protected Supplier<Integer> maxParallelSupplier;
protected int batchSize = 1;
+ protected float euModifier = 1.0f;
+ protected float speedBoost = 1.0f;
public ProcessingLogic() {}
@@ -147,6 +150,16 @@ public class ProcessingLogic {
return this;
}
+ public ProcessingLogic setEuModifier(float modifier) {
+ this.euModifier = modifier;
+ return this;
+ }
+
+ public ProcessingLogic setSpeedBonus(float speedModifier) {
+ this.speedBoost = speedModifier;
+ return this;
+ }
+
/**
* Sets machine used for void protection logic.
*/
@@ -237,10 +250,12 @@ public class ProcessingLogic {
*/
@Nonnull
public CheckRecipeResult process() {
- if (recipeMapSupplier == null) return CheckRecipeResultRegistry.NO_RECIPE;
-
- GT_Recipe_Map recipeMap = recipeMapSupplier.get();
- if (recipeMap == null) return CheckRecipeResultRegistry.NO_RECIPE;
+ GT_Recipe_Map recipeMap;
+ if (recipeMapSupplier == null) {
+ recipeMap = null;
+ } else {
+ recipeMap = recipeMapSupplier.get();
+ }
if (maxParallelSupplier != null) {
maxParallel = maxParallelSupplier.get();
@@ -259,14 +274,7 @@ public class ProcessingLogic {
recipeLockableMachine.getSingleRecipeCheck()
.getRecipe());
} else {
- findRecipeResult = recipeMap.findRecipeWithResult(
- lastRecipe,
- false,
- false,
- availableVoltage,
- inputFluids,
- specialSlotItem,
- inputItems);
+ findRecipeResult = findRecipe(recipeMap);
}
GT_Recipe recipe;
@@ -327,6 +335,16 @@ public class ProcessingLogic {
}
/**
+ * Override if you don't work with regular gt recipe maps
+ */
+ @Nonnull
+ protected FindRecipeResult findRecipe(@Nullable GT_Recipe_Map map) {
+ if (map == null) return FindRecipeResult.NOT_FOUND;
+ return map
+ .findRecipeWithResult(lastRecipe, false, false, availableVoltage, inputFluids, specialSlotItem, inputItems);
+ }
+
+ /**
* Override to tweak parallel logic if needed.
*/
@Nonnull
@@ -338,6 +356,7 @@ public class ProcessingLogic {
.setMachine(machine, protectItems, protectFluids)
.setRecipeLocked(recipeLockableMachine, isRecipeLocked)
.setMaxParallel(maxParallel)
+ .setEUtModifier(euModifier)
.enableBatchMode(batchSize)
.enableConsumption()
.enableOutputCalculation();
@@ -362,6 +381,8 @@ public class ProcessingLogic {
.setDuration(recipe.mDuration)
.setAmperage(availableAmperage)
.setEUt(availableVoltage)
+ .setSpeedBoost(speedBoost)
+ .setEUtDiscount(euModifier)
.setDurationDecreasePerOC(overClockTimeReduction)
.setEUtIncreasePerOC(overClockPowerIncrease);
}
@@ -386,5 +407,9 @@ public class ProcessingLogic {
return calculatedEut;
}
+ public int getCurrentParallels() {
+ return calculatedParallels;
+ }
+
// endregion
}
diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_ExtendedPowerMultiBlockBase.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_ExtendedPowerMultiBlockBase.java
index ef3f587c01..c5c07e5710 100644
--- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_ExtendedPowerMultiBlockBase.java
+++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_ExtendedPowerMultiBlockBase.java
@@ -142,14 +142,8 @@ public abstract class GT_MetaTileEntity_ExtendedPowerMultiBlockBase<T extends GT
CheckRecipeResult result = CheckRecipeResultRegistry.NO_RECIPE;
- processingLogic.clear();
- processingLogic.setMachine(this);
- processingLogic.setRecipeMapSupplier(this::getRecipeMap);
- processingLogic.setVoidProtection(protectsExcessItem(), protectsExcessFluid());
- processingLogic.setBatchSize(isBatchModeEnabled() ? getMaxBatchSize() : 1);
- processingLogic.setRecipeLocking(this, isRecipeLockingEnabled());
- processingLogic.setInputFluids(getStoredFluids());
- setProcessingLogicPower(processingLogic);
+ setupProcessingLogic(processingLogic);
+
if (isInputSeparationEnabled()) {
for (GT_MetaTileEntity_Hatch_InputBus bus : mInputBusses) {
List<ItemStack> inputItems = new ArrayList<>();
@@ -159,12 +153,19 @@ public abstract class GT_MetaTileEntity_ExtendedPowerMultiBlockBase<T extends GT
inputItems.add(stored);
}
}
+ if (getControllerSlot() != null) {
+ inputItems.add(getControllerSlot());
+ }
processingLogic.setInputItems(inputItems.toArray(new ItemStack[0]));
result = processingLogic.process();
if (result.wasSuccessful()) break;
}
} else {
- processingLogic.setInputItems(getStoredInputs());
+ List<ItemStack> inputItems = getStoredInputs();
+ if (getControllerSlot() != null) {
+ inputItems.add(getControllerSlot());
+ }
+ processingLogic.setInputItems(inputItems);
result = processingLogic.process();
}
diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_MultiBlockBase.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_MultiBlockBase.java
index 36266d6329..d0cc1d3d94 100644
--- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_MultiBlockBase.java
+++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_MultiBlockBase.java
@@ -703,12 +703,19 @@ public abstract class GT_MetaTileEntity_MultiBlockBase extends MetaTileEntity
inputItems.add(stored);
}
}
+ if (getControllerSlot() != null) {
+ inputItems.add(getControllerSlot());
+ }
processingLogic.setInputItems(inputItems.toArray(new ItemStack[0]));
result = processingLogic.process();
if (result.wasSuccessful()) break;
}
} else {
- processingLogic.setInputItems(getStoredInputs());
+ List<ItemStack> inputItems = getStoredInputs();
+ if (getControllerSlot() != null) {
+ inputItems.add(getControllerSlot());
+ }
+ processingLogic.setInputItems(inputItems);
result = processingLogic.process();
}