Skip to content

Commit b81de36

Browse files
committed
actually port steam machines to mui2
add todos for fluid slot
1 parent c7be3f4 commit b81de36

File tree

6 files changed

+160
-9
lines changed

6 files changed

+160
-9
lines changed

src/main/java/gregtech/api/mui/sync/GTFluidSyncHandler.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,8 @@ public boolean isPhantom() {
142142
return phantom;
143143
}
144144

145+
// todo decouple show amount from drawn amount and tooltip amount
146+
// probably already done in the mui2 multis pr
145147
public GTFluidSyncHandler showAmount(boolean showAmount) {
146148
this.showAmount = () -> showAmount;
147149
return this;

src/main/java/gregtech/common/metatileentities/steam/boiler/SteamBoiler.java

Lines changed: 91 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,12 @@
77
import gregtech.api.gui.GuiTextures;
88
import gregtech.api.gui.ModularUI;
99
import gregtech.api.gui.resources.TextureArea;
10-
import gregtech.api.gui.widgets.FluidContainerSlotWidget;
11-
import gregtech.api.gui.widgets.ProgressWidget;
12-
import gregtech.api.gui.widgets.ProgressWidget.MoveType;
13-
import gregtech.api.gui.widgets.TankWidget;
1410
import gregtech.api.items.itemhandlers.GTItemStackHandler;
1511
import gregtech.api.metatileentity.IDataInfoProvider;
1612
import gregtech.api.metatileentity.MetaTileEntity;
13+
import gregtech.api.mui.GTGuiTextures;
14+
import gregtech.api.mui.GTGuiTheme;
15+
import gregtech.api.mui.GTGuis;
1716
import gregtech.api.unification.material.Materials;
1817
import gregtech.api.util.GTTransferUtils;
1918
import gregtech.api.util.GTUtility;
@@ -23,6 +22,7 @@
2322
import gregtech.client.renderer.texture.Textures;
2423
import gregtech.client.renderer.texture.cube.SimpleSidedCubeRenderer;
2524
import gregtech.common.ConfigHolder;
25+
import gregtech.common.mui.widget.GTFluidSlot;
2626
import gregtech.core.sound.GTSoundEvents;
2727

2828
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
@@ -47,6 +47,17 @@
4747
import codechicken.lib.render.pipeline.ColourMultiplier;
4848
import codechicken.lib.render.pipeline.IVertexOperation;
4949
import codechicken.lib.vec.Matrix4;
50+
import com.cleanroommc.modularui.api.drawable.IDrawable;
51+
import com.cleanroommc.modularui.api.drawable.IKey;
52+
import com.cleanroommc.modularui.drawable.UITexture;
53+
import com.cleanroommc.modularui.factory.PosGuiData;
54+
import com.cleanroommc.modularui.screen.ModularPanel;
55+
import com.cleanroommc.modularui.value.sync.DoubleSyncValue;
56+
import com.cleanroommc.modularui.value.sync.PanelSyncManager;
57+
import com.cleanroommc.modularui.widget.Widget;
58+
import com.cleanroommc.modularui.widgets.ItemSlot;
59+
import com.cleanroommc.modularui.widgets.ProgressWidget;
60+
import com.cleanroommc.modularui.widgets.slot.ModularSlot;
5061
import org.apache.commons.lang3.ArrayUtils;
5162
import org.apache.commons.lang3.tuple.Pair;
5263
import org.jetbrains.annotations.NotNull;
@@ -331,20 +342,91 @@ protected TextureArea getGuiTexture(String pathTemplate) {
331342
type, STRING_SUBSTITUTION_PATTERN.matcher(pathTemplate).replaceAll(Matcher.quoteReplacement(type))));
332343
}
333344

