Fixed Large turbine logic (dupe)

Closes #186
This commit is contained in:
TheDarkDnKTv 2023-08-06 22:13:02 +09:00
parent afa90814d9
commit d92448a63a

View file

@ -246,21 +246,19 @@ public abstract class AbstractTurbine extends MTEWorkableMultiblock {
public static class MultiTurbineLogic extends GeneratorRecipeLogic {
protected int consumptionModifier;
protected MultiTurbineLogic(IntSupplier efficiency, RecipeMap<?> recipeMap, IRecipeWorkable machine) {
super(efficiency, recipeMap, machine);
metadataVerifier = rec -> rec.getInputs().isEmpty() && rec.getAllOutputs().isEmpty(); // only fluid recipes allow
}
protected boolean depleteInputs() {
int fluidMult = (int) (getMachine().maxEUOutput() / leftEU);
if (previousRecipe != null) {
for (FluidStack fluid : previousRecipe.getFluidInputs()) {
FluidStack dummy = fluid.copy();
dummy.amount *= fluidMult;
if (!getMachine().depleteInput(dummy))
return false;
}
for (FluidStack fluid : previousRecipe.getFluidInputs()) {
FluidStack dummy = fluid.copy();
dummy.amount *= consumptionModifier;
if (!getMachine().depleteInput(dummy))
return false;
}
return true;
@ -308,12 +306,15 @@ public abstract class AbstractTurbine extends MTEWorkableMultiblock {
@Override
protected boolean updateRecipeProgress() {
if ((getMachine().getBaseMetaTileEntity().getTimer() % 10 != 0 || getMachine().checkAir()) && depleteInputs()) {
if ((getMachine().getBaseMetaTileEntity().getTimer() % 10 != 0 || getMachine().checkAir())) {
getMachine().onRecipeUpdateTick();
int EU = (int) (getMachine().maxEUOutput() * (efficiency.getAsInt() / 100.0D));
getMachine().addEnergyOutput(EU);
} else getMachine().stopMachine();
long EU = Math.min((long) (getMachine().maxEUOutput() * (efficiency.getAsInt() / 100.0D)), leftEU);
leftEU -= EU;
getMachine().addEnergyOutput((int) EU);
return true;
}
getMachine().stopMachine();
return false;
}
@ -322,13 +323,19 @@ public abstract class AbstractTurbine extends MTEWorkableMultiblock {
if (getMachine().spaceForOutput(recipe)) {
previousRecipe = recipe;
progressTime = 1;
leftEU = (long) recipe.getDuration() * recipe.getEUt();
int recipeBaseEu = recipe.getDuration() * recipe.getEUt();
consumptionModifier = Math.max(1, getMachine().maxEUOutput() / recipeBaseEu);
leftEU = (long) recipeBaseEu * consumptionModifier;
maxProgressTime = (int) Math.ceil(leftEU * 1.0D / getMachine().maxEUOutput());
triggerMachine(true);
getMachine().startProcess();
} else {
getMachine().stopMachine();
if (this.isActive() && this.depleteInputs()) {
return;
}
}
getMachine().stopMachine();
}
@Override