From a72afa052d532fb28e445414573dbe6b0ef6d3ff Mon Sep 17 00:00:00 2001 From: sandtechnology <20417547+sandtechnology@users.noreply.github.com> Date: Tue, 11 Feb 2020 22:30:23 +0800 Subject: [PATCH] Fix CME and improve player check Former-commit-id: da581f40d9094114a5c5c7044659d54170123bf0 --- .../maxgamer/quickshop/Shop/VirtualDisplayItem.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/maxgamer/quickshop/Shop/VirtualDisplayItem.java b/src/main/java/org/maxgamer/quickshop/Shop/VirtualDisplayItem.java index ff41480b9..83a3b1a53 100644 --- a/src/main/java/org/maxgamer/quickshop/Shop/VirtualDisplayItem.java +++ b/src/main/java/org/maxgamer/quickshop/Shop/VirtualDisplayItem.java @@ -32,12 +32,12 @@ import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; -import org.maxgamer.quickshop.Shop.Shop; import org.maxgamer.quickshop.Util.Util; import java.lang.reflect.InvocationTargetException; -import java.util.HashSet; +import java.util.Set; import java.util.UUID; +import java.util.concurrent.ConcurrentSkipListSet; import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; @@ -56,14 +56,14 @@ public class VirtualDisplayItem extends DisplayItem { private PacketContainer fakeItemVelocityPacket; private PacketContainer fakeItemDestroyPacket; //The List which store packet sender - private HashSet packetSenders = new HashSet<>(); + private Set packetSenders; public VirtualDisplayItem(@NotNull Shop shop) { super(shop); initFakeDropItemPacket(); //Let nearby player can saw fake item - packetSenders.addAll(shop.getLocation().getNearbyPlayers(plugin.getServer().getViewDistance()*16,256).stream().map(Entity::getUniqueId).collect(Collectors.toSet())); + packetSenders= shop.getLocation().getNearbyPlayers(plugin.getServer().getViewDistance() * 16, 256).stream().map(Entity::getUniqueId).collect(Collectors.toCollection(ConcurrentSkipListSet::new)); protocolManager.addPacketListener(new PacketAdapter(plugin, ListenerPriority.NORMAL, PacketType.Play.Server.MAP_CHUNK) { @Override @@ -87,7 +87,7 @@ public class VirtualDisplayItem extends DisplayItem { //send the packet later to prevent chunk loading deadlock plugin.getServer().getScheduler().runTaskLater(plugin, () -> { - if (shop.isLoaded() && shop.getLocation().getChunk().getX() == x && shop.getLocation().getChunk().getZ() == z) { + if (shop.isLoaded() && shop.getLocation().getChunk().getX() == x && shop.getLocation().getChunk().getZ() == z&&!packetSenders.contains(event.getPlayer().getUniqueId())) { packetSenders.add(event.getPlayer().getUniqueId()); sendFakeItem(event.getPlayer()); }