From c4a294b18628d59ee3584075ac2a0f6389c3b9b2 Mon Sep 17 00:00:00 2001 From: yoyosource Date: Fri, 24 Feb 2023 20:38:37 +0100 Subject: [PATCH 1/2] Fix double and tripple click of REntityServer --- .../src/de/steamwar/entity/REntityServer.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/SpigotCore_Main/src/de/steamwar/entity/REntityServer.java b/SpigotCore_Main/src/de/steamwar/entity/REntityServer.java index 1ed4c6f..32a7efc 100644 --- a/SpigotCore_Main/src/de/steamwar/entity/REntityServer.java +++ b/SpigotCore_Main/src/de/steamwar/entity/REntityServer.java @@ -69,14 +69,22 @@ public class REntityServer implements Listener { private final HashMap viewDistance = new HashMap<>(); private EntityActionListener callback = null; + private final Set playersThatClicked = new HashSet<>(); private final BiFunction filter = (player, packet) -> { REntity entity = entityMap.get(useEntityTarget.get(packet)); if (entity == null) return packet; + if (playersThatClicked.contains(player)) + return null; + + playersThatClicked.add(player); EntityAction action = getEntityAction.apply(useEntityAction.get(packet)) == 1 ? EntityAction.ATTACK : EntityAction.INTERACT; - Bukkit.getScheduler().runTask(Core.getInstance(), () -> callback.onAction(player, entity, action)); + Bukkit.getScheduler().runTask(Core.getInstance(), () -> { + playersThatClicked.remove(player); + callback.onAction(player, entity, action); + }); return null; }; From 1eba896c9527a3186608a25d33e4101319e0c65c Mon Sep 17 00:00:00 2001 From: yoyosource Date: Fri, 24 Feb 2023 20:43:09 +0100 Subject: [PATCH 2/2] Make Set concurrent --- SpigotCore_Main/src/de/steamwar/entity/REntityServer.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/SpigotCore_Main/src/de/steamwar/entity/REntityServer.java b/SpigotCore_Main/src/de/steamwar/entity/REntityServer.java index 32a7efc..667bcce 100644 --- a/SpigotCore_Main/src/de/steamwar/entity/REntityServer.java +++ b/SpigotCore_Main/src/de/steamwar/entity/REntityServer.java @@ -33,6 +33,7 @@ import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerMoveEvent; import org.bukkit.event.player.PlayerQuitEvent; +import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.Set; @@ -69,7 +70,7 @@ public class REntityServer implements Listener { private final HashMap viewDistance = new HashMap<>(); private EntityActionListener callback = null; - private final Set playersThatClicked = new HashSet<>(); + private final Set playersThatClicked = Collections.synchronizedSet(new HashSet<>()); private final BiFunction filter = (player, packet) -> { REntity entity = entityMap.get(useEntityTarget.get(packet));