diff --git a/ButtonCore/ButtonCore (1) (com.github.TBMCPlugins.ButtonCore).iml b/ButtonCore/ButtonCore (1) (com.github.TBMCPlugins.ButtonCore).iml
index 7c2fa83..3c34336 100644
--- a/ButtonCore/ButtonCore (1) (com.github.TBMCPlugins.ButtonCore).iml
+++ b/ButtonCore/ButtonCore (1) (com.github.TBMCPlugins.ButtonCore).iml
@@ -21,7 +21,7 @@
-
+
diff --git a/ButtonCore/src/main/java/buttondevteam/core/component/channel/Channel.java b/ButtonCore/src/main/java/buttondevteam/core/component/channel/Channel.java
index c643880..120615c 100755
--- a/ButtonCore/src/main/java/buttondevteam/core/component/channel/Channel.java
+++ b/ButtonCore/src/main/java/buttondevteam/core/component/channel/Channel.java
@@ -53,7 +53,7 @@ public class Channel {
*/
public final ConfigData DisplayName() {
throwGame();
- return component.getConfig().getData(ID + ".displayName", defDisplayName);
+ return component.getConfig().getData(ID + ".displayName", defDisplayName); //TODO: Use config map
}
public final ConfigData Color() {
diff --git a/ButtonCore/src/main/java/buttondevteam/lib/architecture/ButtonPlugin.java b/ButtonCore/src/main/java/buttondevteam/lib/architecture/ButtonPlugin.java
index 25df8af..10e5c49 100644
--- a/ButtonCore/src/main/java/buttondevteam/lib/architecture/ButtonPlugin.java
+++ b/ButtonCore/src/main/java/buttondevteam/lib/architecture/ButtonPlugin.java
@@ -42,6 +42,7 @@ public abstract class ButtonPlugin extends JavaPlugin {
@Override
public final void onEnable() {
loadConfig();
+ IHaveConfig.pregenConfig(this, iConfig);
try {
pluginEnable();
} catch (Exception e) {
diff --git a/ButtonCore/src/main/java/buttondevteam/lib/architecture/Component.java b/ButtonCore/src/main/java/buttondevteam/lib/architecture/Component.java
index 4d2c9cf..435c71d 100644
--- a/ButtonCore/src/main/java/buttondevteam/lib/architecture/Component.java
+++ b/ButtonCore/src/main/java/buttondevteam/lib/architecture/Component.java
@@ -85,6 +85,7 @@ public abstract class Component {
}
component.plugin = plugin;
updateConfig(plugin, component);
+ IHaveConfig.pregenConfig(component, component.config);
component.register(plugin);
components.put(component.getClass(), component);
if (plugin instanceof ButtonPlugin)
diff --git a/ButtonCore/src/main/java/buttondevteam/lib/architecture/ConfigData.java b/ButtonCore/src/main/java/buttondevteam/lib/architecture/ConfigData.java
index 6374db0..c3d8baa 100644
--- a/ButtonCore/src/main/java/buttondevteam/lib/architecture/ConfigData.java
+++ b/ButtonCore/src/main/java/buttondevteam/lib/architecture/ConfigData.java
@@ -4,6 +4,7 @@ import buttondevteam.core.MainPlugin;
import buttondevteam.lib.ThorpeUtils;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
+import lombok.Getter;
import lombok.RequiredArgsConstructor;
import org.bukkit.Bukkit;
import org.bukkit.configuration.Configuration;
@@ -29,6 +30,7 @@ public class ConfigData {
* May be null for testing
*/
private final ConfigurationSection config;
+ @Getter
private final String path;
private final T def;
private final Object primitiveDef;
diff --git a/ButtonCore/src/main/java/buttondevteam/lib/architecture/IHaveConfig.java b/ButtonCore/src/main/java/buttondevteam/lib/architecture/IHaveConfig.java
index 241e4f5..15a5d24 100644
--- a/ButtonCore/src/main/java/buttondevteam/lib/architecture/IHaveConfig.java
+++ b/ButtonCore/src/main/java/buttondevteam/lib/architecture/IHaveConfig.java
@@ -1,10 +1,10 @@
package buttondevteam.lib.architecture;
+import buttondevteam.core.MainPlugin;
+import buttondevteam.lib.TBMCCoreAPI;
import lombok.Getter;
import lombok.val;
import org.bukkit.configuration.ConfigurationSection;
-import org.bukkit.plugin.java.JavaPlugin;
-import org.bukkit.scheduler.BukkitTask;
import java.util.HashMap;
import java.util.function.Function;
@@ -117,4 +117,30 @@ public final class IHaveConfig {
}
return (ConfigData) data;
}
+
+ /**
+ * Generates the config YAML.
+ *
+ * @param obj The object which has config methods
+ * @param config The config that holds the values
+ */
+ public static void pregenConfig(Object obj, IHaveConfig config) {
+ val ms = obj.getClass().getDeclaredMethods();
+ for (val m : ms) {
+ if (!m.getReturnType().getName().equals(ConfigData.class.getName())) continue;
+ try {
+ if (m.getParameterCount() == 0) {
+ m.setAccessible(true);
+ ConfigData> c = (ConfigData>) m.invoke(obj);
+ if (!c.getPath().equals(m.getName()))
+ MainPlugin.Instance.getLogger().warning("Config name does not match: " + c.getPath() + " instead of " + m.getName()); //TODO: Set it here
+ c.get(); //Saves the default value if needed - also checks validity
+ } else if (m.getParameterCount() == 1) {
+ //TODO: Config map
+ }
+ } catch (Exception e) {
+ TBMCCoreAPI.SendException("Failed to pregenerate " + m.getName() + " for " + obj + "!", e);
+ }
+ }
+ }
}
diff --git a/ButtonProcessor/src/main/java/buttondevteam/buttonproc/ConfigProcessor.java b/ButtonProcessor/src/main/java/buttondevteam/buttonproc/ConfigProcessor.java
index f244553..8895fa9 100644
--- a/ButtonProcessor/src/main/java/buttondevteam/buttonproc/ConfigProcessor.java
+++ b/ButtonProcessor/src/main/java/buttondevteam/buttonproc/ConfigProcessor.java
@@ -4,7 +4,11 @@ import org.bukkit.configuration.file.YamlConfiguration;
import javax.annotation.processing.ProcessingEnvironment;
import javax.lang.model.element.Element;
+import javax.lang.model.element.ExecutableElement;
import javax.lang.model.element.Modifier;
+import javax.lang.model.type.DeclaredType;
+import javax.lang.model.type.TypeKind;
+import javax.lang.model.type.TypeMirror;
import javax.tools.FileObject;
import javax.tools.StandardLocation;
import java.io.File;
@@ -29,11 +33,29 @@ public class ConfigProcessor {
public void process(Element targetcl) {
if (targetcl.getModifiers().contains(Modifier.ABSTRACT)) return;
+ final String path = "components." + targetcl.getSimpleName();
+ for (Element e : targetcl.getEnclosedElements()) {
+ /*System.out.println("Element: "+e);
+ System.out.println("Type: "+e.getClass()+" - "+e.getKind());
+ if(e instanceof ExecutableElement)
+ System.out.println("METHOD!");*/
+ if (!(e instanceof ExecutableElement)) continue;
+ TypeMirror tm = ((ExecutableElement) e).getReturnType();
+ if (tm.getKind() != TypeKind.DECLARED) continue;
+ DeclaredType dt = (DeclaredType) tm;
+ if (!dt.asElement().getSimpleName().contentEquals("ConfigData")) return;
+ System.out.println("Config: " + e.getSimpleName());
+ System.out.println("Value: " + ((ExecutableElement) e).getDefaultValue());
+ String doc = procEnv.getElementUtils().getDocComment(e);
+ if (doc == null) continue;
+ System.out.println("DOC: " + doc);
+ yaml.set(path + "." + e.getSimpleName() + "_doc", doc); //methodName_doc
+ }
String javadoc = procEnv.getElementUtils().getDocComment(targetcl);
if (javadoc == null) return;
- System.out.println("JAVADOC"); //TODO: Config methods
+ System.out.println("JAVADOC");
System.out.println(javadoc);
- yaml.set("components." + targetcl.getSimpleName() + "._doc", javadoc);
+ yaml.set(path + "._doc", javadoc);
try {
yaml.save(file);
} catch (IOException e) {