diff --git a/main/src/main/java/net/citizensnpcs/util/NMS.java b/main/src/main/java/net/citizensnpcs/util/NMS.java index 32d58c422..01d79a6eb 100644 --- a/main/src/main/java/net/citizensnpcs/util/NMS.java +++ b/main/src/main/java/net/citizensnpcs/util/NMS.java @@ -728,12 +728,7 @@ public class NMS { } public static Runnable playerTicker(Player entity) { - Runnable tick = BRIDGE.playerTicker(entity); - return () -> { - if (entity.isValid()) { - tick.run(); - } - }; + return BRIDGE.playerTicker(entity instanceof NPCHolder ? ((NPCHolder) entity).getNPC() : null, entity); } public static void registerEntityClass(Class clazz) { diff --git a/main/src/main/java/net/citizensnpcs/util/NMSBridge.java b/main/src/main/java/net/citizensnpcs/util/NMSBridge.java index 35f908256..70a072c13 100644 --- a/main/src/main/java/net/citizensnpcs/util/NMSBridge.java +++ b/main/src/main/java/net/citizensnpcs/util/NMSBridge.java @@ -161,7 +161,7 @@ public interface NMSBridge { public void playAnimation(PlayerAnimation animation, Player player, Iterable to); - public Runnable playerTicker(Player entity); + public Runnable playerTicker(NPC npc, Player entity); public void registerEntityClass(Class clazz); 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 ff520a4bc..e9b8fd48d 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 @@ -965,8 +965,10 @@ public class NMSImpl implements NMSBridge { } @Override - public Runnable playerTicker(Player next) { + public Runnable playerTicker(NPC npc, Player next) { return () -> { + if (!next.isValid()) + return; EntityPlayer entity = (EntityPlayer) getHandle(next); boolean removeFromPlayerList = ((NPCHolder) entity).getNPC().data().get("removefromplayerlist", Setting.REMOVE_PLAYERS_FROM_PLAYER_LIST.asBoolean()); 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 382805f46..bc15a9c3d 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 @@ -1018,8 +1018,10 @@ public class NMSImpl implements NMSBridge { } @Override - public Runnable playerTicker(Player next) { + public Runnable playerTicker(NPC npc, Player next) { return () -> { + if (!next.isValid()) + return; EntityPlayer entity = (EntityPlayer) getHandle(next); boolean removeFromPlayerList = ((NPCHolder) entity).getNPC().data().get("removefromplayerlist", Setting.REMOVE_PLAYERS_FROM_PLAYER_LIST.asBoolean()); 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 df3833594..132f0e9ef 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 @@ -1025,8 +1025,10 @@ public class NMSImpl implements NMSBridge { } @Override - public Runnable playerTicker(Player next) { + public Runnable playerTicker(NPC npc, Player next) { return () -> { + if (!next.isValid()) + return; EntityPlayer entity = (EntityPlayer) getHandle(next); boolean removeFromPlayerList = ((NPCHolder) entity).getNPC().data().get("removefromplayerlist", Setting.REMOVE_PLAYERS_FROM_PLAYER_LIST.asBoolean()); 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 169ad66b7..1c9934e1c 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 @@ -1061,8 +1061,10 @@ public class NMSImpl implements NMSBridge { } @Override - public Runnable playerTicker(Player next) { + public Runnable playerTicker(NPC npc, Player next) { return () -> { + if (!next.isValid()) + return; EntityPlayer entity = (EntityPlayer) getHandle(next); boolean removeFromPlayerList = ((NPCHolder) entity).getNPC().data().get("removefromplayerlist", Setting.REMOVE_PLAYERS_FROM_PLAYER_LIST.asBoolean()); 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 221ee7e1b..38538705b 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 @@ -1130,8 +1130,16 @@ public class NMSImpl implements NMSBridge { } @Override - public Runnable playerTicker(Player entity) { - return ((EntityPlayer) getHandle(entity))::playerTick; + public Runnable playerTicker(NPC npc, Player entity) { + EntityPlayer player = (EntityPlayer) getHandle(entity); + return () -> { + if (!entity.isValid()) + return; + if (npc != null && npc.useMinecraftAI()) { + player.movementTick(); + } + player.playerTick(); + }; } @Override 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 328a43afb..d1a40d7f7 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 @@ -1147,8 +1147,16 @@ public class NMSImpl implements NMSBridge { } @Override - public Runnable playerTicker(Player entity) { - return ((EntityPlayer) getHandle(entity))::playerTick; + public Runnable playerTicker(NPC npc, Player entity) { + EntityPlayer player = (EntityPlayer) getHandle(entity); + return () -> { + if (!entity.isValid()) + return; + if (npc != null && npc.useMinecraftAI()) { + player.movementTick(); + } + player.playerTick(); + }; } @Override 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 b41d26eea..7bc479b71 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 @@ -1171,8 +1171,16 @@ public class NMSImpl implements NMSBridge { } @Override - public Runnable playerTicker(Player entity) { - return ((EntityPlayer) getHandle(entity))::playerTick; + public Runnable playerTicker(NPC npc, Player entity) { + EntityPlayer player = (EntityPlayer) getHandle(entity); + return () -> { + if (!entity.isValid()) + return; + if (npc != null && npc.useMinecraftAI()) { + player.movementTick(); + } + player.playerTick(); + }; } @Override 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 3ac25ce1c..e677030f8 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 @@ -1177,8 +1177,16 @@ public class NMSImpl implements NMSBridge { } @Override - public Runnable playerTicker(Player entity) { - return ((ServerPlayer) getHandle(entity))::doTick; + public Runnable playerTicker(NPC npc, Player entity) { + ServerPlayer player = (ServerPlayer) getHandle(entity); + return () -> { + if (!entity.isValid()) + return; + if (npc != null && npc.useMinecraftAI()) { + player.aiStep(); + } + player.doTick(); + }; } @Override 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 944d59d40..56a2a53ae 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 @@ -1186,8 +1186,16 @@ public class NMSImpl implements NMSBridge { } @Override - public Runnable playerTicker(Player entity) { - return ((ServerPlayer) getHandle(entity))::doTick; + public Runnable playerTicker(NPC npc, Player entity) { + ServerPlayer player = (ServerPlayer) getHandle(entity); + return () -> { + if (!entity.isValid()) + return; + if (npc != null && npc.useMinecraftAI()) { + player.aiStep(); + } + player.doTick(); + }; } @Override 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 b2af47e1d..d0334db9f 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 @@ -1313,8 +1313,16 @@ public class NMSImpl implements NMSBridge { } @Override - public Runnable playerTicker(Player entity) { - return ((ServerPlayer) getHandle(entity))::doTick; + public Runnable playerTicker(NPC npc, Player entity) { + ServerPlayer player = (ServerPlayer) getHandle(entity); + return () -> { + if (!entity.isValid()) + return; + if (npc != null && npc.useMinecraftAI()) { + player.aiStep(); + } + player.doTick(); + }; } @Override 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 65eb0806d..1b70513ac 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 @@ -1285,8 +1285,16 @@ public class NMSImpl implements NMSBridge { } @Override - public Runnable playerTicker(Player entity) { - return ((ServerPlayer) getHandle(entity))::doTick; + public Runnable playerTicker(NPC npc, Player entity) { + ServerPlayer player = (ServerPlayer) getHandle(entity); + return () -> { + if (!entity.isValid()) + return; + if (npc != null && npc.useMinecraftAI()) { + player.aiStep(); + } + player.doTick(); + }; } @Override 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 690c1466b..c2762f57f 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 @@ -901,12 +901,17 @@ public class NMSImpl implements NMSBridge { } @Override - public Runnable playerTicker(Player next) { + public Runnable playerTicker(NPC npc, Player next) { return () -> { + if (!next.isValid()) + return; EntityPlayer entity = (EntityPlayer) getHandle(next); boolean removeFromPlayerList = ((NPCHolder) entity).getNPC().data().get("removefromplayerlist", Setting.REMOVE_PLAYERS_FROM_PLAYER_LIST.asBoolean()); entity.l(); + if (npc != null && npc.useMinecraftAI()) { + entity.m(); + } if (!removeFromPlayerList) return; if (!entity.dead) {