diff options
author | Spottedleaf <[email protected]> | 2022-07-03 14:55:56 -0700 |
---|---|---|
committer | Spottedleaf <[email protected]> | 2022-07-03 14:55:56 -0700 |
commit | 41647af74caed955c1fd5b38d458ee59298ae5d4 (patch) | |
tree | 33e684c98755f11816b3cfee1e54f7c3433a2a6e /patches/server/0180-Player.setPlayerProfile-API.patch | |
parent | ed79fc947a2ab46dd2d57a1c6948de27b20dbb24 (diff) | |
download | Paper-41647af74caed955c1fd5b38d458ee59298ae5d4.tar.gz Paper-41647af74caed955c1fd5b38d458ee59298ae5d4.zip |
Do not use worldgen executor for api profile completions
We cannot put blocking network I/O onto the worldgen threads,
this will crash the server if it stalls
Diffstat (limited to 'patches/server/0180-Player.setPlayerProfile-API.patch')
-rw-r--r-- | patches/server/0180-Player.setPlayerProfile-API.patch | 145 |
1 files changed, 0 insertions, 145 deletions
diff --git a/patches/server/0180-Player.setPlayerProfile-API.patch b/patches/server/0180-Player.setPlayerProfile-API.patch deleted file mode 100644 index f1bb7536de..0000000000 --- a/patches/server/0180-Player.setPlayerProfile-API.patch +++ /dev/null @@ -1,145 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Aikar <[email protected]> -Date: Sun, 18 Mar 2018 12:29:48 -0400 -Subject: [PATCH] Player.setPlayerProfile API - -This can be useful for changing name or skins after a player has logged in. - -diff --git a/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java -index 53e8804b8ee35acdc2c4b3cbe2bc409242840726..1b075033f0640433341957f6e26ebe25f18928ee 100644 ---- a/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java -+++ b/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java -@@ -394,11 +394,11 @@ public class ServerLoginPacketListenerImpl implements ServerLoginPacketListener - final org.bukkit.craftbukkit.CraftServer server = ServerLoginPacketListenerImpl.this.server.server; - - // Paper start -- com.destroystokyo.paper.profile.PlayerProfile profile = org.bukkit.Bukkit.createProfile(uniqueId, playerName); -+ com.destroystokyo.paper.profile.PlayerProfile profile = com.destroystokyo.paper.profile.CraftPlayerProfile.asBukkitMirror(ServerLoginPacketListenerImpl.this.gameProfile); - AsyncPlayerPreLoginEvent asyncEvent = new AsyncPlayerPreLoginEvent(playerName, address, uniqueId, profile); - server.getPluginManager().callEvent(asyncEvent); - profile = asyncEvent.getPlayerProfile(); -- profile.complete(); -+ profile.complete(true); // Paper - setPlayerProfileAPI - gameProfile = com.destroystokyo.paper.profile.CraftPlayerProfile.asAuthlibCopy(profile); - playerName = gameProfile.getName(); - uniqueId = gameProfile.getId(); -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 153b5602f1c5f6ef7a184fc8c9cb72523fa3fccb..fd3304d1e58f0976cd048d4a265181a0f1251c2f 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -75,6 +75,7 @@ import net.minecraft.world.entity.ai.attributes.Attributes; - import net.minecraft.world.inventory.AbstractContainerMenu; - import net.minecraft.world.level.GameType; - import net.minecraft.world.level.block.Blocks; -+import net.minecraft.world.level.biome.BiomeManager; - import net.minecraft.world.level.block.entity.SignBlockEntity; - import net.minecraft.world.level.border.BorderChangeListener; - import net.minecraft.world.level.saveddata.maps.MapDecoration; -@@ -201,11 +202,6 @@ public class CraftPlayer extends CraftHumanEntity implements Player { - return server.getPlayer(getUniqueId()) != null; - } - -- @Override -- public PlayerProfile getPlayerProfile() { -- return new CraftPlayerProfile(this.getProfile()); -- } -- - @Override - public InetSocketAddress getAddress() { - if (this.getHandle().connection == null) return null; -@@ -1479,8 +1475,15 @@ public class CraftPlayer extends CraftHumanEntity implements Player { - this.hiddenEntities.put(entity.getUniqueId(), hidingPlugins); - - // Remove this entity from the hidden player's EntityTrackerEntry -- ChunkMap tracker = ((ServerLevel) this.getHandle().level).getChunkSource().chunkMap; -+ // Paper start - Entity other = ((CraftEntity) entity).getHandle(); -+ unregisterEntity(other); -+ -+ server.getPluginManager().callEvent(new PlayerHideEntityEvent(this, entity)); -+ } -+ private void unregisterEntity(Entity other) { -+ // Paper end -+ ChunkMap tracker = ((ServerLevel) this.getHandle().level).getChunkSource().chunkMap; - ChunkMap.TrackedEntity entry = tracker.entityMap.get(other.getId()); - if (entry != null) { - entry.removePlayer(this.getHandle()); -@@ -1493,8 +1496,6 @@ public class CraftPlayer extends CraftHumanEntity implements Player { - this.getHandle().connection.send(new ClientboundPlayerInfoPacket(ClientboundPlayerInfoPacket.Action.REMOVE_PLAYER, otherPlayer)); - } - } -- -- server.getPluginManager().callEvent(new PlayerHideEntityEvent(this, entity)); - } - - @Override -@@ -1531,8 +1532,15 @@ public class CraftPlayer extends CraftHumanEntity implements Player { - } - this.hiddenEntities.remove(entity.getUniqueId()); - -- ChunkMap tracker = ((ServerLevel) this.getHandle().level).getChunkSource().chunkMap; -+ // Paper start - Entity other = ((CraftEntity) entity).getHandle(); -+ registerEntity(other); -+ -+ server.getPluginManager().callEvent(new PlayerShowEntityEvent(this, entity)); -+ } -+ private void registerEntity(Entity other) { -+ ChunkMap tracker = ((ServerLevel) this.getHandle().level).getChunkSource().chunkMap; -+ // Paper end - - if (other instanceof ServerPlayer) { - ServerPlayer otherPlayer = (ServerPlayer) other; -@@ -1543,9 +1551,51 @@ public class CraftPlayer extends CraftHumanEntity implements Player { - if (entry != null && !entry.seenBy.contains(this.getHandle().connection)) { - entry.updatePlayer(this.getHandle()); - } -+ } -+ // Paper start -+ private void reregisterPlayer(ServerPlayer player) { -+ if (!hiddenEntities.containsKey(player.getUUID())) { -+ unregisterEntity(player); -+ registerEntity(player); -+ } -+ } -+ public void setPlayerProfile(com.destroystokyo.paper.profile.PlayerProfile profile) { -+ ServerPlayer self = getHandle(); -+ self.gameProfile = com.destroystokyo.paper.profile.CraftPlayerProfile.asAuthlibCopy(profile); -+ if (!self.sentListPacket) { -+ return; -+ } -+ List<ServerPlayer> players = server.getServer().getPlayerList().players; -+ for (ServerPlayer player : players) { -+ player.getBukkitEntity().reregisterPlayer(self); -+ } -+ refreshPlayer(); -+ } -+ public com.destroystokyo.paper.profile.PlayerProfile getPlayerProfile() { -+ return new com.destroystokyo.paper.profile.CraftPlayerProfile(this).clone(); -+ } - -- server.getPluginManager().callEvent(new PlayerShowEntityEvent(this, entity)); -+ private void refreshPlayer() { -+ ServerPlayer handle = getHandle(); -+ -+ Location loc = getLocation(); -+ -+ ServerGamePacketListenerImpl connection = handle.connection; -+ reregisterPlayer(handle); -+ -+ //Respawn the player then update their position and selected slot -+ ServerLevel worldserver = handle.getLevel(); -+ connection.send(new net.minecraft.network.protocol.game.ClientboundRespawnPacket(worldserver.dimensionTypeId(), worldserver.dimension(), BiomeManager.obfuscateSeed(worldserver.getSeed()), handle.gameMode.getGameModeForPlayer(), handle.gameMode.getPreviousGameModeForPlayer(), worldserver.isDebug(), worldserver.isFlat(), true, this.getHandle().getLastDeathLocation())); -+ handle.onUpdateAbilities(); -+ connection.send(new net.minecraft.network.protocol.game.ClientboundPlayerPositionPacket(loc.getX(), loc.getY(), loc.getZ(), loc.getYaw(), loc.getPitch(), java.util.Collections.emptySet(), 0, false)); -+ net.minecraft.server.MinecraftServer.getServer().getPlayerList().sendAllPlayerInfo(handle); -+ -+ if (this.isOp()) { -+ this.setOp(false); -+ this.setOp(true); -+ } - } -+ // Paper end - - public void onEntityRemove(Entity entity) { - this.hiddenEntities.remove(entity.getUUID()); |