Вопрос Почему не работает конфиг?

Версия Minecraft
1.20.X

Айсон :)

Разработчик
Пользователь
Сообщения
392
Решения
18
У меня есть класс конфига
Java:
public class Config {
    private static final Config instance = new Config();

    private FileConfiguration config;
    public final HashMap<String, Object> values = new HashMap<>();

    public Config() {
        reload();
    }



    private void updateValues() {
        values.clear();

        values.put("currency", config.getString("currency", "PlayerPoints"));

        values.put("itemStyle.glowWhenUse", config.getBoolean("itemStyle.glowWhenUse", true));
        values.put("itemStyle.comments.notEnoughMoney", config.getString("itemStyle.comments.notEnoughMoney", "<dark_red>• <red>Вам не хватает монет"));
        values.put("itemStyle.comments.buy", config.getString("itemStyle.comments.buy", "<dark_green>• <green>Нажмите, чтобы купить"));
        values.put("itemStyle.comments.use", config.getString("itemStyle.comments.use", "<dark_green>• <green>Нажмите, чтобы применить"));
        values.put("itemStyle.comments.alreadyInUse", config.getString("itemStyle.comments.alreadyInUse", "<gold>• <yellow>Уже используется"));
    }

    public void reload() {
        MainPlugin.getInstance().saveDefaultConfig();
        config = MainPlugin.getInstance().getConfig();

        updateValues();
    }



    public static Config getInstance() {
        return instance;
    }
}

Когда я пытаюсь получить из него значение:
Java:
Config.getInstance().values.get("itemStyle.glowWhenUse");
//или любое другое значение, которое 100% есть в конфиге
Он всегда возвращает null
 
offtop
Странный какой то конфиг у тебя

Makefile:
Main.getInstance().getConfig().getString("string");
Так удобнее: у меня сразу сохраняются дефолт значения, если его нет в конфиге (там, если что, их гораздо больше, даже листы есть)
 
У меня есть класс конфига
Java:
public class Config {
    private static final Config instance = new Config();

    private FileConfiguration config;
    public final HashMap<String, Object> values = new HashMap<>();

    public Config() {
        reload();
    }



    private void updateValues() {
        values.clear();

        values.put("currency", config.getString("currency", "PlayerPoints"));

        values.put("itemStyle.glowWhenUse", config.getBoolean("itemStyle.glowWhenUse", true));
        values.put("itemStyle.comments.notEnoughMoney", config.getString("itemStyle.comments.notEnoughMoney", "<dark_red>• <red>Вам не хватает монет"));
        values.put("itemStyle.comments.buy", config.getString("itemStyle.comments.buy", "<dark_green>• <green>Нажмите, чтобы купить"));
        values.put("itemStyle.comments.use", config.getString("itemStyle.comments.use", "<dark_green>• <green>Нажмите, чтобы применить"));
        values.put("itemStyle.comments.alreadyInUse", config.getString("itemStyle.comments.alreadyInUse", "<gold>• <yellow>Уже используется"));
    }

    public void reload() {
        MainPlugin.getInstance().saveDefaultConfig();
        config = MainPlugin.getInstance().getConfig();

        updateValues();
    }



    public static Config getInstance() {
        return instance;
    }
}

Когда я пытаюсь получить из него значение:
Java:
Config.getInstance().values.get("itemStyle.glowWhenUse");
//или любое другое значение, которое 100% есть в конфиге
Он всегда возвращает null
статики в перемешку с обычными типами. В этом и проблема, прикол статиков в том, что они сохраняют значение и хранят его в себе всегда, а вот public, private, protected без статика перезаписывают данные каждый вызов. Поэтому в values у тебя ничего нет, так как создается новый экземпляр класса. Да, звучит странно, потому что ты сделал через instance, но скорее всего это так
 
статики в перемешку с обычными типами. В этом и проблема, прикол статиков в том, что они сохраняют значение и хранят его в себе всегда, а вот public, private, protected без статика перезаписывают данные каждый вызов. Поэтому в values у тебя ничего нет, так как создается новый экземпляр класса. Да, звучит странно, потому что ты сделал через instance, но скорее всего это так

Сейчас я поменял, и теперь в main у меня хранится configInstance, а из самого конфига я удалил это

Java:
public class Config {
    private FileConfiguration config;
    public final HashMap<String, Object> values = new HashMap<>();

    public Config() {
        reload();
    }



    private void updateValues() {
        values.clear();

        values.put("currency", config.getString("currency", "PlayerPoints"));

        values.put("itemStyle.glowWhenUse", config.getBoolean("itemStyle.glowWhenUse", true));
        values.put("itemStyle.comments.notEnoughMoney", config.getString("itemStyle.comments.notEnoughMoney", "<dark_red>• <red>Вам не хватает монет"));
        values.put("itemStyle.comments.buy", config.getString("itemStyle.comments.buy", "<dark_green>• <green>Нажмите, чтобы купить"));
        values.put("itemStyle.comments.use", config.getString("itemStyle.comments.use", "<dark_green>• <green>Нажмите, чтобы применить"));
        values.put("itemStyle.comments.alreadyInUse", config.getString("itemStyle.comments.alreadyInUse", "<gold>• <yellow>Уже используется"));
    }

    public void reload() {
        MainPlugin.getInstance().saveDefaultConfig();
        config = MainPlugin.getInstance().getConfig();

        updateValues();
    }
}


Java:
public class MainPlugin {
  private static MainPlugin instance;
  private Config config;
 
  @Override
  public void onEnable() {
    instance = this;
    config = new Config();
  }
   
  public static Config getConfig() {
    return instance.config;
  }
}

Но всё равно ничего не поменялось

Есть какой-то вариант это исправить, но оставить эту задумку?
 
Последнее редактирование:
Назад
Сверху Снизу