Skip to content

Commit c622751

Browse files
authored
Port Quantum Storage to MUI2 (#2554)
1 parent 5c70731 commit c622751

21 files changed

+976
-600
lines changed

src/main/java/gregtech/api/gui/Widget.java

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
import net.minecraftforge.fml.relauncher.SideOnly;
2424

2525
import com.google.common.base.Preconditions;
26-
import org.jetbrains.annotations.Nullable;
2726
import org.lwjgl.opengl.GL11;
2827

2928
import java.awt.*;
@@ -311,28 +310,6 @@ public static void drawText(String text, float x, float y, float scale, int colo
311310
GlStateManager.enableBlend();
312311
}
313312

314-
@SideOnly(Side.CLIENT)
315-
public static void drawItemStack(ItemStack itemStack, int x, int y, @Nullable String altTxt) {
316-
GlStateManager.pushMatrix();
317-
GlStateManager.translate(0.0F, 0.0F, 32.0F);
318-
GlStateManager.color(1F, 1F, 1F, 1F);
319-
GlStateManager.enableDepth();
320-
GlStateManager.enableRescaleNormal();
321-
GlStateManager.enableLighting();
322-
RenderHelper.enableGUIStandardItemLighting();
323-
OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240.0f, 240.0f);
324-
Minecraft mc = Minecraft.getMinecraft();
325-
RenderItem itemRender = mc.getRenderItem();
326-
itemRender.renderItemAndEffectIntoGUI(itemStack, x, y);
327-
itemRender.renderItemOverlayIntoGUI(mc.fontRenderer, itemStack, x, y, altTxt);
328-
GlStateManager.disableRescaleNormal();
329-
GlStateManager.disableLighting();
330-
GlStateManager.color(1F, 1F, 1F, 1F);
331-
GlStateManager.popMatrix();
332-
GlStateManager.enableBlend();
333-
GlStateManager.disableDepth();
334-
}
335-
336313
@SideOnly(Side.CLIENT)
337314
public static List<String> getItemToolTip(ItemStack itemStack) {
338315
Minecraft mc = Minecraft.getMinecraft();

src/main/java/gregtech/api/mui/GTGuiTextures.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -283,6 +283,10 @@ private static String id(String path) {
283283
public static final UITexture PRIMITIVE_BLAST_FURNACE_PROGRESS_BAR = fullImage(
284284
"textures/gui/primitive/progress_bar_primitive_blast_furnace.png");
285285

286+
public static final UITexture FLUID_VOID_OVERLAY = fullImage("textures/gui/widget/button_fluid_void.png", true);
287+
public static final UITexture ITEM_VOID_OVERLAY = fullImage("textures/gui/widget/button_item_void.png", true);
288+
public static final UITexture FLUID_LOCK_OVERLAY = fullImage("textures/gui/widget/button_lock.png", true);
289+
286290
// todo bronze/steel/primitive fluid slots?
287291

288292
// SLOT OVERLAYS

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

Lines changed: 42 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -67,24 +67,24 @@ public void detectAndSendChanges(boolean init) {
6767
} else if (lastFluid != null && current.amount != lastFluid.amount) {
6868
lastFluid.amount = current.amount;
6969
syncToClient(UPDATE_AMOUNT, buffer -> buffer.writeInt(current.amount));
70-
}
70+
} else if (!isPhantom() && canLockFluid() &&
71+
!GTUtility.areFluidStacksEqual(this.phantomFluid, this.lockedFluid.get())) {
72+
this.phantomFluid = this.lockedFluid.get();
73+
sync(LOCK_FLUID, buffer -> {
74+
buffer.writeBoolean(this.isLocked.getAsBoolean());
75+
NetworkUtils.writeFluidStack(buffer, this.phantomFluid);
76+
});
77+
}
7178
}
7279

