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 7bd90f581..1193e23c0 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 @@ -347,11 +347,17 @@ public class NMSImpl implements NMSBridge { EntityPlayer handle = (EntityPlayer) getHandle(entity); if (handle.world == null) return; - if (remove) { - handle.world.getPlayers().remove(handle); - } else if (!handle.world.getPlayers().contains(handle)) { - ((List) handle.world.getPlayers()).add(handle); + List players = handle.world.getPlayers(); + boolean changed = false; + if (remove && players.contains(handle)) { + players.remove(handle); + changed = true; + } else if (!remove && !players.contains(handle)) { + ((List) players).add(handle); + changed = true; } + if (!changed) + return; try { CHUNKMAP_UPDATE_PLAYER_STATUS.invoke(((WorldServer) handle.world).getChunkProvider().playerChunkMap, handle, !remove); 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 7c3087baa..4358b95b6 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 @@ -358,11 +358,17 @@ public class NMSImpl implements NMSBridge { EntityPlayer handle = (EntityPlayer) getHandle(entity); if (handle.world == null) return; - if (remove) { - handle.world.getPlayers().remove(handle); - } else if (!handle.world.getPlayers().contains(handle)) { - ((List) handle.world.getPlayers()).add(handle); + List players = handle.world.getPlayers(); + boolean changed = false; + if (remove && players.contains(handle)) { + players.remove(handle); + changed = true; + } else if (!remove && !players.contains(handle)) { + ((List) players).add(handle); + changed = true; } + if (!changed) + return; try { CHUNKMAP_UPDATE_PLAYER_STATUS.invoke(((WorldServer) handle.world).getChunkProvider().playerChunkMap, handle, !remove); 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 a255e5e24..d0425cc54 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 @@ -372,11 +372,17 @@ public class NMSImpl implements NMSBridge { EntityPlayer handle = (EntityPlayer) getHandle(entity); if (handle.world == null) return; - if (remove) { - handle.world.getPlayers().remove(handle); - } else if (!handle.world.getPlayers().contains(handle)) { - ((List) handle.world.getPlayers()).add(handle); + List players = handle.world.getPlayers(); + boolean changed = false; + if (remove && players.contains(handle)) { + players.remove(handle); + changed = true; + } else if (!remove && !players.contains(handle)) { + ((List) players).add(handle); + changed = true; } + if (!changed) + return; try { CHUNKMAP_UPDATE_PLAYER_STATUS.invoke(((WorldServer) handle.world).getChunkProvider().playerChunkMap, handle, !remove); 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 168184997..c47dde816 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 @@ -370,11 +370,19 @@ public class NMSImpl implements NMSBridge { ServerPlayer handle = (ServerPlayer) getHandle(entity); if (handle.level == null) return; - if (remove) { - handle.level.players().remove(handle); - } else if (!handle.level.players().contains(handle)) { - ((List) handle.level.players()).add(handle); + + List players = handle.level.players(); + boolean changed = false; + if (remove && players.contains(handle)) { + players.remove(handle); + changed = true; + } else if (!remove && !players.contains(handle)) { + ((List) players).add(handle); + changed = true; } + if (!changed) + return; + try { CHUNKMAP_UPDATE_PLAYER_STATUS.invoke( ((ServerChunkCache) ((ServerLevel) handle.level).getChunkSource()).chunkMap, handle, !remove); 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 120530e77..c87a34346 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 @@ -374,11 +374,19 @@ public class NMSImpl implements NMSBridge { ServerPlayer handle = (ServerPlayer) getHandle(entity); if (handle.level == null) return; - if (remove) { - handle.level.players().remove(handle); - } else if (!handle.level.players().contains(handle)) { - ((List) handle.level.players()).add(handle); + + List players = handle.level.players(); + boolean changed = false; + if (remove && players.contains(handle)) { + players.remove(handle); + changed = true; + } else if (!remove && !players.contains(handle)) { + ((List) players).add(handle); + changed = true; } + if (!changed) + return; + try { CHUNKMAP_UPDATE_PLAYER_STATUS.invoke(((ServerLevel) handle.level).getChunkSource().chunkMap, handle, !remove); 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 104e7b7c3..75d3d6d5b 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 @@ -410,11 +410,19 @@ public class NMSImpl implements NMSBridge { ServerPlayer handle = (ServerPlayer) getHandle(entity); if (handle.level == null) return; - if (remove) { - handle.level.players().remove(handle); - } else if (!handle.level.players().contains(handle)) { - ((List) handle.level.players()).add(handle); + + List players = handle.level.players(); + boolean changed = false; + if (remove && players.contains(handle)) { + players.remove(handle); + changed = true; + } else if (!remove && !players.contains(handle)) { + ((List) players).add(handle); + changed = true; } + if (!changed) + return; + try { CHUNKMAP_UPDATE_PLAYER_STATUS.invoke(((ServerLevel) handle.level).getChunkSource().chunkMap, handle, !remove); diff --git a/v1_20_R2/src/main/java/net/citizensnpcs/nms/v1_20_R2/util/NMSImpl.java b/v1_20_R2/src/main/java/net/citizensnpcs/nms/v1_20_R2/util/NMSImpl.java index b927f060d..96378f59d 100644 --- a/v1_20_R2/src/main/java/net/citizensnpcs/nms/v1_20_R2/util/NMSImpl.java +++ b/v1_20_R2/src/main/java/net/citizensnpcs/nms/v1_20_R2/util/NMSImpl.java @@ -401,11 +401,19 @@ public class NMSImpl implements NMSBridge { ServerPlayer handle = (ServerPlayer) getHandle(entity); if (handle.level() == null) return; - if (remove) { - handle.level().players().remove(handle); - } else if (!handle.level().players().contains(handle)) { - ((List) handle.level().players()).add(handle); + + List players = handle.level().players(); + boolean changed = false; + if (remove && players.contains(handle)) { + players.remove(handle); + changed = true; + } else if (!remove && !players.contains(handle)) { + ((List) players).add(handle); + changed = true; } + if (!changed) + return; + try { CHUNKMAP_UPDATE_PLAYER_STATUS.invoke(((ServerLevel) handle.level()).getChunkSource().chunkMap, handle, !remove);