From 06d8ddd2e6594dc53df6f27cab6c6d6c6eb17583 Mon Sep 17 00:00:00 2001 From: hedgehog1029 Date: Mon, 9 May 2016 16:31:53 +0100 Subject: [PATCH] Lots of fixes. Configurations actually work now! --- src/io/github/hedgehog1029/frame/Frame.java | 7 +++++++ .../frame/config/ConfigurationBuilder.java | 19 ++++++++++++++++--- .../frame/dispatcher/CommandDispatcher.java | 2 ++ 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/src/io/github/hedgehog1029/frame/Frame.java b/src/io/github/hedgehog1029/frame/Frame.java index 7354c6b..63886cf 100644 --- a/src/io/github/hedgehog1029/frame/Frame.java +++ b/src/io/github/hedgehog1029/frame/Frame.java @@ -23,6 +23,9 @@ public static void main() { ConfigurationBuilder.buildAwaiting(); } catch (Exception e) { Logger.err("Error building configurations!"); + Logger.err(e.getMessage()); + + e.printStackTrace(); } new FrameInjector() @@ -53,4 +56,8 @@ public static void addConfiguration(Class clazz) { public static void addHook(Class clazz) { HookLoader.addHook(clazz); } + + public static Object getConfig(Class clazz) { + return ConfigurationBuilder.get(clazz); + } } diff --git a/src/io/github/hedgehog1029/frame/config/ConfigurationBuilder.java b/src/io/github/hedgehog1029/frame/config/ConfigurationBuilder.java index 494b43a..288f10f 100644 --- a/src/io/github/hedgehog1029/frame/config/ConfigurationBuilder.java +++ b/src/io/github/hedgehog1029/frame/config/ConfigurationBuilder.java @@ -3,6 +3,7 @@ import io.github.hedgehog1029.frame.annotations.Configuration; import io.github.hedgehog1029.frame.annotations.Setting; import io.github.hedgehog1029.frame.logger.Logger; +import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.plugin.java.JavaPlugin; @@ -31,6 +32,8 @@ public static void add(Class clazz) { public static void buildAwaiting() { for (Class c : awaiting) { configurations.put(c, build(c)); + + sync(c); } } @@ -90,8 +93,6 @@ private static Object build(Class clazz) { buildFromConfig(configFile, clazz, object); - //sync(clazz); - return object; } @@ -116,7 +117,7 @@ private static Object buildFromConfig(FileConfiguration config, Class clazz, Obj Field field = clazz.getField(key); field.setAccessible(true); - field.set(instance, field.getType().cast(config.get(key))); + fieldSet(field, config, instance, key); } catch (NoSuchFieldException ignored) { Logger.log(Level.FINER, "A key in YAML was not found in the class it is being rebuilt to."); } catch (IllegalAccessException e) { @@ -126,4 +127,16 @@ private static Object buildFromConfig(FileConfiguration config, Class clazz, Obj return instance; } + + private static void fieldSet(Field f, FileConfiguration config, Object instance, String key) throws IllegalAccessException { + if (config.get(key) instanceof Boolean) { + f.set(instance, config.getBoolean(key)); + } else if (config.get(key) instanceof Integer) { + f.set(instance, config.getInt(key)); + } else if (config.get(key) instanceof ConfigurationSection) { + f.set(instance, f.getType().cast(((ConfigurationSection) config.get(key)).getValues(false))); + } else { + f.set(instance, f.getType().cast(config.get(key))); + } + } } diff --git a/src/io/github/hedgehog1029/frame/dispatcher/CommandDispatcher.java b/src/io/github/hedgehog1029/frame/dispatcher/CommandDispatcher.java index d5ea8dd..f670bfb 100644 --- a/src/io/github/hedgehog1029/frame/dispatcher/CommandDispatcher.java +++ b/src/io/github/hedgehog1029/frame/dispatcher/CommandDispatcher.java @@ -81,6 +81,8 @@ public final boolean dispatch(CommandSender sender, CommandMapping command, Stri params.add(builder.toString()); break; // this is a bad move but yeah + } else { + params.add(args.pop()); } } else if (subclassOf(int.class, current)) { int arg;