Remove entities in /de on the entity scheduler

This commit is contained in:
Allink 2023-03-31 03:41:11 +01:00
parent beb00d1494
commit a14f8b07de
No known key found for this signature in database
5 changed files with 26 additions and 7 deletions

View file

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

View file

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

View file

@ -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<ScheduledTask> {
private final Runnable runnable;

View file

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

View file

@ -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++;