Skip to content

Commit 8d3b3da

Browse files
committed
fix cover panel opening
1 parent 455610a commit 8d3b3da

2 files changed

Lines changed: 79 additions & 55 deletions

File tree

src/main/java/gregtech/api/cover/CoverWithUI.java

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import gregtech.api.gui.ModularUI;
55
import gregtech.api.mui.GTGuiTextures;
66
import gregtech.api.mui.GTGuiTheme;
7+
import gregtech.api.mui.GTGuis;
78
import gregtech.api.mui.GregTechGuiScreen;
89
import gregtech.api.mui.factory.CoverGuiFactory;
910

@@ -17,6 +18,7 @@
1718
import com.cleanroommc.modularui.api.IGuiHolder;
1819
import com.cleanroommc.modularui.api.drawable.IDrawable;
1920
import com.cleanroommc.modularui.api.drawable.IKey;
21+
import com.cleanroommc.modularui.api.widget.IWidget;
2022
import com.cleanroommc.modularui.drawable.ItemDrawable;
2123
import com.cleanroommc.modularui.factory.SidedPosGuiData;
2224
import com.cleanroommc.modularui.screen.ModularPanel;
@@ -31,6 +33,8 @@
3133
import com.cleanroommc.modularui.widgets.ToggleButton;
3234
import com.cleanroommc.modularui.widgets.layout.Row;
3335
import org.jetbrains.annotations.ApiStatus;
36+
import org.jetbrains.annotations.NotNull;
37+
import org.jetbrains.annotations.Nullable;
3438

3539
public interface CoverWithUI extends Cover, IUIHolder, IGuiHolder<SidedPosGuiData> {
3640

@@ -65,11 +69,20 @@ default GTGuiTheme getUITheme() {
6569

6670
@Override
6771
default ModularPanel buildUI(SidedPosGuiData guiData, PanelSyncManager guiSyncManager) {
68-
return null;
72+
var w = constructWidgets(guiData, guiSyncManager);
73+
return GTGuis.createPanel(getPickItem(), 100, 100)
74+
.childIf(w != null, w);
75+
}
76+
77+
default @NotNull ModularPanel getSmallGUI(@NotNull SidedPosGuiData guiData,
78+
@NotNull PanelSyncManager guiSyncManager) {
79+
var w = constructWidgets(guiData, guiSyncManager);
80+
return GTGuis.createPopupPanel(getPickItem().getTranslationKey(), 100, 100)
81+
.childIf(w != null, w);
6982
}
7083

71-
default ModularPanel getSmallGUI(SidedPosGuiData guiData, PanelSyncManager guiSyncManager) {
72-
return buildUI(guiData, guiSyncManager);
84+
default @Nullable IWidget constructWidgets(SidedPosGuiData data, PanelSyncManager manager) {
85+
return null;
7386
}
7487

7588
default boolean shouldShowSmallUI() {

src/main/java/gregtech/common/metatileentities/storage/MetaTileEntityCrate.java

Lines changed: 63 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -33,18 +33,22 @@
3333
import codechicken.lib.render.pipeline.IVertexOperation;
3434
import codechicken.lib.vec.Matrix4;
3535
import com.cleanroommc.modularui.api.drawable.IKey;
36+
import com.cleanroommc.modularui.api.widget.IGuiAction;
3637
import com.cleanroommc.modularui.api.widget.IWidget;
3738
import com.cleanroommc.modularui.api.widget.Interactable;
39+
import com.cleanroommc.modularui.drawable.GuiTextures;
3840
import com.cleanroommc.modularui.drawable.ItemDrawable;
3941
import com.cleanroommc.modularui.factory.PosGuiData;
4042
import com.cleanroommc.modularui.factory.SidedPosGuiData;
4143
import com.cleanroommc.modularui.screen.ModularPanel;
44+
import com.cleanroommc.modularui.utils.Alignment;
4245
import com.cleanroommc.modularui.value.sync.PanelSyncManager;
4346
import com.cleanroommc.modularui.value.sync.SyncHandlers;
4447
import com.cleanroommc.modularui.widgets.ButtonWidget;
4548
import com.cleanroommc.modularui.widgets.ItemSlot;
4649
import com.cleanroommc.modularui.widgets.layout.Column;
4750
import com.cleanroommc.modularui.widgets.layout.Grid;
51+
import com.cleanroommc.modularui.widgets.layout.Row;
4852
import org.apache.commons.lang3.tuple.Pair;
4953
import org.jetbrains.annotations.NotNull;
5054
import org.jetbrains.annotations.Nullable;
@@ -159,73 +163,80 @@ public ModularPanel buildUI(PosGuiData guiData, PanelSyncManager guiSyncManager)
159163
.slotGroup("item_inv")));
160164
}
161165
}
162-
ModularPanel panel = GTGuis.createPanel(this, rowSize * 18 + 14, 18 + 4 * 18 + 5 + 14 + 18 * rows)
163-
.child(IKey.lang(getMetaFullName()).asWidget().pos(5, 5))
166+
var panel = GTGuis.createPanel(this, rowSize * 18 + 14, 18 + 4 * 18 + 5 + 14 + 18 * rows);
167+
168+
return panel.child(IKey.lang(getMetaFullName()).asWidget().pos(5, 5))
164169
.bindPlayerInventory()
170+
.childIf(hasAnyCover(), createCoverWidgets(guiData, guiSyncManager, panel))
165171
.child(new Grid()
166172
.top(18).left(7).right(7).height(rows * 18)
167173
.minElementMargin(0, 0)
168174
.minColWidth(18).minRowHeight(18)
169175
.matrix(widgets));
170-
if (hasAnyCover()) {
171-
createCoverWidgets(panel, guiData, guiSyncManager);
172-
}
173-
174-
return panel;
175176
}
176177

