diff --git a/SpigotCore_Main/src/de/steamwar/entity/REntityServer.java b/SpigotCore_Main/src/de/steamwar/entity/REntityServer.java index 7ebb46a..ecc59c7 100644 --- a/SpigotCore_Main/src/de/steamwar/entity/REntityServer.java +++ b/SpigotCore_Main/src/de/steamwar/entity/REntityServer.java @@ -35,6 +35,7 @@ import org.bukkit.event.player.PlayerQuitEvent; import java.util.HashMap; import java.util.HashSet; import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; import java.util.function.BiConsumer; import java.util.function.BiFunction; import java.util.function.Consumer; @@ -49,7 +50,7 @@ public class REntityServer implements Listener { private static final Reflection.FieldAccessor useEntityTarget = Reflection.getField(useEntity, int.class, 0); private static final Reflection.FieldAccessor useEntityAction = Reflection.getField(useEntity, int.class, 1); - private final HashMap entityMap = new HashMap<>(); + private final ConcurrentHashMap entityMap = new ConcurrentHashMap<>(); private final HashMap> entities = new HashMap<>(); private final HashMap> players = new HashMap<>(); private final HashMap lastLocation = new HashMap<>(); @@ -60,26 +61,23 @@ public class REntityServer implements Listener { private BiFunction filter = (player, packet) -> { if (callback == null) return packet; int target = useEntityTarget.get(packet); - if (!entityMap.containsKey(target)) return packet; - REntity entity = entityMap.get(target); - int action = useEntityAction.get(packet); - if (action == 2) action = 0; - int finalAction = action; + if (entity == null) return packet; + EntityAction action = useEntityAction.get(packet) == 1 ? EntityAction.ATTACK : EntityAction.INTERACT; Bukkit.getScheduler().runTask(Core.getInstance(), () -> { - callback.onAction(player, entity, finalAction == 0 ? EntityAction.INTERACT : EntityAction.ATTACK); + callback.onAction(player, entity, action); }); return null; }; public REntityServer() { Core.getInstance().getServer().getPluginManager().registerEvents(this, Core.getInstance()); - TinyProtocol.instance.addFilter(useEntity, filter); } public void setCallback(EntityActionListener callback) { this.callback = callback; + TinyProtocol.instance.addFilter(useEntity, filter); } public void addPlayer(Player player) {