diff --git a/src/main/java/gregtech/api/cover/CoverWithUI.java b/src/main/java/gregtech/api/cover/CoverWithUI.java index 6c288e08137..37f6eeaa6e3 100644 --- a/src/main/java/gregtech/api/cover/CoverWithUI.java +++ b/src/main/java/gregtech/api/cover/CoverWithUI.java @@ -4,6 +4,7 @@ import gregtech.api.gui.ModularUI; import gregtech.api.mui.GTGuiTextures; import gregtech.api.mui.GTGuiTheme; +import gregtech.api.mui.GTGuis; import gregtech.api.mui.GregTechGuiScreen; import gregtech.api.mui.factory.CoverGuiFactory; @@ -17,6 +18,7 @@ import com.cleanroommc.modularui.api.IGuiHolder; import com.cleanroommc.modularui.api.drawable.IDrawable; import com.cleanroommc.modularui.api.drawable.IKey; +import com.cleanroommc.modularui.api.widget.IWidget; import com.cleanroommc.modularui.drawable.ItemDrawable; import com.cleanroommc.modularui.factory.SidedPosGuiData; import com.cleanroommc.modularui.screen.ModularPanel; @@ -32,6 +34,8 @@ import com.cleanroommc.modularui.widgets.ToggleButton; import com.cleanroommc.modularui.widgets.layout.Flow; import org.jetbrains.annotations.ApiStatus; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; public interface CoverWithUI extends Cover, IUIHolder, IGuiHolder { @@ -66,9 +70,36 @@ default GTGuiTheme getUITheme() { @Override default ModularPanel buildUI(SidedPosGuiData guiData, PanelSyncManager guiSyncManager) { + var w = createUI(guiData, guiSyncManager); + return confgurePanel(GTGuis.defaultPanel(getPickItem()), false) + .childIf(w != null, w) + .child(createTitleRow(getPickItem()).pos(5, 5)) + .bindPlayerInventory(); + } + + default ModularPanel confgurePanel(ModularPanel panel, boolean isSmallGui) { + return panel; + } + + default @NotNull ModularPanel getSmallGUI(@NotNull SidedPosGuiData guiData, + @NotNull PanelSyncManager guiSyncManager) { + var w = createUI(guiData, guiSyncManager); + return confgurePanel(GTGuis.defaultPopupPanel(getPickItem().getTranslationKey()), true) + .coverChildrenHeight() + .paddingBottom(16) + .childIf(w != null, w) + .child(createTitleRow(getPickItem()).pos(5, 5)); + } + + default @Nullable IWidget createUI(SidedPosGuiData data, PanelSyncManager manager) { return null; } + default boolean shouldShowSmallUI() { + // Check buildUI is not null? + return usesMui2(); + } + @Override default boolean isValid() { return getCoverableView().isValid(); diff --git a/src/main/java/gregtech/common/covers/CoverConveyor.java b/src/main/java/gregtech/common/covers/CoverConveyor.java index b037492f993..dda7e307f00 100644 --- a/src/main/java/gregtech/common/covers/CoverConveyor.java +++ b/src/main/java/gregtech/common/covers/CoverConveyor.java @@ -9,7 +9,6 @@ import gregtech.api.cover.CoverWithUI; import gregtech.api.cover.CoverableView; import gregtech.api.mui.GTGuiTextures; -import gregtech.api.mui.GTGuis; import gregtech.api.util.GTTransferUtils; import gregtech.api.util.ItemStackHashStrategy; import gregtech.client.renderer.texture.Textures; @@ -44,7 +43,6 @@ import codechicken.lib.vec.Matrix4; import com.cleanroommc.modularui.api.drawable.IDrawable; import com.cleanroommc.modularui.drawable.DynamicDrawable; -import com.cleanroommc.modularui.factory.GuiData; import com.cleanroommc.modularui.factory.SidedPosGuiData; import com.cleanroommc.modularui.screen.ModularPanel; import com.cleanroommc.modularui.utils.Color; @@ -503,17 +501,13 @@ public boolean usesMui2() { } @Override - public ModularPanel buildUI(SidedPosGuiData guiData, PanelSyncManager guiSyncManager) { - var panel = GTGuis.createPanel(this, 176, 192 + 18); + public ModularPanel confgurePanel(ModularPanel panel, boolean isSmallGui) { + return panel.height(210); + } + public @NotNull ParentWidget createUI(SidedPosGuiData data, PanelSyncManager guiSyncManager) { getItemFilterContainer().setMaxTransferSize(getMaxStackSize()); - return panel.child(CoverWithUI.createTitleRow(getPickItem())) - .child(createUI(guiData, guiSyncManager)) - .bindPlayerInventory(); - } - - protected ParentWidget createUI(GuiData data, PanelSyncManager guiSyncManager) { var column = Flow.column().top(24).margin(7, 0) .widthRel(1f).coverChildrenHeight(); diff --git a/src/main/java/gregtech/common/covers/CoverFluidFilter.java b/src/main/java/gregtech/common/covers/CoverFluidFilter.java index a0b6585ebd7..86b0fec7ee8 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidFilter.java +++ b/src/main/java/gregtech/common/covers/CoverFluidFilter.java @@ -33,6 +33,7 @@ import codechicken.lib.vec.Cuboid6; import codechicken.lib.vec.Matrix4; import com.cleanroommc.modularui.api.drawable.IKey; +import com.cleanroommc.modularui.api.widget.IWidget; import com.cleanroommc.modularui.drawable.Rectangle; import com.cleanroommc.modularui.factory.SidedPosGuiData; import com.cleanroommc.modularui.screen.ModularPanel; @@ -145,44 +146,49 @@ public boolean usesMui2() { @Override public ModularPanel buildUI(SidedPosGuiData guiData, PanelSyncManager guiSyncManager) { - var filteringMode = new EnumSyncValue<>(FluidFilterMode.class, this::getFilterMode, this::setFilterMode); - - guiSyncManager.syncValue("filtering_mode", filteringMode); - this.fluidFilterContainer.setMaxTransferSize(1); - return getFilter().createPanel(guiSyncManager) .size(176, 212).padding(7) .child(CoverWithUI.createTitleRow(getFilterContainer().getFilterStack())) - .child(Flow.column().widthRel(1f).align(Alignment.TopLeft).top(22).coverChildrenHeight() - .child(new EnumRowBuilder<>(FluidFilterMode.class) - .value(filteringMode) - .lang("cover.filter.mode.title") - .overlay(16, GTGuiTextures.FILTER_MODE_OVERLAY) - .build()) - .child(Flow.row() - .marginBottom(2) - .widthRel(1f) - .coverChildrenHeight() - .setEnabledIf(b -> getFilterMode() != FluidFilterMode.FILTER_BOTH) - .child(new ToggleButton() - .overlay(IKey.dynamic(() -> IKey.lang(allowFlow ? - "cover.generic.enabled" : - "cover.generic.disabled").get()) - .color(Color.WHITE.main).shadow(false)) - .tooltip(tooltip -> tooltip - .addLine(IKey.lang("cover.filter.allow_flow.tooltip"))) - .size(72, 18) - .value(new BooleanSyncValue(() -> allowFlow, b -> allowFlow = b))) - .child(IKey.lang("cover.filter.allow_flow.label") - .asWidget() - .height(18) - .alignX(1f))) - .child(new Rectangle().setColor(UI_TEXT_COLOR).asWidget() - .height(1).widthRel(0.95f).margin(0, 4)) - .child(getFilter().createWidgets(guiSyncManager))) + .child(createUI(guiData, guiSyncManager)) .child(SlotGroupWidget.playerInventory().bottom(7).left(7)); } + @Override + public @Nullable IWidget createUI(SidedPosGuiData data, PanelSyncManager manager) { + var filteringMode = new EnumSyncValue<>(FluidFilterMode.class, this::getFilterMode, this::setFilterMode); + + manager.syncValue("filtering_mode", filteringMode); + this.fluidFilterContainer.setMaxTransferSize(1); + + return Flow.column().widthRel(1f).align(Alignment.TopLeft).top(22).coverChildrenHeight() + .child(new EnumRowBuilder<>(FluidFilterMode.class) + .value(filteringMode) + .lang("cover.filter.mode.title") + .overlay(16, GTGuiTextures.FILTER_MODE_OVERLAY) + .build()) + .child(Flow.row() + .marginBottom(2) + .widthRel(1f) + .coverChildrenHeight() + .setEnabledIf(b -> getFilterMode() != FluidFilterMode.FILTER_BOTH) + .child(new ToggleButton() + .overlay(IKey.dynamic(() -> IKey.lang(allowFlow ? + "cover.generic.enabled" : + "cover.generic.disabled").get()) + .color(Color.WHITE.main).shadow(false)) + .tooltip(tooltip -> tooltip + .addLine(IKey.lang("cover.filter.allow_flow.tooltip"))) + .size(72, 18) + .value(new BooleanSyncValue(() -> allowFlow, b -> allowFlow = b))) + .child(IKey.lang("cover.filter.allow_flow.label") + .asWidget() + .height(18) + .alignX(1f))) + .child(new Rectangle().setColor(UI_TEXT_COLOR).asWidget() + .height(1).widthRel(0.95f).margin(0, 4)) + .child(getFilter().createWidgets(manager)); + } + @Override public void renderCover(@NotNull CCRenderState renderState, @NotNull Matrix4 translation, IVertexOperation[] pipeline, @NotNull Cuboid6 plateBox, @NotNull BlockRenderLayer layer) { diff --git a/src/main/java/gregtech/common/covers/CoverFluidRegulator.java b/src/main/java/gregtech/common/covers/CoverFluidRegulator.java index 141b51e0552..82180048a0d 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidRegulator.java +++ b/src/main/java/gregtech/common/covers/CoverFluidRegulator.java @@ -20,7 +20,6 @@ import net.minecraftforge.fml.relauncher.SideOnly; import com.cleanroommc.modularui.api.drawable.IKey; -import com.cleanroommc.modularui.factory.GuiData; import com.cleanroommc.modularui.factory.SidedPosGuiData; import com.cleanroommc.modularui.screen.ModularPanel; import com.cleanroommc.modularui.utils.Color; @@ -243,12 +242,12 @@ private boolean shouldDisplayAmountSlider() { } @Override - public ModularPanel buildUI(SidedPosGuiData guiData, PanelSyncManager guiSyncManager) { - return super.buildUI(guiData, guiSyncManager).height(192 + 36); + public ModularPanel confgurePanel(ModularPanel panel, boolean isSmallGui) { + return panel.height(228); } @Override - protected ParentWidget createUI(GuiData data, PanelSyncManager syncManager) { + public @NotNull ParentWidget createUI(SidedPosGuiData data, PanelSyncManager syncManager) { var transferMode = new EnumSyncValue<>(TransferMode.class, this::getTransferMode, this::setTransferMode); transferMode.updateCacheFromSource(true); syncManager.syncValue("transfer_mode", transferMode); diff --git a/src/main/java/gregtech/common/covers/CoverFluidVoiding.java b/src/main/java/gregtech/common/covers/CoverFluidVoiding.java index 4bd8472b55f..f0569de4a0c 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidVoiding.java +++ b/src/main/java/gregtech/common/covers/CoverFluidVoiding.java @@ -25,7 +25,6 @@ import codechicken.lib.vec.Cuboid6; import codechicken.lib.vec.Matrix4; import com.cleanroommc.modularui.api.drawable.IKey; -import com.cleanroommc.modularui.factory.GuiData; import com.cleanroommc.modularui.factory.SidedPosGuiData; import com.cleanroommc.modularui.screen.ModularPanel; import com.cleanroommc.modularui.utils.Color; @@ -72,12 +71,12 @@ public void renderCover(@NotNull CCRenderState renderState, @NotNull Matrix4 tra } @Override - public ModularPanel buildUI(SidedPosGuiData guiData, PanelSyncManager guiSyncManager) { - return super.buildUI(guiData, guiSyncManager).height(192 - 22); + public ModularPanel confgurePanel(ModularPanel panel, boolean isSmallGui) { + return panel.height(170); } @Override - protected ParentWidget createUI(GuiData data, PanelSyncManager syncManager) { + public @NotNull ParentWidget createUI(SidedPosGuiData data, PanelSyncManager syncManager) { var isWorking = new BooleanSyncValue(this::isWorkingEnabled, this::setWorkingEnabled); return super.createUI(data, syncManager) diff --git a/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java b/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java index b6a9e1cd1e5..52a039c6838 100644 --- a/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java +++ b/src/main/java/gregtech/common/covers/CoverFluidVoidingAdvanced.java @@ -20,7 +20,6 @@ import codechicken.lib.vec.Cuboid6; import codechicken.lib.vec.Matrix4; import com.cleanroommc.modularui.api.drawable.IKey; -import com.cleanroommc.modularui.factory.GuiData; import com.cleanroommc.modularui.factory.SidedPosGuiData; import com.cleanroommc.modularui.screen.ModularPanel; import com.cleanroommc.modularui.utils.Color; @@ -101,12 +100,13 @@ public VoidingMode getVoidingMode() { } @Override - public ModularPanel buildUI(SidedPosGuiData guiData, PanelSyncManager guiSyncManager) { - return super.buildUI(guiData, guiSyncManager).height(192 + 20); + public ModularPanel confgurePanel(ModularPanel panel, boolean isSmallGui) { + return super.confgurePanel(panel, isSmallGui) + .height(212); } @Override - protected ParentWidget createUI(GuiData data, PanelSyncManager syncManager) { + public @NotNull ParentWidget createUI(SidedPosGuiData data, PanelSyncManager syncManager) { var voidingMode = new EnumSyncValue<>(VoidingMode.class, this::getVoidingMode, this::setVoidingMode); syncManager.syncValue("voiding_mode", voidingMode); diff --git a/src/main/java/gregtech/common/covers/CoverItemFilter.java b/src/main/java/gregtech/common/covers/CoverItemFilter.java index 8c667ad8ce7..ff06c74d569 100644 --- a/src/main/java/gregtech/common/covers/CoverItemFilter.java +++ b/src/main/java/gregtech/common/covers/CoverItemFilter.java @@ -32,10 +32,10 @@ import codechicken.lib.vec.Cuboid6; import codechicken.lib.vec.Matrix4; import com.cleanroommc.modularui.api.drawable.IKey; +import com.cleanroommc.modularui.api.widget.IWidget; import com.cleanroommc.modularui.drawable.Rectangle; import com.cleanroommc.modularui.factory.SidedPosGuiData; import com.cleanroommc.modularui.screen.ModularPanel; -import com.cleanroommc.modularui.utils.Alignment; import com.cleanroommc.modularui.utils.Color; import com.cleanroommc.modularui.value.sync.BooleanSyncValue; import com.cleanroommc.modularui.value.sync.EnumSyncValue; @@ -148,41 +148,51 @@ public boolean usesMui2() { @Override public ModularPanel buildUI(SidedPosGuiData guiData, PanelSyncManager guiSyncManager) { - var filteringMode = new EnumSyncValue<>(ItemFilterMode.class, this::getFilterMode, this::setFilterMode); - - guiSyncManager.syncValue("filtering_mode", filteringMode); - return getFilter().createPanel(guiSyncManager) - .size(176, 212).padding(7) + .size(176, 212) .child(CoverWithUI.createTitleRow(getFilterContainer().getFilterStack()).left(4)) - .child(Flow.column().widthRel(1f).align(Alignment.TopLeft).top(22).coverChildrenHeight() - .child(new EnumRowBuilder<>(ItemFilterMode.class) - .value(filteringMode) - .lang("cover.filter.mode.title") - .overlay(16, GTGuiTextures.FILTER_MODE_OVERLAY) - .build()) - .child(Flow.row() - .marginBottom(2) - .widthRel(1f) - .coverChildrenHeight() - .setEnabledIf(b -> getFilterMode() != ItemFilterMode.FILTER_BOTH) - .child(new ToggleButton() - .overlay(IKey.dynamic(() -> IKey.lang(allowFlow ? - "cover.generic.enabled" : - "cover.generic.disabled").get()) - .color(Color.WHITE.main).shadow(false)) - .tooltip(tooltip -> tooltip - .addLine(IKey.lang("cover.filter.allow_flow.tooltip"))) - .size(72, 18) - .value(new BooleanSyncValue(() -> allowFlow, b -> allowFlow = b))) - .child(IKey.lang("cover.filter.allow_flow.label") - .asWidget() - .height(18) - .alignX(1f))) - .child(new Rectangle().setColor(UI_TEXT_COLOR).asWidget() - .height(1).widthRel(0.95f).margin(0, 4)) - .child(getFilter().createWidgets(guiSyncManager).left(0))) - .child(SlotGroupWidget.playerInventory().bottom(7).left(7)); + .child(createUI(guiData, guiSyncManager)) + .child(SlotGroupWidget.playerInventory().left(7)); + } + + @Override + public @Nullable IWidget createUI(SidedPosGuiData data, PanelSyncManager manager) { + var filteringMode = new EnumSyncValue<>(ItemFilterMode.class, this::getFilterMode, this::setFilterMode); + + manager.syncValue("filtering_mode", filteringMode); + + return Flow.column() + .widthRel(1f) + // .align(Alignment.TopLeft) + .margin(7, 0) + .top(22) + .coverChildrenHeight() + .child(new EnumRowBuilder<>(ItemFilterMode.class) + .value(filteringMode) + .lang("cover.filter.mode.title") + .overlay(16, GTGuiTextures.FILTER_MODE_OVERLAY) + .build()) + .child(Flow.row() + .marginBottom(2) + .widthRel(1f) + .coverChildrenHeight() + .setEnabledIf(b -> getFilterMode() != ItemFilterMode.FILTER_BOTH) + .child(new ToggleButton() + .overlay(IKey.dynamic(() -> IKey.lang(allowFlow ? + "cover.generic.enabled" : + "cover.generic.disabled").get()) + .color(Color.WHITE.main).shadow(false)) + .tooltip(tooltip -> tooltip + .addLine(IKey.lang("cover.filter.allow_flow.tooltip"))) + .size(72, 18) + .value(new BooleanSyncValue(() -> allowFlow, b -> allowFlow = b))) + .child(IKey.lang("cover.filter.allow_flow.label") + .asWidget() + .height(18) + .alignX(1f))) + .child(new Rectangle().setColor(UI_TEXT_COLOR).asWidget() + .height(1).widthRel(0.95f).margin(0, 4)) + .child(getFilter().createWidgets(manager).left(0)); } @Override diff --git a/src/main/java/gregtech/common/covers/CoverItemVoiding.java b/src/main/java/gregtech/common/covers/CoverItemVoiding.java index e8129ec11f3..04e0e81f171 100644 --- a/src/main/java/gregtech/common/covers/CoverItemVoiding.java +++ b/src/main/java/gregtech/common/covers/CoverItemVoiding.java @@ -22,7 +22,6 @@ import codechicken.lib.vec.Cuboid6; import codechicken.lib.vec.Matrix4; import com.cleanroommc.modularui.api.drawable.IKey; -import com.cleanroommc.modularui.factory.GuiData; import com.cleanroommc.modularui.factory.SidedPosGuiData; import com.cleanroommc.modularui.screen.ModularPanel; import com.cleanroommc.modularui.utils.Color; @@ -73,12 +72,13 @@ void voidAny(IItemHandler myItemHandler) { } @Override - public ModularPanel buildUI(SidedPosGuiData guiData, PanelSyncManager guiSyncManager) { - return super.buildUI(guiData, guiSyncManager).height(192 - 22); + public ModularPanel confgurePanel(ModularPanel panel, boolean isSmallGui) { + return super.confgurePanel(panel, isSmallGui) + .height(170); } @Override - protected ParentWidget createUI(GuiData data, PanelSyncManager guiSyncManager) { + public @NotNull ParentWidget createUI(SidedPosGuiData data, PanelSyncManager guiSyncManager) { var isWorking = new BooleanSyncValue(this::isWorkingEnabled, this::setWorkingEnabled); return super.createUI(data, guiSyncManager) diff --git a/src/main/java/gregtech/common/covers/CoverItemVoidingAdvanced.java b/src/main/java/gregtech/common/covers/CoverItemVoidingAdvanced.java index b739e7e6e1f..1436d083b92 100644 --- a/src/main/java/gregtech/common/covers/CoverItemVoidingAdvanced.java +++ b/src/main/java/gregtech/common/covers/CoverItemVoidingAdvanced.java @@ -17,7 +17,6 @@ import codechicken.lib.render.pipeline.IVertexOperation; import codechicken.lib.vec.Cuboid6; import codechicken.lib.vec.Matrix4; -import com.cleanroommc.modularui.factory.GuiData; import com.cleanroommc.modularui.factory.SidedPosGuiData; import com.cleanroommc.modularui.screen.ModularPanel; import com.cleanroommc.modularui.utils.Color; @@ -89,12 +88,13 @@ protected void voidOverflow(IItemHandler myItemHandler) { } @Override - public ModularPanel buildUI(SidedPosGuiData guiData, PanelSyncManager guiSyncManager) { - return super.buildUI(guiData, guiSyncManager).height(192 + 18); + public ModularPanel confgurePanel(ModularPanel panel, boolean isSmallGui) { + return super.confgurePanel(panel, isSmallGui) + .height(210); } @Override - protected ParentWidget createUI(GuiData data, PanelSyncManager guiSyncManager) { + public @NotNull ParentWidget createUI(SidedPosGuiData data, PanelSyncManager guiSyncManager) { var voidingMode = new EnumSyncValue<>(VoidingMode.class, this::getVoidingMode, this::setVoidingMode); guiSyncManager.syncValue("voiding_mode", voidingMode); diff --git a/src/main/java/gregtech/common/covers/CoverPump.java b/src/main/java/gregtech/common/covers/CoverPump.java index 659b916e80b..2eff405e294 100644 --- a/src/main/java/gregtech/common/covers/CoverPump.java +++ b/src/main/java/gregtech/common/covers/CoverPump.java @@ -9,7 +9,6 @@ import gregtech.api.cover.CoverWithUI; import gregtech.api.cover.CoverableView; import gregtech.api.mui.GTGuiTextures; -import gregtech.api.mui.GTGuis; import gregtech.api.util.GTTransferUtils; import gregtech.client.renderer.texture.Textures; import gregtech.client.renderer.texture.cube.SimpleSidedCubeRenderer; @@ -42,9 +41,7 @@ import codechicken.lib.vec.Matrix4; import com.cleanroommc.modularui.api.drawable.IDrawable; import com.cleanroommc.modularui.drawable.DynamicDrawable; -import com.cleanroommc.modularui.factory.GuiData; import com.cleanroommc.modularui.factory.SidedPosGuiData; -import com.cleanroommc.modularui.screen.ModularPanel; import com.cleanroommc.modularui.utils.Color; import com.cleanroommc.modularui.utils.MouseData; import com.cleanroommc.modularui.value.sync.EnumSyncValue; @@ -188,18 +185,8 @@ public boolean usesMui2() { return true; } - @Override - public ModularPanel buildUI(SidedPosGuiData guiData, PanelSyncManager guiSyncManager) { - var panel = GTGuis.createPanel(this, 176, 192); - + public @NotNull ParentWidget createUI(SidedPosGuiData data, PanelSyncManager syncManager) { getFluidFilterContainer().setMaxTransferSize(getMaxTransferRate()); - - return panel.child(CoverWithUI.createTitleRow(getPickItem())) - .child(createUI(guiData, guiSyncManager)) - .bindPlayerInventory(); - } - - protected ParentWidget createUI(GuiData data, PanelSyncManager syncManager) { var manualIOmode = new EnumSyncValue<>(ManualImportExportMode.class, this::getManualImportExportMode, this::setManualImportExportMode); diff --git a/src/main/java/gregtech/common/covers/CoverRoboticArm.java b/src/main/java/gregtech/common/covers/CoverRoboticArm.java index b1b99657adf..b38eb1a203c 100644 --- a/src/main/java/gregtech/common/covers/CoverRoboticArm.java +++ b/src/main/java/gregtech/common/covers/CoverRoboticArm.java @@ -19,7 +19,6 @@ import codechicken.lib.render.pipeline.IVertexOperation; import codechicken.lib.vec.Cuboid6; import codechicken.lib.vec.Matrix4; -import com.cleanroommc.modularui.factory.GuiData; import com.cleanroommc.modularui.factory.SidedPosGuiData; import com.cleanroommc.modularui.screen.ModularPanel; import com.cleanroommc.modularui.utils.Color; @@ -192,12 +191,13 @@ private boolean shouldDisplayAmountSlider() { } @Override - public ModularPanel buildUI(SidedPosGuiData guiData, PanelSyncManager guiSyncManager) { - return super.buildUI(guiData, guiSyncManager).height(192 + 36 + 18 + 2); + public ModularPanel confgurePanel(ModularPanel panel, boolean isSmallGui) { + return super.confgurePanel(panel, isSmallGui) + .height(248); } @Override - protected ParentWidget createUI(GuiData data, PanelSyncManager guiSyncManager) { + public @NotNull ParentWidget createUI(SidedPosGuiData data, PanelSyncManager guiSyncManager) { EnumSyncValue transferMode = new EnumSyncValue<>(TransferMode.class, this::getTransferMode, this::setTransferMode); guiSyncManager.syncValue("transfer_mode", transferMode); diff --git a/src/main/java/gregtech/common/covers/CoverStorage.java b/src/main/java/gregtech/common/covers/CoverStorage.java index 4d4f35a5ec1..4d6fd042461 100644 --- a/src/main/java/gregtech/common/covers/CoverStorage.java +++ b/src/main/java/gregtech/common/covers/CoverStorage.java @@ -4,7 +4,6 @@ import gregtech.api.cover.CoverDefinition; import gregtech.api.cover.CoverWithUI; import gregtech.api.cover.CoverableView; -import gregtech.api.mui.GTGuis; import gregtech.client.renderer.texture.Textures; import net.minecraft.entity.player.EntityPlayer; @@ -21,7 +20,6 @@ import codechicken.lib.render.pipeline.IVertexOperation; import codechicken.lib.vec.Cuboid6; import codechicken.lib.vec.Matrix4; -import com.cleanroommc.modularui.api.drawable.IKey; import com.cleanroommc.modularui.api.widget.IWidget; import com.cleanroommc.modularui.factory.SidedPosGuiData; import com.cleanroommc.modularui.screen.ModularPanel; @@ -30,6 +28,7 @@ import com.cleanroommc.modularui.widgets.ItemSlot; import com.cleanroommc.modularui.widgets.layout.Grid; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.util.ArrayList; import java.util.List; @@ -86,24 +85,24 @@ public boolean usesMui2() { } @Override - public ModularPanel buildUI(SidedPosGuiData guiData, PanelSyncManager guiSyncManager) { - guiSyncManager.registerSlotGroup("item_inv", this.storageHandler.getSlots()); + public ModularPanel confgurePanel(ModularPanel panel, boolean isSmallGui) { + return panel.height(MAX_HEIGHT); + } + + @Override + public @Nullable Grid createUI(SidedPosGuiData data, PanelSyncManager manager) { + manager.registerSlotGroup("item_inv", this.storageHandler.getSlots()); int rowSize = this.storageHandler.getSlots(); - List> widgets = new ArrayList<>(); - widgets.add(new ArrayList<>()); + List widgets = new ArrayList<>(); for (int i = 0; i < rowSize; i++) { - widgets.get(0) - .add(new ItemSlot().slot(SyncHandlers.itemSlot(this.storageHandler, i).slotGroup("item_inv"))); + widgets.add(new ItemSlot().slot(SyncHandlers.itemSlot(this.storageHandler, i).slotGroup("item_inv"))); } - return GTGuis.createPanel(this, MAX_WIDTH, MAX_HEIGHT) - .child(IKey.lang("cover.storage.title").asWidget().pos(5, 5)) - .bindPlayerInventory() - .child(new Grid() - .top((MAX_HEIGHT - SLOT_SIZE * 5) / 2).left(7).right(7).height(18) - .minElementMargin(0, 0) - .minColWidth(18).minRowHeight(18) - .matrix(widgets)); + return new Grid() + .top((MAX_HEIGHT - SLOT_SIZE * 5) / 2).left(7).right(7).height(18) + .minElementMargin(0, 0) + .minColWidth(18).minRowHeight(18) + .mapTo(rowSize, widgets); } @Override diff --git a/src/main/java/gregtech/common/covers/ender/CoverAbstractEnderLink.java b/src/main/java/gregtech/common/covers/ender/CoverAbstractEnderLink.java index 29e7e9a0b9a..f5c6825b5d9 100644 --- a/src/main/java/gregtech/common/covers/ender/CoverAbstractEnderLink.java +++ b/src/main/java/gregtech/common/covers/ender/CoverAbstractEnderLink.java @@ -29,7 +29,6 @@ import com.cleanroommc.modularui.drawable.DynamicDrawable; import com.cleanroommc.modularui.drawable.GuiTextures; import com.cleanroommc.modularui.drawable.Rectangle; -import com.cleanroommc.modularui.factory.GuiData; import com.cleanroommc.modularui.factory.SidedPosGuiData; import com.cleanroommc.modularui.network.NetworkUtils; import com.cleanroommc.modularui.screen.ModularPanel; @@ -39,6 +38,7 @@ import com.cleanroommc.modularui.value.sync.PanelSyncManager; import com.cleanroommc.modularui.value.sync.StringSyncValue; import com.cleanroommc.modularui.value.sync.SyncHandler; +import com.cleanroommc.modularui.widget.ParentWidget; import com.cleanroommc.modularui.widgets.ButtonWidget; import com.cleanroommc.modularui.widgets.ListWidget; import com.cleanroommc.modularui.widgets.ToggleButton; @@ -136,20 +136,15 @@ public boolean usesMui2() { } @Override - public ModularPanel buildUI(SidedPosGuiData guiData, PanelSyncManager guiSyncManager) { - var panel = GTGuis.createPanel(this, 176, 192); - - this.playerUUID = guiData.getPlayer().getUniqueID(); - - return panel.child(CoverWithUI.createTitleRow(getPickItem())) - .child(createWidgets(guiData, guiSyncManager)) - .bindPlayerInventory(); + public ModularPanel confgurePanel(ModularPanel panel, boolean isSmallGui) { + return panel.height(192); } - protected Flow createWidgets(GuiData data, PanelSyncManager syncManager) { + public @NotNull ParentWidget createUI(SidedPosGuiData data, PanelSyncManager manager) { + this.playerUUID = data.getPlayer().getUniqueID(); var name = new StringSyncValue(this::getColorStr, this::updateColor); - var entrySelectorSH = syncManager.panel("entry_selector", entrySelector(getType()), true); + var entrySelectorSH = manager.panel("entry_selector", entrySelector(getType()), true); return Flow.column().coverChildrenHeight().top(24) .margin(7, 0).widthRel(1f) diff --git a/src/main/java/gregtech/common/covers/ender/CoverEnderFluidLink.java b/src/main/java/gregtech/common/covers/ender/CoverEnderFluidLink.java index 4c373dfd41c..c08aea3f993 100644 --- a/src/main/java/gregtech/common/covers/ender/CoverEnderFluidLink.java +++ b/src/main/java/gregtech/common/covers/ender/CoverEnderFluidLink.java @@ -29,10 +29,10 @@ import codechicken.lib.vec.Cuboid6; import codechicken.lib.vec.Matrix4; import com.cleanroommc.modularui.api.widget.IWidget; -import com.cleanroommc.modularui.factory.GuiData; +import com.cleanroommc.modularui.factory.SidedPosGuiData; import com.cleanroommc.modularui.value.sync.EnumSyncValue; import com.cleanroommc.modularui.value.sync.PanelSyncManager; -import com.cleanroommc.modularui.widgets.layout.Flow; +import com.cleanroommc.modularui.widget.ParentWidget; import org.jetbrains.annotations.NotNull; import java.util.UUID; @@ -143,15 +143,16 @@ protected IWidget createEntrySlot() { .marginRight(2); } - protected Flow createWidgets(GuiData data, PanelSyncManager syncManager) { + @Override + public @NotNull ParentWidget createUI(SidedPosGuiData data, PanelSyncManager manager) { getFluidFilterContainer().setMaxTransferSize(1); var pumpMode = new EnumSyncValue<>(CoverPump.PumpMode.class, this::getPumpMode, this::setPumpMode); - syncManager.syncValue("pump_mode", pumpMode); + manager.syncValue("pump_mode", pumpMode); pumpMode.updateCacheFromSource(true); - return super.createWidgets(data, syncManager) - .child(getFluidFilterContainer().initUI(data, syncManager)) + return super.createUI(data, manager) + .child(getFluidFilterContainer().initUI(data, manager)) .child(new EnumRowBuilder<>(CoverPump.PumpMode.class) .value(pumpMode) .overlay(GTGuiTextures.CONVEYOR_MODE_OVERLAY) diff --git a/src/main/java/gregtech/common/metatileentities/storage/MetaTileEntityCrate.java b/src/main/java/gregtech/common/metatileentities/storage/MetaTileEntityCrate.java index 1da4918ffcc..57691c4ad29 100644 --- a/src/main/java/gregtech/common/metatileentities/storage/MetaTileEntityCrate.java +++ b/src/main/java/gregtech/common/metatileentities/storage/MetaTileEntityCrate.java @@ -1,9 +1,11 @@ package gregtech.common.metatileentities.storage; +import gregtech.api.cover.CoverWithUI; import gregtech.api.items.itemhandlers.GTItemStackHandler; import gregtech.api.items.toolitem.ToolClasses; import gregtech.api.metatileentity.MetaTileEntity; import gregtech.api.metatileentity.interfaces.IGregTechTileEntity; +import gregtech.api.mui.GTGuiTextures; import gregtech.api.mui.GTGuis; import gregtech.api.recipes.ModHandler; import gregtech.api.unification.material.Material; @@ -31,13 +33,21 @@ import codechicken.lib.render.CCRenderState; import codechicken.lib.render.pipeline.IVertexOperation; import codechicken.lib.vec.Matrix4; +import com.cleanroommc.modularui.api.IPanelHandler; import com.cleanroommc.modularui.api.drawable.IKey; +import com.cleanroommc.modularui.api.widget.IGuiAction; import com.cleanroommc.modularui.api.widget.IWidget; +import com.cleanroommc.modularui.drawable.GuiTextures; +import com.cleanroommc.modularui.drawable.ItemDrawable; import com.cleanroommc.modularui.factory.PosGuiData; +import com.cleanroommc.modularui.factory.SidedPosGuiData; import com.cleanroommc.modularui.screen.ModularPanel; +import com.cleanroommc.modularui.utils.Alignment; import com.cleanroommc.modularui.value.sync.PanelSyncManager; import com.cleanroommc.modularui.value.sync.SyncHandlers; +import com.cleanroommc.modularui.widgets.ButtonWidget; import com.cleanroommc.modularui.widgets.ItemSlot; +import com.cleanroommc.modularui.widgets.layout.Flow; import com.cleanroommc.modularui.widgets.layout.Grid; import org.apache.commons.lang3.tuple.Pair; import org.jetbrains.annotations.NotNull; @@ -164,9 +174,11 @@ public ModularPanel buildUI(PosGuiData guiData, PanelSyncManager panelSyncManage }))); } } - return GTGuis.createPanel(this, rowSize * 18 + 14, 18 + 4 * 18 + 5 + 14 + 18 * rows) - .child(IKey.lang(getMetaFullName()).asWidget().pos(5, 5)) + var panel = GTGuis.createPanel(this, rowSize * 18 + 14, 18 + 4 * 18 + 5 + 14 + 18 * rows); + + return panel.child(IKey.lang(getMetaFullName()).asWidget().pos(5, 5)) .bindPlayerInventory() + .childIf(hasAnyCover(), createCoverWidgets(guiData, panelSyncManager, panel)) .child(new Grid() .top(18).left(7).right(7).height(rows * 18) .minElementMargin(0, 0) @@ -174,6 +186,73 @@ public ModularPanel buildUI(PosGuiData guiData, PanelSyncManager panelSyncManage .matrix(widgets)); } + private Flow createCoverWidgets(PosGuiData data, PanelSyncManager manager, ModularPanel mainPanel) { + Flow leftCoverColumn = Flow.column() + .background(GuiTextures.MC_BACKGROUND) + .crossAxisAlignment(Alignment.CrossAxis.CENTER) + .padding(4) + .width(18 + 6) + .topRel(0.25f) + .left(-20) + .height(22 * 3); + Flow rightCoverColumn = Flow.column() + .background(GuiTextures.MC_BACKGROUND) + .crossAxisAlignment(Alignment.CrossAxis.CENTER) + .padding(4) + .width(18 + 6) + .topRel(0.25f) + .right(-20) + .height(22 * 3); + + int numCovers = 0; + List coverPanels = new ArrayList<>(); + for (EnumFacing side : EnumFacing.VALUES) { + if (getCoverAtSide(side) instanceof CoverWithUI cover) { + if (!cover.shouldShowSmallUI()) continue; + + SidedPosGuiData sideData = new SidedPosGuiData(data.getPlayer(), data.getX(), + data.getY(), data.getZ(), side); + + IPanelHandler panel = manager.panel("side: " + side.getName(), + (syncManager, syncHandler) -> cover.getSmallGUI(sideData, syncManager), true); + coverPanels.add(panel); + + IGuiAction.MousePressed handlePanel = i -> { + if (!panel.isPanelOpen()) { + coverPanels.forEach(h -> { + if (h.isPanelOpen()) h.closePanel(); + }); + panel.openPanel(); + } else { + panel.closePanel(); + } + return true; + }; + + // Use the left side for the first three covers + if (numCovers++ < 3) { + leftCoverColumn.child(new ButtonWidget<>() + .size(18) + .marginBottom(2) + .background(GTGuiTextures.SLOT) + .onMousePressed(handlePanel) + .overlay(new ItemDrawable(cover.getPickItem()).asIcon())); + } else { + rightCoverColumn.child(new ButtonWidget<>() + .size(18) + .marginBottom(2) + .background(GTGuiTextures.SLOT) + .onMousePressed(handlePanel) + .overlay(new ItemDrawable(cover.getPickItem()).asIcon())); + } + } + } + return Flow.row() + .expanded() + .child(leftCoverColumn) + .child(rightCoverColumn); + } + @Override public boolean onRightClick(EntityPlayer playerIn, EnumHand hand, EnumFacing facing, CuboidRayTraceResult hitResult) { @@ -254,7 +333,7 @@ public void writeItemStackData(NBTTagCompound data) { } @Override - public void receiveCustomData(int dataId, PacketBuffer buf) { + public void receiveCustomData(int dataId, @NotNull PacketBuffer buf) { super.receiveCustomData(dataId, buf); if (dataId == IS_TAPED) {