From 3e926fd36dcf5e42415ed1b8aa8f3b0a8f6e5d18 Mon Sep 17 00:00:00 2001 From: Xanadu13 <104714710+iXanadu13@users.noreply.github.com> Date: Fri, 25 Aug 2023 21:50:57 +0800 Subject: [PATCH] Delete src/main/java/pers/xanadu/enderdragon/manager directory --- .../enderdragon/manager/DamageManager.java | 25 - .../enderdragon/manager/DragonManager.java | 463 ------------------ .../enderdragon/manager/GlowManager.java | 76 --- .../enderdragon/manager/GuiManager.java | 76 --- .../enderdragon/manager/ItemManager.java | 426 ---------------- .../enderdragon/manager/RewardManager.java | 117 ----- .../enderdragon/manager/TaskManager.java | 93 ---- .../enderdragon/manager/TimerManager.java | 75 --- .../enderdragon/manager/WorldManager.java | 196 -------- 9 files changed, 1547 deletions(-) delete mode 100644 src/main/java/pers/xanadu/enderdragon/manager/DamageManager.java delete mode 100644 src/main/java/pers/xanadu/enderdragon/manager/DragonManager.java delete mode 100644 src/main/java/pers/xanadu/enderdragon/manager/GlowManager.java delete mode 100644 src/main/java/pers/xanadu/enderdragon/manager/GuiManager.java delete mode 100644 src/main/java/pers/xanadu/enderdragon/manager/ItemManager.java delete mode 100644 src/main/java/pers/xanadu/enderdragon/manager/RewardManager.java delete mode 100644 src/main/java/pers/xanadu/enderdragon/manager/TaskManager.java delete mode 100644 src/main/java/pers/xanadu/enderdragon/manager/TimerManager.java delete mode 100644 src/main/java/pers/xanadu/enderdragon/manager/WorldManager.java diff --git a/src/main/java/pers/xanadu/enderdragon/manager/DamageManager.java b/src/main/java/pers/xanadu/enderdragon/manager/DamageManager.java deleted file mode 100644 index 0c2e265..0000000 --- a/src/main/java/pers/xanadu/enderdragon/manager/DamageManager.java +++ /dev/null @@ -1,25 +0,0 @@ -package pers.xanadu.enderdragon.manager; - -import pers.xanadu.enderdragon.util.Pair; - -import java.util.ArrayList; -import java.util.List; -import java.util.UUID; -import java.util.concurrent.ConcurrentHashMap; - -public class DamageManager { - public static final ConcurrentHashMap> data = new ConcurrentHashMap<>(); - public static List> getDamageList(UUID uuid){ - ConcurrentHashMap mp = data.get(uuid); - List> list = new ArrayList<>(); - if(mp == null) return list; - mp.forEach((k,v)->list.add(new Pair<>(k,v))); - return list; - } - public static int sortByDamage(Pair p1, Pair p2){ - if(p2.second>p1.second) return 1; - if(p2.second.equals(p1.second)) return 0; - return -1; - } - -} diff --git a/src/main/java/pers/xanadu/enderdragon/manager/DragonManager.java b/src/main/java/pers/xanadu/enderdragon/manager/DragonManager.java deleted file mode 100644 index bb19858..0000000 --- a/src/main/java/pers/xanadu/enderdragon/manager/DragonManager.java +++ /dev/null @@ -1,463 +0,0 @@ -package pers.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.command.CommandSender; -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 pers.xanadu.enderdragon.config.Config; -import pers.xanadu.enderdragon.config.Lang; -import pers.xanadu.enderdragon.reward.RewardDist; -import pers.xanadu.enderdragon.util.MyDragon; -import pers.xanadu.enderdragon.util.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 pers.xanadu.enderdragon.EnderDragon.*; - -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; - - 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){ - Lang.error("\"dragon_setting_file\" in config.yml is empty!"); - Lang.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){ - Lang.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) { - Lang.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){ - Lang.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; - } - Lang.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)){ - Lang.error("The unique_name conflict! Key: "+myDragon.unique_name); - return; - } - myDragon.icon = ItemManager.readFromBukkit(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){ - Lang.error("Unknown potion type: " + s[0]); - continue; - } - int duration = -1; - try { - duration = Integer.parseInt(s[1]); - } catch (NumberFormatException ex){ - Lang.error("Wrong number format: " + s[1]); - } - if(duration == -1) continue; - int level = -1; - try { - level = Integer.parseInt(s[2]); - } catch (NumberFormatException ex){ - Lang.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){ - Lang.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){ - Lang.error("Unknown potion type: " + s[0]); - continue; - } - int duration = -1; - try { - duration = Integer.parseInt(s[1]); - } catch (NumberFormatException ex){ - Lang.error("Wrong number format: " + s[1]); - } - if(duration == -1) continue; - int level = -1; - try { - level = Integer.parseInt(s[2]); - } catch (NumberFormatException ex){ - Lang.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; - myDragon.reward_dist = RewardDist.parse(f.getConfigurationSection("reward_dist")); - 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 void initiateRespawn(Player p){ - DragonRespawnResult res = initiateRespawn(p.getWorld()); - if(res == DragonRespawnResult.success) Lang.broadcastMSG(Lang.dragon_auto_respawn); - else Lang.sendFeedback(p,"§c"+res.getMessage()); - } - public void initiateRespawn(CommandSender sender, String world_name){ - DragonRespawnResult res = initiateRespawn(Bukkit.getWorld(world_name)); - if(res == DragonRespawnResult.success) Lang.broadcastMSG(Lang.dragon_auto_respawn); - else Lang.sendFeedback(sender,"§c"+res.getMessage()); - } - public void initiateRespawn(String world_name){ - DragonRespawnResult res = initiateRespawn(Bukkit.getWorld(world_name)); - if(res == DragonRespawnResult.success) Lang.broadcastMSG(Lang.dragon_auto_respawn); - else Lang.error(res.getMessage()); - } - public boolean canRespawn(String world_name){ - return canRespawn(Bukkit.getWorld(world_name)); - } - public boolean canRespawn(World world){ - if(world == null) return false; - if(world.getEnvironment() != World.Environment.THE_END) return false; - if(Version.mcMainVersion >= 16){//executes 1e5 times within 27ms - DragonBattle battle = world.getEnderDragonBattle(); - if(battle == null) return false; - if(battle.getEnderDragon() != null) return false; - if(battle.getRespawnPhase() != DragonBattle.RespawnPhase.NONE) return false; - Location cen = battle.getEndPortalLocation(); - if(cen == null) { - battle.initiateRespawn(); - cen = battle.getEndPortalLocation(); - if(cen == null){ - return false; - } - } - return true; - } - try {//executes 1e5 times within 76ms - Object battle = getInstance().getNMSManager().getEnderDragonBattle(world); - if(battle == null) return false; - Field k = battle.getClass().getDeclaredField("k"); - k.setAccessible(true); - Object isAlive = k.get(battle); - if(!((boolean) isAlive)) return false; - Field p = battle.getClass().getDeclaredField("p"); - p.setAccessible(true); - Object phase = p.get(battle); - if(phase != null) 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) return false; - } - return true; - } catch (ReflectiveOperationException e) { - return false; - } - } - public boolean isRespawnRunning(World world){ - if(world == null) return false; - if(world.getEnvironment() != World.Environment.THE_END) return false; - if(Version.mcMainVersion >= 16){ - DragonBattle battle = world.getEnderDragonBattle(); - assert battle != null; - return battle.getRespawnPhase() != DragonBattle.RespawnPhase.NONE; - } - try { - Object battle = getInstance().getNMSManager().getEnderDragonBattle(world); - assert battle != null; - Field p = battle.getClass().getDeclaredField("p"); - p.setAccessible(true); - Object phase = p.get(battle); - return phase != null; - } catch (ReflectiveOperationException e) { - e.printStackTrace(); - return false; - } - } - public void refresh_respawn(World world){ - if(world == null) return; - if(world.getEnvironment() != World.Environment.THE_END) return; - if(Version.mcMainVersion >= 16){ - DragonBattle battle = world.getEnderDragonBattle(); - assert battle != null; - battle.initiateRespawn(); - return; - } - try { - Object battle = getInstance().getNMSManager().getEnderDragonBattle(world); - assert battle != null; - if (this.DragonBattle_e == null) this.DragonBattle_e = battle.getClass().getMethod("e"); - this.DragonBattle_e.invoke(battle); - } catch (ReflectiveOperationException e) { - e.printStackTrace(); - } - } - private DragonRespawnResult initiateRespawn(World world){ - if(world == null) return DragonRespawnResult.world_not_found; - if(world.getEnvironment() != World.Environment.THE_END) return DragonRespawnResult.world_wrong_env; - if(Version.mcMainVersion >= 16){ - DragonBattle battle = world.getEnderDragonBattle(); - assert battle != null; - if(battle.getEnderDragon() != null) return DragonRespawnResult.dragon_has_existed; - if(battle.getRespawnPhase() != DragonBattle.RespawnPhase.NONE) return DragonRespawnResult.respawn_has_started; - Location cen = battle.getEndPortalLocation(); - if(cen == null) { - battle.initiateRespawn(); - cen = battle.getEndPortalLocation(); - if(cen == null){ - return DragonRespawnResult.world_unloaded;//也可尝试chunk.load() - } - } - placeEndCrystals(world,cen); - battle.initiateRespawn(); - return DragonRespawnResult.success; - } - try { - Object battle = getInstance().getNMSManager().getEnderDragonBattle(world); - assert battle != null; - Field k = battle.getClass().getDeclaredField("k"); - k.setAccessible(true); - Object isAlive = k.get(battle); - if(!((boolean) isAlive)) return DragonRespawnResult.dragon_has_existed; - Field p = battle.getClass().getDeclaredField("p"); - p.setAccessible(true); - Object phase = p.get(battle); - if(phase != null) return DragonRespawnResult.respawn_has_started; - 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) return DragonRespawnResult.world_unloaded; - } - 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); - return DragonRespawnResult.success; - } catch (ReflectiveOperationException e) { - return DragonRespawnResult.version_not_support; - } - - } - 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); - } - } - public enum DragonRespawnResult{ - success, - world_not_found, - world_unloaded, - world_wrong_env, - respawn_has_started, - dragon_has_existed, - version_not_support; - public String getMessage(){ - switch (this){ - case success: return "Success"; - case world_not_found: return "Can't find this world!"; - case world_unloaded: return "The world_the_end is unloaded."; - case world_wrong_env: return "Respawn only can be called in the End."; - case respawn_has_started: return "The respawning has already started."; - case dragon_has_existed: return "There is already a dragon here."; - case version_not_support: return "Your server version (" + Version.getVersion() + ") is not supported!"; - default: return "Unknown error!"; - } - } - } - -} - -// try { -// Object WorldServer = getInstance().getNMSManager().getWorldServer(world); -// Field Z = WorldServer.getClass().getDeclaredField("Z"); -// Z.setAccessible(true); -// Object edb = Z.get(WorldServer); -// Class edb_clazz = Class.forName("net.minecraft.world.level.dimension.end.EnderDragonBattle"); -// Method a = edb_clazz.getMethod("a"); -// a.invoke(edb); -// Field y = edb_clazz.getDeclaredField("y"); -// y.setAccessible(true); -// Object bp = y.get(edb); -// if(bp == null) Bukkit.broadcastMessage("123"); -// }catch (ReflectiveOperationException e){ -// e.printStackTrace(); -// } \ No newline at end of file diff --git a/src/main/java/pers/xanadu/enderdragon/manager/GlowManager.java b/src/main/java/pers/xanadu/enderdragon/manager/GlowManager.java deleted file mode 100644 index 81b377e..0000000 --- a/src/main/java/pers/xanadu/enderdragon/manager/GlowManager.java +++ /dev/null @@ -1,76 +0,0 @@ -package pers.xanadu.enderdragon.manager; - -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.entity.Entity; -import org.bukkit.entity.Player; -import org.bukkit.scoreboard.Scoreboard; -import org.bukkit.scoreboard.Team; -import pers.xanadu.enderdragon.util.Version; - -import java.util.HashSet; -import java.util.Set; -import java.util.concurrent.ThreadLocalRandom; - -public class GlowManager { - public static Set handled = new HashSet<>(); - public static void reload(){ - handled.clear(); - } - public static void setScoreBoard(Player p){ - Scoreboard board = p.getScoreboard(); - if(handled.contains(board)) return; - ChatColor[] colors = ChatColor.values(); - for(ChatColor color : colors){ - String name = "ed-"+color.name(); - if(board.getTeam(name)==null) board.registerNewTeam(name); - Team team = board.getTeam(name); - assert team != null; - if(Version.mcMainVersion >= 13) team.setColor(color); - else team.setPrefix(color.toString()); - } - handled.add(board); - } - public static void addUUID(String uuid,String color){ - Set teams = new HashSet<>(); - Bukkit.getOnlinePlayers().forEach(player -> { - GlowManager.setScoreBoard(player); - Team team = player.getScoreboard().getTeam("ed-"+color.toUpperCase()); - teams.add(team); - }); - teams.forEach(team->{ - team.addEntry(uuid); - }); - } - public static void setGlowingColor(Entity entity, ChatColor color){ - Set teams = new HashSet<>(); - Bukkit.getOnlinePlayers().forEach(player -> { - GlowManager.setScoreBoard(player); - Team team = player.getScoreboard().getTeam("ed-"+color.name()); - teams.add(team); - }); - teams.forEach(team->{ - team.addEntry(entity.getUniqueId().toString()); - entity.setGlowing(true); - }); - } - public static ChatColor getGlowColor(String str){ - ChatColor chatColor; - if(str.equals("RANDOM")) chatColor = randomColor(); - else chatColor = ChatColor.valueOf(str); - return chatColor; - } - public static ChatColor getGlowColor(GlowColor glowColor){ - if(glowColor == GlowColor.NONE) return null; - if(glowColor == GlowColor.RANDOM) return randomColor(); - return ChatColor.valueOf(glowColor.name()); - } - public static ChatColor randomColor(){ - return ChatColor.values()[ThreadLocalRandom.current().nextInt(16)]; - } - public enum GlowColor{ - AQUA,BLACK,BLUE,DARK_AQUA,DARK_BLUE,DARK_GRAY,DARK_GREEN,DARK_PURPLE,DARK_RED,GOLD,GRAY,GREEN,LIGHT_PURPLE,RED,WHITE,YELLOW, - NONE,RANDOM - } - -} diff --git a/src/main/java/pers/xanadu/enderdragon/manager/GuiManager.java b/src/main/java/pers/xanadu/enderdragon/manager/GuiManager.java deleted file mode 100644 index 1c8f50e..0000000 --- a/src/main/java/pers/xanadu/enderdragon/manager/GuiManager.java +++ /dev/null @@ -1,76 +0,0 @@ -package pers.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 pers.xanadu.enderdragon.config.Lang; -import pers.xanadu.enderdragon.gui.GUIWrapper; - -import java.io.File; -import java.util.HashMap; -import java.util.Iterator; - -import static pers.xanadu.enderdragon.EnderDragon.plugin; - -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; - Lang.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, boolean editor) { - if (!f.containsKey(name)) { - Lang.sendFeedback(player,Lang.gui_not_found); - return; - } - player.openInventory(new GUIWrapper(f.get(name),name,editor).current()); - } - public static void openGui(Player player,String style,String key, boolean editor){ - if (!f.containsKey(style)) { - Lang.sendFeedback(player,Lang.gui_not_found); - return; - } - player.openInventory(new GUIWrapper(f.get(style),key,editor).current()); - } - - @Deprecated - public static void openGui(Player player, String name) { - if (!f.containsKey(name)) { - Lang.sendFeedback(player,Lang.gui_not_found); - return; - } - player.openInventory(new GUIWrapper(f.get(name),name,false).current()); - } - @Deprecated - public static void openGui(Player player,String style,String key){ - if (!f.containsKey(style)) { - Lang.sendFeedback(player,Lang.gui_not_found); - return; - } - player.openInventory(new GUIWrapper(f.get(style),key,false).current()); - } -} diff --git a/src/main/java/pers/xanadu/enderdragon/manager/ItemManager.java b/src/main/java/pers/xanadu/enderdragon/manager/ItemManager.java deleted file mode 100644 index 6a14f76..0000000 --- a/src/main/java/pers/xanadu/enderdragon/manager/ItemManager.java +++ /dev/null @@ -1,426 +0,0 @@ -package pers.xanadu.enderdragon.manager; - -import org.bukkit.Material; -import org.bukkit.attribute.Attribute; -import org.bukkit.attribute.AttributeModifier; -import org.bukkit.configuration.ConfigurationSection; -import org.bukkit.configuration.file.YamlConfiguration; -import org.bukkit.enchantments.Enchantment; -import org.bukkit.inventory.ItemFlag; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; -import org.bukkit.inventory.meta.Repairable; -import org.bukkit.persistence.PersistentDataContainer; -import pers.xanadu.enderdragon.EnderDragon; -import pers.xanadu.enderdragon.config.Config; -import pers.xanadu.enderdragon.reward.Reward; -import pers.xanadu.enderdragon.reward.Chance; -import pers.xanadu.enderdragon.util.Version; - -import java.util.*; - -public class ItemManager { - public static String write(Reward reward){ - Chance chance = reward.getChance(); - return write(reward.getItem(),chance.getValue(),chance.getStr(),reward.getName()); - } - public static String write(ItemStack item,double value,String str,String name){ - 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() + "(" + TaskManager.getCurrentTimeWithSpecialFormat() + ")"; - } - else name = meta.getDisplayName(); - } - else name = item.getType().name().toLowerCase() + "(" + TaskManager.getCurrentTimeWithSpecialFormat() + ")"; - } - ConfigurationSection section = yaml.createSection(name); - switch(Config.item_format_data){ - case "nbt" : { - section.set("data_type","nbt"); - section.set("data",EnderDragon.getInstance().getNMSManager().getNBT(item)); - break; - } - case "advanced" : { - section.set("data_type","advanced"); - ConfigurationSection section_data = section.createSection("data"); - //type - String type = item.getType().name(); - section_data.set("type",type); - if("AIR".equals(type)) break; - //amount - int amount = item.getAmount(); - section_data.set("amount",amount); - //damage - int damage = item.getDurability(); - if(damage != 0) section_data.set("damage",damage); - ItemMeta meta = item.getItemMeta(); - if(meta == null) break; - //DisplayName - String display_name = meta.getDisplayName(); - if(!"".equals(display_name)) section_data.set("display_name",display_name); - //LocalizedName - if(meta.hasLocalizedName()){ - section_data.set("localized_name",meta.getLocalizedName()); - } - //lore - List lores = meta.getLore(); - if(lores != null) section_data.set("lore",lores); - //Enchantments - if(meta.hasEnchants()){ - ConfigurationSection enchants = section_data.createSection("enchants"); - Map mp = meta.getEnchants(); - mp.forEach((enchantment,level) -> enchants.set(enchantment.getName(),level)); - } - if(Version.mcMainVersion>=14 || "v1_13_R2".equals(Version.getVersion())){ - //AttributeModifiers - if(meta.hasAttributeModifiers()){ - ConfigurationSection attributes = section_data.createSection("AttributeModifiers"); - meta.getAttributeModifiers().forEach((attribute,modifier)->{ - attributes.set(attribute.name(),modifier); - }); - } - } - if(Version.mcMainVersion>=14){ - //CustomModelData - if(meta.hasCustomModelData()) { - section_data.set("CustomModelData",meta.getCustomModelData());//int - } - //PersistentDataContainer - PersistentDataContainer dataContainer = meta.getPersistentDataContainer(); - if(!dataContainer.isEmpty()){ - ConfigurationSection dataContainer_section = section_data.createSection("PersistentDataContainer"); - String cpd = EnderDragon.getInstance().getNMSManager().PDCtoString(dataContainer); - dataContainer_section.set("data_type","nbt"); - dataContainer_section.set("data",cpd); - } - } - //RepairCost - if(meta instanceof Repairable){ - Repairable repairable = (Repairable) meta; - section_data.set("RepairCost",repairable.getRepairCost()); - } - //ItemFlags - Set flags = meta.getItemFlags(); - if(!flags.isEmpty()){ - List list = new ArrayList<>(); - flags.forEach(flag ->{ - list.add(flag.name()); - }); - section_data.set("ItemFlags",list); - } - //Unbreakable - section_data.set("unbreakable",meta.isUnbreakable()); - //internal - Object cpd = EnderDragon.getInstance().getNMSManager().getCPD(item); - Map mp = EnderDragon.getInstance().getNMSManager().cpdToMap(cpd); - if(mp.containsKey("tag")){ - cpd = mp.get("tag"); - mp = EnderDragon.getInstance().getNMSManager().cpdToMap(cpd); - mp.remove("Damage"); - if(mp.containsKey("display")){ - Object display = mp.get("display"); - Map display_mp = EnderDragon.getInstance().getNMSManager().cpdToMap(display); - display_mp.remove("Name"); - display_mp.remove("LocName"); - display_mp.remove("Lore"); - Object new_display = EnderDragon.getInstance().getNMSManager().getNBTTagCompound(display_mp); - mp.put("display",new_display); - } - //mp.remove("display");//Name, LocName, Lore, color - mp.remove("Enchantments"); - mp.remove("AttributeModifiers"); - mp.remove("CustomModelData"); - mp.remove("PublicBukkitValues");//PersistentDataContainer - mp.remove("RepairCost"); - mp.remove("HideFlags");//ItemFlags - mp.remove("Unbreakable"); - //CanDestroy, CanPlaceOn - Object new_cpd = EnderDragon.getInstance().getNMSManager().getNBTTagCompound(mp); - ConfigurationSection internal = section_data.createSection("internal"); - internal.set("data_type","nbt"); - internal.set("data",new_cpd.toString()); - } -// Map mp = EnderDragon.getInstance().getNMSManager().getUnhandledTags(meta); -// if(mp != null){ -// ConfigurationSection internal = section_data.createSection("internal"); -// saveUnhandledTags(internal,mp); -// } - - break; - } - default : { - section.set("data_type","default"); - section.set("data", item); - } - } - section.set("drop_chance.value",value); - section.set("drop_chance.format",str); - return yaml.saveToString(); - } - 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; - String data_type = section0.getString("data_type"); - //data_type may be null - ItemStack item; - if("nbt".equals(data_type)) item = readFromNBT(section0,"data"); - else if("advanced".equals(data_type)) item = readFromAdvData(section0, "data"); - else item = readFromBukkit(section0,"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 readFromAdvData(ConfigurationSection section, String path){ - ConfigurationSection data = section.getConfigurationSection(path); - if(data == null) return new ItemStack(Material.AIR); - String type = data.getString("type"); - if(type == null || "AIR".equals(type)) return new ItemStack(Material.AIR); - int amount = data.getInt("amount"); - Material material = Material.getMaterial(type); - if(material == null) return new ItemStack(Material.AIR); - ItemStack item = new ItemStack(material,amount); - //internal - if(data.contains("internal")){ - ConfigurationSection internal_section = data.getConfigurationSection("internal"); - if(internal_section!=null){ - if("nbt".equals(internal_section.getString("data_type"))){ - String nbt = internal_section.getString("data"); - Object cpd = EnderDragon.getInstance().getNMSManager().getCPD(nbt); - Map mp_tag = new HashMap<>(); - mp_tag.put("tag",cpd); - Object full_cpd = EnderDragon.getInstance().getNMSManager().getNBTTagCompound(mp_tag); - item = EnderDragon.getInstance().getNMSManager().mergeItemCPD(item,full_cpd); - } -// else{ -// Map mp = getUnhandledTags(internal_section); -// EnderDragon.getInstance().getNMSManager().setUnhandledTags(meta,mp); -// } -// Map mp = new HashMap<>(); -// internal_section.getKeys(false).forEach(key->{ -// Object obj = internal_section.get(key);//obj instanceof String -// Object nbt_base = EnderDragon.getInstance().getNMSItemManager().readAsNBTBase((String) obj); -// mp.put(key,nbt_base); -// }); -// Map mp = getUnhandledTags(internal_section); -// NBTTagCompound cpd = getNBTTagCompound(mp); -// net.minecraft.world.item.ItemStack ei = CraftItemStack.asNMSCopy(item); -// ei.c(cpd); -// item = CraftItemStack.asBukkitCopy(ei); - //EnderDragon.getInstance().getNMSManager().setUnhandledTags(meta,mp); - } - } - //damage - if(data.contains("damage")){ - int damage = data.getInt("damage"); - item.setDurability((short) damage); - } - ItemMeta meta = item.getItemMeta(); - if(meta == null) return item; - //DisplayName - String display_name = data.getString("display_name"); - if(display_name != null) meta.setDisplayName(display_name); - //LocalizedName - if(data.contains("localized_name")){ - String LocalizedName = data.getString("localized_name"); - if(LocalizedName != null) meta.setLocalizedName(LocalizedName); - } - //lore - if(data.contains("lore")){ - List lores = data.getStringList("lore"); - if(!lores.isEmpty()) meta.setLore(lores); - } - //Enchantments - if(data.contains("enchants")){ - ConfigurationSection enchants = data.getConfigurationSection("enchants"); - if(enchants != null){ - //Map mp = new HashMap<>(); - enchants.getKeys(false).forEach(key->{ - Enchantment enchantment = Enchantment.getByName(key); - int level = enchants.getInt(key); - if(enchantment != null && level>0){ - meta.addEnchant(enchantment,level,true); - } - }); - } - } - //CustomModelData - if(data.contains("CustomModelData")){ - int CustomModelData = data.getInt("CustomModelData"); - meta.setCustomModelData(CustomModelData); - } - //AttributeModifiers - if(data.contains("AttributeModifiers")){ - ConfigurationSection attributes = data.getConfigurationSection("AttributeModifiers"); - if(attributes != null){ - attributes.getKeys(false).forEach(name->{ - Attribute attribute = Attribute.valueOf(name); - AttributeModifier modifier = (AttributeModifier) attributes.get(name); - if(modifier != null){ - meta.addAttributeModifier(attribute,modifier); - } - }); - } - } - //RepairCost - if(data.contains("RepairCost")){ - int cost = data.getInt("RepairCost"); - if(meta instanceof Repairable){ - ((Repairable)meta).setRepairCost(cost); - } - } - //ItemFlags - if(data.contains("ItemFlags")){ - List names = data.getStringList("ItemFlags"); - names.forEach(name->meta.addItemFlags(ItemFlag.valueOf(name))); - } - //Unbreakable - if(data.contains("unbreakable") && data.getBoolean("unbreakable")) meta.setUnbreakable(true); - //PersistentDataContainer - if(data.contains("PersistentDataContainer")){ - ConfigurationSection dataContainer_section = data.getConfigurationSection("PersistentDataContainer"); - if(dataContainer_section != null){ - if("nbt".equals(dataContainer_section.getString("data_type"))){ - String nbt = dataContainer_section.getString("data"); - Object cpd = EnderDragon.getInstance().getNMSManager().getCPD(nbt); - PersistentDataContainer container = meta.getPersistentDataContainer(); - EnderDragon.getInstance().getNMSManager().setPersistentDataContainer(container, cpd); - } - } - } - item.setItemMeta(meta); - return item; - } - public static ItemStack readFromNBT(ConfigurationSection section, String path){ - String nbt = section.getString(path); - if (nbt == null) return new ItemStack(Material.AIR); - return EnderDragon.getInstance().getNMSItemManager().readAsItem(nbt); - } - public static ItemStack readFromBukkit(ConfigurationSection section, String path){ - String nbt = section.getString(path); - if (nbt == null) return new ItemStack(Material.AIR); - return section.getItemStack(path); - } - public static ItemStack readFromString(String str){ - YamlConfiguration yml = new YamlConfiguration(); - yml.set("test",str); - return yml.getItemStack("test"); - } - public static void addLoreFront(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 void addLoreBack(ItemStack item, String lore){ - ItemMeta meta = item.getItemMeta(); - if(meta != null) { - List lores = meta.getLore(); - if (lores != null) { - lores.add(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; - } - private static void saveUnhandledTags(ConfigurationSection section, Map mp){ - mp.forEach((k,v)->{ - //Bukkit.broadcastMessage(k+": "+v.getClass().toString()); - if(v instanceof Map){ - saveUnhandledTags(section.createSection(k), (Map) v); - } - else section.set(k,v.toString()); - }); - } -/** - private static void saveUnhandledTags(ConfigurationSection section, Map mp){ - mp.forEach((k,v)->{ - Object obj = v; - //Bukkit.broadcastMessage(obj.getClass().toString()); - try{ - obj = EnderDragon.getInstance().getNMSItemManager().parseNBT(v); - }catch (Throwable ignored){ - - } - if(obj instanceof Map){ - saveUnhandledTags(section.createSection(k), (Map) obj); - } - else section.set(k,obj); - }); - }**/ - private static Map getUnhandledTags(ConfigurationSection section){ - Map res = new HashMap<>(); - section.getKeys(false).forEach(key->{ - Object obj = section.get(key); - if(obj instanceof ConfigurationSection){ - ConfigurationSection subSection = section.getConfigurationSection(key); - if(subSection != null){ - obj = getUnhandledTags(subSection); -// Object mp = getUnhandledTags(subSection); -// Bukkit.getLogger().info(mp.getClass().toString()); -// try{ -// obj = EnderDragon.getInstance().getNMSItemManager().getNBTBase(mp); -// }catch (Throwable throwable){ -// -// } - } - } - else obj = EnderDragon.getInstance().getNMSManager().getCPD((String) obj); - //else obj = EnderDragon.getInstance().getNMSItemManager().readAsNBTBase((String) obj); - res.put(key,obj); - }); - return res; - } - -// private static Object dfs(ConfigurationSection section){ -// section.getKeys(false).forEach(key->{ -// Object obj = section.get(key); -// if(obj instanceof ConfigurationSection){ -// ConfigurationSection subSection = section.getConfigurationSection(key); -// if(subSection != null) obj = dfs(subSection); -// } -// else obj = EnderDragon.getInstance().getNMSItemManager().readAsNBTBase((String) obj); -// -// }); -// return -// } - -// //internal -// Map mp = EnderDragon.getInstance().getNMSManager().getUnhandledTags(meta); -// if(mp != null){ -// ConfigurationSection internal = section_data.createSection("internal"); -// mp.forEach((k,v)->{ -// Object obj = EnderDragon.getInstance().getNMSItemManager().parseNBT(v); -// -// if(obj instanceof Map) obj = obj.toString(); -// else if(obj instanceof List) obj = obj.toString(); -// -// internal.set(k,obj); -// }); -// } - - - - -} diff --git a/src/main/java/pers/xanadu/enderdragon/manager/RewardManager.java b/src/main/java/pers/xanadu/enderdragon/manager/RewardManager.java deleted file mode 100644 index 681c354..0000000 --- a/src/main/java/pers/xanadu/enderdragon/manager/RewardManager.java +++ /dev/null @@ -1,117 +0,0 @@ -package pers.xanadu.enderdragon.manager; - -import org.bukkit.configuration.InvalidConfigurationException; -import org.bukkit.configuration.file.FileConfiguration; -import org.bukkit.configuration.file.YamlConfiguration; -import org.bukkit.inventory.ItemStack; -import pers.xanadu.enderdragon.config.Lang; -import pers.xanadu.enderdragon.reward.Reward; -import pers.xanadu.enderdragon.reward.Chance; -import pers.xanadu.enderdragon.util.MyDragon; - -import java.io.File; -import java.io.IOException; -import java.util.List; -import java.util.UUID; -import java.util.concurrent.ConcurrentHashMap; - -import static pers.xanadu.enderdragon.EnderDragon.*; - -public class RewardManager { - - public static void reload(){ - for(MyDragon dragon : DragonManager.dragons){ - dragon.datum.clear(); - File file = getRewardFile(dragon.unique_name); - if(file == null) return; - FileConfiguration data = YamlConfiguration.loadConfiguration(file); - String path = "list"; - List list = data.getStringList(path); - // if list == null ? - for(String str : list){ - YamlConfiguration yml = new YamlConfiguration(); - try{ - yml.loadFromString(str); - Reward reward = ItemManager.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 = DragonManager.mp.get(key); - if(dragon == null) return; - File file = getRewardFile(dragon.unique_name); - if(file == null) return; - FileConfiguration data = YamlConfiguration.loadConfiguration(file); - String path = "list"; - List list = data.getStringList(path); - Reward reward = new Reward(item,chance); - list.add(reward.toString()); - data.set(path,list); - try { - data.save(file); - } catch (IOException e) { - throw new RuntimeException(e); - } - dragon.datum.add(reward); - } - public static void clearItem(String key){ - MyDragon dragon = DragonManager.mp.get(key); - if(dragon == null) return; - File file = getRewardFile(dragon.unique_name); - if(file == null) return; - FileConfiguration data = YamlConfiguration.loadConfiguration(file); - String path = "list"; - data.set(path,""); - try { - data.save(file); - } catch (IOException e) { - throw new RuntimeException(e); - } - dragon.datum.clear(); - } - public static boolean removeItem(String key,int idx){ - MyDragon dragon = DragonManager.mp.get(key); - if(dragon == null) return false; - File file = getRewardFile(dragon.unique_name); - if(file == null) return false; - FileConfiguration data = YamlConfiguration.loadConfiguration(file); - String path = "list"; - List list = data.getStringList(path); - try{ - list.remove(idx); - data.set(path,list); - data.save(file); - dragon.datum.remove(idx); - return true; - }catch (IndexOutOfBoundsException e){ - Lang.error("Index out of bound!"); - }catch (IOException e) { - throw new RuntimeException(e); - } - return false; - } - private static File getRewardFile(String key){ - String file_path = "reward/" + key + ".yml"; - File file = new File(plugin.getDataFolder(),file_path); - if(!file.exists()) { - try{ - YamlConfiguration yml = new YamlConfiguration(); - yml.set("version","2.1.0"); - yml.set("list",""); - yml.save(file); - }catch (IOException e){ - Lang.error("Not Found "+file_path+" ,skipped it."); - return null; - } - } - return new File(plugin.getDataFolder(),file_path); - } - -} diff --git a/src/main/java/pers/xanadu/enderdragon/manager/TaskManager.java b/src/main/java/pers/xanadu/enderdragon/manager/TaskManager.java deleted file mode 100644 index 9277d56..0000000 --- a/src/main/java/pers/xanadu/enderdragon/manager/TaskManager.java +++ /dev/null @@ -1,93 +0,0 @@ -package pers.xanadu.enderdragon.manager; - -import pers.xanadu.enderdragon.config.Config; -import pers.xanadu.enderdragon.config.Lang; -import pers.xanadu.enderdragon.task.type.*; -import pers.xanadu.enderdragon.task.Task; -import pers.xanadu.enderdragon.task.TaskType; - -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 pers.xanadu.enderdragon.EnderDragon.*; - -public class TaskManager { - private static final DateTimeFormatter RoundTimeFormat_hm = DateTimeFormatter.ofPattern("HH:mm"); - private static final DateTimeFormatter RoundTimeFormat_all = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"); - 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, RoundTimeFormat_hm); - }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(RoundTimeFormat_all); - } - public static LocalDateTime getLocalDateTime(String str){ - if(isValidTime(str)) return LocalDateTime.parse(str, RoundTimeFormat_all); - 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){ - Lang.error(Lang.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/pers/xanadu/enderdragon/manager/TimerManager.java b/src/main/java/pers/xanadu/enderdragon/manager/TimerManager.java deleted file mode 100644 index 92e512d..0000000 --- a/src/main/java/pers/xanadu/enderdragon/manager/TimerManager.java +++ /dev/null @@ -1,75 +0,0 @@ -package pers.xanadu.enderdragon.manager; - -import org.bukkit.configuration.ConfigurationSection; -import org.bukkit.configuration.file.FileConfiguration; -import org.bukkit.configuration.file.YamlConfiguration; -import pers.xanadu.enderdragon.config.Lang; -import pers.xanadu.enderdragon.task.DragonRespawnTimer; - -import java.io.File; -import java.io.IOException; -import java.util.HashMap; - -import static pers.xanadu.enderdragon.EnderDragon.plugin; - -public class TimerManager { - private static final HashMap mp = new HashMap<>(); - public static void enable(){ - File file = new File(plugin.getDataFolder(),"respawn_cd.yml"); - if(file.exists()){ - FileConfiguration fc = YamlConfiguration.loadConfiguration(file); - ConfigurationSection section = fc.getConfigurationSection("respawn_cd"); - if(section == null) return; - section.getKeys(false).forEach(name->{ - int set_time = section.getInt(name+".setTime"); - int rest_time = section.getInt(name+".remainTime"); - if(set_time>0){ - boolean run = section.getBoolean(name+".isRunning"); - DragonRespawnTimer timer = new DragonRespawnTimer(name,set_time,rest_time); - if(run) timer.run(); - TimerManager.mp.put(name,timer); - } - }); - } - } - public static void save(){ - YamlConfiguration yml = new YamlConfiguration(); - mp.forEach((k,v)->{ - ConfigurationSection section = yml.createSection("respawn_cd."+k); - if(v.getRestTime()>0){ - //section.set("world_name",k); - section.set("setTime",v.getSetTime()); - section.set("remainTime",v.getRestTime()); - section.set("isRunning",v.isRunning()); - } - }); - try{ - yml.save(new File(plugin.getDataFolder(),"respawn_cd.yml")); - }catch (IOException e){ - Lang.error("Failed to save respawn_cd.yml!"); - } - } - public static void startTimer(String world_name){ - DragonRespawnTimer timer = mp.get(world_name); - if(timer != null){ - timer.run(); - } - } - public static void setTimer(String world_name, DragonRespawnTimer timer){ - DragonRespawnTimer timer_old = mp.get(world_name); - if(timer_old != null) timer_old.del(); - mp.put(world_name,timer); - } - public static DragonRespawnTimer getTimer(String world_name){ - return mp.get(world_name); - } - public static void removeTimer(String world_name){ - DragonRespawnTimer timer_old = mp.get(world_name); - if(timer_old != null) timer_old.del(); - mp.remove(world_name); - } - public static void removeAll(){ - mp.values().forEach(DragonRespawnTimer::del); - mp.clear(); - } -} diff --git a/src/main/java/pers/xanadu/enderdragon/manager/WorldManager.java b/src/main/java/pers/xanadu/enderdragon/manager/WorldManager.java deleted file mode 100644 index d8fde3f..0000000 --- a/src/main/java/pers/xanadu/enderdragon/manager/WorldManager.java +++ /dev/null @@ -1,196 +0,0 @@ -package pers.xanadu.enderdragon.manager; - -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.World; -import org.bukkit.entity.EnderDragon; -import org.bukkit.entity.Entity; -import pers.xanadu.enderdragon.config.Lang; -import pers.xanadu.enderdragon.util.Version; - -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.List; - -import static java.lang.Math.sqrt; -import static pers.xanadu.enderdragon.EnderDragon.getInstance; -import static pers.xanadu.enderdragon.util.MathUtil.*; - -public class WorldManager { - public static final List worlds = new ArrayList<>(); - private Field dimension; - private Field world_provider; - private Method getDimensionID; - - public static void reload(){ - worlds.clear(); - Bukkit.getWorlds().forEach(world -> worlds.add(world.getName())); - } - - public static Collection getExplosionDragon(float power, Location loc){ - World world = loc.getWorld(); - if(world == null) return Collections.EMPTY_LIST; - return getExplosionDragon(loc.getWorld(),power,loc.getX()+0.5d,loc.getY()+0.5d,loc.getZ()+0.5d); - } - public static Collection getExplosionDragon(World world,float power,double x,double y,double z){ - float f = power * 2.0F; - int x1 = floor(x - (double)f - 1.0); - int x2 = floor(x + (double)f + 1.0); - int y1 = floor(y - (double)f - 1.0); - int y2 = floor(y + (double)f + 1.0); - int z1 = floor(z - (double)f - 1.0); - int z2 = floor(z + (double)f + 1.0); -// Collection list = world.getNearbyEntities(new BoundingBox(x1, y1, z1, x2, y2, z2)); - Location cen = new Location(world,(x1+x2)/2d,(y1+y2)/2d,(z1+z2)/2d); - double rx = (x2-x1)/2d; - double ry = (y2-y1)/2d; - double rz = (z2-z1)/2d; - Collection list = world.getNearbyEntities(cen,rx,ry,rz); - List res = new ArrayList<>(); - for (Entity entity : list) { - if(entity instanceof EnderDragon){ - double d0 = sqrt(c(entity,x, y, z)) / f; - if (d0 <= 1.0) { - Location loc = entity.getLocation(); - double dx = loc.getX() - x; - double dy = loc.getY() + 6.8d - y; - double dz = loc.getZ() - z; - double d1 = sqrt(dx * dx + dy * dy + dz * dz); - if (d1 != 0.0) { - res.add((EnderDragon) entity); - } - } - } - } - return res; - } -// public static float a(Vector endPos, Entity entity) { -// BoundingBox bb = entity.getBoundingBox(); -// double d0 = 1.0 / ((bb.getMaxX() - bb.getMinX()) * 2.0 + 1.0); -// double d1 = 1.0 / ((bb.getMaxY() - bb.getMinY()) * 2.0 + 1.0); -// double d2 = 1.0 / ((bb.getMaxZ() - bb.getMinZ()) * 2.0 + 1.0); -// double d3 = (1.0 - Math.floor(1.0 / d0) * d0) / 2.0; -// double d4 = (1.0 - Math.floor(1.0 / d2) * d2) / 2.0; -// if (d0 >= 0.0 && d1 >= 0.0 && d2 >= 0.0) { -// int i = 0; -// int j = 0; -// -// for(float f = 0.0F; f <= 1.0F; f = (float)((double)f + d0)) { -// for(float f1 = 0.0F; f1 <= 1.0F; f1 = (float)((double)f1 + d1)) { -// for(float f2 = 0.0F; f2 <= 1.0F; f2 = (float)((double)f2 + d2)) { -// double d5 = d(f, bb.getMinX(), bb.getMaxX()); -// double d6 = d(f1, bb.getMinY(), bb.getMaxY()); -// double d7 = d(f2, bb.getMinZ(), bb.getMaxZ()); -// //Vec3D vec3d1 = new Vec3D(d5 + d3, d6, d7 + d4); -// Location start = new Location(entity.getWorld(),d5 + d3, d6, d7 + d4); -// Vector dir = new Vector(endPos.getX()-start.getX(),endPos.getY()-start.getY(),endPos.getZ()-start.getZ()); -// double maxDistance = dir.length(); -// RayTraceResult result = entity.getWorld().rayTraceBlocks(start,dir,maxDistance, FluidCollisionMode.NEVER,false); -// if(result == null) ++i; -//// if (entity.getWorld().rayTrace(new RayTrace(vec3d1, endPos, RayTrace.BlockCollisionOption.OUTLINE, RayTrace.FluidCollisionOption.NONE, entity)).getType() == MovingObjectPosition.EnumMovingObjectType.MISS) { -//// ++i; -//// } -// ++j; -// } -// } -// } -// return (float)i / (float)j; -// } else { -// return 0.0F; -// } -// } - - public void fixWorldEnvironment(){ - Bukkit.getWorlds().forEach(world -> { - try{ - if(isTheEnd(world)) getInstance().getNMSManager().setEnvironment(world, World.Environment.THE_END); - }catch(ReflectiveOperationException e){ - e.printStackTrace(); - } - }); - } - private boolean isTheEnd(World world) throws ReflectiveOperationException { - String version = Version.getVersion(); - switch (version) { - case "v1_12_R1" : - case "v1_13_R1" : { - Object world_server = getInstance().getNMSManager().getWorldServer(world); - if(dimension == null) dimension = world_server.getClass().getDeclaredField("dimension"); - int dimen = (int) dimension.get(world_server); - return dimen == 1; - } - case "v1_13_R2" : { - Object world_server = getInstance().getNMSManager().getWorldServer(world); - if(dimension == null) dimension = world_server.getClass().getField("dimension"); - Object DimensionManager = dimension.get(world_server); - if(getDimensionID == null) getDimensionID = DimensionManager.getClass().getMethod("getDimensionID"); - int dimen = (int) getDimensionID.invoke(DimensionManager); - return dimen == 1; - } - case "v1_14_R1" : - case "v1_15_R1" : { - Object world_server = getInstance().getNMSManager().getWorldServer(world); - if(world_provider == null) world_provider = world_server.getClass().getField("worldProvider"); - Object worldProvider = world_provider.get(world_server); - if(dimension == null) dimension = getInstance().getNMSManager().getWorldProviderClass().getDeclaredField("f"); - dimension.setAccessible(true); - Object DimensionManager = dimension.get(worldProvider); - if(getDimensionID == null) getDimensionID = DimensionManager.getClass().getMethod("getDimensionID"); - int dimen = (int) getDimensionID.invoke(DimensionManager); - return dimen == 1; - } - case "v1_16_R1" : - case "v1_16_R2" : - case "v1_16_R3" : - case "v1_17_R1" : { - Object world_server = getInstance().getNMSManager().getWorldServer(world); - if(getDimensionID == null) getDimensionID = getInstance().getNMSManager().getWorldClass().getMethod("getDimensionKey"); - Object world_type = getDimensionID.invoke(world_server); - return world_type.toString().contains("minecraft:the_end"); - } - default : { - if(Version.mcMainVersion < 12){ - Lang.warn("Your server version (" + version + ") is not supported!"); - return false; - } - Object world_server = getInstance().getNMSManager().getWorldServer(world); - if(getDimensionID == null) getDimensionID = world_server.getClass().getMethod("getTypeKey"); - Object world_type = getDimensionID.invoke(world_server); - return world_type.toString().contains("minecraft:the_end"); - } - } - /* - try{ - //>=1.18 建议使用WorldServer::getTypeKey - Object world_server = getInstance().getNMSManager().getWorldServer(world); - Class World_Class = Class.forName("net.minecraft.server."+ Version.getVersion()+".World");//<=1.16.5 - Object world_type = World_Class.getDeclaredMethod("getDimensionKey").invoke(world_server);//<=1.17.1 - - String string_type = world_type.toString(); - Bukkit.broadcastMessage(string_type); - - Class ResourceKey_Class = Class.forName("net.minecraft.server."+Version.getVersion()+".ResourceKey"); - Object ResourceKey = ResourceKey_Class.cast(world_type); - Object MinecraftKey = ResourceKey_Class.getDeclaredMethod("a").invoke(ResourceKey); - Class MinecraftKey_Class = Class.forName("net.minecraft.server."+Version.getVersion()+".MinecraftKey"); - String string_type2 = (String) MinecraftKey_Class.getDeclaredMethod("getKey").invoke(MinecraftKey); - Bukkit.broadcastMessage(string_type2); - - - - -// Object world_c = getCraftWorld(world); -// Object envi = CraftWorldClass.getDeclaredMethod("getEnvironment").invoke(world_c); -// World.Environment environment = (World.Environment) envi; -// Bukkit.broadcastMessage(environment.toString()); - }catch (ReflectiveOperationException e){ - e.printStackTrace(); - } - */ - } - -} -