Skip to content

Port many blocks to MUI2 #2624

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 29 commits into from
Jan 29, 2025
Merged
Show file tree
Hide file tree
Changes from 20 commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
b73a731
Muffler
Zorbatron Sep 19, 2024
87e99ae
Battery buffer
Zorbatron Sep 19, 2024
adec34e
PA machine hatch
Zorbatron Sep 19, 2024
3681360
Block breaker
Zorbatron Sep 19, 2024
73642ab
Object holder
Zorbatron Sep 19, 2024
0f71bfa
Don't use the full path like that
Zorbatron Sep 19, 2024
b795417
pre rebase
Zorbatron Sep 19, 2024
c8f1cbd
Merge branch 'master' into zb-lotsa-mui2
Zorbatron Sep 19, 2024
e41e351
Intermediate commit (tank not syncing?)
Zorbatron Sep 19, 2024
b8d7c85
Fix reservoir hatch input slot filtering
Zorbatron Sep 19, 2024
faa16f0
spotless :skull:
Zorbatron Sep 19, 2024
2b0c1b3
Fisher
Zorbatron Sep 19, 2024
85a980a
Primitive pump hatch
Zorbatron Sep 19, 2024
62d9bad
Steam hatch
Zorbatron Sep 19, 2024
f38a3db
Buffers
Zorbatron Nov 8, 2024
b82aff5
Rotor holder
Zorbatron Nov 8, 2024
ce2803e
Merge branch 'master' into zb-lotsa-mui2
Zorbatron Jan 22, 2025
cd2fd3c
Merge branch 'GregTechCEu:master' into zb-lotsa-mui2
Zorbatron Jan 22, 2025
16df071
Compiles again!
Zorbatron Jan 22, 2025
76e1c1f
Merge branch 'master' into zb-lotsa-mui2
Zorbatron Jan 23, 2025
5ab3620
Address reservoir hatch review
Zorbatron Jan 23, 2025
7475050
Address fisher review
Zorbatron Jan 23, 2025
1e491fb
Address steam hatch review
Zorbatron Jan 23, 2025
eeddd04
Address pump hatch review
Zorbatron Jan 23, 2025
6694a0d
Use custom IDrawable overlay.
Zorbatron Jan 24, 2025
abffbac
Remove DrawableColorOverlay and use lambdas
Zorbatron Jan 27, 2025
6086da9
Don't use anonymous class to hide tooltip in Machine Hatches
Zorbatron Jan 27, 2025
5e3b7ac
Fogor some if statements
Zorbatron Jan 27, 2025
ed6af5e
Don't mark tooltip dirty
Zorbatron Jan 27, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 47 additions & 0 deletions src/main/java/gregtech/api/mui/widget/BlockableSlotWidget.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package gregtech.api.mui.widget;

import com.cleanroommc.modularui.drawable.GuiDraw;
import com.cleanroommc.modularui.screen.viewport.ModularGuiContext;
import com.cleanroommc.modularui.theme.WidgetTheme;
import com.cleanroommc.modularui.widgets.ItemSlot;

import java.util.function.BooleanSupplier;

