From 70fcac9fed51375681b04dddbafbab2435f847bf Mon Sep 17 00:00:00 2001 From: Tim203 Date: Sat, 21 Nov 2020 15:28:52 +0100 Subject: [PATCH] Fixed issues with config subclasses --- .../config/loader/ConfigInitializer.java | 24 ++++++++++++++----- .../floodgate/config/loader/ConfigLoader.java | 3 ++- .../pluginmessage/SpigotSkinHandler.java | 4 ++-- 3 files changed, 22 insertions(+), 9 deletions(-) diff --git a/common/src/main/java/org/geysermc/floodgate/config/loader/ConfigInitializer.java b/common/src/main/java/org/geysermc/floodgate/config/loader/ConfigInitializer.java index 92aeb5b3..f54cd774 100644 --- a/common/src/main/java/org/geysermc/floodgate/config/loader/ConfigInitializer.java +++ b/common/src/main/java/org/geysermc/floodgate/config/loader/ConfigInitializer.java @@ -50,21 +50,33 @@ public class ConfigInitializer { @Override protected Map getPropertiesMap(Class type, BeanAccess bAccess) { Map properties = new LinkedHashMap<>(); + getPropertiesFromClass(type, FloodgateConfig.class, properties); + return properties; + } + + private void getPropertiesFromClass(Class type, Class stopAfter, + Map propertyMap) { Class current = type; - // make ProxyFloodgateConfig work - // iterate through all fields of this specific class - while (type.isAssignableFrom(current)) { + while (!Object.class.equals(current)) { for (Field field : current.getDeclaredFields()) { int modifiers = field.getModifiers(); if (!Modifier.isStatic(modifiers) && !Modifier.isTransient(modifiers)) { String correctName = getCorrectName(field.getName()); // children should override parents - properties.putIfAbsent(correctName, new FieldProperty(field)); + propertyMap.putIfAbsent(correctName, new FieldProperty(field)); + } + + if (field.getClass().getSuperclass().equals(current)) { + getPropertiesFromClass(field.getClass(), field.getClass(), propertyMap); } } - current = current.getSuperclass(); + + if (current.equals(stopAfter)) { + return; + } + + current = type.getSuperclass(); } - return properties; } private String getCorrectName(String name) { diff --git a/common/src/main/java/org/geysermc/floodgate/config/loader/ConfigLoader.java b/common/src/main/java/org/geysermc/floodgate/config/loader/ConfigLoader.java index e3ecde02..0e6f2dd6 100644 --- a/common/src/main/java/org/geysermc/floodgate/config/loader/ConfigLoader.java +++ b/common/src/main/java/org/geysermc/floodgate/config/loader/ConfigLoader.java @@ -105,7 +105,8 @@ public final class ConfigLoader { } Path keyPath = dataFolder.resolve(configInstance.getKeyFileName()); - if (!Files.exists(keyPath)) { // don't assume that the key always exists with the existence of a config + // don't assume that the key always exists with the existence of a config + if (!Files.exists(keyPath)) { try { Key key = keyProducer.produce(); cipher.init(key); diff --git a/spigot/src/main/java/org/geysermc/floodgate/pluginmessage/SpigotSkinHandler.java b/spigot/src/main/java/org/geysermc/floodgate/pluginmessage/SpigotSkinHandler.java index f04120dd..c45c09b7 100644 --- a/spigot/src/main/java/org/geysermc/floodgate/pluginmessage/SpigotSkinHandler.java +++ b/spigot/src/main/java/org/geysermc/floodgate/pluginmessage/SpigotSkinHandler.java @@ -67,8 +67,8 @@ public class SpigotSkinHandler extends SkinHandler { PropertyMap properties = profile.getProperties(); - Collection oldTexture = properties.get("textures"); - properties.remove("textures", oldTexture); + //todo check if removing all texture properties breaks some stuff + properties.removeAll("textures"); Property property = new Property( "textures", response.get("value").getAsString(),