Cleanup, change packet tracker removal method (needs checking for geyser debug message)
This commit is contained in:
parent
3869e310a2
commit
3a5b13c170
|
@ -493,7 +493,7 @@ public class EventListen implements Listener {
|
||||||
boolean resetYaw = event.getNPC().data().get(NPC.Metadata.RESET_YAW_ON_SPAWN,
|
boolean resetYaw = event.getNPC().data().get(NPC.Metadata.RESET_YAW_ON_SPAWN,
|
||||||
Setting.RESET_YAW_ON_SPAWN.asBoolean());
|
Setting.RESET_YAW_ON_SPAWN.asBoolean());
|
||||||
boolean sendTabRemove = NMS.sendTabListAdd(event.getPlayer(), (Player) tracker);
|
boolean sendTabRemove = NMS.sendTabListAdd(event.getPlayer(), (Player) tracker);
|
||||||
if (!sendTabRemove || !Setting.DISABLE_TABLIST.asBoolean()) {
|
if (!sendTabRemove || !event.getNPC().shouldRemoveFromTabList()) {
|
||||||
if (resetYaw) {
|
if (resetYaw) {
|
||||||
Bukkit.getScheduler().scheduleSyncDelayedTask(CitizensAPI.getPlugin(),
|
Bukkit.getScheduler().scheduleSyncDelayedTask(CitizensAPI.getPlugin(),
|
||||||
() -> PlayerAnimation.ARM_SWING.play((Player) tracker, event.getPlayer()));
|
() -> PlayerAnimation.ARM_SWING.play((Player) tracker, event.getPlayer()));
|
||||||
|
|
|
@ -197,7 +197,6 @@ public class Settings {
|
||||||
MAX_NPC_SKIN_RETRIES(
|
MAX_NPC_SKIN_RETRIES(
|
||||||
"How many times to try load NPC skins (due to Minecraft rate-limiting skin requests, should rarely be less than 5",
|
"How many times to try load NPC skins (due to Minecraft rate-limiting skin requests, should rarely be less than 5",
|
||||||
"npc.skins.max-retries", -1),
|
"npc.skins.max-retries", -1),
|
||||||
MAX_PACKET_ENTRIES("npc.limits.max-packet-entries", 15),
|
|
||||||
MAX_TEXT_RANGE("The maximum range in blocks for chatting", "npc.chat.options.max-text-range", 500),
|
MAX_TEXT_RANGE("The maximum range in blocks for chatting", "npc.chat.options.max-text-range", 500),
|
||||||
MAXIMUM_ASTAR_ITERATIONS("The maximum number of blocks to check when pathfinding",
|
MAXIMUM_ASTAR_ITERATIONS("The maximum number of blocks to check when pathfinding",
|
||||||
"npc.pathfinding.maximum-new-pathfinder-iterations", "npc.pathfinding.new-finder.maximum-iterations",
|
"npc.pathfinding.maximum-new-pathfinder-iterations", "npc.pathfinding.new-finder.maximum-iterations",
|
||||||
|
|
|
@ -55,6 +55,7 @@ import net.citizensnpcs.trait.SitTrait;
|
||||||
import net.citizensnpcs.trait.SkinLayers;
|
import net.citizensnpcs.trait.SkinLayers;
|
||||||
import net.citizensnpcs.trait.SneakTrait;
|
import net.citizensnpcs.trait.SneakTrait;
|
||||||
import net.citizensnpcs.util.ChunkCoord;
|
import net.citizensnpcs.util.ChunkCoord;
|
||||||
|
import net.citizensnpcs.util.EntityPacketTracker;
|
||||||
import net.citizensnpcs.util.Messages;
|
import net.citizensnpcs.util.Messages;
|
||||||
import net.citizensnpcs.util.NMS;
|
import net.citizensnpcs.util.NMS;
|
||||||
import net.citizensnpcs.util.PlayerAnimation;
|
import net.citizensnpcs.util.PlayerAnimation;
|
||||||
|
@ -275,11 +276,22 @@ public class CitizensNPC extends AbstractNPC {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void setNameInternal(String name) {
|
||||||
|
super.setNameInternal(name);
|
||||||
|
updateCustomName();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setSneaking(boolean sneaking) {
|
public void setSneaking(boolean sneaking) {
|
||||||
getOrAddTrait(SneakTrait.class).setSneaking(sneaking);
|
getOrAddTrait(SneakTrait.class).setSneaking(sneaking);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean shouldRemoveFromTabList() {
|
||||||
|
return data().get(NPC.Metadata.REMOVE_FROM_TABLIST, Setting.DISABLE_TABLIST.asBoolean());
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean spawn(Location at) {
|
public boolean spawn(Location at) {
|
||||||
return spawn(at, SpawnReason.PLUGIN);
|
return spawn(at, SpawnReason.PLUGIN);
|
||||||
|
@ -308,16 +320,10 @@ public class CitizensNPC extends AbstractNPC {
|
||||||
getEntity().setMetadata("NPC-ID", new FixedMetadataValue(CitizensAPI.getPlugin(), getId()));
|
getEntity().setMetadata("NPC-ID", new FixedMetadataValue(CitizensAPI.getPlugin(), getId()));
|
||||||
// Spawning the entity will create an entity tracker that is not controlled by Citizens. This is fixed later in
|
// Spawning the entity will create an entity tracker that is not controlled by Citizens. This is fixed later in
|
||||||
// spawning; to avoid sending packets twice, try to hide the entity initially
|
// spawning; to avoid sending packets twice, try to hide the entity initially
|
||||||
if (SUPPORT_VISIBLE_BY_DEFAULT) {
|
EntityPacketTracker tracker = NMS.getPacketTracker(getEntity());
|
||||||
try {
|
if (tracker != null) {
|
||||||
getEntity().setVisibleByDefault(false);
|
|
||||||
} catch (NoSuchMethodError err) {
|
|
||||||
SUPPORT_VISIBLE_BY_DEFAULT = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!SUPPORT_VISIBLE_BY_DEFAULT && getEntity().getType() == EntityType.PLAYER) {
|
|
||||||
for (Player player : Bukkit.getServer().getOnlinePlayers()) {
|
for (Player player : Bukkit.getServer().getOnlinePlayers()) {
|
||||||
player.hidePlayer((Player) getEntity());
|
tracker.unlink(player);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (getEntity() instanceof SkinnableEntity && !hasTrait(SkinLayers.class)) {
|
if (getEntity() instanceof SkinnableEntity && !hasTrait(SkinLayers.class)) {
|
||||||
|
@ -389,15 +395,8 @@ public class CitizensNPC extends AbstractNPC {
|
||||||
ex.printStackTrace();
|
ex.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Replace the entity tracker and attempt to show the entity
|
// Replace the entity tracker
|
||||||
NMS.replaceTracker(getEntity());
|
NMS.replaceTracker(getEntity());
|
||||||
if (SUPPORT_VISIBLE_BY_DEFAULT) {
|
|
||||||
getEntity().setVisibleByDefault(true);
|
|
||||||
} else if (getEntity().getType() == EntityType.PLAYER) {
|
|
||||||
for (Player player : Bukkit.getServer().getOnlinePlayers()) {
|
|
||||||
player.showPlayer((Player) getEntity());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
EntityType type = getEntity().getType();
|
EntityType type = getEntity().getType();
|
||||||
if (type.isAlive()) {
|
if (type.isAlive()) {
|
||||||
LivingEntity entity = (LivingEntity) getEntity();
|
LivingEntity entity = (LivingEntity) getEntity();
|
||||||
|
@ -565,12 +564,13 @@ public class CitizensNPC extends AbstractNPC {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
private void updateCustomName() {
|
||||||
public void updateCustomName() {
|
if (getEntity() == null)
|
||||||
|
return;
|
||||||
if (coloredNameComponentCache != null) {
|
if (coloredNameComponentCache != null) {
|
||||||
NMS.setCustomName(getEntity(), coloredNameComponentCache, coloredNameStringCache);
|
NMS.setCustomName(getEntity(), coloredNameComponentCache, coloredNameStringCache);
|
||||||
} else {
|
} else {
|
||||||
super.updateCustomName();
|
getEntity().setCustomName(getFullName());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -633,5 +633,4 @@ public class CitizensNPC extends AbstractNPC {
|
||||||
private static boolean SUPPORT_PICKUP_ITEMS = true;
|
private static boolean SUPPORT_PICKUP_ITEMS = true;
|
||||||
private static boolean SUPPORT_SILENT = true;
|
private static boolean SUPPORT_SILENT = true;
|
||||||
private static boolean SUPPORT_USE_ITEM = true;
|
private static boolean SUPPORT_USE_ITEM = true;
|
||||||
private static boolean SUPPORT_VISIBLE_BY_DEFAULT = true;
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -108,9 +108,9 @@ public class SkinPacketTracker {
|
||||||
Collection<? extends Player> players = Bukkit.getOnlinePlayers();
|
Collection<? extends Player> players = Bukkit.getOnlinePlayers();
|
||||||
|
|
||||||
for (Player player : players) {
|
for (Player player : players) {
|
||||||
if (player.hasMetadata("NPC")) {
|
if (player.hasMetadata("NPC"))
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
// send packet now and later to ensure removal from player list
|
// send packet now and later to ensure removal from player list
|
||||||
NMS.sendTabListRemove(player, entity.getBukkitEntity());
|
NMS.sendTabListRemove(player, entity.getBukkitEntity());
|
||||||
TAB_LIST_REMOVER.sendPacket(player, entity);
|
TAB_LIST_REMOVER.sendPacket(player, entity);
|
||||||
|
@ -136,7 +136,7 @@ public class SkinPacketTracker {
|
||||||
|
|
||||||
private void scheduleRemovePacket(PlayerEntry entry) {
|
private void scheduleRemovePacket(PlayerEntry entry) {
|
||||||
if (isRemoved || !CitizensAPI.hasImplementation() || !CitizensAPI.getPlugin().isEnabled()
|
if (isRemoved || !CitizensAPI.hasImplementation() || !CitizensAPI.getPlugin().isEnabled()
|
||||||
|| !shouldRemoveFromTabList())
|
|| !entity.getNPC().shouldRemoveFromTabList())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
entry.removeTask = Bukkit.getScheduler().runTaskLater(CitizensAPI.getPlugin(),
|
entry.removeTask = Bukkit.getScheduler().runTaskLater(CitizensAPI.getPlugin(),
|
||||||
|
@ -148,10 +148,6 @@ public class SkinPacketTracker {
|
||||||
scheduleRemovePacket(entry);
|
scheduleRemovePacket(entry);
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean shouldRemoveFromTabList() {
|
|
||||||
return entity.getNPC().data().get("removefromtablist", Setting.DISABLE_TABLIST.asBoolean());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Send skin related packets to all nearby players within the specified block radius.
|
* Send skin related packets to all nearby players within the specified block radius.
|
||||||
*
|
*
|
||||||
|
|
|
@ -14,7 +14,6 @@ import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import com.google.common.base.Preconditions;
|
import com.google.common.base.Preconditions;
|
||||||
|
|
||||||
import net.citizensnpcs.Settings.Setting;
|
|
||||||
import net.citizensnpcs.api.CitizensAPI;
|
import net.citizensnpcs.api.CitizensAPI;
|
||||||
import net.citizensnpcs.util.NMS;
|
import net.citizensnpcs.util.NMS;
|
||||||
|
|
||||||
|
@ -113,38 +112,33 @@ public class TabListRemover {
|
||||||
private class Sender implements Runnable {
|
private class Sender implements Runnable {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
int maxPacketEntries = Setting.MAX_PACKET_ENTRIES.asInt();
|
int maxPacketEntries = 15;
|
||||||
|
|
||||||
Iterator<Map.Entry<UUID, PlayerEntry>> entryIterator = pending.entrySet().iterator();
|
Iterator<Map.Entry<UUID, PlayerEntry>> entryIterator = pending.entrySet().iterator();
|
||||||
while (entryIterator.hasNext()) {
|
while (entryIterator.hasNext()) {
|
||||||
Map.Entry<UUID, PlayerEntry> mapEntry = entryIterator.next();
|
Map.Entry<UUID, PlayerEntry> mapEntry = entryIterator.next();
|
||||||
PlayerEntry entry = mapEntry.getValue();
|
PlayerEntry entry = mapEntry.getValue();
|
||||||
|
if (!entry.player.isOnline()) {
|
||||||
|
entryIterator.remove();
|
||||||
|
continue;
|
||||||
|
}
|
||||||
int listSize = Math.min(maxPacketEntries, entry.toRemove.size());
|
int listSize = Math.min(maxPacketEntries, entry.toRemove.size());
|
||||||
boolean sendAll = listSize == entry.toRemove.size();
|
|
||||||
|
|
||||||
List<SkinnableEntity> skinnableList = new ArrayList<>(listSize);
|
List<Player> skinnableList = new ArrayList<>(listSize);
|
||||||
|
|
||||||
int i = 0;
|
int i = 0;
|
||||||
Iterator<SkinnableEntity> skinIterator = entry.toRemove.iterator();
|
for (Iterator<SkinnableEntity> skinIterator = entry.toRemove.iterator(); skinIterator.hasNext();) {
|
||||||
while (skinIterator.hasNext()) {
|
if (i >= maxPacketEntries)
|
||||||
if (i >= maxPacketEntries) {
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
SkinnableEntity skinnable = skinIterator.next();
|
|
||||||
skinnableList.add(skinnable);
|
|
||||||
|
|
||||||
|
SkinnableEntity next = skinIterator.next();
|
||||||
|
skinnableList.add(next.getBukkitEntity());
|
||||||
|
next.getSkinTracker().notifyRemovePacketSent(entry.player.getUniqueId());
|
||||||
skinIterator.remove();
|
skinIterator.remove();
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
if (entry.player.isOnline()) {
|
NMS.sendTabListRemove(entry.player, skinnableList);
|
||||||
NMS.sendTabListRemove(entry.player, skinnableList);
|
if (entry.toRemove.isEmpty()) {
|
||||||
}
|
|
||||||
// notify skin trackers that a remove packet has been sent to a player
|
|
||||||
for (SkinnableEntity entity : skinnableList) {
|
|
||||||
entity.getSkinTracker().notifyRemovePacketSent(entry.player.getUniqueId());
|
|
||||||
}
|
|
||||||
if (sendAll) {
|
|
||||||
entryIterator.remove();
|
entryIterator.remove();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,6 +37,7 @@ import org.bukkit.inventory.meta.SkullMeta;
|
||||||
import org.bukkit.scoreboard.Team;
|
import org.bukkit.scoreboard.Team;
|
||||||
import org.bukkit.util.Vector;
|
import org.bukkit.util.Vector;
|
||||||
|
|
||||||
|
import com.google.common.collect.ImmutableList;
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
import com.mojang.authlib.GameProfile;
|
import com.mojang.authlib.GameProfile;
|
||||||
import com.mojang.authlib.ProfileLookupCallback;
|
import com.mojang.authlib.ProfileLookupCallback;
|
||||||
|
@ -58,7 +59,6 @@ import net.citizensnpcs.api.util.Messaging;
|
||||||
import net.citizensnpcs.npc.ai.MCNavigationStrategy.MCNavigator;
|
import net.citizensnpcs.npc.ai.MCNavigationStrategy.MCNavigator;
|
||||||
import net.citizensnpcs.npc.ai.MCTargetStrategy.TargetNavigator;
|
import net.citizensnpcs.npc.ai.MCTargetStrategy.TargetNavigator;
|
||||||
import net.citizensnpcs.npc.ai.NPCHolder;
|
import net.citizensnpcs.npc.ai.NPCHolder;
|
||||||
import net.citizensnpcs.npc.skin.SkinnableEntity;
|
|
||||||
import net.citizensnpcs.trait.MirrorTrait;
|
import net.citizensnpcs.trait.MirrorTrait;
|
||||||
import net.citizensnpcs.trait.PacketNPC;
|
import net.citizensnpcs.trait.PacketNPC;
|
||||||
import net.citizensnpcs.trait.versioned.CamelTrait.CamelPose;
|
import net.citizensnpcs.trait.versioned.CamelTrait.CamelPose;
|
||||||
|
@ -779,12 +779,12 @@ public class NMS {
|
||||||
return BRIDGE.sendTabListAdd(recipient, listPlayer);
|
return BRIDGE.sendTabListAdd(recipient, listPlayer);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void sendTabListRemove(Player recipient, Collection<? extends SkinnableEntity> skinnableNPCs) {
|
public static void sendTabListRemove(Player recipient, Collection<Player> players) {
|
||||||
BRIDGE.sendTabListRemove(recipient, skinnableNPCs);
|
BRIDGE.sendTabListRemove(recipient, players);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void sendTabListRemove(Player recipient, Player listPlayer) {
|
public static void sendTabListRemove(Player recipient, Player listPlayer) {
|
||||||
BRIDGE.sendTabListRemove(recipient, listPlayer);
|
sendTabListRemove(recipient, ImmutableList.of(listPlayer));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void sendTeamPacket(Player recipient, Team team, int mode) {
|
public static void sendTeamPacket(Player recipient, Team team, int mode) {
|
||||||
|
|
|
@ -40,7 +40,6 @@ import net.citizensnpcs.api.util.BoundingBox;
|
||||||
import net.citizensnpcs.api.util.EntityDim;
|
import net.citizensnpcs.api.util.EntityDim;
|
||||||
import net.citizensnpcs.npc.ai.MCNavigationStrategy.MCNavigator;
|
import net.citizensnpcs.npc.ai.MCNavigationStrategy.MCNavigator;
|
||||||
import net.citizensnpcs.npc.ai.MCTargetStrategy.TargetNavigator;
|
import net.citizensnpcs.npc.ai.MCTargetStrategy.TargetNavigator;
|
||||||
import net.citizensnpcs.npc.skin.SkinnableEntity;
|
|
||||||
import net.citizensnpcs.trait.MirrorTrait;
|
import net.citizensnpcs.trait.MirrorTrait;
|
||||||
import net.citizensnpcs.trait.versioned.CamelTrait.CamelPose;
|
import net.citizensnpcs.trait.versioned.CamelTrait.CamelPose;
|
||||||
import net.citizensnpcs.trait.versioned.SnifferTrait.SnifferState;
|
import net.citizensnpcs.trait.versioned.SnifferTrait.SnifferState;
|
||||||
|
@ -174,9 +173,7 @@ public interface NMSBridge {
|
||||||
|
|
||||||
public boolean sendTabListAdd(Player recipient, Player listPlayer);
|
public boolean sendTabListAdd(Player recipient, Player listPlayer);
|
||||||
|
|
||||||
public void sendTabListRemove(Player recipient, Collection<? extends SkinnableEntity> skinnableNPCs);
|
public void sendTabListRemove(Player recipient, Collection<Player> players);
|
||||||
|
|
||||||
public void sendTabListRemove(Player recipient, Player listPlayer);
|
|
||||||
|
|
||||||
public void sendTeamPacket(Player recipient, Team team, int mode);
|
public void sendTeamPacket(Player recipient, Team team, int mode);
|
||||||
|
|
||||||
|
|
|
@ -148,14 +148,8 @@ public class EntityHumanNPC extends EntityPlayer implements NPCHolder, Skinnable
|
||||||
if (dead)
|
if (dead)
|
||||||
return;
|
return;
|
||||||
super.die(damagesource);
|
super.die(damagesource);
|
||||||
Bukkit.getScheduler().runTaskLater(CitizensAPI.getPlugin(), () -> world.removeEntity(EntityHumanNPC.this), 15); // give
|
Bukkit.getScheduler().runTaskLater(CitizensAPI.getPlugin(), () -> world.removeEntity(EntityHumanNPC.this), 15);
|
||||||
// enough
|
// give enough time for death and smoke animation
|
||||||
// time
|
|
||||||
// for
|
|
||||||
// death
|
|
||||||
// and
|
|
||||||
// smoke
|
|
||||||
// animation
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -170,7 +170,6 @@ import net.citizensnpcs.npc.EntityControllers;
|
||||||
import net.citizensnpcs.npc.ai.MCNavigationStrategy.MCNavigator;
|
import net.citizensnpcs.npc.ai.MCNavigationStrategy.MCNavigator;
|
||||||
import net.citizensnpcs.npc.ai.MCTargetStrategy.TargetNavigator;
|
import net.citizensnpcs.npc.ai.MCTargetStrategy.TargetNavigator;
|
||||||
import net.citizensnpcs.npc.ai.NPCHolder;
|
import net.citizensnpcs.npc.ai.NPCHolder;
|
||||||
import net.citizensnpcs.npc.skin.SkinnableEntity;
|
|
||||||
import net.citizensnpcs.trait.RotationTrait;
|
import net.citizensnpcs.trait.RotationTrait;
|
||||||
import net.citizensnpcs.trait.versioned.BossBarTrait;
|
import net.citizensnpcs.trait.versioned.BossBarTrait;
|
||||||
import net.citizensnpcs.trait.versioned.EnderDragonTrait;
|
import net.citizensnpcs.trait.versioned.EnderDragonTrait;
|
||||||
|
@ -1129,28 +1128,19 @@ public class NMSImpl implements NMSBridge {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void sendTabListRemove(Player recipient, Collection<? extends SkinnableEntity> skinnableNPCs) {
|
public void sendTabListRemove(Player recipient, Collection<Player> skinnableNPCs) {
|
||||||
Preconditions.checkNotNull(recipient);
|
Preconditions.checkNotNull(recipient);
|
||||||
Preconditions.checkNotNull(skinnableNPCs);
|
Preconditions.checkNotNull(skinnableNPCs);
|
||||||
EntityPlayer[] entities = new EntityPlayer[skinnableNPCs.size()];
|
EntityPlayer[] entities = new EntityPlayer[skinnableNPCs.size()];
|
||||||
int i = 0;
|
int i = 0;
|
||||||
for (SkinnableEntity skinnable : skinnableNPCs) {
|
for (Player skinnable : skinnableNPCs) {
|
||||||
entities[i] = (EntityPlayer) skinnable;
|
entities[i] = (EntityPlayer) getHandle(skinnable);
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
NMSImpl.sendPacket(recipient,
|
NMSImpl.sendPacket(recipient,
|
||||||
new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.REMOVE_PLAYER, entities));
|
new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.REMOVE_PLAYER, entities));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void sendTabListRemove(Player recipient, Player listPlayer) {
|
|
||||||
Preconditions.checkNotNull(recipient);
|
|
||||||
Preconditions.checkNotNull(listPlayer);
|
|
||||||
EntityPlayer entity = ((CraftPlayer) listPlayer).getHandle();
|
|
||||||
NMSImpl.sendPacket(recipient,
|
|
||||||
new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.REMOVE_PLAYER, entity));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void sendTeamPacket(Player recipient, Team team, int mode) {
|
public void sendTeamPacket(Player recipient, Team team, int mode) {
|
||||||
Preconditions.checkNotNull(recipient);
|
Preconditions.checkNotNull(recipient);
|
||||||
|
|
|
@ -223,7 +223,7 @@ public class EntityHumanNPC extends EntityPlayer implements NPCHolder, Skinnable
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public IChatBaseComponent getPlayerListName() {
|
public IChatBaseComponent getPlayerListName() {
|
||||||
if (Setting.DISABLE_TABLIST.asBoolean())
|
if (npc != null && npc.shouldRemoveFromTabList())
|
||||||
return new ChatComponentText("");
|
return new ChatComponentText("");
|
||||||
return super.getPlayerListName();
|
return super.getPlayerListName();
|
||||||
}
|
}
|
||||||
|
|
|
@ -185,7 +185,6 @@ import net.citizensnpcs.npc.EntityControllers;
|
||||||
import net.citizensnpcs.npc.ai.MCNavigationStrategy.MCNavigator;
|
import net.citizensnpcs.npc.ai.MCNavigationStrategy.MCNavigator;
|
||||||
import net.citizensnpcs.npc.ai.MCTargetStrategy.TargetNavigator;
|
import net.citizensnpcs.npc.ai.MCTargetStrategy.TargetNavigator;
|
||||||
import net.citizensnpcs.npc.ai.NPCHolder;
|
import net.citizensnpcs.npc.ai.NPCHolder;
|
||||||
import net.citizensnpcs.npc.skin.SkinnableEntity;
|
|
||||||
import net.citizensnpcs.trait.RotationTrait;
|
import net.citizensnpcs.trait.RotationTrait;
|
||||||
import net.citizensnpcs.trait.versioned.BossBarTrait;
|
import net.citizensnpcs.trait.versioned.BossBarTrait;
|
||||||
import net.citizensnpcs.trait.versioned.EnderDragonTrait;
|
import net.citizensnpcs.trait.versioned.EnderDragonTrait;
|
||||||
|
@ -1182,28 +1181,19 @@ public class NMSImpl implements NMSBridge {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void sendTabListRemove(Player recipient, Collection<? extends SkinnableEntity> skinnableNPCs) {
|
public void sendTabListRemove(Player recipient, Collection<Player> skinnableNPCs) {
|
||||||
Preconditions.checkNotNull(recipient);
|
Preconditions.checkNotNull(recipient);
|
||||||
Preconditions.checkNotNull(skinnableNPCs);
|
Preconditions.checkNotNull(skinnableNPCs);
|
||||||
EntityPlayer[] entities = new EntityPlayer[skinnableNPCs.size()];
|
EntityPlayer[] entities = new EntityPlayer[skinnableNPCs.size()];
|
||||||
int i = 0;
|
int i = 0;
|
||||||
for (SkinnableEntity skinnable : skinnableNPCs) {
|
for (Player skinnable : skinnableNPCs) {
|
||||||
entities[i] = (EntityPlayer) skinnable;
|
entities[i] = (EntityPlayer) getHandle(skinnable);
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
NMSImpl.sendPacket(recipient,
|
NMSImpl.sendPacket(recipient,
|
||||||
new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.REMOVE_PLAYER, entities));
|
new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.REMOVE_PLAYER, entities));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void sendTabListRemove(Player recipient, Player listPlayer) {
|
|
||||||
Preconditions.checkNotNull(recipient);
|
|
||||||
Preconditions.checkNotNull(listPlayer);
|
|
||||||
EntityPlayer entity = ((CraftPlayer) listPlayer).getHandle();
|
|
||||||
NMSImpl.sendPacket(recipient,
|
|
||||||
new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.REMOVE_PLAYER, entity));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void sendTeamPacket(Player recipient, Team team, int mode) {
|
public void sendTeamPacket(Player recipient, Team team, int mode) {
|
||||||
Preconditions.checkNotNull(recipient);
|
Preconditions.checkNotNull(recipient);
|
||||||
|
|
|
@ -232,7 +232,7 @@ public class EntityHumanNPC extends EntityPlayer implements NPCHolder, Skinnable
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public IChatBaseComponent getPlayerListName() {
|
public IChatBaseComponent getPlayerListName() {
|
||||||
if (Setting.DISABLE_TABLIST.asBoolean())
|
if (npc != null && npc.shouldRemoveFromTabList())
|
||||||
return new ChatComponentText("");
|
return new ChatComponentText("");
|
||||||
return super.getPlayerListName();
|
return super.getPlayerListName();
|
||||||
}
|
}
|
||||||
|
|
|
@ -187,7 +187,6 @@ import net.citizensnpcs.npc.EntityControllers;
|
||||||
import net.citizensnpcs.npc.ai.MCNavigationStrategy.MCNavigator;
|
import net.citizensnpcs.npc.ai.MCNavigationStrategy.MCNavigator;
|
||||||
import net.citizensnpcs.npc.ai.MCTargetStrategy.TargetNavigator;
|
import net.citizensnpcs.npc.ai.MCTargetStrategy.TargetNavigator;
|
||||||
import net.citizensnpcs.npc.ai.NPCHolder;
|
import net.citizensnpcs.npc.ai.NPCHolder;
|
||||||
import net.citizensnpcs.npc.skin.SkinnableEntity;
|
|
||||||
import net.citizensnpcs.trait.RotationTrait;
|
import net.citizensnpcs.trait.RotationTrait;
|
||||||
import net.citizensnpcs.trait.versioned.BossBarTrait;
|
import net.citizensnpcs.trait.versioned.BossBarTrait;
|
||||||
import net.citizensnpcs.trait.versioned.EnderDragonTrait;
|
import net.citizensnpcs.trait.versioned.EnderDragonTrait;
|
||||||
|
@ -1189,28 +1188,19 @@ public class NMSImpl implements NMSBridge {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void sendTabListRemove(Player recipient, Collection<? extends SkinnableEntity> skinnableNPCs) {
|
public void sendTabListRemove(Player recipient, Collection<Player> skinnableNPCs) {
|
||||||
Preconditions.checkNotNull(recipient);
|
Preconditions.checkNotNull(recipient);
|
||||||
Preconditions.checkNotNull(skinnableNPCs);
|
Preconditions.checkNotNull(skinnableNPCs);
|
||||||
EntityPlayer[] entities = new EntityPlayer[skinnableNPCs.size()];
|
EntityPlayer[] entities = new EntityPlayer[skinnableNPCs.size()];
|
||||||
int i = 0;
|
int i = 0;
|
||||||
for (SkinnableEntity skinnable : skinnableNPCs) {
|
for (Player skinnable : skinnableNPCs) {
|
||||||
entities[i] = (EntityPlayer) skinnable;
|
entities[i] = (EntityPlayer) getHandle(skinnable);
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
NMSImpl.sendPacket(recipient,
|
NMSImpl.sendPacket(recipient,
|
||||||
new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.REMOVE_PLAYER, entities));
|
new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.REMOVE_PLAYER, entities));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void sendTabListRemove(Player recipient, Player listPlayer) {
|
|
||||||
Preconditions.checkNotNull(recipient);
|
|
||||||
Preconditions.checkNotNull(listPlayer);
|
|
||||||
EntityPlayer entity = ((CraftPlayer) listPlayer).getHandle();
|
|
||||||
NMSImpl.sendPacket(recipient,
|
|
||||||
new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.REMOVE_PLAYER, entity));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void sendTeamPacket(Player recipient, Team team, int mode) {
|
public void sendTeamPacket(Player recipient, Team team, int mode) {
|
||||||
Preconditions.checkNotNull(recipient);
|
Preconditions.checkNotNull(recipient);
|
||||||
|
|
|
@ -217,7 +217,7 @@ public class EntityHumanNPC extends EntityPlayer implements NPCHolder, Skinnable
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public IChatBaseComponent getPlayerListName() {
|
public IChatBaseComponent getPlayerListName() {
|
||||||
if (Setting.DISABLE_TABLIST.asBoolean())
|
if (npc != null && npc.shouldRemoveFromTabList())
|
||||||
return new ChatComponentText("");
|
return new ChatComponentText("");
|
||||||
return super.getPlayerListName();
|
return super.getPlayerListName();
|
||||||
}
|
}
|
||||||
|
|
|
@ -197,7 +197,6 @@ import net.citizensnpcs.npc.EntityControllers;
|
||||||
import net.citizensnpcs.npc.ai.MCNavigationStrategy.MCNavigator;
|
import net.citizensnpcs.npc.ai.MCNavigationStrategy.MCNavigator;
|
||||||
import net.citizensnpcs.npc.ai.MCTargetStrategy.TargetNavigator;
|
import net.citizensnpcs.npc.ai.MCTargetStrategy.TargetNavigator;
|
||||||
import net.citizensnpcs.npc.ai.NPCHolder;
|
import net.citizensnpcs.npc.ai.NPCHolder;
|
||||||
import net.citizensnpcs.npc.skin.SkinnableEntity;
|
|
||||||
import net.citizensnpcs.trait.RotationTrait;
|
import net.citizensnpcs.trait.RotationTrait;
|
||||||
import net.citizensnpcs.trait.versioned.BossBarTrait;
|
import net.citizensnpcs.trait.versioned.BossBarTrait;
|
||||||
import net.citizensnpcs.trait.versioned.EnderDragonTrait;
|
import net.citizensnpcs.trait.versioned.EnderDragonTrait;
|
||||||
|
@ -1226,28 +1225,19 @@ public class NMSImpl implements NMSBridge {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void sendTabListRemove(Player recipient, Collection<? extends SkinnableEntity> skinnableNPCs) {
|
public void sendTabListRemove(Player recipient, Collection<Player> skinnableNPCs) {
|
||||||
Preconditions.checkNotNull(recipient);
|
Preconditions.checkNotNull(recipient);
|
||||||
Preconditions.checkNotNull(skinnableNPCs);
|
Preconditions.checkNotNull(skinnableNPCs);
|
||||||
EntityPlayer[] entities = new EntityPlayer[skinnableNPCs.size()];
|
EntityPlayer[] entities = new EntityPlayer[skinnableNPCs.size()];
|
||||||
int i = 0;
|
int i = 0;
|
||||||
for (SkinnableEntity skinnable : skinnableNPCs) {
|
for (Player skinnable : skinnableNPCs) {
|
||||||
entities[i] = (EntityPlayer) skinnable;
|
entities[i] = (EntityPlayer) getHandle(skinnable);
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
NMSImpl.sendPacket(recipient,
|
NMSImpl.sendPacket(recipient,
|
||||||
new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.REMOVE_PLAYER, entities));
|
new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.REMOVE_PLAYER, entities));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void sendTabListRemove(Player recipient, Player listPlayer) {
|
|
||||||
Preconditions.checkNotNull(recipient);
|
|
||||||
Preconditions.checkNotNull(listPlayer);
|
|
||||||
EntityPlayer entity = ((CraftPlayer) listPlayer).getHandle();
|
|
||||||
NMSImpl.sendPacket(recipient,
|
|
||||||
new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.REMOVE_PLAYER, entity));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void sendTeamPacket(Player recipient, Team team, int mode) {
|
public void sendTeamPacket(Player recipient, Team team, int mode) {
|
||||||
Preconditions.checkNotNull(recipient);
|
Preconditions.checkNotNull(recipient);
|
||||||
|
|
|
@ -207,7 +207,7 @@ public class EntityHumanNPC extends EntityPlayer implements NPCHolder, Skinnable
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public IChatBaseComponent getPlayerListName() {
|
public IChatBaseComponent getPlayerListName() {
|
||||||
if (Setting.DISABLE_TABLIST.asBoolean())
|
if (npc != null && npc.shouldRemoveFromTabList())
|
||||||
return new ChatComponentText("");
|
return new ChatComponentText("");
|
||||||
return super.getPlayerListName();
|
return super.getPlayerListName();
|
||||||
}
|
}
|
||||||
|
|
|
@ -201,7 +201,6 @@ import net.citizensnpcs.npc.EntityControllers;
|
||||||
import net.citizensnpcs.npc.ai.MCNavigationStrategy.MCNavigator;
|
import net.citizensnpcs.npc.ai.MCNavigationStrategy.MCNavigator;
|
||||||
import net.citizensnpcs.npc.ai.MCTargetStrategy.TargetNavigator;
|
import net.citizensnpcs.npc.ai.MCTargetStrategy.TargetNavigator;
|
||||||
import net.citizensnpcs.npc.ai.NPCHolder;
|
import net.citizensnpcs.npc.ai.NPCHolder;
|
||||||
import net.citizensnpcs.npc.skin.SkinnableEntity;
|
|
||||||
import net.citizensnpcs.trait.RotationTrait;
|
import net.citizensnpcs.trait.RotationTrait;
|
||||||
import net.citizensnpcs.trait.versioned.BossBarTrait;
|
import net.citizensnpcs.trait.versioned.BossBarTrait;
|
||||||
import net.citizensnpcs.trait.versioned.CatTrait;
|
import net.citizensnpcs.trait.versioned.CatTrait;
|
||||||
|
@ -1244,28 +1243,19 @@ public class NMSImpl implements NMSBridge {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void sendTabListRemove(Player recipient, Collection<? extends SkinnableEntity> skinnableNPCs) {
|
public void sendTabListRemove(Player recipient, Collection<Player> skinnableNPCs) {
|
||||||
Preconditions.checkNotNull(recipient);
|
Preconditions.checkNotNull(recipient);
|
||||||
Preconditions.checkNotNull(skinnableNPCs);
|
Preconditions.checkNotNull(skinnableNPCs);
|
||||||
EntityPlayer[] entities = new EntityPlayer[skinnableNPCs.size()];
|
EntityPlayer[] entities = new EntityPlayer[skinnableNPCs.size()];
|
||||||
int i = 0;
|
int i = 0;
|
||||||
for (SkinnableEntity skinnable : skinnableNPCs) {
|
for (Player skinnable : skinnableNPCs) {
|
||||||
entities[i] = (EntityPlayer) skinnable;
|
entities[i] = (EntityPlayer) getHandle(skinnable);
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
NMSImpl.sendPacket(recipient,
|
NMSImpl.sendPacket(recipient,
|
||||||
new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.REMOVE_PLAYER, entities));
|
new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.REMOVE_PLAYER, entities));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void sendTabListRemove(Player recipient, Player listPlayer) {
|
|
||||||
Preconditions.checkNotNull(recipient);
|
|
||||||
Preconditions.checkNotNull(listPlayer);
|
|
||||||
EntityPlayer entity = ((CraftPlayer) listPlayer).getHandle();
|
|
||||||
NMSImpl.sendPacket(recipient,
|
|
||||||
new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.REMOVE_PLAYER, entity));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void sendTeamPacket(Player recipient, Team team, int mode) {
|
public void sendTeamPacket(Player recipient, Team team, int mode) {
|
||||||
Preconditions.checkNotNull(recipient);
|
Preconditions.checkNotNull(recipient);
|
||||||
|
|
|
@ -199,7 +199,7 @@ public class EntityHumanNPC extends EntityPlayer implements NPCHolder, Skinnable
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public IChatBaseComponent getPlayerListName() {
|
public IChatBaseComponent getPlayerListName() {
|
||||||
if (Setting.DISABLE_TABLIST.asBoolean())
|
if (npc != null && npc.shouldRemoveFromTabList())
|
||||||
return new ChatComponentText("");
|
return new ChatComponentText("");
|
||||||
return super.getPlayerListName();
|
return super.getPlayerListName();
|
||||||
}
|
}
|
||||||
|
|
|
@ -202,7 +202,6 @@ import net.citizensnpcs.npc.EntityControllers;
|
||||||
import net.citizensnpcs.npc.ai.MCNavigationStrategy.MCNavigator;
|
import net.citizensnpcs.npc.ai.MCNavigationStrategy.MCNavigator;
|
||||||
import net.citizensnpcs.npc.ai.MCTargetStrategy.TargetNavigator;
|
import net.citizensnpcs.npc.ai.MCTargetStrategy.TargetNavigator;
|
||||||
import net.citizensnpcs.npc.ai.NPCHolder;
|
import net.citizensnpcs.npc.ai.NPCHolder;
|
||||||
import net.citizensnpcs.npc.skin.SkinnableEntity;
|
|
||||||
import net.citizensnpcs.trait.RotationTrait;
|
import net.citizensnpcs.trait.RotationTrait;
|
||||||
import net.citizensnpcs.trait.versioned.BeeTrait;
|
import net.citizensnpcs.trait.versioned.BeeTrait;
|
||||||
import net.citizensnpcs.trait.versioned.BossBarTrait;
|
import net.citizensnpcs.trait.versioned.BossBarTrait;
|
||||||
|
@ -1261,28 +1260,19 @@ public class NMSImpl implements NMSBridge {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void sendTabListRemove(Player recipient, Collection<? extends SkinnableEntity> skinnableNPCs) {
|
public void sendTabListRemove(Player recipient, Collection<Player> skinnableNPCs) {
|
||||||
Preconditions.checkNotNull(recipient);
|
Preconditions.checkNotNull(recipient);
|
||||||
Preconditions.checkNotNull(skinnableNPCs);
|
Preconditions.checkNotNull(skinnableNPCs);
|
||||||
EntityPlayer[] entities = new EntityPlayer[skinnableNPCs.size()];
|
EntityPlayer[] entities = new EntityPlayer[skinnableNPCs.size()];
|
||||||
int i = 0;
|
int i = 0;
|
||||||
for (SkinnableEntity skinnable : skinnableNPCs) {
|
for (Player skinnable : skinnableNPCs) {
|
||||||
entities[i] = (EntityPlayer) skinnable;
|
entities[i] = (EntityPlayer) getHandle(skinnable);
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
NMSImpl.sendPacket(recipient,
|
NMSImpl.sendPacket(recipient,
|
||||||
new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.REMOVE_PLAYER, entities));
|
new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.REMOVE_PLAYER, entities));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void sendTabListRemove(Player recipient, Player listPlayer) {
|
|
||||||
Preconditions.checkNotNull(recipient);
|
|
||||||
Preconditions.checkNotNull(listPlayer);
|
|
||||||
EntityPlayer entity = ((CraftPlayer) listPlayer).getHandle();
|
|
||||||
NMSImpl.sendPacket(recipient,
|
|
||||||
new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.REMOVE_PLAYER, entity));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void sendTeamPacket(Player recipient, Team team, int mode) {
|
public void sendTeamPacket(Player recipient, Team team, int mode) {
|
||||||
Preconditions.checkNotNull(recipient);
|
Preconditions.checkNotNull(recipient);
|
||||||
|
|
|
@ -18,7 +18,6 @@ import com.google.common.collect.Maps;
|
||||||
import com.mojang.authlib.GameProfile;
|
import com.mojang.authlib.GameProfile;
|
||||||
import com.mojang.datafixers.util.Pair;
|
import com.mojang.datafixers.util.Pair;
|
||||||
|
|
||||||
import net.citizensnpcs.Settings.Setting;
|
|
||||||
import net.citizensnpcs.api.CitizensAPI;
|
import net.citizensnpcs.api.CitizensAPI;
|
||||||
import net.citizensnpcs.api.npc.NPC;
|
import net.citizensnpcs.api.npc.NPC;
|
||||||
import net.citizensnpcs.api.npc.NPC.NPCUpdate;
|
import net.citizensnpcs.api.npc.NPC.NPCUpdate;
|
||||||
|
@ -180,7 +179,7 @@ public class EntityHumanNPC extends EntityPlayer implements NPCHolder, Skinnable
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public IChatBaseComponent getPlayerListName() {
|
public IChatBaseComponent getPlayerListName() {
|
||||||
if (Setting.DISABLE_TABLIST.asBoolean())
|
if (npc != null && npc.shouldRemoveFromTabList())
|
||||||
return new ChatComponentText("");
|
return new ChatComponentText("");
|
||||||
return super.getPlayerListName();
|
return super.getPlayerListName();
|
||||||
}
|
}
|
||||||
|
|
|
@ -209,7 +209,6 @@ import net.citizensnpcs.npc.EntityControllers;
|
||||||
import net.citizensnpcs.npc.ai.MCNavigationStrategy.MCNavigator;
|
import net.citizensnpcs.npc.ai.MCNavigationStrategy.MCNavigator;
|
||||||
import net.citizensnpcs.npc.ai.MCTargetStrategy.TargetNavigator;
|
import net.citizensnpcs.npc.ai.MCTargetStrategy.TargetNavigator;
|
||||||
import net.citizensnpcs.npc.ai.NPCHolder;
|
import net.citizensnpcs.npc.ai.NPCHolder;
|
||||||
import net.citizensnpcs.npc.skin.SkinnableEntity;
|
|
||||||
import net.citizensnpcs.trait.RotationTrait;
|
import net.citizensnpcs.trait.RotationTrait;
|
||||||
import net.citizensnpcs.trait.versioned.BeeTrait;
|
import net.citizensnpcs.trait.versioned.BeeTrait;
|
||||||
import net.citizensnpcs.trait.versioned.BossBarTrait;
|
import net.citizensnpcs.trait.versioned.BossBarTrait;
|
||||||
|
@ -1297,28 +1296,19 @@ public class NMSImpl implements NMSBridge {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void sendTabListRemove(Player recipient, Collection<? extends SkinnableEntity> skinnableNPCs) {
|
public void sendTabListRemove(Player recipient, Collection<Player> skinnableNPCs) {
|
||||||
Preconditions.checkNotNull(recipient);
|
Preconditions.checkNotNull(recipient);
|
||||||
Preconditions.checkNotNull(skinnableNPCs);
|
Preconditions.checkNotNull(skinnableNPCs);
|
||||||
EntityPlayer[] entities = new EntityPlayer[skinnableNPCs.size()];
|
EntityPlayer[] entities = new EntityPlayer[skinnableNPCs.size()];
|
||||||
int i = 0;
|
int i = 0;
|
||||||
for (SkinnableEntity skinnable : skinnableNPCs) {
|
for (Player skinnable : skinnableNPCs) {
|
||||||
entities[i] = (EntityPlayer) skinnable;
|
entities[i] = (EntityPlayer) getHandle(skinnable);
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
NMSImpl.sendPacket(recipient,
|
NMSImpl.sendPacket(recipient,
|
||||||
new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.REMOVE_PLAYER, entities));
|
new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.REMOVE_PLAYER, entities));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void sendTabListRemove(Player recipient, Player listPlayer) {
|
|
||||||
Preconditions.checkNotNull(recipient);
|
|
||||||
Preconditions.checkNotNull(listPlayer);
|
|
||||||
EntityPlayer entity = ((CraftPlayer) listPlayer).getHandle();
|
|
||||||
NMSImpl.sendPacket(recipient,
|
|
||||||
new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.REMOVE_PLAYER, entity));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void sendTeamPacket(Player recipient, Team team, int mode) {
|
public void sendTeamPacket(Player recipient, Team team, int mode) {
|
||||||
Preconditions.checkNotNull(recipient);
|
Preconditions.checkNotNull(recipient);
|
||||||
|
|
|
@ -15,7 +15,6 @@ import org.bukkit.util.Vector;
|
||||||
|
|
||||||
import com.mojang.authlib.GameProfile;
|
import com.mojang.authlib.GameProfile;
|
||||||
|
|
||||||
import net.citizensnpcs.Settings.Setting;
|
|
||||||
import net.citizensnpcs.api.CitizensAPI;
|
import net.citizensnpcs.api.CitizensAPI;
|
||||||
import net.citizensnpcs.api.npc.NPC;
|
import net.citizensnpcs.api.npc.NPC;
|
||||||
import net.citizensnpcs.api.npc.NPC.NPCUpdate;
|
import net.citizensnpcs.api.npc.NPC.NPCUpdate;
|
||||||
|
@ -213,7 +212,7 @@ public class EntityHumanNPC extends ServerPlayer implements NPCHolder, Skinnable
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Component getTabListDisplayName() {
|
public Component getTabListDisplayName() {
|
||||||
if (Setting.DISABLE_TABLIST.asBoolean())
|
if (npc != null && npc.shouldRemoveFromTabList())
|
||||||
return new TextComponent("");
|
return new TextComponent("");
|
||||||
return super.getTabListDisplayName();
|
return super.getTabListDisplayName();
|
||||||
}
|
}
|
||||||
|
|
|
@ -210,7 +210,6 @@ import net.citizensnpcs.npc.EntityControllers;
|
||||||
import net.citizensnpcs.npc.ai.MCNavigationStrategy.MCNavigator;
|
import net.citizensnpcs.npc.ai.MCNavigationStrategy.MCNavigator;
|
||||||
import net.citizensnpcs.npc.ai.MCTargetStrategy.TargetNavigator;
|
import net.citizensnpcs.npc.ai.MCTargetStrategy.TargetNavigator;
|
||||||
import net.citizensnpcs.npc.ai.NPCHolder;
|
import net.citizensnpcs.npc.ai.NPCHolder;
|
||||||
import net.citizensnpcs.npc.skin.SkinnableEntity;
|
|
||||||
import net.citizensnpcs.trait.RotationTrait;
|
import net.citizensnpcs.trait.RotationTrait;
|
||||||
import net.citizensnpcs.trait.versioned.AxolotlTrait;
|
import net.citizensnpcs.trait.versioned.AxolotlTrait;
|
||||||
import net.citizensnpcs.trait.versioned.BeeTrait;
|
import net.citizensnpcs.trait.versioned.BeeTrait;
|
||||||
|
@ -1290,28 +1289,19 @@ public class NMSImpl implements NMSBridge {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void sendTabListRemove(Player recipient, Collection<? extends SkinnableEntity> skinnableNPCs) {
|
public void sendTabListRemove(Player recipient, Collection<Player> skinnableNPCs) {
|
||||||
Preconditions.checkNotNull(recipient);
|
Preconditions.checkNotNull(recipient);
|
||||||
Preconditions.checkNotNull(skinnableNPCs);
|
Preconditions.checkNotNull(skinnableNPCs);
|
||||||
ServerPlayer[] entities = new ServerPlayer[skinnableNPCs.size()];
|
ServerPlayer[] entities = new ServerPlayer[skinnableNPCs.size()];
|
||||||
int i = 0;
|
int i = 0;
|
||||||
for (SkinnableEntity skinnable : skinnableNPCs) {
|
for (Player skinnable : skinnableNPCs) {
|
||||||
entities[i] = (ServerPlayer) skinnable;
|
entities[i] = (ServerPlayer) getHandle(skinnable);
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
NMSImpl.sendPacket(recipient,
|
NMSImpl.sendPacket(recipient,
|
||||||
new ClientboundPlayerInfoPacket(ClientboundPlayerInfoPacket.Action.REMOVE_PLAYER, entities));
|
new ClientboundPlayerInfoPacket(ClientboundPlayerInfoPacket.Action.REMOVE_PLAYER, entities));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void sendTabListRemove(Player recipient, Player listPlayer) {
|
|
||||||
Preconditions.checkNotNull(recipient);
|
|
||||||
Preconditions.checkNotNull(listPlayer);
|
|
||||||
ServerPlayer entity = ((CraftPlayer) listPlayer).getHandle();
|
|
||||||
NMSImpl.sendPacket(recipient,
|
|
||||||
new ClientboundPlayerInfoPacket(ClientboundPlayerInfoPacket.Action.REMOVE_PLAYER, entity));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void sendTeamPacket(Player recipient, Team team, int mode) {
|
public void sendTeamPacket(Player recipient, Team team, int mode) {
|
||||||
Preconditions.checkNotNull(recipient);
|
Preconditions.checkNotNull(recipient);
|
||||||
|
|
|
@ -31,7 +31,7 @@ public class PlayerlistTracker extends ChunkMap.TrackedEntity {
|
||||||
map.super(entity, i, j, flag);
|
map.super(entity, i, j, flag);
|
||||||
this.tracker = entity;
|
this.tracker = entity;
|
||||||
try {
|
try {
|
||||||
Set<ServerPlayerConnection> set = (Set<ServerPlayerConnection>) TRACKING_SET_GETTER.invoke(this);
|
Set<ServerPlayerConnection> set = seenBy;
|
||||||
TRACKING_SET_SETTER.invoke(this, new ForwardingSet<ServerPlayerConnection>() {
|
TRACKING_SET_SETTER.invoke(this, new ForwardingSet<ServerPlayerConnection>() {
|
||||||
@Override
|
@Override
|
||||||
public boolean add(ServerPlayerConnection conn) {
|
public boolean add(ServerPlayerConnection conn) {
|
||||||
|
@ -153,6 +153,5 @@ public class PlayerlistTracker extends ChunkMap.TrackedEntity {
|
||||||
private static final MethodHandle TRACKER_ENTRY = NMS.getFirstGetter(TrackedEntity.class, ServerEntity.class);
|
private static final MethodHandle TRACKER_ENTRY = NMS.getFirstGetter(TrackedEntity.class, ServerEntity.class);
|
||||||
private static final MethodHandle TRACKING_RANGE = NMS.getFirstGetter(TrackedEntity.class, int.class);
|
private static final MethodHandle TRACKING_RANGE = NMS.getFirstGetter(TrackedEntity.class, int.class);
|
||||||
private static final MethodHandle TRACKING_RANGE_SETTER = NMS.getFirstFinalSetter(TrackedEntity.class, int.class);
|
private static final MethodHandle TRACKING_RANGE_SETTER = NMS.getFirstFinalSetter(TrackedEntity.class, int.class);
|
||||||
private static final MethodHandle TRACKING_SET_GETTER = NMS.getFirstGetter(TrackedEntity.class, Set.class);
|
|
||||||
private static final MethodHandle TRACKING_SET_SETTER = NMS.getFirstFinalSetter(TrackedEntity.class, Set.class);
|
private static final MethodHandle TRACKING_SET_SETTER = NMS.getFirstFinalSetter(TrackedEntity.class, Set.class);
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,7 +16,6 @@ import org.bukkit.util.Vector;
|
||||||
|
|
||||||
import com.mojang.authlib.GameProfile;
|
import com.mojang.authlib.GameProfile;
|
||||||
|
|
||||||
import net.citizensnpcs.Settings.Setting;
|
|
||||||
import net.citizensnpcs.api.CitizensAPI;
|
import net.citizensnpcs.api.CitizensAPI;
|
||||||
import net.citizensnpcs.api.npc.NPC;
|
import net.citizensnpcs.api.npc.NPC;
|
||||||
import net.citizensnpcs.api.npc.NPC.NPCUpdate;
|
import net.citizensnpcs.api.npc.NPC.NPCUpdate;
|
||||||
|
@ -214,7 +213,7 @@ public class EntityHumanNPC extends ServerPlayer implements NPCHolder, Skinnable
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Component getTabListDisplayName() {
|
public Component getTabListDisplayName() {
|
||||||
if (Setting.DISABLE_TABLIST.asBoolean())
|
if (npc != null && npc.shouldRemoveFromTabList())
|
||||||
return new TextComponent("");
|
return new TextComponent("");
|
||||||
return super.getTabListDisplayName();
|
return super.getTabListDisplayName();
|
||||||
}
|
}
|
||||||
|
|
|
@ -211,7 +211,6 @@ import net.citizensnpcs.npc.EntityControllers;
|
||||||
import net.citizensnpcs.npc.ai.MCNavigationStrategy.MCNavigator;
|
import net.citizensnpcs.npc.ai.MCNavigationStrategy.MCNavigator;
|
||||||
import net.citizensnpcs.npc.ai.MCTargetStrategy.TargetNavigator;
|
import net.citizensnpcs.npc.ai.MCTargetStrategy.TargetNavigator;
|
||||||
import net.citizensnpcs.npc.ai.NPCHolder;
|
import net.citizensnpcs.npc.ai.NPCHolder;
|
||||||
import net.citizensnpcs.npc.skin.SkinnableEntity;
|
|
||||||
import net.citizensnpcs.trait.RotationTrait;
|
import net.citizensnpcs.trait.RotationTrait;
|
||||||
import net.citizensnpcs.trait.versioned.AxolotlTrait;
|
import net.citizensnpcs.trait.versioned.AxolotlTrait;
|
||||||
import net.citizensnpcs.trait.versioned.BeeTrait;
|
import net.citizensnpcs.trait.versioned.BeeTrait;
|
||||||
|
@ -1299,28 +1298,19 @@ public class NMSImpl implements NMSBridge {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void sendTabListRemove(Player recipient, Collection<? extends SkinnableEntity> skinnableNPCs) {
|
public void sendTabListRemove(Player recipient, Collection<Player> skinnableNPCs) {
|
||||||
Preconditions.checkNotNull(recipient);
|
Preconditions.checkNotNull(recipient);
|
||||||
Preconditions.checkNotNull(skinnableNPCs);
|
Preconditions.checkNotNull(skinnableNPCs);
|
||||||
ServerPlayer[] entities = new ServerPlayer[skinnableNPCs.size()];
|
ServerPlayer[] entities = new ServerPlayer[skinnableNPCs.size()];
|
||||||
int i = 0;
|
int i = 0;
|
||||||
for (SkinnableEntity skinnable : skinnableNPCs) {
|
for (Player skinnable : skinnableNPCs) {
|
||||||
entities[i] = (ServerPlayer) skinnable;
|
entities[i] = (ServerPlayer) getHandle(skinnable);
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
NMSImpl.sendPacket(recipient,
|
NMSImpl.sendPacket(recipient,
|
||||||
new ClientboundPlayerInfoPacket(ClientboundPlayerInfoPacket.Action.REMOVE_PLAYER, entities));
|
new ClientboundPlayerInfoPacket(ClientboundPlayerInfoPacket.Action.REMOVE_PLAYER, entities));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void sendTabListRemove(Player recipient, Player listPlayer) {
|
|
||||||
Preconditions.checkNotNull(recipient);
|
|
||||||
Preconditions.checkNotNull(listPlayer);
|
|
||||||
ServerPlayer entity = ((CraftPlayer) listPlayer).getHandle();
|
|
||||||
NMSImpl.sendPacket(recipient,
|
|
||||||
new ClientboundPlayerInfoPacket(ClientboundPlayerInfoPacket.Action.REMOVE_PLAYER, entity));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void sendTeamPacket(Player recipient, Team team, int mode) {
|
public void sendTeamPacket(Player recipient, Team team, int mode) {
|
||||||
Preconditions.checkNotNull(recipient);
|
Preconditions.checkNotNull(recipient);
|
||||||
|
|
|
@ -31,7 +31,7 @@ public class PlayerlistTracker extends ChunkMap.TrackedEntity {
|
||||||
map.super(entity, i, j, flag);
|
map.super(entity, i, j, flag);
|
||||||
this.tracker = entity;
|
this.tracker = entity;
|
||||||
try {
|
try {
|
||||||
Set<ServerPlayerConnection> set = (Set<ServerPlayerConnection>) TRACKING_SET_GETTER.invoke(this);
|
Set<ServerPlayerConnection> set = seenBy;
|
||||||
TRACKING_SET_SETTER.invoke(this, new ForwardingSet<ServerPlayerConnection>() {
|
TRACKING_SET_SETTER.invoke(this, new ForwardingSet<ServerPlayerConnection>() {
|
||||||
@Override
|
@Override
|
||||||
public boolean add(ServerPlayerConnection conn) {
|
public boolean add(ServerPlayerConnection conn) {
|
||||||
|
@ -153,6 +153,5 @@ public class PlayerlistTracker extends ChunkMap.TrackedEntity {
|
||||||
private static final MethodHandle TRACKER_ENTRY = NMS.getFirstGetter(TrackedEntity.class, ServerEntity.class);
|
private static final MethodHandle TRACKER_ENTRY = NMS.getFirstGetter(TrackedEntity.class, ServerEntity.class);
|
||||||
private static final MethodHandle TRACKING_RANGE = NMS.getFirstGetter(TrackedEntity.class, int.class);
|
private static final MethodHandle TRACKING_RANGE = NMS.getFirstGetter(TrackedEntity.class, int.class);
|
||||||
private static final MethodHandle TRACKING_RANGE_SETTER = NMS.getFirstFinalSetter(TrackedEntity.class, int.class);
|
private static final MethodHandle TRACKING_RANGE_SETTER = NMS.getFirstFinalSetter(TrackedEntity.class, int.class);
|
||||||
private static final MethodHandle TRACKING_SET_GETTER = NMS.getFirstGetter(TrackedEntity.class, Set.class);
|
|
||||||
private static final MethodHandle TRACKING_SET_SETTER = NMS.getFirstFinalSetter(TrackedEntity.class, Set.class);
|
private static final MethodHandle TRACKING_SET_SETTER = NMS.getFirstFinalSetter(TrackedEntity.class, Set.class);
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,7 +15,6 @@ import org.bukkit.util.Vector;
|
||||||
|
|
||||||
import com.mojang.authlib.GameProfile;
|
import com.mojang.authlib.GameProfile;
|
||||||
|
|
||||||
import net.citizensnpcs.Settings.Setting;
|
|
||||||
import net.citizensnpcs.api.CitizensAPI;
|
import net.citizensnpcs.api.CitizensAPI;
|
||||||
import net.citizensnpcs.api.npc.NPC;
|
import net.citizensnpcs.api.npc.NPC;
|
||||||
import net.citizensnpcs.api.npc.NPC.NPCUpdate;
|
import net.citizensnpcs.api.npc.NPC.NPCUpdate;
|
||||||
|
@ -208,7 +207,7 @@ public class EntityHumanNPC extends ServerPlayer implements NPCHolder, Skinnable
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Component getTabListDisplayName() {
|
public Component getTabListDisplayName() {
|
||||||
if (Setting.DISABLE_TABLIST.asBoolean())
|
if (npc != null && npc.shouldRemoveFromTabList())
|
||||||
return MutableComponent.create(new LiteralContents(""));
|
return MutableComponent.create(new LiteralContents(""));
|
||||||
return super.getTabListDisplayName();
|
return super.getTabListDisplayName();
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,7 +31,7 @@ public class CitizensEntityTracker extends ChunkMap.TrackedEntity {
|
||||||
map.super(entity, i, j, flag);
|
map.super(entity, i, j, flag);
|
||||||
this.tracker = entity;
|
this.tracker = entity;
|
||||||
try {
|
try {
|
||||||
Set<ServerPlayerConnection> set = (Set<ServerPlayerConnection>) TRACKING_SET_GETTER.invoke(this);
|
Set<ServerPlayerConnection> set = seenBy;
|
||||||
TRACKING_SET_SETTER.invoke(this, new ForwardingSet<ServerPlayerConnection>() {
|
TRACKING_SET_SETTER.invoke(this, new ForwardingSet<ServerPlayerConnection>() {
|
||||||
@Override
|
@Override
|
||||||
public boolean add(ServerPlayerConnection conn) {
|
public boolean add(ServerPlayerConnection conn) {
|
||||||
|
@ -153,6 +153,5 @@ public class CitizensEntityTracker extends ChunkMap.TrackedEntity {
|
||||||
private static final MethodHandle TRACKER_ENTRY = NMS.getFirstGetter(TrackedEntity.class, ServerEntity.class);
|
private static final MethodHandle TRACKER_ENTRY = NMS.getFirstGetter(TrackedEntity.class, ServerEntity.class);
|
||||||
private static final MethodHandle TRACKING_RANGE = NMS.getFirstGetter(TrackedEntity.class, int.class);
|
private static final MethodHandle TRACKING_RANGE = NMS.getFirstGetter(TrackedEntity.class, int.class);
|
||||||
private static final MethodHandle TRACKING_RANGE_SETTER = NMS.getFirstFinalSetter(TrackedEntity.class, int.class);
|
private static final MethodHandle TRACKING_RANGE_SETTER = NMS.getFirstFinalSetter(TrackedEntity.class, int.class);
|
||||||
private static final MethodHandle TRACKING_SET_GETTER = NMS.getFirstGetter(TrackedEntity.class, Set.class);
|
|
||||||
private static final MethodHandle TRACKING_SET_SETTER = NMS.getFirstFinalSetter(TrackedEntity.class, Set.class);
|
private static final MethodHandle TRACKING_SET_SETTER = NMS.getFirstFinalSetter(TrackedEntity.class, Set.class);
|
||||||
}
|
}
|
||||||
|
|
|
@ -227,7 +227,6 @@ import net.citizensnpcs.npc.EntityControllers;
|
||||||
import net.citizensnpcs.npc.ai.MCNavigationStrategy.MCNavigator;
|
import net.citizensnpcs.npc.ai.MCNavigationStrategy.MCNavigator;
|
||||||
import net.citizensnpcs.npc.ai.MCTargetStrategy.TargetNavigator;
|
import net.citizensnpcs.npc.ai.MCTargetStrategy.TargetNavigator;
|
||||||
import net.citizensnpcs.npc.ai.NPCHolder;
|
import net.citizensnpcs.npc.ai.NPCHolder;
|
||||||
import net.citizensnpcs.npc.skin.SkinnableEntity;
|
|
||||||
import net.citizensnpcs.trait.MirrorTrait;
|
import net.citizensnpcs.trait.MirrorTrait;
|
||||||
import net.citizensnpcs.trait.RotationTrait;
|
import net.citizensnpcs.trait.RotationTrait;
|
||||||
import net.citizensnpcs.trait.versioned.AllayTrait;
|
import net.citizensnpcs.trait.versioned.AllayTrait;
|
||||||
|
@ -1204,19 +1203,19 @@ public class NMSImpl implements NMSBridge {
|
||||||
GameProfile playerProfile = null;
|
GameProfile playerProfile = null;
|
||||||
for (int i = 0; i < list.size(); i++) {
|
for (int i = 0; i < list.size(); i++) {
|
||||||
ClientboundPlayerInfoUpdatePacket.Entry npcInfo = list.get(i);
|
ClientboundPlayerInfoUpdatePacket.Entry npcInfo = list.get(i);
|
||||||
if (npcInfo == null) {
|
if (npcInfo == null)
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
MirrorTrait trait = mirrorTraits.apply(npcInfo.profileId());
|
MirrorTrait trait = mirrorTraits.apply(npcInfo.profileId());
|
||||||
if (trait == null || !trait.isMirroring(player)) {
|
if (trait == null || !trait.isMirroring(player))
|
||||||
continue;
|
continue;
|
||||||
}
|
boolean disableTablist = trait.getNPC().shouldRemoveFromTabList();
|
||||||
if (Setting.DISABLE_TABLIST.asBoolean() != npcInfo.listed()) {
|
|
||||||
|
if (disableTablist != npcInfo.listed()) {
|
||||||
list.set(i,
|
list.set(i,
|
||||||
new ClientboundPlayerInfoUpdatePacket.Entry(npcInfo.profileId(), npcInfo.profile(),
|
new ClientboundPlayerInfoUpdatePacket.Entry(npcInfo.profileId(), npcInfo.profile(),
|
||||||
!Setting.DISABLE_TABLIST.asBoolean(), npcInfo.latency(), npcInfo.gameMode(),
|
!disableTablist, npcInfo.latency(), npcInfo.gameMode(),
|
||||||
!Setting.DISABLE_TABLIST.asBoolean() ? npcInfo.displayName() : Component.empty(),
|
!disableTablist ? npcInfo.displayName() : Component.empty(), npcInfo.chatSession()));
|
||||||
npcInfo.chatSession()));
|
|
||||||
changed = true;
|
changed = true;
|
||||||
}
|
}
|
||||||
if (playerProfile == null) {
|
if (playerProfile == null) {
|
||||||
|
@ -1224,16 +1223,16 @@ public class NMSImpl implements NMSBridge {
|
||||||
}
|
}
|
||||||
if (trait.mirrorName()) {
|
if (trait.mirrorName()) {
|
||||||
list.set(i,
|
list.set(i,
|
||||||
new ClientboundPlayerInfoUpdatePacket.Entry(npcInfo.profileId(), playerProfile,
|
new ClientboundPlayerInfoUpdatePacket.Entry(npcInfo.profileId(), playerProfile, !disableTablist,
|
||||||
!Setting.DISABLE_TABLIST.asBoolean(), npcInfo.latency(), npcInfo.gameMode(),
|
npcInfo.latency(), npcInfo.gameMode(), Component.literal(playerProfile.getName()),
|
||||||
Component.literal(playerProfile.getName()), npcInfo.chatSession()));
|
npcInfo.chatSession()));
|
||||||
changed = true;
|
changed = true;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
Collection<Property> textures = playerProfile.getProperties().get("textures");
|
Collection<Property> textures = playerProfile.getProperties().get("textures");
|
||||||
if (textures == null || textures.size() == 0) {
|
if (textures == null || textures.size() == 0)
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
npcInfo.profile().getProperties().clear();
|
npcInfo.profile().getProperties().clear();
|
||||||
for (String key : playerProfile.getProperties().keySet()) {
|
for (String key : playerProfile.getProperties().keySet()) {
|
||||||
npcInfo.profile().getProperties().putAll(key, playerProfile.getProperties().get(key));
|
npcInfo.profile().getProperties().putAll(key, playerProfile.getProperties().get(key));
|
||||||
|
@ -1392,9 +1391,7 @@ public class NMSImpl implements NMSBridge {
|
||||||
ServerPlayer from = ((CraftPlayer) listPlayer).getHandle();
|
ServerPlayer from = ((CraftPlayer) listPlayer).getHandle();
|
||||||
ClientboundPlayerInfoUpdatePacket packet = ClientboundPlayerInfoUpdatePacket
|
ClientboundPlayerInfoUpdatePacket packet = ClientboundPlayerInfoUpdatePacket
|
||||||
.createPlayerInitializing(Arrays.asList(from));
|
.createPlayerInitializing(Arrays.asList(from));
|
||||||
boolean list = from instanceof NPCHolder
|
boolean list = from instanceof NPCHolder ? !((NPCHolder) from).getNPC().shouldRemoveFromTabList() : true;
|
||||||
? !((NPCHolder) from).getNPC().data().get("removefromtablist", Setting.DISABLE_TABLIST.asBoolean())
|
|
||||||
: false;
|
|
||||||
ClientboundPlayerInfoUpdatePacket.Entry entry = new ClientboundPlayerInfoUpdatePacket.Entry(from.getUUID(),
|
ClientboundPlayerInfoUpdatePacket.Entry entry = new ClientboundPlayerInfoUpdatePacket.Entry(from.getUUID(),
|
||||||
from.getGameProfile(), list, from.latency, from.gameMode.getGameModeForPlayer(),
|
from.getGameProfile(), list, from.latency, from.gameMode.getGameModeForPlayer(),
|
||||||
list ? from.getTabListDisplayName() : Component.empty(),
|
list ? from.getTabListDisplayName() : Component.empty(),
|
||||||
|
@ -1409,24 +1406,11 @@ public class NMSImpl implements NMSBridge {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void sendTabListRemove(Player recipient, Collection<? extends SkinnableEntity> skinnableNPCs) {
|
public void sendTabListRemove(Player recipient, Collection<Player> skinnableNPCs) {
|
||||||
Preconditions.checkNotNull(recipient);
|
Preconditions.checkNotNull(recipient);
|
||||||
Preconditions.checkNotNull(skinnableNPCs);
|
Preconditions.checkNotNull(skinnableNPCs);
|
||||||
ServerPlayer[] entities = new ServerPlayer[skinnableNPCs.size()];
|
|
||||||
int i = 0;
|
|
||||||
for (SkinnableEntity skinnable : skinnableNPCs) {
|
|
||||||
entities[i] = (ServerPlayer) skinnable;
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
sendPacket(recipient, new ClientboundPlayerInfoRemovePacket(
|
sendPacket(recipient, new ClientboundPlayerInfoRemovePacket(
|
||||||
skinnableNPCs.stream().map(e -> ((ServerPlayer) e).getUUID()).collect(Collectors.toList())));
|
skinnableNPCs.stream().map(e -> e.getUniqueId()).collect(Collectors.toList())));
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void sendTabListRemove(Player recipient, Player listPlayer) {
|
|
||||||
Preconditions.checkNotNull(recipient);
|
|
||||||
Preconditions.checkNotNull(listPlayer);
|
|
||||||
sendPacket(recipient, new ClientboundPlayerInfoRemovePacket(Arrays.asList(getHandle(listPlayer).getUUID())));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -14,7 +14,6 @@ import org.bukkit.util.Vector;
|
||||||
|
|
||||||
import com.mojang.authlib.GameProfile;
|
import com.mojang.authlib.GameProfile;
|
||||||
|
|
||||||
import net.citizensnpcs.Settings.Setting;
|
|
||||||
import net.citizensnpcs.api.CitizensAPI;
|
import net.citizensnpcs.api.CitizensAPI;
|
||||||
import net.citizensnpcs.api.npc.NPC;
|
import net.citizensnpcs.api.npc.NPC;
|
||||||
import net.citizensnpcs.api.npc.NPC.NPCUpdate;
|
import net.citizensnpcs.api.npc.NPC.NPCUpdate;
|
||||||
|
@ -211,7 +210,7 @@ public class EntityHumanNPC extends ServerPlayer implements NPCHolder, Skinnable
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Component getTabListDisplayName() {
|
public Component getTabListDisplayName() {
|
||||||
if (Setting.DISABLE_TABLIST.asBoolean())
|
if (npc != null && npc.shouldRemoveFromTabList())
|
||||||
return MutableComponent.create(new LiteralContents(""));
|
return MutableComponent.create(new LiteralContents(""));
|
||||||
return super.getTabListDisplayName();
|
return super.getTabListDisplayName();
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,7 +31,7 @@ public class CitizensEntityTracker extends ChunkMap.TrackedEntity {
|
||||||
map.super(entity, i, j, flag);
|
map.super(entity, i, j, flag);
|
||||||
this.tracker = entity;
|
this.tracker = entity;
|
||||||
try {
|
try {
|
||||||
Set<ServerPlayerConnection> set = (Set<ServerPlayerConnection>) TRACKING_SET_GETTER.invoke(this);
|
Set<ServerPlayerConnection> set = seenBy;
|
||||||
TRACKING_SET_SETTER.invoke(this, new ForwardingSet<ServerPlayerConnection>() {
|
TRACKING_SET_SETTER.invoke(this, new ForwardingSet<ServerPlayerConnection>() {
|
||||||
@Override
|
@Override
|
||||||
public boolean add(ServerPlayerConnection conn) {
|
public boolean add(ServerPlayerConnection conn) {
|
||||||
|
@ -153,7 +153,6 @@ public class CitizensEntityTracker extends ChunkMap.TrackedEntity {
|
||||||
private static final MethodHandle TRACKER_ENTRY = NMS.getFirstGetter(TrackedEntity.class, ServerEntity.class);
|
private static final MethodHandle TRACKER_ENTRY = NMS.getFirstGetter(TrackedEntity.class, ServerEntity.class);
|
||||||
private static final MethodHandle TRACKING_RANGE = NMS.getFirstGetter(TrackedEntity.class, int.class);
|
private static final MethodHandle TRACKING_RANGE = NMS.getFirstGetter(TrackedEntity.class, int.class);
|
||||||
private static final MethodHandle TRACKING_RANGE_SETTER = NMS.getFirstFinalSetter(TrackedEntity.class, int.class);
|
private static final MethodHandle TRACKING_RANGE_SETTER = NMS.getFirstFinalSetter(TrackedEntity.class, int.class);
|
||||||
private static final MethodHandle TRACKING_SET_GETTER = NMS.getFirstGetter(TrackedEntity.class, Set.class);
|
|
||||||
private static final MethodHandle TRACKING_SET_SETTER = NMS.getFirstFinalSetter(TrackedEntity.class, Set.class);
|
private static final MethodHandle TRACKING_SET_SETTER = NMS.getFirstFinalSetter(TrackedEntity.class, Set.class);
|
||||||
private static final MethodHandle UPDATE_INTERVAL = NMS.getGetter(ServerEntity.class, "h");
|
private static final MethodHandle UPDATE_INTERVAL = NMS.getGetter(ServerEntity.class, "h");
|
||||||
}
|
}
|
||||||
|
|
|
@ -219,7 +219,6 @@ import net.citizensnpcs.npc.EntityControllers;
|
||||||
import net.citizensnpcs.npc.ai.MCNavigationStrategy.MCNavigator;
|
import net.citizensnpcs.npc.ai.MCNavigationStrategy.MCNavigator;
|
||||||
import net.citizensnpcs.npc.ai.MCTargetStrategy.TargetNavigator;
|
import net.citizensnpcs.npc.ai.MCTargetStrategy.TargetNavigator;
|
||||||
import net.citizensnpcs.npc.ai.NPCHolder;
|
import net.citizensnpcs.npc.ai.NPCHolder;
|
||||||
import net.citizensnpcs.npc.skin.SkinnableEntity;
|
|
||||||
import net.citizensnpcs.trait.MirrorTrait;
|
import net.citizensnpcs.trait.MirrorTrait;
|
||||||
import net.citizensnpcs.trait.RotationTrait;
|
import net.citizensnpcs.trait.RotationTrait;
|
||||||
import net.citizensnpcs.trait.versioned.AllayTrait;
|
import net.citizensnpcs.trait.versioned.AllayTrait;
|
||||||
|
@ -1175,19 +1174,20 @@ public class NMSImpl implements NMSBridge {
|
||||||
GameProfile playerProfile = null;
|
GameProfile playerProfile = null;
|
||||||
for (int i = 0; i < list.size(); i++) {
|
for (int i = 0; i < list.size(); i++) {
|
||||||
ClientboundPlayerInfoUpdatePacket.Entry npcInfo = list.get(i);
|
ClientboundPlayerInfoUpdatePacket.Entry npcInfo = list.get(i);
|
||||||
if (npcInfo == null) {
|
if (npcInfo == null)
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
MirrorTrait trait = mirrorTraits.apply(npcInfo.profileId());
|
MirrorTrait trait = mirrorTraits.apply(npcInfo.profileId());
|
||||||
if (trait == null || !trait.isMirroring(player)) {
|
if (trait == null || !trait.isMirroring(player))
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
if (Setting.DISABLE_TABLIST.asBoolean() != npcInfo.listed()) {
|
boolean disableTablist = trait.getNPC().shouldRemoveFromTabList();
|
||||||
|
|
||||||
|
if (disableTablist != npcInfo.listed()) {
|
||||||
list.set(i,
|
list.set(i,
|
||||||
new ClientboundPlayerInfoUpdatePacket.Entry(npcInfo.profileId(), npcInfo.profile(),
|
new ClientboundPlayerInfoUpdatePacket.Entry(npcInfo.profileId(), npcInfo.profile(),
|
||||||
!Setting.DISABLE_TABLIST.asBoolean(), npcInfo.latency(), npcInfo.gameMode(),
|
!disableTablist, npcInfo.latency(), npcInfo.gameMode(),
|
||||||
!Setting.DISABLE_TABLIST.asBoolean() ? npcInfo.displayName() : Component.empty(),
|
!disableTablist ? npcInfo.displayName() : Component.empty(), npcInfo.chatSession()));
|
||||||
npcInfo.chatSession()));
|
|
||||||
changed = true;
|
changed = true;
|
||||||
}
|
}
|
||||||
if (playerProfile == null) {
|
if (playerProfile == null) {
|
||||||
|
@ -1195,16 +1195,16 @@ public class NMSImpl implements NMSBridge {
|
||||||
}
|
}
|
||||||
if (trait.mirrorName()) {
|
if (trait.mirrorName()) {
|
||||||
list.set(i,
|
list.set(i,
|
||||||
new ClientboundPlayerInfoUpdatePacket.Entry(npcInfo.profileId(), playerProfile,
|
new ClientboundPlayerInfoUpdatePacket.Entry(npcInfo.profileId(), playerProfile, !disableTablist,
|
||||||
!Setting.DISABLE_TABLIST.asBoolean(), npcInfo.latency(), npcInfo.gameMode(),
|
npcInfo.latency(), npcInfo.gameMode(), Component.literal(playerProfile.getName()),
|
||||||
Component.literal(playerProfile.getName()), npcInfo.chatSession()));
|
npcInfo.chatSession()));
|
||||||
changed = true;
|
changed = true;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
Collection<Property> textures = playerProfile.getProperties().get("textures");
|
Collection<Property> textures = playerProfile.getProperties().get("textures");
|
||||||
if (textures == null || textures.size() == 0) {
|
if (textures == null || textures.size() == 0)
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
npcInfo.profile().getProperties().clear();
|
npcInfo.profile().getProperties().clear();
|
||||||
for (String key : playerProfile.getProperties().keySet()) {
|
for (String key : playerProfile.getProperties().keySet()) {
|
||||||
npcInfo.profile().getProperties().putAll(key, playerProfile.getProperties().get(key));
|
npcInfo.profile().getProperties().putAll(key, playerProfile.getProperties().get(key));
|
||||||
|
@ -1363,9 +1363,7 @@ public class NMSImpl implements NMSBridge {
|
||||||
ServerPlayer from = ((CraftPlayer) listPlayer).getHandle();
|
ServerPlayer from = ((CraftPlayer) listPlayer).getHandle();
|
||||||
ClientboundPlayerInfoUpdatePacket packet = ClientboundPlayerInfoUpdatePacket
|
ClientboundPlayerInfoUpdatePacket packet = ClientboundPlayerInfoUpdatePacket
|
||||||
.createPlayerInitializing(Arrays.asList(from));
|
.createPlayerInitializing(Arrays.asList(from));
|
||||||
boolean list = from instanceof NPCHolder
|
boolean list = from instanceof NPCHolder ? !((NPCHolder) from).getNPC().shouldRemoveFromTabList() : true;
|
||||||
? !((NPCHolder) from).getNPC().data().get("removefromtablist", Setting.DISABLE_TABLIST.asBoolean())
|
|
||||||
: false;
|
|
||||||
ClientboundPlayerInfoUpdatePacket.Entry entry = new ClientboundPlayerInfoUpdatePacket.Entry(from.getUUID(),
|
ClientboundPlayerInfoUpdatePacket.Entry entry = new ClientboundPlayerInfoUpdatePacket.Entry(from.getUUID(),
|
||||||
from.getGameProfile(), list, from.connection.latency(), from.gameMode.getGameModeForPlayer(),
|
from.getGameProfile(), list, from.connection.latency(), from.gameMode.getGameModeForPlayer(),
|
||||||
list ? from.getTabListDisplayName() : Component.empty(),
|
list ? from.getTabListDisplayName() : Component.empty(),
|
||||||
|
@ -1380,24 +1378,11 @@ public class NMSImpl implements NMSBridge {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void sendTabListRemove(Player recipient, Collection<? extends SkinnableEntity> skinnableNPCs) {
|
public void sendTabListRemove(Player recipient, Collection<Player> players) {
|
||||||
Preconditions.checkNotNull(recipient);
|
Preconditions.checkNotNull(recipient);
|
||||||
Preconditions.checkNotNull(skinnableNPCs);
|
Preconditions.checkNotNull(players);
|
||||||
ServerPlayer[] entities = new ServerPlayer[skinnableNPCs.size()];
|
|
||||||
int i = 0;
|
|
||||||
for (SkinnableEntity skinnable : skinnableNPCs) {
|
|
||||||
entities[i] = (ServerPlayer) skinnable;
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
sendPacket(recipient, new ClientboundPlayerInfoRemovePacket(
|
sendPacket(recipient, new ClientboundPlayerInfoRemovePacket(
|
||||||
skinnableNPCs.stream().map(e -> ((ServerPlayer) e).getUUID()).collect(Collectors.toList())));
|
players.stream().map(e -> e.getUniqueId()).collect(Collectors.toList())));
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void sendTabListRemove(Player recipient, Player listPlayer) {
|
|
||||||
Preconditions.checkNotNull(recipient);
|
|
||||||
Preconditions.checkNotNull(listPlayer);
|
|
||||||
sendPacket(recipient, new ClientboundPlayerInfoRemovePacket(Arrays.asList(getHandle(listPlayer).getUUID())));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -159,7 +159,6 @@ import net.citizensnpcs.npc.EntityControllers;
|
||||||
import net.citizensnpcs.npc.ai.MCNavigationStrategy.MCNavigator;
|
import net.citizensnpcs.npc.ai.MCNavigationStrategy.MCNavigator;
|
||||||
import net.citizensnpcs.npc.ai.MCTargetStrategy.TargetNavigator;
|
import net.citizensnpcs.npc.ai.MCTargetStrategy.TargetNavigator;
|
||||||
import net.citizensnpcs.npc.ai.NPCHolder;
|
import net.citizensnpcs.npc.ai.NPCHolder;
|
||||||
import net.citizensnpcs.npc.skin.SkinnableEntity;
|
|
||||||
import net.citizensnpcs.trait.RotationTrait;
|
import net.citizensnpcs.trait.RotationTrait;
|
||||||
import net.citizensnpcs.util.EmptyChannel;
|
import net.citizensnpcs.util.EmptyChannel;
|
||||||
import net.citizensnpcs.util.EntityPacketTracker;
|
import net.citizensnpcs.util.EntityPacketTracker;
|
||||||
|
@ -1047,28 +1046,19 @@ public class NMSImpl implements NMSBridge {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void sendTabListRemove(Player recipient, Collection<? extends SkinnableEntity> skinnableNPCs) {
|
public void sendTabListRemove(Player recipient, Collection<Player> skinnableNPCs) {
|
||||||
Preconditions.checkNotNull(recipient);
|
Preconditions.checkNotNull(recipient);
|
||||||
Preconditions.checkNotNull(skinnableNPCs);
|
Preconditions.checkNotNull(skinnableNPCs);
|
||||||
EntityPlayer[] entities = new EntityPlayer[skinnableNPCs.size()];
|
EntityPlayer[] entities = new EntityPlayer[skinnableNPCs.size()];
|
||||||
int i = 0;
|
int i = 0;
|
||||||
for (SkinnableEntity skinnable : skinnableNPCs) {
|
for (Player skinnable : skinnableNPCs) {
|
||||||
entities[i] = (EntityPlayer) skinnable;
|
entities[i] = (EntityPlayer) getHandle(skinnable);
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
NMSImpl.sendPacket(recipient,
|
NMSImpl.sendPacket(recipient,
|
||||||
new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.REMOVE_PLAYER, entities));
|
new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.REMOVE_PLAYER, entities));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void sendTabListRemove(Player recipient, Player listPlayer) {
|
|
||||||
Preconditions.checkNotNull(recipient);
|
|
||||||
Preconditions.checkNotNull(listPlayer);
|
|
||||||
EntityPlayer entity = ((CraftPlayer) listPlayer).getHandle();
|
|
||||||
NMSImpl.sendPacket(recipient,
|
|
||||||
new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.REMOVE_PLAYER, entity));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void sendTeamPacket(Player recipient, Team team, int mode) {
|
public void sendTeamPacket(Player recipient, Team team, int mode) {
|
||||||
Preconditions.checkNotNull(recipient);
|
Preconditions.checkNotNull(recipient);
|
||||||
|
|
Loading…
Reference in New Issue