Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Помогите Сохранение вписанных данных от руки в конфиг во время работы сервера

Статус
Закрыто для дальнейших ответов.

Prot_CN

Активный участник
Пользователь
Баллы
66
Имя в Minecraft
Prot_CN
Снимая шляпу, кланяюсь перед тобой читатель.

Мне нужна твоя помощь, а именно:

"Как сохранять данные записанные вручную в конфиг, чтобы после его некой перезагрузки, он опять же сохранил эти данные и мог уже с ними работать относительно кода, который взаимодействует с ним и что-то делает с его данными?"

В обычном конфиге и желательно ещё в кастомном!

Кода нет, да тяжело будет понять, но знаете...
Я даже ничего и не написал, так как я не знаю с чего начать, вообще ничего не работает с этим сохранением!

Окажите милость, помочь мне.
 
Чуточку не понял ты меня.

Работать с конфигом через код я умею, но тот момент , который описал выше - не могу сделать!

Знаешь ли ты ответ или хоть пример решения привести можешь?
 
но тот момент , который описал выше - не могу сделать!
На русский переведи свой вопрос. Ибо твоё
"Как сохранять данные записанные вручную в конфиг, чтобы после его некой перезагрузки, он опять же сохранил эти данные и мог уже с ними работать относительно кода, который взаимодействует с ним и что-то делает с его данными?"
выглядит как какой то бессвязный словесный понос. А если проблема с выводом мысли в текст, то распиши действия и желаемый результат.
 
PHP:
// Получаем файл в переменную configFile
// и саму конфигурацию из файла в переменную config
File    configFile   = new File(plugin.getDataFolder(), "players.yml");
        config       = YamlConfiguration.loadConfiguration(configFile);
boolean override     = false;

// plugin - объект главного класса плагина * тот, где onEnable() *
// override - переменная, от которой зависит перезаписать файла:
// true - перезаписать, если файл существует,
// false - не перезаписывать, если файла не существует
plugin.saveResource(configFile.getName(), override);
JavaDoc: https://hub.spigotmc.org/javadocs/b...n.html#saveResource-java.lang.String-boolean-
 
Лучше, конечно же использовать MySQL. Изменяешь данные в таблице - изменяются на сервере в реальном времени.
 
Лучше, конечно же использовать MySQL. Изменяешь данные в таблице - изменяются на сервере в реальном времени.
Для любой задачи - своё решение :D
Не всем подходит SQL: кто-то просто не знает, что это и как с этим работать, кто-то никогда не работал через Java с SQL, у кого-то просто нет своей базы данных, кому-то лень, а в других случаях действительно проще использовать файлы как хранилище сообщений, например :D
 
Лучше, конечно же использовать MySQL. Изменяешь данные в таблице - изменяются на сервере в реальном времени.
Ага, только они магическим образом сами по себе в плагине не обновятся. То же самое можно сделать и с конфигом.
 
Чуточку не понял ты меня.

Работать с конфигом через код я умею, но тот момент , который описал выше - не могу сделать!

Знаешь ли ты ответ или хоть пример решения привести можешь?
Если ты имеешь ввиду сохранение конфига каким нибудь образом, чтобы в плагине сразу это применилось - никак. Тут нужно реализовывать слежение (кодом в этом самом плагине офк) за изменением файла и автоматической перезагрузкой конфига.
 
PHP:
// Получаем файл в переменную configFile
// и саму конфигурацию из файла в переменную config
File    configFile   = new File(plugin.getDataFolder(), "players.yml");
        config       = YamlConfiguration.loadConfiguration(configFile);
boolean override     = false;

// plugin - объект главного класса плагина * тот, где onEnable() *
// override - переменная, от которой зависит перезаписать файла:
// true - перезаписать, если файл существует,
// false - не перезаписывать, если файла не существует
plugin.saveResource(configFile.getName(), override);
JavaDoc: https://hub.spigotmc.org/javadocs/b...n.html#saveResource-java.lang.String-boolean-
Не работает...

Он просто стирает всё и... Всё!
 
Не работает...

Он просто стирает всё и... Всё!
Этот код берет файл players.yml из .jar архива и просто копирует пары ключ: значение в такой же файл, но уже в папке плагина plugins/PluginName. Override = true - перезапишет все, что есть в файле. Override = false - ничего не сделает, если файл уже существует
 
Этот код берет файл players.yml из .jar архива и просто копирует пары ключ: значение в такой же файл, но уже в папке плагина plugins/PluginName. Override = true - перезапишет все, что есть в файле. Override = false - ничего не сделает, если файл уже существует
Это конечно круто, спасибо!

Но мне нужно немного не то... Может быть я не так объяснил, ну в общем представь такую ситуацию:

Запущен сервер и к примеру на нём я уже нахожусь как игрок, аля в самом мире сервера.

На запущенном сервере имеется плагин и он после смерти игрока отправляет ему сообщение из кастомного конфига, который был создан этим же плагином.