/**
* Basically just your normal SlotWidget, but can render the slot as "grayed-out" with a Supplier value.
* MUI2 version of {@link gregtech.api.gui.widgets.BlockableSlotWidget}
*/
public class BlockableSlotWidget extends ItemSlot {

private static final int OVERLAY_COLOR = 0x80404040;

private BooleanSupplier isBlocked = () -> false;

public BlockableSlotWidget() {
super();
}

public BlockableSlotWidget setIsBlocked(BooleanSupplier isBlocked) {
this.isBlocked = isBlocked;
return this;
}

@Override
public boolean isHovering() {
return super.isHovering() && !isBlocked.getAsBoolean();
}

@Override
public void draw(ModularGuiContext context, WidgetTheme widgetTheme) {
super.draw(context, widgetTheme);
if (isBlocked.getAsBoolean()) {
GuiDraw.drawRect(1, 1, 16, 16, OVERLAY_COLOR);
}
}

@Override
public void drawForeground(ModularGuiContext context) {
if (isBlocked.getAsBoolean()) return;
super.drawForeground(context);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,19 +6,16 @@
import gregtech.api.capability.IControllable;
import gregtech.api.capability.IElectricItem;
import gregtech.api.capability.impl.EnergyContainerBatteryBuffer;
import gregtech.api.gui.GuiTextures;
import gregtech.api.gui.ModularUI;
import gregtech.api.gui.ModularUI.Builder;
import gregtech.api.gui.widgets.SlotWidget;
import gregtech.api.metatileentity.*;
import gregtech.api.metatileentity.interfaces.IGregTechTileEntity;
import gregtech.api.mui.GTGuiTextures;
import gregtech.api.mui.GTGuis;
import gregtech.api.util.TextFormattingUtil;
import gregtech.client.renderer.texture.Textures;
import gregtech.client.utils.PipelineUtil;
import gregtech.common.ConfigHolder;

import net.minecraft.client.resources.I18n;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.EnumFacing;
Expand All @@ -37,6 +34,15 @@
import codechicken.lib.render.CCRenderState;
import codechicken.lib.render.pipeline.IVertexOperation;
import codechicken.lib.vec.Matrix4;
import com.cleanroommc.modularui.api.drawable.IKey;
import com.cleanroommc.modularui.api.widget.IWidget;
import com.cleanroommc.modularui.factory.PosGuiData;
import com.cleanroommc.modularui.screen.ModularPanel;
import com.cleanroommc.modularui.value.sync.PanelSyncManager;
import com.cleanroommc.modularui.value.sync.SyncHandlers;
import com.cleanroommc.modularui.widgets.ItemSlot;
import com.cleanroommc.modularui.widgets.SlotGroupWidget;
import com.cleanroommc.modularui.widgets.layout.Grid;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

Expand Down Expand Up @@ -137,27 +143,42 @@ protected void initializeInventory() {
}

@Override
protected ModularUI createUI(EntityPlayer entityPlayer) {
public boolean usesMui2() {
return true;
}

@Override
public ModularPanel buildUI(PosGuiData guiData, PanelSyncManager guiSyncManager) {
int rowSize = (int) Math.sqrt(inventorySize);
int colSize = rowSize;
if (inventorySize == 8) {
rowSize = 4;
colSize = 2;
}
Builder builder = ModularUI.builder(GuiTextures.BACKGROUND, 176,
18 + 18 * colSize + 94)
.label(6, 6, getMetaFullName());

guiSyncManager.registerSlotGroup("item_inv", rowSize);

int index = 0;
List<List<IWidget>> widgets = new ArrayList<>();
for (int y = 0; y < colSize; y++) {
widgets.add(new ArrayList<>());
for (int x = 0; x < rowSize; x++) {
builder.widget(new SlotWidget(importItems, index++, 88 - rowSize * 9 + x * 18, 18 + y * 18, true, true)
.setBackgroundTexture(GuiTextures.SLOT, GuiTextures.BATTERY_OVERLAY));
widgets.get(y).add(new ItemSlot().slot(SyncHandlers.itemSlot(this.importItems, index++)
.slotGroup("item_inv"))
.background(GTGuiTextures.SLOT, GTGuiTextures.BATTERY_OVERLAY));
}
}

builder.bindPlayerInventory(entityPlayer.inventory, GuiTextures.SLOT, 7, 18 + 18 * colSize + 12);
return builder.build(getHolder(), entityPlayer);
// TODO: Change the position of the name when it's standardized.
return GTGuis.createPanel(this, 176, 18 + 18 * colSize + 94)
.child(IKey.lang(getMetaFullName()).asWidget().pos(5, 5))
.child(SlotGroupWidget.playerInventory().left(7).bottom(7))
.child(new Grid()
.top(18).height(colSize * 18).width(rowSize * 18)
.minElementMargin(0, 0)
.minColWidth(18).minRowHeight(18)
.alignX(0.5f)
.matrix(widgets));
}

@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,11 @@
package gregtech.common.metatileentities.electric;

import gregtech.api.GTValues;
import gregtech.api.gui.GuiTextures;
import gregtech.api.gui.ModularUI;
import gregtech.api.gui.ModularUI.Builder;
import gregtech.api.gui.widgets.SlotWidget;
import gregtech.api.items.itemhandlers.GTItemStackHandler;
import gregtech.api.metatileentity.MetaTileEntity;
import gregtech.api.metatileentity.TieredMetaTileEntity;
import gregtech.api.metatileentity.interfaces.IGregTechTileEntity;
import gregtech.api.mui.GTGuis;
import gregtech.api.util.BlockUtility;
import gregtech.api.util.GTTransferUtils;
import gregtech.api.util.GregFakePlayer;
Expand Down Expand Up @@ -38,8 +35,18 @@
import codechicken.lib.render.CCRenderState;
import codechicken.lib.render.pipeline.IVertexOperation;
import codechicken.lib.vec.Matrix4;
import com.cleanroommc.modularui.api.drawable.IKey;
import com.cleanroommc.modularui.api.widget.IWidget;
import com.cleanroommc.modularui.factory.PosGuiData;
import com.cleanroommc.modularui.screen.ModularPanel;
import com.cleanroommc.modularui.value.sync.PanelSyncManager;
import com.cleanroommc.modularui.value.sync.SyncHandlers;
import com.cleanroommc.modularui.widgets.ItemSlot;
import com.cleanroommc.modularui.widgets.SlotGroupWidget;
import com.cleanroommc.modularui.widgets.layout.Grid;
import org.jetbrains.annotations.Nullable;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

Expand Down Expand Up @@ -247,20 +254,34 @@ protected IItemHandlerModifiable createExportItemHandler() {
}

@Override
protected ModularUI createUI(EntityPlayer entityPlayer) {
public boolean usesMui2() {
return true;
}

@Override
public ModularPanel buildUI(PosGuiData guiData, PanelSyncManager guiSyncManager) {
int rowSize = (int) Math.sqrt(getInventorySize());
Builder builder = ModularUI.builder(GuiTextures.BACKGROUND, 176, 18 + 18 * rowSize + 94)
.label(10, 5, getMetaFullName());

for (int y = 0; y < rowSize; y++) {
for (int x = 0; x < rowSize; x++) {
int index = y * rowSize + x;
builder.widget(new SlotWidget(exportItems, index, 89 - rowSize * 9 + x * 18, 18 + y * 18, true, false)
.setBackgroundTexture(GuiTextures.SLOT));
guiSyncManager.registerSlotGroup("item_inv", rowSize);

List<List<IWidget>> widgets = new ArrayList<>();
for (int i = 0; i < rowSize; i++) {
widgets.add(new ArrayList<>());
for (int j = 0; j < rowSize; j++) {
int index = i * rowSize + j;
widgets.get(i).add(new ItemSlot().slot(SyncHandlers.itemSlot(exportItems, index)
.slotGroup("item_inv").accessibility(false, true)));
}
}
builder.bindPlayerInventory(entityPlayer.inventory, GuiTextures.SLOT, 7, 18 + 18 * rowSize + 12);
return builder.build(getHolder(), entityPlayer);

return GTGuis.createPanel(this, 176, 18 + 18 * rowSize + 94)
.child(IKey.lang(getMetaFullName()).asWidget().pos(5, 5))
.child(SlotGroupWidget.playerInventory().left(7).bottom(7))
.child(new Grid()
.top(18).height(rowSize * 18)
.minElementMargin(0, 0)
.minColWidth(18).minRowHeight(18)
.alignX(0.5f)
.matrix(widgets));
}

@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -1,21 +1,19 @@
package gregtech.common.metatileentities.electric;

import gregtech.api.GTValues;
import gregtech.api.gui.GuiTextures;
import gregtech.api.gui.ModularUI;
import gregtech.api.gui.widgets.SlotWidget;
import gregtech.api.items.itemhandlers.GTItemStackHandler;
import gregtech.api.metatileentity.MetaTileEntity;
import gregtech.api.metatileentity.TieredMetaTileEntity;
import gregtech.api.metatileentity.interfaces.IGregTechTileEntity;
import gregtech.api.mui.GTGuiTextures;
import gregtech.api.mui.GTGuis;
import gregtech.api.unification.OreDictUnifier;
import gregtech.api.util.GTTransferUtils;
import gregtech.client.renderer.texture.Textures;

import net.minecraft.block.BlockLiquid;
import net.minecraft.block.material.Material;
import net.minecraft.client.resources.I18n;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.ResourceLocation;
Expand All @@ -30,9 +28,19 @@
import codechicken.lib.render.CCRenderState;
import codechicken.lib.render.pipeline.IVertexOperation;
import codechicken.lib.vec.Matrix4;
import com.cleanroommc.modularui.api.drawable.IKey;
import com.cleanroommc.modularui.api.widget.IWidget;
import com.cleanroommc.modularui.factory.PosGuiData;
import com.cleanroommc.modularui.screen.ModularPanel;
import com.cleanroommc.modularui.value.sync.PanelSyncManager;
import com.cleanroommc.modularui.value.sync.SyncHandlers;
import com.cleanroommc.modularui.widgets.ItemSlot;
import com.cleanroommc.modularui.widgets.SlotGroupWidget;
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;

public class MetaTileEntityFisher extends TieredMetaTileEntity {
Expand All @@ -57,25 +65,38 @@ public MetaTileEntity createMetaTileEntity(IGregTechTileEntity tileEntity) {
}

@Override
protected ModularUI createUI(EntityPlayer entityPlayer) {
int rowSize = (int) Math.sqrt(inventorySize);
public boolean usesMui2() {
return true;
}

ModularUI.Builder builder = ModularUI.builder(GuiTextures.BACKGROUND, 176,
18 + 18 * rowSize + 94)
.label(10, 5, getMetaFullName())
.widget(new SlotWidget(importItems, 0, 18, 18, true, true)
.setBackgroundTexture(GuiTextures.SLOT, GuiTextures.STRING_SLOT_OVERLAY));

for (int y = 0; y < rowSize; y++) {
for (int x = 0; x < rowSize; x++) {
int index = y * rowSize + x;
builder.widget(new SlotWidget(exportItems, index, 89 - rowSize * 9 + x * 18, 18 + y * 18, true, false)
.setBackgroundTexture(GuiTextures.SLOT));
@Override
public ModularPanel buildUI(PosGuiData guiData, PanelSyncManager guiSyncManager) {
int rowSize = (int) Math.sqrt(inventorySize);
guiSyncManager.registerSlotGroup("item_in", 1);

List<List<IWidget>> widgets = new ArrayList<>();
for (int i = 0; i < rowSize; i++) {
widgets.add(new ArrayList<>());
for (int j = 0; j < rowSize; j++) {
int index = i * rowSize + j;
widgets.get(i).add(new ItemSlot().slot(SyncHandlers.itemSlot(exportItems, index)
.accessibility(false, true)));
}
}

builder.bindPlayerInventory(entityPlayer.inventory, GuiTextures.SLOT, 7, 18 + 18 * rowSize + 12);
return builder.build(getHolder(), entityPlayer);
return GTGuis.createPanel(this, 176, 18 + 18 * rowSize + 94)
.child(IKey.lang(getMetaFullName()).asWidget().pos(5, 5))
.child(SlotGroupWidget.playerInventory().left(7).bottom(7))
.child(new ItemSlot().slot(SyncHandlers.itemSlot(importItems, 0)
.slotGroup("item_in"))
.background(GTGuiTextures.SLOT, GTGuiTextures.STRING_SLOT_OVERLAY)
.pos(7 + 9, 9 * (rowSize + 1)))
.child(new Grid()
.top(18).alignX(0.5f)
.height(rowSize * 18)
.minElementMargin(0, 0)
.minColWidth(18).minRowHeight(18)
.matrix(widgets));
}

@Override
Expand Down
Loading
Loading