Skip to content

Commit a5289fc

Browse files
committed
steam boilers, more recipe type fixing, clean up other steam machine themes
1 parent 158aeac commit a5289fc

File tree

11 files changed

+243
-168
lines changed

11 files changed

+243
-168
lines changed

src/main/java/com/gregtechceu/gtceu/api/machine/steam/SteamBoilerMachine.java

Lines changed: 90 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -2,37 +2,39 @@
22

33
import com.gregtechceu.gtceu.api.GTValues;
44
import com.gregtechceu.gtceu.api.capability.recipe.IO;
5-
import com.gregtechceu.gtceu.api.gui.GuiTextures;
6-
import com.gregtechceu.gtceu.api.gui.UITemplate;
7-
import com.gregtechceu.gtceu.api.gui.widget.TankWidget;
85
import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity;
96
import com.gregtechceu.gtceu.api.machine.MetaMachine;
107
import com.gregtechceu.gtceu.api.machine.TickableSubscription;
11-
import com.gregtechceu.gtceu.api.machine.feature.IDataInfoProvider;
12-
import com.gregtechceu.gtceu.api.machine.feature.IExplosionMachine;
13-
import com.gregtechceu.gtceu.api.machine.feature.IInteractedMachine;
14-
import com.gregtechceu.gtceu.api.machine.feature.IUIMachine;
8+
import com.gregtechceu.gtceu.api.machine.feature.*;
159
import com.gregtechceu.gtceu.api.machine.trait.NotifiableFluidTank;
10+
import com.gregtechceu.gtceu.api.mui.base.drawable.IKey;
11+
import com.gregtechceu.gtceu.api.mui.drawable.UITexture;
12+
import com.gregtechceu.gtceu.api.mui.factory.PosGuiData;
13+
import com.gregtechceu.gtceu.api.mui.theme.ThemeAPI;
14+
import com.gregtechceu.gtceu.api.mui.value.sync.FluidSlotSyncHandler;
15+
import com.gregtechceu.gtceu.api.mui.value.sync.PanelSyncManager;
16+
import com.gregtechceu.gtceu.api.mui.widgets.ProgressWidget;
17+
import com.gregtechceu.gtceu.api.mui.widgets.SlotGroupWidget;
18+
import com.gregtechceu.gtceu.api.mui.widgets.layout.Row;
19+
import com.gregtechceu.gtceu.api.mui.widgets.slot.FluidSlot;
1620
import com.gregtechceu.gtceu.api.recipe.GTRecipe;
1721
import com.gregtechceu.gtceu.api.recipe.modifier.ModifierFunction;
1822
import com.gregtechceu.gtceu.api.recipe.modifier.RecipeModifier;
23+
import com.gregtechceu.gtceu.client.mui.screen.ModularPanel;
24+
import com.gregtechceu.gtceu.client.mui.screen.UISettings;
1925
import com.gregtechceu.gtceu.common.data.GTMaterials;
26+
import com.gregtechceu.gtceu.common.data.mui.GTMuiWidgets;
2027
import com.gregtechceu.gtceu.common.item.PortableScannerBehavior;
28+
import com.gregtechceu.gtceu.common.mui.GTGuiTextures;
29+
import com.gregtechceu.gtceu.common.mui.GTGuis;
2130
import com.gregtechceu.gtceu.config.ConfigHolder;
2231
import com.gregtechceu.gtceu.syncsystem.annotations.SaveField;
2332
import com.gregtechceu.gtceu.syncsystem.annotations.SyncToClient;
2433
import com.gregtechceu.gtceu.utils.FormattingUtil;
2534
import com.gregtechceu.gtceu.utils.GTTransferUtils;
2635
import com.gregtechceu.gtceu.utils.ISubscription;
2736

