Skip to content

Commit 6894266

Browse files
Large Boiler throttle modifies burn time of current fuel (#4258)
1 parent fdbdf69 commit 6894266

File tree

1 file changed

+49
-16
lines changed

1 file changed

+49
-16
lines changed

src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/steam/LargeBoilerMachine.java

Lines changed: 49 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
package com.gregtechceu.gtceu.common.machine.multiblock.steam;
22

33
import com.gregtechceu.gtceu.api.GTValues;
4-
import com.gregtechceu.gtceu.api.capability.recipe.FluidRecipeCapability;
5-
import com.gregtechceu.gtceu.api.capability.recipe.IO;
6-
import com.gregtechceu.gtceu.api.capability.recipe.IRecipeHandler;
4+
import com.gregtechceu.gtceu.api.capability.recipe.*;
75
import com.gregtechceu.gtceu.api.gui.GuiTextures;
86
import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity;
97
import com.gregtechceu.gtceu.api.machine.MetaMachine;
108
import com.gregtechceu.gtceu.api.machine.TickableSubscription;
119
import com.gregtechceu.gtceu.api.machine.feature.IExplosionMachine;
10+
import com.gregtechceu.gtceu.api.machine.feature.IRecipeLogicMachine;
1211
import com.gregtechceu.gtceu.api.machine.feature.multiblock.IDisplayUIMachine;
1312
import com.gregtechceu.gtceu.api.machine.multiblock.WorkableMultiblockMachine;
13+
import com.gregtechceu.gtceu.api.machine.trait.RecipeLogic;
1414
import com.gregtechceu.gtceu.api.recipe.GTRecipe;
1515
import com.gregtechceu.gtceu.api.recipe.ingredient.FluidIngredient;
1616
import com.gregtechceu.gtceu.api.recipe.modifier.ModifierFunction;
@@ -21,6 +21,7 @@
2121
import com.lowdragmc.lowdraglib.gui.texture.IGuiTexture;
2222
import com.lowdragmc.lowdraglib.gui.util.ClickData;
2323
import com.lowdragmc.lowdraglib.gui.widget.ComponentPanelWidget;
24+
import com.lowdragmc.lowdraglib.syncdata.annotation.DescSynced;
2425
import com.lowdragmc.lowdraglib.syncdata.annotation.Persisted;
2526
import com.lowdragmc.lowdraglib.syncdata.field.ManagedFieldHolder;
2627

@@ -39,8 +40,7 @@
3940
import org.jetbrains.annotations.NotNull;
4041
import org.jetbrains.annotations.Nullable;
4142

42-
import java.util.ArrayList;
43-
import java.util.List;
43+
import java.util.*;
4444

4545
import javax.annotation.ParametersAreNonnullByDefault;
4646

@@ -73,9 +73,15 @@ public ManagedFieldHolder getFieldHolder() {
7373
return MANAGED_FIELD_HOLDER;
7474
}
7575

76-
//////////////////////////////////////
77-
// ****** Recipe Logic ******//
78-
//////////////////////////////////////
76+
@Override
77+
protected RecipeLogic createRecipeLogic(Object... args) {
78+
return new LargeBoilerMachine.LargeBoilerRecipeLogic(this);
79+
}
80+
81+
@Override
82+
public LargeBoilerMachine.LargeBoilerRecipeLogic getRecipeLogic() {
83+
return (LargeBoilerMachine.LargeBoilerRecipeLogic) super.getRecipeLogic();
84+
}
7985

8086
@Override
8187
public void onStructureFormed() {
@@ -193,21 +199,16 @@ public boolean onWorking() {
193199
/**
194200
* Recipe Modifier for <b>Large Boiler Machines</b> - can be used as a valid {@link RecipeModifier}
195201
* <p>
196-
* Duration is multiplied by {@code 100 / throttle} if throttle is less than 100
202+
* Does not modify recipe. Real recipe duration is determined by
203+
* {@link LargeBoilerRecipeLogic#modifyFuelBurnTime(int)}
197204
* </p>
198205
*
199206
* @param machine a {@link LargeBoilerMachine}
200207
* @param recipe recipe
201208
* @return A {@link ModifierFunction} for the given Large Boiler and recipe
202209
*/
203210
public static ModifierFunction recipeModifier(@NotNull MetaMachine machine, @NotNull GTRecipe recipe) {
204-
if (!(machine instanceof LargeBoilerMachine largeBoilerMachine)) {
205-
return RecipeModifier.nullWrongType(LargeBoilerMachine.class, machine);
206-
}
207-
if (largeBoilerMachine.throttle == 100) return ModifierFunction.IDENTITY;
208-
return ModifierFunction.builder()
209-
.durationMultiplier(100.0 / largeBoilerMachine.throttle)
210-
.build();
211+
return ModifierFunction.IDENTITY;
211212
}
212213

213214
public void addDisplayText(List<Component> textList) {
@@ -237,11 +238,43 @@ public void handleDisplayClick(String componentData, ClickData clickData) {
237238
if (!clickData.isRemote) {
238239
int result = componentData.equals("add") ? 5 : -5;
239240
this.throttle = Mth.clamp(throttle + result, 25, 100);
241+
this.getRecipeLogic().modifyFuelBurnTime(this.throttle);
240242
}
241243
}
242244

243245
@Override
244246
public IGuiTexture getScreenTexture() {
245247
return GuiTextures.DISPLAY_STEAM.get(maxTemperature > 800);
246248
}
249+
250+
public static class LargeBoilerRecipeLogic extends RecipeLogic {
251+
252+
@Persisted
253+
@DescSynced
254+
@Getter
255+
int currentThrottle;
256+
257+
public LargeBoilerRecipeLogic(IRecipeLogicMachine machine) {
258+
super(machine);
259+
currentThrottle = 100;
260+
}
261+
262+
@Override
263+
public void setupRecipe(GTRecipe recipe) {
264+
super.setupRecipe(recipe);
265+
if (lastRecipe != null) {
266+
currentThrottle = ((LargeBoilerMachine) machine).getThrottle();
267+
duration = (int) Math.round(lastRecipe.duration / (currentThrottle / 100.0));
268+
}
269+
}
270+
271+
public void modifyFuelBurnTime(int newThrottle) {
272+
if (lastRecipe != null) {
273+
double newThrottleMultiplier = (double) currentThrottle / newThrottle;
274+
duration = (int) Math.round(lastRecipe.duration / (newThrottle / 100.0));
275+
progress = (int) Math.round(newThrottleMultiplier * progress);
276+
}
277+
currentThrottle = newThrottle;
278+
}
279+
}
247280
}

0 commit comments

Comments
 (0)