345+
@Override
346+
public boolean usesMui2() {
347+
return true;
348+
}
349+
350+
@Override
351+
public ModularPanel buildUI(PosGuiData guiData, PanelSyncManager guiSyncManager) {
352+
return GTGuis.defaultPanel(this)
353+
.child(IKey.lang(getMetaFullName()).asWidget().pos(5, 5))
354+
.child(new ProgressWidget()
355+
.texture(getEmptyBarDrawable(), GTGuiTextures.PROGRESS_BAR_BOILER_HEAT, -1)
356+
.direction(ProgressWidget.Direction.UP)
357+
.debugName("temp")
358+
.value(new DoubleSyncValue(this::getTemperaturePercent))
359+
.pos(96, 26)
360+
.size(10, 54))
361+
.child(new GTFluidSlot()
362+
.debugName("water")
363+
.background(getEmptyBarDrawable())
364+
.syncHandler(GTFluidSlot.sync(waterFluidTank)
365+
.showAmount(false)
366+
.accessibility(false, false))
367+
.pos(83, 26)
368+
.size(10, 54))
369+
.child(new GTFluidSlot()
370+
.debugName("steam")
371+
.background(getEmptyBarDrawable())
372+
.syncHandler(GTFluidSlot.sync(steamFluidTank)
373+
.showAmount(false)
374+
.accessibility(false, false))
375+
.pos(70, 26)
376+
.size(10, 54))
377+
.child(new ItemSlot()
378+
.debugName("fluid in")
379+
.background(getSlotBackground(false))
380+
.slot(new ModularSlot(containerInventory, 0)
381+
.singletonSlotGroup())
382+
.pos(43, 26))
383+
.child(new ItemSlot()
384+
.debugName("fluid out")
385+
.background(getSlotBackground(true))
386+
.slot(new ModularSlot(containerInventory, 1)
387+
.accessibility(false, true))
388+
.pos(43, 62))
389+
.child(new Widget<>()
390+
.pos(43, 44)
391+
.size(18)
392+
.background(isHighPressure ? GTGuiTextures.CANISTER_OVERLAY_STEEL :
393+
GTGuiTextures.CANISTER_OVERLAY_BRONZE))
394+
.bindPlayerInventory();
395+
}
396+
397+
@Override
398+
public GTGuiTheme getUITheme() {
399+
return isHighPressure ? GTGuiTheme.STEEL : GTGuiTheme.BRONZE;
400+
}
401+
402+
protected UITexture getEmptyBarDrawable() {
403+
return isHighPressure ? GTGuiTextures.PROGRESS_BAR_BOILER_EMPTY_STEEL :
404+
GTGuiTextures.PROGRESS_BAR_BOILER_EMPTY_BRONZE;
405+
}
406+
407+
protected IDrawable getSlotBackground(boolean output) {
408+
UITexture base = isHighPressure ? GTGuiTextures.SLOT_STEEL : GTGuiTextures.SLOT_BRONZE;
409+
UITexture overlay;
410+
if (isHighPressure)
411+
overlay = output ? GTGuiTextures.OUT_SLOT_OVERLAY_STEEL : GTGuiTextures.IN_SLOT_OVERLAY_STEEL;
412+
else overlay = output ? GTGuiTextures.OUT_SLOT_OVERLAY_BRONZE : GTGuiTextures.IN_SLOT_OVERLAY_BRONZE;
413+
return IDrawable.of(base, overlay);
414+
}
415+
334416
public ModularUI.Builder createUITemplate(EntityPlayer player) {
335417
return ModularUI.builder(GuiTextures.BACKGROUND_STEAM.get(isHighPressure), 176, 166)
336418
.label(6, 6, getMetaFullName()).shouldColor(false)
337-
.widget(new ProgressWidget(this::getTemperaturePercent, 96, 26, 10, 54)
419+
.widget(new gregtech.api.gui.widgets.ProgressWidget(this::getTemperaturePercent, 96, 26, 10, 54)
338420
.setProgressBar(GuiTextures.PROGRESS_BAR_BOILER_EMPTY.get(isHighPressure),
339421
GuiTextures.PROGRESS_BAR_BOILER_HEAT,
340-
MoveType.VERTICAL))
422+
gregtech.api.gui.widgets.ProgressWidget.MoveType.VERTICAL))
341423

