From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Samsuik Date: Fri, 13 Sep 2024 17:22:51 +0100 Subject: [PATCH] Optimise entity scheduler ticking diff --git a/src/main/java/io/papermc/paper/threadedregions/EntityScheduler.java b/src/main/java/io/papermc/paper/threadedregions/EntityScheduler.java index c03608fec96b51e1867f43d8f42e5aefb1520e46..543251fc4973157dbb239729e656a8820fe88654 100644 --- a/src/main/java/io/papermc/paper/threadedregions/EntityScheduler.java +++ b/src/main/java/io/papermc/paper/threadedregions/EntityScheduler.java @@ -50,6 +50,22 @@ public final class EntityScheduler { this.entity = Validate.notNull(entity); } + // Sakura start - optimise entity scheduler ticking + public boolean hasTask() { + return !this.currentlyExecuting.isEmpty() || !this.oneTimeDelayed.isEmpty(); + } + + private void newScheduledTask() { + net.minecraft.server.MinecraftServer.getServer().scheduleOnMain(() -> { + Entity handle = this.entity.getHandleRaw(); + net.minecraft.server.level.ServerLevel level = (net.minecraft.server.level.ServerLevel) handle.level(); + ca.spottedleaf.moonrise.patches.chunk_system.level.entity.server.ServerEntityLookup entityLookup = (ca.spottedleaf.moonrise.patches.chunk_system.level.entity.server.ServerEntityLookup) level.moonrise$getEntityLookup(); + + entityLookup.entityStartScheduled(handle); + }); + } + // Sakura end - optimise entity scheduler ticking + /** * Retires the scheduler, preventing new tasks from being scheduled and invoking the retired callback * on all currently scheduled tasks. @@ -128,6 +144,7 @@ public final class EntityScheduler { return new ArrayList<>(); }).add(task); } + this.newScheduledTask(); // Sakura - optimise entity scheduler ticking return true; }