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));