342-
.widget(new TankWidget(waterFluidTank, 83, 26, 10, 54)
424+
.widget(new gregtech.api.gui.widgets.TankWidget(waterFluidTank, 83, 26, 10, 54)
343425
.setBackgroundTexture(GuiTextures.PROGRESS_BAR_BOILER_EMPTY.get(isHighPressure)))
344-
.widget(new TankWidget(steamFluidTank, 70, 26, 10, 54)
426+
.widget(new gregtech.api.gui.widgets.TankWidget(steamFluidTank, 70, 26, 10, 54)
345427
.setBackgroundTexture(GuiTextures.PROGRESS_BAR_BOILER_EMPTY.get(isHighPressure)))
346428

347-
.widget(new FluidContainerSlotWidget(containerInventory, 0, 43, 26, true)
429+
.widget(new gregtech.api.gui.widgets.FluidContainerSlotWidget(containerInventory, 0, 43, 26, true)
348430
.setBackgroundTexture(GuiTextures.SLOT_STEAM.get(isHighPressure),
349431
GuiTextures.IN_SLOT_OVERLAY_STEAM.get(isHighPressure)))
350432
.slot(containerInventory, 1, 43, 62, true, false,

src/main/java/gregtech/common/metatileentities/steam/boiler/SteamCoalBoiler.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import gregtech.api.items.itemhandlers.GTItemStackHandler;
77
import gregtech.api.metatileentity.MetaTileEntity;
88
import gregtech.api.metatileentity.interfaces.IGregTechTileEntity;
9+
import gregtech.api.mui.GTGuiTextures;
910
import gregtech.api.recipes.ModHandler;
1011
import gregtech.api.recipes.category.ICategoryOverride;
1112
import gregtech.client.renderer.texture.Textures;
@@ -17,6 +18,13 @@
1718
import net.minecraftforge.fluids.FluidUtil;
1819
import net.minecraftforge.items.IItemHandlerModifiable;
1920

21+
import com.cleanroommc.modularui.factory.PosGuiData;
22+
import com.cleanroommc.modularui.screen.ModularPanel;
23+
import com.cleanroommc.modularui.value.sync.DoubleSyncValue;
24+
import com.cleanroommc.modularui.value.sync.PanelSyncManager;
25+
import com.cleanroommc.modularui.widgets.ItemSlot;
26+
import com.cleanroommc.modularui.widgets.ProgressWidget;
27+
import com.cleanroommc.modularui.widgets.slot.ModularSlot;
2028
import org.jetbrains.annotations.NotNull;
2129

2230
public class SteamCoalBoiler extends SteamBoiler implements ICategoryOverride {
@@ -82,6 +90,26 @@ public ItemStack insertItem(int slot, @NotNull ItemStack stack, boolean simulate
8290
};
8391
}
8492

93+
@Override
94+
public ModularPanel buildUI(PosGuiData guiData, PanelSyncManager guiSyncManager) {
95+
return super.buildUI(guiData, guiSyncManager)
96+
.child(new ItemSlot()
97+
.slot(this.importItems, 0)
98+
.pos(115, 62))
99+
.child(new ItemSlot()
100+
.slot(new ModularSlot(this.exportItems, 0)
101+
.accessibility(false, true))
102+
.pos(115, 26))
103+
.child(new ProgressWidget()
104+
.value(new DoubleSyncValue(this::getFuelLeftPercent))
105+
.pos(115, 44)
106+
.size(18)
107+
.texture(isHighPressure ?
108+
GTGuiTextures.PROGRESS_BAR_BOILER_FUEL_STEEL :
109+
GTGuiTextures.PROGRESS_BAR_BOILER_FUEL_BRONZE, 18)
110+
.direction(ProgressWidget.Direction.UP));
111+
}
112+
85113
@Override
86114
public ModularUI createUI(EntityPlayer player) {
87115
return createUITemplate(player)

src/main/java/gregtech/common/metatileentities/steam/boiler/SteamLavaBoiler.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,12 @@
1010
import gregtech.api.gui.widgets.TankWidget;
1111
import gregtech.api.metatileentity.MetaTileEntity;
1212
import gregtech.api.metatileentity.interfaces.IGregTechTileEntity;
13+
import gregtech.api.mui.GTGuiTextures;
1314
import gregtech.api.unification.material.Materials;
1415
import gregtech.client.particle.VanillaParticleEffects;
1516
import gregtech.client.renderer.texture.Textures;
1617
import gregtech.common.ConfigHolder;
18+
import gregtech.common.mui.widget.GTFluidSlot;
1719

1820
import net.minecraft.entity.player.EntityPlayer;
1921
import net.minecraft.init.SoundEvents;
@@ -26,6 +28,9 @@
2628
import net.minecraftforge.fml.relauncher.Side;
2729
import net.minecraftforge.fml.relauncher.SideOnly;
2830

31+
import com.cleanroommc.modularui.factory.PosGuiData;
32+
import com.cleanroommc.modularui.screen.ModularPanel;
33+
import com.cleanroommc.modularui.value.sync.PanelSyncManager;
2934
import it.unimi.dsi.fastutil.objects.Object2IntMap;
3035
import it.unimi.dsi.fastutil.objects.Object2IntMaps;
3136
import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap;
@@ -120,6 +125,19 @@ protected int getCoolDownRate() {
120125
return 1;
121126
}
122127

128+
@Override
129+
public ModularPanel buildUI(PosGuiData guiData, PanelSyncManager guiSyncManager) {
130+
return super.buildUI(guiData, guiSyncManager)
131+
.child(new GTFluidSlot()
132+
.syncHandler(GTFluidSlot.sync(fuelFluidTank)
133+
.showAmount(true))
134+
.pos(119, 26)
135+
.size(10, 54)
136+
.overlay(isHighPressure ?
137+
GTGuiTextures.PROGRESS_BAR_BOILER_EMPTY_STEEL :
138+
GTGuiTextures.PROGRESS_BAR_BOILER_EMPTY_BRONZE));
139+
}
140+
123141
@Override
124142
protected ModularUI createUI(EntityPlayer entityPlayer) {
125143
return createUITemplate(entityPlayer)

src/main/java/gregtech/common/metatileentities/steam/boiler/SteamSolarBoiler.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import gregtech.api.gui.widgets.ProgressWidget.MoveType;
66
import gregtech.api.metatileentity.MetaTileEntity;
77
import gregtech.api.metatileentity.interfaces.IGregTechTileEntity;
8+
import gregtech.api.mui.GTGuiTextures;
89
import gregtech.api.util.GTUtility;
910
import gregtech.client.renderer.texture.Textures;
1011

@@ -13,6 +14,12 @@
1314
import net.minecraftforge.fml.relauncher.Side;
1415
import net.minecraftforge.fml.relauncher.SideOnly;
1516

17+
import com.cleanroommc.modularui.factory.PosGuiData;
18+
import com.cleanroommc.modularui.screen.ModularPanel;
19+
import com.cleanroommc.modularui.value.sync.DoubleSyncValue;
20+
import com.cleanroommc.modularui.value.sync.PanelSyncManager;
21+
import com.cleanroommc.modularui.widgets.ProgressWidget;
22+
1623
public class SteamSolarBoiler extends SteamBoiler {
1724

1825
public SteamSolarBoiler(ResourceLocation metaTileEntityId, boolean isHighPressure) {
@@ -46,6 +53,18 @@ protected int getCoolDownRate() {
4653
return 3;
4754
}
4855

56+
@Override
57+
public ModularPanel buildUI(PosGuiData guiData, PanelSyncManager guiSyncManager) {
58+
return super.buildUI(guiData, guiSyncManager)
59+
.child(new ProgressWidget()
60+
.value(new DoubleSyncValue(() -> GTUtility.canSeeSunClearly(getWorld(), getPos()) ? 1.0 : 0.0))
61+
.pos(114, 44)
62+
.size(20)
63+
.texture(isHighPressure ?
64+
GTGuiTextures.PROGRESS_BAR_SOLAR_STEEL :
65+
GTGuiTextures.PROGRESS_BAR_SOLAR_BRONZE, -1));
66+
}
67+
4968
@Override
5069
protected ModularUI createUI(EntityPlayer entityPlayer) {
5170
return createUITemplate(entityPlayer)

src/main/java/gregtech/common/mui/widget/GTFluidSlot.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,8 @@ public void draw(ModularGuiContext context, WidgetSlotTheme widgetTheme) {
123123
if (content == null)
124124
content = this.syncHandler.getLockedFluid();
125125

126+
// todo add option for drawing partial fluid instead of always full
127+
// probably already done in the mui2 multis pr
126128
GuiDraw.drawFluidTexture(content, 1, 1, getArea().w() - 2, getArea().h() - 2, 0);
127129

128130
if (content != null && this.syncHandler.showAmount()) {

0 commit comments

Comments
 (0)