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

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

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

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;
}
}
 
@TechnicianBear, что для меня это слишком сложный код.

Я лучше расскажу как я делаю ;) В моих плагинах всегда (почти) присутствует два метода saveCfg и loadCfg.
Например: https://github.com/fromgate/ReActions/blob/master/src/me/fromgate/reactions/ReActions.java#L168-L189

Соответственно, они используются при старте плагина (я всегда делаю loadCfg() и сразу же saveCfg() в onEnable() для того, чтобы файла конфига гарантированно сгенерировался.
Если нужно перечитать конфигурацию, то делаем plugin.reloadConfig() и затем - loadCfg()
Если нужно использовать отдельный файл, то вместо getConfig() подставляем объект YamlConfiguration.
https://github.com/fromgate/ReActions/blob/master/src/me/fromgate/reactions/ReActions.java#L124-L166
 
@TechnicianBear, что для меня это слишком сложный код.

Я лучше расскажу как я делаю ;) В моих плагинах всегда (почти) присутствует два метода saveCfg и loadCfg.
Например: https://github.com/fromgate/ReActions/blob/master/src/me/fromgate/reactions/ReActions.java#L168-L189

Соответственно, они используются при старте плагина (я всегда делаю loadCfg() и сразу же saveCfg() в onEnable() для того, чтобы файла конфига гарантированно сгенерировался.
Если нужно перечитать конфигурацию, то делаем plugin.reloadConfig() и затем - loadCfg()
Если нужно использовать отдельный файл, то вместо getConfig() подставляем объект YamlConfiguration.
https://github.com/fromgate/ReActions/blob/master/src/me/fromgate/reactions/ReActions.java#L124-L166
Везде же ты ReActions сунешь, прям панацея:D
 
@Den_Abr, ну так я им сейчас "болею". Как допилю всё что хотел, заболею чем-то другим - буду пихать что-то другое :)
И это правильно :)
 
@TechnicianBear, что для меня это слишком сложный код.

Я лучше расскажу как я делаю ;) В моих плагинах всегда (почти) присутствует два метода saveCfg и loadCfg.
Например:https://github.com/fromgate/ReActions/blob/master/src/me/fromgate/reactions/ReActions.java#L168-L189

Соответственно, они используются при старте плагина (я всегда делаю loadCfg() и сразу же saveCfg() в onEnable() для того, чтобы файла конфига гарантированно сгенерировался.
Если нужно перечитать конфигурацию, то делаем plugin.reloadConfig() и затем - loadCfg()
Если нужно использовать отдельный файл, то вместо getConfig() подставляем объект YamlConfiguration.
https://github.com/fromgate/ReActions/blob/master/src/me/fromgate/reactions/ReActions.java#L124-L166

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

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

Назад
Верх