From a7a6366ec1038a4ccdf1f836471a4c7002109f06 Mon Sep 17 00:00:00 2001 From: Tim203 Date: Sat, 11 Jun 2022 15:39:12 +0200 Subject: [PATCH] Patch for people who updated to 2.2 early, and fixed previous push. The config updater didn't re-add the quotes that strings with special characters (or no characters) should have, which resulted in the usernamePrefix becoming invalid or null. While this has been fixed for people that use the config updater with the latest version, people that already updated can't update again, and would have to edit the config manually. --- .../pluginmessage/BungeeSkinApplier.java | 19 ++++++++++++++----- .../floodgate/config/FloodgateConfig.java | 2 +- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/bungee/src/main/java/org/geysermc/floodgate/pluginmessage/BungeeSkinApplier.java b/bungee/src/main/java/org/geysermc/floodgate/pluginmessage/BungeeSkinApplier.java index ee10c47a..5c0dce97 100644 --- a/bungee/src/main/java/org/geysermc/floodgate/pluginmessage/BungeeSkinApplier.java +++ b/bungee/src/main/java/org/geysermc/floodgate/pluginmessage/BungeeSkinApplier.java @@ -26,6 +26,7 @@ package org.geysermc.floodgate.pluginmessage; import static com.google.common.base.Preconditions.checkNotNull; +import static org.geysermc.floodgate.util.ReflectionUtils.getConstructor; import static org.geysermc.floodgate.util.ReflectionUtils.getFieldOfType; import static org.geysermc.floodgate.util.ReflectionUtils.getMethodByName; @@ -46,6 +47,7 @@ import org.geysermc.floodgate.util.ReflectionUtils; @RequiredArgsConstructor public final class BungeeSkinApplier implements SkinApplier { + private static final Constructor LOGIN_RESULT_CONSTRUCTOR; private static final Field LOGIN_RESULT_FIELD; private static final Method SET_PROPERTIES_METHOD; @@ -53,15 +55,20 @@ public final class BungeeSkinApplier implements SkinApplier { private static final Constructor PROPERTY_CONSTRUCTOR; static { + PROPERTY_CLASS = ReflectionUtils.getClassOrFallbackPrefixed( + "protocol.Property", "connection.LoginResult$Property" + ); + + LOGIN_RESULT_CONSTRUCTOR = getConstructor( + LoginResult.class, true, + String.class, String.class, Array.newInstance(PROPERTY_CLASS, 0).getClass() + ); + LOGIN_RESULT_FIELD = getFieldOfType(InitialHandler.class, LoginResult.class); checkNotNull(LOGIN_RESULT_FIELD, "LoginResult field cannot be null"); SET_PROPERTIES_METHOD = getMethodByName(LoginResult.class, "setProperties", true); - PROPERTY_CLASS = ReflectionUtils.getClassOrFallbackPrefixed( - "protocol.Property", "connection.LoginResult.Property" - ); - PROPERTY_CONSTRUCTOR = ReflectionUtils.getConstructor( PROPERTY_CLASS, true, String.class, String.class, String.class @@ -91,7 +98,9 @@ public final class BungeeSkinApplier implements SkinApplier { // which Floodgate players don't have if (loginResult == null) { // id and name are unused and properties will be overridden - loginResult = new LoginResult(null, null, null); + loginResult = (LoginResult) ReflectionUtils.newInstance( + LOGIN_RESULT_CONSTRUCTOR, null, null, null + ); ReflectionUtils.setValue(handler, LOGIN_RESULT_FIELD, loginResult); } diff --git a/core/src/main/java/org/geysermc/floodgate/config/FloodgateConfig.java b/core/src/main/java/org/geysermc/floodgate/config/FloodgateConfig.java index 167c40f6..b7b6b866 100644 --- a/core/src/main/java/org/geysermc/floodgate/config/FloodgateConfig.java +++ b/core/src/main/java/org/geysermc/floodgate/config/FloodgateConfig.java @@ -40,7 +40,7 @@ import org.geysermc.configutils.loader.callback.GenericPostInitializeCallback; @Getter public class FloodgateConfig implements GenericPostInitializeCallback { private String keyFileName; - private String usernamePrefix; + private String usernamePrefix = ""; private boolean replaceSpaces; private String defaultLocale;