Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Dismiss Notice

Помогите Перезагрузка плагина

Discussion in 'Разработка плагинов для новичков' started by Rbiter, Feb 10, 2016.

Thread Status:
Not open for further replies.
  1. Автор темы
    Rbiter

    Rbiter Участник Пользователь

    Trophy Points:
    31
    Имя в Minecraft:
    Rbiter
    Что за прикол? При перезагрузке через /stop или /restart все изменения в конфиге сохраняются. При попытке перезагрузить только плагин, командой иди плагином plugman значение конфига возвращается до того которое было после перезагрузки сервера...

    код класса cfg.java

    Code:
    public class cfg implements Listener{
     
        nexgame ng;
     
        public static void cfgLoad(){
            nexgame.Prefix = nexgame.config.getString("Prefix", "&7[&dNex&2Game&7]");
            nexgame.MOTDenb = nexgame.config.getBoolean("MOTD.Enable", true);
            nexgame.MOTDString = nexgame.config.getString("MOTD.String", "%Prf% server");
        }
     
        public static void cfgSave(){
            nexgame.config.set("Prefix", nexgame.Prefix);
            nexgame.config.set("MOTD.Enable", Boolean.valueOf(nexgame.MOTDenb));
            nexgame.config.set("MOTD.String", nexgame.MOTDString);
        }
    }
    
    код главного класса:


    Code:
    public class nexgame extends JavaPlugin implements Listener {
    
        public static String Prefix;
        public static boolean MOTDenb;
        public static String MOTDString;
        public static FileConfiguration config;
        Logger log = Logger.getLogger("Minecraft");
    
        nexgame ng;
    
        public void onEnable() {
            this.config = this.getConfig();
            this.getServer().getPluginManager().registerEvents(this, this);
            this.getServer().getPluginManager().registerEvents(new cfg(), this);
            this.getServer().getPluginManager().registerEvents(new SrvEvent(), this);
            this.getServer().getPluginManager().registerEvents(new CmdEvent(), this);
            cfg.cfgLoad();
            cfg.cfgSave();
            this.saveConfig();
        }
    
        public void onDisable() {
            this.saveConfig();
        }
    
    }
     
  2. Хостинг MineCraft
    <
  3. MrTrojan

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

    Trophy Points:
    98
    Skype:
    mrtrojan.ru
    Имя в Minecraft:
    MrTrojan
    Зачем под конфиг выделять вообще отдельный класс? И классы с маленькой буквы не называют.
     
  4. Reality_SC

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

    Trophy Points:
    123
    Имя в Minecraft:
    Reality_SC
    Вопрос удобства. Я вот выделяю, пишу методы чтения/записи/обновления структуры/верификации и другие плюшки для себя.
    Другое дело, что у ТС-а реализация какая-то кривоватая...
    +
    А какой командой? Не пользуюсь plugman (использую вот этот), всё ли он делает правильно? Я имею ввиду, вызывает ли он onDisable у плагина? Перезагрузка мягкая (disable + enable) или полная (ещё одна загрузка кода в память с созданием новых экземпляров объектов)?

    Ты уверен, что есть реальная необходимость сохранять из плагина данные? Может быть просто перечитывать их в onEnable, и хватит?
     
  5. Автор темы
    Rbiter

    Rbiter Участник Пользователь

    Trophy Points:
    31
    Имя в Minecraft:
    Rbiter
    Мне нужно что бы после перезагрузки плагина изменялась надпись в MOTD

    Code:
        @EventHandler
        public void onPing(ServerListPingEvent event) {
            // event.setMotd(ChatColor.translateAlternateColorCodes('&', MOTD));
            if (nexgame.MOTDenb = nexgame.config.getBoolean("MOTD.Enable", true)){
                ng.MOTDString = ng.MOTDString.replace("%Prf%", ng.Prefix);
                event.setMotd(ChatColor.translateAlternateColorCodes('&', ng.MOTDString));
            }
        }
    те в конфиге ставлю
    MOTD
    String "Надпись"
    Перезагружаю плагин и в MOTD было написано "Надпись"
    Без перезагрузки сервера сделать не получается((


    Пробовал в одном классе все делать, в этоге все становилось оч непонятным да же с комментариями... В то время как когда все в отдельных классах - удобно и всегда можно вернутся в нужный участок кода)
    По поводу имени класса. А какая разница? О_о с большой или маленькой буквы? Прост частенько класс с маленькой называю)[DOUBLEPOST=1455113160,1455113072][/DOUBLEPOST]
    За последние неск дней я понял что такая реализация конфига наиболее работоспособная)
     
  6. Reality_SC

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

    Trophy Points:
    123
    Имя в Minecraft:
    Reality_SC
    Ну так просто принято, это базовые основы стиля кода на Java. Конечно, и так будет компилироваться. У меня компилируется даже с кириллическими названиями переменных :)
    Посмотри, например, мою. Авось что-то пригодится.
    Смотри, что происходит:
    1. Сервер запускается, загружается плагин, считывает строку MOTD из конфига (например, "hello, mc world!"). Это значение хранится в переменной config, доступной в плагине plugin.getConfig().
    2. Ты правишь руками конфиг, меняя MOTD, например, на "It is good day today!".
    3. Запускаешь reload плагину, plugman или что-то другое вызывает у плагина onDisable. Посмотри, у тебя в нём saveConfig() -- ты сохраняешь то, что в памяти, обратно в файл. А в памяти у тебя старая строка.
    4. Плагин выключен, запускается вновь — и считывает старую-новую строку.
    Вероятно, решением для тебя будет просто удалить saveConfig() из onDisable().
     
  7. Автор темы
    Rbiter

    Rbiter Участник Пользователь

    Trophy Points:
    31
    Имя в Minecraft:
    Rbiter
    И так можно? О_О Над попробовать :D
    Люблю полазить в чужом коде :D Многое ясно становится))) Спасиб)
    Кстати надо попробовать)[DOUBLEPOST=1455114148,1455114009][/DOUBLEPOST]
    О.О Работает) спасибо)
     
Thread Status:
Not open for further replies.

Share This Page