diff --git a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/LoginSkinApplyListener.java b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/LoginSkinApplyListener.java index d83f45e2..2f2015a5 100644 --- a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/LoginSkinApplyListener.java +++ b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/LoginSkinApplyListener.java @@ -5,6 +5,8 @@ import com.comphenix.protocol.wrappers.WrappedSignedProperty; import com.github.games647.fastlogin.bukkit.BukkitLoginSession; import com.github.games647.fastlogin.bukkit.FastLoginBukkit; +import java.util.Collection; + import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; @@ -20,18 +22,30 @@ public class LoginSkinApplyListener implements Listener { } @EventHandler(priority = EventPriority.LOW) + //run this on the loginEvent to let skins plugins see the skin like in normal minecraft behaviour public void onPlayerLogin(PlayerLoginEvent loginEvent) { Player player = loginEvent.getPlayer(); - BukkitLoginSession session = plugin.getSessions().get(player.getAddress().toString()); - if (session != null && plugin.getConfig().getBoolean("forwardSkin")) { - WrappedGameProfile gameProfile = WrappedGameProfile.fromPlayer(player); - String skinData = session.getEncodedSkinData(); - String signature = session.getSkinSignature(); - if (skinData != null && signature != null) { - WrappedSignedProperty skin = WrappedSignedProperty.fromValues("textures", skinData, signature); - gameProfile.getProperties().put("textures", skin); + if (plugin.getConfig().getBoolean("forwardSkin")) { + //go through every session, because player.getAddress is null + //loginEvent.getAddress is just a InetAddress not InetSocketAddres, so not unique enough + Collection sessions = plugin.getSessions().values(); + for (BukkitLoginSession session : sessions) { + if (session.getUsername().equals(player.getName())) { + applySkin(player, session); + break; + } } } } + + private void applySkin(Player player, BukkitLoginSession session) { + WrappedGameProfile gameProfile = WrappedGameProfile.fromPlayer(player); + String skinData = session.getEncodedSkinData(); + String signature = session.getSkinSignature(); + if (skinData != null && signature != null) { + WrappedSignedProperty skin = WrappedSignedProperty.fromValues("textures", skinData, signature); + gameProfile.getProperties().put("textures", skin); + } + } }