我想的是复刻TabooLib里的@Config注解,这个功能真好用,点赞~
这是Java版(粗糙的复刻,但都能用啦~)
只需要先写一个注解类
然后在你的配置管理类写下这三个方法(其实随便一个类都可以,只是主要的方法和字段都得在这个类,我这里演示是在插件主类)
那么我们该如何调用呢?我们只需要在这三个方法所在的类直接给字段加注解即可
那么接下来在其他类直接 类名.字段名 即可调用对应的YamlConfiguration对象
那么我们该如何重载呢?那么就需要上文中的reloadConfig方法了
(因为我是在主类写的,所以忽略Main.getInstance(),换成你自己的插件配置类即可)
这样子我们就能重载对应文件名的配置文件辣~
这是Java版(粗糙的复刻,但都能用啦~)
只需要先写一个注解类
Java:
import java.lang.annotation.ElementType;import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Config {
String value();
}
然后在你的配置管理类写下这三个方法(其实随便一个类都可以,只是主要的方法和字段都得在这个类,我这里演示是在插件主类)
Java:
//在插件onEnable方法里调用这个方法,用于赋值该类中所有的注解了的字段对象
public void configLoad() {
for (Field field : this.getClass().getDeclaredFields()) {
if (field.isAnnotationPresent(Config.class)) {
Config configAnnotation = field.getAnnotation(Config.class);
String configFilePath = configAnnotation.value();
loadConfig(configFilePath, field);
}
}
}
//Config注解重载方法
public void reloadConfig(String configFilePath) {
for (Field field : this.getClass().getDeclaredFields()) {
if (field.isAnnotationPresent(Config.class)) {
Config configAnnotation = field.getAnnotation(Config.class);
String currentConfigFilePath = configAnnotation.value();
if (currentConfigFilePath.equals(configFilePath)) {
loadConfig(configFilePath, field);
getLogger().info("重载配置文件'" + configFilePath + "' 成功辣~");
}
}
}
}
//Config注解赋值方法
private void loadConfig(String configFilePath, Field field) {
File dataFile = new File(getDataFolder(), configFilePath);
if (!dataFile.exists()) {
saveResource(configFilePath, false);
}
YamlConfiguration config = YamlConfiguration.loadConfiguration(dataFile);
try {
field.setAccessible(true);
field.set(null, config);
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
Java:
@Config("level.yml")
public static YamlConfiguration levelData;
@Config("Reward.yml")
public static YamlConfiguration Reward;
那么我们该如何重载呢?那么就需要上文中的reloadConfig方法了
(因为我是在主类写的,所以忽略Main.getInstance(),换成你自己的插件配置类即可)
Java:
Main.getInstance().reloadConfig("level.yml");
Main.getInstance().reloadConfig("Reward.yml");
最后编辑:
打赏用户
J