Но что, если мы хотим поменять отправляемое сообщение из конфига (открыв его и переписав в ковычках строчку, которую он берет) не перезагружая /rl или /reload сервер?

То есть, чтобы я поменял во время запущенного сервера в конфиге ту строчку, и чтобы это всё сохранилось сразу?
 
Это конечно круто, спасибо!

Но мне нужно немного не то... Может быть я не так объяснил, ну в общем представь такую ситуацию:

Запущен сервер и к примеру на нём я уже нахожусь как игрок, аля в самом мире сервера.

На запущенном сервере имеется плагин и он после смерти игрока отправляет ему сообщение из кастомного конфига, который был создан этим же плагином.

Но что, если мы хотим поменять отправляемое сообщение из конфига (открыв его и переписав в ковычках строчку, которую он берет) не перезагружая /rl или /reload сервер?

То есть, чтобы я поменял во время запущенного сервера в конфиге ту строчку, и чтобы это всё сохранилось сразу?
Можешь прямо с сервера менять через команду, запуская updateMessage
PHP:
YamlConfiguration config = ...; //получение конфига при запуске плагина
public String getMessage() {
    config.getString("death");
}

public void updateMessage(String message) {
    config.set("death",message);
    saveConfig(); //если у тебя только 1 конфиг, иначе сохраняй через config.save(File);
}

Если очень хочется ловить изменения конфига - https://docs.oracle.com/javase/tutorial/essential/io/notification.html
 
Последнее редактирование:
Можешь прямо с сервера менять через команду, запуская updateMessage
PHP:
YamlConfiguration config = ...; //получение конфига при запуске плагина
public String getMessage() {
    config.getString("death");
}

public void updateMessage(String message) {
    config.set("death",message);
    saveConfig(); //если у тебя только 1 конфиг, иначе сохраняй через config.save(File);
}

Если очень хочется ловить изменения конфига - https://docs.oracle.com/javase/tutorial/essential/io/notification.html
Хм... Он у меня почему-то не сохраняет, а возвращает-то, что я поменял...

Вот весь код:
PHP:
private File file = new File("plugins/TranCfgs/"), players = new File(file.getPath(), "players.yml");
    private FileConfiguration mCfg;
    private List<String> joined;
    public void onEnable() {
        Bukkit.getPluginManager().registerEvents(this, this);
        Bukkit.getPluginCommand("plrl").setExecutor(this);
        if(!file.exists()) {
            file.mkdir();
        }
        if(!players.exists()) {
            try {
                players.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        mCfg = new YamlConfiguration().loadConfiguration(players);
        mCfg.set("users", new ArrayList<>());
        try {
            mCfg.save(players);
        } catch (IOException e) {
            e.printStackTrace();
        }
        joined = mCfg.getStringList("users");
    }
    public void onDisable() {

    }
    @EventHandler
    private void test(PlayerJoinEvent e) throws IOException {
        if(!joined.contains(e.getPlayer().getName())) {
            joined.add(e.getPlayer().getName());
            mCfg.set("users", joined);
            mCfg.save(players);
        }
    }

    @Override
    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
        if(args.length == 1 && args[0].equals("on")) {
            //mCfg.get("users");
            try {
                mCfg.save(players);
            } catch (IOException e) {
                e.printStackTrace();
            }
            return true;
        }
        return false;
    }

Почему так?
 
Столько костылей, что бы не юзать стандартные методы?
plugin.saveConfig(); сохранить изменения от плагина в конфиг.
plugin.reloadConfig(); прочитать изменения из конфига в плагин.
Чет в голос.
 
Столько костылей, что бы не юзать стандартные методы?
plugin.saveConfig(); сохранить изменения от плагина в конфиг.
plugin.reloadConfig(); прочитать изменения из конфига в плагин.
Чет в голос.
Не работает :D (Возможно этот способ только для дефолтного конфига)
 
В общем я разобрался сам...

Просто нужно при завершении записи вручную в конфиг, сохранить его Ctrl + S и иметь в коде такие строчки:

переменная = YamlConfiguration.loadConfiguration(файл-переменная);
лист = переменная.getStringList("users");
переменная.save(файл-переменная);

Додумался логически... Ведь у нас файл после "ктрл + S" меняется и значит нужно переменную конфигурации файла перезаписать под этот "новый файл", по сути он тот же, но мы же "ктрл + S" сделали и значит формально его изменили. Поэтому, чтобы работать именно с "измененным" вручную файлом, нужно перезаписать эту переменную и всё >:D

Спасибо всем за отзывчивость, с наступающим или новым годом!
 
Не работает :D (Возможно этот способ только для дефолтного конфига)
Тогда так https://github.com/alexandrage/Example/blob/master/src/Example/sfg/CustomConfig.java
CustomConfig config = new CustomConfig(this.plugin, "configName", false);
//TODO
config.saveCfg(); сохранить изменения от плагина в конфиг.
config.reloadCfg(); прочитать изменения из конфига в плагин.
 
Статус
Закрыто для дальнейших ответов.

Поделиться этой страницей

Назад
Верх