Вопрос Изменения в config.yml отражается на плагин

Версия Minecraft
1.19.X

Тихоня

Пользователь
Сообщения
173
Решения
1
Здравствуйте, я только начал разрабатывать плагины для майнкрафт серверов. Возможно данный вопрос поднимался много раз, но всё же как сделать так чтобы например текст в player-ask

Вам необходимо зарегистрироваться для просмотра изображений-вложений

подставился в java код
Вам необходимо зарегистрироваться для просмотра изображений-вложений
 
Работай с конфигом не через Bukkit API, нах нужна эта морока с файлами в ресурсах
Вот например так

Код:
public abstract class AbstractConfig {

    protected final Plugin plugin;
    protected final File rawConfig;
    protected YamlConfiguration config;

    public AbstractConfig(Plugin plugin, String name) {
        this.plugin = plugin;
        this.rawConfig = new File(plugin.getDataFolder(), name + ".yml");
        boolean firstLoad = false;
        if (!rawConfig.exists()) {
            try {
                rawConfig.getParentFile().mkdirs();
                firstLoad = rawConfig.createNewFile();
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }

        this.config = YamlConfiguration.loadConfiguration(rawConfig);

        if (firstLoad) onFirstLoad();
        checkDefault();
        save();
    }

    protected abstract void onFirstLoad();

    protected abstract void checkDefault();

    protected void setIfNotExists(String path, Object o) {
        if (!config.contains(path)) config.set(path, o);
    }

    public void save() {
        try {
            config.save(rawConfig);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

    public void reload() {
        this.config = YamlConfiguration.loadConfiguration(rawConfig);
    }

}


public class Config extends AbstractConfig {

    public Config(Plugin plugin) {
        super(plugin, "config");
    }

    @Override
    protected void onFirstLoad() {

    }

    @Override
    protected void checkDefault() {
        setIfNotExists("player-ask", "jopa");
    }

    public String getMessage(String path) {
        return config.getString(path);
    }

}

public class Main extends JavaPlugin {

    private Config config;

    public void onEnable() {
        config = new Config(this);
    }

    public void puk() {
        Bukkit.broadcastMessage(config.getMessage("player-ask"));
    }

}
 
Здравствуйте, я только начал разрабатывать плагины для майнкрафт серверов. Возможно данный вопрос поднимался много раз, но всё же как сделать так чтобы например текст в player-ask

Вам необходимо зарегистрироваться для просмотра изображений-вложений

подставился в java код
Вам необходимо зарегистрироваться для просмотра изображений-вложений
Перед тем, как получать данные, нужно сохранить конфиг с помощью JavaPlugin#saveDefaultConfig
 
Перед тем, как получать данные, нужно сохранить конфиг с помощью JavaPlugin#saveDefaultConfig
offtop На самом деле эти конфиги - костыль полный, нужно использовать нормальные либы которые поддерживают pojo
 
Работай с конфигом не через Bukkit API, нах нужна эта морока с файлами в ресурсах
Вот например так

Код:
public abstract class AbstractConfig {

    protected final Plugin plugin;
    protected final File rawConfig;
    protected YamlConfiguration config;

    public AbstractConfig(Plugin plugin, String name) {
        this.plugin = plugin;
        this.rawConfig = new File(plugin.getDataFolder(), name + ".yml");
        boolean firstLoad = false;
        if (!rawConfig.exists()) {
            try {
                rawConfig.getParentFile().mkdirs();
                firstLoad = rawConfig.createNewFile();
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }

        this.config = YamlConfiguration.loadConfiguration(rawConfig);

        if (firstLoad) onFirstLoad();
        checkDefault();
        save();
    }

    protected abstract void onFirstLoad();

    protected abstract void checkDefault();

    protected void setIfNotExists(String path, Object o) {
        if (!config.contains(path)) config.set(path, o);
    }

    public void save() {
        try {
            config.save(rawConfig);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

    public void reload() {
        this.config = YamlConfiguration.loadConfiguration(rawConfig);
    }

}


public class Config extends AbstractConfig {

    public Config(Plugin plugin) {
        super(plugin, "config");
    }

    @Override
    protected void onFirstLoad() {

    }

    @Override
    protected void checkDefault() {
        setIfNotExists("player-ask", "jopa");
    }

    public String getMessage(String path) {
        return config.getString(path);
    }

}

public class Main extends JavaPlugin {

    private Config config;

    public void onEnable() {
        config = new Config(this);
    }

    public void puk() {
        Bukkit.broadcastMessage(config.getMessage("player-ask"));
    }

}
Я хочу сделать многопользовательский плагин
Объединено

offtop На самом деле эти конфиги - костыль полный, нужно использовать нормальные либы которые поддерживают pojo
Вот так всегда. У каждого почему-то свой способ написания плагинов, не имеющий ничего общего с предыдущим
 
Последнее редактирование:
Я хочу сделать многопользовательский плагин
А при чем тут это?
Вобщем всё что тебе тут предложили решит твою проблему по теме. Осталось только выбрать что, если не вдуплил про что-то, то лучше доспроси
 
Вот так всегда. У каждого почему-то свой способ написания плагинов, не имеющий ничего общего с предыдущим
Это рекомендация! А использовать или нет, это уже думай сам.
 
Работай с конфигом не через Bukkit API, нах нужна эта морока с файлами в ресурсах
Вот например так

Код:
public abstract class AbstractConfig {

    protected final Plugin plugin;
    protected final File rawConfig;
    protected YamlConfiguration config;

    public AbstractConfig(Plugin plugin, String name) {
        this.plugin = plugin;
        this.rawConfig = new File(plugin.getDataFolder(), name + ".yml");
        boolean firstLoad = false;
        if (!rawConfig.exists()) {
            try {
                rawConfig.getParentFile().mkdirs();
                firstLoad = rawConfig.createNewFile();
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }

        this.config = YamlConfiguration.loadConfiguration(rawConfig);

        if (firstLoad) onFirstLoad();
        checkDefault();
        save();
    }

    protected abstract void onFirstLoad();

    protected abstract void checkDefault();

    protected void setIfNotExists(String path, Object o) {
        if (!config.contains(path)) config.set(path, o);
    }

    public void save() {
        try {
            config.save(rawConfig);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

    public void reload() {
        this.config = YamlConfiguration.loadConfiguration(rawConfig);
    }

}


public class Config extends AbstractConfig {

    public Config(Plugin plugin) {
        super(plugin, "config");
    }

    @Override
    protected void onFirstLoad() {

    }

    @Override
    protected void checkDefault() {
        setIfNotExists("player-ask", "jopa");
    }

    public String getMessage(String path) {
        return config.getString(path);
    }

}

public class Main extends JavaPlugin {

    private Config config;

    public void onEnable() {
        config = new Config(this);
    }

    public void puk() {
        Bukkit.broadcastMessage(config.getMessage("player-ask"));
    }

}
offtop Почему не надо работать с конфигами через BukkitAPI?
 
offtop Почему не надо работать с конфигами через BukkitAPI?
Под конфигом через BukkitAPI я имел ввиду подготовленный plugin.getConfig().
Считаю возню с ресурсовым config.yml кринжем с ограниченным контролем
 
Назад
Сверху Снизу