From f2859c0a1d77219c28bdc9344aa42ca8f78cc838 Mon Sep 17 00:00:00 2001 From: Zpiboo Date: Sun, 23 Nov 2025 10:54:16 +0100 Subject: [PATCH 1/6] fix: avoid potential NullPointerExceptions when reading strats --- .../io/github/kurrycat/mpkmod/ticks/TimingStorage.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/common/src/main/java/io/github/kurrycat/mpkmod/ticks/TimingStorage.java b/common/src/main/java/io/github/kurrycat/mpkmod/ticks/TimingStorage.java index f5aced05..ed1f2ee4 100644 --- a/common/src/main/java/io/github/kurrycat/mpkmod/ticks/TimingStorage.java +++ b/common/src/main/java/io/github/kurrycat/mpkmod/ticks/TimingStorage.java @@ -32,15 +32,17 @@ public static void init() { patterns = Serializer.deserializeAny(stratFile, new TypeReference>() { }); + if (patterns == null) return; + File file = new File(stratFileName); if (!file.exists()) { //Make an empty json file if it doesn't exist FileUtil.createFile(stratFileName, "{}"); } - //TODO: Fix potential null pointer issue - patterns.putAll(Serializer.deserializeAny(file, new TypeReference>() {})); - if (patterns == null) return; + HashMap timingMap = Serializer.deserializeAny(file, new TypeReference>() {}); + if (timingMap != null) + patterns.putAll(timingMap); API.LOGGER.info(API.CONFIG_MARKER, "{} Timings loaded from {}", patterns.size(), stratFileName); } From 49680388d106e4bcdeda4216ca107faa2fd5eb6e Mon Sep 17 00:00:00 2001 From: Zpiboo Date: Sun, 23 Nov 2025 16:58:30 +0100 Subject: [PATCH 2/6] fix: move size update of InfoLabels to render() Size update uses FontRenderer::getStringSize, which has to run on the render thread. --- .../io/github/kurrycat/mpkmod/gui/components/InfoLabel.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/common/src/main/java/io/github/kurrycat/mpkmod/gui/components/InfoLabel.java b/common/src/main/java/io/github/kurrycat/mpkmod/gui/components/InfoLabel.java index 89390ed5..a8488fee 100644 --- a/common/src/main/java/io/github/kurrycat/mpkmod/gui/components/InfoLabel.java +++ b/common/src/main/java/io/github/kurrycat/mpkmod/gui/components/InfoLabel.java @@ -1,7 +1,6 @@ package io.github.kurrycat.mpkmod.gui.components; import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; import io.github.kurrycat.mpkmod.Main; import io.github.kurrycat.mpkmod.compatibility.MCClasses.FontRenderer; @@ -17,8 +16,8 @@ import io.github.kurrycat.mpkmod.util.Vector2D; import java.awt.*; -import java.util.List; import java.util.*; +import java.util.List; import java.util.stream.Collectors; public class InfoLabel extends Label implements TickThread.Tickable { @@ -42,6 +41,7 @@ public void updateText(String text) { } public void render(Vector2D mouse) { + setSize(getTextSize()); drawDefaultSelectedBackground(); FontRenderer.drawString(getFormattedText(), getDisplayedPos(), color, fontSize, true); //CUSTOM FONT - FontManager.testArialFont.drawStringWithShadow(getFormattedText(), getDisplayedPos().getX(), getDisplayedPos().getY(), color.getRGB()); @@ -58,7 +58,6 @@ protected Vector2D getTextSize() { public void tick() { formattedText = infoString.get(); - setSize(getTextSize()); } @Override From 64974e6e7eb70d258973ef7cddd0143b20e083ba Mon Sep 17 00:00:00 2001 From: Zpiboo Date: Thu, 18 Dec 2025 00:30:22 +0100 Subject: [PATCH 3/6] fix: miscellaneous translation fixes - Fix file name capitalization for pl_PL.lang in 1.8.9 and en_us.lang in 1.12.2 - Re-order translations alphabetically - Add translations to pl_pl.json in 1.21.11 (why was it empty lol) --- .../src/main/resources/assets/mpkmod/lang/pl_pl.json | 8 ++++++++ .../assets/mpkmod/lang/{en_US.lang => en_us.lang} | 0 .../src/main/resources/assets/mpkmod/lang/pl_pl.lang | 7 +++---- .../assets/mpkmod/lang/{pl_pl.lang => pl_PL.lang} | 6 +++--- 4 files changed, 14 insertions(+), 7 deletions(-) rename forge-1.12.2/src/main/resources/assets/mpkmod/lang/{en_US.lang => en_us.lang} (100%) rename forge-1.8.9/src/main/resources/assets/mpkmod/lang/{pl_pl.lang => pl_PL.lang} (72%) diff --git a/fabric-1.21.11/src/main/resources/assets/mpkmod/lang/pl_pl.json b/fabric-1.21.11/src/main/resources/assets/mpkmod/lang/pl_pl.json index e69de29b..e0ed70f2 100644 --- a/fabric-1.21.11/src/main/resources/assets/mpkmod/lang/pl_pl.json +++ b/fabric-1.21.11/src/main/resources/assets/mpkmod/lang/pl_pl.json @@ -0,0 +1,8 @@ +{ + "mpkmod.key.lb_gui.desc": "Otwórz menu Bloku Lądowania", + "mpkmod.key.lb_set.desc": "Ustaw Blok Lądowania", + "mpkmod.key.main_gui.desc": "Otwórz menu MPK", + "mpkmod.key.options_gui.desc": "Otwórz menu opcji", + "mpkmod.lb_gui.title": "Menu Bloku Lądowania", + "mpkmod.main_gui.title": "Menu MPK" +} \ No newline at end of file diff --git a/forge-1.12.2/src/main/resources/assets/mpkmod/lang/en_US.lang b/forge-1.12.2/src/main/resources/assets/mpkmod/lang/en_us.lang similarity index 100% rename from forge-1.12.2/src/main/resources/assets/mpkmod/lang/en_US.lang rename to forge-1.12.2/src/main/resources/assets/mpkmod/lang/en_us.lang diff --git a/forge-1.12.2/src/main/resources/assets/mpkmod/lang/pl_pl.lang b/forge-1.12.2/src/main/resources/assets/mpkmod/lang/pl_pl.lang index b562514f..fe4ca2b7 100644 --- a/forge-1.12.2/src/main/resources/assets/mpkmod/lang/pl_pl.lang +++ b/forge-1.12.2/src/main/resources/assets/mpkmod/lang/pl_pl.lang @@ -1,7 +1,6 @@ -mpkmod.key.category=MPK Mod 2 -mpkmod.key.main_gui.desc=Otwórz menu MPK mpkmod.key.lb_gui.desc=Otwórz menu Bloku Lądowania mpkmod.key.lb_set.desc=Ustaw Blok Lądowania +mpkmod.key.main_gui.desc=Otwórz menu MPK mpkmod.key.options_gui.desc=Otwórz menu opcji -mpkmod.main_gui.title=Menu MPK -mpkmod.lb_gui.title=Menu Bloku Lądowania \ No newline at end of file +mpkmod.lb_gui.title=Menu Bloku Lądowania +mpkmod.main_gui.title=Menu MPK \ No newline at end of file diff --git a/forge-1.8.9/src/main/resources/assets/mpkmod/lang/pl_pl.lang b/forge-1.8.9/src/main/resources/assets/mpkmod/lang/pl_PL.lang similarity index 72% rename from forge-1.8.9/src/main/resources/assets/mpkmod/lang/pl_pl.lang rename to forge-1.8.9/src/main/resources/assets/mpkmod/lang/pl_PL.lang index 0d946226..fe4ca2b7 100644 --- a/forge-1.8.9/src/main/resources/assets/mpkmod/lang/pl_pl.lang +++ b/forge-1.8.9/src/main/resources/assets/mpkmod/lang/pl_PL.lang @@ -1,6 +1,6 @@ -mpkmod.key.main_gui.desc=Otwórz menu MPK mpkmod.key.lb_gui.desc=Otwórz menu Bloku Lądowania mpkmod.key.lb_set.desc=Ustaw Blok Lądowania +mpkmod.key.main_gui.desc=Otwórz menu MPK mpkmod.key.options_gui.desc=Otwórz menu opcji -mpkmod.main_gui.title=Menu MPK -mpkmod.lb_gui.title=Menu Bloku Lądowania \ No newline at end of file +mpkmod.lb_gui.title=Menu Bloku Lądowania +mpkmod.main_gui.title=Menu MPK \ No newline at end of file From dcc06d9b3e173c25689aaef01b3c1ba9fa0bdecb Mon Sep 17 00:00:00 2001 From: Zpiboo Date: Mon, 22 Dec 2025 15:47:05 +0100 Subject: [PATCH 4/6] chore: configure jitpack to use openjdk 21 for gradle 9 compatibility --- jitpack.yml | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 jitpack.yml diff --git a/jitpack.yml b/jitpack.yml new file mode 100644 index 00000000..a2027925 --- /dev/null +++ b/jitpack.yml @@ -0,0 +1,2 @@ +jdk: + - openjdk21 \ No newline at end of file From c5b73c144cd94da56107c5cd35fabe850e586122 Mon Sep 17 00:00:00 2001 From: Zpiboo Date: Fri, 26 Dec 2025 14:31:43 +0100 Subject: [PATCH 5/6] fix: improve TickThread logic --- .../kurrycat/mpkmod/gui/TickThread.java | 54 +++++++++++-------- 1 file changed, 33 insertions(+), 21 deletions(-) diff --git a/common/src/main/java/io/github/kurrycat/mpkmod/gui/TickThread.java b/common/src/main/java/io/github/kurrycat/mpkmod/gui/TickThread.java index a9c4291b..96fae50a 100644 --- a/common/src/main/java/io/github/kurrycat/mpkmod/gui/TickThread.java +++ b/common/src/main/java/io/github/kurrycat/mpkmod/gui/TickThread.java @@ -2,51 +2,63 @@ import io.github.kurrycat.mpkmod.compatibility.API; +import java.util.ArrayList; import java.util.List; -import java.util.concurrent.atomic.AtomicBoolean; -import java.util.concurrent.atomic.AtomicReference; public class TickThread implements Runnable { - private static final AtomicReference> tickables = new AtomicReference<>(); - private static final AtomicBoolean changed = new AtomicBoolean(false); + private static final Object lock = new Object(); + + private static final List tickables = new ArrayList<>(); + private static boolean changed = false; public static void startThread() { Thread t = new Thread( new TickThread(), API.MODID + " GUI Tick Thread" ); + t.setDaemon(true); t.start(); } public static void setTickables(List tickables) { - TickThread.tickables.set(tickables); - TickThread.changed.set(true); + synchronized (lock) { + TickThread.tickables.clear(); + TickThread.tickables.addAll(tickables); + changed = true; + + lock.notify(); + } } @Override public void run() { API.LOGGER.info("Started GuiTickThread"); - while (!Thread.currentThread().isInterrupted()) { - if (!changed.get()) continue; - - for (Tickable tickable : tickables.get()) { - try { - tickable.runTick(); - } catch (Exception e) { - e.printStackTrace(); + try { + while (!Thread.currentThread().isInterrupted()) { + List tickablesSnapshot; + + synchronized (lock) { + while (!changed) { + lock.wait(); + } + changed = false; + tickablesSnapshot = new ArrayList<>(tickables); + } + + for (Tickable tickable : tickablesSnapshot) { + try { + tickable.tick(); + } catch (Exception e) { + e.printStackTrace(); + } } } - TickThread.changed.set(false); + } catch (InterruptedException ignore) { + Thread.currentThread().interrupt(); } } public interface Tickable { - default void runTick() { - synchronized (this) { - tick(); - } - } - void tick(); } } From e01e059321fa8e51bb0caf7efa25305e34ea4196 Mon Sep 17 00:00:00 2001 From: Zpiboo Date: Sat, 7 Feb 2026 17:14:02 +0100 Subject: [PATCH 6/6] fix: render mpk hud below the tab player list --- .../kurrycat/mpkmod/compatibility/fabric_1_21_11/MPKMod.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/fabric-1.21.11/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_11/MPKMod.java b/fabric-1.21.11/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_11/MPKMod.java index 409737fe..f552a82e 100644 --- a/fabric-1.21.11/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_11/MPKMod.java +++ b/fabric-1.21.11/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_11/MPKMod.java @@ -13,6 +13,7 @@ import net.fabricmc.fabric.api.client.networking.v1.ClientPlayConnectionEvents; import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; import net.fabricmc.fabric.api.client.rendering.v1.hud.HudElementRegistry; +import net.fabricmc.fabric.api.client.rendering.v1.hud.VanillaHudElements; import net.fabricmc.loader.api.FabricLoader; import net.minecraft.SharedConstants; import net.minecraft.client.KeyMapping; @@ -37,7 +38,7 @@ public void onInitialize() { API.preInit(getClass()); registerKeybindingsFromGUIs(); - HudElementRegistry.addLast(Identifier.fromNamespaceAndPath(API.MODID, "hud_layer"), eventHandler::onInGameOverlayRender); + HudElementRegistry.attachElementBefore(VanillaHudElements.PLAYER_LIST, Identifier.fromNamespaceAndPath(API.MODID, "hud_layer"), eventHandler::onInGameOverlayRender); ClientTickEvents.START_CLIENT_TICK.register(eventHandler::onClientTickStart); ClientTickEvents.END_CLIENT_TICK.register(eventHandler::onClientTickEnd); ClientPlayConnectionEvents.JOIN.register(eventHandler::onServerConnect);