diff --git a/main/src/main/java/net/citizensnpcs/EventListen.java b/main/src/main/java/net/citizensnpcs/EventListen.java index ebc121962..84f1f8680 100644 --- a/main/src/main/java/net/citizensnpcs/EventListen.java +++ b/main/src/main/java/net/citizensnpcs/EventListen.java @@ -451,7 +451,7 @@ public class EventListen implements Listener { if (!tracker.isValid() || !event.getPlayer().isValid()) return; - NMS.sendPositionUpdate(tracker, false, null, null, NMS.getHeadYaw(tracker)); + NMS.sendPositionUpdateNearby(tracker, false, null, null, NMS.getHeadYaw(tracker)); }, Setting.TABLIST_REMOVE_PACKET_DELAY.asTicks() + 1); boolean resetYaw = event.getNPC().data().get(NPC.Metadata.RESET_YAW_ON_SPAWN, diff --git a/main/src/main/java/net/citizensnpcs/commands/NPCCommands.java b/main/src/main/java/net/citizensnpcs/commands/NPCCommands.java index 1362e61b0..dd760e007 100644 --- a/main/src/main/java/net/citizensnpcs/commands/NPCCommands.java +++ b/main/src/main/java/net/citizensnpcs/commands/NPCCommands.java @@ -55,7 +55,6 @@ import com.google.common.collect.Lists; import com.google.common.io.BaseEncoding; import net.citizensnpcs.Citizens; -import net.citizensnpcs.ProtocolLibListener; import net.citizensnpcs.Settings.Setting; import net.citizensnpcs.StoredShops; import net.citizensnpcs.api.CitizensAPI; @@ -163,7 +162,6 @@ import net.citizensnpcs.util.Util; @Requirements(selected = true, ownership = true) public class NPCCommands { private final CommandHistory history; - private final ProtocolLibListener protocolListener; private final NPCSelector selector; private final StoredShops shops; private final NPCRegistry temporaryRegistry; @@ -173,7 +171,6 @@ public class NPCCommands { shops = plugin.getShops(); temporaryRegistry = CitizensAPI.createCitizensBackedNPCRegistry(new MemoryNPCDataStore()); history = new CommandHistory(selector); - protocolListener = plugin.getProtocolLibListener(); } @Command( @@ -458,7 +455,7 @@ public class NPCCommands { @Command( aliases = { "npc" }, - usage = "command|cmd (add [command] | remove [id] | permissions [permissions] | sequential | random | clearerror [type] (name|uuid) | errormsg [type] [msg] | persistsequence [true|false] | cost [cost] (id) | expcost [cost] (id) | itemcost (id)) (-s(hift)) (-l[eft]/-r[ight]) (-p[layer] -o[p]), --cooldown --gcooldown [seconds] --delay [ticks] --permissions [perms] --n [max # of uses]", + usage = "command|cmd (add [command] | remove [id|all] | permissions [permissions] | sequential | random | clearerror [type] (name|uuid) | errormsg [type] [msg] | persistsequence [true|false] | cost [cost] (id) | expcost [cost] (id) | itemcost (id)) (-s(hift)) (-l[eft]/-r[ight]) (-p[layer] -o[p]), --cooldown --gcooldown [seconds] --delay [ticks] --permissions [perms] --n [max # of uses]", desc = "Controls commands which will be run when clicking on an NPC", help = Messages.NPC_COMMAND_HELP, modifiers = { "command", "cmd" }, @@ -535,11 +532,16 @@ public class NPCCommands { } else if (action.equalsIgnoreCase("remove")) { if (args.argsLength() == 2) throw new CommandUsageException(); - int id = args.getInteger(2, -1); - if (!commands.hasCommandId(id)) - throw new CommandException(Messages.COMMAND_UNKNOWN_COMMAND_ID, id); - commands.removeCommandById(id); - Messaging.sendTr(sender, Messages.COMMAND_REMOVED, id); + if (args.getString(2).equalsIgnoreCase("all")) { + commands.clear(); + Messaging.sendTr(sender, Messages.COMMANDS_CLEARED, npc.getName()); + } else { + int id = args.getInteger(2, -1); + if (!commands.hasCommandId(id)) + throw new CommandException(Messages.COMMAND_UNKNOWN_COMMAND_ID, id); + commands.removeCommandById(id); + Messaging.sendTr(sender, Messages.COMMAND_REMOVED, id); + } } else if (action.equalsIgnoreCase("permissions") || action.equalsIgnoreCase("perms")) { if (!sender.hasPermission("citizens.admin")) throw new NoPermissionsException(); @@ -2556,7 +2558,8 @@ public class NPCCommands { if (yaw != null) { NMS.setBodyYaw(npc.getEntity(), yaw); if (npc.getEntity().getType() == EntityType.PLAYER) { - NMS.sendPositionUpdate(npc.getEntity(), true, yaw, npc.getStoredLocation().getPitch(), null); + NMS.sendPositionUpdateNearby(npc.getEntity(), true, yaw, npc.getEntity().getLocation().getPitch(), + null); PlayerAnimation.ARM_SWING.play((Player) npc.getEntity()); } } diff --git a/main/src/main/java/net/citizensnpcs/npc/CitizensNPC.java b/main/src/main/java/net/citizensnpcs/npc/CitizensNPC.java index 217ecdd56..cefb23394 100644 --- a/main/src/main/java/net/citizensnpcs/npc/CitizensNPC.java +++ b/main/src/main/java/net/citizensnpcs/npc/CitizensNPC.java @@ -1,7 +1,6 @@ package net.citizensnpcs.npc; import java.util.ArrayList; -import java.util.Collection; import java.util.EnumSet; import java.util.Set; import java.util.UUID; @@ -306,8 +305,7 @@ public class CitizensNPC extends AbstractNPC { if (getEntity() instanceof SkinnableEntity && !hasTrait(SkinLayers.class)) { ((SkinnableEntity) getEntity()).setSkinFlags(EnumSet.allOf(SkinLayers.Layer.class)); } - Collection onPreSpawn = traits.values(); - for (Trait trait : onPreSpawn.toArray(new Trait[onPreSpawn.size()])) { + for (Trait trait : traits.values().toArray(new Trait[traits.values().size()])) { try { trait.onPreSpawn(); } catch (Throwable ex) { @@ -315,12 +313,12 @@ public class CitizensNPC extends AbstractNPC { ex.printStackTrace(); } } - boolean loaded = Messaging.isDebugging() ? false : Util.isLoaded(at); + boolean wasLoaded = Messaging.isDebugging() ? Util.isLoaded(at) : false; boolean couldSpawn = entityController.spawn(at); if (!couldSpawn) { if (Messaging.isDebugging()) { - Messaging.debug("Retrying spawn of", this, "later, SpawnReason." + reason + ". Was loaded", loaded, + Messaging.debug("Retrying spawn of", this, "later, SpawnReason." + reason + ". Was loaded", wasLoaded, "is loaded", Util.isLoaded(at)); } // we need to wait before trying to spawn diff --git a/main/src/main/java/net/citizensnpcs/npc/CitizensTraitFactory.java b/main/src/main/java/net/citizensnpcs/npc/CitizensTraitFactory.java index 1b03f6644..d445e1520 100644 --- a/main/src/main/java/net/citizensnpcs/npc/CitizensTraitFactory.java +++ b/main/src/main/java/net/citizensnpcs/npc/CitizensTraitFactory.java @@ -18,7 +18,7 @@ import net.citizensnpcs.api.trait.trait.Inventory; import net.citizensnpcs.api.trait.trait.MobType; import net.citizensnpcs.api.trait.trait.Owner; import net.citizensnpcs.api.trait.trait.PlayerFilter; -import net.citizensnpcs.api.trait.trait.Spawned; +import net.citizensnpcs.api.trait.trait.Spawned; import net.citizensnpcs.trait.Age; import net.citizensnpcs.trait.Anchors; import net.citizensnpcs.trait.ArmorStandTrait; @@ -91,7 +91,7 @@ public class CitizensTraitFactory implements TraitFactory { registerTrait(TraitInfo.create(Inventory.class)); registerTrait(TraitInfo.create(LookClose.class)); registerTrait(TraitInfo.create(PaintingTrait.class)); - registerTrait(TraitInfo.create(MirrorTrait.class).optInToStats()); + registerTrait(TraitInfo.create(MirrorTrait.class).optInToStats()); registerTrait(TraitInfo.create(MountTrait.class)); registerTrait(TraitInfo.create(MobType.class).asDefaultTrait()); registerTrait(TraitInfo.create(OcelotModifiers.class)); diff --git a/main/src/main/java/net/citizensnpcs/trait/CommandTrait.java b/main/src/main/java/net/citizensnpcs/trait/CommandTrait.java index 306ed9d2d..1090a9263 100644 --- a/main/src/main/java/net/citizensnpcs/trait/CommandTrait.java +++ b/main/src/main/java/net/citizensnpcs/trait/CommandTrait.java @@ -142,6 +142,10 @@ public class CommandTrait extends Trait { return action == null ? Transaction.success() : action.take(player, 1); } + public void clear() { + commands.clear(); + } + public void clearHistory(CommandTraitError which, String raw) { if (which == CommandTraitError.ON_GLOBAL_COOLDOWN && raw != null) { globalCooldowns.remove(BaseEncoding.base64().encode(raw.getBytes())); diff --git a/main/src/main/java/net/citizensnpcs/trait/HologramTrait.java b/main/src/main/java/net/citizensnpcs/trait/HologramTrait.java index 4ef251613..7fb0a658f 100644 --- a/main/src/main/java/net/citizensnpcs/trait/HologramTrait.java +++ b/main/src/main/java/net/citizensnpcs/trait/HologramTrait.java @@ -340,8 +340,7 @@ public class HologramTrait extends Trait { } if (nameLine != null && nameLine.hologram.isSpawned()) { if (updatePosition && !useDisplayEntities) { - nameLine.hologram.teleport(npcLoc.clone().add(0, getEntityBbHeight(), 0), - TeleportCause.PLUGIN); + nameLine.hologram.teleport(npcLoc.clone().add(0, getEntityBbHeight(), 0), TeleportCause.PLUGIN); } if (updateName) { nameLine.setText(npc.getRawName()); diff --git a/main/src/main/java/net/citizensnpcs/trait/LookClose.java b/main/src/main/java/net/citizensnpcs/trait/LookClose.java index 9ee07980e..7c93cc29b 100644 --- a/main/src/main/java/net/citizensnpcs/trait/LookClose.java +++ b/main/src/main/java/net/citizensnpcs/trait/LookClose.java @@ -3,7 +3,6 @@ package net.citizensnpcs.trait; import java.util.Iterator; import java.util.List; import java.util.Map; -import java.util.Map.Entry; import java.util.Set; import java.util.UUID; import java.util.stream.Collectors; @@ -110,18 +109,18 @@ public class LookClose extends Trait implements Toggleable { session.getSession().rotateToFace(player); seen.add(player.getUniqueId()); } - for (Iterator> iterator = sessions.entrySet().iterator(); iterator - .hasNext();) { - Entry entry = iterator.next(); - if (!seen.contains(entry.getKey())) { - entry.getValue().end(); + for (Iterator iterator = sessions.keySet().iterator(); iterator.hasNext();) { + UUID uuid = iterator.next(); + if (!seen.contains(uuid)) { + rotationTrait.resetPlayerToPhysicalSession(uuid); iterator.remove(); } } return; } else if (sessions.size() > 0) { - for (PacketRotationSession session : sessions.values()) { - session.end(); + RotationTrait rotationTrait = npc.getOrAddTrait(RotationTrait.class); + for (UUID uuid : sessions.keySet()) { + rotationTrait.resetPlayerToPhysicalSession(uuid); } sessions.clear(); } diff --git a/main/src/main/java/net/citizensnpcs/trait/RotationTrait.java b/main/src/main/java/net/citizensnpcs/trait/RotationTrait.java index 3c8f4852c..f0262ae2f 100644 --- a/main/src/main/java/net/citizensnpcs/trait/RotationTrait.java +++ b/main/src/main/java/net/citizensnpcs/trait/RotationTrait.java @@ -11,11 +11,13 @@ import java.util.function.Function; import java.util.function.Supplier; import java.util.stream.Collectors; +import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.entity.Entity; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; +import com.google.common.collect.ImmutableList; import com.google.common.collect.Iterables; import com.google.common.collect.Lists; import com.google.common.collect.Maps; @@ -93,6 +95,16 @@ public class RotationTrait extends Trait { return globalSession; } + public void resetPlayerToPhysicalSession(UUID uuid) { + PacketRotationSession prs = packetSessionsByUUID.remove(uuid); + if (prs == null || !npc.isSpawned()) + return; + Player player = Bukkit.getPlayer(uuid); + if (player == null) + return; + NMS.sendPositionUpdate(npc.getEntity(), ImmutableList.of(player), false); + } + @Override public void run() { if (!npc.isSpawned()) @@ -205,7 +217,7 @@ public class RotationTrait extends Trait { @Override public void apply() { if (Math.abs(lastBodyYaw - bodyYaw) + Math.abs(lastHeadYaw - headYaw) + Math.abs(pitch - lastPitch) > 1) { - NMS.sendPositionUpdate(entity, false, bodyYaw, pitch, headYaw); + NMS.sendPositionUpdateNearby(entity, false, bodyYaw, pitch, headYaw); } } diff --git a/main/src/main/java/net/citizensnpcs/trait/ShopTrait.java b/main/src/main/java/net/citizensnpcs/trait/ShopTrait.java index cfaa1e1e5..986dfe145 100644 --- a/main/src/main/java/net/citizensnpcs/trait/ShopTrait.java +++ b/main/src/main/java/net/citizensnpcs/trait/ShopTrait.java @@ -547,9 +547,9 @@ public class ShopTrait extends Trait { int pos = 0; for (GUI template : NPCShopAction.getGUIs()) { - if (template.createMenuItem(null) == null) { + if (template.createMenuItem(null) == null) continue; - } + NPCShopAction oldCost = modified.cost.stream().filter(template::manages).findFirst().orElse(null); costItems.getSlots().get(pos) .setItemStack(Util.editTitle(template.createMenuItem(oldCost), title -> title + " Cost")); diff --git a/main/src/main/java/net/citizensnpcs/util/Messages.java b/main/src/main/java/net/citizensnpcs/util/Messages.java index 39f1cb766..33f0148b5 100644 --- a/main/src/main/java/net/citizensnpcs/util/Messages.java +++ b/main/src/main/java/net/citizensnpcs/util/Messages.java @@ -78,6 +78,7 @@ public class Messages { public static final String COMMAND_TRIGGER_ADDED = "citizens.editors.waypoints.triggers.command.added"; public static final String COMMAND_TRIGGER_PROMPT = "citizens.editors.waypoints.triggers.command.prompt"; public static final String COMMAND_UNKNOWN_COMMAND_ID = "citizens.commands.npc.command.unknown-id"; + public static final String COMMANDS_CLEARED = "citizens.commands.npc.command.cleared"; public static final String COMMANDS_PERSIST_SEQUENCE_SET = "citizens.commands.npc.command.persist-sequence-set"; public static final String COMMANDS_PERSIST_SEQUENCE_UNSET = "citizens.commands.npc.command.persist-sequence-unset"; public static final String COMMANDS_RANDOM_SET = "citizens.commands.npc.commands.random-set"; diff --git a/main/src/main/java/net/citizensnpcs/util/NMS.java b/main/src/main/java/net/citizensnpcs/util/NMS.java index b565c7a98..1298afbb3 100644 --- a/main/src/main/java/net/citizensnpcs/util/NMS.java +++ b/main/src/main/java/net/citizensnpcs/util/NMS.java @@ -42,6 +42,7 @@ import com.mojang.authlib.GameProfile; import com.mojang.authlib.ProfileLookupCallback; import net.citizensnpcs.Settings.Setting; +import net.citizensnpcs.api.CitizensAPI; import net.citizensnpcs.api.ai.NavigatorParameters; import net.citizensnpcs.api.astar.pathfinder.SwimmingExaminer; import net.citizensnpcs.api.command.CommandManager; @@ -517,6 +518,22 @@ public class NMS { return BRIDGE.getNBT(item); } + private static Collection getNearbyPlayers(Entity from) { + return getNearbyPlayers(from, from.getLocation(), 64); + } + + private static Collection getNearbyPlayers(Entity from, Location location, double radius) { + List players = Lists.newArrayList(); + for (Player player : CitizensAPI.getLocationLookup().getNearbyPlayers(location, radius)) { + if (location.getWorld() != player.getWorld() || from != null && !player.canSee(from) + || location.distance(player.getLocation()) > radius) + continue; + + players.add(player); + } + return players; + } + public static NPC getNPC(Entity entity) { return BRIDGE.getNPC(entity); } @@ -734,8 +751,23 @@ public class NMS { BRIDGE.replaceTrackerEntry(entity); } - public static void sendPositionUpdate(Entity from, boolean position, Float bodyYaw, Float pitch, Float headYaw) { - BRIDGE.sendPositionUpdate(from, position, bodyYaw, pitch, headYaw); + public static void sendPositionUpdate(Entity from, Collection to, boolean position) { + sendPositionUpdate(from, to, position, NMS.getYaw(from), from.getLocation().getPitch(), NMS.getHeadYaw(from)); + } + + public static void sendPositionUpdate(Entity from, Collection to, boolean position, Float bodyYaw, + Float pitch, Float headYaw) { + BRIDGE.sendPositionUpdate(from, to, position, bodyYaw, pitch, headYaw); + } + + public static void sendPositionUpdateNearby(Entity from, boolean position) { + sendPositionUpdate(from, getNearbyPlayers(from), position, NMS.getYaw(from), from.getLocation().getPitch(), + NMS.getHeadYaw(from)); + } + + public static void sendPositionUpdateNearby(Entity from, boolean position, Float bodyYaw, Float pitch, + Float headYaw) { + sendPositionUpdate(from, getNearbyPlayers(from), position, bodyYaw, pitch, headYaw); } public static boolean sendTabListAdd(Player recipient, Player listPlayer) { diff --git a/main/src/main/java/net/citizensnpcs/util/NMSBridge.java b/main/src/main/java/net/citizensnpcs/util/NMSBridge.java index 92816a29b..7f39bcde5 100644 --- a/main/src/main/java/net/citizensnpcs/util/NMSBridge.java +++ b/main/src/main/java/net/citizensnpcs/util/NMSBridge.java @@ -168,7 +168,8 @@ public interface NMSBridge { public void replaceTrackerEntry(Entity entity); - public void sendPositionUpdate(Entity from, boolean position, Float bodyYaw, Float pitch, Float headYaw); + public void sendPositionUpdate(Entity from, Collection to, boolean position, Float bodyYaw, Float pitch, + Float headYaw); public boolean sendTabListAdd(Player recipient, Player listPlayer); diff --git a/main/src/main/resources/en.json b/main/src/main/resources/en.json index 91340d480..38a508072 100644 --- a/main/src/main/resources/en.json +++ b/main/src/main/resources/en.json @@ -54,6 +54,7 @@ "citizens.commands.npc.collidable.unset" : "[[{0}]] will no longer collide with entities.", "citizens.commands.npc.command.command-added" : "Command [[{0}]] added with id [[{1}]].", "citizens.commands.npc.command.command-removed" : "Command [[{0}]] removed.", + "citizens.commands.npc.command.cleared" : "[[{0}]]''s commands cleared.", "citizens.commands.npc.command.cost-missing" : "Missing cost to set.", "citizens.commands.npc.command.cost-set" : "Set cost per click to [[{0}]].", "citizens.commands.npc.command.describe-format" : "
- {0} [{1}s] [cost:{2}] [exp:{3}] [-]", diff --git a/v1_10_R1/src/main/java/net/citizensnpcs/nms/v1_10_R1/util/NMSImpl.java b/v1_10_R1/src/main/java/net/citizensnpcs/nms/v1_10_R1/util/NMSImpl.java index 07be87d73..e4a2db980 100644 --- a/v1_10_R1/src/main/java/net/citizensnpcs/nms/v1_10_R1/util/NMSImpl.java +++ b/v1_10_R1/src/main/java/net/citizensnpcs/nms/v1_10_R1/util/NMSImpl.java @@ -1080,8 +1080,8 @@ public class NMSImpl implements NMSBridge { } @Override - public void sendPositionUpdate(org.bukkit.entity.Entity from, boolean position, Float bodyYaw, Float pitch, - Float headYaw) { + public void sendPositionUpdate(org.bukkit.entity.Entity from, Collection to, boolean position, + Float bodyYaw, Float pitch, Float headYaw) { Entity handle = getHandle(from); if (bodyYaw == null) { bodyYaw = handle.yaw; @@ -1110,7 +1110,9 @@ public class NMSImpl implements NMSBridge { if (headYaw != null) { toSend.add(new PacketPlayOutEntityHeadRotation(handle, (byte) (headYaw * 256.0F / 360.0F))); } - sendPacketsNearby(null, from.getLocation(), toSend, 64); + for (Player player : to) { + sendPackets(player, toSend); + } } @Override @@ -1881,6 +1883,14 @@ public class NMSImpl implements NMSBridge { sendPacketsNearby(from, location, list, radius); } + public static void sendPackets(Player player, Iterable> packets) { + if (packets == null) + return; + for (Packet packet : packets) { + ((EntityPlayer) getHandle(player)).playerConnection.sendPacket(packet); + } + } + public static void sendPacketsNearby(Player from, Location location, Collection> packets, double radius) { radius *= radius; final org.bukkit.World world = location.getWorld(); diff --git a/v1_11_R1/src/main/java/net/citizensnpcs/nms/v1_11_R1/util/NMSImpl.java b/v1_11_R1/src/main/java/net/citizensnpcs/nms/v1_11_R1/util/NMSImpl.java index 61f497ff2..d7441200b 100644 --- a/v1_11_R1/src/main/java/net/citizensnpcs/nms/v1_11_R1/util/NMSImpl.java +++ b/v1_11_R1/src/main/java/net/citizensnpcs/nms/v1_11_R1/util/NMSImpl.java @@ -1133,8 +1133,8 @@ public class NMSImpl implements NMSBridge { } @Override - public void sendPositionUpdate(org.bukkit.entity.Entity from, boolean position, Float bodyYaw, Float pitch, - Float headYaw) { + public void sendPositionUpdate(org.bukkit.entity.Entity from, Collection to, boolean position, + Float bodyYaw, Float pitch, Float headYaw) { Entity handle = getHandle(from); if (bodyYaw == null) { bodyYaw = handle.yaw; @@ -1163,7 +1163,9 @@ public class NMSImpl implements NMSBridge { if (headYaw != null) { toSend.add(new PacketPlayOutEntityHeadRotation(handle, (byte) (headYaw * 256.0F / 360.0F))); } - sendPacketsNearby(null, from.getLocation(), toSend, 64); + for (Player player : to) { + sendPackets(player, toSend); + } } @Override @@ -1940,6 +1942,14 @@ public class NMSImpl implements NMSBridge { sendPacketsNearby(from, location, list, radius); } + public static void sendPackets(Player player, Iterable> packets) { + if (packets == null) + return; + for (Packet packet : packets) { + ((EntityPlayer) getHandle(player)).playerConnection.sendPacket(packet); + } + } + public static void sendPacketsNearby(Player from, Location location, Collection> packets, double radius) { radius *= radius; final org.bukkit.World world = location.getWorld(); diff --git a/v1_12_R1/src/main/java/net/citizensnpcs/nms/v1_12_R1/util/NMSImpl.java b/v1_12_R1/src/main/java/net/citizensnpcs/nms/v1_12_R1/util/NMSImpl.java index bb3ed9c08..28719d4d5 100644 --- a/v1_12_R1/src/main/java/net/citizensnpcs/nms/v1_12_R1/util/NMSImpl.java +++ b/v1_12_R1/src/main/java/net/citizensnpcs/nms/v1_12_R1/util/NMSImpl.java @@ -1140,8 +1140,8 @@ public class NMSImpl implements NMSBridge { } @Override - public void sendPositionUpdate(org.bukkit.entity.Entity from, boolean position, Float bodyYaw, Float pitch, - Float headYaw) { + public void sendPositionUpdate(org.bukkit.entity.Entity from, Collection to, boolean position, + Float bodyYaw, Float pitch, Float headYaw) { Entity handle = getHandle(from); if (bodyYaw == null) { bodyYaw = handle.yaw; @@ -1170,7 +1170,9 @@ public class NMSImpl implements NMSBridge { if (headYaw != null) { toSend.add(new PacketPlayOutEntityHeadRotation(handle, (byte) (headYaw * 256.0F / 360.0F))); } - sendPacketsNearby(null, from.getLocation(), toSend, 64); + for (Player player : to) { + sendPackets(player, toSend); + } } @Override @@ -1947,6 +1949,14 @@ public class NMSImpl implements NMSBridge { sendPacketsNearby(from, location, list, radius); } + public static void sendPackets(Player player, Iterable> packets) { + if (packets == null) + return; + for (Packet packet : packets) { + ((EntityPlayer) getHandle(player)).playerConnection.sendPacket(packet); + } + } + public static void sendPacketsNearby(Player from, Location location, Collection> packets, double radius) { radius *= radius; final org.bukkit.World world = location.getWorld(); diff --git a/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/util/NMSImpl.java b/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/util/NMSImpl.java index d8355b03f..849a6ae72 100644 --- a/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/util/NMSImpl.java +++ b/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/util/NMSImpl.java @@ -1177,8 +1177,8 @@ public class NMSImpl implements NMSBridge { } @Override - public void sendPositionUpdate(org.bukkit.entity.Entity from, boolean position, Float bodyYaw, Float pitch, - Float headYaw) { + public void sendPositionUpdate(org.bukkit.entity.Entity from, Collection to, boolean position, + Float bodyYaw, Float pitch, Float headYaw) { Entity handle = getHandle(from); if (bodyYaw == null) { bodyYaw = handle.yaw; @@ -1207,7 +1207,9 @@ public class NMSImpl implements NMSBridge { if (headYaw != null) { toSend.add(new PacketPlayOutEntityHeadRotation(handle, (byte) (headYaw * 256.0F / 360.0F))); } - sendPacketsNearby(null, from.getLocation(), toSend, 64); + for (Player player : to) { + sendPackets(player, toSend); + } } @Override @@ -2061,6 +2063,14 @@ public class NMSImpl implements NMSBridge { sendPacketsNearby(from, location, list, radius); } + public static void sendPackets(Player player, Iterable> packets) { + if (packets == null) + return; + for (Packet packet : packets) { + ((EntityPlayer) getHandle(player)).playerConnection.sendPacket(packet); + } + } + public static void sendPacketsNearby(Player from, Location location, Collection> packets, double radius) { radius *= radius; final org.bukkit.World world = location.getWorld(); diff --git a/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/util/NMSImpl.java b/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/util/NMSImpl.java index f47f13d4b..2e9eb8e5d 100644 --- a/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/util/NMSImpl.java +++ b/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/util/NMSImpl.java @@ -4,7 +4,6 @@ import java.lang.invoke.MethodHandle; import java.lang.reflect.Field; import java.net.SocketAddress; import java.net.URL; -import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Collections; @@ -1196,8 +1195,8 @@ public class NMSImpl implements NMSBridge { } @Override - public void sendPositionUpdate(org.bukkit.entity.Entity from, boolean position, Float bodyYaw, Float pitch, - Float headYaw) { + public void sendPositionUpdate(org.bukkit.entity.Entity from, Collection to, boolean position, + Float bodyYaw, Float pitch, Float headYaw) { Entity handle = getHandle(from); if (bodyYaw == null) { bodyYaw = handle.yaw; @@ -1226,7 +1225,9 @@ public class NMSImpl implements NMSBridge { if (headYaw != null) { toSend.add(new PacketPlayOutEntityHeadRotation(handle, (byte) (headYaw * 256.0F / 360.0F))); } - sendPacketsNearby(null, from.getLocation(), toSend, 64); + for (Player player : to) { + sendPackets(player, toSend); + } } @Override @@ -2101,14 +2102,12 @@ public class NMSImpl implements NMSBridge { ((EntityPlayer) NMSImpl.getHandle(player)).playerConnection.sendPacket(packet); } - public static void sendPacketNearby(Player from, Location location, Packet packet) { - sendPacketNearby(from, location, packet, 64); - } - - public static void sendPacketNearby(Player from, Location location, Packet packet, double radius) { - List> list = new ArrayList<>(); - list.add(packet); - sendPacketsNearby(from, location, list, radius); + public static void sendPackets(Player player, Iterable> packets) { + if (packets == null) + return; + for (Packet packet : packets) { + ((EntityPlayer) getHandle(player)).playerConnection.sendPacket(packet); + } } public static void sendPacketsNearby(Player from, Location location, Collection> packets, double radius) { diff --git a/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/util/NMSImpl.java b/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/util/NMSImpl.java index 59b7fe7f6..84c8d78bd 100644 --- a/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/util/NMSImpl.java +++ b/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/util/NMSImpl.java @@ -4,7 +4,6 @@ import java.lang.invoke.MethodHandle; import java.lang.reflect.Field; import java.net.SocketAddress; import java.net.URL; -import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Collections; @@ -1213,8 +1212,8 @@ public class NMSImpl implements NMSBridge { } @Override - public void sendPositionUpdate(org.bukkit.entity.Entity from, boolean position, Float bodyYaw, Float pitch, - Float headYaw) { + public void sendPositionUpdate(org.bukkit.entity.Entity from, Collection to, boolean position, + Float bodyYaw, Float pitch, Float headYaw) { Entity handle = getHandle(from); if (bodyYaw == null) { bodyYaw = handle.yaw; @@ -1243,7 +1242,9 @@ public class NMSImpl implements NMSBridge { if (headYaw != null) { toSend.add(new PacketPlayOutEntityHeadRotation(handle, (byte) (headYaw * 256.0F / 360.0F))); } - sendPacketsNearby(null, from.getLocation(), toSend, 64); + for (Player player : to) { + sendPackets(player, toSend); + } } @Override @@ -2166,14 +2167,12 @@ public class NMSImpl implements NMSBridge { ((EntityPlayer) NMSImpl.getHandle(player)).playerConnection.sendPacket(packet); } - public static void sendPacketNearby(Player from, Location location, Packet packet) { - sendPacketNearby(from, location, packet, 64); - } - - public static void sendPacketNearby(Player from, Location location, Packet packet, double radius) { - List> list = new ArrayList<>(); - list.add(packet); - sendPacketsNearby(from, location, list, radius); + public static void sendPackets(Player player, Iterable> packets) { + if (packets == null) + return; + for (Packet packet : packets) { + ((EntityPlayer) getHandle(player)).playerConnection.sendPacket(packet); + } } public static void sendPacketsNearby(Player from, Location location, Collection> packets, double radius) { diff --git a/v1_16_R3/src/main/java/net/citizensnpcs/nms/v1_16_R3/util/NMSImpl.java b/v1_16_R3/src/main/java/net/citizensnpcs/nms/v1_16_R3/util/NMSImpl.java index 224a704ab..f23d64e79 100644 --- a/v1_16_R3/src/main/java/net/citizensnpcs/nms/v1_16_R3/util/NMSImpl.java +++ b/v1_16_R3/src/main/java/net/citizensnpcs/nms/v1_16_R3/util/NMSImpl.java @@ -4,7 +4,6 @@ import java.lang.invoke.MethodHandle; import java.lang.reflect.Field; import java.net.SocketAddress; import java.net.URL; -import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Collections; @@ -1249,8 +1248,8 @@ public class NMSImpl implements NMSBridge { } @Override - public void sendPositionUpdate(org.bukkit.entity.Entity from, boolean position, Float bodyYaw, Float pitch, - Float headYaw) { + public void sendPositionUpdate(org.bukkit.entity.Entity from, Collection to, boolean position, + Float bodyYaw, Float pitch, Float headYaw) { Entity handle = getHandle(from); if (bodyYaw == null) { bodyYaw = handle.yaw; @@ -1279,7 +1278,9 @@ public class NMSImpl implements NMSBridge { if (headYaw != null) { toSend.add(new PacketPlayOutEntityHeadRotation(handle, (byte) (headYaw * 256.0F / 360.0F))); } - sendPacketsNearby(null, from.getLocation(), toSend, 64); + for (Player player : to) { + sendPackets(player, toSend); + } } @Override @@ -2164,14 +2165,12 @@ public class NMSImpl implements NMSBridge { ((EntityPlayer) NMSImpl.getHandle(player)).playerConnection.sendPacket(packet); } - public static void sendPacketNearby(Player from, Location location, Packet packet) { - sendPacketNearby(from, location, packet, 64); - } - - public static void sendPacketNearby(Player from, Location location, Packet packet, double radius) { - List> list = new ArrayList<>(); - list.add(packet); - sendPacketsNearby(from, location, list, radius); + public static void sendPackets(Player player, Iterable> packets) { + if (packets == null) + return; + for (Packet packet : packets) { + ((EntityPlayer) getHandle(player)).playerConnection.sendPacket(packet); + } } public static void sendPacketsNearby(Player from, Location location, Collection> packets, double radius) { diff --git a/v1_17_R1/src/main/java/net/citizensnpcs/nms/v1_17_R1/util/NMSImpl.java b/v1_17_R1/src/main/java/net/citizensnpcs/nms/v1_17_R1/util/NMSImpl.java index 4599d4796..c4b9a7b9a 100644 --- a/v1_17_R1/src/main/java/net/citizensnpcs/nms/v1_17_R1/util/NMSImpl.java +++ b/v1_17_R1/src/main/java/net/citizensnpcs/nms/v1_17_R1/util/NMSImpl.java @@ -4,8 +4,6 @@ import java.lang.invoke.MethodHandle; import java.lang.reflect.Field; import java.net.SocketAddress; import java.net.URL; -import java.util.ArrayList; -import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.EnumSet; @@ -1243,8 +1241,8 @@ public class NMSImpl implements NMSBridge { } @Override - public void sendPositionUpdate(org.bukkit.entity.Entity from, boolean position, Float bodyYaw, Float pitch, - Float headYaw) { + public void sendPositionUpdate(org.bukkit.entity.Entity from, Collection to, boolean position, + Float bodyYaw, Float pitch, Float headYaw) { Entity handle = getHandle(from); if (bodyYaw == null) { bodyYaw = handle.getYRot(); @@ -1273,7 +1271,9 @@ public class NMSImpl implements NMSBridge { if (headYaw != null) { toSend.add(new ClientboundRotateHeadPacket(handle, (byte) (headYaw * 256.0F / 360.0F))); } - sendPacketsNearby(null, from.getLocation(), toSend, 64); + for (Player player : to) { + sendPackets(player, toSend); + } } @Override @@ -2163,34 +2163,14 @@ public class NMSImpl implements NMSBridge { ((ServerPlayer) NMSImpl.getHandle(player)).connection.send(packet); } - public static void sendPacketNearby(Player from, Location location, Packet packet) { - sendPacketNearby(from, location, packet, 64); - } - - public static void sendPacketNearby(Player from, Location location, Packet packet, double radius) { - List> list = new ArrayList<>(); - list.add(packet); - sendPacketsNearby(from, location, list, radius); - } - - public static void sendPacketsNearby(Player from, Location location, Collection> packets, double radius) { - radius *= radius; - final org.bukkit.World world = location.getWorld(); - for (Player player : CitizensAPI.getLocationLookup().getNearbyPlayers(location, radius)) { - if (world != player.getWorld() || from != null && !player.canSee(from) - || location.distanceSquared(player.getLocation(PACKET_CACHE_LOCATION)) > radius) { - continue; - } - for (Packet packet : packets) { - NMSImpl.sendPacket(player, packet); - } + public static void sendPackets(Player player, Iterable> packets) { + if (packets == null) + return; + for (Packet packet : packets) { + ((ServerPlayer) getHandle(player)).connection.send(packet); } } - public static void sendPacketsNearby(Player from, Location location, Packet... packets) { - NMSImpl.sendPacketsNearby(from, location, Arrays.asList(packets), 64); - } - public static void setAdvancement(Player entity, PlayerAdvancements instance) { try { ADVANCEMENTS_PLAYER_FIELD.invoke(getHandle(entity), instance); diff --git a/v1_18_R2/src/main/java/net/citizensnpcs/nms/v1_18_R2/util/NMSImpl.java b/v1_18_R2/src/main/java/net/citizensnpcs/nms/v1_18_R2/util/NMSImpl.java index 427314cb9..143620816 100644 --- a/v1_18_R2/src/main/java/net/citizensnpcs/nms/v1_18_R2/util/NMSImpl.java +++ b/v1_18_R2/src/main/java/net/citizensnpcs/nms/v1_18_R2/util/NMSImpl.java @@ -3,8 +3,6 @@ package net.citizensnpcs.nms.v1_18_R2.util; import java.lang.invoke.MethodHandle; import java.net.SocketAddress; import java.net.URL; -import java.util.ArrayList; -import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.EnumSet; @@ -1252,8 +1250,8 @@ public class NMSImpl implements NMSBridge { } @Override - public void sendPositionUpdate(org.bukkit.entity.Entity from, boolean position, Float bodyYaw, Float pitch, - Float headYaw) { + public void sendPositionUpdate(org.bukkit.entity.Entity from, Collection to, boolean position, + Float bodyYaw, Float pitch, Float headYaw) { Entity handle = getHandle(from); if (bodyYaw == null) { bodyYaw = handle.getYRot(); @@ -1282,7 +1280,9 @@ public class NMSImpl implements NMSBridge { if (headYaw != null) { toSend.add(new ClientboundRotateHeadPacket(handle, (byte) (headYaw * 256.0F / 360.0F))); } - sendPacketsNearby(null, from.getLocation(), toSend, 64); + for (Player player : to) { + sendPackets(player, toSend); + } } @Override @@ -2170,34 +2170,14 @@ public class NMSImpl implements NMSBridge { ((ServerPlayer) NMSImpl.getHandle(player)).connection.send(packet); } - public static void sendPacketNearby(Player from, Location location, Packet packet) { - sendPacketNearby(from, location, packet, 64); - } - - public static void sendPacketNearby(Player from, Location location, Packet packet, double radius) { - List> list = new ArrayList<>(); - list.add(packet); - sendPacketsNearby(from, location, list, radius); - } - - public static void sendPacketsNearby(Player from, Location location, Collection> packets, double radius) { - radius *= radius; - final org.bukkit.World world = location.getWorld(); - for (Player player : CitizensAPI.getLocationLookup().getNearbyPlayers(location, radius)) { - if (world != player.getWorld() || from != null && !player.canSee(from) - || location.distanceSquared(player.getLocation(PACKET_CACHE_LOCATION)) > radius) { - continue; - } - for (Packet packet : packets) { - NMSImpl.sendPacket(player, packet); - } + public static void sendPackets(Player player, Iterable> packets) { + if (packets == null) + return; + for (Packet packet : packets) { + ((ServerPlayer) getHandle(player)).connection.send(packet); } } - public static void sendPacketsNearby(Player from, Location location, Packet... packets) { - NMSImpl.sendPacketsNearby(from, location, Arrays.asList(packets), 64); - } - public static void setAdvancement(Player entity, PlayerAdvancements instance) { try { ADVANCEMENTS_PLAYER_FIELD.invoke(getHandle(entity), instance); diff --git a/v1_19_R3/src/main/java/net/citizensnpcs/nms/v1_19_R3/util/NMSImpl.java b/v1_19_R3/src/main/java/net/citizensnpcs/nms/v1_19_R3/util/NMSImpl.java index adced0140..400c65295 100644 --- a/v1_19_R3/src/main/java/net/citizensnpcs/nms/v1_19_R3/util/NMSImpl.java +++ b/v1_19_R3/src/main/java/net/citizensnpcs/nms/v1_19_R3/util/NMSImpl.java @@ -4,7 +4,6 @@ package net.citizensnpcs.nms.v1_19_R3.util; import java.lang.invoke.MethodHandle; import java.net.SocketAddress; import java.net.URL; -import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Collections; @@ -1375,10 +1374,12 @@ public class NMSImpl implements NMSBridge { } @Override - public void sendPositionUpdate(org.bukkit.entity.Entity from, boolean position, Float bodyYaw, Float pitch, - Float headYaw) { + public void sendPositionUpdate(org.bukkit.entity.Entity from, Collection to, boolean position, + Float bodyYaw, Float pitch, Float headYaw) { List> toSend = getPositionUpdate(from, position, bodyYaw, pitch, headYaw); - sendPacketsNearby(null, from.getLocation(), toSend, 64); + for (Player dest : to) { + sendPackets(dest, toSend); + } } @Override @@ -2396,34 +2397,14 @@ public class NMSImpl implements NMSBridge { ((ServerPlayer) getHandle(player)).connection.send(packet); } - public static void sendPacketNearby(Player from, Location location, Packet packet) { - sendPacketNearby(from, location, packet, 64); - } - - public static void sendPacketNearby(Player from, Location location, Packet packet, double radius) { - List> list = new ArrayList<>(); - list.add(packet); - sendPacketsNearby(from, location, list, radius); - } - - public static void sendPacketsNearby(Player from, Location location, Collection> packets, double radius) { - radius *= radius; - final org.bukkit.World world = location.getWorld(); - for (Player player : CitizensAPI.getLocationLookup().getNearbyPlayers(location, radius)) { - if (world != player.getWorld() || from != null && !player.canSee(from) - || location.distanceSquared(player.getLocation(PACKET_CACHE_LOCATION)) > radius) { - continue; - } - for (Packet packet : packets) { - sendPacket(player, packet); - } + public static void sendPackets(Player player, Iterable> packets) { + if (packets == null) + return; + for (Packet packet : packets) { + ((ServerPlayer) getHandle(player)).connection.send(packet); } } - public static void sendPacketsNearby(Player from, Location location, Packet... packets) { - sendPacketsNearby(from, location, Arrays.asList(packets), 64); - } - public static void setAdvancement(Player entity, PlayerAdvancements instance) { try { ADVANCEMENTS_PLAYER_SETTER.invoke(getHandle(entity), instance); diff --git a/v1_20_R3/src/main/java/net/citizensnpcs/nms/v1_20_R3/util/NMSImpl.java b/v1_20_R3/src/main/java/net/citizensnpcs/nms/v1_20_R3/util/NMSImpl.java index cd0fb6a56..2a1ad29dc 100644 --- a/v1_20_R3/src/main/java/net/citizensnpcs/nms/v1_20_R3/util/NMSImpl.java +++ b/v1_20_R3/src/main/java/net/citizensnpcs/nms/v1_20_R3/util/NMSImpl.java @@ -1,7 +1,6 @@ package net.citizensnpcs.nms.v1_20_R3.util; import java.lang.invoke.MethodHandle; -import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Collections; @@ -1346,10 +1345,12 @@ public class NMSImpl implements NMSBridge { } @Override - public void sendPositionUpdate(org.bukkit.entity.Entity from, boolean position, Float bodyYaw, Float pitch, - Float headYaw) { + public void sendPositionUpdate(org.bukkit.entity.Entity from, Collection to, boolean position, + Float bodyYaw, Float pitch, Float headYaw) { List> toSend = getPositionUpdate(from, position, bodyYaw, pitch, headYaw); - sendPacketsNearby(null, from.getLocation(), toSend, 64); + for (Player dest : to) { + sendPackets(dest, toSend); + } } @Override @@ -2357,34 +2358,14 @@ public class NMSImpl implements NMSBridge { ((ServerPlayer) getHandle(player)).connection.send(packet); } - public static void sendPacketNearby(Player from, Location location, Packet packet) { - sendPacketNearby(from, location, packet, 64); - } - - public static void sendPacketNearby(Player from, Location location, Packet packet, double radius) { - List> list = new ArrayList<>(); - list.add(packet); - sendPacketsNearby(from, location, list, radius); - } - - public static void sendPacketsNearby(Player from, Location location, Collection> packets, double radius) { - radius *= radius; - final org.bukkit.World world = location.getWorld(); - for (Player player : CitizensAPI.getLocationLookup().getNearbyPlayers(location, radius)) { - if (world != player.getWorld() || from != null && !player.canSee(from) - || location.distanceSquared(player.getLocation(PACKET_CACHE_LOCATION)) > radius) { - continue; - } - for (Packet packet : packets) { - sendPacket(player, packet); - } + public static void sendPackets(Player player, Iterable> packets) { + if (packets == null) + return; + for (Packet packet : packets) { + ((ServerPlayer) getHandle(player)).connection.send(packet); } } - public static void sendPacketsNearby(Player from, Location location, Packet... packets) { - sendPacketsNearby(from, location, Arrays.asList(packets), 64); - } - public static void setAdvancement(Player entity, PlayerAdvancements instance) { try { ADVANCEMENTS_PLAYER_SETTER.invoke(getHandle(entity), instance); diff --git a/v1_8_R3/src/main/java/net/citizensnpcs/nms/v1_8_R3/util/NMSImpl.java b/v1_8_R3/src/main/java/net/citizensnpcs/nms/v1_8_R3/util/NMSImpl.java index fc69738f7..62f4afc2c 100644 --- a/v1_8_R3/src/main/java/net/citizensnpcs/nms/v1_8_R3/util/NMSImpl.java +++ b/v1_8_R3/src/main/java/net/citizensnpcs/nms/v1_8_R3/util/NMSImpl.java @@ -1006,8 +1006,8 @@ public class NMSImpl implements NMSBridge { } @Override - public void sendPositionUpdate(org.bukkit.entity.Entity from, boolean position, Float bodyYaw, Float pitch, - Float headYaw) { + public void sendPositionUpdate(org.bukkit.entity.Entity from, Collection to, boolean position, + Float bodyYaw, Float pitch, Float headYaw) { Entity handle = getHandle(from); if (bodyYaw == null) { bodyYaw = handle.yaw; @@ -1030,7 +1030,9 @@ public class NMSImpl implements NMSBridge { if (headYaw != null) { toSend.add(new PacketPlayOutEntityHeadRotation(handle, (byte) (headYaw * 256.0F / 360.0F))); } - sendPacketsNearby(null, from.getLocation(), toSend, 64); + for (Player player : to) { + sendPackets(player, toSend); + } } @Override @@ -1738,6 +1740,14 @@ public class NMSImpl implements NMSBridge { sendPacketsNearby(from, location, list, radius); } + public static void sendPackets(Player player, Iterable> packets) { + if (packets == null) + return; + for (Packet packet : packets) { + ((EntityPlayer) getHandle(player)).playerConnection.sendPacket(packet); + } + } + public static void sendPacketsNearby(Player from, Location location, Collection> packets, double radius) { radius *= radius; final org.bukkit.World world = location.getWorld();