Don't call chunkmap status updates if the playerlist wasn't modified

This commit is contained in:
fullwall 2023-11-06 22:01:51 +08:00
parent 15ee73f944
commit 7a229def7d
7 changed files with 78 additions and 28 deletions

View File

@ -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<? extends EntityHuman> 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);

View File

@ -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<? extends EntityHuman> 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);

View File

@ -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<? extends EntityHuman> 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);

View File

@ -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<? extends net.minecraft.world.entity.player.Player> 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);

View File

@ -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<? extends net.minecraft.world.entity.player.Player> 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);

View File

@ -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<? extends net.minecraft.world.entity.player.Player> 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);

View File

@ -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<? extends net.minecraft.world.entity.player.Player> 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);