From 86e17df8d545fe1394d04e19044d15e52292fb93 Mon Sep 17 00:00:00 2001 From: MCTian-mi <35869948+MCTian-mi@users.noreply.github.com> Date: Fri, 21 Nov 2025 19:53:54 +0800 Subject: [PATCH 1/3] fix: treat `Byte`s in `ProspectingTexture#map` as UByte --- .../gui/widget/prospector/widget/WidgetProspectingMap.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/gregtech/common/gui/widget/prospector/widget/WidgetProspectingMap.java b/src/main/java/gregtech/common/gui/widget/prospector/widget/WidgetProspectingMap.java index 74acc2292ff..e625317bbd6 100644 --- a/src/main/java/gregtech/common/gui/widget/prospector/widget/WidgetProspectingMap.java +++ b/src/main/java/gregtech/common/gui/widget/prospector/widget/WidgetProspectingMap.java @@ -1,5 +1,6 @@ package gregtech.common.gui.widget.prospector.widget; +import com.google.common.primitives.UnsignedBytes; import gregtech.api.gui.IRenderContext; import gregtech.api.gui.Widget; import gregtech.api.unification.OreDictUnifier; @@ -271,7 +272,7 @@ public void drawInForeground(int mouseX, int mouseY) { if (ProspectingTexture.SELECTED_ALL.equals(texture.getSelected()) || texture.getSelected().equals(dict)) { oreInfo.put(name, oreInfo.getOrDefault(name, 0) + 1); - oreHeight.put(name, oreHeight.getOrDefault(name, 0) + height.intValue()); + oreHeight.put(name, oreHeight.getOrDefault(name, 0) + UnsignedBytes.toInt(height)); if (oreInfo.get(name) > maxAmount[0]) { maxAmount[0] = oreInfo.get(name); MaterialStack m = OreDictUnifier.getMaterial(OreDictUnifier.get(dict)); From 44a5a20d2474717ea53242d5eb7bc80ec4cc17c0 Mon Sep 17 00:00:00 2001 From: MCTian-mi <35869948+MCTian-mi@users.noreply.github.com> Date: Fri, 21 Nov 2025 20:17:16 +0800 Subject: [PATCH 2/3] refactor: use fastutil maps (as suggested by @brachy84) & spotless --- .../gui/widget/prospector/ProspectingTexture.java | 13 +++++++------ .../prospector/widget/WidgetProspectingMap.java | 2 +- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/main/java/gregtech/common/gui/widget/prospector/ProspectingTexture.java b/src/main/java/gregtech/common/gui/widget/prospector/ProspectingTexture.java index d0313daf95b..5e8b602db1a 100644 --- a/src/main/java/gregtech/common/gui/widget/prospector/ProspectingTexture.java +++ b/src/main/java/gregtech/common/gui/widget/prospector/ProspectingTexture.java @@ -14,12 +14,13 @@ import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fluids.FluidStack; +import it.unimi.dsi.fastutil.bytes.Byte2ObjectOpenHashMap; import org.jetbrains.annotations.Nullable; import java.awt.*; import java.awt.image.BufferedImage; import java.awt.image.WritableRaster; -import java.util.HashMap; +import java.util.Map; public class ProspectingTexture extends AbstractTexture { @@ -29,8 +30,8 @@ public class ProspectingTexture extends AbstractTexture { private boolean darkMode; private int imageWidth = -1; private int imageHeight = -1; - public final HashMap[][] map; - public static HashMap emptyTag = new HashMap<>(); + public final Map[][] map; + public static Map emptyTag = new Byte2ObjectOpenHashMap<>(); private int playerXGui; private int playerYGui; private final ProspectorMode mode; @@ -42,10 +43,10 @@ public ProspectingTexture(ProspectorMode mode, int radius, boolean darkMode) { this.mode = mode; if (this.mode == ProspectorMode.FLUID) { // noinspection unchecked - map = new HashMap[(radius * 2 - 1)][(radius * 2 - 1)]; + map = new Byte2ObjectOpenHashMap[(radius * 2 - 1)][(radius * 2 - 1)]; } else { // noinspection unchecked - map = new HashMap[(radius * 2 - 1) * 16][(radius * 2 - 1) * 16]; + map = new Byte2ObjectOpenHashMap[(radius * 2 - 1) * 16][(radius * 2 - 1) * 16]; } } @@ -102,7 +103,7 @@ private BufferedImage getImage() { for (int i = 0; i < wh; i++) { for (int j = 0; j < wh; j++) { - HashMap data = this.map[this.mode == ProspectorMode.ORE ? i : i / 16][this.mode == + Map data = this.map[this.mode == ProspectorMode.ORE ? i : i / 16][this.mode == ProspectorMode.ORE ? j : j / 16]; // draw bg image.setRGB(i, j, ((data == null) ^ darkMode) ? Color.darkGray.getRGB() : Color.WHITE.getRGB()); diff --git a/src/main/java/gregtech/common/gui/widget/prospector/widget/WidgetProspectingMap.java b/src/main/java/gregtech/common/gui/widget/prospector/widget/WidgetProspectingMap.java index e625317bbd6..1467f8f9860 100644 --- a/src/main/java/gregtech/common/gui/widget/prospector/widget/WidgetProspectingMap.java +++ b/src/main/java/gregtech/common/gui/widget/prospector/widget/WidgetProspectingMap.java @@ -1,6 +1,5 @@ package gregtech.common.gui.widget.prospector.widget; -import com.google.common.primitives.UnsignedBytes; import gregtech.api.gui.IRenderContext; import gregtech.api.gui.Widget; import gregtech.api.unification.OreDictUnifier; @@ -37,6 +36,7 @@ import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; +import com.google.common.primitives.UnsignedBytes; import org.jetbrains.annotations.NotNull; import java.awt.*; From 58405148803e8cbe122249e08605dabcc290a8da Mon Sep 17 00:00:00 2001 From: MCTian-mi <35869948+MCTian-mi@users.noreply.github.com> Date: Sat, 22 Nov 2025 14:20:15 +0800 Subject: [PATCH 3/3] use native java method instead --- .../gui/widget/prospector/widget/WidgetProspectingMap.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/gregtech/common/gui/widget/prospector/widget/WidgetProspectingMap.java b/src/main/java/gregtech/common/gui/widget/prospector/widget/WidgetProspectingMap.java index 1467f8f9860..6e9957debfc 100644 --- a/src/main/java/gregtech/common/gui/widget/prospector/widget/WidgetProspectingMap.java +++ b/src/main/java/gregtech/common/gui/widget/prospector/widget/WidgetProspectingMap.java @@ -36,7 +36,6 @@ import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import com.google.common.primitives.UnsignedBytes; import org.jetbrains.annotations.NotNull; import java.awt.*; @@ -272,7 +271,7 @@ public void drawInForeground(int mouseX, int mouseY) { if (ProspectingTexture.SELECTED_ALL.equals(texture.getSelected()) || texture.getSelected().equals(dict)) { oreInfo.put(name, oreInfo.getOrDefault(name, 0) + 1); - oreHeight.put(name, oreHeight.getOrDefault(name, 0) + UnsignedBytes.toInt(height)); + oreHeight.put(name, oreHeight.getOrDefault(name, 0) + Byte.toUnsignedInt(height)); if (oreInfo.get(name) > maxAmount[0]) { maxAmount[0] = oreInfo.get(name); MaterialStack m = OreDictUnifier.getMaterial(OreDictUnifier.get(dict));