Skip to content

Commit

Permalink
Improve SettingsScanner
Browse files Browse the repository at this point in the history
  • Loading branch information
EverNife committed Mar 30, 2024
1 parent 9a73feb commit f873f9f
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 15 deletions.
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
package br.com.finalcraft.evernifecore.config.cfg;

import br.com.finalcraft.evernifecore.commands.finalcmd.argument.ArgParser;
import br.com.finalcraft.evernifecore.locale.FCLocale;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
Expand All @@ -11,8 +14,10 @@

String key(); //YML key for the object

String comment() default ""; //Simple comment for this key
FCLocale[] comment() default {}; //Locale comment for this key

String context() default ""; //Context used for the argParser, like ArgParser limts: Ex Number '[0-100]'

String context() default "";
Class<? extends ArgParser> parser() default ArgParser.class;

}
Original file line number Diff line number Diff line change
Expand Up @@ -3,20 +3,28 @@
import br.com.finalcraft.evernifecore.argumento.Argumento;
import br.com.finalcraft.evernifecore.commands.finalcmd.annotations.data.ArgData;
import br.com.finalcraft.evernifecore.commands.finalcmd.argument.ArgInfo;
import br.com.finalcraft.evernifecore.commands.finalcmd.argument.ArgParser;
import br.com.finalcraft.evernifecore.commands.finalcmd.argument.ArgParserManager;
import br.com.finalcraft.evernifecore.commands.finalcmd.argument.ArgRequirementType;
import br.com.finalcraft.evernifecore.commands.finalcmd.argument.exception.ArgParseException;
import br.com.finalcraft.evernifecore.commands.finalcmd.argument.parsers.ArgParserNumber;
import br.com.finalcraft.evernifecore.config.Config;
import br.com.finalcraft.evernifecore.config.yaml.section.ConfigSection;
import br.com.finalcraft.evernifecore.ecplugin.ECPluginData;
import br.com.finalcraft.evernifecore.ecplugin.ECPluginManager;
import org.bukkit.Bukkit;
import org.bukkit.plugin.Plugin;

import java.lang.reflect.Field;
import java.util.Arrays;
import java.util.List;

public class SettingsScanner {

public static void loadSettings(Plugin plugin, Config config, Object instance){

ECPluginData ecPluginData = ECPluginManager.getOrCreateECorePluginData(plugin);

for (Field declaredField : instance.getClass().getDeclaredFields()) {

ConfigSetting settings = declaredField.getAnnotation(ConfigSetting.class);
Expand All @@ -36,26 +44,46 @@ public static void loadSettings(Plugin plugin, Config config, Object instance){
continue;
}

Object newValue;
String pluginLanguage = ecPluginData.getPluginLanguage();

String comment = settings.comment().length > 0
? Arrays.stream(settings.comment())
.filter(fcLocale -> fcLocale.lang().equalsIgnoreCase(pluginLanguage))
.findFirst()
.orElse(settings.comment()[0])
.text()
: null;

Object newValue;
if (defValue instanceof List){
newValue = config.getOrSetDefaultValue(settings.key(), (List<? extends Object>) defValue, settings.comment().isEmpty() ? null : settings.comment());
newValue = config.getOrSetDefaultValue(settings.key(), (List<? extends Object>) defValue, comment);
}else {
newValue = config.getOrSetDefaultValue(settings.key(), defValue, settings.comment().isEmpty() ? null : settings.comment());
newValue = config.getOrSetDefaultValue(settings.key(), defValue, comment);
}

if (!settings.context().isEmpty()){
Class<? extends ArgParser> parserClass = null;

if (newValue instanceof Number){
ArgParserNumber argParserNumber = new ArgParserNumber(new ArgInfo(defValue.getClass(), new ArgData().setContext(settings.context()), -1, ArgRequirementType.REQUIRED));
try {
newValue = argParserNumber.parserArgument(Bukkit.getConsoleSender(), new Argumento(newValue.toString()));
}catch (ArgParseException ignored){
plugin.getLogger().warning("Using default value for " + new ConfigSection(config, settings.key()).toString() + " Fix your Config!");
newValue = defValue;
}
}
if (ArgParser.class == settings.parser()){
//This means the DEFAULT parser, so, we look over the ArgParserManager
parserClass = ArgParserManager.getParser(plugin, defValue.getClass());
}else {
parserClass = settings.parser();
}

if (parserClass != null){
ArgInfo argInfo = new ArgInfo(defValue.getClass(), new ArgData().setContext(settings.context()), -1, ArgRequirementType.REQUIRED);

try {
ArgParser argParser = parserClass.getConstructor(ArgInfo.class).newInstance(argInfo);
newValue = argParser.parserArgument(Bukkit.getConsoleSender(), new Argumento(newValue.toString()));
} catch (ArgParseException ignored) {
plugin.getLogger().warning("Using default value for " + new ConfigSection(config, settings.key()).toString() + " Fix your Config!");
newValue = defValue;
} catch (Exception e) {
plugin.getLogger().warning("Failed to load ConfigSetting for [" + instance.getClass().getSimpleName() + " - " + declaredField.toString() + "] As the parser failed to be created!");
e.printStackTrace();
continue;
}
}

try {
Expand Down

0 comments on commit f873f9f

Please sign in to comment.