diff options
author | miozune <miozune@gmail.com> | 2023-06-16 02:26:22 +0900 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-06-15 19:26:22 +0200 |
commit | 5fa7c9ee802720fd8ece229e5e22aba5c7fe1909 (patch) | |
tree | 0b1ffe4dbe4b153945f1d4ccc6c3f2a84f59b62d /src/main/java/gregtech/common/gui/modularui | |
parent | 5a81c950ed90c77d1f6462f9ea65e7106c544efc (diff) | |
download | GT5-Unofficial-5fa7c9ee802720fd8ece229e5e22aba5c7fe1909.tar.gz GT5-Unofficial-5fa7c9ee802720fd8ece229e5e22aba5c7fe1909.tar.bz2 GT5-Unofficial-5fa7c9ee802720fd8ece229e5e22aba5c7fe1909.zip |
Move away from SlotWidget for circuit selection window (#2083)
* Fix crash on MP
* Move away from SlotWidget for circuit selection window
Diffstat (limited to 'src/main/java/gregtech/common/gui/modularui')
-rw-r--r-- | src/main/java/gregtech/common/gui/modularui/uifactory/SelectItemUIFactory.java | 85 |
1 files changed, 44 insertions, 41 deletions
diff --git a/src/main/java/gregtech/common/gui/modularui/uifactory/SelectItemUIFactory.java b/src/main/java/gregtech/common/gui/modularui/uifactory/SelectItemUIFactory.java index 4845b2ccfb..452ca36c0c 100644 --- a/src/main/java/gregtech/common/gui/modularui/uifactory/SelectItemUIFactory.java +++ b/src/main/java/gregtech/common/gui/modularui/uifactory/SelectItemUIFactory.java @@ -10,16 +10,16 @@ import net.minecraft.client.gui.FontRenderer; import net.minecraft.item.ItemStack; import net.minecraft.util.StatCollector; +import com.gtnewhorizons.modularui.api.GlStateManager; import com.gtnewhorizons.modularui.api.ModularUITextures; +import com.gtnewhorizons.modularui.api.drawable.GuiHelper; import com.gtnewhorizons.modularui.api.drawable.IDrawable; import com.gtnewhorizons.modularui.api.drawable.ItemDrawable; import com.gtnewhorizons.modularui.api.drawable.Text; -import com.gtnewhorizons.modularui.api.forge.ItemStackHandler; import com.gtnewhorizons.modularui.api.screen.ModularWindow; import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.common.internal.wrapper.BaseSlot; import com.gtnewhorizons.modularui.common.widget.ButtonWidget; -import com.gtnewhorizons.modularui.common.widget.SlotWidget; +import com.gtnewhorizons.modularui.common.widget.DrawableWidget; import com.gtnewhorizons.modularui.common.widget.TextWidget; import gregtech.api.enums.Dyes; @@ -45,7 +45,6 @@ public class SelectItemUIFactory { private boolean anotherWindow = false; private AtomicBoolean dialogOpened; private int guiTint = GT_Util.getRGBInt(Dyes.MACHINE_METAL.getRGBA()); - private final ItemStackHandler currentDisplayItemHandler = new ItemStackHandler(); private Supplier<ItemStack> currentGetter; private final GT_GUIColorOverride colorOverride = GT_GUIColorOverride.get("SelectItemUIFactory"); @@ -88,7 +87,6 @@ public class SelectItemUIFactory { this.stacks = stacks; this.noDeselect = noDeselect; this.selected = noDeselect ? Math.max(0, selected) : selected; - this.currentDisplayItemHandler.setStackInSlot(0, getCandidate(selected)); } /** @@ -131,52 +129,58 @@ public class SelectItemUIFactory { new TextWidget(header).setDefaultColor(COLOR_TITLE.get()) .setPos(25, 9)); - builder.widget(new SlotWidget(BaseSlot.phantom(currentDisplayItemHandler, 0)) { + int currentSlotX = 9 + + getFontRenderer().getStringWidth(StatCollector.translateToLocal("GT5U.gui.select.current")); + int currentSlotY = 24; + builder.widget(new DrawableWidget() { @Override - public void draw(float partialTicks) { + public void onScreenUpdate() { + super.onScreenUpdate(); if (currentGetter != null) { ItemStack current = currentGetter.get(); - currentDisplayItemHandler.setStackInSlot(0, current); selected = GT_Utility.findMatchingStackInList(stacks, current); } - super.draw(partialTicks); } - }.disableInteraction() - .setBackground(GT_UITextures.SLOT_DARK_GRAY) - .setPos( - 9 + getFontRenderer().getStringWidth(StatCollector.translateToLocal("GT5U.gui.select.current")), - 24)) + }.setDrawable(GT_UITextures.SLOT_DARK_GRAY) + .setPos(currentSlotX, currentSlotY) + .setSize(18, 18)) .widget( - new TextWidget(StatCollector.translateToLocal("GT5U.gui.select.current")) - .setDefaultColor(COLOR_TEXT_GRAY.get()) - .setPos(8, 25 + (18 - getFontRenderer().FONT_HEIGHT) / 2)); + new ItemDrawable(() -> getCandidate(getSelected())).asWidgetWithTooltip() + .setPos(currentSlotX + 1, currentSlotY + 1)); + builder.widget( + new TextWidget(StatCollector.translateToLocal("GT5U.gui.select.current")) + .setDefaultColor(COLOR_TEXT_GRAY.get()) + .setPos(8, 25 + (18 - getFontRenderer().FONT_HEIGHT) / 2)); for (int i = 0; i < stacks.size(); i++) { final int index = i; - builder.widget( - new SlotWidget(new BaseSlot(new ItemStackHandler(new ItemStack[] { stacks.get(index) }), 0, true)) { - - @Override - public ClickResult onClick(int buttonId, boolean doubleClick) { - if (buttonId == 0) { - setSelected(index); - } else if (buttonId == 1) { - setSelected(UNSELECTED); - } else { - return ClickResult.ACCEPT; - } - selectedCallback.accept(getCandidate(getSelected())); - return ClickResult.SUCCESS; - } - - @Override - public IDrawable[] getBackground() { - return new IDrawable[] { - index == selected ? GT_UITextures.SLOT_DARK_GRAY : ModularUITextures.ITEM_SLOT }; - } - }.disableInteraction() - .setPos(7 + 18 * (index % cols), 43 + 18 * (index / cols))); + builder.widget(new ButtonWidget() { + + @Override + public void draw(float partialTicks) { + GlStateManager.pushMatrix(); + // so that item z levels are properly ordered + GlStateManager.translate(0, 0, 150 * getWindowLayer()); + new ItemDrawable(stacks.get(index)).draw(1, 1, 16, 16, partialTicks); + GlStateManager.popMatrix(); + } + }.setOnClick((clickData, widget) -> { + if (clickData.mouseButton == 0) { + setSelected(index); + } else { + setSelected(UNSELECTED); + } + selectedCallback.accept(getCandidate(getSelected())); + }) + .setSynced(false, false) + .dynamicTooltip(() -> GuiHelper.getItemTooltip(stacks.get(index))) + .setUpdateTooltipEveryTick(true) + .setBackground( + () -> new IDrawable[] { + index == selected ? GT_UITextures.SLOT_DARK_GRAY : ModularUITextures.ITEM_SLOT, }) + .setPos(7 + 18 * (index % cols), 43 + 18 * (index / cols)) + .setSize(18, 18)); } if (anotherWindow) { @@ -209,7 +213,6 @@ public class SelectItemUIFactory { if (noDeselect && newSelected == UNSELECTED) return; this.selected = newSelected; - currentDisplayItemHandler.setStackInSlot(0, getCandidate(this.selected)); } private ItemStack getCandidate(int listIndex) { |