Add option for allowing command loot to be executed for offline players

This commit is contained in:
Lilac
2025-06-03 16:28:34 +01:00
parent 4f41401964
commit 330ac71a2e
3 changed files with 10 additions and 8 deletions
+2 -2
View File
@@ -6,7 +6,7 @@
<groupId>pers.xanadu</groupId> <groupId>pers.xanadu</groupId>
<artifactId>EnderDragon</artifactId> <artifactId>EnderDragon</artifactId>
<version>2.5.6</version> <version>2.5.7</version>
<packaging>jar</packaging> <packaging>jar</packaging>
<name>EnderDragon</name> <name>EnderDragon</name>
@@ -188,7 +188,7 @@
<dependency> <dependency>
<groupId>me.clip</groupId> <groupId>me.clip</groupId>
<artifactId>placeholderapi</artifactId> <artifactId>placeholderapi</artifactId>
<version>2.11.2</version> <version>2.11.6</version>
<scope>provided</scope> <scope>provided</scope>
<!-- <systemPath>${basedir}/lib/PlaceholderAPI-2.11.2.jar</systemPath>--> <!-- <systemPath>${basedir}/lib/PlaceholderAPI-2.11.2.jar</systemPath>-->
</dependency> </dependency>
@@ -99,16 +99,12 @@ public class DragonDeathListener implements Listener {
private static void handleSpecialLoot(final MyDragon myDragon, final EnderDragon dragon){ private static void handleSpecialLoot(final MyDragon myDragon, final EnderDragon dragon){
List<Pair<String,Double>> list = DamageManager.getDamageList(dragon.getUniqueId()); List<Pair<String,Double>> list = DamageManager.getDamageList(dragon.getUniqueId());
list.sort(DamageManager::sortByDamage); list.sort(DamageManager::sortByDamage);
Set<String> online_players = new HashSet<>();
Bukkit.getOnlinePlayers().forEach(player -> online_players.add(player.getName()));
List<SpecialLoot> participants = myDragon.lootMap.get(0); List<SpecialLoot> participants = myDragon.lootMap.get(0);
boolean tag = participants != null; boolean tag = participants != null;
int size = list.size(); int size = list.size();
for(int i=0;i<size;i++){ for(int i=0;i<size;i++){
Pair<String,Double> pair = list.get(i); Pair<String,Double> pair = list.get(i);
String name = pair.first; String name = pair.first;
//玩家不在线
if(!online_players.contains(name)) continue;
String damage = String.format("%.2f",pair.second); String damage = String.format("%.2f",pair.second);
//所有参与者 //所有参与者
if(tag) participants.forEach(loot -> loot.accept(name,damage)); if(tag) participants.forEach(loot -> loot.accept(name,damage));
@@ -281,7 +281,8 @@ public class DragonManager {
SpecialLoot specialLoot; SpecialLoot specialLoot;
if("command".equals(type)){ if("command".equals(type)){
List<String> commands = loot.getStringList("data"); List<String> 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)){ else if("exp".equals(type)){
int amount = loot.getInt("data"+f.options().pathSeparator()+"amount"); int amount = loot.getInt("data"+f.options().pathSeparator()+"amount");
@@ -325,8 +326,13 @@ public class DragonManager {
dragon_names.add(myDragon.unique_name); dragon_names.add(myDragon.unique_name);
sum += edge; sum += edge;
} }
private static void handleCommandLoot(List<String> list, String name, String damage){ private static void handleCommandLoot(List<String> list, String name, String damage, boolean executeOffline){
if(list == null) return; if(list == null) return;
Player player = Bukkit.getPlayer(name);
if (player == null && !executeOffline)
return;
for (String cmd : list) { for (String cmd : list) {
if(cmd.equals("")) continue; if(cmd.equals("")) continue;
plugin.getServer().dispatchCommand(plugin.getServer().getConsoleSender(),cmd.replaceAll("%player%",name).replaceAll("%damage%",damage)); plugin.getServer().dispatchCommand(plugin.getServer().getConsoleSender(),cmd.replaceAll("%player%",name).replaceAll("%damage%",damage));