diff --git a/bungee/src/main/java/com/alterdekim/xcraft/auth/bungee/XCraft.java b/bungee/src/main/java/com/alterdekim/xcraft/auth/bungee/XCraft.java index e828a6c..89dc269 100644 --- a/bungee/src/main/java/com/alterdekim/xcraft/auth/bungee/XCraft.java +++ b/bungee/src/main/java/com/alterdekim/xcraft/auth/bungee/XCraft.java @@ -67,12 +67,38 @@ public class XCraft extends Plugin implements Listener { onlineModeField.setAccessible(true); onlineModeField.set(connection, false); + injectCustomSkin(connection); + getLogger().info("Bypassed Mojang authentication for " + connection.getName()); } catch (Exception e) { e.printStackTrace(); } } + private void injectCustomSkin(PendingConnection connection) { + try { + Class initialHandlerClass = connection.getClass(); + + Field loginProfileField = initialHandlerClass.getDeclaredField("loginProfile"); + loginProfileField.setAccessible(true); + + Class loginResultClass = Class.forName("net.md_5.bungee.connection.LoginResult"); + Class propertyClass = Class.forName("net.md_5.bungee.connection.LoginResult$Property"); + + Object[] properties = new Object[1]; + properties[0] = propertyClass.getConstructor(String.class, String.class, String.class) + .newInstance("textures", server.getTextures(connection.getUniqueId().toString()).getValue(), null); + + Object customLoginResult = loginResultClass + .getConstructor(String.class, UUID.class, propertyClass.arrayType()) + .newInstance(connection.getName(), connection.getUniqueId(), properties); + + loginProfileField.set(connection, customLoginResult); + } catch (Exception e) { + e.printStackTrace(); + } + } + @Override diff --git a/common/src/main/java/com/alterdekim/xcraft/auth/SaltNic.java b/common/src/main/java/com/alterdekim/xcraft/auth/SaltNic.java index 8f0f723..ea4fc01 100644 --- a/common/src/main/java/com/alterdekim/xcraft/auth/SaltNic.java +++ b/common/src/main/java/com/alterdekim/xcraft/auth/SaltNic.java @@ -234,7 +234,7 @@ public class SaltNic extends NanoHTTPD { } } - private MinecraftProperty getTextures(String uuid) { + public MinecraftProperty getTextures(String uuid) { Map textures = new HashMap<>(); if( new File(SKIN_DIRECTORY, uuid + ".png").exists() ) {