diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/steam/LargeBoilerMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/steam/LargeBoilerMachine.java index a2ebd69e59..412fb0e0a8 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/steam/LargeBoilerMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/steam/LargeBoilerMachine.java @@ -2,28 +2,35 @@ import com.gregtechceu.gtceu.api.GTValues; import com.gregtechceu.gtceu.api.capability.recipe.*; -import com.gregtechceu.gtceu.api.gui.GuiTextures; import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.api.machine.TickableSubscription; import com.gregtechceu.gtceu.api.machine.feature.IExplosionMachine; +import com.gregtechceu.gtceu.api.machine.feature.IMuiMachine; import com.gregtechceu.gtceu.api.machine.feature.IRecipeLogicMachine; -import com.gregtechceu.gtceu.api.machine.feature.multiblock.IDisplayUIMachine; import com.gregtechceu.gtceu.api.machine.multiblock.WorkableMultiblockMachine; import com.gregtechceu.gtceu.api.machine.trait.RecipeLogic; +import com.gregtechceu.gtceu.api.mui.base.drawable.IKey; +import com.gregtechceu.gtceu.api.mui.factory.PosGuiData; +import com.gregtechceu.gtceu.api.mui.utils.Alignment; +import com.gregtechceu.gtceu.api.mui.value.sync.PanelSyncManager; +import com.gregtechceu.gtceu.api.mui.widget.ParentWidget; +import com.gregtechceu.gtceu.api.mui.widgets.ButtonWidget; +import com.gregtechceu.gtceu.api.mui.widgets.TextWidget; +import com.gregtechceu.gtceu.api.mui.widgets.layout.Flow; import com.gregtechceu.gtceu.api.recipe.GTRecipe; import com.gregtechceu.gtceu.api.recipe.ingredient.FluidIngredient; import com.gregtechceu.gtceu.api.recipe.modifier.ModifierFunction; import com.gregtechceu.gtceu.api.recipe.modifier.RecipeModifier; +import com.gregtechceu.gtceu.client.mui.screen.ModularPanel; +import com.gregtechceu.gtceu.client.mui.screen.UISettings; import com.gregtechceu.gtceu.common.data.GTMaterials; +import com.gregtechceu.gtceu.common.data.mui.GTMuiWidgets; +import com.gregtechceu.gtceu.common.mui.GTGuiTextures; import com.gregtechceu.gtceu.config.ConfigHolder; import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; import com.gregtechceu.gtceu.syncsystem.annotations.SyncToClient; -import com.lowdragmc.lowdraglib.gui.texture.IGuiTexture; -import com.lowdragmc.lowdraglib.gui.util.ClickData; -import com.lowdragmc.lowdraglib.gui.widget.ComponentPanelWidget; - import net.minecraft.ChatFormatting; import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.core.Direction; @@ -35,6 +42,7 @@ import net.minecraft.util.Mth; import net.minecraft.world.level.material.Fluids; +import com.mojang.blaze3d.platform.InputConstants; import lombok.Getter; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -45,7 +53,7 @@ @ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault -public class LargeBoilerMachine extends WorkableMultiblockMachine implements IExplosionMachine, IDisplayUIMachine { +public class LargeBoilerMachine extends WorkableMultiblockMachine implements IExplosionMachine, IMuiMachine { public static final int TICKS_PER_STEAM_GENERATION = 5; @@ -53,9 +61,14 @@ public class LargeBoilerMachine extends WorkableMultiblockMachine implements IEx public final int maxTemperature, heatSpeed; @SaveField @Getter - private int currentTemperature, throttle; + @SyncToClient + private int currentTemperature; + @SaveField + @Getter + private int throttle; @Nullable protected TickableSubscription temperatureSubs; + @SyncToClient private int steamGenerated; public LargeBoilerMachine(IMachineBlockEntity holder, int maxTemperature, int heatSpeed, Object... args) { @@ -118,10 +131,12 @@ protected void updateCurrentTemperature() { if (getOffsetTimer() % 10 == 0) { if (currentTemperature < getMaxTemperature()) { currentTemperature = Mth.clamp(currentTemperature + heatSpeed * 10, 0, getMaxTemperature()); + syncDataHolder.markClientSyncFieldDirty("currentTemperature"); } } } else if (currentTemperature > 0) { currentTemperature -= getCoolDownRate(); + syncDataHolder.markClientSyncFieldDirty("currentTemperature"); } if (isFormed() && getOffsetTimer() % TICKS_PER_STEAM_GENERATION == 0) { @@ -129,6 +144,7 @@ protected void updateCurrentTemperature() { (ConfigHolder.INSTANCE.machines.largeBoilers.steamPerWater * 100); if (currentTemperature < 100) { steamGenerated = 0; + syncDataHolder.markClientSyncFieldDirty("steamGenerated"); } else if (maxDrain > 0) { // if maxDrain is 0 because throttle is too low, skip trying to make steam // drain water var drainWater = List.of(FluidIngredient.of(Fluids.WATER, maxDrain)); @@ -145,6 +161,7 @@ protected void updateCurrentTemperature() { maxDrain - drainWater.get(0).getAmount(); steamGenerated = drained * ConfigHolder.INSTANCE.machines.largeBoilers.steamPerWater; + syncDataHolder.markClientSyncFieldDirty("steamGenerated"); if (drained > 0) { // fill steam @@ -187,6 +204,7 @@ public boolean onWorking() { boolean value = super.onWorking(); if (currentTemperature < getMaxTemperature()) { currentTemperature = Math.max(1, currentTemperature); + syncDataHolder.markClientSyncFieldDirty("currentTemperature"); updateSteamSubscription(); } return value; @@ -198,7 +216,7 @@ public boolean onWorking() { * Does not modify recipe. Real recipe duration is determined by * {@link LargeBoilerRecipeLogic#modifyFuelBurnTime(int)} *
- * + * * @param machine a {@link LargeBoilerMachine} * @param recipe recipe * @return A {@link ModifierFunction} for the given Large Boiler and recipe @@ -208,10 +226,11 @@ public static ModifierFunction recipeModifier(@NotNull MetaMachine machine, @Not } public void addDisplayText(List