- Баллы
- 103
- Имя в Minecraft
- BearTech
Столкнулся с проблемой при написании плагина. Суть в том, что я не пойму как правильно написать код, который будет перезагружать плагин его же командой (/vulkindirinform reload).
На сколько я понял, проблема кроется в том, что плагин берёт значения из конфига только 1 раз (при загрузке если быть точнее) и после перезагрузки конфига плагин (а точнее евенты) берут старые значения. Однако же команды работают вполне нормально после моего самодельного "релоуда". У меня есть предположение, что команды работают нормально из-за того, что они находятся в отдельном класс файле. Но в общем, хотелось бы узнать в чём причина не "деиспособности" моего "релоуда" по отношению к евентам (скорее всего кривые руки
)
Код обраточика:
(Прошу понять. Код местами обрезал (так как не в них суть))
VulkindirInform.java
YmlArhicektor.java
Commands.java
На сколько я понял, проблема кроется в том, что плагин берёт значения из конфига только 1 раз (при загрузке если быть точнее) и после перезагрузки конфига плагин (а точнее евенты) берут старые значения. Однако же команды работают вполне нормально после моего самодельного "релоуда". У меня есть предположение, что команды работают нормально из-за того, что они находятся в отдельном класс файле. Но в общем, хотелось бы узнать в чём причина не "деиспособности" моего "релоуда" по отношению к евентам (скорее всего кривые руки
)Код обраточика:
(Прошу понять. Код местами обрезал (так как не в них суть))
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);
}
}
}
Код:
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;
}
Код:
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;
}
}
В моих плагинах всегда (почти) присутствует два метода saveCfg и loadCfg.