1. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

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

Тема в разделе "Разработка плагинов для новичков", создана пользователем Prot_CN, 23 дек 2018.

Статус темы:
Закрыта.
  1. Автор темы
    Prot_CN

    Prot_CN Активный участник Пользователь

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

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

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

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

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

    Окажите милость, помочь мне.
     
  2. LuckyZeeRo

    LuckyZeeRo Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    i0xHeX
  3. Автор темы
    Prot_CN

    Prot_CN Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    Prot_CN
    Чуточку не понял ты меня.

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

    Знаешь ли ты ответ или хоть пример решения привести можешь?
     
  4. Dereku

    Dereku Старожил Пользователь

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    На русский переведи свой вопрос. Ибо твоё
    выглядит как какой то бессвязный словесный понос. А если проблема с выводом мысли в текст, то распиши действия и желаемый результат.
     
  5. NyanGuyMF

    NyanGuyMF Активный участник Пользователь

    Баллы:
    76
    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-
     
  6. _XATuKO_

    _XATuKO_ Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    _XATuKO_
    Лучше, конечно же использовать MySQL. Изменяешь данные в таблице - изменяются на сервере в реальном времени.
     
  7. NyanGuyMF

    NyanGuyMF Активный участник Пользователь

    Баллы:
    76
    Для любой задачи - своё решение :D
    Не всем подходит SQL: кто-то просто не знает, что это и как с этим работать, кто-то никогда не работал через Java с SQL, у кого-то просто нет своей базы данных, кому-то лень, а в других случаях действительно проще использовать файлы как хранилище сообщений, например :D
     
  8. LuckyZeeRo

    LuckyZeeRo Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    i0xHeX
    Ага, только они магическим образом сами по себе в плагине не обновятся. То же самое можно сделать и с конфигом.
     
  9. LuckyZeeRo

    LuckyZeeRo Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    i0xHeX
    Если ты имеешь ввиду сохранение конфига каким нибудь образом, чтобы в плагине сразу это применилось - никак. Тут нужно реализовывать слежение (кодом в этом самом плагине офк) за изменением файла и автоматической перезагрузкой конфига.
     
  10. Автор темы
    Prot_CN

    Prot_CN Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    Prot_CN
    Не работает...

    Он просто стирает всё и... Всё!
     
  11. NyanGuyMF

    NyanGuyMF Активный участник Пользователь

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

    Prot_CN Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    Prot_CN
    Это конечно круто, спасибо!

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

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

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

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

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

    Cool_boy Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    prettydude
    Можешь прямо с сервера менять через команду, запуская 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
     
    Последнее редактирование: 31 дек 2018
  14. Автор темы
    Prot_CN

    Prot_CN Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    Prot_CN
    Хм... Он у меня почему-то не сохраняет, а возвращает-то, что я поменял...

    Вот весь код:
    PHP:
    private File file = new File("plugins/TranCfgs/"), players = new File(file.getPath(), "players.yml");
        private 
    FileConfiguration mCfg;
        private List<
    Stringjoined;
        public 
    void onEnable() {
            
    Bukkit.getPluginManager().registerEvents(thisthis);
            
    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 ethrows IOException {
            if(!
    joined.contains(e.getPlayer().getName())) {
                
    joined.add(e.getPlayer().getName());
                
    mCfg.set("users"joined);
                
    mCfg.save(players);
            }
        }

        @
    Override
        
    public boolean onCommand(CommandSender senderCommand commandString labelString[] args) {
            if(
    args.length == && args[0].equals("on")) {
                
    //mCfg.get("users");
                
    try {
                    
    mCfg.save(players);
                } catch (
    IOException e) {
                    
    e.printStackTrace();
                }
                return 
    true;
            }
            return 
    false;
        }
    Почему так?
     
  15. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Столько костылей, что бы не юзать стандартные методы?
    plugin.saveConfig(); сохранить изменения от плагина в конфиг.
    plugin.reloadConfig(); прочитать изменения из конфига в плагин.
    Чет в голос.
     
  16. Автор темы
    Prot_CN

    Prot_CN Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    Prot_CN
    Не работает :D (Возможно этот способ только для дефолтного конфига)
     
  17. Автор темы
    Prot_CN

    Prot_CN Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    Prot_CN
    В общем я разобрался сам...

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

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

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

    Спасибо всем за отзывчивость, с наступающим или новым годом!
     
  18. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Тогда так 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(); прочитать изменения из конфига в плагин.
     
Статус темы:
Закрыта.

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