diff --git a/pom.xml b/pom.xml index 4f2f053..9137ee7 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ pers.xanadu EnderDragon - 2.5.6 + 2.5.7 jar EnderDragon @@ -188,7 +188,7 @@ me.clip placeholderapi - 2.11.2 + 2.11.6 provided diff --git a/src/main/java/pers/xanadu/enderdragon/listener/DragonDeathListener.java b/src/main/java/pers/xanadu/enderdragon/listener/DragonDeathListener.java index f94b7db..052e661 100644 --- a/src/main/java/pers/xanadu/enderdragon/listener/DragonDeathListener.java +++ b/src/main/java/pers/xanadu/enderdragon/listener/DragonDeathListener.java @@ -99,16 +99,12 @@ public class DragonDeathListener implements Listener { private static void handleSpecialLoot(final MyDragon myDragon, final EnderDragon dragon){ List> list = DamageManager.getDamageList(dragon.getUniqueId()); list.sort(DamageManager::sortByDamage); - Set online_players = new HashSet<>(); - Bukkit.getOnlinePlayers().forEach(player -> online_players.add(player.getName())); List participants = myDragon.lootMap.get(0); boolean tag = participants != null; int size = list.size(); for(int i=0;i pair = list.get(i); String name = pair.first; - //玩家不在线 - if(!online_players.contains(name)) continue; String damage = String.format("%.2f",pair.second); //所有参与者 if(tag) participants.forEach(loot -> loot.accept(name,damage)); diff --git a/src/main/java/pers/xanadu/enderdragon/manager/DragonManager.java b/src/main/java/pers/xanadu/enderdragon/manager/DragonManager.java index 6d17204..77954d8 100644 --- a/src/main/java/pers/xanadu/enderdragon/manager/DragonManager.java +++ b/src/main/java/pers/xanadu/enderdragon/manager/DragonManager.java @@ -281,7 +281,8 @@ public class DragonManager { SpecialLoot specialLoot; if("command".equals(type)){ List commands = loot.getStringList("data"); - specialLoot = (player, damage) -> handleCommandLoot(commands,player,damage); + boolean executeOffline = loot.getBoolean("execute-if-offline"); + specialLoot = (player, damage) -> handleCommandLoot(commands,player,damage,executeOffline); } else if("exp".equals(type)){ int amount = loot.getInt("data"+f.options().pathSeparator()+"amount"); @@ -325,8 +326,13 @@ public class DragonManager { dragon_names.add(myDragon.unique_name); sum += edge; } - private static void handleCommandLoot(List list, String name, String damage){ + private static void handleCommandLoot(List list, String name, String damage, boolean executeOffline){ if(list == null) return; + + Player player = Bukkit.getPlayer(name); + if (player == null && !executeOffline) + return; + for (String cmd : list) { if(cmd.equals("")) continue; plugin.getServer().dispatchCommand(plugin.getServer().getConsoleSender(),cmd.replaceAll("%player%",name).replaceAll("%damage%",damage));