From 2e702d89454eb9c8fe09a9e2d62ab291910abae1 Mon Sep 17 00:00:00 2001 From: XiaoMoMi Date: Mon, 9 Dec 2024 03:29:06 +0800 Subject: [PATCH] Fix thread safety issue --- .../backend/feature/actionbar/ActionBarSender.java | 2 +- .../backend/feature/bossbar/BossBarSender.java | 2 +- .../backend/feature/tag/TagRendererImpl.java | 2 +- .../customnameplates/bukkit/BukkitCustomNameplates.java | 6 +++++- 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/backend/src/main/java/net/momirealms/customnameplates/backend/feature/actionbar/ActionBarSender.java b/backend/src/main/java/net/momirealms/customnameplates/backend/feature/actionbar/ActionBarSender.java index b8939c3..443a819 100644 --- a/backend/src/main/java/net/momirealms/customnameplates/backend/feature/actionbar/ActionBarSender.java +++ b/backend/src/main/java/net/momirealms/customnameplates/backend/feature/actionbar/ActionBarSender.java @@ -80,7 +80,7 @@ public class ActionBarSender implements Feature { this.onConditionTimerCheck(); } - public void onConditionTimerCheck() { + public synchronized void onConditionTimerCheck() { ActionBarConfig[] configs = manager.actionBarConfigs(); outer: { for (ActionBarConfig config : configs) { diff --git a/backend/src/main/java/net/momirealms/customnameplates/backend/feature/bossbar/BossBarSender.java b/backend/src/main/java/net/momirealms/customnameplates/backend/feature/bossbar/BossBarSender.java index 8eb5893..1a76129 100644 --- a/backend/src/main/java/net/momirealms/customnameplates/backend/feature/bossbar/BossBarSender.java +++ b/backend/src/main/java/net/momirealms/customnameplates/backend/feature/bossbar/BossBarSender.java @@ -98,7 +98,7 @@ public class BossBarSender implements Feature, BossBar { timeLeft = 0; } - public void tick() { + public synchronized void tick() { if (timeLeft > 0) timeLeft--; diff --git a/backend/src/main/java/net/momirealms/customnameplates/backend/feature/tag/TagRendererImpl.java b/backend/src/main/java/net/momirealms/customnameplates/backend/feature/tag/TagRendererImpl.java index 37bbcec..a791755 100644 --- a/backend/src/main/java/net/momirealms/customnameplates/backend/feature/tag/TagRendererImpl.java +++ b/backend/src/main/java/net/momirealms/customnameplates/backend/feature/tag/TagRendererImpl.java @@ -76,7 +76,7 @@ public class TagRendererImpl implements TagRenderer { } @Override - public void onTick() { + public synchronized void onTick() { if (!isValid()) return; Set playersToUpdatePassengers = new ObjectOpenHashSet<>(); diff --git a/platforms/bukkit/src/main/java/net/momirealms/customnameplates/bukkit/BukkitCustomNameplates.java b/platforms/bukkit/src/main/java/net/momirealms/customnameplates/bukkit/BukkitCustomNameplates.java index 4be29fa..91f7dae 100644 --- a/platforms/bukkit/src/main/java/net/momirealms/customnameplates/bukkit/BukkitCustomNameplates.java +++ b/platforms/bukkit/src/main/java/net/momirealms/customnameplates/bukkit/BukkitCustomNameplates.java @@ -255,7 +255,11 @@ public class BukkitCustomNameplates extends CustomNameplates implements Listener if (nameplateManager != null) this.nameplateManager.disable(); if (imageManager != null) this.imageManager.disable(); if (chatManager != null) this.chatManager.disable(); - if (commandManager != null) this.commandManager.unregisterFeatures(); + if (commandManager != null) { + if (!Bukkit.getServer().isStopping()) { + this.commandManager.unregisterFeatures(); + } + } this.joinQuitListeners.clear(); this.playerListeners.clear(); this.networkManager.shutdown();