28-
import com.lowdragmc.lowdraglib.gui.modular.ModularUI;
29-
import com.lowdragmc.lowdraglib.gui.texture.ProgressTexture;
30-
import com.lowdragmc.lowdraglib.gui.widget.ImageWidget;
31-
import com.lowdragmc.lowdraglib.gui.widget.LabelWidget;
32-
import com.lowdragmc.lowdraglib.gui.widget.ProgressWidget;
33-
3437
import net.minecraft.MethodsReturnNonnullByDefault;
35-
import net.minecraft.client.resources.language.I18n;
3638
import net.minecraft.core.BlockPos;
3739
import net.minecraft.core.Direction;
3840
import net.minecraft.core.particles.ParticleTypes;
@@ -66,7 +68,7 @@
6668
@ParametersAreNonnullByDefault
6769
@MethodsReturnNonnullByDefault
6870
public abstract class SteamBoilerMachine extends SteamWorkableMachine
69-
implements IUIMachine, IExplosionMachine, IDataInfoProvider,
71+
implements IMuiMachine, IExplosionMachine, IDataInfoProvider,
7072
IInteractedMachine {
7173

7274
@SaveField
@@ -186,7 +188,9 @@ protected void updateCurrentTemperature() {
186188
currentTemperature -= getCoolDownRate();
187189
timeBeforeCoolingDown = getCooldownInterval();
188190
}
189-
} else--timeBeforeCoolingDown;
191+
} else {
192+
--timeBeforeCoolingDown;
193+
}
190194

191195
if (getOffsetTimer() % 10 == 0) {
192196
if (currentTemperature >= 100) {
@@ -200,7 +204,9 @@ protected void updateCurrentTemperature() {
200204
}
201205
if (this.hasNoWater && hasDrainedWater) {
202206
doExplosion(2.0f);
203-
} else this.hasNoWater = !hasDrainedWater;
207+
} else {
208+
this.hasNoWater = !hasDrainedWater;
209+
}
204210
if (filledSteam == 0 && hasDrainedWater && getLevel() instanceof ServerLevel serverLevel) {
205211
final float x = getPos().getX() + 0.5F;
206212
final float y = getPos().getY() + 0.5F;
@@ -223,9 +229,12 @@ protected void updateCurrentTemperature() {
223229
// bypass capability check for special case behavior
224230
steamTank.drainInternal(FluidType.BUCKET_VOLUME * 4, FluidAction.EXECUTE);
225231
}
226-
} else this.hasNoWater = false;
232+
} else {
233+
this.hasNoWater = false;
234+
}
227235
}
228236
updateSteamSubscription();
237+
syncDataHolder.markClientSyncFieldDirty("currentTemperature");
229238
}
230239

