3
0
Mirror von https://github.com/GeyserMC/Geyser.git synchronisiert 2024-12-28 09:00:11 +01:00

Fix inconsistencies with players and the player list (#1298)

* Fix inconsistencies with players and the player list

This commit makes the player list entry packet control the player cache, fixing inconsistencies that appeared when removing the override on despawning the player.

* Update comments
Dieser Commit ist enthalten in:
Camotoy 2020-09-16 00:18:18 -04:00 committet von GitHub
Ursprung f9c1d3f218
Commit 3c1d4aae93
Es konnte kein GPG-Schlüssel zu dieser Signatur gefunden werden
GPG-Schlüssel-ID: 4AEE18F83AFDEB23
3 geänderte Dateien mit 6 neuen und 14 gelöschten Zeilen

Datei anzeigen

@ -76,9 +76,6 @@ public class EntityCache {
if (entity != null && entity.isValid() && (force || entity.despawnEntity(session))) { if (entity != null && entity.isValid() && (force || entity.despawnEntity(session))) {
long geyserId = entityIdTranslations.remove(entity.getEntityId()); long geyserId = entityIdTranslations.remove(entity.getEntityId());
entities.remove(geyserId); entities.remove(geyserId);
if (entity.is(PlayerEntity.class)) {
playerEntities.remove(entity.as(PlayerEntity.class).getUuid());
}
return true; return true;
} }
return false; return false;

Datei anzeigen

@ -88,18 +88,13 @@ public class JavaPlayerListEntryTranslator extends PacketTranslator<ServerPlayer
break; break;
case REMOVE_PLAYER: case REMOVE_PLAYER:
PlayerEntity entity = session.getEntityCache().getPlayerEntity(entry.getProfile().getId()); PlayerEntity entity = session.getEntityCache().getPlayerEntity(entry.getProfile().getId());
if (entity != null && entity.isValid()) { if (entity != null) {
// remove from tablist but player entity is still there // Just remove the entity's player list status
// Don't despawn the entity - the Java server will also take care of that.
entity.setPlayerList(false); entity.setPlayerList(false);
} else { }
if (entity == null) { // As the player entity is no longer present, we can remove the entry
// just remove it from caching
session.getEntityCache().removePlayerEntity(entry.getProfile().getId()); session.getEntityCache().removePlayerEntity(entry.getProfile().getId());
} else {
entity.setPlayerList(false);
session.getEntityCache().removeEntity(entity, false);
}
}
if (entity == session.getPlayerEntity()) { if (entity == session.getPlayerEntity()) {
// If removing ourself we use our AuthData UUID // If removing ourself we use our AuthData UUID
translate.getEntries().add(new PlayerListPacket.Entry(session.getAuthData().getUUID())); translate.getEntries().add(new PlayerListPacket.Entry(session.getAuthData().getUUID()));