73-
public void lockFluid(FluidStack stack, boolean sync) {
80+
public void lockFluid(FluidStack stack) {
7481
if (!canLockFluid()) return;
7582
this.jeiHandler.accept(stack);
76-
if (sync) sync(LOCK_FLUID, buffer -> {
77-
buffer.writeBoolean(stack != null);
78-
NetworkUtils.writeFluidStack(buffer, stack);
79-
});
8083
}
8184

82-
public void lockFluid(boolean locked, boolean sync) {
85+
public void lockFluid(boolean locked) {
86+
if (!canLockFluid()) return;
8387
this.lockHandler.accept(locked);
84-
if (sync) sync(LOCK_FLUID, buffer -> {
85-
buffer.writeBoolean(locked);
86-
NetworkUtils.writeFluidStack(buffer, null);
87-
});
8888
}
8989

9090
public GTFluidSyncHandler handleLocking(@NotNull Supplier<FluidStack> lockedFluid,
@@ -106,10 +106,13 @@ public void setFluid(FluidStack fluid) {
106106
fluidTank.setFluid(fluid);
107107
} else {
108108
tank.drain(Integer.MAX_VALUE, true);
109-
if (fluid != null) tank.fill(fluid, true);
109+
if (!GTUtility.isEmpty(fluid)) tank.fill(fluid, true);
110+
}
111+
if (canLockFluid() && isLocked.getAsBoolean() && !GTUtility.isEmpty(fluid)) {
112+
lockFluid(fluid);
110113
}
111-
if (!isPhantom() || fluid == null) return;
112-
if (this.phantomFluid == null || this.phantomFluid.getFluid() != fluid.getFluid()) {
114+
if (!isPhantom() || GTUtility.isEmpty(fluid)) return;
115+
if (GTUtility.isEmpty(this.phantomFluid) || this.phantomFluid.getFluid() != fluid.getFluid()) {
113116
this.phantomFluid = fluid;
114117
}
115118
}
@@ -153,9 +156,16 @@ public boolean isPhantom() {
153156
return phantom;
154157
}
155158

159+
public GTFluidSyncHandler showAmount(boolean inSlot, boolean inTooltip) {
160+
return showAmount(() -> inSlot, () -> inTooltip);
161+
}
162+
163+
public GTFluidSyncHandler showAmount(BooleanSupplier inSlot, BooleanSupplier inTooltip) {
164+
return showAmountOnSlot(inSlot).showAmountInTooltip(inTooltip);
165+
}
166+
156167
public GTFluidSyncHandler showAmountInTooltip(boolean showAmount) {
157-
this.showAmountInTooltip = () -> showAmount;
158-
return this;
168+
return showAmountInTooltip(() -> showAmount);
159169
}
160170

161171
public GTFluidSyncHandler showAmountInTooltip(BooleanSupplier showAmount) {
@@ -170,8 +180,7 @@ public boolean showAmountInTooltip() {
170180
}
171181

172182
public GTFluidSyncHandler showAmountOnSlot(boolean showAmount) {
173-
this.showAmountOnSlot = () -> showAmount;
174-
return this;
183+
return showAmountOnSlot(() -> showAmount);
175184
}
176185

177186
public GTFluidSyncHandler showAmountOnSlot(BooleanSupplier showAmount) {
@@ -237,6 +246,7 @@ public int getFluidAmount() {
237246

238247
public void handleTooltip(@NotNull RichTooltip tooltip) {
239248
IKey nameKey = getFluidNameKey();
249+
240250
if (nameKey != IKey.EMPTY) {
241251
tooltip.addLine(nameKey);
242252
}
@@ -277,7 +287,8 @@ public void readOnClient(int id, PacketBuffer buf) {
277287
onChange(getFluid());
278288
}
279289
case LOCK_FLUID -> {
280-
lockFluid(NetworkUtils.readFluidStack(buf), false);
290+
lockHandler.accept(buf.readBoolean());
291+
lockFluid(NetworkUtils.readFluidStack(buf));
281292
FluidStack stack = getFluid();
282293
onChange(stack == null ? getLockedFluid() : stack);
283294
}
@@ -323,8 +334,7 @@ public void tryClickPhantom(MouseData data) {
323334
EntityPlayer player = getSyncManager().getPlayer();
324335
ItemStack currentStack = player.inventory.getItemStack();
325336
FluidStack currentFluid = this.tank.getFluid();
326-
if (currentStack.getCount() > 1) currentStack = GTUtility.copy(1, currentStack);
327-
var fluidHandlerItem = FluidUtil.getFluidHandler(currentStack);
337+
IFluidHandlerItem fluidHandlerItem = FluidUtil.getFluidHandler(currentStack);
328338

329339
switch (data.mouseButton) {
330340
case 0 -> {
@@ -579,18 +589,17 @@ public boolean canLockFluid() {
579589

580590
public void toggleLockFluid() {
581591
var cursorItem = getSyncManager().getCursorItem();
582-
if (getLockedFluid() == null) {
583-
if (cursorItem.isEmpty()) return;
584-
if (cursorItem.getCount() > 1) cursorItem = GTUtility.copy(1, cursorItem);
585-
586-
var fluidHandler = FluidUtil.getFluidHandler(cursorItem);
587-
if (fluidHandler == null) return;
588-
589-
var fluidStack = fluidHandler.getTankProperties()[0].getContents();
590-
if (fluidStack == null) return;
591-
lockFluid(fluidStack.copy(), true);
592-
} else if (cursorItem.isEmpty()) {
593-
lockFluid(null, true);
592+
FluidStack stack;
593+
if (GTUtility.isEmpty(getLockedFluid()) && !cursorItem.isEmpty()) {
594+
var fluidStack = FluidUtil.getFluidContained(cursorItem);
595+
stack = !GTUtility.isEmpty(fluidStack) ? fluidStack.copy() : null;
596+
} else {
597+
stack = null;
594598
}
599+
lockFluid(stack);
600+
sync(LOCK_FLUID, buffer -> {
601+
buffer.writeBoolean(this.isLocked.getAsBoolean());
602+
NetworkUtils.writeFluidStack(buffer, stack);
603+
});
595604
}
596605
}

src/main/java/gregtech/client/renderer/texture/custom/QuantumStorageRenderer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ public static void renderChestStack(double x, double y, double z, MetaTileEntity
127127
if (canRender(x, y, z, 8 *
128128
MathHelper.clamp((double) Minecraft.getMinecraft().gameSettings.renderDistanceChunks / 8, 1.0, 2.5))) {
129129
RenderItem itemRenderer = Minecraft.getMinecraft().getRenderItem();
130-
float tick = world.getWorldTime() + partialTicks;
130+
float tick = world.getTotalWorldTime() + partialTicks;
131131
GlStateManager.pushMatrix();
132132
GlStateManager.translate(x, y, z);
133133
GlStateManager.translate(0.5D, 0.5D, 0.5D);

src/main/java/gregtech/client/utils/RenderUtil.java

Lines changed: 43 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
import net.minecraftforge.fml.relauncher.SideOnly;
2828

2929
import codechicken.lib.vec.Matrix4;
30-
import com.cleanroommc.modularui.api.MCHelper;
3130
import com.cleanroommc.modularui.api.widget.IWidget;
3231
import com.cleanroommc.modularui.drawable.GuiDraw;
3332
import com.cleanroommc.modularui.integration.jei.JeiGhostIngredientSlot;
@@ -36,6 +35,7 @@
3635
import com.cleanroommc.modularui.utils.Color;
3736
import org.jetbrains.annotations.NotNull;
3837
import org.jetbrains.annotations.Nullable;
38+
import org.lwjgl.opengl.EXTFramebufferObject;
3939
import org.lwjgl.opengl.GL11;
4040
import org.lwjgl.opengl.GL30;
4141

@@ -169,7 +169,7 @@ public static void useStencil(Runnable mask, Runnable renderInMask, boolean shou
169169
public static void useLightMap(float x, float y, Runnable codeBlock) {
170170
/* hack the lightmap */
171171
GL11.glPushAttrib(GL11.GL_LIGHTING_BIT);
172-
net.minecraft.client.renderer.RenderHelper.disableStandardItemLighting();
172+
RenderHelper.disableStandardItemLighting();
173173
float lastBrightnessX = OpenGlHelper.lastBrightnessX;
174174
float lastBrightnessY = OpenGlHelper.lastBrightnessY;
175175
OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, x, y);
@@ -178,7 +178,7 @@ public static void useLightMap(float x, float y, Runnable codeBlock) {
178178
}
179179
/* restore the lightmap */
180180
OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, lastBrightnessX, lastBrightnessY);
181-
net.minecraft.client.renderer.RenderHelper.enableStandardItemLighting();
181+
RenderHelper.enableStandardItemLighting();
182182
GL11.glPopAttrib();
183183
}
184184

@@ -383,32 +383,14 @@ public static void renderText(float x, float y, float z, float scale, int color,
383383
}
384384

385385
public static void renderItemOverLay(float x, float y, float z, float scale, ItemStack itemStack) {
386-
net.minecraft.client.renderer.RenderHelper.enableStandardItemLighting();
386+
RenderHelper.enableStandardItemLighting();
387387
GlStateManager.pushMatrix();
388388
GlStateManager.scale(scale, scale, 0.0001f);
389389
GlStateManager.translate(x * 16, y * 16, z * 16);
390390
RenderItem renderItem = Minecraft.getMinecraft().getRenderItem();
391391
renderItem.renderItemAndEffectIntoGUI(itemStack, 0, 0);
392392
GlStateManager.popMatrix();
393-
net.minecraft.client.renderer.RenderHelper.disableStandardItemLighting();
394-
}
395-
396-
// adapted from com.cleanroommc.modularui.drawable.GuiDraw.java
397-
// todo merge this with the method from the qstorage mui2 port
398-
public static void renderItem(ItemStack item, int x, int y, float width, float height) {
399-
if (item.isEmpty()) return;
400-
GlStateManager.pushMatrix();
401-
RenderHelper.enableGUIStandardItemLighting();
402-
GlStateManager.enableDepth();
403-
GlStateManager.translate(x, y, 0);
404-
GlStateManager.scale(width / 16f, height / 16f, 1);
405-
RenderItem renderItem = MCHelper.getMc().getRenderItem();
406-
renderItem.renderItemAndEffectIntoGUI(MCHelper.getPlayer(), item, 0, 0);
407-
renderItem.renderItemOverlayIntoGUI(MCHelper.getFontRenderer(), item, 0, 0, null);
408-
GlStateManager.disableDepth();
409-
RenderHelper.enableStandardItemLighting();
410-
GlStateManager.disableLighting();
411-
GlStateManager.popMatrix();
393+
RenderHelper.disableStandardItemLighting();
412394
}
413395

414396
public static void renderFluidOverLay(float x, float y, float width, float height, float z, FluidStack fluidStack,
@@ -638,10 +620,10 @@ public static void hookDepthBuffer(Framebuffer fbo, int depthBuffer) {
638620
OpenGlHelper.glBindFramebuffer(OpenGlHelper.GL_FRAMEBUFFER, fbo.framebufferObject);
639621
if (fbo.isStencilEnabled()) {
640622
OpenGlHelper.glFramebufferRenderbuffer(OpenGlHelper.GL_FRAMEBUFFER,
641-
org.lwjgl.opengl.EXTFramebufferObject.GL_DEPTH_ATTACHMENT_EXT, OpenGlHelper.GL_RENDERBUFFER,
623+
EXTFramebufferObject.GL_DEPTH_ATTACHMENT_EXT, OpenGlHelper.GL_RENDERBUFFER,
642624
depthBuffer);
643625
OpenGlHelper.glFramebufferRenderbuffer(OpenGlHelper.GL_FRAMEBUFFER,
644-
org.lwjgl.opengl.EXTFramebufferObject.GL_STENCIL_ATTACHMENT_EXT, OpenGlHelper.GL_RENDERBUFFER,
626+
EXTFramebufferObject.GL_STENCIL_ATTACHMENT_EXT, OpenGlHelper.GL_RENDERBUFFER,
645627
depthBuffer);
646628
} else {
647629
OpenGlHelper.glFramebufferRenderbuffer(OpenGlHelper.GL_FRAMEBUFFER, OpenGlHelper.GL_DEPTH_ATTACHMENT,
@@ -720,6 +702,42 @@ public void put(int element, float @NotNull... data) {
720702
return getTextureMap().getMissingSprite();
721703
}
722704

705+
@SideOnly(Side.CLIENT)
706+
public static void drawItemStack(ItemStack itemStack, int x, int y, boolean drawCount) {
707+
int cache = itemStack.getCount();
708+
if (!drawCount) itemStack.setCount(1);
709+
drawItemStack(itemStack, x, y, null);
710+
if (!drawCount) itemStack.setCount(cache);
711+
}
712+
713+
@SideOnly(Side.CLIENT)
714+
public static void drawItemStack(ItemStack itemStack, int x, int y, @Nullable String altTxt) {
715+
drawItemStack(itemStack, x, y, 16, 16, altTxt);
716+
}
717+
718+
@SideOnly(Side.CLIENT)
719+
public static void drawItemStack(ItemStack itemStack, int x, int y, int w, int h, @Nullable String altTxt) {
720+
GlStateManager.pushMatrix();
721+
GlStateManager.translate(0.0F, 0.0F, 32.0F);
722+
GlStateManager.scale(w / 16F, h / 16F, 1);
723+
GlStateManager.color(1F, 1F, 1F, 1F);
724+
GlStateManager.enableDepth();
725+
GlStateManager.enableRescaleNormal();
726+
GlStateManager.enableLighting();
727+
RenderHelper.enableGUIStandardItemLighting();
728+
OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240.0f, 240.0f);
729+
Minecraft mc = Minecraft.getMinecraft();
730+
RenderItem itemRender = mc.getRenderItem();
731+
itemRender.renderItemAndEffectIntoGUI(itemStack, x, y);
732+
itemRender.renderItemOverlayIntoGUI(mc.fontRenderer, itemStack, x, y, altTxt);
733+
GlStateManager.disableRescaleNormal();
734+
GlStateManager.disableLighting();
735+
GlStateManager.color(1F, 1F, 1F, 1F);
736+
GlStateManager.popMatrix();
737+
GlStateManager.enableBlend();
738+
GlStateManager.disableDepth();
739+
}
740+
723741
public static void drawSlotOverlay(@NotNull IWidget slot, int overlayColor) {
724742
GlStateManager.colorMask(true, true, true, false);
725743
GuiDraw.drawRect(1, 1, slot.getArea().w() - 2, slot.getArea().h() - 2, overlayColor);

src/main/java/gregtech/common/gui/widget/appeng/slot/AEItemConfigSlot.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import gregtech.api.util.Position;
66
import gregtech.api.util.Size;
77
import gregtech.api.util.TextFormattingUtil;
8+
import gregtech.client.utils.RenderUtil;
89
import gregtech.common.gui.widget.appeng.AEItemConfigWidget;
910
import gregtech.common.metatileentities.multi.multiblockpart.appeng.slot.IConfigurableSlot;
1011
import gregtech.common.metatileentities.multi.multiblockpart.appeng.stack.WrappedItemStack;
@@ -53,7 +54,7 @@ public void drawInBackground(int mouseX, int mouseY, float partialTicks, IRender
5354
if (config != null) {
5455
ItemStack stack = config.createItemStack();
5556
stack.setCount(1);
56-
drawItemStack(stack, stackX, stackY, null);
57+
RenderUtil.drawItemStack(stack, stackX, stackY, null);
5758

5859
// Only draw the config amount if not stocking, as its meaningless when stocking
5960
if (!pw.isStocking()) {
@@ -64,7 +65,7 @@ public void drawInBackground(int mouseX, int mouseY, float partialTicks, IRender
6465
if (stock != null) {
6566
ItemStack stack = stock.createItemStack();
6667
stack.setCount(1);
67-
drawItemStack(stack, stackX + DISPLAY_X_OFFSET, stackY, null);
68+
RenderUtil.drawItemStack(stack, stackX + DISPLAY_X_OFFSET, stackY, null);
6869
String amountStr = TextFormattingUtil.formatLongToCompactString(stock.getStackSize(), 4);
6970
drawStringFixedCorner(amountStr, stackX + DISPLAY_X_OFFSET + 17, stackY + 17, 16777215, true, 0.5f);
7071
}

src/main/java/gregtech/common/gui/widget/appeng/slot/AEItemDisplayWidget.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import gregtech.api.gui.Widget;
66
import gregtech.api.util.Position;
77
import gregtech.api.util.Size;
8+
import gregtech.client.utils.RenderUtil;
89
import gregtech.common.gui.widget.appeng.AEListGridWidget;
910

1011
import net.minecraft.item.ItemStack;
@@ -39,7 +40,7 @@ public void drawInBackground(int mouseX, int mouseY, float partialTicks, IRender
3940
if (item != null) {
4041
ItemStack realStack = item.createItemStack();
4142
realStack.setCount(1);
42-
drawItemStack(realStack, stackX, stackY, null);
43+
RenderUtil.drawItemStack(realStack, stackX, stackY, null);
4344
String amountStr = String.format("x%,d", item.getStackSize());
4445
drawText(amountStr, stackX + 20, stackY + 5, 1, 0xFFFFFFFF);
4546
}

src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -291,6 +291,7 @@ public ModularPanel buildUI(PosGuiData guiData, PanelSyncManager guiSyncManager)
291291
setLocked(fluidStack != null);
292292
this.lockedFluid = fluidStack;
293293
this.fluidTank.onContentsChanged();
294+
markDirty();
294295
}, this::setLocked, this::isLocked);
295296
}
296297

@@ -306,7 +307,7 @@ public ModularPanel buildUI(PosGuiData guiData, PanelSyncManager guiSyncManager)
306307
.childIf(isExportHatch, new ToggleButton()
307308
.pos(7, 63)
308309
.overlay(GTGuiTextures.BUTTON_LOCK)
309-
.value(new BooleanSyncValue(this::isLocked, b -> fluidSyncHandler.lockFluid(b, false)))
310+
.value(new BooleanSyncValue(this::isLocked, fluidSyncHandler::lockFluid))
310311
.addTooltip(true, IKey.lang("gregtech.gui.fluid_lock.tooltip.enabled"))
311312
.addTooltip(false, IKey.lang("gregtech.gui.fluid_lock.tooltip.disabled")))
312313

@@ -412,6 +413,7 @@ private void setLocked(boolean locked) {
412413
this.lockedFluid = fluidTank.getFluid().copy();
413414
this.lockedFluid.amount = 1;
414415
fluidTank.onContentsChanged();
416+
markDirty();
415417
return;
416418
}
417419
this.lockedFluid = null;

0 commit comments

Comments
 (0)