9
0
mirror of https://github.com/Xiao-MoMi/Custom-Nameplates.git synced 2025-12-19 15:09:23 +00:00

make player not weak reference

This commit is contained in:
XiaoMoMi
2025-04-23 04:49:35 +08:00
parent c25e222187
commit f1adb436d0
8 changed files with 48 additions and 40 deletions

View File

@@ -44,7 +44,7 @@ import java.util.concurrent.locks.ReentrantReadWriteLock;
/** /**
* Player instance adapted by CustomNameplates * Player instance adapted by CustomNameplates
*/ */
public abstract class AbstractCNPlayer implements CNPlayer { public abstract class AbstractCNPlayer<P> implements CNPlayer {
/** /**
* The CustomNameplates plugin * The CustomNameplates plugin
*/ */
@@ -56,7 +56,10 @@ public abstract class AbstractCNPlayer implements CNPlayer {
/** /**
* Platform player instance * Platform player instance
*/ */
protected Reference<Object> player; protected P player;
protected UUID uuid;
protected int entityId;
protected String name;
private volatile boolean isLoaded = false; private volatile boolean isLoaded = false;
private volatile boolean tempPreviewing = false; private volatile boolean tempPreviewing = false;
@@ -240,8 +243,8 @@ public abstract class AbstractCNPlayer implements CNPlayer {
* *
* @param player player * @param player player
*/ */
public void setPlayer(Object player) { public void setPlayer(P player) {
this.player = new WeakReference<>(player); this.player = player;
} }
@Override @Override
@@ -256,7 +259,7 @@ public abstract class AbstractCNPlayer implements CNPlayer {
@Override @Override
public Object player() { public Object player() {
return player.get(); return player;
} }
/** /**
@@ -665,4 +668,19 @@ public abstract class AbstractCNPlayer implements CNPlayer {
public int hashCode() { public int hashCode() {
return entityID(); return entityID();
} }
@Override
public String name() {
return this.name;
}
@Override
public UUID uuid() {
return this.uuid;
}
@Override
public int entityID() {
return this.entityId;
}
} }

View File

@@ -72,7 +72,7 @@ public class UnlimitedTagManagerImpl implements UnlimitedTagManager, JoinQuitLis
if (preview) return; if (preview) return;
onRemovePlayer(player, player); onRemovePlayer(player, player);
player.removePlayerFromTracker(player); player.removePlayerFromTracker(player);
((AbstractCNPlayer) player).setTempPreviewing(false); ((AbstractCNPlayer<?>) player).setTempPreviewing(false);
} else { } else {
if (!preview) return; if (!preview) return;
Tracker tracker = player.addPlayerToTracker(player); Tracker tracker = player.addPlayerToTracker(player);
@@ -80,7 +80,7 @@ public class UnlimitedTagManagerImpl implements UnlimitedTagManager, JoinQuitLis
tracker.setCrouching(player.isCrouching()); tracker.setCrouching(player.isCrouching());
tracker.setSpectator(player.isSpectator()); tracker.setSpectator(player.isSpectator());
onAddPlayer(player, player); onAddPlayer(player, player);
((AbstractCNPlayer) player).setTempPreviewing(true); ((AbstractCNPlayer<?>) player).setTempPreviewing(true);
} }
} }
@@ -91,7 +91,7 @@ public class UnlimitedTagManagerImpl implements UnlimitedTagManager, JoinQuitLis
if (preview) return; if (preview) return;
onRemovePlayer(player, player); onRemovePlayer(player, player);
player.removePlayerFromTracker(player); player.removePlayerFromTracker(player);
((AbstractCNPlayer) player).setToggleablePreviewing(false); ((AbstractCNPlayer<?>) player).setToggleablePreviewing(false);
} else { } else {
if (!preview) return; if (!preview) return;
Tracker tracker = player.addPlayerToTracker(player); Tracker tracker = player.addPlayerToTracker(player);
@@ -99,7 +99,7 @@ public class UnlimitedTagManagerImpl implements UnlimitedTagManager, JoinQuitLis
tracker.setCrouching(player.isCrouching()); tracker.setCrouching(player.isCrouching());
tracker.setSpectator(player.isSpectator()); tracker.setSpectator(player.isSpectator());
onAddPlayer(player, player); onAddPlayer(player, player);
((AbstractCNPlayer) player).setToggleablePreviewing(true); ((AbstractCNPlayer<?>) player).setToggleablePreviewing(true);
} }
} }

View File

@@ -1,6 +1,6 @@
# Project settings # Project settings
# Rule: [major update].[feature update].[bug fix] # Rule: [major update].[feature update].[bug fix]
project_version=3.0.26 project_version=3.0.26.1
config_version=37 config_version=37
project_group=net.momirealms project_group=net.momirealms

View File

@@ -54,6 +54,7 @@ public class ChatControlRedProvider extends AbstractChatMessageProvider implemen
CNPlayer cnPlayer = plugin.getPlayer(player.getUniqueId()); CNPlayer cnPlayer = plugin.getPlayer(player.getUniqueId());
if (cnPlayer == null) return; if (cnPlayer == null) return;
plugin.getScheduler().async().execute(() -> { plugin.getScheduler().async().execute(() -> {
plugin.debug(() -> "Channel: " + event.getChannel().getName());
manager.onChat(cnPlayer, event.getMessage(), event.getChannel().getName()); manager.onChat(cnPlayer, event.getMessage(), event.getChannel().getName());
}); });
} }

View File

@@ -21,10 +21,7 @@ import io.netty.channel.Channel;
import net.momirealms.customnameplates.api.AbstractCNPlayer; import net.momirealms.customnameplates.api.AbstractCNPlayer;
import net.momirealms.customnameplates.api.CustomNameplates; import net.momirealms.customnameplates.api.CustomNameplates;
import net.momirealms.customnameplates.api.util.Vector3; import net.momirealms.customnameplates.api.util.Vector3;
import org.bukkit.GameMode; import org.bukkit.*;
import org.bukkit.Location;
import org.bukkit.NamespacedKey;
import org.bukkit.Registry;
import org.bukkit.attribute.Attribute; import org.bukkit.attribute.Attribute;
import org.bukkit.attribute.AttributeInstance; import org.bukkit.attribute.AttributeInstance;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
@@ -37,44 +34,28 @@ import java.util.Set;
import java.util.UUID; import java.util.UUID;
import java.util.stream.Collectors; import java.util.stream.Collectors;
public class BukkitCNPlayer extends AbstractCNPlayer { public class BukkitCNPlayer extends AbstractCNPlayer<Player> {
private static final Attribute scaleAttribute = Registry.ATTRIBUTE.get(NamespacedKey.minecraft("generic.scale")); private static final Attribute scaleAttribute = Registry.ATTRIBUTE.get(NamespacedKey.minecraft("generic.scale"));
private Reference<Player> player;
public BukkitCNPlayer(CustomNameplates plugin, Channel channel) { public BukkitCNPlayer(CustomNameplates plugin, Channel channel) {
super(plugin, channel); super(plugin, channel);
} }
public void setPlayer(Player player) { public void setPlayer(Player player) {
super.setPlayer(player); super.setPlayer(player);
this.player = new WeakReference<>(player); super.entityId = player.getEntityId();
super.uuid = player.getUniqueId();
super.name = player.getName();
} }
@Override @Override
public boolean isInitialized() { public boolean isInitialized() {
return player != null; return this.player != null;
} }
@Override @Override
public Player player() { public Player player() {
return player.get(); return super.player;
}
@Override
public String name() {
return player().getName();
}
@Override
public UUID uuid() {
return player().getUniqueId();
}
@Override
public int entityID() {
return player().getEntityId();
} }
@Override @Override

View File

@@ -52,9 +52,9 @@ public class BukkitChatManager extends AbstractChatManager {
} else if (ConfigManager.chatEss() && Bukkit.getPluginManager().isPluginEnabled("EssentialsChat")) { } else if (ConfigManager.chatEss() && Bukkit.getPluginManager().isPluginEnabled("EssentialsChat")) {
this.chatProvider = new EssentialsChatProvider(plugin, this); this.chatProvider = new EssentialsChatProvider(plugin, this);
plugin.getPluginLogger().info("EssentialsChat hooked!"); 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); this.chatProvider = new ChatControlRedProvider(plugin, this);
plugin.getPluginLogger().info("ChatControlRed hooked!"); plugin.getPluginLogger().info("ChatControl hooked!");
} else if (ConfigManager.chatChatty() && Bukkit.getPluginManager().isPluginEnabled("Chatty")) { } else if (ConfigManager.chatChatty() && Bukkit.getPluginManager().isPluginEnabled("Chatty")) {
this.chatProvider = new ChattyProvider(plugin, this); this.chatProvider = new ChattyProvider(plugin, this);
plugin.getPluginLogger().info("Chatty hooked!"); plugin.getPluginLogger().info("Chatty hooked!");

View File

@@ -289,7 +289,7 @@ public class BukkitCustomNameplates extends CustomNameplates implements Listener
MainTask.reset(); MainTask.reset();
// reload players // reload players
for (CNPlayer player : getOnlinePlayers()) { for (CNPlayer player : getOnlinePlayers()) {
((AbstractCNPlayer) player).reload(); ((AbstractCNPlayer<?>) player).reload();
} }
// clear requirement ids // clear requirement ids
this.requirementManager.reload(); 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) @EventHandler(ignoreCancelled = true)
public void onChangeWorld(PlayerChangedWorldEvent event) { public void onChangeWorld(PlayerChangedWorldEvent event) {
if (VersionHelper.isFolia()) return; if (VersionHelper.isFolia()) return;

View File

@@ -53,7 +53,7 @@ public class BubblesForceEquipCommand extends BukkitCommandFeature<CommandSender
.required("bubble", StringParser.stringComponent().suggestionProvider(new SuggestionProvider<>() { .required("bubble", StringParser.stringComponent().suggestionProvider(new SuggestionProvider<>() {
@Override @Override
public @NonNull CompletableFuture<? extends @NonNull Iterable<? extends @NonNull Suggestion>> suggestionsFuture(@NonNull CommandContext<Object> context, @NonNull CommandInput input) { public @NonNull CompletableFuture<? extends @NonNull Iterable<? extends @NonNull Suggestion>> suggestionsFuture(@NonNull CommandContext<Object> 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 -> { .handler(context -> {