From f1adb436d03bb7f4c08903cd1447c2bedf786065 Mon Sep 17 00:00:00 2001 From: XiaoMoMi Date: Wed, 23 Apr 2025 04:49:35 +0800 Subject: [PATCH] make player not weak reference --- .../api/AbstractCNPlayer.java | 28 +++++++++++++--- .../feature/tag/UnlimitedTagManagerImpl.java | 8 ++--- gradle.properties | 2 +- .../chat/ChatControlRedProvider.java | 1 + .../bukkit/BukkitCNPlayer.java | 33 ++++--------------- .../bukkit/BukkitChatManager.java | 4 +-- .../bukkit/BukkitCustomNameplates.java | 10 +++++- .../feature/BubblesForceEquipCommand.java | 2 +- 8 files changed, 48 insertions(+), 40 deletions(-) diff --git a/api/src/main/java/net/momirealms/customnameplates/api/AbstractCNPlayer.java b/api/src/main/java/net/momirealms/customnameplates/api/AbstractCNPlayer.java index b841d4e..6c09315 100644 --- a/api/src/main/java/net/momirealms/customnameplates/api/AbstractCNPlayer.java +++ b/api/src/main/java/net/momirealms/customnameplates/api/AbstractCNPlayer.java @@ -44,7 +44,7 @@ import java.util.concurrent.locks.ReentrantReadWriteLock; /** * Player instance adapted by CustomNameplates */ -public abstract class AbstractCNPlayer implements CNPlayer { +public abstract class AbstractCNPlayer

implements CNPlayer { /** * The CustomNameplates plugin */ @@ -56,7 +56,10 @@ public abstract class AbstractCNPlayer implements CNPlayer { /** * Platform player instance */ - protected Reference player; + protected P player; + protected UUID uuid; + protected int entityId; + protected String name; private volatile boolean isLoaded = false; private volatile boolean tempPreviewing = false; @@ -240,8 +243,8 @@ public abstract class AbstractCNPlayer implements CNPlayer { * * @param player player */ - public void setPlayer(Object player) { - this.player = new WeakReference<>(player); + public void setPlayer(P player) { + this.player = player; } @Override @@ -256,7 +259,7 @@ public abstract class AbstractCNPlayer implements CNPlayer { @Override public Object player() { - return player.get(); + return player; } /** @@ -665,4 +668,19 @@ public abstract class AbstractCNPlayer implements CNPlayer { public int hashCode() { return entityID(); } + + @Override + public String name() { + return this.name; + } + + @Override + public UUID uuid() { + return this.uuid; + } + + @Override + public int entityID() { + return this.entityId; + } } diff --git a/backend/src/main/java/net/momirealms/customnameplates/backend/feature/tag/UnlimitedTagManagerImpl.java b/backend/src/main/java/net/momirealms/customnameplates/backend/feature/tag/UnlimitedTagManagerImpl.java index 0ded43c..cb2f6b7 100644 --- a/backend/src/main/java/net/momirealms/customnameplates/backend/feature/tag/UnlimitedTagManagerImpl.java +++ b/backend/src/main/java/net/momirealms/customnameplates/backend/feature/tag/UnlimitedTagManagerImpl.java @@ -72,7 +72,7 @@ public class UnlimitedTagManagerImpl implements UnlimitedTagManager, JoinQuitLis if (preview) return; onRemovePlayer(player, player); player.removePlayerFromTracker(player); - ((AbstractCNPlayer) player).setTempPreviewing(false); + ((AbstractCNPlayer) player).setTempPreviewing(false); } else { if (!preview) return; Tracker tracker = player.addPlayerToTracker(player); @@ -80,7 +80,7 @@ public class UnlimitedTagManagerImpl implements UnlimitedTagManager, JoinQuitLis tracker.setCrouching(player.isCrouching()); tracker.setSpectator(player.isSpectator()); onAddPlayer(player, player); - ((AbstractCNPlayer) player).setTempPreviewing(true); + ((AbstractCNPlayer) player).setTempPreviewing(true); } } @@ -91,7 +91,7 @@ public class UnlimitedTagManagerImpl implements UnlimitedTagManager, JoinQuitLis if (preview) return; onRemovePlayer(player, player); player.removePlayerFromTracker(player); - ((AbstractCNPlayer) player).setToggleablePreviewing(false); + ((AbstractCNPlayer) player).setToggleablePreviewing(false); } else { if (!preview) return; Tracker tracker = player.addPlayerToTracker(player); @@ -99,7 +99,7 @@ public class UnlimitedTagManagerImpl implements UnlimitedTagManager, JoinQuitLis tracker.setCrouching(player.isCrouching()); tracker.setSpectator(player.isSpectator()); onAddPlayer(player, player); - ((AbstractCNPlayer) player).setToggleablePreviewing(true); + ((AbstractCNPlayer) player).setToggleablePreviewing(true); } } diff --git a/gradle.properties b/gradle.properties index b5e2583..f6bbf2d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ # Project settings # Rule: [major update].[feature update].[bug fix] -project_version=3.0.26 +project_version=3.0.26.1 config_version=37 project_group=net.momirealms diff --git a/platforms/bukkit/compatibility/src/main/java/net/momirealms/customnameplates/bukkit/compatibility/chat/ChatControlRedProvider.java b/platforms/bukkit/compatibility/src/main/java/net/momirealms/customnameplates/bukkit/compatibility/chat/ChatControlRedProvider.java index d359324..34ff87b 100644 --- a/platforms/bukkit/compatibility/src/main/java/net/momirealms/customnameplates/bukkit/compatibility/chat/ChatControlRedProvider.java +++ b/platforms/bukkit/compatibility/src/main/java/net/momirealms/customnameplates/bukkit/compatibility/chat/ChatControlRedProvider.java @@ -54,6 +54,7 @@ public class ChatControlRedProvider extends AbstractChatMessageProvider implemen CNPlayer cnPlayer = plugin.getPlayer(player.getUniqueId()); if (cnPlayer == null) return; plugin.getScheduler().async().execute(() -> { + plugin.debug(() -> "Channel: " + event.getChannel().getName()); manager.onChat(cnPlayer, event.getMessage(), event.getChannel().getName()); }); } diff --git a/platforms/bukkit/src/main/java/net/momirealms/customnameplates/bukkit/BukkitCNPlayer.java b/platforms/bukkit/src/main/java/net/momirealms/customnameplates/bukkit/BukkitCNPlayer.java index 18d1fc9..fa74f36 100644 --- a/platforms/bukkit/src/main/java/net/momirealms/customnameplates/bukkit/BukkitCNPlayer.java +++ b/platforms/bukkit/src/main/java/net/momirealms/customnameplates/bukkit/BukkitCNPlayer.java @@ -21,10 +21,7 @@ import io.netty.channel.Channel; import net.momirealms.customnameplates.api.AbstractCNPlayer; import net.momirealms.customnameplates.api.CustomNameplates; import net.momirealms.customnameplates.api.util.Vector3; -import org.bukkit.GameMode; -import org.bukkit.Location; -import org.bukkit.NamespacedKey; -import org.bukkit.Registry; +import org.bukkit.*; import org.bukkit.attribute.Attribute; import org.bukkit.attribute.AttributeInstance; import org.bukkit.entity.Entity; @@ -37,44 +34,28 @@ import java.util.Set; import java.util.UUID; import java.util.stream.Collectors; -public class BukkitCNPlayer extends AbstractCNPlayer { - +public class BukkitCNPlayer extends AbstractCNPlayer { private static final Attribute scaleAttribute = Registry.ATTRIBUTE.get(NamespacedKey.minecraft("generic.scale")); - private Reference player; - public BukkitCNPlayer(CustomNameplates plugin, Channel channel) { super(plugin, channel); } public void setPlayer(Player player) { super.setPlayer(player); - this.player = new WeakReference<>(player); + super.entityId = player.getEntityId(); + super.uuid = player.getUniqueId(); + super.name = player.getName(); } @Override public boolean isInitialized() { - return player != null; + return this.player != null; } @Override public Player player() { - return player.get(); - } - - @Override - public String name() { - return player().getName(); - } - - @Override - public UUID uuid() { - return player().getUniqueId(); - } - - @Override - public int entityID() { - return player().getEntityId(); + return super.player; } @Override diff --git a/platforms/bukkit/src/main/java/net/momirealms/customnameplates/bukkit/BukkitChatManager.java b/platforms/bukkit/src/main/java/net/momirealms/customnameplates/bukkit/BukkitChatManager.java index 0ebe50d..3f134a2 100644 --- a/platforms/bukkit/src/main/java/net/momirealms/customnameplates/bukkit/BukkitChatManager.java +++ b/platforms/bukkit/src/main/java/net/momirealms/customnameplates/bukkit/BukkitChatManager.java @@ -52,9 +52,9 @@ public class BukkitChatManager extends AbstractChatManager { } else if (ConfigManager.chatEss() && Bukkit.getPluginManager().isPluginEnabled("EssentialsChat")) { this.chatProvider = new EssentialsChatProvider(plugin, this); plugin.getPluginLogger().info("EssentialsChat hooked!"); - } else if (ConfigManager.chatChatControlRed() && Bukkit.getPluginManager().isPluginEnabled("ChatControlRed")) { + } else if (ConfigManager.chatChatControlRed() && Bukkit.getPluginManager().isPluginEnabled("ChatControl")) { this.chatProvider = new ChatControlRedProvider(plugin, this); - plugin.getPluginLogger().info("ChatControlRed hooked!"); + plugin.getPluginLogger().info("ChatControl hooked!"); } else if (ConfigManager.chatChatty() && Bukkit.getPluginManager().isPluginEnabled("Chatty")) { this.chatProvider = new ChattyProvider(plugin, this); plugin.getPluginLogger().info("Chatty hooked!"); 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 b0f51da..8d9c619 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 @@ -289,7 +289,7 @@ public class BukkitCustomNameplates extends CustomNameplates implements Listener MainTask.reset(); // reload players for (CNPlayer player : getOnlinePlayers()) { - ((AbstractCNPlayer) player).reload(); + ((AbstractCNPlayer) player).reload(); } // clear requirement ids this.requirementManager.reload(); @@ -404,6 +404,14 @@ public class BukkitCustomNameplates extends CustomNameplates implements Listener } } + public void handleQuit(CNPlayer cnPlayer) { + entityIDFastLookup.remove(cnPlayer.entityID()); + onlinePlayerMap.remove(cnPlayer.uuid()); + if (VersionHelper.isFolia()) { + foliaLocationTracker.remove(cnPlayer.name()); + } + } + @EventHandler(ignoreCancelled = true) public void onChangeWorld(PlayerChangedWorldEvent event) { if (VersionHelper.isFolia()) return; diff --git a/platforms/bukkit/src/main/java/net/momirealms/customnameplates/bukkit/command/feature/BubblesForceEquipCommand.java b/platforms/bukkit/src/main/java/net/momirealms/customnameplates/bukkit/command/feature/BubblesForceEquipCommand.java index f4a233e..42007cc 100644 --- a/platforms/bukkit/src/main/java/net/momirealms/customnameplates/bukkit/command/feature/BubblesForceEquipCommand.java +++ b/platforms/bukkit/src/main/java/net/momirealms/customnameplates/bukkit/command/feature/BubblesForceEquipCommand.java @@ -53,7 +53,7 @@ public class BubblesForceEquipCommand extends BukkitCommandFeature() { @Override public @NonNull CompletableFuture> suggestionsFuture(@NonNull CommandContext context, @NonNull CommandInput input) { - return CompletableFuture.completedFuture(plugin.getBubbleManager().bubbles().stream().map(it -> Suggestion.suggestion(it.id())).toList()); + return CompletableFuture.completedFuture(plugin.getBubbleManager().bubbleConfigs().stream().map(it -> Suggestion.suggestion(it.id())).toList()); } })) .handler(context -> {