From efc56e1763fe46c7fd9a2e143e9495c61aead482 Mon Sep 17 00:00:00 2001 From: Auxilor Date: Thu, 20 May 2021 09:02:06 +0100 Subject: [PATCH] Fixed several bugs --- .../ecobosses/bosses/LivingEcoBoss.java | 1 + .../bosses/listeners/AutoSpawnTimer.java | 4 --- .../ecobosses/bosses/util/BossUtils.java | 28 +++++++++++++++++++ .../ecobosses/commands/CommandEbkillall.java | 7 ++++- 4 files changed, 35 insertions(+), 5 deletions(-) diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/LivingEcoBoss.java b/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/LivingEcoBoss.java index 08cbfd1..5d42334 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/LivingEcoBoss.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/LivingEcoBoss.java @@ -94,6 +94,7 @@ public class LivingEcoBoss extends PluginDependent { private void onSpawn() { entity.getPersistentDataContainer().set(this.getPlugin().getNamespacedKeyFactory().create("boss"), PersistentDataType.STRING, boss.getName()); entity.setPersistent(true); + entity.setRemoveWhenFarAway(false); entity.setCustomName(boss.getDisplayName()); entity.setCustomNameVisible(true); diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/listeners/AutoSpawnTimer.java b/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/listeners/AutoSpawnTimer.java index 42a1a54..e72b75a 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/listeners/AutoSpawnTimer.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/listeners/AutoSpawnTimer.java @@ -31,10 +31,6 @@ public class AutoSpawnTimer implements Runnable { continue; } - if (!boss.getLivingBosses().isEmpty()) { - continue; - } - Set worlds = new HashSet<>(); for (UUID uuid : boss.getLivingBosses().keySet()) { diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/util/BossUtils.java b/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/util/BossUtils.java index 020c7fa..d6376fa 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/util/BossUtils.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/util/BossUtils.java @@ -6,8 +6,10 @@ import com.willfp.ecobosses.bosses.EcoBosses; import com.willfp.ecobosses.bosses.util.obj.DamagerProperty; import lombok.experimental.UtilityClass; import org.bukkit.Bukkit; +import org.bukkit.World; import org.bukkit.boss.BossBar; import org.bukkit.boss.KeyedBossBar; +import org.bukkit.entity.Entity; import org.bukkit.entity.LivingEntity; import org.bukkit.persistence.PersistentDataType; import org.jetbrains.annotations.NotNull; @@ -79,6 +81,16 @@ public class BossUtils { * @return The amount of bosses killed. */ public int killAllBosses() { + return killAllBosses(false); + } + + /** + * Kill all bosses. + * + * @param force If all entities should be checked for being bosses. + * @return The amount of bosses killed. + */ + public int killAllBosses(final boolean force) { int amount = 0; for (EcoBoss boss : EcoBosses.values()) { for (UUID uuid : boss.getLivingBosses().keySet()) { @@ -89,6 +101,22 @@ public class BossUtils { } } + if (force) { + for (World world : Bukkit.getWorlds()) { + for (Entity entity : world.getEntities()) { + if (!(entity instanceof LivingEntity)) { + continue; + } + + if (BossUtils.getBoss((LivingEntity) entity) == null) { + continue; + } + + entity.remove(); + } + } + } + List bars = new ArrayList<>(); Bukkit.getBossBars().forEachRemaining(bars::add); for (KeyedBossBar bar : bars) { diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/commands/CommandEbkillall.java b/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/commands/CommandEbkillall.java index 6ca907e..6154d0f 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/commands/CommandEbkillall.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/commands/CommandEbkillall.java @@ -21,6 +21,11 @@ public class CommandEbkillall extends AbstractCommand { @Override public void onExecute(@NotNull final CommandSender sender, @NotNull final List args) { - sender.sendMessage(this.getPlugin().getLangYml().getMessage("killall").replace("%amount%", String.valueOf(BossUtils.killAllBosses()))); + boolean force = false; + if (args.size() == 1) { + force = args.get(0).equalsIgnoreCase("force"); + } + + sender.sendMessage(this.getPlugin().getLangYml().getMessage("killall").replace("%amount%", String.valueOf(BossUtils.killAllBosses(force)))); } }