From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Aikar <aikar@aikar.co>
Date: Sun, 18 Mar 2018 12:28:55 -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/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java
index ce20f1231b7998f8c4e1bf85d815661984c4f45c..52123fd754530a9a5a22c81cc5ad763d3e2355b2 100644
--- a/src/main/java/org/bukkit/Bukkit.java
+++ b/src/main/java/org/bukkit/Bukkit.java
@@ -1377,8 +1377,10 @@ public final class Bukkit {
      * @return the new PlayerProfile
      * @throws IllegalArgumentException if both the unique id is
      * <code>null</code> and the name is <code>null</code> or blank
+     * @deprecated use {@link #createProfile(UUID, String)}
      */
     @NotNull
+    @Deprecated(since = "1.18.1") // Paper
     public static PlayerProfile createPlayerProfile(@Nullable UUID uniqueId, @Nullable String name) {
         return server.createPlayerProfile(uniqueId, name);
     }
@@ -1389,8 +1391,10 @@ public final class Bukkit {
      * @param uniqueId the unique id
      * @return the new PlayerProfile
      * @throws IllegalArgumentException if the unique id is <code>null</code>
+     * @deprecated use {@link #createProfile(UUID)}
      */
     @NotNull
+    @Deprecated(since = "1.18.1") // Paper
     public static PlayerProfile createPlayerProfile(@NotNull UUID uniqueId) {
         return server.createPlayerProfile(uniqueId);
     }
@@ -1402,8 +1406,10 @@ public final class Bukkit {
      * @return the new PlayerProfile
      * @throws IllegalArgumentException if the name is <code>null</code> or
      * blank
+     * @deprecated use {@link #createProfile(String)}
      */
     @NotNull
+    @Deprecated(since = "1.18.1") // Paper
     public static PlayerProfile createPlayerProfile(@NotNull String name) {
         return server.createPlayerProfile(name);
     }
diff --git a/src/main/java/org/bukkit/OfflinePlayer.java b/src/main/java/org/bukkit/OfflinePlayer.java
index ff59479f4782ac7726504aab239de79fdc840cde..abbf3d6f11350ab2dd47a277771d9f46221036bd 100644
--- a/src/main/java/org/bukkit/OfflinePlayer.java
+++ b/src/main/java/org/bukkit/OfflinePlayer.java
@@ -59,7 +59,7 @@ public interface OfflinePlayer extends ServerOperator, AnimalTamer, Configuratio
      * @return the player's profile
      */
     @NotNull
-    PlayerProfile getPlayerProfile();
+    com.destroystokyo.paper.profile.PlayerProfile getPlayerProfile(); // Paper
 
     /**
      * Checks if this player has had their profile banned.
diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java
index d699dd95dfdcebd22ab7e718b181ffcffe0c919e..ce29d2d3c2fd06a09eba2147c92b3387f0a81153 100644
--- a/src/main/java/org/bukkit/Server.java
+++ b/src/main/java/org/bukkit/Server.java
@@ -1164,8 +1164,10 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
      * @return the new PlayerProfile
      * @throws IllegalArgumentException if both the unique id is
      * <code>null</code> and the name is <code>null</code> or blank
+     * @deprecated use {@link #createProfile(UUID, String)}
      */
     @NotNull
+    @Deprecated(since = "1.18.1") // Paper
     PlayerProfile createPlayerProfile(@Nullable UUID uniqueId, @Nullable String name);
 
     /**
@@ -1174,8 +1176,10 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
      * @param uniqueId the unique id
      * @return the new PlayerProfile
      * @throws IllegalArgumentException if the unique id is <code>null</code>
+     * @deprecated use {@link #createProfile(UUID)}
      */
     @NotNull
+    @Deprecated(since = "1.18.1") // Paper
     PlayerProfile createPlayerProfile(@NotNull UUID uniqueId);
 
     /**
@@ -1185,8 +1189,10 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
      * @return the new PlayerProfile
      * @throws IllegalArgumentException if the name is <code>null</code> or
      * blank
+     * @deprecated use {@link #createProfile(String)}
      */
     @NotNull
+    @Deprecated(since = "1.18.1") // Paper
     PlayerProfile createPlayerProfile(@NotNull String name);
 
     /**
diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
index 77a740fb62a9c442c9b67943f8775a824cf2617f..b427a37d1b382037e946e5a899e571c3aebe5ba9 100644
--- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java
@@ -3114,6 +3114,26 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
     }
     // Paper end
 
+    // Paper start - Player Profile API
+    /**
+     * Gets a copy of this players profile
+     *
+     * @return The players profile object
+     */
+    com.destroystokyo.paper.profile.@NotNull PlayerProfile getPlayerProfile();
+
+    /**
+     * Changes the PlayerProfile for this player. This will cause this player
+     * to be re-registered to all clients that can currently see this player.
+     * <p>
+     * After executing this method, the player {@link java.util.UUID} won't
+     * be swapped, only their name and profile properties.
+     *
+     * @param profile The new profile to use
+     */
+    void setPlayerProfile(com.destroystokyo.paper.profile.@NotNull PlayerProfile profile);
+    // Paper end - Player Profile API
+
     // Spigot start
     public class Spigot extends Entity.Spigot {
 
diff --git a/src/main/java/org/bukkit/profile/PlayerProfile.java b/src/main/java/org/bukkit/profile/PlayerProfile.java
index fc46add38bf59dc1a04ea566fd230dcd8ae2708c..f4ab961647826b8717466be0d8c202b12749e9b4 100644
--- a/src/main/java/org/bukkit/profile/PlayerProfile.java
+++ b/src/main/java/org/bukkit/profile/PlayerProfile.java
@@ -16,7 +16,9 @@ import org.jetbrains.annotations.Nullable;
  * <p>
  * New profiles can be created via
  * {@link Server#createPlayerProfile(UUID, String)}.
+ * @deprecated see {@link com.destroystokyo.paper.profile.PlayerProfile}
  */
+@Deprecated(since = "1.18.1") // Paper
 public interface PlayerProfile extends Cloneable, ConfigurationSerializable {
 
     /**
@@ -25,6 +27,7 @@ public interface PlayerProfile extends Cloneable, ConfigurationSerializable {
      * @return the player's unique id, or <code>null</code> if not available
      */
     @Nullable
+    @Deprecated(since = "1.18.1") // Paper
     UUID getUniqueId();
 
     /**
