diff --git a/gradle.properties b/gradle.properties index 3d52f1c..9084b04 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ group=net.sparklypower.sparklypaper version=1.21-R0.1-SNAPSHOT mcVersion=1.21 -paperRef=d23825aa56dbe22140b4191e41ae4cf8f7188ebd +paperRef=c0268ca86eeb5ca767e5e2860aa2d936e5e7fc4f org.gradle.caching=true org.gradle.parallel=true diff --git a/patches/server/0009-Skip-EntityScheduler-s-executeTick-checks-if-there-i.patch b/patches/server/0009-Skip-EntityScheduler-s-executeTick-checks-if-there-i.patch index 27bb644..d5a6539 100644 --- a/patches/server/0009-Skip-EntityScheduler-s-executeTick-checks-if-there-i.patch +++ b/patches/server/0009-Skip-EntityScheduler-s-executeTick-checks-if-there-i.patch @@ -73,7 +73,7 @@ index 62484ebf4550b05182f693a3180bbac5d5fd906d..67800e426445060a8343e27a7452b8d7 throw new IllegalStateException("Ticking retired scheduler"); } diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index eb0a740f884fde081cabaec5a61c9b642a85a1b4..30dfcd4f9379754a3c104e689efec70d22be0e7e 100644 +index b9b8a46f1de9867cc2161ac71c2993ab422cdfbf..46cd3fba13d1590ebb0b8bb7a55dea3bc1548ae8 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -322,6 +322,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop { - for (final Entity entity : level.getEntities().getAll()) { + for (final Entity entity : level.moonrise$getEntityLookup().getAllCopy()) { // Paper - rewrite chunk system if (entity.isRemoved()) { @@ -1666,6 +1679,8 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop tickersInLevel; public boolean loaded; -@@ -1035,7 +1042,7 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p +@@ -1039,7 +1046,7 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p } private TickingBlockEntity createTicker(T blockEntity, BlockEntityTicker blockEntityTicker) { @@ -86,7 +86,7 @@ index 435f5f0a17901f743bd565b28f9feb5d4058c819..3e03946202cc6aca535322446c6e5e9a } @FunctionalInterface -@@ -1086,6 +1093,13 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p +@@ -1090,6 +1097,13 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p public String toString() { return String.valueOf(this.ticker) + " "; } @@ -100,7 +100,7 @@ index 435f5f0a17901f743bd565b28f9feb5d4058c819..3e03946202cc6aca535322446c6e5e9a } private class BoundTickingBlockEntity implements TickingBlockEntity { -@@ -1093,10 +1107,12 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p +@@ -1097,10 +1111,12 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p private final T blockEntity; private final BlockEntityTicker ticker; private boolean loggedInvalidBlockState; @@ -114,7 +114,7 @@ index 435f5f0a17901f743bd565b28f9feb5d4058c819..3e03946202cc6aca535322446c6e5e9a } @Override -@@ -1164,5 +1180,12 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p +@@ -1168,5 +1184,12 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p return "Level ticker for " + s + "@" + String.valueOf(this.getPos()); } diff --git a/patches/server/0021-Parallel-world-ticking.patch b/patches/server/0021-Parallel-world-ticking.patch index 94d6bf3..191dda6 100644 --- a/patches/server/0021-Parallel-world-ticking.patch +++ b/patches/server/0021-Parallel-world-ticking.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Parallel world ticking "mom can we have folia?" "we already have folia at home" folia at home: diff --git a/src/main/java/ca/spottedleaf/moonrise/patches/chunk_system/scheduling/ChunkHolderManager.java b/src/main/java/ca/spottedleaf/moonrise/patches/chunk_system/scheduling/ChunkHolderManager.java -index 5576924839c9c5a42a8c430c30cb5a6275ae6f23..649126713e597224f9850488e15b20e8c3e4b27e 100644 +index ad339978cd2e8d78b0566c2daf0495a418d127c7..b01c325f43a7f8989dea279e99fd87caf17969bb 100644 --- a/src/main/java/ca/spottedleaf/moonrise/patches/chunk_system/scheduling/ChunkHolderManager.java +++ b/src/main/java/ca/spottedleaf/moonrise/patches/chunk_system/scheduling/ChunkHolderManager.java @@ -1007,7 +1007,7 @@ public final class ChunkHolderManager { @@ -27,15 +27,7 @@ index 5576924839c9c5a42a8c430c30cb5a6275ae6f23..649126713e597224f9850488e15b20e8 if (BLOCK_TICKET_UPDATES.get() == Boolean.TRUE) { throw new IllegalStateException("Cannot unload chunks recursively"); -@@ -1307,14 +1307,14 @@ public final class ChunkHolderManager { - } - - private boolean processTicketUpdates(final boolean processFullUpdates, List scheduledTasks) { -- io.papermc.paper.util.TickThread.ensureTickThread("Cannot process ticket levels off-main"); -+ io.papermc.paper.util.TickThread.ensureTickThread(world, "Cannot process ticket levels off-main"); // SparklyPaper - parallel world ticking - if (BLOCK_TICKET_UPDATES.get() == Boolean.TRUE) { - throw new IllegalStateException("Cannot update ticket level while unloading chunks or updating entity manager"); - } +@@ -1313,7 +1313,7 @@ public final class ChunkHolderManager { List changedFullStatus = null; @@ -45,10 +37,10 @@ index 5576924839c9c5a42a8c430c30cb5a6275ae6f23..649126713e597224f9850488e15b20e8 boolean ret = false; final boolean canProcessFullUpdates = processFullUpdates & isTickThread; diff --git a/src/main/java/ca/spottedleaf/moonrise/patches/chunk_system/scheduling/ChunkTaskScheduler.java b/src/main/java/ca/spottedleaf/moonrise/patches/chunk_system/scheduling/ChunkTaskScheduler.java -index bfb53d1f2f96539fbe62946252faa506188560a1..f95e79c8a72d6e4e137cfd188ce121bc1ea899ee 100644 +index faf76a5c2f9fa2eea38d2c7f2ab1c43873254e72..66f61697b96d5b250a182b55f7870493800b95a1 100644 --- a/src/main/java/ca/spottedleaf/moonrise/patches/chunk_system/scheduling/ChunkTaskScheduler.java +++ b/src/main/java/ca/spottedleaf/moonrise/patches/chunk_system/scheduling/ChunkTaskScheduler.java -@@ -365,7 +365,7 @@ public final class ChunkTaskScheduler { +@@ -372,7 +372,7 @@ public final class ChunkTaskScheduler { public void scheduleTickingState(final int chunkX, final int chunkZ, final FullChunkStatus toStatus, final boolean addTicket, final PrioritisedExecutor.Priority priority, final Consumer onComplete) { @@ -57,7 +49,7 @@ index bfb53d1f2f96539fbe62946252faa506188560a1..f95e79c8a72d6e4e137cfd188ce121bc this.scheduleChunkTask(chunkX, chunkZ, () -> { ChunkTaskScheduler.this.scheduleTickingState(chunkX, chunkZ, toStatus, addTicket, priority, onComplete); }, priority); -@@ -552,7 +552,7 @@ public final class ChunkTaskScheduler { +@@ -563,7 +563,7 @@ public final class ChunkTaskScheduler { public void scheduleChunkLoad(final int chunkX, final int chunkZ, final ChunkStatus toStatus, final boolean addTicket, final PrioritisedExecutor.Priority priority, final Consumer onComplete) { @@ -549,7 +541,7 @@ index cb308808906a8cdb127df8284e106e00553473ca..323d41e2bed5e83a26dfe4c88dfce7ed } diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 086ff182abaf0a3df4d20f98c6e5f9ddce26dc83..37fe8b0d66aa99d74fe70b00a1fff2c209d9ebeb 100644 +index cb93aed058c050107f948e95396975d50d53bfb1..7da56241422fab1ff3fe53af4e1b9a943e0cc85c 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -324,6 +324,9 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop> 4, z >> 4); // Paper // Transient load for this tick return this.world.getChunk(x >> 4, z >> 4).getHeight(CraftHeightMap.toNMS(heightMap), x, z); -@@ -1011,6 +1017,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { +@@ -1012,6 +1018,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { @Override public void setBiome(int x, int y, int z, Holder bb) { BlockPos pos = new BlockPos(x, 0, z); @@ -1457,7 +1449,7 @@ index 95de729f0a02a202632ea85a4061607d632588e9..3f3721596c09a6d3226ed6e3abeb645b if (this.world.hasChunkAt(pos)) { net.minecraft.world.level.chunk.LevelChunk chunk = this.world.getChunkAt(pos); -@@ -2280,6 +2287,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { +@@ -2281,6 +2288,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { @Override public void sendGameEvent(Entity sourceEntity, org.bukkit.GameEvent gameEvent, Vector position) { @@ -1465,7 +1457,7 @@ index 95de729f0a02a202632ea85a4061607d632588e9..3f3721596c09a6d3226ed6e3abeb645b getHandle().gameEvent(sourceEntity != null ? ((CraftEntity) sourceEntity).getHandle(): null, net.minecraft.core.registries.BuiltInRegistries.GAME_EVENT.getHolder(org.bukkit.craftbukkit.util.CraftNamespacedKey.toMinecraft(gameEvent.getKey())).orElseThrow(), org.bukkit.craftbukkit.util.CraftVector.toBlockPos(position)); } // Paper end -@@ -2408,7 +2416,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { +@@ -2409,7 +2417,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { // Paper start public java.util.concurrent.CompletableFuture getChunkAtAsync(int x, int z, boolean gen, boolean urgent) { warnUnsafeChunk("getting a faraway chunk async", x, z); // Paper