Skip to content

Commit

Permalink
Fix inconsistencies with players and the player list (#1298)
Browse files Browse the repository at this point in the history
* 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
  • Loading branch information
Camotoy authored Sep 16, 2020
1 parent f9c1d3f commit 3c1d4aa
Show file tree
Hide file tree
Showing 3 changed files with 6 additions and 14 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@ public void spawnEntity(GeyserSession session) {
}

public void sendPlayer(GeyserSession session) {
if(session.getEntityCache().getPlayerEntity(uuid) == null)
if (session.getEntityCache().getPlayerEntity(uuid) == null)
return;

if (session.getUpstream().isInitialized() && session.getEntityCache().getEntityByGeyserId(geyserId) == null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,9 +76,6 @@ public boolean removeEntity(Entity entity, boolean force) {
if (entity != null && entity.isValid() && (force || entity.despawnEntity(session))) {
long geyserId = entityIdTranslations.remove(entity.getEntityId());
entities.remove(geyserId);
if (entity.is(PlayerEntity.class)) {
playerEntities.remove(entity.as(PlayerEntity.class).getUuid());
}
return true;
}
return false;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,18 +88,13 @@ public void translate(ServerPlayerListEntryPacket packet, GeyserSession session)
break;
case REMOVE_PLAYER:
PlayerEntity entity = session.getEntityCache().getPlayerEntity(entry.getProfile().getId());
if (entity != null && entity.isValid()) {
// remove from tablist but player entity is still there
if (entity != null) {
// 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);
} else {
if (entity == null) {
// just remove it from caching
session.getEntityCache().removePlayerEntity(entry.getProfile().getId());
} else {
entity.setPlayerList(false);
session.getEntityCache().removeEntity(entity, false);
}
}
// As the player entity is no longer present, we can remove the entry
session.getEntityCache().removePlayerEntity(entry.getProfile().getId());
if (entity == session.getPlayerEntity()) {
// If removing ourself we use our AuthData UUID
translate.getEntries().add(new PlayerListPacket.Entry(session.getAuthData().getUUID()));
Expand Down

0 comments on commit 3c1d4aa

Please sign in to comment.