diff --git a/common/src/main/java/pw/kaboom/extras/platform/IScheduler.java b/common/src/main/java/pw/kaboom/extras/platform/IScheduler.java index e5ced8e..3b05506 100644 --- a/common/src/main/java/pw/kaboom/extras/platform/IScheduler.java +++ b/common/src/main/java/pw/kaboom/extras/platform/IScheduler.java @@ -1,6 +1,7 @@ package pw.kaboom.extras.platform; import org.bukkit.Chunk; +import org.bukkit.entity.Entity; import org.bukkit.plugin.Plugin; import java.util.concurrent.TimeUnit; @@ -14,4 +15,5 @@ public interface IScheduler { void runAsync(final Plugin plugin, final Runnable runnable); void executeOnChunk(final Plugin plugin, final Chunk chunk, final Runnable runnable); void executeOnGlobalRegion(final Plugin plugin, final Runnable runnable); + void executeOnEntity(final Plugin plugin, final Entity entity, final Runnable runnable); } diff --git a/common/src/main/java/pw/kaboom/extras/platform/PlatformScheduler.java b/common/src/main/java/pw/kaboom/extras/platform/PlatformScheduler.java index 1baf0cf..d6545ae 100644 --- a/common/src/main/java/pw/kaboom/extras/platform/PlatformScheduler.java +++ b/common/src/main/java/pw/kaboom/extras/platform/PlatformScheduler.java @@ -1,6 +1,7 @@ package pw.kaboom.extras.platform; import org.bukkit.Chunk; +import org.bukkit.entity.Entity; import org.bukkit.plugin.Plugin; import java.util.concurrent.TimeUnit; @@ -43,4 +44,8 @@ public final class PlatformScheduler { public static void executeOnGlobalRegion(final Plugin plugin, final Runnable runnable) { currentScheduler.executeOnGlobalRegion(plugin, runnable); } + + public static void executeOnEntity(final Plugin plugin, final Entity entity, final Runnable runnable) { + currentScheduler.executeOnEntity(plugin, entity, runnable); + } } diff --git a/folia-platform/src/main/java/pw/kaboom/extras/platform/folia/FoliaScheduler.java b/folia-platform/src/main/java/pw/kaboom/extras/platform/folia/FoliaScheduler.java index aec7870..102606c 100644 --- a/folia-platform/src/main/java/pw/kaboom/extras/platform/folia/FoliaScheduler.java +++ b/folia-platform/src/main/java/pw/kaboom/extras/platform/folia/FoliaScheduler.java @@ -7,6 +7,7 @@ import io.papermc.paper.threadedregions.scheduler.ScheduledTask; import org.bukkit.Bukkit; import org.bukkit.Chunk; import org.bukkit.World; +import org.bukkit.entity.Entity; import org.bukkit.plugin.Plugin; import pw.kaboom.extras.platform.IScheduler; @@ -56,6 +57,11 @@ public final class FoliaScheduler implements IScheduler { GLOBAL_REGION_SCHEDULER.execute(plugin, runnable); } + @Override + public void executeOnEntity(final Plugin plugin, final Entity entity, final Runnable runnable) { + entity.getScheduler().run(plugin, FoliaTask.from(runnable), () -> {}); + } + private static final class FoliaTask implements Consumer { private final Runnable runnable; diff --git a/paper-platform/src/main/java/pw/kaboom/extras/platform/paper/PaperScheduler.java b/paper-platform/src/main/java/pw/kaboom/extras/platform/paper/PaperScheduler.java index f82668d..5c1da8d 100644 --- a/paper-platform/src/main/java/pw/kaboom/extras/platform/paper/PaperScheduler.java +++ b/paper-platform/src/main/java/pw/kaboom/extras/platform/paper/PaperScheduler.java @@ -2,6 +2,7 @@ package pw.kaboom.extras.platform.paper; import org.bukkit.Bukkit; import org.bukkit.Chunk; +import org.bukkit.entity.Entity; import org.bukkit.plugin.Plugin; import org.bukkit.scheduler.BukkitScheduler; import pw.kaboom.extras.platform.IScheduler; @@ -50,4 +51,9 @@ public final class PaperScheduler implements IScheduler { public void executeOnGlobalRegion(final Plugin plugin, final Runnable runnable) { BUKKIT_SCHEDULER.runTask(plugin, runnable); } + + @Override + public void executeOnEntity(final Plugin plugin, final Entity entity, final Runnable runnable) { + BUKKIT_SCHEDULER.runTask(plugin, runnable); + } } diff --git a/src/main/java/pw/kaboom/extras/commands/CommandDestroyEntities.java b/src/main/java/pw/kaboom/extras/commands/CommandDestroyEntities.java index f9b1618..980655a 100644 --- a/src/main/java/pw/kaboom/extras/commands/CommandDestroyEntities.java +++ b/src/main/java/pw/kaboom/extras/commands/CommandDestroyEntities.java @@ -8,6 +8,9 @@ import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; +import org.bukkit.plugin.java.JavaPlugin; +import pw.kaboom.extras.Main; +import pw.kaboom.extras.platform.PlatformScheduler; import javax.annotation.Nonnull; @@ -20,16 +23,13 @@ public final class CommandDestroyEntities implements CommandExecutor { int entityCount = 0; int worldCount = 0; + final Main plugin = JavaPlugin.getPlugin(Main.class); + for (World world : Bukkit.getWorlds()) { for (Entity entity : world.getEntities()) { if (!EntityType.PLAYER.equals(entity.getType())) { - try { - entity.remove(); - entityCount++; - } catch (Exception ignored) { - // Broken entity - continue; - } + PlatformScheduler.executeOnEntity(plugin, entity, entity::remove); + entityCount++; } } worldCount++;