diff --git a/gradle.properties b/gradle.properties index da351a5c..8322b0cb 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,6 +4,6 @@ version=1.20.4-R0.1-SNAPSHOT mcVersion=1.20.4 packageVersion=1_20_R3 org.gradle.jvmargs=-Xmx2G -paperRef=76da4bc683a51057eadfabc6e6694486a20a0d20 +paperRef=1ed50dade82437bf45fe74833d7e6ac2961842a2 preVersion=false updatingMinecraft=false \ No newline at end of file diff --git a/patches/api/0009-Force-peaceful-mode-switch.patch b/patches/api/0009-Force-peaceful-mode-switch.patch index b1521c1e..5774f294 100644 --- a/patches/api/0009-Force-peaceful-mode-switch.patch +++ b/patches/api/0009-Force-peaceful-mode-switch.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Force peaceful mode switch diff --git a/src/main/java/org/bukkit/World.java b/src/main/java/org/bukkit/World.java -index bf4b94ea2577e9d7e344385209fc0644a4e6bfbb..80243685dfaa7860e8bc8197626b8dbe5318f7a8 100644 +index efa2043e044b0e461780e808c347d6ec00f6da0a..359e96f0fc9b9a909351478a0f30e441004c9b3e 100644 --- a/src/main/java/org/bukkit/World.java +++ b/src/main/java/org/bukkit/World.java -@@ -4236,6 +4236,12 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient +@@ -4240,6 +4240,12 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient void setSendViewDistance(int viewDistance); // Paper end - view distance api diff --git a/patches/server/0001-Build-changes.patch b/patches/server/0001-Build-changes.patch index d9c2789b..47a634da 100644 --- a/patches/server/0001-Build-changes.patch +++ b/patches/server/0001-Build-changes.patch @@ -153,15 +153,15 @@ index 4b002e8b75d117b726b0de274a76d3596fce015b..9ce4d3d96d2d5fbde1f0af599209c6c5 } } diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 559e159a0cfdefb5a0d69224409d91c4ad67371a..29a3ec27139720c293e7455c0a17a8c5cef0f421 100644 +index 90ae7e8c81f6a9ede8aeaeec3bf784023522cefc..b6058a9a51f0be9cf36e3226023e6b2f61c7e82b 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1851,7 +1851,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop // Spigot - Spigot > // CraftBukkit - cb > vanilla! -+ return top.leavesmc.leaves.LeavesConfig.serverModName; // Leaves - Leaves > //Paper - Paper > // Spigot - Spigot > // CraftBukkit - cb > vanilla! +- return "Paper"; // Paper ++ return top.leavesmc.leaves.LeavesConfig.serverModName; // Leaves - Leaves > //Paper } public SystemReport fillSystemReport(SystemReport details) { @@ -183,7 +183,7 @@ index 6de6dad36203479677a29ad61e21bc369d4e5513..b164b09c90b607262938f3c2552d6b57 this.setFlightAllowed(dedicatedserverproperties.allowFlight); this.setMotd(dedicatedserverproperties.motd); diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 28b02fee73a3ab604f6921800a7ede59e2e6f414..79ea938ffedc1ac24e877bfccba876ba9cfa79b3 100644 +index b83c2f1e0ea117eecda94cb51b0ea5bba4d7ab5e..b0b66b9bf0a66c69967b792d0136c39d4036c191 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -264,7 +264,7 @@ import javax.annotation.Nullable; // Paper @@ -196,7 +196,7 @@ index 28b02fee73a3ab604f6921800a7ede59e2e6f414..79ea938ffedc1ac24e877bfccba876ba private final String bukkitVersion = Versioning.getBukkitVersion(); private final Logger logger = Logger.getLogger("Minecraft"); diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java -index 6542155faa881d06e5db6c8f42823842e787b904..7a6f62787411a1e160576e7a7da4122b4f0ef5b6 100644 +index ce341f42b3a5e17fb6d1f7de8057e73137ae2a6e..3825ba1695ea618fa7470281be5392a847d2dfd8 100644 --- a/src/main/java/org/bukkit/craftbukkit/Main.java +++ b/src/main/java/org/bukkit/craftbukkit/Main.java @@ -301,7 +301,7 @@ public class Main { @@ -222,7 +222,7 @@ index 774556a62eb240da42e84db4502e2ed43495be17..ca166161ef919c559de9cc02bdf435cb if (stream != null) { diff --git a/src/main/java/org/spigotmc/WatchdogThread.java b/src/main/java/org/spigotmc/WatchdogThread.java -index 40dcdf6885e99b26283a9ea2bd4d4bf6ec358e71..5b00c4a50372eda1630f4bae6ef41e242056ac94 100644 +index 9e638f72f180ff5ef63ec3dd6cf548c53f7bd4a5..9bd93cae47ed209b39fe90f9c36e55964e24967e 100644 --- a/src/main/java/org/spigotmc/WatchdogThread.java +++ b/src/main/java/org/spigotmc/WatchdogThread.java @@ -155,14 +155,14 @@ public final class WatchdogThread extends io.papermc.paper.util.TickThread // Pa @@ -243,7 +243,7 @@ index 40dcdf6885e99b26283a9ea2bd4d4bf6ec358e71..5b00c4a50372eda1630f4bae6ef41e24 // if ( net.minecraft.world.level.Level.lastPhysicsProblem != null ) { -@@ -185,12 +185,12 @@ public final class WatchdogThread extends io.papermc.paper.util.TickThread // Pa +@@ -184,12 +184,12 @@ public final class WatchdogThread extends io.papermc.paper.util.TickThread // Pa // Paper end } else { @@ -255,10 +255,10 @@ index 40dcdf6885e99b26283a9ea2bd4d4bf6ec358e71..5b00c4a50372eda1630f4bae6ef41e24 log.log( Level.SEVERE, "------------------------------" ); - log.log( Level.SEVERE, "Server thread dump (Look for plugins here before reporting to Paper!):" ); // Paper + log.log( Level.SEVERE, "Server thread dump (Look for plugins here before reporting to Leaves!):" ); // Paper // Leaevs - io.papermc.paper.chunk.system.scheduling.ChunkTaskScheduler.dumpAllChunkLoadInfo(isLongTimeout); // Paper // Paper - rewrite chunk system + io.papermc.paper.chunk.system.scheduling.ChunkTaskScheduler.dumpAllChunkLoadInfo(isLongTimeout); // Paper - rewrite chunk system this.dumpTickingInfo(); // Paper - log detailed tick information WatchdogThread.dumpThread( ManagementFactory.getThreadMXBean().getThreadInfo( MinecraftServer.getServer().serverThread.getId(), Integer.MAX_VALUE ), log ); -@@ -206,7 +206,7 @@ public final class WatchdogThread extends io.papermc.paper.util.TickThread // Pa +@@ -205,7 +205,7 @@ public final class WatchdogThread extends io.papermc.paper.util.TickThread // Pa WatchdogThread.dumpThread( thread, log ); } } else { diff --git a/patches/server/0002-Delete-Timings.patch b/patches/server/0002-Delete-Timings.patch index 28bec39e..1ca9b203 100644 --- a/patches/server/0002-Delete-Timings.patch +++ b/patches/server/0002-Delete-Timings.patch @@ -191,11 +191,10 @@ index 4b467f1af93452d13829f756d55dee18b8889d40..e69de29bb2d1d6434b8b29ae775ad8c2 - } -} diff --git a/src/main/java/co/aikar/timings/TimingsExport.java b/src/main/java/co/aikar/timings/TimingsExport.java -deleted file mode 100644 -index a2f71a6d1a9e98133dff6cd0f625da9435a8af14..0000000000000000000000000000000000000000 +index 7620c72a4c243cbeea245203ce03a97cbfa7d922..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644 --- a/src/main/java/co/aikar/timings/TimingsExport.java -+++ /dev/null -@@ -1,390 +0,0 @@ ++++ b/src/main/java/co/aikar/timings/TimingsExport.java +@@ -1,388 +0,0 @@ -/* - * This file is licensed under the MIT License (MIT). - * @@ -361,11 +360,9 @@ index a2f71a6d1a9e98133dff6cd0f625da9435a8af14..00000000000000000000000000000000 - pair("gamerules", toObjectMapper(world.getWorld().getGameRules(), rule -> { - return pair(rule, world.getWorld().getGameRuleValue(rule)); - })), -- // Paper start - replace chunk loader system - pair("ticking-distance", world.getWorld().getSimulationDistance()), - pair("no-ticking-distance", world.getWorld().getViewDistance()), - pair("sending-distance", world.getWorld().getSendViewDistance()) -- // Paper end - replace chunk loader system - )); - })); - @@ -859,7 +856,7 @@ index 3e2d5dcd62775b6ed7c0ce0ba51a71b635b1d644..d0a487f0d563181818c5670749e8dd3a } catch (Exception exception) { label25: diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 29a3ec27139720c293e7455c0a17a8c5cef0f421..a09aef16a58bf713ec670ad23d44255943016743 100644 +index b6058a9a51f0be9cf36e3226023e6b2f61c7e82b..93412c3eb947afb1ad6ee8dba9864b2d310e0624 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -3,9 +3,6 @@ package net.minecraft.server; @@ -889,7 +886,7 @@ index 29a3ec27139720c293e7455c0a17a8c5cef0f421..a09aef16a58bf713ec670ad23d442559 // CraftBukkit start if (this.server != null) { this.server.disablePlugins(); -@@ -1392,34 +1386,29 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop { entityplayer.connection.suspendFlushing(); }); @@ -990,7 +987,7 @@ index 29a3ec27139720c293e7455c0a17a8c5cef0f421..a09aef16a58bf713ec670ad23d442559 // Paper start - Folia scheduler API ((io.papermc.paper.threadedregions.scheduler.FoliaGlobalRegionScheduler) Bukkit.getGlobalRegionScheduler()).tick(); getAllLevels().forEach(level -> { -@@ -1647,21 +1630,16 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop list = Lists.newArrayList(); List list1 = this.level.players(); ObjectIterator objectiterator = this.entityMap.values().iterator(); @@ -1252,7 +1249,7 @@ index 5637dcf1f6c76df33988c3279171aafbc1868a82..5c94fb3f0d586ef1b8554549491f3eed ChunkMap.TrackedEntity playerchunkmap_entitytracker; -@@ -1204,17 +1175,14 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider +@@ -1198,17 +1169,14 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider playerchunkmap_entitytracker.serverEntity.sendChanges(); } } @@ -1271,21 +1268,21 @@ index 5637dcf1f6c76df33988c3279171aafbc1868a82..5c94fb3f0d586ef1b8554549491f3eed } diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java -index 77a2458b8acb21c64676934cd8d6b05ef6351c10..cb755283ef6bf8812e2c2ad8b546627a334b75a2 100644 +index 366c0c9b45a819f7f94ebe3e49b8ab7f9edf9ce7..2a19a45e9c7ac4646ce89c566b5fec21281c45b9 100644 --- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java +++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java -@@ -293,10 +293,8 @@ public class ServerChunkCache extends ChunkSource { +@@ -278,10 +278,8 @@ public class ServerChunkCache extends ChunkSource { + if (!completablefuture.isDone()) { // Paper io.papermc.paper.chunk.system.scheduling.ChunkTaskScheduler.pushChunkWait(this.level, x1, z1); // Paper - rewrite chunk system - // Paper end - com.destroystokyo.paper.io.SyncLoadFinder.logSyncLoad(this.level, x1, z1); // Paper - Add debug for sync chunk loads + com.destroystokyo.paper.io.SyncLoadFinder.logSyncLoad(this.level, x, z); // Paper - Add debug for sync chunk loads - this.level.timings.syncChunkLoad.startTiming(); // Paper chunkproviderserver_b.managedBlock(completablefuture::isDone); - io.papermc.paper.chunk.system.scheduling.ChunkTaskScheduler.popChunkWait(); // Paper - async chunk debug // Paper - rewrite chunk system + io.papermc.paper.chunk.system.scheduling.ChunkTaskScheduler.popChunkWait(); // Paper - rewrite chunk system - this.level.timings.syncChunkLoad.stopTiming(); // Paper } // Paper ichunkaccess = (ChunkAccess) ((Either) completablefuture.join()).map((ichunkaccess1) -> { return ichunkaccess1; -@@ -445,17 +443,13 @@ public class ServerChunkCache extends ChunkSource { +@@ -430,17 +428,13 @@ public class ServerChunkCache extends ChunkSource { public void save(boolean flush) { this.runDistanceManagerUpdates(); @@ -1304,7 +1301,7 @@ index 77a2458b8acb21c64676934cd8d6b05ef6351c10..cb755283ef6bf8812e2c2ad8b546627a } // Paper end - Incremental chunk and player saving -@@ -492,23 +486,17 @@ public class ServerChunkCache extends ChunkSource { +@@ -477,23 +471,17 @@ public class ServerChunkCache extends ChunkSource { @Override public void tick(BooleanSupplier shouldKeepTicking, boolean tickChunks) { this.level.getProfiler().push("purge"); @@ -1328,7 +1325,7 @@ index 77a2458b8acb21c64676934cd8d6b05ef6351c10..cb755283ef6bf8812e2c2ad8b546627a this.level.getProfiler().pop(); this.clearCache(); } -@@ -524,13 +512,11 @@ public class ServerChunkCache extends ChunkSource { +@@ -509,13 +497,11 @@ public class ServerChunkCache extends ChunkSource { gameprofilerfiller.push("pollingChunks"); gameprofilerfiller.push("filteringLoadedChunks"); // Paper - optimise chunk tick iteration @@ -1342,7 +1339,7 @@ index 77a2458b8acb21c64676934cd8d6b05ef6351c10..cb755283ef6bf8812e2c2ad8b546627a int k = this.distanceManager.getNaturalSpawnChunkCount(); // Paper start - Optional per player mob spawns int naturalSpawnChunkCount = k; -@@ -555,7 +541,6 @@ public class ServerChunkCache extends ChunkSource { +@@ -540,7 +526,6 @@ public class ServerChunkCache extends ChunkSource { spawnercreature_d = NaturalSpawner.createState(naturalSpawnChunkCount, this.level.getAllEntities(), this::getFullChunk, !this.level.paperConfig().entities.spawning.perPlayerMobSpawns ? new LocalMobCapCalculator(this.chunkMap) : null, false); } // Paper end - Optional per player mob spawns @@ -1350,7 +1347,7 @@ index 77a2458b8acb21c64676934cd8d6b05ef6351c10..cb755283ef6bf8812e2c2ad8b546627a this.lastSpawnState = spawnercreature_d; gameprofilerfiller.popPush("spawnAndTick"); -@@ -664,19 +649,14 @@ public class ServerChunkCache extends ChunkSource { +@@ -649,19 +634,14 @@ public class ServerChunkCache extends ChunkSource { } } // Paper end - optimise chunk tick iteration @@ -1370,7 +1367,7 @@ index 77a2458b8acb21c64676934cd8d6b05ef6351c10..cb755283ef6bf8812e2c2ad8b546627a // Paper start - optimise chunk tick iteration if (!this.chunkMap.needsChangeBroadcasting.isEmpty()) { it.unimi.dsi.fastutil.objects.ReferenceOpenHashSet copy = this.chunkMap.needsChangeBroadcasting.clone(); -@@ -690,8 +670,6 @@ public class ServerChunkCache extends ChunkSource { +@@ -675,8 +655,6 @@ public class ServerChunkCache extends ChunkSource { } } // Paper end - optimise chunk tick iteration @@ -1380,7 +1377,7 @@ index 77a2458b8acb21c64676934cd8d6b05ef6351c10..cb755283ef6bf8812e2c2ad8b546627a gameprofilerfiller.pop(); } diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 284bf39fbf1e21f3d9b628c3fe309e1b7e305bed..cc50dd6b75f0d2ed2202c39598c5c9b1c3090d0f 100644 +index 6934e9dac0d69c043b73b7c46d59f2d39b37c67f..8e43a6817e9101b6dcc956e3b6f4bcff63a4c2fc 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java @@ -1,7 +1,6 @@ @@ -1450,7 +1447,7 @@ index 284bf39fbf1e21f3d9b628c3fe309e1b7e305bed..cc50dd6b75f0d2ed2202c39598c5c9b1 this.tickBlockEntities(); } @@ -1033,7 +1020,6 @@ public class ServerLevel extends Level implements WorldGenLevel { - } // Paper + } // Paper - Option to disable ice and snow gameprofilerfiller.popPush("tickBlocks"); - timings.chunkTicksBlocks.startTiming(); // Paper @@ -1578,7 +1575,7 @@ index 284bf39fbf1e21f3d9b628c3fe309e1b7e305bed..cc50dd6b75f0d2ed2202c39598c5c9b1 } else if (close) { chunkproviderserver.close(false); } // Paper - rewrite chunk system diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 42b433d9461d0912b39542263684323369469ac0..1461ee40c7b563869e75c036bfb0dd2656bc780f 100644 +index 8ca5d7c1bfacb1b47aa680eee167af08d0396ae0..062c5a2988bfbe52d73e3a88aee02298d85ed4f9 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java @@ -2380,7 +2380,6 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl @@ -1754,7 +1751,7 @@ index fcdb9bde8e1605e30dde3e580491522d4b62cdc0..b68c69a7ab71926ecf478d8daa5ec5ac } diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index 9fd2fcf8437c866e4fe7a44108cde338e1a9f9a2..111d28fc2e26783a714b10f91877b09f5e8f8fa1 100644 +index 8f437225d2a4e08ca47873cd42277d9f0f9f5529..1d2ef62752b15e5f08536ccd20d0a5a19b218702 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java @@ -1,10 +1,7 @@ @@ -1824,10 +1821,10 @@ index 9fd2fcf8437c866e4fe7a44108cde338e1a9f9a2..111d28fc2e26783a714b10f91877b09f }); // CraftBukkit end - this.timings = new co.aikar.timings.WorldTimingsHandler(this); // Paper - code below can generate new world and access timings - this.keepSpawnInMemory = this.paperConfig().spawn.keepSpawnLoaded; // Paper + this.keepSpawnInMemory = this.paperConfig().spawn.keepSpawnLoaded; // Paper - Option to keep spawn chunks loaded this.entityLimiter = new org.spigotmc.TickLimiter(this.spigotConfig.entityMaxTickTime); this.tileLimiter = new org.spigotmc.TickLimiter(this.spigotConfig.tileMaxTickTime); -@@ -1269,15 +1257,12 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -1265,15 +1253,12 @@ public abstract class Level implements LevelAccessor, AutoCloseable { ProfilerFiller gameprofilerfiller = this.getProfiler(); gameprofilerfiller.push("blockEntities"); @@ -1843,7 +1840,7 @@ index 9fd2fcf8437c866e4fe7a44108cde338e1a9f9a2..111d28fc2e26783a714b10f91877b09f // Spigot start // Iterator iterator = this.blockEntityTickers.iterator(); boolean flag = this.tickRateManager().runsNormally(); -@@ -1306,9 +1291,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -1302,9 +1287,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { } this.blockEntityTickers.removeAll(toRemove); // Paper - Fix MC-117075 @@ -1892,7 +1889,7 @@ index 73d6f881a7d4d8ff96040d34ac502e5b0937d577..e815d53c327709d977045e016f8d2e93 @Nullable private String descriptionId; diff --git a/src/main/java/net/minecraft/world/level/block/entity/BlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/BlockEntity.java -index 4ce7a7947fa727e64556148f923508ce76c128c4..bfc81572df24b5afbacee6f290cffaa9ca3e01c1 100644 +index 9ea74d37cd951e0dc76d20ed8234b5871035566c..fc55527c36c33f12760e1cf4cde7cfd3913b0fa8 100644 --- a/src/main/java/net/minecraft/world/level/block/entity/BlockEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/BlockEntity.java @@ -21,14 +21,9 @@ import org.bukkit.craftbukkit.persistence.CraftPersistentDataTypeRegistry; @@ -1911,7 +1908,7 @@ index 4ce7a7947fa727e64556148f923508ce76c128c4..bfc81572df24b5afbacee6f290cffaa9 private static final CraftPersistentDataTypeRegistry DATA_TYPE_REGISTRY = new CraftPersistentDataTypeRegistry(); public CraftPersistentDataContainer persistentDataContainer; diff --git a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java -index f6bfe4dc7c2c2c7d7d7852c76f15f84928bc3e9f..b2807c4493a558e2fd11b2a1f04593c6299d5874 100644 +index 6ec3fc801453fd54c25b642e6fa71c19b463311d..44b9aaa534a4683b2924a2aa61a92218f9c846b3 100644 --- a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java +++ b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java @@ -785,7 +785,6 @@ public class LevelChunk extends ChunkAccess { @@ -1940,7 +1937,7 @@ index f6bfe4dc7c2c2c7d7d7852c76f15f84928bc3e9f..b2807c4493a558e2fd11b2a1f04593c6 if (this.blockEntity.getType().isValid(iblockdata)) { @@ -1184,9 +1181,6 @@ public class LevelChunk extends ChunkAccess { LevelChunk.this.removeBlockEntity(this.getPos()); - // Paper end + // Paper end - Prevent block entity and entity crashes // Spigot start - } finally { - this.blockEntity.tickTimer.stopTiming(); @@ -1949,10 +1946,10 @@ index f6bfe4dc7c2c2c7d7d7852c76f15f84928bc3e9f..b2807c4493a558e2fd11b2a1f04593c6 } } diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java -index 7a6f62787411a1e160576e7a7da4122b4f0ef5b6..cac0f51ff4f6b1bc498d24fa8ecdb910b3d8f010 100644 +index 3825ba1695ea618fa7470281be5392a847d2dfd8..7a266257b1220098a6c829ccf1c597b7e510205a 100644 --- a/src/main/java/org/bukkit/craftbukkit/Main.java +++ b/src/main/java/org/bukkit/craftbukkit/Main.java -@@ -343,8 +343,8 @@ public class Main { +@@ -344,8 +344,8 @@ public class Main { tryPreloadClass("org.jline.terminal.impl.MouseSupport"); tryPreloadClass("org.jline.terminal.impl.MouseSupport$1"); tryPreloadClass("org.jline.terminal.Terminal$MouseTracking"); @@ -1963,7 +1960,7 @@ index 7a6f62787411a1e160576e7a7da4122b4f0ef5b6..cac0f51ff4f6b1bc498d24fa8ecdb910 tryPreloadClass("io.netty.channel.AbstractChannelHandlerContext"); tryPreloadClass("io.netty.channel.AbstractChannelHandlerContext$11"); tryPreloadClass("io.netty.channel.AbstractChannelHandlerContext$12"); -@@ -357,7 +357,7 @@ public class Main { +@@ -358,7 +358,7 @@ public class Main { tryPreloadClass("org.bukkit.craftbukkit.scheduler.CraftScheduler$1"); tryPreloadClass("org.bukkit.craftbukkit.scheduler.CraftScheduler$2"); tryPreloadClass("org.bukkit.craftbukkit.scheduler.CraftScheduler$3"); @@ -1973,7 +1970,7 @@ index 7a6f62787411a1e160576e7a7da4122b4f0ef5b6..cac0f51ff4f6b1bc498d24fa8ecdb910 tryPreloadClass("org.slf4j.helpers.FormattingTuple"); tryPreloadClass("org.slf4j.helpers.BasicMarker"); diff --git a/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java b/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java -index 700932b65e4fda560d684b0aa079bcee3923f73e..74ff54724626908a083063c54983e0adfbbf7749 100644 +index e85b9bb3f9c225d289a4959921970b9963881199..bb9383f1a457433f9db3e78d7913616280925200 100644 --- a/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java +++ b/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java @@ -1,6 +1,5 @@ @@ -1983,7 +1980,7 @@ index 700932b65e4fda560d684b0aa079bcee3923f73e..74ff54724626908a083063c54983e0ad import com.google.common.base.Preconditions; import com.google.common.util.concurrent.ThreadFactoryBuilder; import java.util.ArrayList; -@@ -302,7 +301,7 @@ public class CraftScheduler implements BukkitScheduler { +@@ -304,7 +303,7 @@ public class CraftScheduler implements BukkitScheduler { } return false; } @@ -1992,7 +1989,7 @@ index 700932b65e4fda560d684b0aa079bcee3923f73e..74ff54724626908a083063c54983e0ad this.handle(task, 0L); for (CraftTask taskPending = this.head.getNext(); taskPending != null; taskPending = taskPending.getNext()) { if (taskPending == task) { -@@ -342,7 +341,7 @@ public class CraftScheduler implements BukkitScheduler { +@@ -344,7 +343,7 @@ public class CraftScheduler implements BukkitScheduler { } } } @@ -2001,7 +1998,7 @@ index 700932b65e4fda560d684b0aa079bcee3923f73e..74ff54724626908a083063c54983e0ad this.handle(task, 0L); for (CraftTask taskPending = this.head.getNext(); taskPending != null; taskPending = taskPending.getNext()) { if (taskPending == task) { -@@ -513,10 +512,8 @@ public class CraftScheduler implements BukkitScheduler { +@@ -515,10 +514,8 @@ public class CraftScheduler implements BukkitScheduler { this.runners.remove(task.getTaskId()); } } @@ -2012,7 +2009,7 @@ index 700932b65e4fda560d684b0aa079bcee3923f73e..74ff54724626908a083063c54983e0ad //this.debugHead = this.debugHead.getNextHead(currentTick); // Paper } -@@ -559,7 +556,6 @@ public class CraftScheduler implements BukkitScheduler { +@@ -561,7 +558,6 @@ public class CraftScheduler implements BukkitScheduler { } void parsePending() { // Paper @@ -2020,7 +2017,7 @@ index 700932b65e4fda560d684b0aa079bcee3923f73e..74ff54724626908a083063c54983e0ad CraftTask head = this.head; CraftTask task = head.getNext(); CraftTask lastTask = head; -@@ -578,7 +574,6 @@ public class CraftScheduler implements BukkitScheduler { +@@ -580,7 +576,6 @@ public class CraftScheduler implements BukkitScheduler { task.setNext(null); } this.head = lastTask; @@ -2107,7 +2104,7 @@ index b3e1adeb932da9b3bed16acd94e2f16da48a7c72..e9798517b9211c50a20ea5c69603aab3 } } diff --git a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java -index 509f8487a170f3dc84b091acf16df26e42391189..c00c8655db9813eac0498da6c0c75d9b199d6c7d 100644 +index 4e1390b9244aeb745ffd3fd1257bc74248722515..e0eb1cd5cd439a538105719eb215307fc3705012 100644 --- a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java +++ b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java @@ -212,7 +212,6 @@ public final class CraftMagicNumbers implements UnsafeValues { @@ -2119,7 +2116,7 @@ index 509f8487a170f3dc84b091acf16df26e42391189..c00c8655db9813eac0498da6c0c75d9b // Paper end diff --git a/src/main/java/org/spigotmc/ActivationRange.java b/src/main/java/org/spigotmc/ActivationRange.java -index fafc8b84d6b6368c70b8eedfdb4c3a9deace9c26..97806af3f12bc44036418b2829191e0f83519ce5 100644 +index c39894e824334f1dc52e0466cf9d84f7e219be70..efb7f957c72088e40946a2eeb8d955f156163c24 100644 --- a/src/main/java/org/spigotmc/ActivationRange.java +++ b/src/main/java/org/spigotmc/ActivationRange.java @@ -34,7 +34,6 @@ import net.minecraft.world.entity.projectile.FireworkRocketEntity; @@ -2138,7 +2135,7 @@ index fafc8b84d6b6368c70b8eedfdb4c3a9deace9c26..97806af3f12bc44036418b2829191e0f final int miscActivationRange = world.spigotConfig.miscActivationRange; final int raiderActivationRange = world.spigotConfig.raiderActivationRange; final int animalActivationRange = world.spigotConfig.animalActivationRange; -@@ -225,7 +223,6 @@ public class ActivationRange +@@ -224,7 +222,6 @@ public class ActivationRange } // Paper end } diff --git a/patches/server/0003-Leaves-Server-Utils.patch b/patches/server/0003-Leaves-Server-Utils.patch index 81c25a31..32965453 100644 --- a/patches/server/0003-Leaves-Server-Utils.patch +++ b/patches/server/0003-Leaves-Server-Utils.patch @@ -31,7 +31,7 @@ index 46954db7ecd35ac4018fdf476df7c8020d7ce6c8..044c51ebb058fc36074fd178929e3279 public PlayerAreaMap() { super(); diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 7ceb4ec480d8799d0bdbd645e5760d2c952b679b..552a68cacea57fec0dcaf22672ba8e12c677ee5f 100644 +index 2c06f3ebf7e1069727387bfc60db30c958c14b5a..12e8a6794669496c0fa554be3947fac56f773d5d 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java @@ -423,6 +423,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S @@ -42,7 +42,7 @@ index 7ceb4ec480d8799d0bdbd645e5760d2c952b679b..552a68cacea57fec0dcaf22672ba8e12 public void setOrigin(@javax.annotation.Nonnull Location location) { this.origin = location.toVector(); -@@ -2479,6 +2480,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -2476,6 +2477,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S nbttagcompound.putBoolean("Paper.FreezeLock", true); } // Paper end @@ -50,7 +50,7 @@ index 7ceb4ec480d8799d0bdbd645e5760d2c952b679b..552a68cacea57fec0dcaf22672ba8e12 return nbttagcompound; } catch (Throwable throwable) { CrashReport crashreport = CrashReport.forThrowable(throwable, "Saving entity NBT"); -@@ -2626,6 +2628,11 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -2623,6 +2625,11 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S freezeLocked = nbt.getBoolean("Paper.FreezeLock"); } // Paper end @@ -62,7 +62,7 @@ index 7ceb4ec480d8799d0bdbd645e5760d2c952b679b..552a68cacea57fec0dcaf22672ba8e12 } catch (Throwable throwable) { CrashReport crashreport = CrashReport.forThrowable(throwable, "Loading entity NBT"); -@@ -4915,4 +4922,10 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -4909,4 +4916,10 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S return ((net.minecraft.server.level.ServerChunkCache) level.getChunkSource()).isPositionTicking(this); } // Paper end - Expose entity id counter diff --git a/patches/server/0005-Leaves-Server-Config-And-Command.patch b/patches/server/0005-Leaves-Server-Config-And-Command.patch index ec7809f2..e9342311 100644 --- a/patches/server/0005-Leaves-Server-Config-And-Command.patch +++ b/patches/server/0005-Leaves-Server-Config-And-Command.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Leaves Server Config And Command diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index a09aef16a58bf713ec670ad23d44255943016743..38c52f07f7790ff1b6aa0c8f19db98cb36e9ce7c 100644 +index 93412c3eb947afb1ad6ee8dba9864b2d310e0624..9d50d30670d9ac0ffa74eb6da2e84b5bd069839c 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1141,6 +1141,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop resourcekey = world.getTypeKey() == LevelStem.END ? Level.OVERWORLD : Level.END; // CraftBukkit - SPIGOT-6152: send back to main overworld in custom ends -- ServerLevel worldserver = world.getServer().getLevel(resourcekey); -- -- org.bukkit.event.entity.EntityPortalEnterEvent event = new org.bukkit.event.entity.EntityPortalEnterEvent(this.getBukkitEntity(), new org.bukkit.Location(world.getWorld(), pos.getX(), pos.getY(), pos.getZ())); -- event.callEvent(); -- -- if (this instanceof ServerPlayer) { -- ((ServerPlayer) this).changeDimension(worldserver, PlayerTeleportEvent.TeleportCause.END_PORTAL); -- return; -- } -- this.teleportTo(worldserver, null); -- } -- // Paper end - make end portalling safe -+ // Leaves - fix gravity block duper +@@ -440,6 +440,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S + return this.originWorld; + } + // Paper end - Entity origin API ++ /* Leaves - fix gravity block duper + // Paper start - make end portalling safe + public BlockPos portalBlock; + public ServerLevel portalWorld; +@@ -470,6 +471,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S + this.teleportTo(worldserver, null); + } + // Paper end - make end portalling safe ++ */ // Paper start - optimise entity tracking final org.spigotmc.TrackingRange.TrackingRangeType trackingRangeType = org.spigotmc.TrackingRange.getTrackingRangeType(this); -@@ -3182,7 +3153,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -3179,7 +3181,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S } this.processPortalCooldown(); @@ -56,7 +34,7 @@ index 552a68cacea57fec0dcaf22672ba8e12c677ee5f..fc27159b0638a1ddbf146e8036249dae } diff --git a/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java b/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java -index a75e48f27cd8fbf6165c96c5df09671494eb9dd8..177317d75ccb2a75f75a814f10429f3b5ee0875c 100644 +index 9daf8aa557d9f4fdbcc138a47892ea5a061dd877..09f227c8b5a62497e943fb06d21abe4556b0a888 100644 --- a/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java +++ b/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java @@ -132,11 +132,7 @@ public class FallingBlockEntity extends Entity { @@ -72,19 +50,22 @@ index a75e48f27cd8fbf6165c96c5df09671494eb9dd8..177317d75ccb2a75f75a814f10429f3b if (this.blockState.isAir()) { this.discard(); } else { -@@ -149,11 +145,7 @@ public class FallingBlockEntity extends Entity { +@@ -148,12 +144,14 @@ public class FallingBlockEntity extends Entity { + } this.move(MoverType.SELF, this.getDeltaMovement()); - -- // Paper start - fix sand duping -- if (this.isRemoved()) { -- return; -- } -- // Paper end - fix sand duping -+ // Leaves - fix gravity block duper - - // Paper start - Configurable EntityFallingBlock height nerf ++ /* // Leaves - fix gravity block duper + // Paper start - fix sand duping + if (this.isRemoved()) { + return; + } + // Paper end - fix sand duping +- // Paper start - Configurable falling blocks height nerf ++ */ ++ // Paper start - Configurable EntityFallingBlock height nerf if (this.level().paperConfig().fixes.fallingBlockHeightNerf.test(v -> this.getY() > v)) { + if (this.dropItem && this.level().getGameRules().getBoolean(GameRules.RULE_DOENTITYDROPS)) { + this.spawnAtLocation(block); diff --git a/src/main/java/net/minecraft/world/level/block/EndPortalBlock.java b/src/main/java/net/minecraft/world/level/block/EndPortalBlock.java index a0c1db8cfebaa0344012cc0af18d6231cdcdcbb8..6482c2456d9dc9b4983f691f388b7ec045d2cab6 100644 --- a/src/main/java/net/minecraft/world/level/block/EndPortalBlock.java diff --git a/patches/server/0010-Fakeplayer-support.patch b/patches/server/0010-Fakeplayer-support.patch index f59a8011..5ad957cd 100644 --- a/patches/server/0010-Fakeplayer-support.patch +++ b/patches/server/0010-Fakeplayer-support.patch @@ -36,7 +36,7 @@ index b189aeb8646b5385c7cca0c4babfcb071a642220..d6179829579a07c29565d024f5306937 if (this.packetListener != null) { throw new IllegalStateException("Listener already set"); diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 5582fc4548cdaef69f4cf888f02d6d280adb3eaf..d90955687caa5fbe925c55184ac14fa3946afa74 100644 +index 3ab53e1eee43c048ec89f8bda610e35efa5a52aa..487cc5b0d980d9e910695440fb7da8704fdb2b72 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -663,6 +663,8 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop= world.paperConfig().entities.behavior.playerInsomniaStartTicks) { // Paper - Ability to control player's insomnia and phantoms BlockPos blockposition1 = blockposition.above(20 + randomsource.nextInt(15)).east(-10 + randomsource.nextInt(21)).south(-10 + randomsource.nextInt(21)); diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index da4660b93b64100ed0f30cde5bcaafa64174fb7a..6b2c19f3ea4fb8e2f6afc165ece6d0c66ba59a75 100644 +index b1c8806e65c97bbeb96ea03aae0ffba9f5d7ae5b..cb54b576d71f4b9c0a64199e03e99b1a8f2a1832 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -259,6 +259,7 @@ import org.yaml.snakeyaml.constructor.SafeConstructor; @@ -364,7 +366,7 @@ index da4660b93b64100ed0f30cde5bcaafa64174fb7a..6b2c19f3ea4fb8e2f6afc165ece6d0c6 // Paper start - Folia region threading API private final io.papermc.paper.threadedregions.scheduler.FallbackRegionScheduler regionizedScheduler = new io.papermc.paper.threadedregions.scheduler.FallbackRegionScheduler(); -@@ -3243,4 +3245,11 @@ public final class CraftServer implements Server { +@@ -3240,4 +3242,11 @@ public final class CraftServer implements Server { } // Paper end @@ -399,10 +401,10 @@ index 8698104e3eb98e2cc5da5de87a8f538860c1d91d..dc7ba0ce76031e6dd7e550ceaf3b2f97 if (entity instanceof EnderDragonPart complexPart) { if (complexPart.parentMob instanceof EnderDragon) { diff --git a/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java b/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java -index 74ff54724626908a083063c54983e0adfbbf7749..7afc1618f2014df67ca42f00c09e863c16afda56 100644 +index bb9383f1a457433f9db3e78d7913616280925200..55b41ca7630db143d70137324a9de8717397f0e8 100644 --- a/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java +++ b/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java -@@ -44,7 +44,7 @@ import org.bukkit.scheduler.BukkitWorker; +@@ -46,7 +46,7 @@ import org.bukkit.scheduler.BukkitWorker; */ public class CraftScheduler implements BukkitScheduler { diff --git a/patches/server/0025-Optimize-random-calls-in-chunk-ticking.patch b/patches/server/0025-Optimize-random-calls-in-chunk-ticking.patch index a77ec8bd..fbf07626 100644 --- a/patches/server/0025-Optimize-random-calls-in-chunk-ticking.patch +++ b/patches/server/0025-Optimize-random-calls-in-chunk-ticking.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Optimize random calls in chunk ticking This patch is Powered by Pufferfish(https://github.com/pufferfish-gg/Pufferfish) diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java -index cb755283ef6bf8812e2c2ad8b546627a334b75a2..9659b5adb9824df325285763ef211cd189174668 100644 +index 2a19a45e9c7ac4646ce89c566b5fec21281c45b9..a3db45d411772d71ba46632633e935f2251bcfda 100644 --- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java +++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java -@@ -510,6 +510,11 @@ public class ServerChunkCache extends ChunkSource { +@@ -495,6 +495,11 @@ public class ServerChunkCache extends ChunkSource { ProfilerFiller gameprofilerfiller = this.level.getProfiler(); gameprofilerfiller.push("pollingChunks"); @@ -22,7 +22,7 @@ index cb755283ef6bf8812e2c2ad8b546627a334b75a2..9659b5adb9824df325285763ef211cd1 // Paper - optimise chunk tick iteration diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index d046ffa452a6fe2f2f35a961fec792f27ed6df38..9018a9b714a157045e473294ee59980c561b9050 100644 +index c9e578cd3d941fa343cc957805df882b51e0761f..bb5833265661bfdef0808745c65ec04cc9240519 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java @@ -968,6 +968,13 @@ public class ServerLevel extends Level implements WorldGenLevel { @@ -43,13 +43,13 @@ index d046ffa452a6fe2f2f35a961fec792f27ed6df38..9018a9b714a157045e473294ee59980c gameprofilerfiller.push("thunder"); final BlockPos.MutableBlockPos blockposition = this.chunkTickMutablePosition; // Paper - use mutable to reduce allocation rate, final to force compile fail on change -- if (!this.paperConfig().environment.disableThunder && flag && this.isThundering() && this.spigotConfig.thunderChance > 0 && this.random.nextInt(this.spigotConfig.thunderChance) == 0) { // Spigot // Paper - disable thunder -+ if (!this.paperConfig().environment.disableThunder && flag && this.isThundering() && this.spigotConfig.thunderChance > 0 && (top.leavesmc.leaves.LeavesConfig.optimizeChunkTicking ? chunk.shouldDoLightning(this.random) : this.random.nextInt(this.spigotConfig.thunderChance) == 0)) { // Spigot // Paper - disable thunder // Leaves - replace random with shouldDoLightning +- if (!this.paperConfig().environment.disableThunder && flag && this.isThundering() && this.spigotConfig.thunderChance > 0 && this.random.nextInt(this.spigotConfig.thunderChance) == 0) { // Spigot // Paper - Option to disable thunder ++ if (!this.paperConfig().environment.disableThunder && flag && this.isThundering() && this.spigotConfig.thunderChance > 0 && (top.leavesmc.leaves.LeavesConfig.optimizeChunkTicking ? chunk.shouldDoLightning(this.random) : this.random.nextInt(this.spigotConfig.thunderChance) == 0)) { // Spigot // Paper - Option to disable thunder // Leaves - replace random with shouldDoLightning blockposition.set(this.findLightningTargetAround(this.getBlockRandomPos(j, 0, k, 15))); // Paper if (this.isRainingAt(blockposition)) { diff --git a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java -index b2807c4493a558e2fd11b2a1f04593c6299d5874..6f89a493f557a55075263a74f32682fec66f4f23 100644 +index 44b9aaa534a4683b2924a2aa61a92218f9c846b3..ae746ebde8ba2aded37bc1c9b3c4acdfd5f9def0 100644 --- a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java +++ b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java @@ -86,6 +86,18 @@ public class LevelChunk extends ChunkAccess { diff --git a/patches/server/0028-Config-to-disable-method-profiler.patch b/patches/server/0028-Config-to-disable-method-profiler.patch index 1968d59d..2ac48b13 100644 --- a/patches/server/0028-Config-to-disable-method-profiler.patch +++ b/patches/server/0028-Config-to-disable-method-profiler.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Config to disable method profiler This patch is Powered by Pufferfish(https://github.com/pufferfish-gg/Pufferfish) diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index d90955687caa5fbe925c55184ac14fa3946afa74..0328722b7c25c258ff7adc312faf4f80ce76f1bd 100644 +index 487cc5b0d980d9e910695440fb7da8704fdb2b72..ae7df33164a4a6d0bc453ec0f45cd023d21a32ae 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -2413,6 +2413,11 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop tag, double speed) { @@ -35,7 +35,7 @@ index 3c9ac99fae71570120482de4b615492217af17da..b02e83af62d6d14e01642569dfce84e9 double d1 = 0.0D; boolean flag = this.isPushedByFluid(); boolean flag1 = false; -@@ -4405,38 +4407,123 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -4428,38 +4430,123 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S int k1 = 0; BlockPos.MutableBlockPos blockposition_mutableblockposition = new BlockPos.MutableBlockPos(); diff --git a/patches/server/0053-Use-vanilla-random-config.patch b/patches/server/0053-Use-vanilla-random-config.patch index 434194cb..52465609 100644 --- a/patches/server/0053-Use-vanilla-random-config.patch +++ b/patches/server/0053-Use-vanilla-random-config.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Use vanilla random config diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index b02e83af62d6d14e01642569dfce84e97aaf1822..053d510c435baeab08ad0acac600327f88e62dec 100644 +index e33fff62f13a26cf681cf20f187bba2f885148f9..eb673c7ed083ef731263d60a9298e58934bc370f 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -548,7 +548,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -577,7 +577,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S this.bb = Entity.INITIAL_AABB; this.stuckSpeedMultiplier = Vec3.ZERO; this.nextStep = 1.0F; @@ -63,7 +63,7 @@ index adc179f85a774c47d386144da6b2291e915a0e1d..51cc6ef73da00133bbdc838b1911159a // Paper end - Don't use level random in entity constructors // Leaves start - stackable shulker boxes diff --git a/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java b/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java -index 2c4f9aa4ad22393e19e01e8e14e367968b5cba57..f85163a6238ca657f03f552a360776651dcfb67f 100644 +index 83ef6f6555fb810236659b395ce17fa414d7a567..33b46370d1f9073b6ce656ee5d110f45def2ee81 100644 --- a/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java +++ b/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java @@ -43,7 +43,7 @@ public class PrimedTnt extends Entity implements TraceableEntity { diff --git a/patches/server/0054-Fix-update-suppression-crash.patch b/patches/server/0054-Fix-update-suppression-crash.patch index 1677376c..83964967 100644 --- a/patches/server/0054-Fix-update-suppression-crash.patch +++ b/patches/server/0054-Fix-update-suppression-crash.patch @@ -20,10 +20,10 @@ index d0a487f0d563181818c5670749e8dd3a9d939265..140a9070fb5859e762e40ddb1e4259f6 label25: { diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 2136cdddbaa90201c778efa435a35588476e9e9c..1482dce5e76d9bc235e188ada456948d5e28d361 100644 +index acc9973099d253bbbfe6b6a885ec4010893c5d08..414360e531ad3562c22d266e0592a19984bf2ca4 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1687,7 +1687,13 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 1.0E-7D) { movement = movement.multiply(this.stuckSpeedMultiplier); -@@ -2009,6 +2015,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -2038,6 +2044,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S this.yo = y; this.zo = d4; this.setPos(d3, y, d4); @@ -85,13 +85,14 @@ index 053d510c435baeab08ad0acac600327f88e62dec..08d1337dad726203f0b4974c4a2fbf20 } diff --git a/src/main/java/net/minecraft/world/entity/player/Player.java b/src/main/java/net/minecraft/world/entity/player/Player.java -index 001bfc1cae653ad2e451d6f40ab57dfb8351bfc0..7ea29129949364b7d887ed8e48e8f4f6cebaf7f4 100644 +index ce16c7bfb127edd9d331c95ea114ce8978af9595..af792c5031459a190be6a7cd4ab90babf4ee9e32 100644 --- a/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java -@@ -183,6 +183,7 @@ public abstract class Player extends LivingEntity { - public boolean affectsSpawning = true; +@@ -181,6 +181,8 @@ public abstract class Player extends LivingEntity { + public float hurtDir; // Paper - protected -> public + public boolean affectsSpawning = true; // Paper - Affects Spawning API public net.kyori.adventure.util.TriState flyingFallDamage = net.kyori.adventure.util.TriState.NOT_SET; // Paper - flying fall damage - // Paper end ++ // Paper end + public boolean elytraAeronauticsNoChunk = false; // Leaves - Elytra aeronautics // CraftBukkit start diff --git a/patches/server/0090-Reduce-array-allocations.patch b/patches/server/0090-Reduce-array-allocations.patch index 9cbd7d8d..8f688e76 100644 --- a/patches/server/0090-Reduce-array-allocations.patch +++ b/patches/server/0090-Reduce-array-allocations.patch @@ -227,7 +227,7 @@ index b2183c298b0c68daee41238735621ff002338a68..3957ab1ebd7e84cfe0bef81a8cce566d for (int j = 0; j < i; ++j) { diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index ff957be41684f0c722b1dcac4f2ac09975f80236..6e9a26916a2e82dd56e51978a562e96ae8e480ac 100644 +index 678410cd734cd7e3e3b999b7908f2e3f25f23a13..1240121d732a9697ec6bffcc459a00c71d5f4350 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java @@ -177,6 +177,7 @@ import org.bukkit.event.weather.LightningStrikeEvent; @@ -257,7 +257,7 @@ index ff957be41684f0c722b1dcac4f2ac09975f80236..6e9a26916a2e82dd56e51978a562e96a return ret; } diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index fdf8dcb60279ffee46368bd0abdade8bd63c5679..bf56d8f6a8fe06c5a356befa14d7eebf9af9460d 100644 +index baab58d4c62ffbcd105ec82d45ce20d7b832dfaa..ca3419c659e230bc43a86b17ae7dae4982c4ac3d 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java @@ -243,6 +243,7 @@ import org.bukkit.inventory.EquipmentSlot; @@ -268,7 +268,7 @@ index fdf8dcb60279ffee46368bd0abdade8bd63c5679..bf56d8f6a8fe06c5a356befa14d7eebf public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl implements ServerGamePacketListener, ServerPlayerConnection, TickablePacketListener { -@@ -778,13 +779,13 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -778,7 +779,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl // PacketUtils.ensureRunningOnSameThread(packet, this, this.player.serverLevel()); // Paper - AsyncTabCompleteEvent; run this async // CraftBukkit start if (this.chatSpamTickCount.addAndGet(io.papermc.paper.configuration.GlobalConfiguration.get().spamLimiter.tabSpamIncrement) > io.papermc.paper.configuration.GlobalConfiguration.get().spamLimiter.tabSpamLimit && !this.server.getPlayerList().isOp(this.player.getGameProfile())) { // Paper - configurable tab spam limits @@ -276,14 +276,16 @@ index fdf8dcb60279ffee46368bd0abdade8bd63c5679..bf56d8f6a8fe06c5a356befa14d7eebf + server.scheduleOnMain(() -> this.disconnect(Component.translatable("disconnect.spam", ArrayConstants.emptyObjectArray), org.bukkit.event.player.PlayerKickEvent.Cause.SPAM)); // Paper - kick event cause // Leaves - reduce array allocations return; } - // Paper start - String str = packet.getCommand(); int index = -1; - if (str.length() > 64 && ((index = str.indexOf(' ')) == -1 || index >= 64)) { -- server.scheduleOnMain(() -> this.disconnect(Component.translatable("disconnect.spam"))); // Paper -+ server.scheduleOnMain(() -> this.disconnect(Component.translatable("disconnect.spam", ArrayConstants.emptyObjectArray))); // Paper // Leaves - reduce array allocations + // CraftBukkit end +@@ -790,7 +791,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl + // Paper start - rewrite chunk system + int index; + if (packet.getCommand().length() > 64 && ((index = packet.getCommand().indexOf(' ')) == -1 || index >= 64)) { +- server.scheduleOnMain(() -> this.disconnect(Component.translatable("disconnect.spam"), org.bukkit.event.player.PlayerKickEvent.Cause.SPAM)); ++ server.scheduleOnMain(() -> this.disconnect(Component.translatable("disconnect.spam", ArrayConstants.emptyObjectArray), org.bukkit.event.player.PlayerKickEvent.Cause.SPAM)); // Leaves - reduce array allocations return; } - // Paper end + // Paper end - rewrite chunk system @@ -3191,7 +3192,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl // Paper start - auto recipe limit if (!org.bukkit.Bukkit.isPrimaryThread()) { @@ -409,7 +411,7 @@ index 3d4211c5af1a9b4495dc0aeead51a6f5fe72bf06..efa7d206009700cffd72e09bb910e561 for (int j = 0; j < i; ++j) { diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java -index 24ad2a51366a4fdcf35f2c1f63bbc2d339bd0d3f..005edbf57dad37f3fd369e4af1dddb6393ee2132 100644 +index 33903f1c9a2c3327404fcdbfaeb2987fafe2d84b..fb448966f644cf069dfc38f0f51262568841c51e 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java @@ -1082,7 +1082,7 @@ public abstract class Mob extends LivingEntity implements Targeting { @@ -504,7 +506,7 @@ index 6c2e8049c2197ddc912c1a0fc99c87beae81e25b..be13baa7b51c4ad377b50d8ca8f7cfad private static Enchantment register(String name, Enchantment enchantment) { return Registry.register(BuiltInRegistries.ENCHANTMENT, name, enchantment); diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index 6d3a652da337ec684ea939552bcadd61473e6cc6..ce85d69027cbfb06666c9242576d3abbd7cc2831 100644 +index bc1c548f08884609c9b6a94106ccb50a11f77caa..1fb210a4af574ba5ad54a547e3965a3a45b9cea9 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java @@ -97,6 +97,7 @@ import org.bukkit.craftbukkit.util.CraftSpawnCategory; @@ -515,7 +517,7 @@ index 6d3a652da337ec684ea939552bcadd61473e6cc6..ce85d69027cbfb06666c9242576d3abb public abstract class Level implements LevelAccessor, AutoCloseable { -@@ -1844,7 +1845,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -1860,7 +1861,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { public org.bukkit.entity.Entity[] getChunkEntities(int chunkX, int chunkZ) { io.papermc.paper.world.ChunkEntitySlices slices = ((ServerLevel)this).getEntityLookup().getChunk(chunkX, chunkZ); if (slices == null) { diff --git a/patches/server/0091-Optimize-sun-burn-tick.patch b/patches/server/0091-Optimize-sun-burn-tick.patch index 5a9d1556..86c14d5d 100644 --- a/patches/server/0091-Optimize-sun-burn-tick.patch +++ b/patches/server/0091-Optimize-sun-burn-tick.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Optimize sun burn tick This patch is Powered by Gale(https://github.com/GaleMC/Gale) diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 219e61d5a3644fb4ced66c4375ab551955fa043c..c3a91af3a6e9ca8177994bacaf375d1e7df1d0c4 100644 +index 406c973cc3765dd60e2fa14b18baaa38522c8f00..ffad59f865a138aa9aef73881a608b058c7fba22 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -1995,8 +1995,22 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -2024,8 +2024,22 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S /** @deprecated */ @Deprecated public float getLightLevelDependentMagicValue() { @@ -34,7 +34,7 @@ index 219e61d5a3644fb4ced66c4375ab551955fa043c..c3a91af3a6e9ca8177994bacaf375d1e public void absMoveTo(double x, double y, double z, float yaw, float pitch) { this.absMoveTo(x, y, z); diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java -index 23e0e9125f7f68a602fa4d6c3c9562fe25bb3374..3209b9116b4bfcdc99d91aae09bc06b2a8d98d34 100644 +index fb448966f644cf069dfc38f0f51262568841c51e..81d7ce2a8ce07f72c95168efeb2d59dd9f4bd6c8 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java @@ -1716,15 +1716,41 @@ public abstract class Mob extends LivingEntity implements Targeting { diff --git a/patches/server/0098-Skip-entity-move-if-movement-is-zero.patch b/patches/server/0098-Skip-entity-move-if-movement-is-zero.patch index 9e62a6d8..86f68336 100644 --- a/patches/server/0098-Skip-entity-move-if-movement-is-zero.patch +++ b/patches/server/0098-Skip-entity-move-if-movement-is-zero.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Skip entity move if movement is zero This patch is Powered by Gale(https://github.com/GaleMC/Gale) diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 42249dc3f994d1e4ce1c5e1c6e2ec1f7d4d41324..a4acf29239e1c05e8afc42c92763f00a31762aa0 100644 +index ffad59f865a138aa9aef73881a608b058c7fba22..6b53d174a6013b7dbb2355bace4db89b5d209cf7 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java @@ -316,6 +316,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S @@ -17,7 +17,7 @@ index 42249dc3f994d1e4ce1c5e1c6e2ec1f7d4d41324..a4acf29239e1c05e8afc42c92763f00a public boolean onGround; public boolean horizontalCollision; public boolean verticalCollision; -@@ -1051,6 +1052,13 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -1080,6 +1081,13 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S // Paper end - detailed watchdog information public void move(MoverType movementType, Vec3 movement) { @@ -31,7 +31,7 @@ index 42249dc3f994d1e4ce1c5e1c6e2ec1f7d4d41324..a4acf29239e1c05e8afc42c92763f00a final Vec3 originalMovement = movement; // Paper - Expose pre-collision velocity // Paper start - detailed watchdog information io.papermc.paper.util.TickThread.ensureTickThread("Cannot move an entity off-main"); -@@ -4082,6 +4090,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -4108,6 +4116,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S } public final void setBoundingBox(AABB boundingBox) { diff --git a/patches/server/0100-Skip-negligible-planar-movement-multiplication.patch b/patches/server/0100-Skip-negligible-planar-movement-multiplication.patch index 139bf573..f8d34e68 100644 --- a/patches/server/0100-Skip-negligible-planar-movement-multiplication.patch +++ b/patches/server/0100-Skip-negligible-planar-movement-multiplication.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Skip negligible planar movement multiplication This patch is Powered by Gale(https://github.com/GaleMC/Gale) diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index f9682798c74aaae9c0610c00b2f52cda990e35a4..bb575f1fa289e90a242f5b2ca0d18c5fccd41718 100644 +index 6b53d174a6013b7dbb2355bace4db89b5d209cf7..e6e87d23becafc8471c6d7211daa9992d66099da 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -1223,9 +1223,16 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -1252,9 +1252,16 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S } this.tryCheckInsideBlocks(); diff --git a/patches/server/0106-Force-peaceful-mode-switch.patch b/patches/server/0106-Force-peaceful-mode-switch.patch index 98c01fdc..c4d1c76d 100644 --- a/patches/server/0106-Force-peaceful-mode-switch.patch +++ b/patches/server/0106-Force-peaceful-mode-switch.patch @@ -5,12 +5,12 @@ Subject: [PATCH] Force peaceful mode switch diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java -index 9659b5adb9824df325285763ef211cd189174668..3217af4adb16a48150652258e59b49cf1cf33873 100644 +index a3db45d411772d71ba46632633e935f2251bcfda..7e60778e406dfa19488604f6a99b0f9276e42f77 100644 --- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java +++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java -@@ -74,6 +74,12 @@ public class ServerChunkCache extends ChunkSource { - +@@ -77,6 +77,12 @@ public class ServerChunkCache extends ChunkSource { private final LevelChunk[] lastLoadedChunks = new LevelChunk[4 * 4]; + // Paper end + // Leaves start - peaceful mode switch + public int peacefulModeSwitchTick = -1; @@ -18,10 +18,10 @@ index 9659b5adb9824df325285763ef211cd189174668..3217af4adb16a48150652258e59b49cf + private final List> peacefulModeSwitchEntityTypes = List.of(net.minecraft.world.entity.boss.wither.WitherBoss.class, net.minecraft.world.entity.monster.Shulker.class, net.minecraft.world.entity.monster.warden.Warden.class); + // Leaves end - peaceful mode switch + - private static int getChunkCacheKey(int x, int z) { - return x & 3 | ((z & 3) << 2); - } -@@ -516,7 +522,21 @@ public class ServerChunkCache extends ChunkSource { + public ServerChunkCache(ServerLevel world, LevelStorageSource.LevelStorageAccess session, DataFixer dataFixer, StructureTemplateManager structureTemplateManager, Executor workerExecutor, ChunkGenerator chunkGenerator, int viewDistance, int simulationDistance, boolean dsync, ChunkProgressListener worldGenerationProgressListener, ChunkStatusUpdateListener chunkStatusChangeListener, Supplier persistentStateManagerFactory) { + this.level = world; + this.mainThreadProcessor = new ServerChunkCache.MainThreadExecutor(world); +@@ -501,7 +507,21 @@ public class ServerChunkCache extends ChunkSource { } // Leaves end - reset ice & snow tick random gameprofilerfiller.push("filteringLoadedChunks"); @@ -44,7 +44,7 @@ index 9659b5adb9824df325285763ef211cd189174668..3217af4adb16a48150652258e59b49cf // Paper - optimise chunk tick iteration -@@ -604,10 +624,20 @@ public class ServerChunkCache extends ChunkSource { +@@ -589,10 +609,20 @@ public class ServerChunkCache extends ChunkSource { } Util.shuffle(shuffled, this.level.random); chunkIterator = shuffled.iterator(); @@ -68,7 +68,7 @@ index 9659b5adb9824df325285763ef211cd189174668..3217af4adb16a48150652258e59b49cf LevelChunk chunk1 = chunkIterator.next(); // Paper end - optimise chunk tick iteration ChunkPos chunkcoordintpair = chunk1.getPos(); -@@ -638,7 +668,7 @@ public class ServerChunkCache extends ChunkSource { +@@ -623,7 +653,7 @@ public class ServerChunkCache extends ChunkSource { // Paper end - optimise chunk tick iteration chunk1.incrementInhabitedTime(j); if (spawn && flag && (this.spawnEnemies || this.spawnFriendlies) && this.level.getWorldBorder().isWithinBounds(chunkcoordintpair)) { // Spigot // Paper - optimise chunk tick iteration @@ -107,10 +107,10 @@ index 4eac3f2acaf70e83b9241ed55ae5f9ecf39d2e67..8faaf4a8bcd75c79808bcfd2b6b86729 boolean spawnThisTick = true; int limit = enumcreaturetype.getMaxInstancesPerChunk(); diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -index cd559e6aaf4bd2bd322c953bbb186135489ddcaa..aa0a1cbbbd4f2f027e24a4166bd5be4009c2ac3e 100644 +index a139601888b88e8580bdb9c2469386a94abae975..948a4595d2c3fe91295bef0001d99521403f7a26 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -@@ -2422,6 +2422,18 @@ public class CraftWorld extends CraftRegionAccessor implements World { +@@ -2385,6 +2385,18 @@ public class CraftWorld extends CraftRegionAccessor implements World { return CraftFeatureFlag.getFromNMS(this.getHandle().enabledFeatures()).stream().map(FeatureFlag.class::cast).collect(Collectors.toUnmodifiableSet()); } diff --git a/patches/server/0108-Replay-Mod-API.patch b/patches/server/0108-Replay-Mod-API.patch index a0002e5a..cda00e71 100644 --- a/patches/server/0108-Replay-Mod-API.patch +++ b/patches/server/0108-Replay-Mod-API.patch @@ -107,7 +107,7 @@ index cb05ec292d26320562e51da96a5a28cb04ecc7e4..6cf0b94b185d901ee79f376a6d2ffd8c } // Leaves end - bot can't get advancement diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index bf56d8f6a8fe06c5a356befa14d7eebf9af9460d..de8bf759b74c8969d12b38c952f48633966d5b74 100644 +index ca3419c659e230bc43a86b17ae7dae4982c4ac3d..26106dda0dfd70071994e329e8894b6f17a16a89 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java @@ -300,7 +300,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl @@ -334,7 +334,7 @@ index d9848bbe9c1874f85c4d774e24fea60261251ccb..42f54487ba2a6afbdacf0f1de0f9161c this.server.getCustomBossEvents().onPlayerDisconnect(entityplayer); UUID uuid = entityplayer.getUUID(); diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 6b2c19f3ea4fb8e2f6afc165ece6d0c66ba59a75..de36a75a68915f87573280600ad5b52d6b344555 100644 +index cb54b576d71f4b9c0a64199e03e99b1a8f2a1832..324429bc3ab08a62f720a4f7d5e31ea68b30668b 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -260,6 +260,7 @@ import org.yaml.snakeyaml.error.MarkedYAMLException; @@ -362,7 +362,7 @@ index 6b2c19f3ea4fb8e2f6afc165ece6d0c66ba59a75..de36a75a68915f87573280600ad5b52d @Override public CraftPlayer apply(ServerPlayer player) { return player.getBukkitEntity(); -@@ -3252,4 +3254,11 @@ public final class CraftServer implements Server { +@@ -3249,4 +3251,11 @@ public final class CraftServer implements Server { return botManager; } // Leaves end - Bot API diff --git a/patches/server/0126-Linear-region-file-format.patch b/patches/server/0126-Linear-region-file-format.patch index de752bda..7de96a89 100644 --- a/patches/server/0126-Linear-region-file-format.patch +++ b/patches/server/0126-Linear-region-file-format.patch @@ -21,25 +21,13 @@ index ca79034c1f044a9096de65b0936971c4fd68eb32..990dc1fdd1bffa6bc96f7b325d3e12d5 implementation("org.ow2.asm:asm-commons:9.5") implementation("org.spongepowered:configurate-yaml:4.2.0-SNAPSHOT") // Paper - config files diff --git a/src/main/java/com/destroystokyo/paper/io/PaperFileIOThread.java b/src/main/java/com/destroystokyo/paper/io/PaperFileIOThread.java -index f2c27e0ac65be4b75c1d86ef6fd45fdb538d96ac..036da95df5280e547e60d3b4641dad63ec15c224 100644 ---- a/src/main/java/com/destroystokyo/paper/io/PaperFileIOThread.java -+++ b/src/main/java/com/destroystokyo/paper/io/PaperFileIOThread.java -@@ -314,8 +314,8 @@ public final class PaperFileIOThread extends QueueExecutorThread { - public abstract void writeData(final int x, final int z, final CompoundTag compound) throws IOException; - public abstract CompoundTag readData(final int x, final int z) throws IOException; - -- public abstract T computeForRegionFile(final int chunkX, final int chunkZ, final Function function); -- public abstract T computeForRegionFileIfLoaded(final int chunkX, final int chunkZ, final Function function); -+ public abstract T computeForRegionFile(final int chunkX, final int chunkZ, final Function function); // Leaves -+ public abstract T computeForRegionFileIfLoaded(final int chunkX, final int chunkZ, final Function function); // Leaves - - public static final class InProgressWrite { - public long writeCounter; +new file mode 100644 +index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/src/main/java/io/papermc/paper/chunk/system/io/RegionFileIOThread.java b/src/main/java/io/papermc/paper/chunk/system/io/RegionFileIOThread.java -index 8a11e10b01fa012b2f98b1c193c53251e848f909..17057486c031708d3aab82a01031cfef426076da 100644 +index 2934f0cf0ef09c84739312b00186c2ef0019a165..ad909f888c8eb6fa8d4ebeeebdc538aee749346d 100644 --- a/src/main/java/io/papermc/paper/chunk/system/io/RegionFileIOThread.java +++ b/src/main/java/io/papermc/paper/chunk/system/io/RegionFileIOThread.java -@@ -811,7 +811,7 @@ public final class RegionFileIOThread extends PrioritisedQueueExecutorThread { +@@ -816,7 +816,7 @@ public final class RegionFileIOThread extends PrioritisedQueueExecutorThread { final ChunkDataController taskController) { final ChunkPos chunkPos = new ChunkPos(chunkX, chunkZ); if (intendingToBlock) { @@ -48,7 +36,7 @@ index 8a11e10b01fa012b2f98b1c193c53251e848f909..17057486c031708d3aab82a01031cfef if (file == null) { // null if no regionfile exists return Boolean.FALSE; } -@@ -824,7 +824,7 @@ public final class RegionFileIOThread extends PrioritisedQueueExecutorThread { +@@ -829,7 +829,7 @@ public final class RegionFileIOThread extends PrioritisedQueueExecutorThread { return Boolean.FALSE; } // else: it either exists or is not known, fall back to checking the loaded region file @@ -57,7 +45,7 @@ index 8a11e10b01fa012b2f98b1c193c53251e848f909..17057486c031708d3aab82a01031cfef if (file == null) { // null if not loaded // not sure at this point, let the I/O thread figure it out return Boolean.TRUE; -@@ -1126,9 +1126,9 @@ public final class RegionFileIOThread extends PrioritisedQueueExecutorThread { +@@ -1131,9 +1131,9 @@ public final class RegionFileIOThread extends PrioritisedQueueExecutorThread { return this.getCache().doesRegionFileNotExistNoIO(new ChunkPos(chunkX, chunkZ)); } @@ -69,7 +57,7 @@ index 8a11e10b01fa012b2f98b1c193c53251e848f909..17057486c031708d3aab82a01031cfef synchronized (cache) { try { regionFile = cache.getRegionFile(new ChunkPos(chunkX, chunkZ), existingOnly, true); -@@ -1141,19 +1141,19 @@ public final class RegionFileIOThread extends PrioritisedQueueExecutorThread { +@@ -1146,19 +1146,19 @@ public final class RegionFileIOThread extends PrioritisedQueueExecutorThread { return function.apply(regionFile); } finally { if (regionFile != null) { @@ -93,7 +81,7 @@ index 8a11e10b01fa012b2f98b1c193c53251e848f909..17057486c031708d3aab82a01031cfef } } -@@ -1161,7 +1161,7 @@ public final class RegionFileIOThread extends PrioritisedQueueExecutorThread { +@@ -1166,7 +1166,7 @@ public final class RegionFileIOThread extends PrioritisedQueueExecutorThread { return function.apply(regionFile); } finally { if (regionFile != null) { @@ -103,10 +91,10 @@ index 8a11e10b01fa012b2f98b1c193c53251e848f909..17057486c031708d3aab82a01031cfef } } diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java -index 89be9c19db11c9fda0bc21a7f3d30493913e4d3c..e718e1a439dc3e5aef6edd005ba077a09b491260 100644 +index 3d682670ae0ae6da7492633d2688dc31086e3665..246dc8c02e096c385931edc4ff0765d61ced7877 100644 --- a/src/main/java/net/minecraft/server/level/ChunkMap.java +++ b/src/main/java/net/minecraft/server/level/ChunkMap.java -@@ -860,13 +860,13 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider +@@ -854,13 +854,13 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider } public ChunkStatus getChunkStatusOnDiskIfCached(ChunkPos chunkPos) { @@ -122,7 +110,7 @@ index 89be9c19db11c9fda0bc21a7f3d30493913e4d3c..e718e1a439dc3e5aef6edd005ba077a0 if (regionFile == null || !regionFileCache.chunkExists(chunkPos)) { return null; -@@ -884,7 +884,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider +@@ -878,7 +878,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider } public void updateChunkStatusOnDisk(ChunkPos chunkPos, @Nullable CompoundTag compound) throws IOException { @@ -227,7 +215,7 @@ index 6cf83502a954cce9c562ec036bfeddb477d38b73..d43c41d377dd04d0babb99170203e2f5 try (DataInputStream out = new DataInputStream(new java.io.BufferedInputStream(new InflaterInputStream(Files.newInputStream(file))))) { return NbtIo.read((java.io.DataInput) out); diff --git a/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileStorage.java b/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileStorage.java -index 30d4efc896fe8b2ec0e8b091045c7d07f952b00b..8718b525a84f717a6c2ee9cc6cef8dfd826df8b9 100644 +index fe312b1aef579cb4bf81bdd967cf72ff880d7505..8a313a13371109d388b30f40beff6a0d1c798570 100644 --- a/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileStorage.java +++ b/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileStorage.java @@ -21,9 +21,14 @@ public class RegionFileStorage implements AutoCloseable { @@ -326,7 +314,7 @@ index 30d4efc896fe8b2ec0e8b091045c7d07f952b00b..8718b525a84f717a6c2ee9cc6cef8dfd @@ -123,28 +153,46 @@ public class RegionFileStorage implements AutoCloseable { } // Paper end - cache regionfile does not exist state - if (this.regionCache.size() >= io.papermc.paper.configuration.GlobalConfiguration.get().misc.regionFileCacheSize) { // Paper - Sanitise RegionFileCache and make configurable. + if (this.regionCache.size() >= io.papermc.paper.configuration.GlobalConfiguration.get().misc.regionFileCacheSize) { // Paper - Sanitise RegionFileCache and make configurable - ((RegionFile) this.regionCache.removeLast()).close(); + this.regionCache.removeLast().close(); // Leaves } @@ -445,25 +433,25 @@ index 30d4efc896fe8b2ec0e8b091045c7d07f952b00b..8718b525a84f717a6c2ee9cc6cef8dfd if (regionfile == null) { return; } -@@ -297,7 +345,7 @@ public class RegionFileStorage implements AutoCloseable { - } +@@ -298,7 +346,7 @@ public class RegionFileStorage implements AutoCloseable { protected void write(ChunkPos pos, @Nullable CompoundTag nbt) throws IOException { -- RegionFile regionfile = this.getRegionFile(pos, nbt == null, true); // CraftBukkit // Paper // Paper start - rewrite chunk system + // Paper start - rewrite chunk system +- RegionFile regionfile = this.getRegionFile(pos, nbt == null, true); // CraftBukkit + top.leavesmc.leaves.region.AbstractRegionFile regionfile = this.getRegionFile(pos, nbt == null, true); // CraftBukkit // Paper // Paper start - rewrite chunk system // Leaves if (nbt == null && regionfile == null) { return; } -@@ -347,7 +395,7 @@ public class RegionFileStorage implements AutoCloseable { - } +@@ -353,7 +401,7 @@ public class RegionFileStorage implements AutoCloseable { // Paper end - Chunk save reattempt - } finally { // Paper start + // Paper start - rewrite chunk system + } finally { - regionfile.fileLock.unlock(); + regionfile.getFileLock().unlock(); // Leaves - } // Paper end + } + // Paper end - rewrite chunk system } - -@@ -356,7 +404,7 @@ public class RegionFileStorage implements AutoCloseable { +@@ -363,7 +411,7 @@ public class RegionFileStorage implements AutoCloseable { ObjectIterator objectiterator = this.regionCache.values().iterator(); while (objectiterator.hasNext()) { @@ -472,7 +460,7 @@ index 30d4efc896fe8b2ec0e8b091045c7d07f952b00b..8718b525a84f717a6c2ee9cc6cef8dfd try { regionfile.close(); -@@ -372,7 +420,7 @@ public class RegionFileStorage implements AutoCloseable { +@@ -379,7 +427,7 @@ public class RegionFileStorage implements AutoCloseable { ObjectIterator objectiterator = this.regionCache.values().iterator(); while (objectiterator.hasNext()) { @@ -482,10 +470,10 @@ index 30d4efc896fe8b2ec0e8b091045c7d07f952b00b..8718b525a84f717a6c2ee9cc6cef8dfd regionfile.flush(); } diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -index aa0a1cbbbd4f2f027e24a4166bd5be4009c2ac3e..eedc10b3fd0ae2da321d66d1b08f55edf031accf 100644 +index 948a4595d2c3fe91295bef0001d99521403f7a26..ea375449c93d802c63ea697cefb0a39cba79d001 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -@@ -565,7 +565,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { +@@ -567,7 +567,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { world.getChunk(x, z); // make sure we're at ticket level 32 or lower return true; } diff --git a/patches/server/0129-Placing-locked-hopper-no-longer-send-NC-updates.patch b/patches/server/0129-Placing-locked-hopper-no-longer-send-NC-updates.patch index f4c048a4..6bcf3773 100644 --- a/patches/server/0129-Placing-locked-hopper-no-longer-send-NC-updates.patch +++ b/patches/server/0129-Placing-locked-hopper-no-longer-send-NC-updates.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Placing locked hopper no longer send NC updates diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index ce85d69027cbfb06666c9242576d3abbd7cc2831..bf2cf885552249765f005086750a8457c0949c49 100644 +index 1fb210a4af574ba5ad54a547e3965a3a45b9cea9..15e54727f24f682ecce289725f1c82ca69537ec6 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java @@ -51,6 +51,7 @@ import net.minecraft.world.level.biome.BiomeManager; @@ -16,7 +16,7 @@ index ce85d69027cbfb06666c9242576d3abbd7cc2831..bf2cf885552249765f005086750a8457 import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.TickingBlockEntity; import net.minecraft.world.level.block.state.BlockState; -@@ -1029,7 +1030,9 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -1025,7 +1026,9 @@ public abstract class Level implements LevelAccessor, AutoCloseable { } if ((i & 1) != 0) {