From fecfb7300b90d3de0f2300ae239fd301d5fa47d4 Mon Sep 17 00:00:00 2001 From: ineanto Date: Thu, 18 May 2023 18:49:04 +0200 Subject: [PATCH] feat: player reset for the time being, message signature is set to null, causing players beyond 1.19.2 to be kicked while being disguised, even after removing said one. look at the comment for further information. --- pom.xml | 1 + .../java/xyz/atnrch/nicko/NickoBukkit.java | 12 +++++----- .../nicko/disguise/AppearanceManager.java | 24 +++++++++---------- .../wrapper/WrapperPlayServerRespawn.java | 2 +- 4 files changed, 20 insertions(+), 19 deletions(-) diff --git a/pom.xml b/pom.xml index aba14d4..31d2bc6 100644 --- a/pom.xml +++ b/pom.xml @@ -44,6 +44,7 @@ com.comphenix.protocol ProtocolLib 5.0.0-SNAPSHOT + provided diff --git a/src/main/java/xyz/atnrch/nicko/NickoBukkit.java b/src/main/java/xyz/atnrch/nicko/NickoBukkit.java index 55b87f0..7aa2ead 100644 --- a/src/main/java/xyz/atnrch/nicko/NickoBukkit.java +++ b/src/main/java/xyz/atnrch/nicko/NickoBukkit.java @@ -2,6 +2,12 @@ package xyz.atnrch.nicko; import com.comphenix.protocol.ProtocolLibrary; import com.comphenix.protocol.ProtocolManager; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.command.PluginCommand; +import org.bukkit.plugin.PluginDescriptionFile; +import org.bukkit.plugin.java.JavaPlugin; +import org.bukkit.plugin.java.JavaPluginLoader; import xyz.atnrch.nicko.command.NickoCommand; import xyz.atnrch.nicko.config.Configuration; import xyz.atnrch.nicko.config.ConfigurationManager; @@ -15,12 +21,6 @@ import xyz.atnrch.nicko.mojang.MojangAPI; import xyz.atnrch.nicko.placeholder.PlaceHolderHook; import xyz.atnrch.nicko.storage.PlayerDataStore; import xyz.atnrch.nicko.storage.name.PlayerNameStore; -import org.bukkit.Bukkit; -import org.bukkit.Material; -import org.bukkit.command.PluginCommand; -import org.bukkit.plugin.PluginDescriptionFile; -import org.bukkit.plugin.java.JavaPlugin; -import org.bukkit.plugin.java.JavaPluginLoader; import xyz.xenondevs.invui.gui.structure.Structure; import xyz.xenondevs.invui.item.builder.ItemBuilder; import xyz.xenondevs.invui.item.impl.SimpleItem; diff --git a/src/main/java/xyz/atnrch/nicko/disguise/AppearanceManager.java b/src/main/java/xyz/atnrch/nicko/disguise/AppearanceManager.java index 6b6ff82..51fc7c7 100644 --- a/src/main/java/xyz/atnrch/nicko/disguise/AppearanceManager.java +++ b/src/main/java/xyz/atnrch/nicko/disguise/AppearanceManager.java @@ -3,6 +3,7 @@ package xyz.atnrch.nicko.disguise; import com.comphenix.protocol.wrappers.*; import com.google.common.collect.ImmutableList; import com.google.common.collect.Multimap; +import org.bukkit.event.player.PlayerTeleportEvent; import xyz.atnrch.nicko.NickoBukkit; import xyz.atnrch.nicko.i18n.I18NDict; import xyz.atnrch.nicko.mojang.MojangAPI; @@ -85,17 +86,14 @@ public class AppearanceManager { final String defaultName = nameStore.getStoredName(player); this.profile.setName(defaultName); this.profile.setSkin(defaultName); - final ActionResult actionResult = resetPlayer(); - this.profile.setSkin(null); - this.profile.setName(null); + final ActionResult actionResult = updatePlayer(true); + if (!actionResult.isError()) { + this.profile.setSkin(null); + this.profile.setName(null); + } return actionResult; } - public ActionResult resetPlayer() { - // TODO: 4/3/23 Reset player - return new ActionResult<>(); - } - public ActionResult updatePlayer(boolean skinChange) { final String displayName = profile.getName() == null ? player.getName() : profile.getName(); @@ -106,6 +104,7 @@ public class AppearanceManager { updateTabList(gameProfile, displayName); respawnPlayer(); } + player.teleport(player.getLocation(), PlayerTeleportEvent.TeleportCause.PLUGIN); return new ActionResult<>(); } @@ -159,7 +158,6 @@ public class AppearanceManager { private void updateTabList(WrappedGameProfile gameProfile, String displayName) { final WrapperPlayerServerPlayerInfoRemove remove = new WrapperPlayerServerPlayerInfoRemove(); remove.setUUIDs(ImmutableList.of(player.getUniqueId())); - final WrapperPlayerServerPlayerInfo update = new WrapperPlayerServerPlayerInfo(); update.setActions(EnumSet.of(EnumWrappers.PlayerInfoAction.ADD_PLAYER, EnumWrappers.PlayerInfoAction.INITIALIZE_CHAT, @@ -173,9 +171,11 @@ public class AppearanceManager { true, EnumWrappers.NativeGameMode.fromBukkit(player.getGameMode()), gameProfile, - WrappedChatComponent.fromText(displayName), - new WrappedRemoteChatSessionData(UUID.randomUUID(), - WrappedProfilePublicKey.ofPlayer(player).getKeyData()) + WrappedChatComponent.fromText(displayName) + // Yes, I skip providing chat session data. + // Yes, this will cause players to get kicked as soon as they send a message. + // No, I'll not waste another day fixing their mess. Go cry about it to Mojang. + // (Long live NoEncryption!) ))); remove.sendPacket(player); update.sendPacket(player); diff --git a/src/main/java/xyz/atnrch/nicko/wrapper/WrapperPlayServerRespawn.java b/src/main/java/xyz/atnrch/nicko/wrapper/WrapperPlayServerRespawn.java index c8d46a1..817f8c1 100644 --- a/src/main/java/xyz/atnrch/nicko/wrapper/WrapperPlayServerRespawn.java +++ b/src/main/java/xyz/atnrch/nicko/wrapper/WrapperPlayServerRespawn.java @@ -32,7 +32,7 @@ public class WrapperPlayServerRespawn extends AbstractPacket { // The dimension field has changed numerous times: // - 1.8 through 1.17 (?) need an integer, // - 1.18 need a Holder of a World ResourceKey, - // - 1.19.2 reverted 1.18 and simply need a World ResourceKey. + // - 1.19 and beyond don't require a Holder. // // n.b.: this field is a nightmare please mojang stop refactoring // your code to change things that were working perfectly fine before