231240
protected int getCooldownInterval() {
@@ -313,31 +322,72 @@ public InteractionResult onUse(BlockState state, Level world, BlockPos pos, Play
313322
//////////////////////////////////////
314323
// ********** GUI ***********//
315324
//////////////////////////////////////
316-
317325
@Override
318-
public ModularUI createUI(Player entityPlayer) {
319-
return new ModularUI(176, 166, this, entityPlayer)
320-
.background(GuiTextures.BACKGROUND_STEAM.get(isHighPressure))
321-
.widget(new LabelWidget(6, 6, getBlockState().getBlock().getDescriptionId()))
322-
.widget(new ProgressWidget(this::getTemperaturePercent, 96, 26, 10, 54)
323-
.setProgressTexture(GuiTextures.PROGRESS_BAR_BOILER_EMPTY.get(isHighPressure),
324-
GuiTextures.PROGRESS_BAR_BOILER_HEAT)
325-
.setFillDirection(ProgressTexture.FillDirection.DOWN_TO_UP)
326-
.setDynamicHoverTips(pct -> I18n.get("gtceu.multiblock.large_boiler.temperature",
327-
currentTemperature + 274, getMaxTemperature() + 274)))
328-
.widget(new TankWidget(waterTank.getStorages()[0], 83, 26, 10, 54, false, true)
329-
.setShowAmount(false)
330-
.setFillDirection(ProgressTexture.FillDirection.DOWN_TO_UP)
331-
.setBackground(GuiTextures.PROGRESS_BAR_BOILER_EMPTY.get(isHighPressure)))
332-
.widget(new TankWidget(steamTank.getStorages()[0], 70, 26, 10, 54, true, false)
333-
.setShowAmount(false)
334-
.setFillDirection(ProgressTexture.FillDirection.DOWN_TO_UP)
335-
.setBackground(GuiTextures.PROGRESS_BAR_BOILER_EMPTY.get(isHighPressure)))
336-
.widget(new ImageWidget(43, 44, 18, 18, GuiTextures.CANISTER_OVERLAY_STEAM.get(isHighPressure)))
337-
.widget(UITemplate.bindPlayerInventory(entityPlayer.getInventory(),
338-
GuiTextures.SLOT_STEAM.get(isHighPressure), 7, 84, true));
326+
public ModularPanel buildUI(PosGuiData data, PanelSyncManager syncManager, UISettings settings) {
327+
ModularPanel panel = GTGuis.createPanel(this, 176, 166);
328+
String theme = this.getDefinition().getThemeId();
329+
UITexture backgroundTexture = (UITexture) ThemeAPI.INSTANCE.getTheme(theme).getPanelTheme().getTheme()
330+
.getBackground();
331+
panel.child(GTMuiWidgets.createTitleBar(this.getDefinition(), 176, (UITexture) backgroundTexture));
332+
333+
UITexture progressTexture = isHighPressure() ? GTGuiTextures.PROGRESS_BAR_BOILER_EMPTY_STEEL :
334+
GTGuiTextures.PROGRESS_BAR_BOILER_EMPTY_BRONZE;
335+
336+
panel.child(new Row()
337+
.top(12)
338+
.left(50)
339+
.coverChildren()
340+
.childPadding(10)
341+
.child(new FluidSlot()
342+
.syncHandler(new FluidSlotSyncHandler(waterTank.getStorages()[0]))
343+
.size(14, 54)
344+
.displayAmount(false))
345+
.child(new FluidSlot()
346+
.syncHandler(new FluidSlotSyncHandler(steamTank.getStorages()[0])
347+
.canFillSlot(false).canDrainSlot(true))
348+
.alwaysShowFull(true)
349+
.size(14, 54)
350+
.displayAmount(false))
351+
.child(new ProgressWidget()
352+
.texture(progressTexture,
353+
GTGuiTextures.PROGRESS_BAR_BOILER_HEAT, 54)
354+
.size(14, 54)
355+
.progress(this::getTemperaturePercent)
356+
.direction(ProgressWidget.Direction.UP)
357+
.tooltipAutoUpdate(true)
358+
.tooltipBuilder((r) -> r.addLine(IKey
359+
.lang(Component.translatable("gtceu.fluid.temperature", getCurrentTemperature()))))))
360+
.child(SlotGroupWidget.playerInventory(false).bottom(7).left(7));
361+
362+
return panel;
339363
}
340364

365+
/*
366+
* @Override
367+
* public ModularUI createUI(Player entityPlayer) {
368+
* return new ModularUI(176, 166, this, entityPlayer)
369+
* .background(GuiTextures.BACKGROUND_STEAM.get(isHighPressure))
370+
* .widget(new LabelWidget(6, 6, getBlockState().getBlock().getDescriptionId()))
371+
* .widget(new ProgressWidget(this::getTemperaturePercent, 96, 26, 10, 54)
372+
* .setProgressTexture(GuiTextures.PROGRESS_BAR_BOILER_EMPTY.get(isHighPressure),
373+
* GuiTextures.PROGRESS_BAR_BOILER_HEAT)
374+
* .setFillDirection(ProgressTexture.FillDirection.DOWN_TO_UP)
375+
* .setDynamicHoverTips(pct -> I18n.get("gtceu.multiblock.large_boiler.temperature",
376+
* currentTemperature + 274, getMaxTemperature() + 274)))
377+
* .widget(new TankWidget(waterTank.getStorages()[0], 83, 26, 10, 54, false, true)
378+
* .setShowAmount(false)
379+
* .setFillDirection(ProgressTexture.FillDirection.DOWN_TO_UP)
380+
* .setBackground(GuiTextures.PROGRESS_BAR_BOILER_EMPTY.get(isHighPressure)))
381+
* .widget(new TankWidget(steamTank.getStorages()[0], 70, 26, 10, 54, true, false)
382+
* .setShowAmount(false)
383+
* .setFillDirection(ProgressTexture.FillDirection.DOWN_TO_UP)
384+
* .setBackground(GuiTextures.PROGRESS_BAR_BOILER_EMPTY.get(isHighPressure)))
385+
* .widget(new ImageWidget(43, 44, 18, 18, GuiTextures.CANISTER_OVERLAY_STEAM.get(isHighPressure)))
386+
* .widget(UITemplate.bindPlayerInventory(entityPlayer.getInventory(),
387+
* GuiTextures.SLOT_STEAM.get(isHighPressure), 7, 84, true));
388+
* }
389+
*/
390+
341391
//////////////////////////////////////
342392
// ********* Client *********//
343393
//////////////////////////////////////

src/main/java/com/gregtechceu/gtceu/api/mui/drawable/GuiDraw.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -468,6 +468,7 @@ public static void drawFluidTexture(GuiGraphics graphics, FluidStack content, fl
468468
int fluidColor = IClientFluidTypeExtensions.of(fluid).getTintColor(content);
469469
graphics.setColor(Color.getRedF(fluidColor), Color.getGreenF(fluidColor), Color.getBlueF(fluidColor),
470470
Color.getAlphaF(fluidColor));
471+
RenderSystem.setShader(GameRenderer::getPositionTexShader);
471472
drawTiledTexture(graphics.pose().last().pose(), InventoryMenu.BLOCK_ATLAS, x0, y0, width, height,
472473
sprite.getU0(), sprite.getV0(),
473474
sprite.getU1(), sprite.getV1(), sprite.contents().width(), sprite.contents().height(), z);

src/main/java/com/gregtechceu/gtceu/api/mui/widgets/slot/FluidSlot.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ public class FluidSlot extends Widget<FluidSlot>
6161
private FluidSlotSyncHandler syncHandler;
6262
private int contentOffsetX = 1, contentOffsetY = 1;
6363
private boolean alwaysShowFull = true;
64+
private boolean displayAmount = true;
6465
@Nullable
6566
private IDrawable overlayTexture = null;
6667

@@ -194,7 +195,7 @@ public void draw(ModularGuiContext context, WidgetThemeEntry<?> widgetTheme) {
194195
if (this.overlayTexture != null) {
195196
this.overlayTexture.drawAtZeroPadded(context, getArea(), getActiveWidgetTheme(widgetTheme, isHovering()));
196197
}
197-
if (content != null && !content.isEmpty() && this.syncHandler.controlsAmount()) {
198+
if (content != null && !content.isEmpty() && this.syncHandler.controlsAmount() && this.displayAmount) {
198199

199200
String s = FormattingUtil.formatNumberReadable2F(getBaseUnitAmount(content.getAmount()), false) +
200201
getBaseUnit();
@@ -290,6 +291,11 @@ public FluidSlot contentOffset(int x, int y) {
290291
return this;
291292
}
292293

294+
public FluidSlot displayAmount(boolean displayAmount) {
295+
this.displayAmount = displayAmount;
296+
return this;
297+
}
298+
293299
/**
294300
* @param alwaysShowFull if the fluid should be rendered as full or as the partial amount.
295301
*/

src/main/java/com/gregtechceu/gtceu/api/recipe/gui/GTRecipeTypeUILayout.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,8 +97,12 @@ public ParentWidget<?> getBackedSlotsRow(@NotNull PanelSyncManager syncManager,
9797
int maxMachineSlots = 0;
9898
if (maxRecipeTypeSlots == 0 || recipeCap == EURecipeCapability.CAP) continue;
9999
if (recipeCap == ItemRecipeCapability.CAP) {
100+
if (in && inputItems == null) continue;
101+
if (!in && outputItems == null) continue;
100102
maxMachineSlots = in ? inputItems.getSlots() : outputItems.getSlots();
101103
} else if (recipeCap == FluidRecipeCapability.CAP) {
104+
if (in && inputFluids == null) continue;
105+
if (!in && outputFluids == null) continue;
102106
maxMachineSlots = in ? inputFluids.getTanks() : outputFluids.getTanks();
103107
}
104108

src/main/java/com/gregtechceu/gtceu/common/data/GTMachines.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ public class GTMachines {
8282
.recipeType(STEAM_BOILER_RECIPES)
8383
.recipeModifier(SteamBoilerMachine::recipeModifier)
8484
.workableSteamHullModel(pressure, GTCEu.id("block/generators/boiler/coal"))
85+
.themeId((i) -> i > 0 ? GTGuiTheme.STEEL.getId() : GTGuiTheme.BRONZE.getId())
8586
.tooltips(Component.translatable("gtceu.universal.tooltip.produces_fluid",
8687
(pressure ? ConfigHolder.INSTANCE.machines.smallBoilers.hpSolidBoilerBaseOutput :
8788
ConfigHolder.INSTANCE.machines.smallBoilers.solidBoilerBaseOutput) *
@@ -95,6 +96,7 @@ public class GTMachines {
9596
.recipeType(STEAM_BOILER_RECIPES)
9697
.recipeModifier(SteamBoilerMachine::recipeModifier)
9798
.workableSteamHullModel(pressure, GTCEu.id("block/generators/boiler/lava"))
99+
.themeId((i) -> i > 0 ? GTGuiTheme.STEEL.getId() : GTGuiTheme.BRONZE.getId())
98100
.tooltips(Component.translatable("gtceu.universal.tooltip.produces_fluid",
99101
(pressure ? ConfigHolder.INSTANCE.machines.smallBoilers.hpLiquidBoilerBaseOutput :
100102
ConfigHolder.INSTANCE.machines.smallBoilers.liquidBoilerBaseOutput) *
@@ -108,6 +110,7 @@ public class GTMachines {
108110
.recipeType(STEAM_BOILER_RECIPES)
109111
.recipeModifier(SteamBoilerMachine::recipeModifier)
110112
.workableSteamHullModel(pressure, GTCEu.id("block/generators/boiler/solar"))
113+
.themeId((i) -> i > 0 ? GTGuiTheme.STEEL.getId() : GTGuiTheme.BRONZE.getId())
111114
.tooltips(Component.translatable("gtceu.universal.tooltip.produces_fluid",
112115
(pressure ? ConfigHolder.INSTANCE.machines.smallBoilers.hpSolarBoilerBaseOutput :
113116
ConfigHolder.INSTANCE.machines.smallBoilers.solarBoilerBaseOutput) *
@@ -122,8 +125,8 @@ public class GTMachines {
122125
.recipeType(GTRecipeTypes.MACERATOR_RECIPES)
123126
.recipeModifier(SimpleSteamMachine::recipeModifier)
124127
.addOutputLimit(ItemRecipeCapability.CAP, 1)
125-
.themeId((i) -> GTGuiTheme.BRONZE.getId())
126-
.UI(GTSingleblockMachinePanels.STEAM_MACERATOR)
128+
.themeId((i) -> i > 0 ? GTGuiTheme.STEEL.getId() : GTGuiTheme.BRONZE.getId())
129+
.UI(GTSingleblockMachinePanels.STEAM_MACHINE)
127130
.modelProperty(GTMachineModelProperties.VENT_DIRECTION, RelativeDirection.BACK)
128131
.workableSteamHullModel(pressure, GTCEu.id("block/machines/macerator"))
129132
.register());

src/main/java/com/gregtechceu/gtceu/common/data/GTRecipeTypes.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -362,8 +362,8 @@ public class GTRecipeTypes {
362362
.setMaxIOSize(1, 1, 1, 0).setEUIO(IO.IN)
363363
.UI(builder -> builder.setProgressBar(GTGuiTextures.PROGRESS_BAR_ARROW, 20)
364364
.setItemSlotOverlay(IO.IN, 0, GTGuiTextures.SOLIDIFIER_OVERLAY))
365-
.setSlotOverlay(false, false, GuiTextures.SOLIDIFIER_OVERLAY)
366-
.setProgressBar(GuiTextures.PROGRESS_BAR_ARROW, LEFT_TO_RIGHT)
365+
// .setSlotOverlay(false, false, GuiTextures.SOLIDIFIER_OVERLAY)
366+
// .setProgressBar(GuiTextures.PROGRESS_BAR_ARROW, LEFT_TO_RIGHT)
367367
.setSound(GTSoundEntries.COOLING);
368368

369369
public final static GTRecipeType FORGE_HAMMER_RECIPES = register("forge_hammer", ELECTRIC).setMaxIOSize(1, 1, 0, 0)

src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMuiWidgets.java

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.gregtechceu.gtceu.common.data.mui;
22

3+
import com.gregtechceu.gtceu.api.GTValues;
34
import com.gregtechceu.gtceu.api.machine.MachineDefinition;
45
import com.gregtechceu.gtceu.api.machine.SimpleTieredMachine;
56
import com.gregtechceu.gtceu.api.machine.feature.IAutoOutputItem;
@@ -50,13 +51,13 @@ public static Flow createTitleBar(MachineDefinition definition, int panelWidth)
5051

5152
public static Flow createTitleBar(MachineDefinition definition, int panelWidth, UITexture background) {
5253
var displayItem = definition.asStack();
53-
String hatchName = displayItem.getHoverName().getString();
54-
hatchName = hatchName.replaceAll("§.", "").trim();
54+
String machineName = displayItem.getHoverName().getString();
55+
machineName = machineName.replaceAll("§.", "").trim();
5556

5657
int borderRadius = 5;
5758
int iconSize = 16;
5859
int minPanelWidth = (int) (panelWidth * 0.9f) - (iconSize + (borderRadius * 3));
59-
int textTitleWidth = TextRenderer.getFont().width(hatchName);
60+
int textTitleWidth = TextRenderer.getFont().width(machineName);
6061

6162
int textRows = (int) Math.ceil((double) textTitleWidth / minPanelWidth);
6263
int textHeightPerRow = (int) (IKey.renderer.getFontHeight());
@@ -76,10 +77,9 @@ public static Flow createTitleBar(MachineDefinition definition, int panelWidth,
7677
.asWidget()
7778
.marginLeft(borderRadius))
7879
.mainAxisAlignment(Alignment.MainAxis.START)
79-
.child(IKey.str(hatchName)
80-
.alignment(Alignment.CENTER)
80+
.child(IKey.str(machineName)
8181
.asWidget()
82-
.paddingTop(1)
82+
.paddingTop(3)
8383
.margin(borderRadius, borderRadius, borderRadius, 1)
8484
.size(Math.min(minPanelWidth, textTitleWidth), textHeight));
8585
}
@@ -290,6 +290,9 @@ private static int nextCircuitValue(ItemStack stack, int current, double delta)
290290
}
291291

292292
public static IDrawable.DrawableWidget createGTLogo() {
293+
if (GTValues.XMAS.getAsBoolean()) {
294+
return new IDrawable.DrawableWidget(GTGuiTextures.GREGTECH_LOGO_XMAS);
295+
}
293296
return new IDrawable.DrawableWidget(GTGuiTextures.GREGTECH_LOGO);
294297
}
295298

0 commit comments

Comments
 (0)