From 9ae1f2a102c740bf3ff54f6397741196bfdd8f53 Mon Sep 17 00:00:00 2001 From: Aikar 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/EntityHuman.java b/src/main/java/net/minecraft/server/EntityHuman.java index 4b82e43a8..35fde8b23 100644 --- a/src/main/java/net/minecraft/server/EntityHuman.java +++ b/src/main/java/net/minecraft/server/EntityHuman.java @@ -59,7 +59,7 @@ public abstract class EntityHuman extends EntityLiving { protected int bS; protected float bT = 0.02F; private int f; - private final GameProfile g; + private GameProfile g; public void setProfile(GameProfile profile) { this.g = profile; } // Paper - OBFHELPER private ItemStack bV; private final ItemCooldown bW; @Nullable diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java index 21631c588..87e31cf0d 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -1,6 +1,8 @@ package org.bukkit.craftbukkit.entity; import com.destroystokyo.paper.Title; +import com.destroystokyo.paper.profile.CraftPlayerProfile; +import com.destroystokyo.paper.profile.PlayerProfile; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableSet; import com.google.common.io.BaseEncoding; @@ -1092,8 +1094,14 @@ public class CraftPlayer extends CraftHumanEntity implements Player { hiddenPlayers.put(player.getUniqueId(), hidingPlugins); // Remove this player from the hidden player's EntityTrackerEntry - EntityTracker tracker = ((WorldServer) entity.world).tracker; EntityPlayer other = ((CraftPlayer) player).getHandle(); + // Paper start + unregisterPlayer(other); + } + private void unregisterPlayer(EntityPlayer other) { + EntityTracker tracker = ((WorldServer) entity.world).tracker; + // Paper end + EntityTrackerEntry entry = tracker.trackedEntities.get(other.getId()); if (entry != null) { entry.clear(getHandle()); @@ -1134,8 +1142,13 @@ public class CraftPlayer extends CraftHumanEntity implements Player { } hiddenPlayers.remove(player.getUniqueId()); - EntityTracker tracker = ((WorldServer) entity.world).tracker; + // Paper start EntityPlayer other = ((CraftPlayer) player).getHandle(); + registerPlayer(other); + } + private void registerPlayer(EntityPlayer other) { + EntityTracker tracker = ((WorldServer) entity.world).tracker; + // Paper end getHandle().playerConnection.sendPacket(new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.ADD_PLAYER, other)); @@ -1144,6 +1157,25 @@ public class CraftPlayer extends CraftHumanEntity implements Player { entry.updatePlayer(getHandle()); } } + // Paper start + private void reregisterPlayer(EntityPlayer player) { + if (!hiddenPlayers.containsKey(player.getUniqueID())) { + unregisterPlayer(player); + registerPlayer(player); + } + } + public void setPlayerProfile(PlayerProfile profile) { + EntityPlayer self = getHandle(); + self.setProfile(CraftPlayerProfile.asAuthlibCopy(profile)); + List players = server.getServer().getPlayerList().players; + for (EntityPlayer player : players) { + player.getBukkitEntity().reregisterPlayer(self); + } + } + public PlayerProfile getPlayerProfile() { + return CraftPlayerProfile.asBukkitCopy(getHandle().getProfile()); + } + // Paper end public void removeDisconnectingPlayer(Player player) { hiddenPlayers.remove(player.getUniqueId()); -- 2.16.2