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

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

Discussion in 'Разработка плагинов для новичков' started by TechnicianBear, Aug 18, 2013.

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

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

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

    VulkindirInform.java
    Code:
    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
    Code:
    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
    Code:
    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 Старожил Девелопер Пользователь

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

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

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

Share This Page