193 lines
7.1 KiB
Java
193 lines
7.1 KiB
Java
package xanadu.enderdragon;
|
|
|
|
import org.bukkit.*;
|
|
import org.bukkit.configuration.file.FileConfiguration;
|
|
import org.bukkit.configuration.file.YamlConfiguration;
|
|
import org.bukkit.entity.Player;
|
|
import org.bukkit.event.HandlerList;
|
|
import org.bukkit.inventory.Inventory;
|
|
import org.bukkit.plugin.Plugin;
|
|
import org.bukkit.plugin.PluginManager;
|
|
import org.bukkit.plugin.java.JavaPlugin;
|
|
import org.bukkit.scheduler.BukkitRunnable;
|
|
import xanadu.enderdragon.commands.MainCommand;
|
|
import xanadu.enderdragon.commands.TabCompleter;
|
|
import xanadu.enderdragon.config.Config;
|
|
import xanadu.enderdragon.gui.GUIHolder;
|
|
import xanadu.enderdragon.config.Lang;
|
|
import xanadu.enderdragon.listeners.*;
|
|
import xanadu.enderdragon.listeners.mmoitems.MMOPlayerAttackListener;
|
|
import xanadu.enderdragon.listeners.mythiclib.PlayerAttackListener;
|
|
import xanadu.enderdragon.manager.DragonManager;
|
|
import xanadu.enderdragon.manager.GuiManager;
|
|
import xanadu.enderdragon.manager.TaskManager;
|
|
import xanadu.enderdragon.metrics.Metrics;
|
|
import xanadu.enderdragon.task.RespawnDragonRunnable;
|
|
import xanadu.enderdragon.utils.Version;
|
|
|
|
import java.io.*;
|
|
import java.util.Objects;
|
|
|
|
import static xanadu.enderdragon.config.Lang.*;
|
|
import static xanadu.enderdragon.manager.GuiManager.loadGui;
|
|
import static xanadu.enderdragon.utils.Updater.checkUpdate;
|
|
|
|
public final class EnderDragon extends JavaPlugin {
|
|
|
|
private static EnderDragon instance;
|
|
public static Plugin plugin;
|
|
public static Server server;
|
|
public static PluginManager pm;
|
|
public static File dataF;
|
|
public static File langF;
|
|
public static FileConfiguration data;
|
|
public static FileConfiguration lang;
|
|
public static int mcMainVersion;
|
|
public static int mcPatchVersion;
|
|
private DragonManager dragonManager;
|
|
private static boolean finish;
|
|
@Override
|
|
public void onEnable() {
|
|
finish = false;
|
|
info("Enabling plugin...");
|
|
info("Author: Xanadu13");
|
|
plugin = this;
|
|
instance = this;
|
|
dragonManager = new DragonManager();
|
|
server = plugin.getServer();
|
|
pm = Bukkit.getPluginManager();
|
|
mcMainVersion = getMinecraftVersion();
|
|
registerEvents();
|
|
registerCommands();
|
|
Metrics metrics = new Metrics(this,14850);
|
|
reloadAll();
|
|
Version.init();
|
|
checkUpdate();
|
|
if(!Lang.version.equals("2.0.0")){
|
|
warn(Lang.plugin_wrong_file_version.replace("{file_name}",Config.lang + ".yml"));
|
|
}
|
|
if(!Config.version.equals("2.0.0")){
|
|
warn(Lang.plugin_wrong_file_version.replace("{file_name}","config.yml"));
|
|
}
|
|
if(!"2.0.0".equals(data.getString("version"))){
|
|
warn(Lang.plugin_wrong_file_version.replace("{file_name}","data.yml"));
|
|
}
|
|
finish = true;
|
|
}
|
|
public static void reloadAll(){
|
|
EnderDragon.getInstance().loadFiles();
|
|
BukkitRunnable runnable = new BukkitRunnable() {
|
|
@Override
|
|
public void run() {
|
|
if(!TaskManager.getCurrentTimeWithSpecialFormat().endsWith("0")) return;
|
|
this.cancel();
|
|
RespawnDragonRunnable.reload();
|
|
}
|
|
};
|
|
new BukkitRunnable() {
|
|
@Override
|
|
public void run() {
|
|
if (!finish) return;
|
|
this.cancel();
|
|
DragonManager.reload();
|
|
loadGui();
|
|
if(Config.auto_respawn_enable){
|
|
TaskManager.reload();
|
|
runnable.runTaskTimer(plugin,0,1);
|
|
}
|
|
}
|
|
}.runTaskTimer(plugin, 1, 5);
|
|
}
|
|
public static void disableAll(){
|
|
closeAllInventory();
|
|
Bukkit.getScheduler().cancelTasks(plugin);
|
|
DragonManager.disable();
|
|
GuiManager.disable();
|
|
instance.unregisterCommands();
|
|
HandlerList.unregisterAll(plugin);
|
|
server.getScheduler().cancelTasks(plugin);
|
|
server.getServicesManager().unregisterAll(plugin);
|
|
warn(Lang.plugin_disable);
|
|
System.gc();
|
|
}
|
|
private void registerEvents(){
|
|
pm.registerEvents(new CreatureSpawnListener(),this);
|
|
pm.registerEvents(new DragonDamageByPlayerListener(),this);
|
|
pm.registerEvents(new DragonDeathListener(),this);
|
|
pm.registerEvents(new DragonHealListener(),this);
|
|
pm.registerEvents(new EntityDamageByEntityListener(),this);
|
|
pm.registerEvents(new InventoryListener(),this);
|
|
pm.registerEvents(new PluginDisableListener(),this);
|
|
if(pm.getPlugin("MythicLib") != null){
|
|
info("Hooking to MythicLib...");
|
|
pm.registerEvents(new PlayerAttackListener(),this);
|
|
}
|
|
else{
|
|
pm.registerEvents(new DragonBaseHurtListener(),this);
|
|
}
|
|
if(pm.getPlugin("MMOItems") != null){
|
|
info("Hooking to MMOItems...");
|
|
pm.registerEvents(new MMOPlayerAttackListener(),this);
|
|
}
|
|
}
|
|
private void registerCommands(){
|
|
Objects.requireNonNull(getCommand("enderdragon")).setExecutor(new MainCommand());
|
|
Objects.requireNonNull(getCommand("enderdragon")).setTabCompleter(new TabCompleter());
|
|
}
|
|
private void unregisterCommands(){
|
|
Objects.requireNonNull(getCommand("enderdragon")).setExecutor(null);
|
|
Objects.requireNonNull(getCommand("enderdragon")).setTabCompleter(null);
|
|
}
|
|
private void loadFiles(){
|
|
saveDefaultConfig();
|
|
reloadConfig();
|
|
Config.reload(getConfig());
|
|
if (!new File(getDataFolder(), "data.yml").exists()) {
|
|
this.saveResource("data.yml",false);
|
|
}
|
|
dataF = new File(getDataFolder(),"data.yml");
|
|
data = YamlConfiguration.loadConfiguration(dataF);
|
|
if(Config.lang.equals("")) {
|
|
error("Key \"lang\" in config is missing, please check your config.yml.");
|
|
Config.lang = "English";
|
|
}
|
|
String langPath = "lang/" + Config.lang + ".yml";
|
|
if (!new File(getDataFolder(), langPath).exists()) {
|
|
this.saveResource(langPath, false);
|
|
}
|
|
langF = new File(getDataFolder(), langPath);
|
|
lang = YamlConfiguration.loadConfiguration(langF);
|
|
info("Language: §6" + Config.lang);
|
|
Lang.reload(lang);
|
|
if (!new File(plugin.getDataFolder(), "gui/view.yml").exists()) {
|
|
plugin.saveResource("gui/view.yml",false);
|
|
}
|
|
|
|
}
|
|
public static EnderDragon getInstance() {return instance;}
|
|
private int getMinecraftVersion() {
|
|
String[] version = getServer().getBukkitVersion().replace('-', '.').split("\\.");
|
|
try {
|
|
mcPatchVersion = Integer.parseInt(version[2]);
|
|
} catch (NumberFormatException ignored) {}
|
|
return Integer.parseInt(version[1]);
|
|
}
|
|
public static void closeAllInventory() {
|
|
for (Player player : Bukkit.getOnlinePlayers()) {
|
|
try {
|
|
Inventory inventory = player.getOpenInventory().getTopInventory();
|
|
if (!(inventory.getHolder() instanceof GUIHolder)) continue;
|
|
player.closeInventory();
|
|
}
|
|
catch (Exception ignored) {}
|
|
}
|
|
}
|
|
|
|
public DragonManager getDragonManager(){
|
|
return dragonManager;
|
|
}
|
|
|
|
}
|
|
|
|
|