aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormiozune <miozune@gmail.com>2023-06-16 02:26:22 +0900
committerGitHub <noreply@github.com>2023-06-15 19:26:22 +0200
commit5fa7c9ee802720fd8ece229e5e22aba5c7fe1909 (patch)
tree0b1ffe4dbe4b153945f1d4ccc6c3f2a84f59b62d
parent5a81c950ed90c77d1f6462f9ea65e7106c544efc (diff)
downloadGT5-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
-rw-r--r--dependencies.gradle2
-rw-r--r--src/main/java/gregtech/GT_Mod.java5
-rw-r--r--src/main/java/gregtech/api/gui/modularui/GT_UIInfos.java2
-rw-r--r--src/main/java/gregtech/common/gui/modularui/uifactory/SelectItemUIFactory.java85
4 files changed, 51 insertions, 43 deletions
diff --git a/dependencies.gradle b/dependencies.gradle
index 425e6388dc..7bcc1b23aa 100644
--- a/dependencies.gradle
+++ b/dependencies.gradle
@@ -38,7 +38,7 @@ dependencies {
api("net.industrial-craft:industrialcraft-2:2.2.828-experimental:dev")
api("com.github.GTNewHorizons:NotEnoughItems:2.3.54-GTNH:dev")
api("com.github.GTNewHorizons:GTNHLib:0.0.13:dev")
- api("com.github.GTNewHorizons:ModularUI:1.1.10:dev")
+ api("com.github.GTNewHorizons:ModularUI:1.1.12:dev")
api("com.github.GTNewHorizons:waila:1.6.0:dev")
api("com.github.GTNewHorizons:Applied-Energistics-2-Unofficial:rv3-beta-217-GTNH:dev")
implementation("com.github.GTNewHorizons:Eternal-Singularity:1.1.0:dev")
diff --git a/src/main/java/gregtech/GT_Mod.java b/src/main/java/gregtech/GT_Mod.java
index 45075e6ecf..0456350d16 100644
--- a/src/main/java/gregtech/GT_Mod.java
+++ b/src/main/java/gregtech/GT_Mod.java
@@ -57,6 +57,7 @@ import gregtech.api.enums.Materials;
import gregtech.api.enums.Mods;
import gregtech.api.enums.OrePrefixes;
import gregtech.api.enums.Textures;
+import gregtech.api.gui.modularui.GT_UIInfos;
import gregtech.api.interfaces.internal.IGT_Mod;
import gregtech.api.metatileentity.BaseMetaPipeEntity;
import gregtech.api.objects.GT_ItemStack;
@@ -126,7 +127,7 @@ import ic2.api.recipe.RecipeOutput;
guiFactory = "gregtech.client.GT_GuiFactory",
dependencies = " required-after:IC2;" + " required-after:structurelib;"
+ " required-after:gtnhlib@[0.0.8,);"
- + " required-after:modularui@[1.1.7,);"
+ + " required-after:modularui@[1.1.12,);"
+ " after:dreamcraft;"
+ " after:Forestry;"
+ " after:PFAAGeologica;"
@@ -291,6 +292,8 @@ public class GT_Mod implements IGT_Mod {
GT_Log.out.println("GT_Mod: Preload-Phase finished!");
GT_Log.ore.println("GT_Mod: Preload-Phase finished!");
+ GT_UIInfos.init();
+
for (Runnable tRunnable : GregTech_API.sAfterGTPreload) {
try {
tRunnable.run();
diff --git a/src/main/java/gregtech/api/gui/modularui/GT_UIInfos.java b/src/main/java/gregtech/api/gui/modularui/GT_UIInfos.java
index afa60e5583..89a0835f13 100644
--- a/src/main/java/gregtech/api/gui/modularui/GT_UIInfos.java
+++ b/src/main/java/gregtech/api/gui/modularui/GT_UIInfos.java
@@ -30,6 +30,8 @@ import gregtech.api.util.GT_CoverBehaviorBase;
public class GT_UIInfos {
+ public static void init() {}
+
/**
* Generator for {@link UIInfo} which is responsible for registering and opening UIs. Unlike
* {@link com.gtnewhorizons.modularui.api.UIInfos#TILE_MODULAR_UI}, this accepts custom constructors for UI. <br>
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) {