parent
9ea811ba40
commit
c8067257f9
7 changed files with 58 additions and 6 deletions
|
@ -21,7 +21,7 @@
|
|||
<orderEntry type="library" name="Maven: org.yaml:snakeyaml:1.19" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: net.md-5:bungeecord-chat:1.12-SNAPSHOT" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: commons-io:commons-io:1.3.2" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: com.github.TBMCPlugins.ButtonCore:Towny:master-98b73aaac3-1" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: com.github.TBMCPlugins.ButtonCore:Towny:master-03eb8d480a-1" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: com.github.milkbowl:VaultAPI:master-68f14eca20-1" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: org.bukkit:bukkit:1.13.1-R0.1-SNAPSHOT" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.javassist:javassist:3.20.0-GA" level="project" />
|
||||
|
|
|
@ -53,7 +53,7 @@ public class Channel {
|
|||
*/
|
||||
public final ConfigData<String> DisplayName() {
|
||||
throwGame();
|
||||
return component.getConfig().getData(ID + ".displayName", defDisplayName);
|
||||
return component.getConfig().getData(ID + ".displayName", defDisplayName); //TODO: Use config map
|
||||
}
|
||||
|
||||
public final ConfigData<Color> Color() {
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -85,6 +85,7 @@ public abstract class Component<TP extends JavaPlugin> {
|
|||
}
|
||||
component.plugin = plugin;
|
||||
updateConfig(plugin, component);
|
||||
IHaveConfig.pregenConfig(component, component.config);
|
||||
component.register(plugin);
|
||||
components.put(component.getClass(), component);
|
||||
if (plugin instanceof ButtonPlugin)
|
||||
|
|
|
@ -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<T> {
|
|||
* May be null for testing
|
||||
*/
|
||||
private final ConfigurationSection config;
|
||||
@Getter
|
||||
private final String path;
|
||||
private final T def;
|
||||
private final Object primitiveDef;
|
||||
|
|
|
@ -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<T>) 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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) {
|
||||
|
|
Loading…
Reference in a new issue