diff --git a/ButtonCore/src/main/java/buttondevteam/lib/architecture/Component.java b/ButtonCore/src/main/java/buttondevteam/lib/architecture/Component.java index b6c880b..3090a07 100644 --- a/ButtonCore/src/main/java/buttondevteam/lib/architecture/Component.java +++ b/ButtonCore/src/main/java/buttondevteam/lib/architecture/Component.java @@ -17,6 +17,7 @@ import org.bukkit.plugin.java.JavaPlugin; import java.util.Collections; import java.util.HashMap; import java.util.Map; +import java.util.function.Consumer; import java.util.stream.Collectors; /** @@ -227,14 +228,23 @@ public abstract class Component { /** * Returns a map of configs that are under the given key. * @param key The key to use + * @param defaultProvider A mapping between config paths and config generators * @return A map containing configs */ - protected Map getConfigMap(String key) { + protected Map getConfigMap(String key, Map> defaultProvider) { val c=getConfig().getConfig(); var cs=c.getConfigurationSection(key); if(cs==null) cs=c.createSection(key); - return cs.getValues(false).entrySet().stream().filter(e->e.getValue() instanceof ConfigurationSection) + val res = cs.getValues(false).entrySet().stream().filter(e -> e.getValue() instanceof ConfigurationSection) .collect(Collectors.toMap(Map.Entry::getKey, kv -> new IHaveConfig((ConfigurationSection) kv.getValue()))); + if (res.size() == 0) { + for (val entry : defaultProvider.entrySet()) { + val conf = new IHaveConfig(cs.createSection(entry.getKey())); + entry.getValue().accept(conf); + res.put(entry.getKey(), conf); + } + } + return res; } private String getClassName() { diff --git a/ButtonCore/src/main/java/buttondevteam/lib/architecture/ConfigData.java b/ButtonCore/src/main/java/buttondevteam/lib/architecture/ConfigData.java index 1a3a11f..8cff0f9 100644 --- a/ButtonCore/src/main/java/buttondevteam/lib/architecture/ConfigData.java +++ b/ButtonCore/src/main/java/buttondevteam/lib/architecture/ConfigData.java @@ -5,6 +5,8 @@ import lombok.RequiredArgsConstructor; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.file.YamlConfiguration; +import java.lang.reflect.Array; +import java.util.List; import java.util.Objects; import java.util.function.Function; @@ -74,12 +76,14 @@ public class ConfigData { //TODO: Save after a while else if (def instanceof Double) val = ((Number) val).doubleValue(); } + if (val instanceof List && def.getClass().isArray()) + val = ((List) val).toArray((T[]) Array.newInstance(def.getClass().getComponentType(), 0)); return (T) val; } public void set(T value) { Object val; - if (setter != null) + if (setter != null && value != null) val = setter.apply(value); else val = value; if (config != null) diff --git a/ButtonCore/src/main/java/buttondevteam/lib/chat/Command2.java b/ButtonCore/src/main/java/buttondevteam/lib/chat/Command2.java index c6c0de0..8327314 100644 --- a/ButtonCore/src/main/java/buttondevteam/lib/chat/Command2.java +++ b/ButtonCore/src/main/java/buttondevteam/lib/chat/Command2.java @@ -130,7 +130,7 @@ public abstract class Command2 } } j = commandline.indexOf(' ', j + 1); //End index - if (j == -1) //Last parameter + if (j == -1 || paramArr[i1].isAnnotationPresent(TextArg.class)) //Last parameter j = commandline.length(); String param = commandline.substring(pj, j); if (cl == String.class) { diff --git a/ButtonCore/src/main/java/buttondevteam/lib/chat/ICommand2.java b/ButtonCore/src/main/java/buttondevteam/lib/chat/ICommand2.java index 781efe4..dba5664 100644 --- a/ButtonCore/src/main/java/buttondevteam/lib/chat/ICommand2.java +++ b/ButtonCore/src/main/java/buttondevteam/lib/chat/ICommand2.java @@ -59,7 +59,7 @@ public abstract class ICommand2 { * * @return The command path, which is the command class name by default (removing any "command" from it) - Change via the {@link CommandClass} annotation */ - public final String getCommandPath() { + public String getCommandPath() { return path; } diff --git a/ButtonProcessor/src/main/java/buttondevteam/buttonproc/ButtonProcessor.java b/ButtonProcessor/src/main/java/buttondevteam/buttonproc/ButtonProcessor.java index f7bb7fe..1fda004 100755 --- a/ButtonProcessor/src/main/java/buttondevteam/buttonproc/ButtonProcessor.java +++ b/ButtonProcessor/src/main/java/buttondevteam/buttonproc/ButtonProcessor.java @@ -78,7 +78,7 @@ public class ButtonProcessor extends AbstractProcessor { cs.set("params", ((ExecutableElement) targetcl).getParameters().stream().skip(1).map(p -> { //String tn=p.asType().toString(); //return tn.substring(tn.lastIndexOf('.')+1)+" "+p.getSimpleName(); - boolean optional = p.getAnnotationMirrors().stream().anyMatch(am -> am.getAnnotationType().toString().endsWith("Optional")); + boolean optional = p.getAnnotationMirrors().stream().anyMatch(am -> am.getAnnotationType().toString().endsWith("OptionalArg")); if (optional) return "[" + p.getSimpleName() + "]"; return "<" + p.getSimpleName() + ">";