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(); } } 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 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); } 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); 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 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