aboutsummaryrefslogtreecommitdiffhomepage
path: root/patches/server/0180-Player.setPlayerProfile-API.patch
diff options
context:
space:
mode:
authorSpottedleaf <[email protected]>2022-07-03 14:55:56 -0700
committerSpottedleaf <[email protected]>2022-07-03 14:55:56 -0700
commit41647af74caed955c1fd5b38d458ee59298ae5d4 (patch)
tree33e684c98755f11816b3cfee1e54f7c3433a2a6e /patches/server/0180-Player.setPlayerProfile-API.patch
parented79fc947a2ab46dd2d57a1c6948de27b20dbb24 (diff)
downloadPaper-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.patch145
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());