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:
@@ -39,8 +39,11 @@ import net.momirealms.customnameplates.common.event.EventManager;
|
||||
import net.momirealms.customnameplates.common.locale.TranslationManager;
|
||||
import net.momirealms.customnameplates.common.plugin.NameplatesPlugin;
|
||||
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.Map;
|
||||
import java.util.UUID;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
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.
|
||||
*/
|
||||
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.
|
||||
*/
|
||||
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.
|
||||
@@ -462,4 +465,16 @@ public abstract class CustomNameplates implements NameplatesPlugin {
|
||||
public static CustomNameplates getInstance() {
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
@@ -18,6 +18,7 @@
|
||||
package net.momirealms.customnameplates.api.feature.tag;
|
||||
|
||||
import net.momirealms.customnameplates.api.CNPlayer;
|
||||
import net.momirealms.customnameplates.api.feature.JoinQuitListener;
|
||||
import net.momirealms.customnameplates.common.plugin.feature.Reloadable;
|
||||
import org.jetbrains.annotations.ApiStatus;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
@@ -25,7 +26,7 @@ import org.jetbrains.annotations.Nullable;
|
||||
/**
|
||||
* 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.
|
||||
|
||||
@@ -32,7 +32,6 @@ import java.util.*;
|
||||
import java.util.function.Predicate;
|
||||
|
||||
public class TagRendererImpl implements TagRenderer {
|
||||
|
||||
private final CNPlayer owner;
|
||||
private final UnlimitedTagManager manager;
|
||||
private final Vector<Tag> tagVector;
|
||||
|
||||
@@ -52,11 +52,11 @@ import java.util.UUID;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
public class UnlimitedTagManagerImpl implements UnlimitedTagManager, JoinQuitListener, PlayerListener {
|
||||
public class UnlimitedTagManagerImpl implements UnlimitedTagManager, PlayerListener {
|
||||
|
||||
private final CustomNameplates plugin;
|
||||
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 int previewDuration;
|
||||
private boolean alwaysShow;
|
||||
@@ -142,7 +142,7 @@ public class UnlimitedTagManagerImpl implements UnlimitedTagManager, JoinQuitLis
|
||||
public void onPlayerJoin(CNPlayer player) {
|
||||
plugin.debug(() -> player.name() + " joined the server");
|
||||
TagRendererImpl sender = new TagRendererImpl(this, player);
|
||||
TagRendererImpl previous = tagRenderers.put(player.uuid(), sender);
|
||||
TagRendererImpl previous = tagRenderers.put(player.entityID(), sender);
|
||||
if (previous != null) {
|
||||
previous.destroy();
|
||||
}
|
||||
@@ -155,7 +155,7 @@ public class UnlimitedTagManagerImpl implements UnlimitedTagManager, JoinQuitLis
|
||||
|
||||
@Override
|
||||
public void onPlayerQuit(CNPlayer player) {
|
||||
TagRendererImpl sender = tagRenderers.remove(player.uuid());
|
||||
TagRendererImpl sender = tagRenderers.remove(player.entityID());
|
||||
if (sender != null) {
|
||||
sender.destroy();
|
||||
}
|
||||
@@ -208,7 +208,7 @@ public class UnlimitedTagManagerImpl implements UnlimitedTagManager, JoinQuitLis
|
||||
|
||||
@Override
|
||||
public void onAddPlayer(CNPlayer owner, CNPlayer added) {
|
||||
TagRendererImpl controller = tagRenderers.get(owner.uuid());
|
||||
TagRendererImpl controller = tagRenderers.get(owner.entityID());
|
||||
if (controller != null) {
|
||||
controller.handlePlayerAdd(added);
|
||||
}
|
||||
@@ -216,12 +216,12 @@ public class UnlimitedTagManagerImpl implements UnlimitedTagManager, JoinQuitLis
|
||||
|
||||
@Override
|
||||
public TagRenderer getTagRender(CNPlayer owner) {
|
||||
return tagRenderers.get(owner.uuid());
|
||||
return tagRenderers.get(owner.entityID());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRemovePlayer(CNPlayer owner, CNPlayer removed) {
|
||||
TagRendererImpl controller = tagRenderers.get(owner.uuid());
|
||||
TagRendererImpl controller = tagRenderers.get(owner.entityID());
|
||||
if (controller != null) {
|
||||
controller.handlePlayerRemove(removed);
|
||||
}
|
||||
@@ -229,7 +229,7 @@ public class UnlimitedTagManagerImpl implements UnlimitedTagManager, JoinQuitLis
|
||||
|
||||
@Override
|
||||
public void onPlayerDataSet(CNPlayer owner, CNPlayer viewer, boolean isCrouching) {
|
||||
TagRendererImpl controller = tagRenderers.get(owner.uuid());
|
||||
TagRendererImpl controller = tagRenderers.get(owner.entityID());
|
||||
if (controller != null) {
|
||||
controller.handleEntityDataChange(viewer, isCrouching);
|
||||
}
|
||||
@@ -237,7 +237,7 @@ public class UnlimitedTagManagerImpl implements UnlimitedTagManager, JoinQuitLis
|
||||
|
||||
@Override
|
||||
public void onPlayerAttributeSet(CNPlayer owner, CNPlayer viewer, double scale) {
|
||||
TagRendererImpl controller = tagRenderers.get(owner.uuid());
|
||||
TagRendererImpl controller = tagRenderers.get(owner.entityID());
|
||||
if (controller != null) {
|
||||
controller.handleAttributeChange(viewer, scale);
|
||||
}
|
||||
@@ -245,7 +245,7 @@ public class UnlimitedTagManagerImpl implements UnlimitedTagManager, JoinQuitLis
|
||||
|
||||
@Override
|
||||
public void onPlayerGameModeChange(CNPlayer owner, CNPlayer viewer, boolean isSpectator) {
|
||||
TagRendererImpl controller = tagRenderers.get(owner.uuid());
|
||||
TagRendererImpl controller = tagRenderers.get(owner.entityID());
|
||||
if (controller != null) {
|
||||
controller.handleGameModeChange(viewer, isSpectator);
|
||||
}
|
||||
|
||||
@@ -148,7 +148,7 @@ bubbles_list:
|
||||
# A command to test some stuffs
|
||||
# Usage: [COMMAND]
|
||||
debug_test:
|
||||
enable: false
|
||||
enable: true
|
||||
permission: nameplates.command.debug.test
|
||||
usage:
|
||||
- /nameplates debug test
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Project settings
|
||||
# Rule: [major update].[feature update].[bug fix]
|
||||
project_version=3.0.27.1
|
||||
project_version=3.0.27.2
|
||||
config_version=37
|
||||
project_group=net.momirealms
|
||||
|
||||
@@ -19,7 +19,7 @@ jar_relocator_version=1.7
|
||||
h2_driver_version=2.3.232
|
||||
sqlite_driver_version=3.49.1.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_services_version=2.0.0
|
||||
cloud_brigadier_version=2.0.0-beta.10
|
||||
|
||||
@@ -17,10 +17,17 @@
|
||||
|
||||
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.command.BukkitCommandFeature;
|
||||
import net.momirealms.customnameplates.common.command.CustomNameplatesCommandManager;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.ArmorStand;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.incendo.cloud.Command;
|
||||
import org.incendo.cloud.CommandManager;
|
||||
@@ -36,6 +43,23 @@ public class DebugTestCommand extends BukkitCommandFeature<CommandSender> {
|
||||
return builder
|
||||
.senderType(Player.class)
|
||||
.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);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user