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

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

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

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

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

    Баллы:
    103
    Имя в Minecraft:
    BearTech
    Столкнулся с проблемой при написании плагина. Суть в том, что я не пойму как правильно написать код, который будет перезагружать плагин его же командой (/vulkindirinform reload).
    На сколько я понял, проблема кроется в том, что плагин берёт значения из конфига только 1 раз (при загрузке если быть точнее) и после перезагрузки конфига плагин (а точнее евенты) берут старые значения. Однако же команды работают вполне нормально после моего самодельного "релоуда". У меня есть предположение, что команды работают нормально из-за того, что они находятся в отдельном класс файле. Но в общем, хотелось бы узнать в чём причина не "деиспособности" моего "релоуда" по отношению к евентам (скорее всего кривые руки :D)
    Код обраточика:
    (Прошу понять. Код местами обрезал (так как не в них суть))

    VulkindirInform.java
    Код:
    package ru.beartech.vulkindirinform;
     
    import java.io.*;
    import org.bukkit.Bukkit;
    import org.bukkit.plugin.java.JavaPlugin;
    import java.util.logging.Logger;
    import org.bukkit.configuration.file.FileConfiguration;
    import org.bukkit.configuration.file.YamlConfiguration;
    import org.bukkit.event.EventException;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.player.PlayerChatEvent;
    import org.bukkit.event.player.PlayerJoinEvent;
    import org.bukkit.plugin.Plugin;
    import org.bukkit.plugin.PluginManager;
     
     
    public class VulkindirInform extends JavaPlugin implements Listener {
    public static final Logger _log = Logger.getLogger("Minecraft");
    javafunctions javafunctions = new javafunctions();
    YmlArhicektor YML = new YmlArhicektor();
     
    //При включении
    @Override
    public void onEnable() {
    PluginManager pm = this.getServer().getPluginManager();
    Bukkit.getPluginManager().registerEvents(this, this);
    getCommand("VulkindirInform").setExecutor(new Commands());
    }
    //При загрузке
    @Override
    public void onLoad()
    {
    YML.config = YamlConfiguration.loadConfiguration(new File(getDataFolder(), "config.yml"));
    _log.info("[VulkindirInfo] Configuration file loaded");
    YML.lang = YamlConfiguration.loadConfiguration(new File(getDataFolder(), "lang.yml"));
    _log.info("[VulkindirInfo] Language file loaded");
    YML.chatmanagerenable = YML.config.getString("ChatManager.enable");
    if (YML.chatmanagerenable == "true") {_log.info("[VulkindirInfo] ChatManager: ON");}
    else {_log.info("[VulkindirInfo] ChatManager: OFF");}
    YML.tabmanagerenable = YML.config.getString("TabManager.enable");
    if (YML.tabmanagerenable == "true") {_log.info("[VulkindirInfo] TabManager: ON");}
    else {_log.info("[VulkindirInfo] TabManager: OFF");}
    }
     
    @EventHandler
    public void chatmanager(PlayerChatEvent event) {
    if (YML.config.getBoolean("ChatManager.enable"))
    {
      String prefixer = "";
      String name = event.getPlayer().getDisplayName();
      String prefix = YML.config.getString("players."+name+".prefix");
      String message = event.getMessage();
      String Chatformat = YML.config.getString("ChatManager.chatformat");
      if(event.getPlayer().hasPermission("VulkindirInform.color")) {message = javafunctions.proverkacveta(event.getMessage());}
      if (prefix != null) {prefixer = javafunctions.proverkacveta(prefix);}
      if (Chatformat != null)
      {
      //This is Null
      }
      else {Chatformat = prefixer+name+": "+message;}
      event.setFormat(Chatformat);
    }
    }
     
    }
    YmlArhicektor.java
    Код:
    public class YmlArhicektor {
    final File plugin = new File("plugins", "VulkindirInform.jar");
    final File conf = new File("plugins/VulkindirInform", "config.yml");
    final File langs = new File("plugins/VulkindirInform", "lang.yml");
    FileConfiguration config = YamlConfiguration.loadConfiguration(conf);
    FileConfiguration lang = YamlConfiguration.loadConfiguration(langs);
    String chatmanagerenable;
    String tabmanagerenable;
     
    }
    Commands.java
    Код:
    package ru.beartech.vulkindirinform;
     
    import java.io.*;
    import org.bukkit.Bukkit;
    import org.bukkit.command.Command;
    import org.bukkit.plugin.java.JavaPlugin;
    import org.bukkit.command.CommandExecutor;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Player;
    import org.bukkit.configuration.file.FileConfiguration;
    import org.bukkit.configuration.file.YamlConfiguration;
    import org.bukkit.plugin.Plugin;
    import static ru.beartech.vulkindirinform.VulkindirInform._log;
     
    public class Commands implements CommandExecutor{
    javafunctions javafunctions = new javafunctions();
    YmlArhicektor YML = new YmlArhicektor();
     
    @Override
    public boolean onCommand(CommandSender event, Command cmd, String label, String[] args)
    {
    Player player = (Player)event;
     
    //final FileConfiguration config = YML.config;
    if(cmd.getName().equalsIgnoreCase("VulkindirInform"))
    {
      if (args.length > 0)
      {
      if(args[0].equalsIgnoreCase("help"))
      {
        event.sendMessage(javafunctions.proverkacveta("&e----| &5VulkindirInform&e |----"));
        event.sendMessage(javafunctions.proverkacveta("&5/VulkindirInform&e reload &2- Reload configuration files"));
        event.sendMessage(javafunctions.proverkacveta("&5/VulkindirInform&e tab &2- Update you name in Player List"));
        event.sendMessage(YML.chatmanagerenable);
        event.sendMessage(YML.tabmanagerenable);
        return true;
      }
      else if (args[0].equalsIgnoreCase("reload"))
      {
        YML.config = YamlConfiguration.loadConfiguration(YML.conf);
        _log.info("[VulkindirInfo] Configuration file reloaded");
        YML.lang = YamlConfiguration.loadConfiguration(YML.langs);
        _log.info("[VulkindirInfo] Language file reloaded");
        YML.chatmanagerenable = YML.config.getString("ChatManager.enable");
        if (YML.chatmanagerenable == "true") {_log.info("[VulkindirInfo] ChatManager: ON");}
        else {_log.info("[VulkindirInfo] ChatManager: OFF");}
        YML.tabmanagerenable = YML.config.getString("TabManager.enable");
        if (YML.tabmanagerenable == "true") {_log.info("[VulkindirInfo] TabManager: ON");}
        else {_log.info("[VulkindirInfo] TabManager: OFF");}
        event.sendMessage(javafunctions.proverkacveta("&8[&5VulkindirInform&8]&e Configuration file reloaded"));
        return true;
      }
      else if (args[0].equalsIgnoreCase("tab"))
      {
        if (YML.tabmanagerenable == "true")
        {
        //This is Null
        }
      return true;
      }else{event.sendMessage("/Vulkindir help"); return true;}
    }
    return false;
    }
    }
     
  2. Хостинг MineCraft
    <
  3. Den_Abr

    Den_Abr Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Везде же ты ReActions сунешь, прям панацея:D
     
  4. Автор темы
    TechnicianBear

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

    Баллы:
    103
    Имя в Minecraft:
    BearTech
    Хоть я и не понял суть вашего поста (точнее не понял зачем мне загружать конфиг когда он прекрасно грузится), но всё же поблагодарю за ссылку на исходники (благодаря им я понял где "баг" (а точнее что я индусский-**вно-кодер :D ))
    В общем "баг" был из-за "YmlArhicektor() YML = new YmlArhicektor();" в каждом классе (тем самым они копировали класс к себе и использовал копию у себя же (потому то команды и работали, а евенты нет))
    Тема закрыта.
     
Статус темы:
Закрыта.

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