177-
private void createCoverWidgets(ModularPanel mainPanel, PosGuiData guiData, PanelSyncManager guiSyncManager) {
178-
Column leftCoverColumn = new Column();
179-
Column rightCoverColumn = new Column();
180-
int numCovers = 0;
178+
private Row createCoverWidgets(PosGuiData data, PanelSyncManager manager, ModularPanel mainPanel) {
179+
Column leftCoverColumn = new Column()
180+
.background(GuiTextures.MC_BACKGROUND)
181+
.crossAxisAlignment(Alignment.CrossAxis.CENTER)
182+
.padding(4)
183+
.coverChildrenWidth()
184+
.topRel(0.25f)
185+
.left(-20)
186+
.height(24 * 3);
187+
Column rightCoverColumn = new Column()
188+
.background(GuiTextures.MC_BACKGROUND)
189+
.crossAxisAlignment(Alignment.CrossAxis.CENTER)
190+
.padding(4)
191+
.coverChildrenWidth()
192+
.topRel(0.25f)
193+
.right(-20)
194+
.height(24 * 3);
181195

196+
int numCovers = 0;
182197
for (EnumFacing side : EnumFacing.VALUES) {
183-
if (hasCover(side) && getCoverAtSide(side) instanceof CoverWithUI cover) {
184-
if (cover.shouldShowSmallUI()) {
185-
numCovers++;
186-
SidedPosGuiData sideData = new SidedPosGuiData(guiData.getPlayer(), guiData.getX(),
187-
guiData.getY(), guiData.getZ(), side);
188-
189-
// guiSyncManager.panel("cover_" + numCovers, mainPanel, );
190-
/*
191-
* PanelSyncHandler coverSyncHandler = new PanelSyncHandler(mainPanel,
192-
* (syncManager, syncHandler) -> cover.getSmallGUI(sideData, syncManager));
193-
*
194-
* guiSyncManager.syncValue("cover_" + numCovers, coverSyncHandler);
195-
*/
196-
197-
// Use the left side for the first three covers
198-
if (numCovers <= 3) {
199-
// guiSyncManager.panel("cover_" + numCovers, mainPanel, );
200-
201-
leftCoverColumn.child(new ButtonWidget<>().top(20 * numCovers + 5).size(20, 20)
202-
.background(GTGuiTextures.SLOT).onMousePressed(i -> {
203-
204-
ModularPanel coverPanel = cover.getSmallGUI(sideData, guiSyncManager);
205-
if (!coverPanel.isOpen()) {
206-
coverPanel.onOpen(mainPanel.getScreen());
207-
}
208-
/*
209-
* if (coverSyncHandler.isPanelOpen()) {
210-
* coverSyncHandler.closePanel();
211-
* } else {
212-
* coverSyncHandler.openPanel();
213-
* }
214-
*/
215-
Interactable.playButtonClickSound();
216-
return true;
217-
})
218-
.overlay(new ItemDrawable(cover.getPickItem()).asIcon()));
198+
if (getCoverAtSide(side) instanceof CoverWithUI cover) {
199+
if (!cover.shouldShowSmallUI()) continue;
200+
201+
SidedPosGuiData sideData = new SidedPosGuiData(data.getPlayer(), data.getX(),
202+
data.getY(), data.getZ(), side);
203+
204+
// todo better key for this?
205+
var panel = manager.panel("cover at side: " + side.getName(), mainPanel,
206+
(syncManager, syncHandler) -> cover.getSmallGUI(sideData, syncManager));
207+
208+
IGuiAction.MousePressed handlePanel = i -> {
209+
if (!panel.isPanelOpen()) {
210+
panel.openPanel();
219211
} else {
220-
rightCoverColumn.child(new ButtonWidget<>().top(20 * numCovers + 5).size(20, 20)
221-
.background(GTGuiTextures.SLOT)
222-
.overlay(new ItemDrawable(cover.getPickItem()).asIcon()));
212+
panel.closePanel();
223213
}
214+
Interactable.playButtonClickSound();
215+
return true;
216+
};
217+
218+
// Use the left side for the first three covers
219+
if (numCovers++ < 3) {
220+
leftCoverColumn.child(new ButtonWidget<>()
221+
.size(20, 20)
222+
.marginBottom(2)
223+
.background(GTGuiTextures.SLOT)
224+
.onMousePressed(handlePanel)
225+
.overlay(new ItemDrawable(cover.getPickItem()).asIcon()));
226+
} else {
227+
rightCoverColumn.child(new ButtonWidget<>()
228+
.size(20, 20)
229+
.marginBottom(2)
230+
.background(GTGuiTextures.SLOT)
231+
.onMousePressed(handlePanel)
232+
.overlay(new ItemDrawable(cover.getPickItem()).asIcon()));
224233
}
225234
}
226235
}
227-
mainPanel.child(leftCoverColumn.left(-20));
228-
mainPanel.child(rightCoverColumn.right(mainPanel.getDefaultWidth()));
236+
return new Row()
237+
.expanded()
238+
.child(leftCoverColumn)
239+
.child(rightCoverColumn);
229240
}
230241

231242
@Override

0 commit comments

Comments
 (0)