From 87dc694af9c58e88ddc257d84ae5f06988b2a90a Mon Sep 17 00:00:00 2001 From: Aikar Date: Sun, 18 Mar 2018 11:46:14 -0400 Subject: [PATCH] Ability to change PlayerProfile in AsyncPreLoginEvent This will allow you to change the players name or skin on login. --- ...e-PlayerProfile-in-AsyncPreLoginEven.patch | 53 +++++++++++++++++++ ...e-PlayerProfile-in-AsyncPreLoginEven.patch | 46 ++++++++++++++++ 2 files changed, 99 insertions(+) create mode 100644 Spigot-API-Patches/Ability-to-change-PlayerProfile-in-AsyncPreLoginEven.patch create mode 100644 Spigot-Server-Patches/Ability-to-change-PlayerProfile-in-AsyncPreLoginEven.patch diff --git a/Spigot-API-Patches/Ability-to-change-PlayerProfile-in-AsyncPreLoginEven.patch b/Spigot-API-Patches/Ability-to-change-PlayerProfile-in-AsyncPreLoginEven.patch new file mode 100644 index 0000000000..cee4325068 --- /dev/null +++ b/Spigot-API-Patches/Ability-to-change-PlayerProfile-in-AsyncPreLoginEven.patch @@ -0,0 +1,53 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Aikar +Date: Sun, 18 Mar 2018 11:43:30 -0400 +Subject: [PATCH] Ability to change PlayerProfile in AsyncPreLoginEvent + +This will allow you to change the players name or skin on login. + +diff --git a/src/main/java/org/bukkit/event/player/AsyncPlayerPreLoginEvent.java b/src/main/java/org/bukkit/event/player/AsyncPlayerPreLoginEvent.java +index 1d571889..0c16128e 100644 +--- a/src/main/java/org/bukkit/event/player/AsyncPlayerPreLoginEvent.java ++++ b/src/main/java/org/bukkit/event/player/AsyncPlayerPreLoginEvent.java +@@ -0,0 +0,0 @@ package org.bukkit.event.player; + import java.net.InetAddress; + import java.util.UUID; + ++import com.destroystokyo.paper.profile.PlayerProfile; ++import org.bukkit.Bukkit; + import org.bukkit.event.Event; + import org.bukkit.event.HandlerList; + +@@ -0,0 +0,0 @@ public class AsyncPlayerPreLoginEvent extends Event { + } + + public AsyncPlayerPreLoginEvent(final String name, final InetAddress ipAddress, final UUID uniqueId) { ++ // Paper start ++ this(name, ipAddress, uniqueId, Bukkit.createProfile(uniqueId, name)); ++ } ++ private PlayerProfile profile; ++ ++ /** ++ * Gets the PlayerProfile of the player logging in ++ * @return The Profile ++ */ ++ public PlayerProfile getPlayerProfile() { ++ return profile; ++ } ++ ++ /** ++ * Changes the PlayerProfile the player will login as ++ * @param profile The profile to use ++ */ ++ public void setPlayerProfile(PlayerProfile profile) { ++ this.profile = profile; ++ } ++ ++ public AsyncPlayerPreLoginEvent(final String name, final InetAddress ipAddress, final UUID uniqueId, PlayerProfile profile) { + super(true); ++ this.profile = profile; ++ // Paper end + this.result = Result.ALLOWED; + this.message = ""; + this.name = name; +-- \ No newline at end of file diff --git a/Spigot-Server-Patches/Ability-to-change-PlayerProfile-in-AsyncPreLoginEven.patch b/Spigot-Server-Patches/Ability-to-change-PlayerProfile-in-AsyncPreLoginEven.patch new file mode 100644 index 0000000000..6dce84c01c --- /dev/null +++ b/Spigot-Server-Patches/Ability-to-change-PlayerProfile-in-AsyncPreLoginEven.patch @@ -0,0 +1,46 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Aikar +Date: Sun, 18 Mar 2018 11:45:57 -0400 +Subject: [PATCH] Ability to change PlayerProfile in AsyncPreLoginEvent + +This will allow you to change the players name or skin on login. + +diff --git a/src/main/java/net/minecraft/server/LoginListener.java b/src/main/java/net/minecraft/server/LoginListener.java +index eaac25dc3..2842956bf 100644 +--- a/src/main/java/net/minecraft/server/LoginListener.java ++++ b/src/main/java/net/minecraft/server/LoginListener.java +@@ -0,0 +0,0 @@ + package net.minecraft.server; + ++import com.destroystokyo.paper.profile.CraftPlayerProfile; ++import com.destroystokyo.paper.profile.PlayerProfile; + import com.mojang.authlib.GameProfile; + import com.mojang.authlib.exceptions.AuthenticationUnavailableException; + import io.netty.channel.ChannelFuture; +@@ -0,0 +0,0 @@ import org.apache.logging.log4j.LogManager; + import org.apache.logging.log4j.Logger; + + // CraftBukkit start ++import org.bukkit.Bukkit; + import org.bukkit.craftbukkit.util.Waitable; + import org.bukkit.event.player.AsyncPlayerPreLoginEvent; + import org.bukkit.event.player.PlayerPreLoginEvent; +@@ -0,0 +0,0 @@ public class LoginListener implements PacketLoginInListener, ITickable { + java.util.UUID uniqueId = i.getId(); + final org.bukkit.craftbukkit.CraftServer server = LoginListener.this.server.server; + +- AsyncPlayerPreLoginEvent asyncEvent = new AsyncPlayerPreLoginEvent(playerName, address, uniqueId); ++ // Paper start ++ PlayerProfile profile = Bukkit.createProfile(uniqueId, playerName); ++ AsyncPlayerPreLoginEvent asyncEvent = new AsyncPlayerPreLoginEvent(playerName, address, uniqueId, profile); + server.getPluginManager().callEvent(asyncEvent); ++ profile = asyncEvent.getPlayerProfile(); ++ profile.complete(); ++ i = CraftPlayerProfile.asAuthlibCopy(profile); ++ playerName = i.getName(); ++ uniqueId = i.getId(); ++ // Paper end + + if (PlayerPreLoginEvent.getHandlerList().getRegisteredListeners().length != 0) { + final PlayerPreLoginEvent event = new PlayerPreLoginEvent(playerName, address, uniqueId); +-- \ No newline at end of file