• 游客, 欢迎您来到九域资源社区,如果您是新人,请前往 论坛公告 板块查看新人引导教程 或者 点我打开
    如果您发现没有下载许可, 请先验证邮箱再进行下载;金锭可通过每日登陆或资源出售获取,目前没有其他渠道可获取。

注解操作多配置文件

YuaZer

Lv.1 泥土
高级创作者
2021-07-03
82
31
0
钻石
0.00 钻石
金锭
3,445 金锭
我想的是复刻TabooLib里的@Config注解,这个功能真好用,点赞~
这是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;
那么接下来在其他类直接 类名.字段名 即可调用对应的YamlConfiguration对象
那么我们该如何重载呢?那么就需要上文中的reloadConfig方法了
(因为我是在主类写的,所以忽略Main.getInstance(),换成你自己的插件配置类即可)

Java:
Main.getInstance().reloadConfig("level.yml");
Main.getInstance().reloadConfig("Reward.yml");
这样子我们就能重载对应文件名的配置文件辣~
 
最后编辑:
打赏用户
SwagRee J