diff --git a/src/main/java/xanadu/enderdragon/EnderDragon.java b/src/main/java/xanadu/enderdragon/EnderDragon.java deleted file mode 100644 index e2080f9..0000000 --- a/src/main/java/xanadu/enderdragon/EnderDragon.java +++ /dev/null @@ -1,192 +0,0 @@ -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; - } - -} - - diff --git a/src/main/java/xanadu/enderdragon/commands/MainCommand.java b/src/main/java/xanadu/enderdragon/commands/MainCommand.java deleted file mode 100644 index 97a2a31..0000000 --- a/src/main/java/xanadu/enderdragon/commands/MainCommand.java +++ /dev/null @@ -1,163 +0,0 @@ -package xanadu.enderdragon.commands; - -import org.bukkit.Material; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; -import xanadu.enderdragon.EnderDragon; -import xanadu.enderdragon.config.Config; -import xanadu.enderdragon.config.Lang; -import xanadu.enderdragon.utils.Chance; -import xanadu.enderdragon.utils.FileUpdater; -import xanadu.enderdragon.utils.MyDragon; - -import java.io.IOException; - -import static xanadu.enderdragon.EnderDragon.*; -import static xanadu.enderdragon.config.Lang.*; -import static xanadu.enderdragon.manager.DragonManager.*; -import static xanadu.enderdragon.manager.GuiManager.openGui; -import static xanadu.enderdragon.manager.RewardManager.addItem; -import static xanadu.enderdragon.manager.RewardManager.clearItem; - -public class MainCommand implements CommandExecutor { - @Override - public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { - if (args.length == 0) { - sendCommandTips(sender); - return false; - } - if (args.length == 1) { - switch (args[0].toLowerCase()){ - case "reload" : { - if(!sender.hasPermission("ed.reload")){ - sendFeedback(sender,Lang.command_no_permission); - return false; - } - closeAllInventory(); - reloadAll(); - sendFeedback(sender,Lang.command_reload_config); - return true; - } - case "respawn" : { - if(!sender.hasPermission("ed.respawn")){ - sendFeedback(sender,Lang.command_no_permission); - return false; - } - if(!(sender instanceof Player)){ - sendFeedback(sender,Lang.command_only_player); - return false; - } - Player player = (Player) sender; - EnderDragon.getInstance().getDragonManager().initiateRespawn(player); - return true; - } - case "update" : { - if(!sender.hasPermission("ed.update")){ - sendFeedback(sender,Lang.command_no_permission); - return false; - } - try { - FileUpdater.update(); - } catch (IOException e) { - throw new RuntimeException(e); - } - return true; - } - default : { - sendCommandTips(sender); - return false; - } - } - } - if (args[0].equalsIgnoreCase("drop")) { - if(!(sender instanceof Player)) { - sendFeedback(sender,Lang.command_only_player); - return false; - } - Player p = (Player) sender; - switch (args[1].toLowerCase()){ - case "gui" : { - if(!sender.hasPermission("ed.drop.gui")){ - sendFeedback(sender,Lang.command_no_permission); - return false; - } - if(args.length == 2){ - openGui(p, Config.main_gui); - return true; - } - if(args.length == 3){ - String key = args[2]; - MyDragon dragon = mp.get(key); - if(dragon == null){ - sendFeedback(sender,dragon_not_found); - return false; - } - openGui(p,dragon.drop_gui,key); - return true; - } - break; - } - case "clear" : { - if(!sender.hasPermission("ed.drop.edit")){ - sendFeedback(sender,Lang.command_no_permission); - return false; - } - if(args.length == 3) { - String key = args[2]; - clearItem(key); - sendFeedback(sender,Lang.command_drop_item_clear); - return true; - } - break; - } - case "add" : { - if(!sender.hasPermission("ed.drop.edit")){ - sendFeedback(sender,Lang.command_no_permission); - return false; - } - if(args.length == 4) { - if(p.getInventory().getItemInMainHand().getType() == Material.AIR){ - sendFeedback(p, command_drop_item_add_empty); - return false; - } - String ChanceStr = args[3]; - String key = args[2]; - double chance = -1; - try { - chance = Double.parseDouble(ChanceStr); - } catch (NumberFormatException ex){ - sendFeedback(p,Lang.command_drop_item_add_invalid_chance + ChanceStr); - return false; - } - if(chance <= 0) { - sendFeedback(p,Lang.command_drop_item_add_invalid_chance + ChanceStr); - return false; - } - if(chance > 100) chance = 100; - ItemStack item = p.getItemInHand(); - addItem(key,item,new Chance(chance,ChanceStr)); - sendFeedback(p,Lang.command_drop_item_add_succeed.replaceAll("\\{chance}",ChanceStr)); - return true; - } - break; - } - default : { - sendCommandTips(sender); - return false; - } - } - } - sendCommandTips(sender); - return false; - } - private static void sendCommandTips(CommandSender sender){ - sender.sendMessage(CommandTips1); - sender.sendMessage(CommandTips2); - sender.sendMessage(CommandTips3); - sender.sendMessage(CommandTips4); - } - -} diff --git a/src/main/java/xanadu/enderdragon/commands/TabCompleter.java b/src/main/java/xanadu/enderdragon/commands/TabCompleter.java deleted file mode 100644 index 9d753c9..0000000 --- a/src/main/java/xanadu/enderdragon/commands/TabCompleter.java +++ /dev/null @@ -1,52 +0,0 @@ -package xanadu.enderdragon.commands; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import static xanadu.enderdragon.manager.DragonManager.dragon_names; - -public class TabCompleter implements org.bukkit.command.TabCompleter { - - private static final List arguments_1 = Arrays.asList("drop", "reload", "respawn", "update"); - private static final List arguments_2 = Arrays.asList("add", "clear", "gui"); - @Override - public List onTabComplete(CommandSender sender, Command command, String label, String[] args) { - - List result = new ArrayList<>(); - if (args.length == 1) { - for (String s : arguments_1) { - if (s.toLowerCase().startsWith(args[0].toLowerCase())) { - result.add(s); - } - } - return result; - } - else if (args.length == 2){ - if(args[0].equalsIgnoreCase("drop")) { - for (String s : arguments_2) { - if (s.toLowerCase().startsWith(args[1].toLowerCase())) { - result.add(s); - } - } - } - return result; - } - else if(args.length == 3){ - String str = args[1].toLowerCase(); - if("add".equals(str) || "clear".equals(str) || "gui".equals(str)){ - for (String s : dragon_names) { - if (s.toLowerCase().startsWith(args[2].toLowerCase())) { - result.add(s); - } - } - } - return result; - } - return null; - } - -} diff --git a/src/main/java/xanadu/enderdragon/config/Config.java b/src/main/java/xanadu/enderdragon/config/Config.java deleted file mode 100644 index 901cee7..0000000 --- a/src/main/java/xanadu/enderdragon/config/Config.java +++ /dev/null @@ -1,76 +0,0 @@ -package xanadu.enderdragon.config; - -import org.bukkit.configuration.file.FileConfiguration; - -import java.io.*; -import java.lang.reflect.Field; -import java.lang.reflect.Type; -import java.net.URL; -import java.net.URLConnection; -import java.util.Iterator; -import java.util.List; -import java.util.logging.Level; - -import static xanadu.enderdragon.EnderDragon.plugin; -import static xanadu.enderdragon.config.Lang.error; - -public class Config { - public static String version; - public static String lang; - public static String damage_visible_mode; - public static String special_dragon_jude_mode; - public static boolean auto_respawn_enable; - public static String auto_respawn_world_the_end_name; - public static String auto_respawn_respawn_time; - public static boolean auto_respawn_invulnerable; - public static boolean resist_player_respawn; - public static boolean resist_dragon_breath_gather; - public static String main_gui; - public static List dragon_setting_file; - public static void reload(FileConfiguration file){ - Field[] fields = Config.class.getFields(); - for(Field field : fields){ - Type type = field.getType(); - if(type.equals(java.util.List.class) || type.equals(java.lang.String.class)){ - try{ - field.set(null,""); - }catch (Exception ignored){} - } - } - Iterator it = file.getKeys(true).iterator(); - while (it.hasNext()){ - String str = it.next(); - try{ - if(file.isConfigurationSection(str)) continue; - Config.class.getField(str.replace(".","_")).set(null, file.get(str)); - }catch (Exception e){ - error("Config loading error! Key: "+str); - } - } - } - public static void saveResource(String source,String to,boolean replace){ - if (source == null || source.equals("")) return; - source = source.replace('\\', '/'); - InputStream in = plugin.getResource(source); - if (in == null) return; - File outFile = new File("plugins/EnderDragon", to); - int lastIndex = to.lastIndexOf('/'); - File outDir = new File("plugins/EnderDragon", to.substring(0, Math.max(lastIndex, 0))); - if (!outDir.exists()) { - outDir.mkdirs(); - } - try { - if (!outFile.exists() || replace) { - OutputStream out = new FileOutputStream(outFile); - byte[] buf = new byte[1024]; - int len; - while ((len = in.read(buf)) > 0) { - out.write(buf, 0, len); - } - out.close(); - in.close(); - } - } catch (IOException ignored) {} - } - -} diff --git a/src/main/java/xanadu/enderdragon/config/Lang.java b/src/main/java/xanadu/enderdragon/config/Lang.java deleted file mode 100644 index 4fa11a5..0000000 --- a/src/main/java/xanadu/enderdragon/config/Lang.java +++ /dev/null @@ -1,176 +0,0 @@ -package xanadu.enderdragon.config; - -import org.bukkit.Bukkit; -import org.bukkit.command.CommandSender; -import org.bukkit.configuration.file.FileConfiguration; -import org.bukkit.entity.Player; -import xanadu.enderdragon.utils.SpecialColor; - -import java.lang.reflect.Field; -import java.util.Iterator; -import java.util.List; - -import static xanadu.enderdragon.EnderDragon.*; -import static xanadu.enderdragon.EnderDragon.server; - -public class Lang { - public static String version; - public static String plugin_prefix; - public static String plugin_wrong_file_version; - public static String plugin_read_file; - public static String plugin_item_read_error; - public static String plugin_checking_update; - public static String plugin_check_update_fail; - public static String plugin_out_of_date; - public static String plugin_up_to_date; - public static String plugin_disable; - public static String plugin_file_save_error; - public static String command_no_permission; - public static String command_reload_config; - public static String command_only_player; - public static String command_drop_item_add_empty; - public static String command_drop_item_add_invalid_chance; - public static String command_drop_item_add_succeed; - public static String command_drop_item_clear; - - - public static String gui_default_title; - public static String gui_not_found; - public static String gui_item_lore; - - public static String dragon_damage_display; - public static String dragon_player_inv_full; - public static String dragon_no_killer; - public static String dragon_auto_respawn; - public static String dragon_not_found; - - - public static String CommandTips1; - public static String CommandTips2; - public static String CommandTips3; - public static String CommandTips4; - public static void reload(FileConfiguration file){ - Field[] fields = Lang.class.getFields(); - for(Field field : fields){ - try{ - field.set(null,""); - }catch (Exception ignored){} - } - Iterator it = file.getKeys(true).iterator(); - while (it.hasNext()){ - String str = it.next(); - try{ - if(!file.isString(str)) continue; - Lang.class.getField(str.replace(".","_")).set(null,SpecialColor.transGradient(file.getString(str))); - }catch (Exception e){ - error("Language loading error! Key: "+str); - } - } - CommandTips1 = SpecialColor.transGradient(lang.getString("CommandTips1","§e/ed reload §a- reload the config")); - CommandTips2 = SpecialColor.transGradient(lang.getString("CommandTips2","§e/ed respawn §a- respawn a dragon")); - CommandTips3 = SpecialColor.transGradient(lang.getString("CommandTips3","§e/ed drop gui §a- view the drop_item")); - CommandTips4 = SpecialColor.transGradient(lang.getString("CommandTips4","§e/ed drop add §a- add drop_item to one dragon")); - } - public static void sendMessage(String str) { - if(str == null) { - Bukkit.getConsoleSender().sendMessage(Lang.plugin_prefix + "null"); - return; - } - if(str.contains("\\n")){ - String[] strings = str.split("\\\\n"); - for(String s : strings){ - sendMessage(s); - } - } - else Bukkit.getConsoleSender().sendMessage(Lang.plugin_prefix + str); - } - public static void info(String str){ - if(str == null) { - Bukkit.getConsoleSender().sendMessage("§a[EnderDragon] " + "null"); - return; - } - if(str.contains("\\n")){ - String[] strings = str.split("\\\\n"); - for(String s : strings){ - info(s); - } - } - else Bukkit.getConsoleSender().sendMessage("§a[EnderDragon] "+str); - } - public static void warn(String str){ - if(str == null) { - Bukkit.getConsoleSender().sendMessage("§e[EnderDragon] " + "null"); - return; - } - if(str.contains("\\n")){ - String[] strings = str.split("\\\\n"); - for(String s : strings){ - warn(s); - } - } - else Bukkit.getConsoleSender().sendMessage("§e[EnderDragon] "+str); - } - public static void error(String str){ - if(str == null) { - Bukkit.getConsoleSender().sendMessage("§c[EnderDragon] " + "null"); - return; - } - if(str.contains("\\n")){ - String[] strings = str.split("\\\\n"); - for(String s : strings){ - error(s); - } - } - else Bukkit.getConsoleSender().sendMessage("§c[EnderDragon] "+str); - } - public static void sendFeedback(CommandSender sender,String str){ - if(str == null) { - sender.sendMessage(Lang.plugin_prefix + "null"); - return; - } - if(str.contains("\\n")){ - String[] strings = str.split("\\\\n"); - for(String s : strings){ - sender.sendMessage(Lang.plugin_prefix + s); - } - } - else sender.sendMessage(Lang.plugin_prefix + str); - } - public static void broadcastMSG(String str){ - if(str == null) { - Bukkit.broadcastMessage(Lang.plugin_prefix + "null"); - return; - } - if(str.contains("\\n")){ - String[] strings = str.split("\\\\n"); - for(String s : strings){ - broadcastMSG(s); - } - } - else Bukkit.broadcastMessage(Lang.plugin_prefix + str); - } - public static void broadcastMSG(List list){ - if(list == null) return; - for(String str : list){ - Bukkit.broadcastMessage(Lang.plugin_prefix + str); - } - } - public static void runCommands(List list, Player p){ - if(list == null) return; - for (String cmd : list) { - if(cmd.equals("")) continue; - if(!cmd.contains("%player%")) server.dispatchCommand(server.getConsoleSender(),cmd); - else{ - if(p != null) server.dispatchCommand(server.getConsoleSender(),cmd.replaceAll("%player%",p.getName())); - } - } - } - public static void runCommands(List list){ - if(list == null) return; - for(String cmd : list){ - if(cmd.equals("")) continue; - server.dispatchCommand(server.getConsoleSender(),cmd); - } - } - -} diff --git a/src/main/java/xanadu/enderdragon/events/CreatureHurt.java b/src/main/java/xanadu/enderdragon/events/CreatureHurt.java deleted file mode 100644 index 0a8f51b..0000000 --- a/src/main/java/xanadu/enderdragon/events/CreatureHurt.java +++ /dev/null @@ -1,37 +0,0 @@ -package xanadu.enderdragon.events; - -import net.md_5.bungee.api.ChatMessageType; -import net.md_5.bungee.api.chat.TextComponent; -import org.bukkit.entity.EntityType; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.entity.EntityDamageByEntityEvent; -import xanadu.enderdragon.lang.Message; -import xanadu.enderdragon.tools.MyMath; - -import static xanadu.enderdragon.EnderDragon.*; - -public class CreatureHurt implements Listener { - @EventHandler - public void OnCreatureHurt(EntityDamageByEntityEvent e){ - int DamageVisual = plugin.getConfig().getInt("special-dragon.damage-visible"); - String MSG = Message.DamageDisplay; - if(DamageVisual == 0){return;} - if(e.getDamager().getType() != EntityType.PLAYER){return;} - if(e.getEntity().getType() != EntityType.ENDER_DRAGON){return;} - Player p = (Player) e.getDamager(); - double damage = MyMath.div(e.getFinalDamage(),1,2); - MSG = MSG.replaceAll("%damage%", String.valueOf(damage)); - if(DamageVisual == 1){ - if(mcMainVersion >= 11){p.sendTitle("",MSG,5,40,5);} - else if(mcMainVersion >= 9){p.sendTitle("",MSG);} - } - if(DamageVisual == 2){p.sendMessage(MSG);} - if(DamageVisual == 3){ - if(mcMainVersion >= 10){ - p.spigot().sendMessage(ChatMessageType.ACTION_BAR, TextComponent.fromLegacyText(MSG)); - } - } - } -} diff --git a/src/main/java/xanadu/enderdragon/events/DragonAttack.java b/src/main/java/xanadu/enderdragon/events/DragonAttack.java deleted file mode 100644 index addc4e1..0000000 --- a/src/main/java/xanadu/enderdragon/events/DragonAttack.java +++ /dev/null @@ -1,63 +0,0 @@ -package xanadu.enderdragon.events; - -import org.bukkit.entity.EnderDragon; -import org.bukkit.entity.EntityType; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.entity.EntityDamageByEntityEvent; -import org.bukkit.potion.PotionEffect; -import org.bukkit.potion.PotionEffectType; - -import java.util.List; - -import static xanadu.enderdragon.EnderDragon.*; - -public class DragonAttack implements Listener { - - @EventHandler - public void OnDragonAttack(EntityDamageByEntityEvent e){ - if(e.getDamager().getType() != EntityType.ENDER_DRAGON){return;} - if(!isSpecial(e.getDamager())){return;} - double multiple = plugin.getConfig().getDouble("special-dragon.damage-multiply"); - double rate = plugin.getConfig().getDouble("special-dragon.suck-blood.rate") / 100; - double BasicSuck = plugin.getConfig().getDouble("special-dragon.suck-blood.base-suck-blood"); - boolean SuckBlood = plugin.getConfig().getBoolean("special-dragon.suck-blood.enable"); - boolean OnlyPlayer = plugin.getConfig().getBoolean("special-dragon.suck-blood.only-player"); - List effects = plugin.getConfig().getStringList("special-dragon.attack-effect"); - if(e.getEntity() instanceof Player) { - Player p = (Player) e.getEntity(); - if (multiple > 0) { - double damage = e.getDamage(); - e.setDamage(damage * multiple); - } - for (String str : effects) { - if (str.length() > 0) { - String type = str.substring(0, str.indexOf(" ")); - int time = Integer.parseInt(str.substring(str.indexOf(" ") + 1, str.lastIndexOf(" "))); - int level = Integer.parseInt(str.substring(str.lastIndexOf(" ") + 1)); - PotionEffectType effectType = PotionEffectType.getByName(type.toUpperCase()); - if (effectType != null) { - p.addPotionEffect(new PotionEffect(effectType, time * 20, level - 1)); - } - } - } - if(!SuckBlood){return;} - double FinalDamage = e.getFinalDamage(); - EnderDragon dragon = (EnderDragon) e.getDamager(); - double health = dragon.getHealth()+FinalDamage*rate+BasicSuck; - if(health > dragon.getMaxHealth()){health = dragon.getMaxHealth();} - dragon.setHealth(health); - - } - else{ - if((!SuckBlood) || OnlyPlayer){return;} - double FinalDamage = e.getFinalDamage(); - EnderDragon dragon = (EnderDragon) e.getDamager(); - double health = dragon.getHealth()+FinalDamage*rate+BasicSuck; - if(health > dragon.getMaxHealth()){health = dragon.getMaxHealth();} - dragon.setHealth(health); - } - - } -} diff --git a/src/main/java/xanadu/enderdragon/events/DragonDamageByPlayerEvent.java b/src/main/java/xanadu/enderdragon/events/DragonDamageByPlayerEvent.java deleted file mode 100644 index b3c7685..0000000 --- a/src/main/java/xanadu/enderdragon/events/DragonDamageByPlayerEvent.java +++ /dev/null @@ -1,56 +0,0 @@ -package xanadu.enderdragon.events; - -import org.bukkit.entity.EnderDragon; -import org.bukkit.entity.Player; -import org.bukkit.event.HandlerList; -import org.bukkit.event.entity.EntityDamageByEntityEvent; - -public final class DragonDamageByPlayerEvent extends EntityDamageByEntityEvent { - private static final HandlerList handlers = new HandlerList(); - private boolean cancel = false; - private final Player damager; - private final EnderDragon dragon; - private final DamageCause cause; - private final double finalDamage; - - public DragonDamageByPlayerEvent(final Player damager, final EnderDragon dragon, final DamageCause cause, final double finalDamage) { - super(damager, dragon, cause, finalDamage); - this.damager = damager; - this.dragon = dragon; - this.cause = cause; - this.finalDamage = finalDamage; - } - - public static HandlerList getHandlerList() { - return handlers; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public void setCancelled(final boolean cancel) { - this.cancel = cancel; - } - - public boolean isCancelled() { - return cancel; - } - - public Player getDamager() { - return damager; - } - - public EnderDragon getDragon() { - return dragon; - } - - public DamageCause getDamagerCause() { - return cause; - } - @Override - public double getDamage() { - return finalDamage; - } -} diff --git a/src/main/java/xanadu/enderdragon/events/DragonDeath.java b/src/main/java/xanadu/enderdragon/events/DragonDeath.java deleted file mode 100644 index f6e609c..0000000 --- a/src/main/java/xanadu/enderdragon/events/DragonDeath.java +++ /dev/null @@ -1,128 +0,0 @@ -package xanadu.enderdragon.events; - -import org.bukkit.Bukkit; -import org.bukkit.Material; -import org.bukkit.block.Block; -import org.bukkit.entity.Entity; -import org.bukkit.entity.EntityType; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.entity.EntityDeathEvent; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.PlayerInventory; -import org.bukkit.scheduler.BukkitRunnable; -import xanadu.enderdragon.EnderDragon; -import xanadu.enderdragon.lang.Message; - -import java.io.IOException; -import java.util.List; -import java.util.concurrent.ThreadLocalRandom; - -import static xanadu.enderdragon.EnderDragon.*; - -public class DragonDeath implements Listener { - @EventHandler - public void OnDragonDeath(EntityDeathEvent e) throws IOException { - if(e.getEntity().getType() != EntityType.ENDER_DRAGON){return;} - int times = data.getInt("times"); - data.set("times",times+1); - data.save(dataF); - Player p = e.getEntity().getKiller(); - int exp = plugin.getConfig().getInt("special-dragon.exp-drop"); - int x = plugin.getConfig().getInt("special-dragon.dragon-egg-spawn.x"); - int y = plugin.getConfig().getInt("special-dragon.dragon-egg-spawn.y"); - int z = plugin.getConfig().getInt("special-dragon.dragon-egg-spawn.z"); - long delay = plugin.getConfig().getInt("special-dragon.dragon-egg-spawn.delay"); - boolean UseCMD = plugin.getConfig().getBoolean("command.enable"); - boolean EggChance = plugin.getConfig().getInt("special-dragon.dragon-egg-spawn.chance") > ThreadLocalRandom.current().nextInt(0, 100); - boolean AllBroadcast = !plugin.getConfig().getBoolean("only-special-death-remind"); - String skill = Message.KillerMessage; - String KillMsg = Message.DragonKillingBroadcast; - String nobody = Message.NobodyKill; - String InvIsFull = Message.PlayerInvFull; - if(KillMsg != null) { - if(p != null) { - if (isSpecial(e.getEntity()) || AllBroadcast) { - Bukkit.broadcastMessage(prefix + KillMsg.replaceAll("%times%", String.valueOf(times)).replaceAll("%player%", p.getDisplayName())); - } - } - else { - StringBuilder names = new StringBuilder(); - for (Entity entity : e.getEntity().getNearbyEntities(5,5,5)) { - if (entity instanceof Player) { - names.append(((Player) entity).getDisplayName()).append(","); - } - } - String name = names.toString(); - if(name.equals("")){name = nobody;} - if(name.endsWith(",")){name = name.substring(0,name.length()-1);} - if (isSpecial(e.getEntity()) || AllBroadcast) { - Bukkit.broadcastMessage(prefix + KillMsg.replaceAll("%times%", String.valueOf(times)).replaceAll("%player%", name)); - } - } - } - if(UseCMD) { - if (isSpecial(e.getEntity())) { - List CMDList = plugin.getConfig().getStringList("command.special-dragon"); - for (String command : CMDList) { - if (!(p == null && command.contains("%player%"))) { - server.dispatchCommand(server.getConsoleSender(), command.replaceAll("%player%", p.getName())); - } - } - } - else { - List CMDList = plugin.getConfig().getStringList("command.normal-dragon"); - for (String command : CMDList) { - if (!(p == null && command.contains("%player%"))) { - server.dispatchCommand(server.getConsoleSender(), command.replaceAll("%player%", p.getName())); - } - } - } - } - if(isSpecial(e.getEntity())){ - e.setDroppedExp(exp); - if (EggChance) { - BukkitRunnable runnable = new BukkitRunnable() { - @Override - public void run() { - Block block = e.getEntity().getWorld().getBlockAt(x, y, z); - block.setType(Material.DRAGON_EGG); - } - }; - runnable.runTaskLater(EnderDragon.getPlugin(EnderDragon.class), delay ); - } - if(p != null){p.sendMessage(prefix + skill);} - - List datum = data.getStringList("items"); - int max = datum.size() / 2 ; - boolean warning = false; - for(int i=0 ; i Math.random() * 100; - if(judge){ - String str = datum.get(i*2-2); - ItemStack item = StringToItemStack(str); - if(p == null){ - e.getEntity().getWorld().dropItem(e.getEntity().getLocation(),item); - } - else{ - if (p.getInventory().firstEmpty() == -1) { - warning = true; - } - PlayerInventory inv = p.getInventory(); - inv.addItem(item); - } - } - } - if(warning){p.sendMessage(prefix + InvIsFull);} - if(mcMainVersion < 11) { - List special = data.getStringList("special"); - special.remove(e.getEntity().getUniqueId().toString()); - data.set("special", special); - data.save(dataF); - } - } - } -} diff --git a/src/main/java/xanadu/enderdragon/events/DragonHeal.java b/src/main/java/xanadu/enderdragon/events/DragonHeal.java deleted file mode 100644 index 1be9dfb..0000000 --- a/src/main/java/xanadu/enderdragon/events/DragonHeal.java +++ /dev/null @@ -1,25 +0,0 @@ -package xanadu.enderdragon.events; - -import org.bukkit.entity.EntityType; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.entity.EntityRegainHealthEvent; - -import static xanadu.enderdragon.EnderDragon.isSpecial; -import static xanadu.enderdragon.EnderDragon.plugin; - -public class DragonHeal implements Listener { - @EventHandler - public void OnDragonHeal(EntityRegainHealthEvent e){ - if(e.getEntity().getType() != EntityType.ENDER_DRAGON){return;} - if(!e.getRegainReason().equals(EntityRegainHealthEvent.RegainReason.ENDER_CRYSTAL)){return;} - double NormalHeal = plugin.getConfig().getDouble("normal-dragon.crystal-heal"); - double SpecialHeal = plugin.getConfig().getDouble("special-dragon.crystal-heal"); - if(isSpecial(e.getEntity())){ - e.setAmount(SpecialHeal / 2); - } - else{ - e.setAmount(NormalHeal / 2); - } - } -} diff --git a/src/main/java/xanadu/enderdragon/events/DragonSpawn.java b/src/main/java/xanadu/enderdragon/events/DragonSpawn.java deleted file mode 100644 index 62cb35f..0000000 --- a/src/main/java/xanadu/enderdragon/events/DragonSpawn.java +++ /dev/null @@ -1,77 +0,0 @@ -package xanadu.enderdragon.events; - -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.entity.EntityType; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.entity.CreatureSpawnEvent; -import org.bukkit.scoreboard.Team; -import xanadu.enderdragon.lang.Message; - -import java.io.IOException; -import java.util.List; -import java.util.concurrent.ThreadLocalRandom; - -import static xanadu.enderdragon.EnderDragon.*; - -public class DragonSpawn implements Listener { - - @EventHandler - public void OnDragonSpawn(CreatureSpawnEvent e) throws IOException { - if(e.getEntity().getType() != EntityType.ENDER_DRAGON){return;} - int times = data.getInt("times"); - double health = plugin.getConfig().getDouble("special-dragon.max-health"); - double SpawnHealth = plugin.getConfig().getDouble("special-dragon.spawn-health"); - int circle = plugin.getConfig().getInt("special-dragon.respawn-circle"); - if (circle == 0 ){circle = 999999999;} - boolean chance = plugin.getConfig().getInt("special-dragon.chance") > ThreadLocalRandom.current().nextInt(0, 100); - boolean SpecialMsg0 = plugin.getConfig().getBoolean("special-dragon.spawn-remind"); - String SpawnMsg = Message.DragonSpawnBroadcast; - String SpecialMsg = Message.SpecialBroadcast; - String Name = plugin.getConfig().getString("special-dragon.name"); - String NormalName = plugin.getConfig().getString("normal-dragon.name"); - String color = plugin.getConfig().getString("special-dragon.glow-color"); - if(SpawnMsg == null){SpawnMsg = "none";} - if(!SpawnMsg.equals("none")){ - Bukkit.broadcastMessage(prefix + SpawnMsg.replaceAll("%times%", String.valueOf(times))); - } - if(times % circle == 0 && chance) { - if(mcMainVersion >= 11){e.getEntity().addScoreboardTag("special");} - else{ - List special = data.getStringList("special"); - special.add(e.getEntity().getUniqueId().toString()); - data.set("special",special); - data.save(dataF); - } - if(health > 0) { - e.getEntity().setMaxHealth(health); - } - e.getEntity().setHealth(SpawnHealth); - if (color != null && mcMainVersion >= 9) { - if(!color.equalsIgnoreCase("disable")) { - color = color.toUpperCase(); - if(server.getScoreboardManager().getMainScoreboard().getTeam("enderdragon-glow") == null) { - server.getScoreboardManager().getMainScoreboard().registerNewTeam("enderdragon-glow"); - } - Team team = server.getScoreboardManager().getMainScoreboard().getTeam("enderdragon-glow"); - if(mcMainVersion >= 12) { - team.setColor(ChatColor.valueOf(color)); - } - else{ - team.setPrefix(ChatColor.valueOf(color).toString()); - } - team.addEntry(e.getEntity().getUniqueId().toString()); - e.getEntity().setGlowing(true); - } - } - e.getEntity().setCustomName(Name); - if(SpecialMsg0 && SpecialMsg != null){ - Bukkit.broadcastMessage(prefix + SpecialMsg); - } - } - else{ - e.getEntity().setCustomName(NormalName); - } - } -} diff --git a/src/main/java/xanadu/enderdragon/gui/GUI.java b/src/main/java/xanadu/enderdragon/gui/GUI.java deleted file mode 100644 index 9843bf0..0000000 --- a/src/main/java/xanadu/enderdragon/gui/GUI.java +++ /dev/null @@ -1,196 +0,0 @@ -package xanadu.enderdragon.gui; - -import org.bukkit.Material; -import org.bukkit.entity.Item; -import org.bukkit.inventory.Inventory; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; -import xanadu.enderdragon.config.Lang; -import xanadu.enderdragon.gui.slots.DragonSlot; -import xanadu.enderdragon.gui.slots.EmptySlot; -import xanadu.enderdragon.gui.slots.ItemSlot; -import xanadu.enderdragon.manager.ItemManager; -import xanadu.enderdragon.utils.MyDragon; - -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; - -import static xanadu.enderdragon.manager.DragonManager.*; - -public class GUI { - protected String title; - protected int maxPage; - protected int page; - protected int size; - protected ArrayList pagedItems; - protected ArrayList pagedData; - protected List slots; - protected Inventory inv; - protected HashSet dynamics; - - protected GUI(String str,int size,int maxPage){ - this.slots = new ArrayList<>(); - this.pagedItems = new ArrayList<>(); - this.pagedData = new ArrayList<>(); - this.dynamics = new HashSet<>(); - this.title = str; - this.size = size; - this.maxPage = maxPage; - this.page = 0; - } - public GUISlot getSlot(int index){ - GUISlot slot = this.slots.get(index); - if(slot == null) return new EmptySlot(); - return slot; - } - public void setPage(int a) { - this.page = a; - for(int i=0;i= this.pagedItems.size()) { - this.pagedItems.add(new ItemStack[this.size]); - } - for(int j = 0 ; j < this.slots.size() ; j++){ - GUISlot slot = this.slots.get(j); - if (slot instanceof ItemSlot) { - ItemStack itemStack = this.pagedItems.get(i)[j]; - if (itemStack == null) { - this.pagedItems.get(i)[j] = item; - return; - } - } - } - } - } - protected void addDragon(ItemStack item,String unique_name) { - for(int i = 0 ; i < this.maxPage ; i++){ - if (i >= this.pagedItems.size()) { - this.pagedItems.add(new ItemStack[this.size]); - this.pagedData.add(new String[this.size]); - } - for(int j = 0 ; j < this.slots.size() ; j++){ - if (this.slots.get(j) instanceof DragonSlot) { - ItemStack itemStack = this.pagedItems.get(i)[j]; - if (itemStack == null) { - //itemStack = item;(可以吗?) - this.pagedItems.get(i)[j] = item; - this.pagedData.get(i)[j] = unique_name; - return; - } - } - } - } - } - public String getData(int page,int index){ - return this.pagedData.get(page)[index]; - } - public int getSize() { - return this.size; - } - public int getPage(){ - return this.page; - } - public void prev() { - if (this.page > 0) { - this.setPage(this.page - 1); - } - } - - public void addPage() { - if (this.pagedItems.size() >= this.maxPage) { - return; - } - this.pagedItems.add(new ItemStack[this.size]); - } - - public void next() { - if (this.page < this.pagedItems.size() - 1) { - this.setPage(this.page + 1); - } - } -} diff --git a/src/main/java/xanadu/enderdragon/gui/GUIHolder.java b/src/main/java/xanadu/enderdragon/gui/GUIHolder.java deleted file mode 100644 index cccfa89..0000000 --- a/src/main/java/xanadu/enderdragon/gui/GUIHolder.java +++ /dev/null @@ -1,20 +0,0 @@ -package xanadu.enderdragon.gui; - -import org.bukkit.inventory.Inventory; -import org.bukkit.inventory.InventoryHolder; - -public class GUIHolder implements InventoryHolder { - private final GUI gui; - - public Inventory getInventory() { - return this.gui.getInventory(); - } - - public GUI getGUI() { - return this.gui; - } - - public GUIHolder(GUI gui) { - this.gui = gui; - } -} diff --git a/src/main/java/xanadu/enderdragon/gui/GUISlot.java b/src/main/java/xanadu/enderdragon/gui/GUISlot.java deleted file mode 100644 index 15c5226..0000000 --- a/src/main/java/xanadu/enderdragon/gui/GUISlot.java +++ /dev/null @@ -1,39 +0,0 @@ -package xanadu.enderdragon.gui; - -import org.bukkit.configuration.ConfigurationSection; -import org.bukkit.inventory.ItemStack; -import xanadu.enderdragon.gui.slots.*; - -public abstract class GUISlot { - private final GUISlotType guiSlotType; - public abstract ItemStack getItem(); - public abstract ItemStack getItemOnDisable(); - protected GUISlot(GUISlotType type){ - this.guiSlotType = type; - } - public final GUISlotType getType(){ - return this.guiSlotType; - } - public static GUISlot parse(ConfigurationSection section){ - if(section == null) return new EmptySlot(); - GUISlotType guiSlotType = GUISlotType.getByName(section.getString("type")); - switch (guiSlotType) { - case ITEM_SLOT : { - return new ItemSlot(section); - } - case DRAGON_SLOT : { - return new DragonSlot(section); - } - case PAGE_PREV : - case PAGE_NEXT : - case PAGE_TIP : - case TIP : { - return new TipSlot(guiSlotType, section); - } - case PAGE_JUMP : { - return new PageJumpSlot(section); - } - } - return new EmptySlot(); - } -} diff --git a/src/main/java/xanadu/enderdragon/gui/GUISlotType.java b/src/main/java/xanadu/enderdragon/gui/GUISlotType.java deleted file mode 100644 index f7a5b0f..0000000 --- a/src/main/java/xanadu/enderdragon/gui/GUISlotType.java +++ /dev/null @@ -1,29 +0,0 @@ -package xanadu.enderdragon.gui; - -import java.util.Map; -import java.util.TreeMap; - -public enum GUISlotType { - TIP, - PAGE_TIP, - PAGE_PREV, - PAGE_NEXT, - PAGE_JUMP, - EMPTY, - ITEM_SLOT, - DRAGON_SLOT; - private static final Map mp = new TreeMap(String.CASE_INSENSITIVE_ORDER); - public static GUISlotType getByName(String str){ - if(str == null) return EMPTY; - return mp.getOrDefault(str.replaceAll("_",""),EMPTY); - } - static{ - GUISlotType[] values = values(); - for (GUISlotType guiSlotType : values) { - String name = guiSlotType.name(); - String target = "_"; - String replacement = ""; - mp.put(name.replaceAll(target, replacement), guiSlotType); - } - } -} diff --git a/src/main/java/xanadu/enderdragon/gui/GUIWrapper.java b/src/main/java/xanadu/enderdragon/gui/GUIWrapper.java deleted file mode 100644 index ffdaad6..0000000 --- a/src/main/java/xanadu/enderdragon/gui/GUIWrapper.java +++ /dev/null @@ -1,82 +0,0 @@ -package xanadu.enderdragon.gui; - -import org.bukkit.Bukkit; -import org.bukkit.configuration.ConfigurationSection; -import xanadu.enderdragon.gui.slots.EmptySlot; -import xanadu.enderdragon.config.Lang; - -import java.util.HashMap; -import java.util.List; - -public class GUIWrapper extends GUI{ - private final String name; - private int type; - - public String getName() { - return this.name; - } - - public GUIWrapper(GUIWrapper a, String key) { - super(a.title, a.size, a.maxPage); - this.inv = Bukkit.createInventory(new GUIHolder(this), this.size, this.title); - this.slots.addAll(a.slots); - this.dynamics.addAll(a.dynamics); - this.name = a.name; - this.type = a.type; - this.init(); - this.resetPagedItem(type,key); - this.setPage(0); - } - public GUIWrapper(ConfigurationSection config) { - super(config.getString("Title", Lang.gui_default_title).replaceAll("&", "§"), calcline(config.getStringList("Slots").size()) * 9, config.getInt("Page", 1000)); - this.type = 0; - this.name = config.getName(); - this.inv = Bukkit.createInventory(new GUIHolder(this), this.size, this.title); - for(int i = 0 ; i < this.size ; i++){ - slots.add(new EmptySlot()); - } - ConfigurationSection section = config.getConfigurationSection("Items"); - HashMap hash = new HashMap(); - if (section == null) return; - for (String s : section.getKeys(false)) { - GUISlot slot = GUISlot.parse(section.getConfigurationSection(s)); - hash.put(s.charAt(0), slot); - } - int n2 = 0; - List stringList = config.getStringList("Slots"); - for (String line : stringList) { - int i; - for (i = 0; i < line.length() && i < 9; ++i) { - char value = line.charAt(i); - this.slots.set(n2++, (hash.getOrDefault(value, new EmptySlot()))); - } - while(i ++ < 9){ - this.slots.set(n2++, new EmptySlot()); - } - } - boolean b = false; - for(int i = 0 ; i < slots.size(); i++){ - GUISlotType type = this.slots.get(i).getType(); - if(type == GUISlotType.PAGE_PREV || type == GUISlotType.PAGE_NEXT || type == GUISlotType.PAGE_TIP){ - this.dynamics.add(i); - } - else if(type == GUISlotType.ITEM_SLOT){ - this.type = 1; - } - else if(type == GUISlotType.DRAGON_SLOT){ - this.type = 2; - } - else if (type == GUISlotType.PAGE_JUMP) { - b = true; - } - } - } - - - private static int calcline(final int a) { - if (a < 1) { - return 1; - } - return Math.min(a, 6); - } -} diff --git a/src/main/java/xanadu/enderdragon/gui/Reward.java b/src/main/java/xanadu/enderdragon/gui/Reward.java deleted file mode 100644 index 1f71f6c..0000000 --- a/src/main/java/xanadu/enderdragon/gui/Reward.java +++ /dev/null @@ -1,71 +0,0 @@ -package xanadu.enderdragon.gui; - -import org.bukkit.Material; -import org.bukkit.configuration.file.YamlConfiguration; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; -import xanadu.enderdragon.utils.Chance; - -import static xanadu.enderdragon.manager.TaskManager.getCurrentTimeWithSpecialFormat; - - -public class Reward extends ItemStack { - protected String name; - protected Chance chance; - private ItemStack item; - - @Override - public String toString(){ - YamlConfiguration yaml = new YamlConfiguration(); - if(name == null){ - ItemMeta meta = item.getItemMeta(); - if(meta != null) { - String displayName = meta.getDisplayName(); - if("".equals(displayName) || displayName == null){ - name = item.getType().name().toLowerCase() + "(" + getCurrentTimeWithSpecialFormat() + ")"; - } - else name = meta.getDisplayName(); - } - else name = item.getType().name().toLowerCase() + "(" + getCurrentTimeWithSpecialFormat() + ")"; - } - - - yaml.set(name + ".data", item); - yaml.set(name + ".drop_chance.value",chance.getValue()); - yaml.set(name + ".drop_chance.format",chance.getStr()); - return yaml.saveToString(); - } - - public String getName() { - return this.name; - } -// -// @Override -// public int hashCode() { -// return this.name.hashCode(); -// } - - public ItemStack getItem() { - if(item == null) return new ItemStack(Material.AIR); - return item.clone(); - } - public Chance getChance(){ - return this.chance; - } - - - - protected Reward(ItemStack item,String chance) { - this.item = item; - - } - public Reward(ItemStack item, Chance chance){ - this.item = item; - this.chance = chance; - } - public Reward(ItemStack item){ - this.item = item; - this.chance = null; - } - -} diff --git a/src/main/java/xanadu/enderdragon/gui/slots/DragonSlot.java b/src/main/java/xanadu/enderdragon/gui/slots/DragonSlot.java deleted file mode 100644 index 97fe765..0000000 --- a/src/main/java/xanadu/enderdragon/gui/slots/DragonSlot.java +++ /dev/null @@ -1,37 +0,0 @@ -package xanadu.enderdragon.gui.slots; - -import org.bukkit.Material; -import org.bukkit.configuration.ConfigurationSection; -import org.bukkit.inventory.ItemStack; -import xanadu.enderdragon.gui.GUISlot; -import xanadu.enderdragon.gui.GUISlotType; - -public class DragonSlot extends GUISlot { - private String unique_name; - private ItemStack item; - - public DragonSlot(ConfigurationSection section) { - super(GUISlotType.DRAGON_SLOT); - } - - @Override - public ItemStack getItem() { - return new ItemStack(Material.AIR); - } - @Override - public ItemStack getItemOnDisable(){ - return this.item; - } - public void setUnique_name(String str){ - this.unique_name = str; - } - public String getUnique_name(){ - return this.unique_name; - } - - public DragonSlot(GUISlotType a, ItemStack item) { - super(a); - this.item = item; - } - -} diff --git a/src/main/java/xanadu/enderdragon/gui/slots/EmptySlot.java b/src/main/java/xanadu/enderdragon/gui/slots/EmptySlot.java deleted file mode 100644 index a8c3db6..0000000 --- a/src/main/java/xanadu/enderdragon/gui/slots/EmptySlot.java +++ /dev/null @@ -1,20 +0,0 @@ -package xanadu.enderdragon.gui.slots; - -import org.bukkit.Material; -import org.bukkit.inventory.ItemStack; -import xanadu.enderdragon.gui.GUISlot; -import xanadu.enderdragon.gui.GUISlotType; - -public class EmptySlot extends GUISlot { - @Override - public ItemStack getItem(){ - return new ItemStack(Material.AIR); - } - @Override - public ItemStack getItemOnDisable(){ - return new ItemStack(Material.AIR); - } - public EmptySlot(){ - super(GUISlotType.EMPTY); - } -} diff --git a/src/main/java/xanadu/enderdragon/gui/slots/ItemSlot.java b/src/main/java/xanadu/enderdragon/gui/slots/ItemSlot.java deleted file mode 100644 index 9076c9e..0000000 --- a/src/main/java/xanadu/enderdragon/gui/slots/ItemSlot.java +++ /dev/null @@ -1,64 +0,0 @@ -package xanadu.enderdragon.gui.slots; - -import org.bukkit.Material; -import org.bukkit.configuration.ConfigurationSection; -import org.bukkit.inventory.ItemStack; -import xanadu.enderdragon.gui.GUISlot; -import xanadu.enderdragon.gui.GUISlotType; - -public class ItemSlot extends GUISlot{ - private int i; -// private final LoreMap G; - private boolean XXXxxx; - private ItemStack item; - - @Override - public ItemStack getItem() { - return this.item; - } - @Override - public ItemStack getItemOnDisable(){ - return this.item; - } - - public int getMaxAmount() { - return this.i; - } - -// public boolean accept(String a) { -// if (!this.XXXxxx) { -// return true; -// } -// if (this.G.get(a) != null) { -// return true; -// } -// return false; -// } - - public ItemSlot(ConfigurationSection section) { - super(GUISlotType.ITEM_SLOT); - String str = section.getString("Item"); - if(str == null){ - this.item = new ItemStack(Material.AIR); - } - else{ -// this.item = EnderDragon.getInstance().getItemManager().stringToItemStack(str); - } - - } - -// public ItemSlot() { -// super(GUISlotType.ITEM_SLOT); -// this.G = new LoreMap(false, false, false, false); -// this.XXXxxx = false; -// this.i = 64; -// } - - public boolean acceptAll() { - if (!this.XXXxxx) { - return true; - } - return false; - } - -} diff --git a/src/main/java/xanadu/enderdragon/gui/slots/PageJumpSlot.java b/src/main/java/xanadu/enderdragon/gui/slots/PageJumpSlot.java deleted file mode 100644 index a4da083..0000000 --- a/src/main/java/xanadu/enderdragon/gui/slots/PageJumpSlot.java +++ /dev/null @@ -1,26 +0,0 @@ -package xanadu.enderdragon.gui.slots; - -import org.bukkit.configuration.ConfigurationSection; -import org.bukkit.inventory.ItemStack; -import xanadu.enderdragon.gui.GUISlotType; - -import static xanadu.enderdragon.manager.ItemManager.readAsItem; - -public class PageJumpSlot extends TipSlot{ - private final String name; - private ItemStack item; - - public String getGuiName() { - return this.name; - } - - public PageJumpSlot(ConfigurationSection section) { - super(GUISlotType.PAGE_JUMP, section); - this.name = section.getString("gui"); - this.item = readAsItem(section,"data"); - } - @Override - public ItemStack getItem() { - return this.item; - } -} diff --git a/src/main/java/xanadu/enderdragon/gui/slots/TipSlot.java b/src/main/java/xanadu/enderdragon/gui/slots/TipSlot.java deleted file mode 100644 index 5694e13..0000000 --- a/src/main/java/xanadu/enderdragon/gui/slots/TipSlot.java +++ /dev/null @@ -1,44 +0,0 @@ -package xanadu.enderdragon.gui.slots; - -import org.bukkit.Material; -import org.bukkit.configuration.ConfigurationSection; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; -import xanadu.enderdragon.gui.GUISlot; -import xanadu.enderdragon.gui.GUISlotType; - -import static xanadu.enderdragon.manager.ItemManager.readAsItem; - -public class TipSlot extends GUISlot { - private ItemStack item; - private ItemStack itemOnDisable; - public TipSlot(GUISlotType slotType, Material material, String str) { - super(slotType); - this.item = new ItemStack(material); - ItemMeta meta = this.item.getItemMeta(); - meta.setDisplayName(str); - this.item.setItemMeta(meta); - } - - public TipSlot(GUISlotType slotType, ConfigurationSection section) { - super(slotType); - this.item = readAsItem(section,"data"); - if(slotType == GUISlotType.PAGE_PREV || slotType == GUISlotType.PAGE_NEXT){ - this.itemOnDisable = readAsItem(section,"data_disable"); - } - } - - @Override - public ItemStack getItem() { - return this.item; - } - @Override - public ItemStack getItemOnDisable(){ - return this.itemOnDisable; - } - - public TipSlot(GUISlotType a, ItemStack item) { - super(a); - this.item = item; - } -} diff --git a/src/main/java/xanadu/enderdragon/listeners/CreatureSpawnListener.java b/src/main/java/xanadu/enderdragon/listeners/CreatureSpawnListener.java deleted file mode 100644 index 16c9072..0000000 --- a/src/main/java/xanadu/enderdragon/listeners/CreatureSpawnListener.java +++ /dev/null @@ -1,130 +0,0 @@ -package xanadu.enderdragon.listeners; - -import org.bukkit.*; -import org.bukkit.attribute.Attribute; -import org.bukkit.block.Block; -import org.bukkit.boss.BarColor; -import org.bukkit.boss.BarStyle; -import org.bukkit.boss.BossBar; -import org.bukkit.entity.*; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; -import org.bukkit.event.block.Action; -import org.bukkit.event.entity.CreatureSpawnEvent; -import org.bukkit.event.entity.EntitySpawnEvent; -import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.potion.PotionEffect; -import xanadu.enderdragon.config.Config; -import xanadu.enderdragon.config.Lang; -import xanadu.enderdragon.utils.MyDragon; - -import java.util.Collection; - -import static xanadu.enderdragon.EnderDragon.*; -import static xanadu.enderdragon.manager.DragonManager.*; - -public class CreatureSpawnListener implements Listener { - @EventHandler(priority = EventPriority.LOW) - public void OnDragonSpawn(CreatureSpawnEvent e){ - if(!(e.getEntity() instanceof EnderDragon)) return; - EnderDragon dragon = (EnderDragon) e.getEntity(); - MyDragon myDragon = judge(); - if(myDragon == null) { - Lang.warn("special_dragon_jude_mode setting error!"); - return; - } - setSpecialKey(dragon, myDragon.unique_name); - int times = data.getInt("times"); - Lang.runCommands(myDragon.spawn_cmd); - for(String str : myDragon.spawn_broadcast_msg){ - Lang.broadcastMSG(str.replaceAll("%times%",String.valueOf(times))); - } - dragon.setCustomName(myDragon.display_name); - modifyAttribute(dragon, Attribute.GENERIC_MAX_HEALTH, myDragon.max_health - 200); - dragon.setHealth(myDragon.spawn_health); - modifyAttribute(dragon, Attribute.GENERIC_MOVEMENT_SPEED, myDragon.move_speed_modify); - modifyAttribute(dragon, Attribute.GENERIC_ARMOR, myDragon.armor_modify); - modifyAttribute(dragon, Attribute.GENERIC_ARMOR_TOUGHNESS, myDragon.armor_toughness_modify); - String color = myDragon.glow_color.toUpperCase(); - if(!color.equals("NONE")){ - ChatColor chatColor; - if(color.equals("RANDOM")) chatColor = randomColor(); - else chatColor = ChatColor.valueOf(color); - setGlowingColor(dragon,chatColor); - } - else dragon.setGlowing(false); - if(mcMainVersion >= 14 || mcMainVersion >= 13 && mcPatchVersion >= 2){ - BossBar bossBar = dragon.getBossBar(); - if(bossBar != null){ - bossBar.setColor(BarColor.valueOf(myDragon.bossbar_color.toUpperCase())); - bossBar.setStyle(BarStyle.valueOf(myDragon.bossbar_style.toUpperCase())); - } - } - } - @EventHandler(priority = EventPriority.HIGHEST) - public void OnCrystalPlaced(final PlayerInteractEvent e){ - if(!Config.resist_player_respawn) return; - if(e.getAction() != Action.RIGHT_CLICK_BLOCK) return; - if(e.getMaterial() != Material.END_CRYSTAL) return; - if(e.getClickedBlock() == null) return; - Material blockType = e.getClickedBlock().getType(); - if(blockType != Material.OBSIDIAN && blockType != Material.BEDROCK) return; - World world = e.getPlayer().getWorld(); - if(world.getEnvironment() != World.Environment.THE_END) return; - Block block = e.getClickedBlock(); - int d0 = block.getX(); - int d1 = block.getY() + 1; - int d2 = block.getZ(); - if(world.getBlockAt(d0, d1, d2).getType() != Material.AIR) return; - Location cen = block.getLocation().clone().add(0.5,1,0.5); - Collection list = world.getNearbyEntities(cen,0.5,1,0.5); - if(!list.isEmpty()) return; - e.setCancelled(true); - EnderCrystal crystal = (EnderCrystal) world.spawnEntity(cen,EntityType.ENDER_CRYSTAL); - crystal.setShowingBottom(false); - } - @EventHandler(priority = EventPriority.HIGH) - public void OnEffectCloudSpawn(final EntitySpawnEvent e){ - if(!(e.getEntity() instanceof AreaEffectCloud)) return; - AreaEffectCloud effectCloud = (AreaEffectCloud) e.getEntity(); - if(effectCloud.getSource() == null) return; - if(!(effectCloud.getSource() instanceof EnderDragon)) return; - EnderDragon dragon = (EnderDragon) effectCloud.getSource(); - String unique_name = getSpecialKey(dragon); - if(unique_name == null) return; - MyDragon myDragon = mp.get(unique_name); - if(myDragon == null) return; - effectCloud.setRadius((float) myDragon.effect_cloud_original_radius); - effectCloud.setRadiusPerTick((float) myDragon.effect_cloud_expand_speed/20f); - effectCloud.setDuration(myDragon.effect_cloud_duration * 20); - if(myDragon.effect_cloud_color_R != -1){ - effectCloud.setParticle(Particle.SPELL_MOB); - effectCloud.setColor(Color.fromRGB(myDragon.effect_cloud_color_R,myDragon.effect_cloud_color_G,myDragon.effect_cloud_color_B)); - } - effectCloud.clearCustomEffects(); - for(PotionEffect effect : myDragon.effect_cloud_potion){ - effectCloud.addCustomEffect(effect,true); - } - } - @EventHandler(priority = EventPriority.LOW) - public void OnDragonBreathGather(final PlayerInteractEvent e){ - if(!Config.resist_dragon_breath_gather) return; - if(e.getMaterial() != Material.GLASS_BOTTLE) return; - if(e.getAction() != Action.RIGHT_CLICK_BLOCK && e.getAction() != Action.RIGHT_CLICK_AIR) return; - World world = e.getPlayer().getWorld(); - if(world.getEnvironment() != World.Environment.THE_END) return; - Player p = e.getPlayer(); - Location cen = p.getLocation().clone().add(0d,0.9d,0d); - Collection list = world.getNearbyEntities(cen,2.3d,2.9d,2.3d); - for(Entity entity : list){ - if(entity instanceof AreaEffectCloud) { - AreaEffectCloud effectCloud = (AreaEffectCloud) entity; - if(effectCloud.getSource() instanceof EnderDragon){ - e.setCancelled(true); - break; - } - } - } - } -} diff --git a/src/main/java/xanadu/enderdragon/listeners/DragonBaseHurtListener.java b/src/main/java/xanadu/enderdragon/listeners/DragonBaseHurtListener.java deleted file mode 100644 index 2955461..0000000 --- a/src/main/java/xanadu/enderdragon/listeners/DragonBaseHurtListener.java +++ /dev/null @@ -1,33 +0,0 @@ -package xanadu.enderdragon.listeners; - -import org.bukkit.entity.*; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; -import org.bukkit.event.entity.EntityDamageByEntityEvent; -import xanadu.enderdragon.events.DragonDamageByPlayerEvent; - -import static xanadu.enderdragon.EnderDragon.pm; - -public class DragonBaseHurtListener implements Listener { - @EventHandler(priority = EventPriority.HIGHEST) - public void BaseAttackToDragon(EntityDamageByEntityEvent e){ - if(e.isCancelled()) return; - if(e.getDamage() <= 0.0) return; - Entity victim = e.getEntity(); - Entity entity = e.getDamager(); - if(victim instanceof EnderDragon){ - EnderDragon dragon = (EnderDragon) victim; - if(entity instanceof Player){ - Player player = (Player) entity; - pm.callEvent(new DragonDamageByPlayerEvent(player,dragon,e.getCause(),e.getFinalDamage())); - } - else if(entity instanceof Projectile){ - Projectile projectile = (Projectile) entity; - if(!(projectile.getShooter() instanceof Player)) return; - Player damager = (Player) projectile.getShooter(); - pm.callEvent(new DragonDamageByPlayerEvent(damager,dragon,e.getCause(),e.getFinalDamage())); - } - } - } -} diff --git a/src/main/java/xanadu/enderdragon/listeners/DragonDamageByPlayerListener.java b/src/main/java/xanadu/enderdragon/listeners/DragonDamageByPlayerListener.java deleted file mode 100644 index 10464ae..0000000 --- a/src/main/java/xanadu/enderdragon/listeners/DragonDamageByPlayerListener.java +++ /dev/null @@ -1,47 +0,0 @@ -package xanadu.enderdragon.listeners; - -import net.md_5.bungee.api.ChatMessageType; -import net.md_5.bungee.api.chat.TextComponent; -import org.bukkit.entity.EnderDragon; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; -import xanadu.enderdragon.config.Config; -import xanadu.enderdragon.events.DragonDamageByPlayerEvent; -import xanadu.enderdragon.config.Lang; -import xanadu.enderdragon.utils.MathUtils; - -public class DragonDamageByPlayerListener implements Listener { - @EventHandler(priority = EventPriority.HIGHEST) - public void OnDragonDamageByPlayer(DragonDamageByPlayerEvent e){ - Player p = e.getDamager(); - double damage = e.getFinalDamage(); - EnderDragon dragon = e.getDragon(); - double max_health = dragon.getMaxHealth(); - double remain_health = Math.max(dragon.getHealth()-e.getFinalDamage(),0.0); - String str = Lang.dragon_damage_display.replaceAll("%damage%", format(damage)).replaceAll("%remain_health%",format(remain_health)).replaceAll("%max_health%",format(max_health)); - switch (Config.damage_visible_mode.toLowerCase()){ - case "actionbar" : { - p.spigot().sendMessage(ChatMessageType.ACTION_BAR, TextComponent.fromLegacyText(str)); - break; - } - case "chatbox" : { - Lang.sendFeedback(p,str); - break; - } - case "subtitle" : { - p.sendTitle("",str,5,40,5); - break; - } - default : { - - } - - } - } - private String format(double d0){ - return String.valueOf(MathUtils.div(d0,1,2)); - } - -} diff --git a/src/main/java/xanadu/enderdragon/listeners/DragonDeathListener.java b/src/main/java/xanadu/enderdragon/listeners/DragonDeathListener.java deleted file mode 100644 index 7468111..0000000 --- a/src/main/java/xanadu/enderdragon/listeners/DragonDeathListener.java +++ /dev/null @@ -1,106 +0,0 @@ -package xanadu.enderdragon.listeners; - -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.World; -import org.bukkit.block.Block; -import org.bukkit.entity.EnderDragon; -import org.bukkit.entity.Entity; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.entity.EntityDeathEvent; -import org.bukkit.inventory.ItemStack; -import org.bukkit.scheduler.BukkitRunnable; -import xanadu.enderdragon.gui.Reward; -import xanadu.enderdragon.utils.MyDragon; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.ThreadLocalRandom; - -import static xanadu.enderdragon.EnderDragon.*; -import static xanadu.enderdragon.config.Lang.*; -import static xanadu.enderdragon.manager.DragonManager.getSpecialKey; -import static xanadu.enderdragon.manager.DragonManager.mp; - -public class DragonDeathListener implements Listener { - @EventHandler - public void OnDragonDeath(EntityDeathEvent e){ - if(!(e.getEntity() instanceof EnderDragon)) return; - EnderDragon dragon = (EnderDragon) e.getEntity(); - String unique_name = getSpecialKey(dragon); - if(unique_name == null) return; - MyDragon myDragon = mp.get(unique_name); - if(myDragon == null) return; - int times = data.getInt("times"); - data.set("times",times+1); - try{ - data.save(dataF); - }catch (IOException ex){ - error(plugin_file_save_error.replaceAll("\\{file_name}",dataF.getName())); - } - e.setDroppedExp(myDragon.exp_drop); - if(myDragon.dragon_egg_spawn_chance > ThreadLocalRandom.current().nextDouble(100)){ - BukkitRunnable runnable = new BukkitRunnable() { - @Override - public void run() { - Block block = e.getEntity().getWorld().getBlockAt(myDragon.dragon_egg_spawn_x, myDragon.dragon_egg_spawn_y, myDragon.dragon_egg_spawn_z); - block.setType(Material.DRAGON_EGG); - } - }; - runnable.runTaskLater(plugin, myDragon.dragon_egg_spawn_delay); - } - Player p = e.getEntity().getKiller(); - List list = new ArrayList<>(); - for(Reward reward : myDragon.datum){ - double chance = reward.getChance().getValue(); - if(chance > ThreadLocalRandom.current().nextDouble(100)){ - list.add(reward.getItem()); - } - } - if(!list.isEmpty()){ - boolean warn = false; - if(p == null){ - Location loc = dragon.getLocation(); - World world = dragon.getWorld(); - list.forEach(item -> world.dropItem(loc,item)); - } - else{ - for(ItemStack item : list){ - if(p.getInventory().firstEmpty() == -1){ - p.getWorld().dropItem(p.getLocation(),item); - warn = true; - } - else p.getInventory().addItem(item); - } - } - if(warn) sendFeedback(p, dragon_player_inv_full); - } - runCommands(myDragon.death_cmd,p); - if(p != null){ - for(String str : myDragon.msg_to_killer){ - sendFeedback(p,str); - } - for(String str : myDragon.death_broadcast_msg){ - broadcastMSG(str.replaceAll("%times%",String.valueOf(times)).replaceAll("%player%",p.getDisplayName())); - } - } - else{ - StringBuilder names = new StringBuilder(); - List entities = dragon.getNearbyEntities(5,5,5); - for (Entity entity : entities) { - if (entity instanceof Player) { - names.append(((Player) entity).getDisplayName()).append(","); - } - } - String name = names.toString(); - if(name.equals("")) name = dragon_no_killer; - if(name.endsWith(",")) name = name.substring(0,name.length()-1); - for(String str : myDragon.death_broadcast_msg){ - broadcastMSG(str.replaceAll("%times%",String.valueOf(times)).replaceAll("%player%", name)); - } - } - } -} diff --git a/src/main/java/xanadu/enderdragon/listeners/DragonHealListener.java b/src/main/java/xanadu/enderdragon/listeners/DragonHealListener.java deleted file mode 100644 index 1841947..0000000 --- a/src/main/java/xanadu/enderdragon/listeners/DragonHealListener.java +++ /dev/null @@ -1,25 +0,0 @@ -package xanadu.enderdragon.listeners; - -import org.bukkit.entity.EnderDragon; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; -import org.bukkit.event.entity.EntityRegainHealthEvent; -import xanadu.enderdragon.utils.MyDragon; - -import static xanadu.enderdragon.manager.DragonManager.getSpecialKey; -import static xanadu.enderdragon.manager.DragonManager.mp; - -public class DragonHealListener implements Listener { - @EventHandler(priority = EventPriority.HIGH) - public void OnDragonHeal(EntityRegainHealthEvent e){ - if(!(e.getEntity() instanceof EnderDragon)) return; - EnderDragon dragon = (EnderDragon) e.getEntity(); - if(!e.getRegainReason().equals(EntityRegainHealthEvent.RegainReason.ENDER_CRYSTAL)) return; - String unique_name = getSpecialKey(dragon); - if(unique_name == null) return; - MyDragon myDragon = mp.get(unique_name); - if(myDragon == null) return; - e.setAmount(myDragon.crystal_heal_speed / 2d); - } -} diff --git a/src/main/java/xanadu/enderdragon/listeners/EntityDamageByEntityListener.java b/src/main/java/xanadu/enderdragon/listeners/EntityDamageByEntityListener.java deleted file mode 100644 index 100e273..0000000 --- a/src/main/java/xanadu/enderdragon/listeners/EntityDamageByEntityListener.java +++ /dev/null @@ -1,60 +0,0 @@ -package xanadu.enderdragon.listeners; - -import org.bukkit.entity.*; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; -import org.bukkit.event.entity.EntityDamageByEntityEvent; -import org.bukkit.potion.PotionEffect; -import xanadu.enderdragon.events.DragonDamageByPlayerEvent; -import xanadu.enderdragon.utils.MyDragon; - -import static xanadu.enderdragon.EnderDragon.pm; -import static xanadu.enderdragon.manager.DragonManager.getSpecialKey; -import static xanadu.enderdragon.manager.DragonManager.mp; - -public class EntityDamageByEntityListener implements Listener { - @EventHandler(priority = EventPriority.LOW) - public void OnDragonAttack(EntityDamageByEntityEvent e){ - Entity victim = e.getEntity(); - Entity attack = e.getDamager(); - if(!(attack instanceof EnderDragon)) return; - EnderDragon dragon = (EnderDragon) attack; - String unique_name = getSpecialKey(dragon); - if(unique_name == null) return; - MyDragon myDragon = mp.get(unique_name); - if(myDragon == null) return; - e.setDamage(Math.max(0.1, e.getDamage() + myDragon.attack_damage_modify)); - if(victim instanceof Player){ - Player player = (Player) victim; - for(PotionEffect effect : myDragon.attack_potion_effect){ - player.addPotionEffect(effect); - } - if(!myDragon.suck_blood_enable) return; - double suck = e.getFinalDamage() * myDragon.suck_blood_rate + myDragon.suck_blood_base_amount; - dragon.setHealth(Math.min(dragon.getHealth()+suck,dragon.getMaxHealth())); - } - else{ - if(!myDragon.suck_blood_enable) return; - if(myDragon.suck_blood_only_player) return; - double suck = e.getFinalDamage() * myDragon.suck_blood_rate + myDragon.suck_blood_base_amount; - dragon.setHealth(Math.min(dragon.getHealth()+suck,dragon.getMaxHealth())); - } - } - @EventHandler(priority = EventPriority.HIGHEST) - public void ExtraAttackToDragon(EntityDamageByEntityEvent e){ - if(e.isCancelled()) return; - if(e.getDamage() <= 0.0) return; - Entity victim = e.getEntity(); - Entity entity = e.getDamager(); - if(victim instanceof EnderDragon){ - EnderDragon dragon = (EnderDragon) victim; - if(entity instanceof TNTPrimed){ - TNTPrimed tnt = (TNTPrimed) entity; - if(!(tnt.getSource() instanceof Player)) return; - Player damager = (Player) tnt.getSource(); - pm.callEvent(new DragonDamageByPlayerEvent(damager,dragon,e.getCause(),e.getFinalDamage())); - } - } - } -} diff --git a/src/main/java/xanadu/enderdragon/listeners/InventoryClick.java b/src/main/java/xanadu/enderdragon/listeners/InventoryClick.java deleted file mode 100644 index 94fd1f9..0000000 --- a/src/main/java/xanadu/enderdragon/listeners/InventoryClick.java +++ /dev/null @@ -1,17 +0,0 @@ -package xanadu.enderdragon.listeners; - -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; -import org.bukkit.event.inventory.InventoryClickEvent; - -import static xanadu.enderdragon.EnderDragon.plugin; - -public class InventoryClick implements Listener { - @EventHandler(priority = EventPriority.HIGH) - public void OnInventoryClick(InventoryClickEvent e){ - String title = plugin.getConfig().getString("special-dragon.drop-gui-title"); - if(!e.getView().getTitle().contains(title)){return;} - e.setCancelled(true); - } -} diff --git a/src/main/java/xanadu/enderdragon/listeners/InventoryListener.java b/src/main/java/xanadu/enderdragon/listeners/InventoryListener.java deleted file mode 100644 index 19ca06b..0000000 --- a/src/main/java/xanadu/enderdragon/listeners/InventoryListener.java +++ /dev/null @@ -1,82 +0,0 @@ -package xanadu.enderdragon.listeners; - -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; -import org.bukkit.event.inventory.ClickType; -import org.bukkit.event.inventory.InventoryClickEvent; -import org.bukkit.event.inventory.InventoryDragEvent; -import org.bukkit.inventory.InventoryHolder; -import org.bukkit.inventory.PlayerInventory; -import xanadu.enderdragon.gui.GUISlot; -import xanadu.enderdragon.gui.GUISlotType; -import xanadu.enderdragon.gui.GUIWrapper; -import xanadu.enderdragon.gui.GUIHolder; -import xanadu.enderdragon.gui.slots.PageJumpSlot; -import xanadu.enderdragon.config.Lang; -import xanadu.enderdragon.manager.GuiManager; -import xanadu.enderdragon.utils.MyDragon; - -import static xanadu.enderdragon.manager.DragonManager.mp; - -public class InventoryListener implements Listener { - @EventHandler(priority = EventPriority.LOWEST) - public void OnInventoryClick(InventoryClickEvent e){ - InventoryHolder holder = e.getInventory().getHolder(); - if(!(holder instanceof GUIHolder)) return; - e.setCancelled(true); - GUIHolder guiHolder = (GUIHolder) holder; - if(!(guiHolder.getGUI() instanceof GUIWrapper)) return; - GUIWrapper guiWrapper = (GUIWrapper) guiHolder.getGUI(); - if(e.getClickedInventory() instanceof PlayerInventory){ - return; - } - if(e.getClick() != ClickType.LEFT && e.getClick() != ClickType.RIGHT){ - return; - } - if(e.getRawSlot() >= 54 || e.getRawSlot() < 0){ //点击箱子以外界面会返回-999 - return; - } - Player p = (Player) e.getWhoClicked(); - GUISlot slot = guiWrapper.getSlot(e.getRawSlot()); - GUISlotType type = slot.getType(); - if(type == GUISlotType.EMPTY || type == GUISlotType.TIP || type == GUISlotType.PAGE_TIP || type == GUISlotType.ITEM_SLOT){ - return; - } - if(type == GUISlotType.PAGE_PREV){ - guiWrapper.prev(); - p.updateInventory(); - return; - } - if(type == GUISlotType.PAGE_NEXT){ - guiWrapper.next(); - p.updateInventory(); - return; - } - if(type == GUISlotType.PAGE_JUMP){ - String name = ((PageJumpSlot)slot).getGuiName(); - GuiManager.openGui(p,name); - return; - } - if(type == GUISlotType.DRAGON_SLOT){ - String unique_name = guiWrapper.getData(guiWrapper.getPage(),e.getRawSlot()); - MyDragon dragon = mp.get(unique_name); - if(dragon == null){ - Lang.sendFeedback(p,Lang.gui_not_found); - return; - } - GuiManager.openGui(p,dragon.drop_gui,dragon.unique_name); - return; - } - - } - @EventHandler(priority = EventPriority.LOWEST) - public void OnInventoryDrag(InventoryDragEvent e){ - InventoryHolder holder = e.getInventory().getHolder(); - if(!(holder instanceof GUIHolder)) return; - GUIHolder guiHolder = (GUIHolder) holder; - if(!(guiHolder.getGUI() instanceof GUIWrapper)) return; - e.setCancelled(true); - } -} diff --git a/src/main/java/xanadu/enderdragon/listeners/PluginDisableListener.java b/src/main/java/xanadu/enderdragon/listeners/PluginDisableListener.java deleted file mode 100644 index 3a1b4db..0000000 --- a/src/main/java/xanadu/enderdragon/listeners/PluginDisableListener.java +++ /dev/null @@ -1,16 +0,0 @@ -package xanadu.enderdragon.listeners; - -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.server.PluginDisableEvent; - -import static xanadu.enderdragon.EnderDragon.*; - -public class PluginDisableListener implements Listener { - @EventHandler - public void OnPluginDisable(PluginDisableEvent e){ - if(e.getPlugin().equals(plugin)){ - disableAll(); - } - } -} diff --git a/src/main/java/xanadu/enderdragon/listeners/mmoitems/MMOPlayerAttackListener.java b/src/main/java/xanadu/enderdragon/listeners/mmoitems/MMOPlayerAttackListener.java deleted file mode 100644 index 2fbfc2f..0000000 --- a/src/main/java/xanadu/enderdragon/listeners/mmoitems/MMOPlayerAttackListener.java +++ /dev/null @@ -1,39 +0,0 @@ -package xanadu.enderdragon.listeners.mmoitems; - -import io.lumine.mythic.lib.MythicLib; -import io.lumine.mythic.lib.api.event.PlayerAttackEvent; -import io.lumine.mythic.lib.api.item.NBTItem; -import io.lumine.mythic.lib.damage.MeleeAttackMetadata; -import net.Indyuce.mmoitems.api.Type; -import net.Indyuce.mmoitems.api.TypeSet; -import net.Indyuce.mmoitems.api.interaction.weapon.Weapon; -import net.Indyuce.mmoitems.api.player.PlayerData; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; - -public class MMOPlayerAttackListener implements Listener { - - @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) - public void meleeAttacks(PlayerAttackEvent e) { - if (!(e.getAttack() instanceof MeleeAttackMetadata)) { - return; - } - MeleeAttackMetadata attackMetadata = (MeleeAttackMetadata) e.getAttack(); - Player player = e.getPlayer(); - PlayerData playerData = PlayerData.get(player); - NBTItem nBTItem = MythicLib.plugin.getVersion().getWrapper().getNBTItem(player.getInventory().getItem(attackMetadata.getHand().toBukkit())); - if (nBTItem.hasType() && Type.get(nBTItem.getType()) != Type.BLOCK) { - Weapon weapon = new Weapon(playerData, nBTItem); - if (weapon.getMMOItem().getType().getItemSet() == TypeSet.RANGE) { - e.setCancelled(true); - } else if (!weapon.checkItemRequirements()) { - e.setCancelled(true); - } else if (!weapon.handleTargetedAttack(e.getAttack(), e.getEntity())) { - e.setCancelled(true); - } - } - } - -} diff --git a/src/main/java/xanadu/enderdragon/listeners/mythiclib/PlayerAttackListener.java b/src/main/java/xanadu/enderdragon/listeners/mythiclib/PlayerAttackListener.java deleted file mode 100644 index 8a368ac..0000000 --- a/src/main/java/xanadu/enderdragon/listeners/mythiclib/PlayerAttackListener.java +++ /dev/null @@ -1,35 +0,0 @@ -package xanadu.enderdragon.listeners.mythiclib; - -import io.lumine.mythic.lib.api.event.PlayerAttackEvent; -import io.lumine.mythic.lib.damage.DamageMetadata; -import io.lumine.mythic.lib.damage.DamageType; -import org.bukkit.entity.EnderDragon; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; -import xanadu.enderdragon.events.DragonDamageByPlayerEvent; - -import static xanadu.enderdragon.EnderDragon.pm; - -public class PlayerAttackListener implements Listener { - @EventHandler(priority = EventPriority.HIGH) - public void onPlayerAttack(PlayerAttackEvent e){ - if(e.isCancelled()) return; - if(!(e.getEntity() instanceof org.bukkit.entity.EnderDragon)) return; - EnderDragon dragon = (EnderDragon) e.getEntity(); - DamageMetadata damage = e.getDamage(); - double weapon = damage.getDamage(DamageType.WEAPON) + damage.getDamage(DamageType.UNARMED); - if(weapon > 0.0d) { - DragonDamageByPlayerEvent event = new DragonDamageByPlayerEvent(e.getAttacker().getPlayer(),dragon, e.toBukkit().getCause(), weapon); - pm.callEvent(event); - return; - } - double skill = damage.getDamage(DamageType.SKILL); - if(skill >= 0.0d){ - DragonDamageByPlayerEvent event = new DragonDamageByPlayerEvent(e.getAttacker().getPlayer(),dragon, e.toBukkit().getCause(), skill); - pm.callEvent(event); - return; - } - } - -} diff --git a/src/main/java/xanadu/enderdragon/manager/DragonManager.java b/src/main/java/xanadu/enderdragon/manager/DragonManager.java deleted file mode 100644 index 4ef582c..0000000 --- a/src/main/java/xanadu/enderdragon/manager/DragonManager.java +++ /dev/null @@ -1,444 +0,0 @@ -package xanadu.enderdragon.manager; - -import org.bukkit.*; -import org.bukkit.attribute.Attribute; -import org.bukkit.attribute.AttributeInstance; -import org.bukkit.attribute.AttributeModifier; -import org.bukkit.boss.DragonBattle; -import org.bukkit.configuration.file.FileConfiguration; -import org.bukkit.configuration.file.YamlConfiguration; -import org.bukkit.entity.*; -import org.bukkit.potion.PotionEffect; -import org.bukkit.potion.PotionEffectType; -import org.bukkit.scheduler.BukkitRunnable; -import org.bukkit.scoreboard.Team; -import xanadu.enderdragon.config.Config; -import xanadu.enderdragon.config.Lang; -import xanadu.enderdragon.utils.MyDragon; -import xanadu.enderdragon.utils.Version; - -import java.io.File; -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.util.*; -import java.util.concurrent.ThreadLocalRandom; - -import static xanadu.enderdragon.EnderDragon.*; -import static xanadu.enderdragon.config.Lang.*; -import static xanadu.enderdragon.manager.ItemManager.readAsItem; - -public class DragonManager { - public static ArrayList dragons = new ArrayList<>(); - public static HashMap mp = new HashMap<>(); - public static List dragon_names = new ArrayList<>(); - private static int sum = 0; - private static final int[][] nxt = {{3,0},{0,3},{-3,0},{0,-3}}; - private Method DragonBattle_e; - private Method getX; - private Method getY; - private Method getZ; - private Method getNMSWord; - private Class CraftWorldClass = null; - private Class WorldProviderTheEndClass = null; - - public static void reload(){ - new BukkitRunnable(){ - @Override - public void run(){ - dragons.clear(); - mp.clear(); - dragon_names.clear(); - sum = 0; - if(Config.dragon_setting_file == null){ - error("\"dragon_setting_file\" in config.yml is empty!"); - warn("Plugin will use the default config..."); - Config.dragon_setting_file = new ArrayList<>(); - Config.dragon_setting_file.add("default:5"); - Config.dragon_setting_file.add("special:5"); - } - for(String str : Config.dragon_setting_file){ - String[] s = str.split(":"); - if(s.length != 2){ - error("\"dragon_setting_file\" in config.yml error! Key: " + str); - continue; - } - String path = "setting/" + s[0] + ".yml"; - int edge = -1; - try { - edge = Integer.parseInt(s[1]); - } catch (NumberFormatException ignored){} - if(edge < 0) { - error("\"dragon_setting_file\" in config.yml error! Key: " + str); - continue; - } - File file = new File(plugin.getDataFolder(),path); - if(!file.exists()) { - try{ - plugin.saveResource("setting/"+file.getName(),false); - file = new File(plugin.getDataFolder(),path); - }catch (Exception ignored){ - error("Not Found setting/" + s[0] + ".yml ,skipped it."); - continue; - } - } - FileConfiguration fc = YamlConfiguration.loadConfiguration(file); - readSettingFile(fc,edge); - } - dragons.sort((o1, o2) -> o2.priority - o1.priority); - RewardManager.reload(); - } - }.runTaskAsynchronously(plugin); - - } - public static MyDragon judge(){ - if(Config.special_dragon_jude_mode.equalsIgnoreCase("weight")){ - int cnt = 0, random = ThreadLocalRandom.current().nextInt(0, sum); - for(MyDragon cur : dragons){ - if(cnt <= random && cnt + cur.edge > random){ - return cur; - } - cnt += cur.edge; - } - } - else if(Config.special_dragon_jude_mode.equalsIgnoreCase("pc")){ - Iterator it = dragons.iterator(); - MyDragon cur = null; - while (it.hasNext()){ - cur = it.next(); - boolean judge = cur.spawn_chance > ThreadLocalRandom.current().nextDouble(100); - if(judge) return cur; - } - return cur; - } - else if(Config.special_dragon_jude_mode.equalsIgnoreCase("edge")){ - int cnt = 0, random = ThreadLocalRandom.current().nextInt(0, sum); - for(MyDragon cur : dragons){ - if(cnt <= random && cnt + cur.edge > random){ - return cur; - } - cnt += cur.edge; - } - error("\"edge\" in \"special_dragon_jude_mode\" of config.yml is deprecated!Please use \"weight\" instead."); - } - return null; - } - public static void setSpecialKey(Entity e, String key){ - e.addScoreboardTag(key); - } - public static String getSpecialKey(Entity e){ - for(MyDragon a : dragons){ - if(e.getScoreboardTags().contains(a.unique_name)) return a.unique_name; - } - return null; - } - public static void readSettingFile(FileConfiguration f,int edge){ - MyDragon myDragon = new MyDragon(); - myDragon.unique_name = f.getString("unique_name","default"); - if(mp.containsKey(myDragon.unique_name)){ - error("The unique_name conflict! Key: "+myDragon.unique_name); - return; - } - myDragon.icon = readAsItem(f,"icon"); - myDragon.display_name = f.getString("display_name","Special Dragon"); - myDragon.drop_gui = f.getString("drop_gui"); - myDragon.edge = edge; - myDragon.priority = f.getInt("priority",1); - myDragon.spawn_chance = f.getDouble("spawn_chance",0); - myDragon.max_health = f.getInt("max_health",200); - myDragon.spawn_health = f.getInt("spawn_health",200); - myDragon.exp_drop = f.getInt("exp_drop",500); - myDragon.dragon_egg_spawn_delay = f.getInt("dragon_egg_spawn.delay",410); - myDragon.dragon_egg_spawn_x = f.getInt("dragon_egg_spawn.x",0); - myDragon.dragon_egg_spawn_y = f.getInt("dragon_egg_spawn.y",70); - myDragon.dragon_egg_spawn_z = f.getInt("dragon_egg_spawn.z",0); - myDragon.dragon_egg_spawn_chance = f.getDouble("dragon_egg_spawn.chance",0); - myDragon.attack_damage_modify = f.getDouble("attack_damage_modify",0); - myDragon.move_speed_modify = f.getDouble("move_speed_modify",0); - myDragon.armor_modify = f.getDouble("armor_modify",0); - myDragon.armor_toughness_modify = f.getDouble("armor_toughness_modify",0); - myDragon.crystal_heal_speed = f.getDouble("crystal_heal_speed",2.0); - myDragon.suck_blood_enable = f.getBoolean("suck_blood.enable",true); - myDragon.suck_blood_rate = f.getDouble("suck_blood.rate",50) / 100d; - myDragon.suck_blood_base_amount = f.getDouble("suck_blood.base_amount",1); - myDragon.suck_blood_only_player = f.getBoolean("suck_blood.only_player",true); - List stringList = f.getStringList("attack_potion_effect"); - List potions = new ArrayList<>(); - for(String string : stringList){ - String[] s = string.split(" "); - if(s.length != 3) continue; - PotionEffectType type = PotionEffectType.getByName(s[0].toUpperCase()); - if(type == null){ - error("Unknown potion type: " + s[0]); - continue; - } - int duration = -1; - try { - duration = Integer.parseInt(s[1]); - } catch (NumberFormatException ex){ - error("Wrong number format: " + s[1]); - } - if(duration == -1) continue; - int level = -1; - try { - level = Integer.parseInt(s[2]); - } catch (NumberFormatException ex){ - error("Wrong number format: " + s[2]); - } - if(level == -1) continue; - PotionEffect potionEffect = new PotionEffect(type,duration*20,level-1); - potions.add(potionEffect); - } - myDragon.attack_potion_effect = potions; - myDragon.spawn_cmd = f.getStringList("spawn_cmd"); - myDragon.death_cmd = f.getStringList("death_cmd"); - myDragon.spawn_broadcast_msg = f.getStringList("spawn_broadcast_msg"); - myDragon.death_broadcast_msg = f.getStringList("death_broadcast_msg"); - myDragon.msg_to_killer = f.getStringList("msg_to_killer"); - myDragon.glow_color = f.getString("glow_color","random"); - myDragon.bossbar_color = f.getString("bossbar.color","WHITE"); - myDragon.bossbar_style = f.getString("bossbar.style","SOLID"); - myDragon.effect_cloud_original_radius = f.getDouble("effect_cloud.original_radius",3); - myDragon.effect_cloud_expand_speed = f.getDouble("effect_cloud.expand_speed",0.1333333); - myDragon.effect_cloud_duration = f.getInt("effect_cloud.duration",60); - String effect_cloud_color = f.getString("effect_cloud.color","none"); - String[] s0 = effect_cloud_color.split(":"); - if(s0.length != 3) myDragon.effect_cloud_color_R = -1; - else{ - try{ - myDragon.effect_cloud_color_R = Integer.parseInt(s0[0]); - myDragon.effect_cloud_color_G = Integer.parseInt(s0[1]); - myDragon.effect_cloud_color_B = Integer.parseInt(s0[2]); - } - catch (NumberFormatException e){ - error("Wrong effect_cloud_color format!"); - myDragon.effect_cloud_color_R = -1; - } - } - List stringList2 = f.getStringList("effect_cloud.potion"); - List effectCloudPotions = new ArrayList<>(); - for(String string : stringList2){ - String[] s = string.split(" "); - if(s.length != 3) continue; - PotionEffectType type = PotionEffectType.getByName(s[0].toUpperCase()); - if(type == null){ - error("Unknown potion type: " + s[0]); - continue; - } - int duration = -1; - try { - duration = Integer.parseInt(s[1]); - } catch (NumberFormatException ex){ - error("Wrong number format: " + s[1]); - } - if(duration == -1) continue; - int level = -1; - try { - level = Integer.parseInt(s[2]); - } catch (NumberFormatException ex){ - error("Wrong number format: " + s[2]); - } - if(level == -1) continue; - PotionEffect potionEffect = new PotionEffect(type,duration*20,level-1); - effectCloudPotions.add(potionEffect); - } - myDragon.effect_cloud_potion = effectCloudPotions; - dragons.add(myDragon); - mp.put(myDragon.unique_name,myDragon); - dragon_names.add(myDragon.unique_name); - sum += edge; - } - public static void disable(){ - dragons.clear(); - mp.clear(); - dragon_names.clear(); - } - - public static void setAttribute(EnderDragon dragon, Attribute attribute, double amount){ - AttributeInstance instance = dragon.getAttribute(attribute); - assert instance != null; - instance.setBaseValue(amount); - } - public static void modifyAttribute(EnderDragon dragon, Attribute attribute, double amount){ - AttributeInstance instance = dragon.getAttribute(attribute); - assert instance != null; - instance.addModifier(new AttributeModifier("EnderDragon",amount,AttributeModifier.Operation.ADD_NUMBER)); - } - public static ChatColor randomColor(){ - return ChatColor.values()[ThreadLocalRandom.current().nextInt(16)]; - } - public static void setGlowingColor(Entity entity,ChatColor color){ - if(server.getScoreboardManager().getMainScoreboard().getTeam("enderdragon-glow") == null) { - server.getScoreboardManager().getMainScoreboard().registerNewTeam("enderdragon-glow"); - } - Team team = server.getScoreboardManager().getMainScoreboard().getTeam("enderdragon-glow"); - assert team != null; - if(mcMainVersion >= 13) team.setColor(color); - else team.setPrefix(color.toString()); - team.addEntry(entity.getUniqueId().toString()); - entity.setGlowing(true); - } - public void initiateRespawn(Player p){ - boolean f = initiateRespawn(p.getWorld()); - if(!f) sendFeedback(p,"§cThere is already a dragon here or respawning has started."); - else Lang.broadcastMSG(Lang.dragon_auto_respawn); - } - public boolean initiateRespawn(World world){ - if(world == null) return false; - if(world.getEnvironment() != World.Environment.THE_END) return false; - if(mcMainVersion >= 16){ - DragonBattle battle = world.getEnderDragonBattle(); - assert battle != null; - if(battle.getEnderDragon() != null){ - error("There is already a dragon here."); - return false; - } - if(battle.getRespawnPhase() == DragonBattle.RespawnPhase.NONE){ - Location cen = battle.getEndPortalLocation(); - if(cen == null) { - battle.initiateRespawn(); - cen = battle.getEndPortalLocation(); - if(cen == null){ - error("The world_the_end is unloaded."); - return false; - } - } - placeEndCrystals(world,cen); - battle.initiateRespawn(); - return true; - } - else{ - error("The respawning has already started."); - } - return false; - } - try { - Object battle = getEnderDragonBattle(world); - assert battle != null; - Field k = battle.getClass().getDeclaredField("k"); - k.setAccessible(true); - Object isAlive = k.get(battle); - if(!((boolean) isAlive)) { - error("There is already a dragon here."); - return false; - } - Field p = battle.getClass().getDeclaredField("p"); - p.setAccessible(true); - Object phase = p.get(battle); - if(phase != null) { - error("The respawning has already started."); - return false; - } - Field field = battle.getClass().getDeclaredField("o"); - field.setAccessible(true); - Object BlockPosition = field.get(battle); - if(BlockPosition == null){ - if (this.DragonBattle_e == null) this.DragonBattle_e = battle.getClass().getMethod("e"); - this.DragonBattle_e.invoke(battle); - BlockPosition = field.get(battle); - if(BlockPosition == null){ - error("The world_the_end is unloaded."); - return false; - } - } - if(this.getX == null) this.getX = BlockPosition.getClass().getMethod("getX"); - if(this.getY == null) this.getY = BlockPosition.getClass().getMethod("getY"); - if(this.getZ == null) this.getZ = BlockPosition.getClass().getMethod("getZ"); - Location loc = new Location(world,(int)getX.invoke(BlockPosition),(int)this.getY.invoke(BlockPosition),(int)this.getZ.invoke(BlockPosition)); - placeEndCrystals(world, loc); - if (this.DragonBattle_e == null) this.DragonBattle_e = battle.getClass().getMethod("e"); - this.DragonBattle_e.invoke(battle); - } catch (ReflectiveOperationException e) { - warn("Your server version (" + Version.getVersion() + ") is not supported!"); - } - return true; - } - private void placeEndCrystals(World world, Location cen){ - cen.add(0.5,1,0.5); - for(int i = 0; i < 4; i++){ - EnderCrystal crystal = (EnderCrystal) world.spawnEntity(cen.clone().add(nxt[i][0],0,nxt[i][1]), EntityType.ENDER_CRYSTAL); - if(Config.auto_respawn_invulnerable) crystal.setInvulnerable(true); - crystal.setShowingBottom(false); - } - } - private Object getEnderDragonBattle(World world){ - String version = Version.getVersion(); - if (mcMainVersion >= 12) { - try { - Object worldServer = getWorldServer(world); - assert worldServer != null; - Field field = worldServer.getClass().getField("worldProvider"); - Object worldProvider = field.get(worldServer); - if(this.WorldProviderTheEndClass == null){ - WorldProviderTheEndClass = Class.forName("net.minecraft.server."+version+".WorldProviderTheEnd"); - } - Object WorldProviderTheEnd = WorldProviderTheEndClass.cast(worldProvider); - String method_name; - switch (version) { - case "v1_12_R1" : { - method_name = "t"; - break; - } - case "v1_13_R1" : - case "v1_13_R2" : { - method_name = "r"; - break; - } - case "v1_14_R1" : { - method_name = "q"; - break; - } - case "v1_15_R1" : { - method_name = "o"; - break; - } - default : method_name = null; - } - if(method_name == null) return null; - Method method = WorldProviderTheEnd.getClass().getDeclaredMethod(method_name); - return method.invoke(WorldProviderTheEnd); - } catch (ReflectiveOperationException e) { - warn("Your server version (" + Version.getVersion() + ") is not supported!"); - e.printStackTrace(); - return null; - } - } - warn("Your server version (" + Version.getVersion() + ") is not supported!"); - return null; - } - private Object getWorldServer(World ThisWorld) { - try { - Object castClass = getCraftWorld(ThisWorld); - return this.CraftWorldClass.getDeclaredMethod("getHandle").invoke(castClass); - } catch (ReflectiveOperationException e) { - e.printStackTrace(); - return null; - } - } - private Object getCraftWorld(World ThisWorld) { - try { - if (this.CraftWorldClass == null) { - this.CraftWorldClass = Class.forName("org.bukkit.craftbukkit." + Version.getVersion() + ".CraftWorld"); - } - if (this.CraftWorldClass.isInstance(ThisWorld)) { - return this.CraftWorldClass.cast(ThisWorld); - } - return null; - } catch (ReflectiveOperationException e) { - e.printStackTrace(); - return null; - } - } - private Object getWorld_e(World world){ - try { - Object world_c = getCraftWorld(world); - if(this.getNMSWord == null){ - this.getNMSWord = this.CraftWorldClass.getDeclaredMethod("getHandle"); - } - return this.getNMSWord.invoke(world_c); - } catch (ReflectiveOperationException e) { - e.printStackTrace(); - return null; - } - } - -} diff --git a/src/main/java/xanadu/enderdragon/manager/GuiManager.java b/src/main/java/xanadu/enderdragon/manager/GuiManager.java deleted file mode 100644 index 08470cf..0000000 --- a/src/main/java/xanadu/enderdragon/manager/GuiManager.java +++ /dev/null @@ -1,61 +0,0 @@ -package xanadu.enderdragon.manager; - -import org.bukkit.configuration.ConfigurationSection; -import org.bukkit.configuration.file.FileConfiguration; -import org.bukkit.configuration.file.YamlConfiguration; -import org.bukkit.entity.Player; -import org.bukkit.scheduler.BukkitRunnable; -import xanadu.enderdragon.gui.GUIWrapper; -import xanadu.enderdragon.config.Lang; - -import java.io.File; -import java.util.HashMap; -import java.util.Iterator; - -import static xanadu.enderdragon.EnderDragon.plugin; -import static xanadu.enderdragon.config.Lang.info; -import static xanadu.enderdragon.config.Lang.sendFeedback; - -public class GuiManager { - private static HashMap f = new HashMap<>(); - public static void loadGui(){ - new BukkitRunnable(){ - @Override - public void run(){ - File folder = new File(plugin.getDataFolder(),"gui"); - if(!folder.exists()) return; - File[] files = folder.listFiles(); - if(files == null) return; - for(File file : files){ - if(!file.getName().endsWith(".yml")) continue; - info(Lang.plugin_read_file + file.getName()); - FileConfiguration fileConfiguration = YamlConfiguration.loadConfiguration(file); - Iterator it = fileConfiguration.getKeys(false).iterator(); - while (it.hasNext()){ - String name = (String) it.next(); - ConfigurationSection section = fileConfiguration.getConfigurationSection(name); - GUIWrapper guiWrapper = new GUIWrapper(section); - f.put(name, guiWrapper); - } - } - } - }.runTaskAsynchronously(plugin); - } - public static void disable(){ - f.clear(); - } - public static void openGui(Player player, String name) { - if (!f.containsKey(name)) { - sendFeedback(player,Lang.gui_not_found); - return; - } - player.openInventory(new GUIWrapper(f.get(name),name).current()); - } - public static void openGui(Player player,String name,String key){ - if (!f.containsKey(name)) { - sendFeedback(player,Lang.gui_not_found); - return; - } - player.openInventory(new GUIWrapper(f.get(name),key).current()); - } -} diff --git a/src/main/java/xanadu/enderdragon/manager/ItemManager.java b/src/main/java/xanadu/enderdragon/manager/ItemManager.java deleted file mode 100644 index 2a47044..0000000 --- a/src/main/java/xanadu/enderdragon/manager/ItemManager.java +++ /dev/null @@ -1,99 +0,0 @@ -package xanadu.enderdragon.manager; - -import org.bukkit.Material; -import org.bukkit.configuration.ConfigurationSection; -import org.bukkit.configuration.file.YamlConfiguration; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; -import xanadu.enderdragon.gui.Reward; -import xanadu.enderdragon.utils.Chance; - -import java.util.Collections; -import java.util.List; -import java.util.Set; - -public class ItemManager { - public static ConfigurationSection write(Reward reward){ - Chance chance = reward.getChance(); - return write(reward.getItem(),chance.getValue(),chance.getStr(),reward.getName()); - } - public static ConfigurationSection write(ItemStack item,double value,String str,String name){ - YamlConfiguration yaml = new YamlConfiguration(); - if(name == null){ - ItemMeta meta = item.getItemMeta(); - if(meta != null) name = meta.getDisplayName(); - else name = item.getType().name() + System.currentTimeMillis(); - } - yaml.set(name + ".data", item); - yaml.set(name + ".drop_chance.value",value); - yaml.set(name + ".drop_chance.format",str); - return yaml; - } - public static Reward readAsReward(ConfigurationSection section){ - Set strings = section.getKeys(false); - String name = strings.iterator().next(); - ConfigurationSection section0 = section.getConfigurationSection(name); - if(section0 == null) return null; - ItemStack item; - String nbt = section0.getString("data"); - if (nbt == null) item = new ItemStack(Material.AIR); - else item = section0.getItemStack("data"); - double d0 = section0.getDouble("drop_chance.value"); - String str = section0.getString("drop_chance.format"); - return new Reward(item,new Chance(d0, str)); - } - public static ItemStack readAsItem(ConfigurationSection section, String path){ -// if(!isValid(section)) { -// Bukkit.getServer().shutdown(); -// return new ItemStack(Material.AIR); -// } - String nbt = section.getString(path); - if (nbt == null) return new ItemStack(Material.AIR); -// if (!isValid(nbt)) return new ItemStack(Material.AIR); - return section.getItemStack(path); - } - public static void addLore(ItemStack item, String lore){ - ItemMeta meta = item.getItemMeta(); - if(meta != null) { - List lores = meta.getLore(); - if (lores != null) { - lores.add(0,lore); - meta.setLore(lores); - } - else { - meta.setLore(Collections.singletonList(lore)); - } - item.setItemMeta(meta); - } - } - public static boolean isEmpty(ItemStack item){ - if(item == null) return true; - if(item.getType() == Material.AIR) return true; - return false; - } -// public static ItemStack StringToItemStack(String str) { -// YamlConfiguration yml = new YamlConfiguration(); -// ItemStack item; -// try { -// yml.loadFromString(str); -// item = yml.getItemStack("item"); -// } catch (InvalidConfigurationException ex) { -// item = new ItemStack(Material.AIR, 1); -// } -// return item; -// } -// public Reward loadFromFile(ConfigurationSection section){ -// ItemStack item; -// if(section.getString("item.data") == null || section.getString("item.drop_chance") == null){ -// return new Reward(new ItemStack(Material.AIR),); -// } -// try { -// yamlManager.loadFromString(section.getString("item.")); -// } -// } - public static ItemStack read(ConfigurationSection section, String str, String str2, Material material){ - if(material == null) return new ItemStack(Material.AIR); - return new ItemStack(material,1); - - } -} diff --git a/src/main/java/xanadu/enderdragon/manager/RewardManager.java b/src/main/java/xanadu/enderdragon/manager/RewardManager.java deleted file mode 100644 index 18322a2..0000000 --- a/src/main/java/xanadu/enderdragon/manager/RewardManager.java +++ /dev/null @@ -1,70 +0,0 @@ -package xanadu.enderdragon.manager; - -import org.bukkit.configuration.InvalidConfigurationException; -import org.bukkit.configuration.file.YamlConfiguration; -import org.bukkit.inventory.ItemStack; -import xanadu.enderdragon.gui.Reward; -import xanadu.enderdragon.config.Lang; -import xanadu.enderdragon.utils.Chance; -import xanadu.enderdragon.utils.MyDragon; - -import java.io.IOException; -import java.util.List; - -import static xanadu.enderdragon.EnderDragon.data; -import static xanadu.enderdragon.EnderDragon.dataF; -import static xanadu.enderdragon.manager.DragonManager.dragons; -import static xanadu.enderdragon.manager.DragonManager.mp; -import static xanadu.enderdragon.manager.ItemManager.readAsReward; - -public class RewardManager { - public static void reload(){ - for(MyDragon dragon : dragons){ - dragon.datum.clear(); - String path = dragon.unique_name; - List list = data.getStringList(path); - for(String str : list){ - YamlConfiguration yml = new YamlConfiguration(); - try{ - yml.loadFromString(str); - Reward reward = readAsReward(yml); - dragon.datum.add(reward); - }catch (InvalidConfigurationException e){ - Lang.error(Lang.plugin_item_read_error + str); - } - } - } - } - public static void addItem(String key,Reward reward){ - addItem(key,reward.getItem(),reward.getChance()); - } - public static void addItem(String key, ItemStack item, Chance chance){ - MyDragon dragon = mp.get(key); - if(dragon == null) return; - String path = dragon.unique_name; - List list = data.getStringList(path); - Reward reward = new Reward(item,chance); - list.add(reward.toString()); - data.set(path,list); - try { - data.save(dataF); - } catch (IOException e) { - throw new RuntimeException(e); - } - data = YamlConfiguration.loadConfiguration(dataF); - dragon.datum.add(reward); - } - public static void clearItem(String key){ - MyDragon dragon = mp.get(key); - if(dragon == null) return; - String path = dragon.unique_name; - data.set(path,""); - try { - data.save(dataF); - } catch (IOException e) { - throw new RuntimeException(e); - } - data = YamlConfiguration.loadConfiguration(dataF); - dragon.datum.clear(); - } -} diff --git a/src/main/java/xanadu/enderdragon/manager/TaskManager.java b/src/main/java/xanadu/enderdragon/manager/TaskManager.java deleted file mode 100644 index 7ccb320..0000000 --- a/src/main/java/xanadu/enderdragon/manager/TaskManager.java +++ /dev/null @@ -1,93 +0,0 @@ -package xanadu.enderdragon.manager; - -import xanadu.enderdragon.config.Config; -import xanadu.enderdragon.config.Lang; -import xanadu.enderdragon.task.Task; -import xanadu.enderdragon.task.TaskType; -import xanadu.enderdragon.task.types.*; - -import java.io.IOException; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.time.LocalDateTime; -import java.time.LocalTime; -import java.time.format.DateTimeFormatter; -import java.time.format.DateTimeParseException; -import java.util.Date; - -import static xanadu.enderdragon.EnderDragon.*; -import static xanadu.enderdragon.config.Lang.error; -import static xanadu.enderdragon.config.Lang.plugin_file_save_error; - -public class TaskManager { - public static String path = "auto_respawn.next_respawn_time"; - public static Task task = null; - public static Task parse(String string){ - String[] str = string.split(":",2); - TaskType taskType = TaskType.getByName(str[0]); - switch (taskType){ - case minute : { - return new Minute(TaskType.minute,str[1]); - } - case hour : { - return new Hour(TaskType.hour,str[1]); - } - case day : { - return new Day(TaskType.day,str[1]); - } - case week : { - return new Week(TaskType.week,str[1]); - } - case month : { - return new Month(TaskType.month,str[1]); - } - case year : { - return new Year(TaskType.year,str[1]); - } - default : { - return null; - } - } - } - public static void reload(){ - task = parse(Config.auto_respawn_respawn_time); - } - public static LocalTime getRoundTime(String str){ - try { - return LocalTime.parse(str, DateTimeFormatter.ofPattern("HH:mm")); - }catch (DateTimeParseException e){ - Lang.error("\"respawn_time\" in config.yml error!The format of time should be HH:mm."); - } - return null; - } - public static String getRoundTimeStr(LocalDateTime time){ - return time.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm")); - } - public static LocalDateTime getLocalDateTime(String str){ - if(isValidTime(str)) return LocalDateTime.parse(str, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm")); - return null; - } - public static boolean isValidTime(String str){ - SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm"); - try{ - df.parse(str); - } catch (ParseException e) { - Lang.error("\"next_respawn_time\" in data.yml error!The format of time should be HH:mm."); - return false; - } - return true; - } - public static void saveFile(LocalDateTime nextTime){ - data.set(TaskManager.path,getRoundTimeStr(nextTime)); - try{ - data.save(dataF); - }catch (IOException ex){ - error(plugin_file_save_error.replaceAll("\\{file_name}",dataF.getName())); - } - } - public static String getCurrentTimeWithSpecialFormat(){ - SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH∶mm∶ss"); - return df.format(new Date()); - } - -} diff --git a/src/main/java/xanadu/enderdragon/metrics/Metrics.java b/src/main/java/xanadu/enderdragon/metrics/Metrics.java deleted file mode 100644 index d8b197e..0000000 --- a/src/main/java/xanadu/enderdragon/metrics/Metrics.java +++ /dev/null @@ -1,849 +0,0 @@ -package xanadu.enderdragon.metrics; - -import java.io.BufferedReader; -import java.io.ByteArrayOutputStream; -import java.io.DataOutputStream; -import java.io.File; -import java.io.IOException; -import java.io.InputStreamReader; -import java.lang.reflect.Method; -import java.net.URL; -import java.nio.charset.StandardCharsets; -import java.util.Arrays; -import java.util.Collection; -import java.util.HashSet; -import java.util.Map; -import java.util.Objects; -import java.util.Set; -import java.util.UUID; -import java.util.concurrent.Callable; -import java.util.concurrent.Executors; -import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.TimeUnit; -import java.util.function.BiConsumer; -import java.util.function.Consumer; -import java.util.function.Supplier; -import java.util.logging.Level; -import java.util.stream.Collectors; -import java.util.zip.GZIPOutputStream; -import javax.net.ssl.HttpsURLConnection; -import org.bukkit.Bukkit; -import org.bukkit.configuration.file.YamlConfiguration; -import org.bukkit.entity.Player; -import org.bukkit.plugin.Plugin; -import org.bukkit.plugin.java.JavaPlugin; - -public class Metrics { - - private final Plugin plugin; - - private final MetricsBase metricsBase; - - /** - * Creates a new Metrics instance. - * - * @param plugin Your plugin instance. - * @param serviceId The id of the service. It can be found at What is my plugin id? - */ - public Metrics(JavaPlugin plugin, int serviceId) { - this.plugin = plugin; - // Get the config file - File bStatsFolder = new File(plugin.getDataFolder().getParentFile(), "bStats"); - File configFile = new File(bStatsFolder, "config.yml"); - YamlConfiguration config = YamlConfiguration.loadConfiguration(configFile); - if (!config.isSet("serverUuid")) { - config.addDefault("enabled", true); - config.addDefault("serverUuid", UUID.randomUUID().toString()); - config.addDefault("logFailedRequests", false); - config.addDefault("logSentData", false); - config.addDefault("logResponseStatusText", false); - // Inform the server owners about bStats - config - .options() - .header( - "bStats (https://bStats.org) collects some basic information for plugin authors, like how\n" - + "many people use their plugin and their total player count. It's recommended to keep bStats\n" - + "enabled, but if you're not comfortable with this, you can turn this setting off. There is no\n" - + "performance penalty associated with having metrics enabled, and data sent to bStats is fully\n" - + "anonymous.") - .copyDefaults(true); - try { - config.save(configFile); - } catch (IOException ignored) { - } - } - // Load the data - boolean enabled = config.getBoolean("enabled", true); - String serverUUID = config.getString("serverUuid"); - boolean logErrors = config.getBoolean("logFailedRequests", false); - boolean logSentData = config.getBoolean("logSentData", false); - boolean logResponseStatusText = config.getBoolean("logResponseStatusText", false); - metricsBase = - new MetricsBase( - "bukkit", - serverUUID, - serviceId, - enabled, - this::appendPlatformData, - this::appendServiceData, - submitDataTask -> Bukkit.getScheduler().runTask(plugin, submitDataTask), - plugin::isEnabled, - (message, error) -> this.plugin.getLogger().log(Level.WARNING, message, error), - (message) -> this.plugin.getLogger().log(Level.INFO, message), - logErrors, - logSentData, - logResponseStatusText); - } - - /** - * Adds a custom chart. - * - * @param chart The chart to add. - */ - public void addCustomChart(CustomChart chart) { - metricsBase.addCustomChart(chart); - } - - private void appendPlatformData(JsonObjectBuilder builder) { - builder.appendField("playerAmount", getPlayerAmount()); - builder.appendField("onlineMode", Bukkit.getOnlineMode() ? 1 : 0); - builder.appendField("bukkitVersion", Bukkit.getVersion()); - builder.appendField("bukkitName", Bukkit.getName()); - builder.appendField("javaVersion", System.getProperty("java.version")); - builder.appendField("osName", System.getProperty("os.name")); - builder.appendField("osArch", System.getProperty("os.arch")); - builder.appendField("osVersion", System.getProperty("os.version")); - builder.appendField("coreCount", Runtime.getRuntime().availableProcessors()); - } - - private void appendServiceData(JsonObjectBuilder builder) { - builder.appendField("pluginVersion", plugin.getDescription().getVersion()); - } - - private int getPlayerAmount() { - try { - // Around MC 1.8 the return type was changed from an array to a collection, - // This fixes java.lang.NoSuchMethodError: - // org.bukkit.Bukkit.getOnlinePlayers()Ljava/util/Collection; - Method onlinePlayersMethod = Class.forName("org.bukkit.Server").getMethod("getOnlinePlayers"); - return onlinePlayersMethod.getReturnType().equals(Collection.class) - ? ((Collection) onlinePlayersMethod.invoke(Bukkit.getServer())).size() - : ((Player[]) onlinePlayersMethod.invoke(Bukkit.getServer())).length; - } catch (Exception e) { - // Just use the new method if the reflection failed - return Bukkit.getOnlinePlayers().size(); - } - } - - public static class MetricsBase { - - /** The version of the Metrics class. */ - public static final String METRICS_VERSION = "3.0.0"; - - private static final ScheduledExecutorService scheduler = - Executors.newScheduledThreadPool(1, task -> new Thread(task, "bStats-Metrics")); - - private static final String REPORT_URL = "https://bStats.org/api/v2/data/%s"; - - private final String platform; - - private final String serverUuid; - - private final int serviceId; - - private final Consumer appendPlatformDataConsumer; - - private final Consumer appendServiceDataConsumer; - - private final Consumer submitTaskConsumer; - - private final Supplier checkServiceEnabledSupplier; - - private final BiConsumer errorLogger; - - private final Consumer infoLogger; - - private final boolean logErrors; - - private final boolean logSentData; - - private final boolean logResponseStatusText; - - private final Set customCharts = new HashSet<>(); - - private final boolean enabled; - - /** - * Creates a new MetricsBase class instance. - * - * @param platform The platform of the service. - * @param serviceId The id of the service. - * @param serverUuid The server uuid. - * @param enabled Whether or not data sending is enabled. - * @param appendPlatformDataConsumer A consumer that receives a {@code JsonObjectBuilder} and - * appends all platform-specific data. - * @param appendServiceDataConsumer A consumer that receives a {@code JsonObjectBuilder} and - * appends all service-specific data. - * @param submitTaskConsumer A consumer that takes a runnable with the submit task. This can be - * used to delegate the data collection to a another thread to prevent errors caused by - * concurrency. Can be {@code null}. - * @param checkServiceEnabledSupplier A supplier to check if the service is still enabled. - * @param errorLogger A consumer that accepts log message and an error. - * @param infoLogger A consumer that accepts info log messages. - * @param logErrors Whether or not errors should be logged. - * @param logSentData Whether or not the sent data should be logged. - * @param logResponseStatusText Whether or not the response status text should be logged. - */ - public MetricsBase( - String platform, - String serverUuid, - int serviceId, - boolean enabled, - Consumer appendPlatformDataConsumer, - Consumer appendServiceDataConsumer, - Consumer submitTaskConsumer, - Supplier checkServiceEnabledSupplier, - BiConsumer errorLogger, - Consumer infoLogger, - boolean logErrors, - boolean logSentData, - boolean logResponseStatusText) { - this.platform = platform; - this.serverUuid = serverUuid; - this.serviceId = serviceId; - this.enabled = enabled; - this.appendPlatformDataConsumer = appendPlatformDataConsumer; - this.appendServiceDataConsumer = appendServiceDataConsumer; - this.submitTaskConsumer = submitTaskConsumer; - this.checkServiceEnabledSupplier = checkServiceEnabledSupplier; - this.errorLogger = errorLogger; - this.infoLogger = infoLogger; - this.logErrors = logErrors; - this.logSentData = logSentData; - this.logResponseStatusText = logResponseStatusText; - checkRelocation(); - if (enabled) { - // WARNING: Removing the option to opt-out will get your plugin banned from bStats - startSubmitting(); - } - } - - public void addCustomChart(CustomChart chart) { - this.customCharts.add(chart); - } - - private void startSubmitting() { - final Runnable submitTask = - () -> { - if (!enabled || !checkServiceEnabledSupplier.get()) { - // Submitting data or service is disabled - scheduler.shutdown(); - return; - } - if (submitTaskConsumer != null) { - submitTaskConsumer.accept(this::submitData); - } else { - this.submitData(); - } - }; - // Many servers tend to restart at a fixed time at xx:00 which causes an uneven distribution - // of requests on the - // bStats backend. To circumvent this problem, we introduce some randomness into the initial - // and second delay. - // WARNING: You must not modify and part of this Metrics class, including the submit delay or - // frequency! - // WARNING: Modifying this code will get your plugin banned on bStats. Just don't do it! - long initialDelay = (long) (1000 * 60 * (3 + Math.random() * 3)); - long secondDelay = (long) (1000 * 60 * (Math.random() * 30)); - scheduler.schedule(submitTask, initialDelay, TimeUnit.MILLISECONDS); - scheduler.scheduleAtFixedRate( - submitTask, initialDelay + secondDelay, 1000 * 60 * 30, TimeUnit.MILLISECONDS); - } - - private void submitData() { - final JsonObjectBuilder baseJsonBuilder = new JsonObjectBuilder(); - appendPlatformDataConsumer.accept(baseJsonBuilder); - final JsonObjectBuilder serviceJsonBuilder = new JsonObjectBuilder(); - appendServiceDataConsumer.accept(serviceJsonBuilder); - JsonObjectBuilder.JsonObject[] chartData = - customCharts.stream() - .map(customChart -> customChart.getRequestJsonObject(errorLogger, logErrors)) - .filter(Objects::nonNull) - .toArray(JsonObjectBuilder.JsonObject[]::new); - serviceJsonBuilder.appendField("id", serviceId); - serviceJsonBuilder.appendField("customCharts", chartData); - baseJsonBuilder.appendField("service", serviceJsonBuilder.build()); - baseJsonBuilder.appendField("serverUUID", serverUuid); - baseJsonBuilder.appendField("metricsVersion", METRICS_VERSION); - JsonObjectBuilder.JsonObject data = baseJsonBuilder.build(); - scheduler.execute( - () -> { - try { - // Send the data - sendData(data); - } catch (Exception e) { - // Something went wrong! :( - if (logErrors) { - errorLogger.accept("Could not submit bStats metrics data", e); - } - } - }); - } - - private void sendData(JsonObjectBuilder.JsonObject data) throws Exception { - if (logSentData) { - infoLogger.accept("Sent bStats metrics data: " + data.toString()); - } - String url = String.format(REPORT_URL, platform); - HttpsURLConnection connection = (HttpsURLConnection) new URL(url).openConnection(); - // Compress the data to save bandwidth - byte[] compressedData = compress(data.toString()); - connection.setRequestMethod("POST"); - connection.addRequestProperty("Accept", "application/json"); - connection.addRequestProperty("Connection", "close"); - connection.addRequestProperty("Content-Encoding", "gzip"); - connection.addRequestProperty("Content-Length", String.valueOf(compressedData.length)); - connection.setRequestProperty("Content-Type", "application/json"); - connection.setRequestProperty("User-Agent", "Metrics-Service/1"); - connection.setDoOutput(true); - try (DataOutputStream outputStream = new DataOutputStream(connection.getOutputStream())) { - outputStream.write(compressedData); - } - StringBuilder builder = new StringBuilder(); - try (BufferedReader bufferedReader = - new BufferedReader(new InputStreamReader(connection.getInputStream()))) { - String line; - while ((line = bufferedReader.readLine()) != null) { - builder.append(line); - } - } - if (logResponseStatusText) { - infoLogger.accept("Sent data to bStats and received response: " + builder); - } - } - - /** Checks that the class was properly relocated. */ - private void checkRelocation() { - // You can use the property to disable the check in your test environment - if (System.getProperty("bstats.relocatecheck") == null - || !System.getProperty("bstats.relocatecheck").equals("false")) { - // Maven's Relocate is clever and changes strings, too. So we have to use this little - // "trick" ... :D - final String defaultPackage = - new String(new byte[] {'o', 'r', 'g', '.', 'b', 's', 't', 'a', 't', 's'}); - final String examplePackage = - new String(new byte[] {'y', 'o', 'u', 'r', '.', 'p', 'a', 'c', 'k', 'a', 'g', 'e'}); - // We want to make sure no one just copy & pastes the example and uses the wrong package - // names - if (MetricsBase.class.getPackage().getName().startsWith(defaultPackage) - || MetricsBase.class.getPackage().getName().startsWith(examplePackage)) { - throw new IllegalStateException("bStats Metrics class has not been relocated correctly!"); - } - } - } - - /** - * Gzips the given string. - * - * @param str The string to gzip. - * @return The gzipped string. - */ - private static byte[] compress(final String str) throws IOException { - if (str == null) { - return null; - } - ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); - try (GZIPOutputStream gzip = new GZIPOutputStream(outputStream)) { - gzip.write(str.getBytes(StandardCharsets.UTF_8)); - } - return outputStream.toByteArray(); - } - } - - public static class DrilldownPie extends CustomChart { - - private final Callable>> callable; - - /** - * Class constructor. - * - * @param chartId The id of the chart. - * @param callable The callable which is used to request the chart data. - */ - public DrilldownPie(String chartId, Callable>> callable) { - super(chartId); - this.callable = callable; - } - - @Override - public JsonObjectBuilder.JsonObject getChartData() throws Exception { - JsonObjectBuilder valuesBuilder = new JsonObjectBuilder(); - Map> map = callable.call(); - if (map == null || map.isEmpty()) { - // Null = skip the chart - return null; - } - boolean reallyAllSkipped = true; - for (Map.Entry> entryValues : map.entrySet()) { - JsonObjectBuilder valueBuilder = new JsonObjectBuilder(); - boolean allSkipped = true; - for (Map.Entry valueEntry : map.get(entryValues.getKey()).entrySet()) { - valueBuilder.appendField(valueEntry.getKey(), valueEntry.getValue()); - allSkipped = false; - } - if (!allSkipped) { - reallyAllSkipped = false; - valuesBuilder.appendField(entryValues.getKey(), valueBuilder.build()); - } - } - if (reallyAllSkipped) { - // Null = skip the chart - return null; - } - return new JsonObjectBuilder().appendField("values", valuesBuilder.build()).build(); - } - } - - public static class AdvancedPie extends CustomChart { - - private final Callable> callable; - - /** - * Class constructor. - * - * @param chartId The id of the chart. - * @param callable The callable which is used to request the chart data. - */ - public AdvancedPie(String chartId, Callable> callable) { - super(chartId); - this.callable = callable; - } - - @Override - protected JsonObjectBuilder.JsonObject getChartData() throws Exception { - JsonObjectBuilder valuesBuilder = new JsonObjectBuilder(); - Map map = callable.call(); - if (map == null || map.isEmpty()) { - // Null = skip the chart - return null; - } - boolean allSkipped = true; - for (Map.Entry entry : map.entrySet()) { - if (entry.getValue() == 0) { - // Skip this invalid - continue; - } - allSkipped = false; - valuesBuilder.appendField(entry.getKey(), entry.getValue()); - } - if (allSkipped) { - // Null = skip the chart - return null; - } - return new JsonObjectBuilder().appendField("values", valuesBuilder.build()).build(); - } - } - - public static class MultiLineChart extends CustomChart { - - private final Callable> callable; - - /** - * Class constructor. - * - * @param chartId The id of the chart. - * @param callable The callable which is used to request the chart data. - */ - public MultiLineChart(String chartId, Callable> callable) { - super(chartId); - this.callable = callable; - } - - @Override - protected JsonObjectBuilder.JsonObject getChartData() throws Exception { - JsonObjectBuilder valuesBuilder = new JsonObjectBuilder(); - Map map = callable.call(); - if (map == null || map.isEmpty()) { - // Null = skip the chart - return null; - } - boolean allSkipped = true; - for (Map.Entry entry : map.entrySet()) { - if (entry.getValue() == 0) { - // Skip this invalid - continue; - } - allSkipped = false; - valuesBuilder.appendField(entry.getKey(), entry.getValue()); - } - if (allSkipped) { - // Null = skip the chart - return null; - } - return new JsonObjectBuilder().appendField("values", valuesBuilder.build()).build(); - } - } - - public static class SimpleBarChart extends CustomChart { - - private final Callable> callable; - - /** - * Class constructor. - * - * @param chartId The id of the chart. - * @param callable The callable which is used to request the chart data. - */ - public SimpleBarChart(String chartId, Callable> callable) { - super(chartId); - this.callable = callable; - } - - @Override - protected JsonObjectBuilder.JsonObject getChartData() throws Exception { - JsonObjectBuilder valuesBuilder = new JsonObjectBuilder(); - Map map = callable.call(); - if (map == null || map.isEmpty()) { - // Null = skip the chart - return null; - } - for (Map.Entry entry : map.entrySet()) { - valuesBuilder.appendField(entry.getKey(), new int[] {entry.getValue()}); - } - return new JsonObjectBuilder().appendField("values", valuesBuilder.build()).build(); - } - } - - public abstract static class CustomChart { - - private final String chartId; - - protected CustomChart(String chartId) { - if (chartId == null) { - throw new IllegalArgumentException("chartId must not be null"); - } - this.chartId = chartId; - } - - public JsonObjectBuilder.JsonObject getRequestJsonObject( - BiConsumer errorLogger, boolean logErrors) { - JsonObjectBuilder builder = new JsonObjectBuilder(); - builder.appendField("chartId", chartId); - try { - JsonObjectBuilder.JsonObject data = getChartData(); - if (data == null) { - // If the data is null we don't send the chart. - return null; - } - builder.appendField("data", data); - } catch (Throwable t) { - if (logErrors) { - errorLogger.accept("Failed to get data for custom chart with id " + chartId, t); - } - return null; - } - return builder.build(); - } - - protected abstract JsonObjectBuilder.JsonObject getChartData() throws Exception; - } - - public static class SimplePie extends CustomChart { - - private final Callable callable; - - /** - * Class constructor. - * - * @param chartId The id of the chart. - * @param callable The callable which is used to request the chart data. - */ - public SimplePie(String chartId, Callable callable) { - super(chartId); - this.callable = callable; - } - - @Override - protected JsonObjectBuilder.JsonObject getChartData() throws Exception { - String value = callable.call(); - if (value == null || value.isEmpty()) { - // Null = skip the chart - return null; - } - return new JsonObjectBuilder().appendField("value", value).build(); - } - } - - public static class AdvancedBarChart extends CustomChart { - - private final Callable> callable; - - /** - * Class constructor. - * - * @param chartId The id of the chart. - * @param callable The callable which is used to request the chart data. - */ - public AdvancedBarChart(String chartId, Callable> callable) { - super(chartId); - this.callable = callable; - } - - @Override - protected JsonObjectBuilder.JsonObject getChartData() throws Exception { - JsonObjectBuilder valuesBuilder = new JsonObjectBuilder(); - Map map = callable.call(); - if (map == null || map.isEmpty()) { - // Null = skip the chart - return null; - } - boolean allSkipped = true; - for (Map.Entry entry : map.entrySet()) { - if (entry.getValue().length == 0) { - // Skip this invalid - continue; - } - allSkipped = false; - valuesBuilder.appendField(entry.getKey(), entry.getValue()); - } - if (allSkipped) { - // Null = skip the chart - return null; - } - return new JsonObjectBuilder().appendField("values", valuesBuilder.build()).build(); - } - } - - public static class SingleLineChart extends CustomChart { - - private final Callable callable; - - /** - * Class constructor. - * - * @param chartId The id of the chart. - * @param callable The callable which is used to request the chart data. - */ - public SingleLineChart(String chartId, Callable callable) { - super(chartId); - this.callable = callable; - } - - @Override - protected JsonObjectBuilder.JsonObject getChartData() throws Exception { - int value = callable.call(); - if (value == 0) { - // Null = skip the chart - return null; - } - return new JsonObjectBuilder().appendField("value", value).build(); - } - } - - /** - * An extremely simple JSON builder. - * - *

While this class is neither feature-rich nor the most performant one, it's sufficient enough - * for its use-case. - */ - public static class JsonObjectBuilder { - - private StringBuilder builder = new StringBuilder(); - - private boolean hasAtLeastOneField = false; - - public JsonObjectBuilder() { - builder.append("{"); - } - - /** - * Appends a null field to the JSON. - * - * @param key The key of the field. - * @return A reference to this object. - */ - public JsonObjectBuilder appendNull(String key) { - appendFieldUnescaped(key, "null"); - return this; - } - - /** - * Appends a string field to the JSON. - * - * @param key The key of the field. - * @param value The value of the field. - * @return A reference to this object. - */ - public JsonObjectBuilder appendField(String key, String value) { - if (value == null) { - throw new IllegalArgumentException("JSON value must not be null"); - } - appendFieldUnescaped(key, "\"" + escape(value) + "\""); - return this; - } - - /** - * Appends an integer field to the JSON. - * - * @param key The key of the field. - * @param value The value of the field. - * @return A reference to this object. - */ - public JsonObjectBuilder appendField(String key, int value) { - appendFieldUnescaped(key, String.valueOf(value)); - return this; - } - - /** - * Appends an object to the JSON. - * - * @param key The key of the field. - * @param object The object. - * @return A reference to this object. - */ - public JsonObjectBuilder appendField(String key, JsonObject object) { - if (object == null) { - throw new IllegalArgumentException("JSON object must not be null"); - } - appendFieldUnescaped(key, object.toString()); - return this; - } - - /** - * Appends a string array to the JSON. - * - * @param key The key of the field. - * @param values The string array. - * @return A reference to this object. - */ - public JsonObjectBuilder appendField(String key, String[] values) { - if (values == null) { - throw new IllegalArgumentException("JSON values must not be null"); - } - String escapedValues = - Arrays.stream(values) - .map(value -> "\"" + escape(value) + "\"") - .collect(Collectors.joining(",")); - appendFieldUnescaped(key, "[" + escapedValues + "]"); - return this; - } - - /** - * Appends an integer array to the JSON. - * - * @param key The key of the field. - * @param values The integer array. - * @return A reference to this object. - */ - public JsonObjectBuilder appendField(String key, int[] values) { - if (values == null) { - throw new IllegalArgumentException("JSON values must not be null"); - } - String escapedValues = - Arrays.stream(values).mapToObj(String::valueOf).collect(Collectors.joining(",")); - appendFieldUnescaped(key, "[" + escapedValues + "]"); - return this; - } - - /** - * Appends an object array to the JSON. - * - * @param key The key of the field. - * @param values The integer array. - * @return A reference to this object. - */ - public JsonObjectBuilder appendField(String key, JsonObject[] values) { - if (values == null) { - throw new IllegalArgumentException("JSON values must not be null"); - } - String escapedValues = - Arrays.stream(values).map(JsonObject::toString).collect(Collectors.joining(",")); - appendFieldUnescaped(key, "[" + escapedValues + "]"); - return this; - } - - /** - * Appends a field to the object. - * - * @param key The key of the field. - * @param escapedValue The escaped value of the field. - */ - private void appendFieldUnescaped(String key, String escapedValue) { - if (builder == null) { - throw new IllegalStateException("JSON has already been built"); - } - if (key == null) { - throw new IllegalArgumentException("JSON key must not be null"); - } - if (hasAtLeastOneField) { - builder.append(","); - } - builder.append("\"").append(escape(key)).append("\":").append(escapedValue); - hasAtLeastOneField = true; - } - - /** - * Builds the JSON string and invalidates this builder. - * - * @return The built JSON string. - */ - public JsonObject build() { - if (builder == null) { - throw new IllegalStateException("JSON has already been built"); - } - JsonObject object = new JsonObject(builder.append("}").toString()); - builder = null; - return object; - } - - /** - * Escapes the given string like stated in https://www.ietf.org/rfc/rfc4627.txt. - * - *

This method escapes only the necessary characters '"', '\'. and '\u0000' - '\u001F'. - * Compact escapes are not used (e.g., '\n' is escaped as "\u000a" and not as "\n"). - * - * @param value The value to escape. - * @return The escaped value. - */ - private static String escape(String value) { - final StringBuilder builder = new StringBuilder(); - for (int i = 0; i < value.length(); i++) { - char c = value.charAt(i); - if (c == '"') { - builder.append("\\\""); - } else if (c == '\\') { - builder.append("\\\\"); - } else if (c <= '\u000F') { - builder.append("\\u000").append(Integer.toHexString(c)); - } else if (c <= '\u001F') { - builder.append("\\u00").append(Integer.toHexString(c)); - } else { - builder.append(c); - } - } - return builder.toString(); - } - - /** - * A super simple representation of a JSON object. - * - *

This class only exists to make methods of the {@link JsonObjectBuilder} type-safe and not - * allow a raw string inputs for methods like {@link JsonObjectBuilder#appendField(String, - * JsonObject)}. - */ - public static class JsonObject { - - private final String value; - - private JsonObject(String value) { - this.value = value; - } - - @Override - public String toString() { - return value; - } - } - } -} \ No newline at end of file diff --git a/src/main/java/xanadu/enderdragon/task/RespawnDragonRunnable.java b/src/main/java/xanadu/enderdragon/task/RespawnDragonRunnable.java deleted file mode 100644 index e0139d2..0000000 --- a/src/main/java/xanadu/enderdragon/task/RespawnDragonRunnable.java +++ /dev/null @@ -1,43 +0,0 @@ -package xanadu.enderdragon.task; - -import org.bukkit.Bukkit; -import org.bukkit.scheduler.BukkitRunnable; -import xanadu.enderdragon.EnderDragon; -import xanadu.enderdragon.config.Config; -import xanadu.enderdragon.config.Lang; -import xanadu.enderdragon.manager.TaskManager; - -import static xanadu.enderdragon.EnderDragon.plugin; -import static xanadu.enderdragon.config.Lang.*; - -public class RespawnDragonRunnable extends BukkitRunnable { - private static RespawnDragonRunnable runnable = null; - @Override - public void run(){ - if(TaskManager.task == null) { - this.cancel(); - runnable = null; - error("The config of auto-respawn errors!Task has been disabled..."); - return; - } - if(TaskManager.task.isTimeUp()){ - new BukkitRunnable(){ - @Override - public void run(){ - boolean f = EnderDragon.getInstance().getDragonManager().initiateRespawn(Bukkit.getWorld(Config.auto_respawn_world_the_end_name)); - if(f) Lang.broadcastMSG(Lang.dragon_auto_respawn); - } - }.runTask(plugin); - TaskManager.task.updateTime(); - } - } - public static void reload(){ - if(runnable != null){ - runnable.cancel(); - runnable = null; - } - runnable = new RespawnDragonRunnable(); - runnable.runTaskTimerAsynchronously(plugin,0,200L); - info("The task has started to run..."); - } -} diff --git a/src/main/java/xanadu/enderdragon/task/Task.java b/src/main/java/xanadu/enderdragon/task/Task.java deleted file mode 100644 index 4c2702a..0000000 --- a/src/main/java/xanadu/enderdragon/task/Task.java +++ /dev/null @@ -1,72 +0,0 @@ -package xanadu.enderdragon.task; - -import xanadu.enderdragon.manager.TaskManager; - -import java.time.LocalDateTime; -import java.time.LocalTime; - -import static xanadu.enderdragon.EnderDragon.data; -import static xanadu.enderdragon.manager.TaskManager.*; - -public abstract class Task { - protected int period; - protected int day; - private final TaskType type; - public abstract LocalDateTime getNextTime(LocalDateTime cur); - public abstract void updateTime(); - protected LocalDateTime nextTime; - protected Task(TaskType type,String str){ - this.type = type; - switch (type){ - case minute : - case hour : { - this.period = Integer.parseInt(str); - break; - } - case day : { - this.period = Integer.parseInt(str.split(",")[0]); - break; - } - case week : - case month : - case year : { - this.day = Integer.parseInt(str.split(",")[0]); - break; - } - } - if(data.getString(path) == null){ - switch (type){ - case minute : - case hour : { - this.nextTime = this.getNextTime(LocalDateTime.now()); - break; - } - case day : - case week : - case month : - case year : { - calcNextTime(str); - break; - } - } - saveFile(nextTime); - } - else this.nextTime = TaskManager.getLocalDateTime(data.getString(path)); - } - private void calcNextTime(String str){ - LocalTime time = getRoundTime(str.split(",")[1]); - if(time != null) this.nextTime = this.getNextTime(LocalDateTime.now().with(time)); - else this.nextTime = this.getNextTime(LocalDateTime.now()); - } - public boolean isTimeUp(){ - LocalDateTime now = LocalDateTime.now(); - if(now.isEqual(nextTime) || now.isAfter(nextTime)){ - return true; - } - return false; - } - public TaskType getType(){ - return this.type; - } - -} diff --git a/src/main/java/xanadu/enderdragon/task/TaskType.java b/src/main/java/xanadu/enderdragon/task/TaskType.java deleted file mode 100644 index 4ade195..0000000 --- a/src/main/java/xanadu/enderdragon/task/TaskType.java +++ /dev/null @@ -1,26 +0,0 @@ -package xanadu.enderdragon.task; - -import java.util.Map; -import java.util.TreeMap; - -public enum TaskType { - minute, - hour, - day, - week, - month, - year, - unknown; - private static final Map mp = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); - public static TaskType getByName(String str){ - if(str == null) return unknown; - return mp.getOrDefault(str,unknown); - } - static{ - TaskType[] values = values(); - for (TaskType taskType : values) { - String name = taskType.name(); - mp.put(name, taskType); - } - } -} diff --git a/src/main/java/xanadu/enderdragon/task/types/Day.java b/src/main/java/xanadu/enderdragon/task/types/Day.java deleted file mode 100644 index 88838db..0000000 --- a/src/main/java/xanadu/enderdragon/task/types/Day.java +++ /dev/null @@ -1,24 +0,0 @@ -package xanadu.enderdragon.task.types; - -import xanadu.enderdragon.task.Task; -import xanadu.enderdragon.task.TaskType; - -import java.time.LocalDateTime; - -import static xanadu.enderdragon.manager.TaskManager.saveFile; - -public class Day extends Task { - - @Override - public LocalDateTime getNextTime(LocalDateTime cur) { - return cur.plusDays(period); - } - @Override - public void updateTime(){ - this.nextTime = LocalDateTime.now().plusDays(period); - saveFile(nextTime); - } - public Day(TaskType type, String str){ - super(type,str); - } -} diff --git a/src/main/java/xanadu/enderdragon/task/types/Hour.java b/src/main/java/xanadu/enderdragon/task/types/Hour.java deleted file mode 100644 index 86780ad..0000000 --- a/src/main/java/xanadu/enderdragon/task/types/Hour.java +++ /dev/null @@ -1,23 +0,0 @@ -package xanadu.enderdragon.task.types; - -import xanadu.enderdragon.task.Task; -import xanadu.enderdragon.task.TaskType; - -import java.time.LocalDateTime; - -import static xanadu.enderdragon.manager.TaskManager.saveFile; - -public class Hour extends Task { - @Override - public LocalDateTime getNextTime(LocalDateTime cur) { - return cur.plusHours(period); - } - @Override - public void updateTime(){ - this.nextTime = LocalDateTime.now().plusHours(period); - saveFile(nextTime); - } - public Hour(TaskType type, String str){ - super(type,str); - } -} diff --git a/src/main/java/xanadu/enderdragon/task/types/Minute.java b/src/main/java/xanadu/enderdragon/task/types/Minute.java deleted file mode 100644 index 5f54a3b..0000000 --- a/src/main/java/xanadu/enderdragon/task/types/Minute.java +++ /dev/null @@ -1,26 +0,0 @@ -package xanadu.enderdragon.task.types; - -import xanadu.enderdragon.task.Task; -import xanadu.enderdragon.task.TaskType; - -import java.time.LocalDateTime; - -import static xanadu.enderdragon.manager.TaskManager.saveFile; - -public class Minute extends Task { - - @Override - public LocalDateTime getNextTime(LocalDateTime cur) { - return cur.plusMinutes(period); - } - @Override - public void updateTime(){ - this.nextTime = LocalDateTime.now().plusMinutes(period); - saveFile(nextTime); - } - - public Minute(TaskType type, String str){ - super(type,str); - } - -} diff --git a/src/main/java/xanadu/enderdragon/task/types/Month.java b/src/main/java/xanadu/enderdragon/task/types/Month.java deleted file mode 100644 index 75d66e8..0000000 --- a/src/main/java/xanadu/enderdragon/task/types/Month.java +++ /dev/null @@ -1,24 +0,0 @@ -package xanadu.enderdragon.task.types; - -import xanadu.enderdragon.task.Task; -import xanadu.enderdragon.task.TaskType; - -import java.time.LocalDateTime; - -import static xanadu.enderdragon.manager.TaskManager.saveFile; - -public class Month extends Task { - @Override - public LocalDateTime getNextTime(LocalDateTime cur) { - return cur.plusMonths(1).withDayOfMonth(day); - } - @Override - public void updateTime(){ - this.nextTime = LocalDateTime.now().plusMonths(1).withDayOfMonth(day); - saveFile(nextTime); - } - public Month(TaskType type, String str){ - super(type,str); - } - -} diff --git a/src/main/java/xanadu/enderdragon/task/types/Week.java b/src/main/java/xanadu/enderdragon/task/types/Week.java deleted file mode 100644 index a308b00..0000000 --- a/src/main/java/xanadu/enderdragon/task/types/Week.java +++ /dev/null @@ -1,25 +0,0 @@ -package xanadu.enderdragon.task.types; - -import xanadu.enderdragon.task.Task; -import xanadu.enderdragon.task.TaskType; - -import java.time.DayOfWeek; -import java.time.LocalDateTime; - -import static xanadu.enderdragon.manager.TaskManager.saveFile; - -public class Week extends Task { - - @Override - public LocalDateTime getNextTime(LocalDateTime cur) { - return cur.with(DayOfWeek.of(day)).plusDays(7); - } - @Override - public void updateTime(){ - this.nextTime = LocalDateTime.now().plusDays(7); - saveFile(nextTime); - } - public Week(TaskType type, String str){ - super(type,str); - } -} diff --git a/src/main/java/xanadu/enderdragon/task/types/Year.java b/src/main/java/xanadu/enderdragon/task/types/Year.java deleted file mode 100644 index 5857b28..0000000 --- a/src/main/java/xanadu/enderdragon/task/types/Year.java +++ /dev/null @@ -1,23 +0,0 @@ -package xanadu.enderdragon.task.types; - -import xanadu.enderdragon.task.Task; -import xanadu.enderdragon.task.TaskType; - -import java.time.LocalDateTime; - -import static xanadu.enderdragon.manager.TaskManager.saveFile; - -public class Year extends Task { - @Override - public LocalDateTime getNextTime(LocalDateTime cur) { - return cur.plusYears(1).withDayOfMonth(day); - } - @Override - public void updateTime(){ - this.nextTime = LocalDateTime.now().plusYears(1); - saveFile(nextTime); - } - public Year(TaskType type, String str){ - super(type,str); - } -} diff --git a/src/main/java/xanadu/enderdragon/utils/Chance.java b/src/main/java/xanadu/enderdragon/utils/Chance.java deleted file mode 100644 index 6b0209a..0000000 --- a/src/main/java/xanadu/enderdragon/utils/Chance.java +++ /dev/null @@ -1,22 +0,0 @@ -package xanadu.enderdragon.utils; - - -public class Chance { - private double value; - private String str; - public Chance(Chance chance){ - str = chance.str; - value = chance.value; - } - public Chance(double d0,String str){ - this.str = str; - this.value = d0; - } - public double getValue(){ - return value; - } - public String getStr(){ - return str; - } - -} diff --git a/src/main/java/xanadu/enderdragon/utils/Events.java b/src/main/java/xanadu/enderdragon/utils/Events.java deleted file mode 100644 index 41ec23c..0000000 --- a/src/main/java/xanadu/enderdragon/utils/Events.java +++ /dev/null @@ -1,84 +0,0 @@ -package xanadu.enderdragon.utils; - -import org.bukkit.Bukkit; -import org.bukkit.event.*; -import org.bukkit.plugin.EventExecutor; - -import java.util.concurrent.atomic.AtomicLong; -import java.util.function.Consumer; - -import static xanadu.enderdragon.EnderDragon.plugin; -import static xanadu.enderdragon.EnderDragon.pm; - -public class Events implements Listener, EventExecutor { - private final Consumer consumer; - private final Class clazz; - private boolean G; - private final AtomicLong atomicLong; - - public Events withTime(final long a) { - this.atomicLong.set(a); - return this; - } - - public void unregister() { - if (this.G) return; - try { - HandlerList list = (HandlerList)this.clazz.getMethod("getHandlerList").invoke(null, new Object[0]); - if (Bukkit.isPrimaryThread()) list.unregister(this); - else Bukkit.getScheduler().runTask(plugin, () -> list.unregister(this)); - } - catch (final Exception ignored) {} - this.G = true; - } - - public static Events subscribe(Class a, EventPriority a2, boolean a3, Consumer a4) { - if (Bukkit.isPrimaryThread()) { - pm.registerEvent(a, (Listener) a4, a2, (EventExecutor) a4, plugin, a3); - return (Events) a4; - } - Bukkit.getScheduler().runTask(plugin,()->pm.registerEvent(a, (Listener)a4, a2, (EventExecutor)a4, plugin, a3)); - return (Events) a4; - } - - public static Events subscribe(Class clazz, Consumer consumer) { - return Events.subscribe(clazz, EventPriority.HIGHEST, true, consumer); - } - - public Events(Class clazz, Consumer consumer) { - this.atomicLong = new AtomicLong(-1L); - this.G = false; - this.consumer = consumer; - this.clazz = clazz; - } - - public void execute(Listener listener, Event event) { - if (listener == null) iIIiii(0); - if (event == null) iIIiii(1); - if (this.atomicLong.get() > 0L && System.currentTimeMillis() > this.atomicLong.get()) { - Bukkit.getScheduler().runTask(plugin, this::unregister); - return; - } - if (!this.clazz.isInstance(event)) return; - this.consumer.accept((T) event); - } - - public boolean releaseIfExpired() { - if (this.atomicLong.get() > 0L && System.currentTimeMillis() > this.atomicLong.get()) { - boolean b = true; - this.unregister(); - return b; - } - return false; - } - - private static /* synthetic */ void iIIiii(final int a) { - final String format = "Argument for @NotNull parameter '%s' of %s.%s must not be null"; - final Object[] args = new Object[3]; - if (a == 1) args[0] = "event"; - else args[0] = "listener"; - args[1] = "xanadu/enderdragon/utils/Events"; - args[2] = "execute"; - throw new IllegalArgumentException(String.format(format, args)); - } -} diff --git a/src/main/java/xanadu/enderdragon/utils/FileUpdater.java b/src/main/java/xanadu/enderdragon/utils/FileUpdater.java deleted file mode 100644 index 95a9a0e..0000000 --- a/src/main/java/xanadu/enderdragon/utils/FileUpdater.java +++ /dev/null @@ -1,122 +0,0 @@ -package xanadu.enderdragon.utils; - -import org.bukkit.configuration.InvalidConfigurationException; -import org.bukkit.configuration.file.FileConfiguration; -import org.bukkit.configuration.file.YamlConfiguration; -import org.bukkit.inventory.ItemStack; -import xanadu.enderdragon.EnderDragon; -import xanadu.enderdragon.config.Lang; -import xanadu.enderdragon.gui.Reward; - -import java.io.*; -import java.util.ArrayList; -import java.util.List; - -import static xanadu.enderdragon.EnderDragon.*; -import static xanadu.enderdragon.config.Config.saveResource; -import static xanadu.enderdragon.config.Lang.error; -import static xanadu.enderdragon.config.Lang.info; -import static xanadu.enderdragon.manager.ItemManager.readAsItem; - -public class FileUpdater { - public static void update() throws IOException { - FileConfiguration config_old = plugin.getConfig(); - FileConfiguration data_old = EnderDragon.data; - info("New setting files will be generated in plugins/EnderDragon/new."); - if("1.8.3".equals(config_old.getString("version"))){ - File base_F = new File(plugin.getDataFolder(),"setting/default.yml"); - File default_F = new File(plugin.getDataFolder(),"new/setting/default.yml"); - FileConfiguration default_ = YamlConfiguration.loadConfiguration(base_F); - default_.set("display_name",config_old.getString("normal-dragon.name","Ender Dragon")); - default_.set("crystal_heal_speed",config_old.getDouble("normal-dragon.crystal-heal",2.0d)); - if(config_old.getBoolean("command.enable")){ - default_.set("death_cmd",config_old.getStringList("command.normal-dragon")); - } - default_.save(default_F); - File base2_F = new File(plugin.getDataFolder(),"setting/special.yml"); - File special_F = new File(plugin.getDataFolder(),"new/setting/special.yml"); - FileConfiguration special = YamlConfiguration.loadConfiguration(base2_F); - String pre = "special-dragon."; - special.set("display_name",config_old.getString(pre+"name")); - special.set("spawn_chance",config_old.getString(pre+"chance")); - special.set("max_health",config_old.getDouble(pre+"max-health")); - special.set("spawn_health",config_old.getDouble(pre+"spawn-health")); - special.set("attack_potion_effect",config_old.getStringList(pre+"attack-effect")); - special.set("exp_drop",config_old.getInt(pre+"exp-drop")); - special.set("dragon_egg_spawn.chance",config_old.getDouble(pre+"dragon-egg-spawn.chance")); - special.set("dragon_egg_spawn.delay",config_old.getInt(pre+"dragon-egg-spawn.delay")); - special.set("dragon_egg_spawn.x",config_old.getInt(pre+"dragon-egg-spawn.x")); - special.set("dragon_egg_spawn.y",config_old.getInt(pre+"dragon-egg-spawn.y")); - special.set("dragon_egg_spawn.z",config_old.getInt(pre+"dragon-egg-spawn.z")); - String color = config_old.getString(pre+"glow-color"); - if("disable".equalsIgnoreCase(color)) color = "none"; - special.set("glow_color",color); - special.set("crystal_heal_speed",config_old.getDouble(pre+"crystal-heal")); - special.set("suck_blood.enable",config_old.getBoolean(pre+"suck-blood.enable")); - special.set("suck_blood.rate",config_old.getDouble(pre+"suck-blood.rate")); - special.set("suck_blood.base_amount",config_old.getDouble(pre+"suck-blood.base-suck-blood")); - special.set("suck_blood.only_player",config_old.getBoolean(pre+"suck-blood.only-player")); - if(config_old.getBoolean("command.enable")){ - special.set("death_cmd",config_old.getStringList(pre+"special-dragon")); - } - special.save(special_F); - } - else Lang.error("Your config.yml version is not supported!"); - if("1.8.4".equals(data_old.getString("version"))){ - saveResource("data.yml","new/data.yml",true); - File data_new_F = new File(plugin.getDataFolder(),"new/data.yml"); - FileConfiguration data_new = YamlConfiguration.loadConfiguration(data_new_F); - data_new.set("version","2.0.0"); - data_new.set("times",data_old.getInt("times")); - List items_old = data_old.getStringList("items"); - try{ - File base2_F = new File(plugin.getDataFolder(),"setting/special.yml"); - FileConfiguration special = YamlConfiguration.loadConfiguration(base2_F); - String special_key = special.getString("unique_name"); - List list = new ArrayList<>(); - for(int i=0;i+1{ - public ItemStack icon; - public String unique_name; - public String display_name; - public String drop_gui; - public int edge; - public int priority; - public double spawn_chance; - public int max_health; - public int spawn_health; - public int exp_drop; - public int dragon_egg_spawn_delay; - public int dragon_egg_spawn_x; - public int dragon_egg_spawn_y; - public int dragon_egg_spawn_z; - public double dragon_egg_spawn_chance; - public double attack_damage_modify; - public double move_speed_modify; - public double armor_modify; - public double armor_toughness_modify; - public double crystal_heal_speed; - public boolean suck_blood_enable; - public double suck_blood_rate; - public double suck_blood_base_amount; - public boolean suck_blood_only_player; - public List attack_potion_effect; - public List spawn_cmd; - public List death_cmd; - public List spawn_broadcast_msg; - public List death_broadcast_msg; - public List msg_to_killer; - public String glow_color; - public String bossbar_color; - public String bossbar_style; - public double effect_cloud_original_radius; - public double effect_cloud_expand_speed; - public int effect_cloud_duration; - public int effect_cloud_color_R; - public int effect_cloud_color_G; - public int effect_cloud_color_B; - public List effect_cloud_potion; - public List datum = new ArrayList<>(); - - @Override - public int compareTo(MyDragon o) { - return o.priority - this.priority;//降序 - } - -} diff --git a/src/main/java/xanadu/enderdragon/utils/Papi.java b/src/main/java/xanadu/enderdragon/utils/Papi.java deleted file mode 100644 index 4a80933..0000000 --- a/src/main/java/xanadu/enderdragon/utils/Papi.java +++ /dev/null @@ -1,52 +0,0 @@ -package xanadu.enderdragon.utils; - -import me.clip.placeholderapi.expansion.PlaceholderExpansion; -import org.bukkit.OfflinePlayer; -import xanadu.enderdragon.EnderDragon; - -public class Papi extends PlaceholderExpansion { - private final EnderDragon plugin; - - public Papi(EnderDragon plugin) { - this.plugin = plugin; - } - - @Override - public String getAuthor() { - return "Xanadu13"; - } - - @Override - public String getIdentifier() { - return "ed"; - } - - @Override - public String getVersion() { - return "1.0.0"; - } - - @Override - public boolean persist() { - return true; - } - - @Override - public String onRequest(OfflinePlayer player, String params) { -// if(!Config.BossBar_Enable) return null; -// if(params.equalsIgnoreCase("bossbar_progress")) { -// if(player.isOnline() && groups.get(player.getUniqueId())!=null){ -// double progress = groups.get(player.getUniqueId()).getProgress(); -// return String.valueOf(div(progress,1,3)); -// } -// return String.valueOf(0); -// } -// else if(params.equalsIgnoreCase("remain_time")){ -// if(player.isOnline() && groups.get(player.getUniqueId())!=null){ -// return String.valueOf(groups.get(player.getUniqueId()).getRemainTime()); -// } -// return String.valueOf(0); -// } - return null; - } -} diff --git a/src/main/java/xanadu/enderdragon/utils/SpecialColor.java b/src/main/java/xanadu/enderdragon/utils/SpecialColor.java deleted file mode 100644 index ede77a7..0000000 --- a/src/main/java/xanadu/enderdragon/utils/SpecialColor.java +++ /dev/null @@ -1,64 +0,0 @@ -package xanadu.enderdragon.utils; - -import net.md_5.bungee.api.ChatColor; - -import java.awt.*; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import static xanadu.enderdragon.EnderDragon.mcMainVersion; -import static xanadu.enderdragon.utils.MathUtils.hexToInt; - -public class SpecialColor { - - public static Pattern hex_code = Pattern.compile("&#([0-9A-Fa-f]{6})"); - public static Pattern gradient = Pattern.compile("&\\[#([0-9a-fA-F]{6})-#([0-9a-fA-F]{6})(.+)]"); - public static String translateHexCodes (String str) { - if(mcMainVersion < 16) return str; - Matcher matcher = hex_code.matcher(str); - StringBuffer buffer = new StringBuffer(); - while(matcher.find()) { - matcher.appendReplacement(buffer, ChatColor.of("#" + matcher.group(1)).toString()); - } - return ChatColor.translateAlternateColorCodes('&', matcher.appendTail(buffer).toString()); - } - public static String transGradient(String str) { - if(mcMainVersion < 16) return str; - if (str.contains("&[#")&&str.contains("]")) { - Matcher matcher = gradient.matcher(str); - StringBuffer buffer = new StringBuffer(); - while (matcher.find()) { - String text = matcher.group(3); - int[] colors = gradient(matcher.group(1),matcher.group(2),text.length()); - StringBuilder builder = new StringBuilder(); - for (int i = 0; i < text.length(); i++) { - Color c = new Color(colors[i]); - builder.append(ChatColor.of(c)).append(text.charAt(i)); - } - matcher.appendReplacement(buffer, builder.toString()); - } - matcher.appendTail(buffer); - return buffer.toString(); - } - return translateHexCodes(str); - } - private static int[] gradient(String start,String end,int length){ - int[] color = new int[length]; - int[] rgb1 = hexToInt(start); - int[] rgb2 = hexToInt(end); - if(length==0){return color;} - if(length==1){ - for(int j=0;j<3;j++){ - color[0] = color[0]*256+rgb1[j]; - } - return color; - } - for(int i=0;i