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:
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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());
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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!");
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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 -> {
|
||||||
|
|||||||
Reference in New Issue
Block a user