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

bump adventure platform version

This commit is contained in:
XiaoMoMi
2025-05-12 03:25:38 +08:00
parent 687908defc
commit 9f657166ff
8 changed files with 165 additions and 17 deletions

View File

@@ -39,8 +39,11 @@ import net.momirealms.customnameplates.common.event.EventManager;
import net.momirealms.customnameplates.common.locale.TranslationManager; import net.momirealms.customnameplates.common.locale.TranslationManager;
import net.momirealms.customnameplates.common.plugin.NameplatesPlugin; import net.momirealms.customnameplates.common.plugin.NameplatesPlugin;
import net.momirealms.customnameplates.common.plugin.scheduler.SchedulerTask; import net.momirealms.customnameplates.common.plugin.scheduler.SchedulerTask;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.Nullable;
import java.util.Collection; import java.util.Collection;
import java.util.Map;
import java.util.UUID; import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Consumer; import java.util.function.Consumer;
@@ -127,12 +130,12 @@ public abstract class CustomNameplates implements NameplatesPlugin {
/** /**
* A map that tracks online players by their unique UUID, allowing quick access to player data. * A map that tracks online players by their unique UUID, allowing quick access to player data.
*/ */
protected ConcurrentHashMap<UUID, CNPlayer> onlinePlayerMap = new ConcurrentHashMap<>(); protected Map<UUID, CNPlayer> onlinePlayerMap = new ConcurrentHashMap<>();
/** /**
* A fast lookup map that associates entity IDs to player data (CNPlayer) for quick access. * A fast lookup map that associates entity IDs to player data (CNPlayer) for quick access.
*/ */
protected ConcurrentHashMap<Integer, CNPlayer> entityIDFastLookup = new ConcurrentHashMap<>(); protected Map<Integer, CNPlayer> entityIDFastLookup = new ConcurrentHashMap<>();
/** /**
* Manages advances or progressions for players, such as achievements or level ups. * Manages advances or progressions for players, such as achievements or level ups.
@@ -462,4 +465,16 @@ public abstract class CustomNameplates implements NameplatesPlugin {
public static CustomNameplates getInstance() { public static CustomNameplates getInstance() {
return instance; return instance;
} }
@ApiStatus.Experimental
public void addPlayerUnsafe(int entityId, CNPlayer player) {
if (this.entityIDFastLookup.containsKey(entityId)) return;
this.entityIDFastLookup.put(entityId, player);
}
@Nullable
@ApiStatus.Experimental
public CNPlayer removePlayerUnsafe(int entityId) {
return this.entityIDFastLookup.remove(entityId);
}
} }

View File

@@ -0,0 +1,109 @@
package net.momirealms.customnameplates.api;
import net.momirealms.customnameplates.api.util.Vector3;
import java.util.Set;
import java.util.UUID;
public class DummyPlayer extends AbstractCNPlayer<Object> {
private final CNPlayer target;
private final int megEntityId;
private final Vector3 position;
public DummyPlayer(CustomNameplates plugin, CNPlayer delegate, int entityId, Vector3 location) {
super(plugin, delegate.channel());
this.target = delegate;
this.megEntityId = entityId;
this.position = location;
}
@Override
public int entityID() {
return this.megEntityId;
}
@Override
public boolean hasPermission(String permission) {
return this.target.hasPermission(permission);
}
@Override
public Vector3 position() {
return this.position;
}
@Override
public String world() {
return this.target.world();
}
@Override
public boolean isOnline() {
return this.target.isOnline();
}
@Override
public boolean isSpectator() {
return false;
}
@Override
public double scale() {
return this.target.scale();
}
@Override
public boolean isCrouching() {
return false;
}
@Override
public long playerTime() {
return this.target.playerTime();
}
@Override
public boolean isFlying() {
return false;
}
@Override
public int remainingAir() {
return this.target.remainingAir();
}
@Override
public Set<Integer> passengers() {
return Set.of();
}
@Override
public boolean isInitialized() {
return false;
}
@Override
public String name() {
return this.target.name();
}
@Override
public UUID uuid() {
return this.target.uuid();
}
@Override
public Object player() {
return this.target.player();
}
@Override
public String currentNameplate() {
return this.target.currentNameplate();
}
@Override
public String currentBubble() {
return this.target.currentBubble();
}
}

View File

@@ -18,6 +18,7 @@
package net.momirealms.customnameplates.api.feature.tag; package net.momirealms.customnameplates.api.feature.tag;
import net.momirealms.customnameplates.api.CNPlayer; import net.momirealms.customnameplates.api.CNPlayer;
import net.momirealms.customnameplates.api.feature.JoinQuitListener;
import net.momirealms.customnameplates.common.plugin.feature.Reloadable; import net.momirealms.customnameplates.common.plugin.feature.Reloadable;
import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
@@ -25,7 +26,7 @@ import org.jetbrains.annotations.Nullable;
/** /**
* An interface manages unlimited tags * An interface manages unlimited tags
*/ */
public interface UnlimitedTagManager extends Reloadable { public interface UnlimitedTagManager extends Reloadable, JoinQuitListener {
/** /**
* Called every tick to update the state of tags. * Called every tick to update the state of tags.

View File

@@ -32,7 +32,6 @@ import java.util.*;
import java.util.function.Predicate; import java.util.function.Predicate;
public class TagRendererImpl implements TagRenderer { public class TagRendererImpl implements TagRenderer {
private final CNPlayer owner; private final CNPlayer owner;
private final UnlimitedTagManager manager; private final UnlimitedTagManager manager;
private final Vector<Tag> tagVector; private final Vector<Tag> tagVector;

View File

@@ -52,11 +52,11 @@ import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
public class UnlimitedTagManagerImpl implements UnlimitedTagManager, JoinQuitListener, PlayerListener { public class UnlimitedTagManagerImpl implements UnlimitedTagManager, PlayerListener {
private final CustomNameplates plugin; private final CustomNameplates plugin;
private final LinkedHashMap<String, NameTagConfig> configs = new LinkedHashMap<>(); private final LinkedHashMap<String, NameTagConfig> configs = new LinkedHashMap<>();
private final ConcurrentHashMap<UUID, TagRendererImpl> tagRenderers = new ConcurrentHashMap<>(); private final ConcurrentHashMap<Integer, TagRendererImpl> tagRenderers = new ConcurrentHashMap<>();
private NameTagConfig[] configArray = new NameTagConfig[0]; private NameTagConfig[] configArray = new NameTagConfig[0];
private int previewDuration; private int previewDuration;
private boolean alwaysShow; private boolean alwaysShow;
@@ -142,7 +142,7 @@ public class UnlimitedTagManagerImpl implements UnlimitedTagManager, JoinQuitLis
public void onPlayerJoin(CNPlayer player) { public void onPlayerJoin(CNPlayer player) {
plugin.debug(() -> player.name() + " joined the server"); plugin.debug(() -> player.name() + " joined the server");
TagRendererImpl sender = new TagRendererImpl(this, player); TagRendererImpl sender = new TagRendererImpl(this, player);
TagRendererImpl previous = tagRenderers.put(player.uuid(), sender); TagRendererImpl previous = tagRenderers.put(player.entityID(), sender);
if (previous != null) { if (previous != null) {
previous.destroy(); previous.destroy();
} }
@@ -155,7 +155,7 @@ public class UnlimitedTagManagerImpl implements UnlimitedTagManager, JoinQuitLis
@Override @Override
public void onPlayerQuit(CNPlayer player) { public void onPlayerQuit(CNPlayer player) {
TagRendererImpl sender = tagRenderers.remove(player.uuid()); TagRendererImpl sender = tagRenderers.remove(player.entityID());
if (sender != null) { if (sender != null) {
sender.destroy(); sender.destroy();
} }
@@ -208,7 +208,7 @@ public class UnlimitedTagManagerImpl implements UnlimitedTagManager, JoinQuitLis
@Override @Override
public void onAddPlayer(CNPlayer owner, CNPlayer added) { public void onAddPlayer(CNPlayer owner, CNPlayer added) {
TagRendererImpl controller = tagRenderers.get(owner.uuid()); TagRendererImpl controller = tagRenderers.get(owner.entityID());
if (controller != null) { if (controller != null) {
controller.handlePlayerAdd(added); controller.handlePlayerAdd(added);
} }
@@ -216,12 +216,12 @@ public class UnlimitedTagManagerImpl implements UnlimitedTagManager, JoinQuitLis
@Override @Override
public TagRenderer getTagRender(CNPlayer owner) { public TagRenderer getTagRender(CNPlayer owner) {
return tagRenderers.get(owner.uuid()); return tagRenderers.get(owner.entityID());
} }
@Override @Override
public void onRemovePlayer(CNPlayer owner, CNPlayer removed) { public void onRemovePlayer(CNPlayer owner, CNPlayer removed) {
TagRendererImpl controller = tagRenderers.get(owner.uuid()); TagRendererImpl controller = tagRenderers.get(owner.entityID());
if (controller != null) { if (controller != null) {
controller.handlePlayerRemove(removed); controller.handlePlayerRemove(removed);
} }
@@ -229,7 +229,7 @@ public class UnlimitedTagManagerImpl implements UnlimitedTagManager, JoinQuitLis
@Override @Override
public void onPlayerDataSet(CNPlayer owner, CNPlayer viewer, boolean isCrouching) { public void onPlayerDataSet(CNPlayer owner, CNPlayer viewer, boolean isCrouching) {
TagRendererImpl controller = tagRenderers.get(owner.uuid()); TagRendererImpl controller = tagRenderers.get(owner.entityID());
if (controller != null) { if (controller != null) {
controller.handleEntityDataChange(viewer, isCrouching); controller.handleEntityDataChange(viewer, isCrouching);
} }
@@ -237,7 +237,7 @@ public class UnlimitedTagManagerImpl implements UnlimitedTagManager, JoinQuitLis
@Override @Override
public void onPlayerAttributeSet(CNPlayer owner, CNPlayer viewer, double scale) { public void onPlayerAttributeSet(CNPlayer owner, CNPlayer viewer, double scale) {
TagRendererImpl controller = tagRenderers.get(owner.uuid()); TagRendererImpl controller = tagRenderers.get(owner.entityID());
if (controller != null) { if (controller != null) {
controller.handleAttributeChange(viewer, scale); controller.handleAttributeChange(viewer, scale);
} }
@@ -245,7 +245,7 @@ public class UnlimitedTagManagerImpl implements UnlimitedTagManager, JoinQuitLis
@Override @Override
public void onPlayerGameModeChange(CNPlayer owner, CNPlayer viewer, boolean isSpectator) { public void onPlayerGameModeChange(CNPlayer owner, CNPlayer viewer, boolean isSpectator) {
TagRendererImpl controller = tagRenderers.get(owner.uuid()); TagRendererImpl controller = tagRenderers.get(owner.entityID());
if (controller != null) { if (controller != null) {
controller.handleGameModeChange(viewer, isSpectator); controller.handleGameModeChange(viewer, isSpectator);
} }

View File

@@ -148,7 +148,7 @@ bubbles_list:
# A command to test some stuffs # A command to test some stuffs
# Usage: [COMMAND] # Usage: [COMMAND]
debug_test: debug_test:
enable: false enable: true
permission: nameplates.command.debug.test permission: nameplates.command.debug.test
usage: usage:
- /nameplates debug test - /nameplates debug test

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.27.1 project_version=3.0.27.2
config_version=37 config_version=37
project_group=net.momirealms project_group=net.momirealms
@@ -19,7 +19,7 @@ jar_relocator_version=1.7
h2_driver_version=2.3.232 h2_driver_version=2.3.232
sqlite_driver_version=3.49.1.0 sqlite_driver_version=3.49.1.0
adventure_bundle_version=4.21.0 adventure_bundle_version=4.21.0
adventure_platform_version=4.3.4 adventure_platform_version=4.4.0
cloud_core_version=2.0.0 cloud_core_version=2.0.0
cloud_services_version=2.0.0 cloud_services_version=2.0.0
cloud_brigadier_version=2.0.0-beta.10 cloud_brigadier_version=2.0.0-beta.10

View File

@@ -17,10 +17,17 @@
package net.momirealms.customnameplates.bukkit.command.feature; package net.momirealms.customnameplates.bukkit.command.feature;
import net.momirealms.customnameplates.api.CNPlayer;
import net.momirealms.customnameplates.api.CustomNameplates;
import net.momirealms.customnameplates.api.DummyPlayer;
import net.momirealms.customnameplates.api.util.Vector3;
import net.momirealms.customnameplates.bukkit.BukkitCustomNameplates; import net.momirealms.customnameplates.bukkit.BukkitCustomNameplates;
import net.momirealms.customnameplates.bukkit.command.BukkitCommandFeature; import net.momirealms.customnameplates.bukkit.command.BukkitCommandFeature;
import net.momirealms.customnameplates.common.command.CustomNameplatesCommandManager; import net.momirealms.customnameplates.common.command.CustomNameplatesCommandManager;
import org.bukkit.Location;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.ArmorStand;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.incendo.cloud.Command; import org.incendo.cloud.Command;
import org.incendo.cloud.CommandManager; import org.incendo.cloud.CommandManager;
@@ -36,6 +43,23 @@ public class DebugTestCommand extends BukkitCommandFeature<CommandSender> {
return builder return builder
.senderType(Player.class) .senderType(Player.class)
.handler(context -> { .handler(context -> {
Player owner = context.sender();
Location loc = context.sender().getLocation().add(5,0,5);
CustomNameplates plugin = CustomNameplates.getInstance();
CNPlayer cnPlayer = plugin.getPlayer(owner.getUniqueId());
Entity entity = owner.getWorld().spawn(loc, ArmorStand.class, e -> {
int fakeEntityId = e.getEntityId();
CNPlayer fakePlayer = new DummyPlayer(plugin, cnPlayer, fakeEntityId, new Vector3(loc.getX(), loc.getY(), loc.getZ()));
plugin.addPlayerUnsafe(fakeEntityId, fakePlayer);
plugin.getUnlimitedTagManager().onPlayerJoin(fakePlayer);
});
plugin.getScheduler().sync().runLater(() -> {
entity.remove();
CNPlayer fake = plugin.removePlayerUnsafe(entity.getEntityId());
if (fake != null) {
plugin.getUnlimitedTagManager().onPlayerQuit(fake);
}
}, 100, null);
}); });
} }