diff options
author | Nassim Jahnke <[email protected]> | 2024-01-23 15:43:48 +0100 |
---|---|---|
committer | Nassim Jahnke <[email protected]> | 2024-01-23 15:57:42 +0100 |
commit | e66037960b02c7b22bbed75318904c55a4177977 (patch) | |
tree | d0b197f87dbd7c547018af9defdb33691ddce30b /patches/server/0180-Player.setPlayerProfile-API.patch | |
parent | 52619e7a2162d0feb8f142227fe8ad34e21ce860 (diff) | |
download | Paper-e66037960b02c7b22bbed75318904c55a4177977.tar.gz Paper-e66037960b02c7b22bbed75318904c55a4177977.zip |
[ci skip] Move some disruptive patches back
Diffstat (limited to 'patches/server/0180-Player.setPlayerProfile-API.patch')
-rw-r--r-- | patches/server/0180-Player.setPlayerProfile-API.patch | 239 |
1 files changed, 0 insertions, 239 deletions
diff --git a/patches/server/0180-Player.setPlayerProfile-API.patch b/patches/server/0180-Player.setPlayerProfile-API.patch deleted file mode 100644 index 932856ea66..0000000000 --- a/patches/server/0180-Player.setPlayerProfile-API.patch +++ /dev/null @@ -1,239 +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. - -== AT == -public-f net.minecraft.world.entity.player.Player gameProfile - -diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 9c0440a6e3768ca6300e128da7f1b11a96f10f91..c1c9076be05cd4b0b19d16aabbf0320c2531cca1 100644 ---- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -1468,7 +1468,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl - this.internalTeleport(dest.getX(), dest.getY(), dest.getZ(), dest.getYaw(), dest.getPitch(), Collections.emptySet()); - } - -- private void internalTeleport(double d0, double d1, double d2, float f, float f1, Set<RelativeMovement> set) { -+ public void internalTeleport(double d0, double d1, double d2, float f, float f1, Set<RelativeMovement> set) { // Paper - // CraftBukkit start - if (Float.isNaN(f)) { - f = 0; -diff --git a/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java -index 58d97fce07ad8f786940c3f5e74e9aaeabe8d261..dd4e97ff4c8fb2d2f251713271f5ac493574fcd9 100644 ---- a/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java -+++ b/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java -@@ -295,11 +295,11 @@ public class ServerLoginPacketListenerImpl implements ServerLoginPacketListener, - - // Paper start - Add more fields to AsyncPlayerPreLoginEvent - final java.net.InetAddress rawAddress = ((java.net.InetSocketAddress) this.connection.channel.remoteAddress()).getAddress(); -- com.destroystokyo.paper.profile.PlayerProfile profile = org.bukkit.Bukkit.createProfile(uniqueId, playerName); -+ com.destroystokyo.paper.profile.PlayerProfile profile = com.destroystokyo.paper.profile.CraftPlayerProfile.asBukkitMirror(gameprofile); // Paper - setPlayerProfileAPI - AsyncPlayerPreLoginEvent asyncEvent = new AsyncPlayerPreLoginEvent(playerName, address, rawAddress, uniqueId, profile, this.connection.hostname); - 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/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index 6e0a21935f9d5f35cbce72b32e0a89bb636804e2..782cc6d910efe5bc5498d0083afab42fad6c4fa2 100644 ---- a/src/main/java/net/minecraft/server/players/PlayerList.java -+++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -862,10 +862,16 @@ public abstract class PlayerList { - } - - public void sendPlayerPermissionLevel(ServerPlayer player) { -+ // Paper start - avoid recalculating permissions if possible -+ this.sendPlayerPermissionLevel(player, true); -+ } -+ -+ public void sendPlayerPermissionLevel(ServerPlayer player, boolean recalculatePermissions) { -+ // Paper end - avoid recalculating permissions if possible - GameProfile gameprofile = player.getGameProfile(); - int i = this.server.getProfilePermissions(gameprofile); - -- this.sendPlayerPermissionLevel(player, i); -+ this.sendPlayerPermissionLevel(player, i, recalculatePermissions); // Paper - avoid recalculating permissions if possible - } - - public void tick() { -diff --git a/src/main/java/org/bukkit/craftbukkit/CraftOfflinePlayer.java b/src/main/java/org/bukkit/craftbukkit/CraftOfflinePlayer.java -index 477d3245facb5ae59c786d4f696f64226cb540a6..e8490a58dd4d9bc39a5bb2f9fc109526e031b971 100644 ---- a/src/main/java/org/bukkit/craftbukkit/CraftOfflinePlayer.java -+++ b/src/main/java/org/bukkit/craftbukkit/CraftOfflinePlayer.java -@@ -81,8 +81,8 @@ public class CraftOfflinePlayer implements OfflinePlayer, ConfigurationSerializa - } - - @Override -- public PlayerProfile getPlayerProfile() { -- return new CraftPlayerProfile(this.profile); -+ public com.destroystokyo.paper.profile.PlayerProfile getPlayerProfile() { // Paper -+ return new com.destroystokyo.paper.profile.CraftPlayerProfile(this.profile); // Paper - } - - public Server getServer() { -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 8dd7e875d0e2ac3c10cce9b7045b5dbc742e9fb7..d296e1687fd596d6674e18b316603d08cd9057df 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -272,11 +272,6 @@ public class CraftPlayer extends CraftHumanEntity implements Player { - return this.server.getPlayer(this.getUniqueId()) != null; - } - -- @Override -- public PlayerProfile getPlayerProfile() { -- return new CraftPlayerProfile(this.getProfile()); -- } -- - @Override - public InetSocketAddress getAddress() { - if (this.getHandle().connection == null) return null; -@@ -1693,8 +1688,15 @@ public class CraftPlayer extends CraftHumanEntity implements Player { - - private void untrackAndHideEntity(org.bukkit.entity.Entity entity) { - // 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()); -@@ -1707,8 +1709,6 @@ public class CraftPlayer extends CraftHumanEntity implements Player { - this.getHandle().connection.send(new ClientboundPlayerInfoRemovePacket(List.of(otherPlayer.getUUID()))); - } - } -- -- this.server.getPluginManager().callEvent(new PlayerHideEntityEvent(this, entity)); - } - - void resetAndHideEntity(org.bukkit.entity.Entity entity) { -@@ -1773,12 +1773,25 @@ public class CraftPlayer extends CraftHumanEntity implements Player { - } - - private void trackAndShowEntity(org.bukkit.entity.Entity entity) { -+ // Paper start - uuid override -+ this.trackAndShowEntity(entity, null); -+ } -+ private void trackAndShowEntity(org.bukkit.entity.Entity entity, final @Nullable UUID uuidOverride) { -+ // Paper end - ChunkMap tracker = ((ServerLevel) this.getHandle().level()).getChunkSource().chunkMap; - Entity other = ((CraftEntity) entity).getHandle(); - - if (other instanceof ServerPlayer) { - ServerPlayer otherPlayer = (ServerPlayer) other; -+ // Paper start - uuid override -+ UUID original = null; -+ if (uuidOverride != null) { -+ original = otherPlayer.getUUID(); -+ otherPlayer.setUUID(uuidOverride); -+ } -+ // Paper end - this.getHandle().connection.send(ClientboundPlayerInfoUpdatePacket.createPlayerInitializing(List.of(otherPlayer))); -+ if (original != null) otherPlayer.setUUID(original); // Paper - uuid override - } - - ChunkMap.TrackedEntity entry = tracker.entityMap.get(other.getId()); -@@ -1788,6 +1801,39 @@ public class CraftPlayer extends CraftHumanEntity implements Player { - - this.server.getPluginManager().callEvent(new PlayerShowEntityEvent(this, entity)); - } -+ // Paper start -+ @Override -+ public void setPlayerProfile(com.destroystokyo.paper.profile.PlayerProfile profile) { -+ ServerPlayer self = this.getHandle(); -+ GameProfile gameProfile = com.destroystokyo.paper.profile.CraftPlayerProfile.asAuthlibCopy(profile); -+ if (!self.sentListPacket) { -+ self.gameProfile = gameProfile; -+ return; -+ } -+ List<ServerPlayer> players = this.server.getServer().getPlayerList().players; -+ // First unregister the player for all players with the OLD game profile -+ for (ServerPlayer player : players) { -+ CraftPlayer bukkitPlayer = player.getBukkitEntity(); -+ if (bukkitPlayer.canSee(this)) { -+ bukkitPlayer.unregisterEntity(self); -+ } -+ } -+ -+ // Set the game profile here, we should have unregistered the entity via iterating all player entities above. -+ self.gameProfile = gameProfile; -+ -+ // Re-register the game profile for all players -+ for (ServerPlayer player : players) { -+ CraftPlayer bukkitPlayer = player.getBukkitEntity(); -+ if (bukkitPlayer.canSee(this)) { -+ bukkitPlayer.trackAndShowEntity(self.getBukkitEntity(), gameProfile.getId()); -+ } -+ } -+ -+ // Refresh misc player things AFTER sending game profile -+ this.refreshPlayer(); -+ } -+ // Paper end - - void resetAndShowEntity(org.bukkit.entity.Entity entity) { - // SPIGOT-7312: Can't show/hide self -@@ -1799,6 +1845,34 @@ public class CraftPlayer extends CraftHumanEntity implements Player { - this.trackAndShowEntity(entity); - } - } -+ // Paper start -+ public com.destroystokyo.paper.profile.PlayerProfile getPlayerProfile() { -+ return new com.destroystokyo.paper.profile.CraftPlayerProfile(this).clone(); -+ } -+ -+ private void refreshPlayer() { -+ ServerPlayer handle = this.getHandle(); -+ Location loc = this.getLocation(); -+ -+ ServerGamePacketListenerImpl connection = handle.connection; -+ -+ //Respawn the player then update their position and selected slot -+ ServerLevel worldserver = handle.serverLevel(); -+ connection.send(new net.minecraft.network.protocol.game.ClientboundRespawnPacket(handle.createCommonSpawnInfo(worldserver), net.minecraft.network.protocol.game.ClientboundRespawnPacket.KEEP_ALL_DATA)); -+ handle.onUpdateAbilities(); -+ connection.internalTeleport(loc.getX(), loc.getY(), loc.getZ(), loc.getYaw(), loc.getPitch(), java.util.Collections.emptySet()); -+ net.minecraft.server.players.PlayerList playerList = handle.server.getPlayerList(); -+ playerList.sendPlayerPermissionLevel(handle, false); -+ playerList.sendLevelInfo(handle, worldserver); -+ playerList.sendAllPlayerInfo(handle); -+ -+ // Resend their XP and effects because the respawn packet resets it -+ connection.send(new net.minecraft.network.protocol.game.ClientboundSetExperiencePacket(handle.experienceProgress, handle.totalExperience, handle.experienceLevel)); -+ for (net.minecraft.world.effect.MobEffectInstance mobEffect : handle.getActiveEffects()) { -+ connection.send(new net.minecraft.network.protocol.game.ClientboundUpdateMobEffectPacket(handle.getId(), mobEffect)); -+ } -+ } -+ // Paper end - - public void onEntityRemove(Entity entity) { - this.invertedVisibilityEntities.remove(entity.getUUID()); -diff --git a/src/main/java/org/bukkit/craftbukkit/util/Commodore.java b/src/main/java/org/bukkit/craftbukkit/util/Commodore.java -index 457860fa9babe542347608a3fc11ad5d75e5d135..6a661bbae8bc35a4c3b4bb7e86dd77a7575fdd97 100644 ---- a/src/main/java/org/bukkit/craftbukkit/util/Commodore.java -+++ b/src/main/java/org/bukkit/craftbukkit/util/Commodore.java -@@ -277,6 +277,13 @@ public class Commodore { - return; - } - -+ // Paper start - Rewrite plugins -+ if ((owner.equals("org/bukkit/OfflinePlayer") || owner.equals("org/bukkit/entity/Player")) && name.equals("getPlayerProfile") && desc.equals("()Lorg/bukkit/profile/PlayerProfile;")) { -+ super.visitMethodInsn(opcode, owner, name, "()Lcom/destroystokyo/paper/profile/PlayerProfile;", itf); -+ return; -+ } -+ // Paper end -+ - if (modern) { - if (owner.equals("org/bukkit/Material") || (instantiatedMethodType != null && instantiatedMethodType.getDescriptor().startsWith("(Lorg/bukkit/Material;)"))) { - switch (name) { |