From 37486e05c1140bf733bd29d797fa25441522c0aa Mon Sep 17 00:00:00 2001 From: Xanadu13 <104714710+iXanadu13@users.noreply.github.com> Date: Wed, 17 Aug 2022 10:06:25 +0800 Subject: [PATCH] 1.8.4 --- .../java/xanadu/enderdragon/EnderDragon.java | 23 ++++++++++++++- .../enderdragon/commands/MainCommand.java | 9 +++--- .../enderdragon/events/CreatureHurt.java | 14 ++++++++-- .../enderdragon/events/DragonAttack.java | 2 +- .../enderdragon/events/DragonDeath.java | 14 +++++++--- .../xanadu/enderdragon/events/DragonHeal.java | 3 +- .../enderdragon/events/DragonSpawn.java | 28 ++++++++++++------- .../java/xanadu/enderdragon/tools/MyMath.java | 12 ++++++++ src/main/resources/config.yml | 8 +++--- src/main/resources/data.yml | 4 +-- src/main/resources/plugin.yml | 2 +- 11 files changed, 87 insertions(+), 32 deletions(-) create mode 100644 src/main/java/xanadu/enderdragon/tools/MyMath.java diff --git a/src/main/java/xanadu/enderdragon/EnderDragon.java b/src/main/java/xanadu/enderdragon/EnderDragon.java index 612b05c..d459d35 100644 --- a/src/main/java/xanadu/enderdragon/EnderDragon.java +++ b/src/main/java/xanadu/enderdragon/EnderDragon.java @@ -6,6 +6,7 @@ import org.bukkit.Server; import org.bukkit.configuration.InvalidConfigurationException; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Entity; import org.bukkit.inventory.ItemStack; import org.bukkit.plugin.Plugin; import org.bukkit.plugin.PluginManager; @@ -33,12 +34,15 @@ public final class EnderDragon extends JavaPlugin { public static File langF; public static FileConfiguration data; public static FileConfiguration lang; + public static int mcMainVersion; + public static int mcPatchVersion; @Override public void onEnable() { plugin = this; server = plugin.getServer(); pm = Bukkit.getPluginManager(); + mcMainVersion = getMinecraftVersion(); boolean configNotFound = false; boolean dataNotFound = false; if (!new File(getDataFolder(), "config.yml").exists()) { @@ -66,7 +70,7 @@ public final class EnderDragon extends JavaPlugin { if(!getConfig().getString("version").equals("1.8.3") ){ sendMessage(Message.configWrongVersion); } - if(!data.getString("version").equals("1.8.1") ){ + if(!data.getString("version").equals("1.8.4") ){ sendMessage(Message.dataWrongVersion); } if(!lang.getString("version").equals("1.8.3") ){ @@ -135,6 +139,23 @@ public final class EnderDragon extends JavaPlugin { } return item; } + 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 boolean isSpecial(Entity e){ + if(mcMainVersion >= 11){ + return e.getScoreboardTags().contains("special"); + } + else{ + String uuid = e.getUniqueId().toString(); + return data.getStringList("special").contains(uuid); + } + } } diff --git a/src/main/java/xanadu/enderdragon/commands/MainCommand.java b/src/main/java/xanadu/enderdragon/commands/MainCommand.java index 9913ab3..41ff121 100644 --- a/src/main/java/xanadu/enderdragon/commands/MainCommand.java +++ b/src/main/java/xanadu/enderdragon/commands/MainCommand.java @@ -77,7 +77,7 @@ public class MainCommand implements CommandExecutor { List datum = data.getStringList("items"); ItemStack item = p.getItemInHand(); datum.add(itemStackToString(item)); - datum.add(String.valueOf(chance)); + datum.add(ChanceStr); data.set("items", datum); try { data.save(dataF); @@ -85,7 +85,7 @@ public class MainCommand implements CommandExecutor { throw new RuntimeException(e); } data = YamlConfiguration.loadConfiguration(dataF); - p.sendMessage(prefix + Message.DropItemAddSucceed.replace("{chance}",""+chance)); + p.sendMessage(prefix + Message.DropItemAddSucceed.replace("{chance}",ChanceStr)); } } @@ -119,18 +119,17 @@ public class MainCommand implements CommandExecutor { int max = datum.size() / 2 ; for(int i=0 ; i lore = meta.getLore(); if(lore != null) { - lore.add("§6("+Message.DropChance+": " + chance + "%)§r"); + lore.add("§6("+Message.DropChance+": " + datum.get(i*2-1) + "%)§r"); meta.setLore(lore); } else{ - meta.setLore(Collections.singletonList("§6("+Message.DropChance+": " + chance + "%)§r")); + meta.setLore(Collections.singletonList("§6("+Message.DropChance+": " + datum.get(i*2-1) + "%)§r")); } item.setItemMeta(meta); } diff --git a/src/main/java/xanadu/enderdragon/events/CreatureHurt.java b/src/main/java/xanadu/enderdragon/events/CreatureHurt.java index 66a31d8..0a8f51b 100644 --- a/src/main/java/xanadu/enderdragon/events/CreatureHurt.java +++ b/src/main/java/xanadu/enderdragon/events/CreatureHurt.java @@ -8,6 +8,7 @@ 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.*; @@ -20,10 +21,17 @@ public class CreatureHurt implements Listener { if(e.getDamager().getType() != EntityType.PLAYER){return;} if(e.getEntity().getType() != EntityType.ENDER_DRAGON){return;} Player p = (Player) e.getDamager(); - double damage = e.getDamage(); + double damage = MyMath.div(e.getFinalDamage(),1,2); MSG = MSG.replaceAll("%damage%", String.valueOf(damage)); - if(DamageVisual == 1){p.sendTitle("",MSG,5,40,5);} + 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){p.spigot().sendMessage(ChatMessageType.ACTION_BAR, TextComponent.fromLegacyText(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 index e6c1e9c..addc4e1 100644 --- a/src/main/java/xanadu/enderdragon/events/DragonAttack.java +++ b/src/main/java/xanadu/enderdragon/events/DragonAttack.java @@ -18,7 +18,7 @@ public class DragonAttack implements Listener { @EventHandler public void OnDragonAttack(EntityDamageByEntityEvent e){ if(e.getDamager().getType() != EntityType.ENDER_DRAGON){return;} - if(!e.getDamager().getScoreboardTags().contains("special")){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"); diff --git a/src/main/java/xanadu/enderdragon/events/DragonDeath.java b/src/main/java/xanadu/enderdragon/events/DragonDeath.java index 02d7984..f6e609c 100644 --- a/src/main/java/xanadu/enderdragon/events/DragonDeath.java +++ b/src/main/java/xanadu/enderdragon/events/DragonDeath.java @@ -43,7 +43,7 @@ public class DragonDeath implements Listener { String InvIsFull = Message.PlayerInvFull; if(KillMsg != null) { if(p != null) { - if ((e.getEntity().getScoreboardTags().contains("special")) || (AllBroadcast)) { + if (isSpecial(e.getEntity()) || AllBroadcast) { Bukkit.broadcastMessage(prefix + KillMsg.replaceAll("%times%", String.valueOf(times)).replaceAll("%player%", p.getDisplayName())); } } @@ -57,13 +57,13 @@ public class DragonDeath implements Listener { String name = names.toString(); if(name.equals("")){name = nobody;} if(name.endsWith(",")){name = name.substring(0,name.length()-1);} - if ((e.getEntity().getScoreboardTags().contains("special")) || (AllBroadcast)) { + if (isSpecial(e.getEntity()) || AllBroadcast) { Bukkit.broadcastMessage(prefix + KillMsg.replaceAll("%times%", String.valueOf(times)).replaceAll("%player%", name)); } } } if(UseCMD) { - if (e.getEntity().getScoreboardTags().contains("special")) { + if (isSpecial(e.getEntity())) { List CMDList = plugin.getConfig().getStringList("command.special-dragon"); for (String command : CMDList) { if (!(p == null && command.contains("%player%"))) { @@ -80,7 +80,7 @@ public class DragonDeath implements Listener { } } } - if(e.getEntity().getScoreboardTags().contains("special")){ + if(isSpecial(e.getEntity())){ e.setDroppedExp(exp); if (EggChance) { BukkitRunnable runnable = new BukkitRunnable() { @@ -117,6 +117,12 @@ public class DragonDeath implements Listener { } } 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 index efa4679..1be9dfb 100644 --- a/src/main/java/xanadu/enderdragon/events/DragonHeal.java +++ b/src/main/java/xanadu/enderdragon/events/DragonHeal.java @@ -5,6 +5,7 @@ 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 { @@ -14,7 +15,7 @@ public class DragonHeal implements Listener { 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(e.getEntity().getScoreboardTags().contains("special")){ + if(isSpecial(e.getEntity())){ e.setAmount(SpecialHeal / 2); } else{ diff --git a/src/main/java/xanadu/enderdragon/events/DragonSpawn.java b/src/main/java/xanadu/enderdragon/events/DragonSpawn.java index f96a576..62cb35f 100644 --- a/src/main/java/xanadu/enderdragon/events/DragonSpawn.java +++ b/src/main/java/xanadu/enderdragon/events/DragonSpawn.java @@ -2,9 +2,6 @@ package xanadu.enderdragon.events; import org.bukkit.Bukkit; import org.bukkit.ChatColor; -import org.bukkit.attribute.Attribute; -import org.bukkit.attribute.AttributeInstance; -import org.bukkit.attribute.AttributeModifier; import org.bukkit.entity.EntityType; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; @@ -12,6 +9,8 @@ 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.*; @@ -19,7 +18,7 @@ import static xanadu.enderdragon.EnderDragon.*; public class DragonSpawn implements Listener { @EventHandler - public void OnDragonSpawn(CreatureSpawnEvent e){ + 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"); @@ -38,21 +37,30 @@ public class DragonSpawn implements Listener { Bukkit.broadcastMessage(prefix + SpawnMsg.replaceAll("%times%", String.valueOf(times))); } if(times % circle == 0 && chance) { - e.getEntity().addScoreboardTag("special"); + 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) { - AttributeInstance MaxHealth = e.getEntity().getAttribute(Attribute.GENERIC_MAX_HEALTH); - assert MaxHealth != null; - MaxHealth.addModifier(new AttributeModifier("最大生命值", health - 200, AttributeModifier.Operation.ADD_NUMBER)); + e.getEntity().setMaxHealth(health); } e.getEntity().setHealth(SpawnHealth); - if (color != null) { + 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"); - team.setColor(ChatColor.valueOf(color)); + 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); } diff --git a/src/main/java/xanadu/enderdragon/tools/MyMath.java b/src/main/java/xanadu/enderdragon/tools/MyMath.java new file mode 100644 index 0000000..67cac05 --- /dev/null +++ b/src/main/java/xanadu/enderdragon/tools/MyMath.java @@ -0,0 +1,12 @@ +package xanadu.enderdragon.tools; + +import java.math.BigDecimal; +import java.math.RoundingMode; + +public class MyMath { + public static double div(double d1,double d2,int len){ + BigDecimal b1 = new BigDecimal(d1); + BigDecimal b2 = new BigDecimal(d2); + return b1.divide(b2,len, RoundingMode.HALF_UP).doubleValue(); + } +} diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 4fdb12e..6c1c444 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -2,6 +2,7 @@ version: 1.8.3 #可选: 'Chinese','English' +#Spigot1.8等远古服务端不支持中文 lang: 'Chinese' #普通末影龙 @@ -80,17 +81,16 @@ special-dragon: y: 70 z: 0 - #特殊龙发光的颜色 + #特殊龙发光的颜色(mc1.8及以下版本不可用) #若要关闭发光功能,设置该项为“disable” - #所有可用颜色如下(不区分大小写) #AQUA-青色,BLACK-黑色,BLUE-蓝色,DARK_AQUA-深青,DARK_BLUE-深蓝,DARK_GRAY-深灰,DARK_GREEN-深绿,DARK_PURPLE-深紫,DARK_RED-深红,GOLD-金色,GRAY-灰色,GREEN-绿色,LIGHT_PURPLE-紫色,RED-红色,WHITE-白色,YELLOW-黄色 glow-color: GOLD #玩家攻击末影龙时伤害显示 #填入0代表不显示 - #填入1代表显示在副标题栏(会有略微视野遮挡) + #填入1代表显示在副标题栏(会有略微视野遮挡)(mc1.8及以下版本不可用) #输入2代表显示在聊天栏(可能会刷屏) - #输入3代表显示在ActionBar(推荐) + #输入3代表显示在ActionBar(推荐)(mc1.9及以下版本不可用) damage-visible: 3 #指令/ed drop gui 打开的页面的标题 diff --git a/src/main/resources/data.yml b/src/main/resources/data.yml index 3be3172..9668456 100644 --- a/src/main/resources/data.yml +++ b/src/main/resources/data.yml @@ -1,10 +1,10 @@ #配置文件版本,请勿修改 -version: 1.8.1 +version: 1.8.4 # 已生成过的末影龙数量 # 如果你安装本插件时,末影龙已被杀死过,请自行修改这个值(请填入整数) # 指令召唤和指令杀死的末影龙不会被计入次数 # 注意:插件开始使用后不需再修改这个值 times: 1 - +special: [] items: [] \ No newline at end of file diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 8b698c5..3e24b9b 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,5 +1,5 @@ name: EnderDragon -version: 1.8.3 +version: 1.8.4 main: xanadu.enderdragon.EnderDragon author: Xanadu13 api-version: 1.13