Merge pull request #461 from Moulberry/master

Fix FakePlayers not being able to re-spawn, fix entities being immediately unloaded after switching dimensions
This commit is contained in:
TheMode 2021-09-13 09:29:45 +02:00 committed by GitHub
commit f307e81f04
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 10 additions and 3 deletions

View File

@ -546,21 +546,27 @@ public class Player extends LivingEntity implements CommandSender, Localizable,
if (!firstSpawn) {
// Player instance changed, clear current viewable collections
previousChunks.forEach(chunk -> chunk.removeViewer(this));
//TODO: entity#removeViewer sends a packet for each removed entity
//Sending destroy entity packets is not necessary when the dimension changes
//and, potentially, this could also be rewritten to send only a single DestroyEntitiesPacket
//with the list of all destroyed entities
this.viewableEntities.forEach(entity -> entity.removeViewer(this));
}
super.setInstance(instance, spawnPosition);
if (dimensionChange) {
sendDimension(instance.getDimensionType());
}
super.setInstance(instance, spawnPosition);
if (updateChunks) {
refreshVisibleChunks();
}
synchronizePosition(true); // So the player doesn't get stuck
if (dimensionChange || firstSpawn) {
synchronizePosition(true); // So the player doesn't get stuck
this.inventory.update();
}

View File

@ -134,6 +134,7 @@ public class FakePlayer extends Player implements NavigableEntity {
protected boolean addViewer0(@NotNull Player player) {
final boolean result = super.addViewer0(player);
if (result) {
player.getPlayerConnection().sendPacket(getAddPlayerToList());
handleTabList(player.getPlayerConnection());
}
return result;