From ad9b2465ee7140696b56eb1710b2205e2b032642 Mon Sep 17 00:00:00 2001 From: Lixfel Date: Thu, 23 Feb 2023 16:59:36 +0100 Subject: [PATCH] Simplify REntityFilter --- .../src/de/steamwar/entity/REntityServer.java | 37 +++++++------------ 1 file changed, 14 insertions(+), 23 deletions(-) diff --git a/SpigotCore_Main/src/de/steamwar/entity/REntityServer.java b/SpigotCore_Main/src/de/steamwar/entity/REntityServer.java index f40e3a9..7c60ad4 100644 --- a/SpigotCore_Main/src/de/steamwar/entity/REntityServer.java +++ b/SpigotCore_Main/src/de/steamwar/entity/REntityServer.java @@ -40,6 +40,7 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.function.BiConsumer; import java.util.function.BiFunction; import java.util.function.Consumer; +import java.util.function.Function; public class REntityServer implements Listener { @@ -48,15 +49,16 @@ public class REntityServer implements Listener { private static final HashSet emptyPlayers = new HashSet<>(0); private static final Class useEntity = Reflection.getClass("{nms.network.protocol.game}.PacketPlayInUseEntity"); - private static final Class useEntityEnumAction = Reflection.getClass("{nms.network.protocol.game}.PacketPlayInUseEntity$EnumEntityUseAction"); private static final Reflection.FieldAccessor useEntityTarget = Reflection.getField(useEntity, int.class, 0); - private static final Reflection.FieldAccessor useEntityAction = (Reflection.FieldAccessor) Reflection.getField(useEntity, useEntityEnumAction, 0); - private static final Reflection.MethodInvoker useEntityGetAction; + private static final Class useEntityEnumAction = Reflection.getClass("{nms.network.protocol.game}.PacketPlayInUseEntity$EnumEntityUseAction"); + private static final Reflection.FieldAccessor useEntityAction = Reflection.getField(useEntity, useEntityEnumAction, 0); + private static final Function getEntityAction; static { - if (useEntityEnumAction.isEnum()) { - useEntityGetAction = null; + if(Core.getVersion() > 15) { + Reflection.MethodInvoker useEntityGetAction = Reflection.getMethod(useEntity, "a"); + getEntityAction = value -> ((Enum) useEntityGetAction.invoke(value)).ordinal(); } else { - useEntityGetAction = Reflection.getMethod(useEntity, "a"); + getEntityAction = value -> ((Enum) value).ordinal(); } } @@ -68,24 +70,13 @@ public class REntityServer implements Listener { private EntityActionListener callback = null; - private BiFunction filter = (player, packet) -> { - if (callback == null) return packet; - int target = useEntityTarget.get(packet); - REntity entity = entityMap.get(target); - if (entity == null) return packet; + private final BiFunction filter = (player, packet) -> { + REntity entity = entityMap.get(useEntityTarget.get(packet)); + if (entity == null) + return packet; - Object entityAction = useEntityAction.get(packet); - int entityActionOrdinal; - if (useEntityEnumAction.isEnum()) { - entityActionOrdinal = ((Enum) entityAction).ordinal(); - } else { - entityActionOrdinal = ((Enum) useEntityGetAction.invoke(entityAction)).ordinal(); - } - - EntityAction action = entityActionOrdinal == 1 ? EntityAction.ATTACK : EntityAction.INTERACT; - Bukkit.getScheduler().runTask(Core.getInstance(), () -> { - callback.onAction(player, entity, action); - }); + EntityAction action = getEntityAction.apply(useEntityAction.get(packet)) == 1 ? EntityAction.ATTACK : EntityAction.INTERACT; + Bukkit.getScheduler().runTask(Core.getInstance(), () -> callback.onAction(player, entity, action)); return null; };