From 7c90e3e27e92c3bb7014be604651f4df59f71656 Mon Sep 17 00:00:00 2001 From: FunixG Date: Sun, 13 Oct 2024 14:45:13 +0200 Subject: [PATCH 1/2] Update Paper --- gradle.properties | 2 +- ...to-be-explicitly-marked-as-Folia-sup.patch | 8 +- ...king-ownership-of-region-by-position.patch | 4 +- patches/server/0001-Build-changes.patch | 2 +- patches/server/0003-Threaded-Regions.patch | 526 +++++++++--------- patches/server/0004-Max-pending-logins.patch | 6 +- ...-getHandle-and-overrides-perform-thr.patch | 28 +- ...edOperationException-for-broken-APIs.patch | 2 +- ...dates-in-non-loaded-or-non-owned-chu.patch | 4 +- ...access-when-waking-players-up-during.patch | 6 +- ...ition-to-player-position-on-player-d.patch | 2 +- patches/server/0017-Region-profiler.patch | 12 +- .../server/0018-Disable-spark-profiler.patch | 6 +- 13 files changed, 297 insertions(+), 311 deletions(-) diff --git a/gradle.properties b/gradle.properties index 4d1fc22e7b..f06fc613d8 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ group=dev.folia version=1.21.1-R0.1-SNAPSHOT mcVersion=1.21.1 -paperRef=25621248d3f30f35c3458b4b13a2474ffd0bee0e +paperRef=4430e96e1b82f3e8244a5c979afb7a69f38222aa org.gradle.caching=true org.gradle.parallel=true diff --git a/patches/api/0003-Require-plugins-to-be-explicitly-marked-as-Folia-sup.patch b/patches/api/0003-Require-plugins-to-be-explicitly-marked-as-Folia-sup.patch index f992d10722..77c6b4330f 100644 --- a/patches/api/0003-Require-plugins-to-be-explicitly-marked-as-Folia-sup.patch +++ b/patches/api/0003-Require-plugins-to-be-explicitly-marked-as-Folia-sup.patch @@ -14,12 +14,12 @@ more helpful than some random error log caused by a breakage. diff --git a/src/main/java/io/papermc/paper/plugin/configuration/PluginMeta.java b/src/main/java/io/papermc/paper/plugin/configuration/PluginMeta.java -index bcf91d048d84144f6acf9bfd2095df9ada2e585f..3072f95dc1cafb47c1820dc67c8d24991540fc4a 100644 +index 3c768d5ccf490e962d9638e92d4ea7c85670bad8..2dbc9fc268850c85e4e8d38da05586a004862c76 100644 --- a/src/main/java/io/papermc/paper/plugin/configuration/PluginMeta.java +++ b/src/main/java/io/papermc/paper/plugin/configuration/PluginMeta.java -@@ -200,4 +200,12 @@ public interface PluginMeta { - @Nullable - String getAPIVersion(); +@@ -183,4 +183,12 @@ public interface PluginMeta { + */ + @Nullable String getAPIVersion(); + // Folia start - block plugins not marked as supported + /** diff --git a/patches/api/0005-Add-API-for-checking-ownership-of-region-by-position.patch b/patches/api/0005-Add-API-for-checking-ownership-of-region-by-position.patch index e47a0cbc24..a6cb57fea4 100644 --- a/patches/api/0005-Add-API-for-checking-ownership-of-region-by-position.patch +++ b/patches/api/0005-Add-API-for-checking-ownership-of-region-by-position.patch @@ -11,7 +11,7 @@ the schedulers depending on the result of the ownership check. diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java -index 419c056faf0d49d9b0435feb01252e87e227b9a9..63eb35aebc4551355ea1ea5cd1305d93502f0dbc 100644 +index e20e4239a5a1f952e1c70e899549989d5e42f73c..60ac226b58981155649b7d67c11385a0c105eca0 100644 --- a/src/main/java/org/bukkit/Bukkit.java +++ b/src/main/java/org/bukkit/Bukkit.java @@ -2916,6 +2916,14 @@ public final class Bukkit { @@ -30,7 +30,7 @@ index 419c056faf0d49d9b0435feb01252e87e227b9a9..63eb35aebc4551355ea1ea5cd1305d93 @NotNull public static Server.Spigot spigot() { diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java -index 5aa64ea39ebd92e5067c53cea49a8685c0b9eee4..8a7ba7d14f20b8169854daaf26e8f4da4563f166 100644 +index 6246251caf2c6f025c824b8e7a944b8d48751fa1..10f6eb1756de71960f1c0565366d5f262c7641f1 100644 --- a/src/main/java/org/bukkit/Server.java +++ b/src/main/java/org/bukkit/Server.java @@ -2554,4 +2554,10 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi diff --git a/patches/server/0001-Build-changes.patch b/patches/server/0001-Build-changes.patch index c61fc4d8ce..5c1b45316b 100644 --- a/patches/server/0001-Build-changes.patch +++ b/patches/server/0001-Build-changes.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Build changes diff --git a/build.gradle.kts b/build.gradle.kts -index 3588770a9ea6ee0a9508b218758650f43d994715..a663cfec76f4deddb7cf8d2f134bedfa1a3cde66 100644 +index 648281575eb8d45a5c06549eb3d0f517c086fe64..a0ecdc999a17ad7e909e22da31389b0f225a2a95 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -13,7 +13,7 @@ configurations.named(log4jPlugins.compileClasspathConfigurationName) { diff --git a/patches/server/0003-Threaded-Regions.patch b/patches/server/0003-Threaded-Regions.patch index 4be9f4393f..cc66c877d8 100644 --- a/patches/server/0003-Threaded-Regions.patch +++ b/patches/server/0003-Threaded-Regions.patch @@ -973,10 +973,10 @@ index 9f17170179cc99d84ad25a1e838aff3d8cc66f93..780c31121ea62d986fe6918c095f6179 // The variable 'k' holds the maximum redstone power value of any adjacent blocks. // If 'k' has the highest level of all neighbors, then the power level of this diff --git a/src/main/java/io/papermc/paper/SparksFly.java b/src/main/java/io/papermc/paper/SparksFly.java -index 19ee43e1ca053574a0151b4c43b01972183657e6..c7c396a7a94c35d973eb0796f8aba6e669ed5b7c 100644 +index 2955b7ec9832a5752ea4aff9fc9d34ae2f9ee83e..19c4aa20617f555d02f9c1c5a93b7204ab7251d8 100644 --- a/src/main/java/io/papermc/paper/SparksFly.java +++ b/src/main/java/io/papermc/paper/SparksFly.java -@@ -46,7 +46,7 @@ public final class SparksFly { +@@ -47,7 +47,7 @@ public final class SparksFly { @Override public void executeSync(final Runnable runnable) { @@ -1120,10 +1120,10 @@ index bd68139ae635f2ad7ec8e7a21e0056a139c4c62e..48a43341b17247355a531164019d5cc9 } diff --git a/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java b/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java -index 690086adcb1f87adc0b3ab664fde735ad3e1093a..155ea12a82c94e513fbb6090b209b14a8df5ef97 100644 +index a9dd0e5216e95afd98fd2200d110e2cc0b1b0dca..a7757603bef0686b3f0debe4a94602f27373534f 100644 --- a/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java +++ b/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java -@@ -357,4 +357,18 @@ public class GlobalConfiguration extends ConfigurationPart { +@@ -364,4 +364,18 @@ public class GlobalConfiguration extends ConfigurationPart { public boolean disableChorusPlantUpdates = false; public boolean disableMushroomBlockUpdates = false; } @@ -1143,10 +1143,10 @@ index 690086adcb1f87adc0b3ab664fde735ad3e1093a..155ea12a82c94e513fbb6090b209b14a + // Folia end - threaded regions } diff --git a/src/main/java/io/papermc/paper/configuration/WorldConfiguration.java b/src/main/java/io/papermc/paper/configuration/WorldConfiguration.java -index aa3624fb8aaaf2720aaef7800f537dd4b906797f..aa0f756aac5b9119aaf0070095953402f82bbbc5 100644 +index fd3b1c10695634f65c7291016bf671c084bc4d57..412f75af328c65eaccd52570915289d6d411b6fd 100644 --- a/src/main/java/io/papermc/paper/configuration/WorldConfiguration.java +++ b/src/main/java/io/papermc/paper/configuration/WorldConfiguration.java -@@ -494,6 +494,14 @@ public class WorldConfiguration extends ConfigurationPart { +@@ -497,6 +497,14 @@ public class WorldConfiguration extends ConfigurationPart { public Chunks chunks; public class Chunks extends ConfigurationPart { @@ -7492,7 +7492,7 @@ index 2d344df35d47b4b1ecddf32ccaa4dae41e5f58cb..8263a1134582675e67afd5ee07c6d3d0 protected CommandSourceStack(CommandSource output, Vec3 pos, Vec2 rot, ServerLevel world, int level, String name, Component displayName, MinecraftServer server, @Nullable Entity entity, boolean silent, CommandResultCallback resultStorer, EntityAnchorArgument.Anchor entityAnchor, CommandSigningContext signedArguments, TaskChainer messageChainTaskQueue) { diff --git a/src/main/java/net/minecraft/commands/Commands.java b/src/main/java/net/minecraft/commands/Commands.java -index 1d1e76de60e40224f5cb81893f9ee50fe987badb..460786301818da923664057c4cc0f5a76fcddd2c 100644 +index 5af48400f87500166dd889c57a8df0aadb08d43d..442a5b557e5867038fcddf597951584faeedda80 100644 --- a/src/main/java/net/minecraft/commands/Commands.java +++ b/src/main/java/net/minecraft/commands/Commands.java @@ -159,13 +159,13 @@ public class Commands { @@ -7587,7 +7587,7 @@ index 1d1e76de60e40224f5cb81893f9ee50fe987badb..460786301818da923664057c4cc0f5a7 SaveOffCommand.register(this.dispatcher); SaveOnCommand.register(this.dispatcher); SetPlayerIdleTimeoutCommand.register(this.dispatcher); -@@ -507,9 +507,12 @@ public class Commands { +@@ -501,9 +501,12 @@ public class Commands { } // Paper start - Perf: Async command map building new com.destroystokyo.paper.event.brigadier.AsyncPlayerSendCommandsEvent(player.getBukkitEntity(), (RootCommandNode) rootcommandnode, false).callEvent(); // Paper - Brigadier API @@ -8196,7 +8196,7 @@ index e2c24813f59c2fd075c740ac1842a38f20ed8554..fbc619a132c6ca6b1abab51ac230be29 } } diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 23ddd26af762c1cd7fb3920669abb96b3213ab37..eda5f0d099f9f8621de8ad7808098abf6f5cb544 100644 +index 696d075ca2883f3c37e35f983c4d020e5db89d16..eda5f0d099f9f8621de8ad7808098abf6f5cb544 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -210,7 +210,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop processQueue = new java.util.concurrent.ConcurrentLinkedQueue(); public int autosavePeriod; // Paper - don't store the vanilla dispatcher -@@ -317,13 +316,41 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop S spin(Function serverFactory) { AtomicReference atomicreference = new AtomicReference(); Thread thread = new ca.spottedleaf.moonrise.common.util.TickThread(() -> { // Paper - rewrite chunk system -@@ -357,46 +384,30 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 0 ? Mth.square(ChunkProgressListener.calculateDiameter(i)) : 0; @@ -8407,7 +8406,7 @@ index 23ddd26af762c1cd7fb3920669abb96b3213ab37..eda5f0d099f9f8621de8ad7808098abf // Iterator iterator = this.levels.values().iterator(); if (true) { -@@ -922,7 +945,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop { String s = String.valueOf(worldserver); -@@ -1803,7 +1877,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop getBlockTicks() { @@ -11605,7 +11603,7 @@ index 2fe9d9b38c01d04416843fdd48d3e33899b7de63..489b0019a859462756634a144952eb7e } @Nonnull -@@ -1859,7 +2015,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. +@@ -1861,7 +2017,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. public int sendParticles(ServerPlayer sender, T t0, double d0, double d1, double d2, int i, double d3, double d4, double d5, double d6, boolean force) { // Paper start - Particle API @@ -11614,7 +11612,7 @@ index 2fe9d9b38c01d04416843fdd48d3e33899b7de63..489b0019a859462756634a144952eb7e } public int sendParticles(List receivers, @Nullable ServerPlayer sender, T t0, double d0, double d1, double d2, int i, double d3, double d4, double d5, double d6, boolean force) { // Paper end - Particle API -@@ -1912,7 +2068,14 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. +@@ -1914,7 +2070,14 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. public Entity getEntityOrPart(int id) { Entity entity = (Entity) this.getEntities().get(id); @@ -11630,7 +11628,7 @@ index 2fe9d9b38c01d04416843fdd48d3e33899b7de63..489b0019a859462756634a144952eb7e } @Nullable -@@ -1967,6 +2130,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. +@@ -1969,6 +2132,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. // Paper start - Call missing map initialize event and set id final DimensionDataStorage storage = this.getServer().overworld().getDataStorage(); @@ -11638,7 +11636,7 @@ index 2fe9d9b38c01d04416843fdd48d3e33899b7de63..489b0019a859462756634a144952eb7e final net.minecraft.world.level.saveddata.SavedData existing = storage.cache.get(id.key()); if (existing == null && !storage.cache.containsKey(id.key())) { final MapItemSavedData worldmap = (MapItemSavedData) this.getServer().overworld().getDataStorage().get(MapItemSavedData.factory(), id.key()); -@@ -1981,6 +2145,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. +@@ -1983,6 +2147,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. } return existing instanceof MapItemSavedData data ? data : null; @@ -11646,7 +11644,7 @@ index 2fe9d9b38c01d04416843fdd48d3e33899b7de63..489b0019a859462756634a144952eb7e // Paper end - Call missing map initialize event and set id } -@@ -2030,6 +2195,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. +@@ -2032,6 +2197,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. } public boolean setChunkForced(int x, int z, boolean forced) { @@ -11654,7 +11652,7 @@ index 2fe9d9b38c01d04416843fdd48d3e33899b7de63..489b0019a859462756634a144952eb7e ForcedChunksSavedData forcedchunk = (ForcedChunksSavedData) this.getDataStorage().computeIfAbsent(ForcedChunksSavedData.factory(), "chunks"); ChunkPos chunkcoordintpair = new ChunkPos(x, z); long k = chunkcoordintpair.toLong(); -@@ -2038,7 +2204,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. +@@ -2040,7 +2206,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. if (forced) { flag1 = forcedchunk.getChunks().add(k); if (flag1) { @@ -11663,7 +11661,7 @@ index 2fe9d9b38c01d04416843fdd48d3e33899b7de63..489b0019a859462756634a144952eb7e } } else { flag1 = forcedchunk.getChunks().remove(k); -@@ -2066,13 +2232,18 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. +@@ -2068,13 +2234,18 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. BlockPos blockposition1 = pos.immutable(); optional.ifPresent((holder) -> { @@ -11685,7 +11683,7 @@ index 2fe9d9b38c01d04416843fdd48d3e33899b7de63..489b0019a859462756634a144952eb7e // Paper start - Remove stale POIs if (optional.isEmpty() && this.getPoiManager().exists(blockposition1, poiType -> true)) { this.getPoiManager().remove(blockposition1); -@@ -2080,7 +2251,12 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. +@@ -2082,7 +2253,12 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. // Paper end - Remove stale POIs this.getPoiManager().add(blockposition1, holder); DebugPackets.sendPoiAddedPacket(this, blockposition1); @@ -11699,7 +11697,7 @@ index 2fe9d9b38c01d04416843fdd48d3e33899b7de63..489b0019a859462756634a144952eb7e }); } } -@@ -2127,7 +2303,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. +@@ -2129,7 +2305,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. BufferedWriter bufferedwriter = Files.newBufferedWriter(path.resolve("stats.txt")); try { @@ -11708,7 +11706,7 @@ index 2fe9d9b38c01d04416843fdd48d3e33899b7de63..489b0019a859462756634a144952eb7e NaturalSpawner.SpawnState spawnercreature_d = this.getChunkSource().getLastSpawnState(); if (spawnercreature_d != null) { -@@ -2141,7 +2317,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. +@@ -2143,7 +2319,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. } bufferedwriter.write(String.format(Locale.ROOT, "entities: %s\n", this.moonrise$getEntityLookup().getDebugInfo())); // Paper - rewrite chunk system @@ -11717,7 +11715,7 @@ index 2fe9d9b38c01d04416843fdd48d3e33899b7de63..489b0019a859462756634a144952eb7e bufferedwriter.write(String.format(Locale.ROOT, "block_ticks: %d\n", this.getBlockTicks().count())); bufferedwriter.write(String.format(Locale.ROOT, "fluid_ticks: %d\n", this.getFluidTicks().count())); bufferedwriter.write("distance_manager: " + playerchunkmap.getDistanceManager().getDebugStatus() + "\n"); -@@ -2287,7 +2463,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. +@@ -2289,7 +2465,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. private void dumpBlockEntityTickers(Writer writer) throws IOException { CsvOutput csvwriter = CsvOutput.builder().addColumn("x").addColumn("y").addColumn("z").addColumn("type").build(writer); @@ -11726,7 +11724,7 @@ index 2fe9d9b38c01d04416843fdd48d3e33899b7de63..489b0019a859462756634a144952eb7e while (iterator.hasNext()) { TickingBlockEntity tickingblockentity = (TickingBlockEntity) iterator.next(); -@@ -2300,7 +2476,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. +@@ -2302,7 +2478,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. @VisibleForTesting public void clearBlockEvents(BoundingBox box) { @@ -11735,7 +11733,7 @@ index 2fe9d9b38c01d04416843fdd48d3e33899b7de63..489b0019a859462756634a144952eb7e return box.isInside(blockactiondata.pos()); }); } -@@ -2309,7 +2485,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. +@@ -2311,7 +2487,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. public void blockUpdated(BlockPos pos, Block block) { if (!this.isDebug()) { // CraftBukkit start @@ -11744,7 +11742,7 @@ index 2fe9d9b38c01d04416843fdd48d3e33899b7de63..489b0019a859462756634a144952eb7e return; } // CraftBukkit end -@@ -2352,9 +2528,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. +@@ -2354,9 +2530,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. @VisibleForTesting public String getWatchdogStats() { @@ -11755,7 +11753,7 @@ index 2fe9d9b38c01d04416843fdd48d3e33899b7de63..489b0019a859462756634a144952eb7e } private static String getTypeCount(Iterable items, Function classifier) { -@@ -2404,17 +2578,18 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. +@@ -2406,17 +2580,18 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. } public void startTickingChunk(LevelChunk chunk) { @@ -11779,7 +11777,7 @@ index 2fe9d9b38c01d04416843fdd48d3e33899b7de63..489b0019a859462756634a144952eb7e } @Override -@@ -2434,7 +2609,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. +@@ -2436,7 +2611,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. return this.moonrise$getAnyChunkIfLoaded(ca.spottedleaf.moonrise.common.util.CoordinateUtils.getChunkX(chunkPos), ca.spottedleaf.moonrise.common.util.CoordinateUtils.getChunkZ(chunkPos)) != null; // Paper - rewrite chunk system } @@ -11788,7 +11786,7 @@ index 2fe9d9b38c01d04416843fdd48d3e33899b7de63..489b0019a859462756634a144952eb7e // Paper start - rewrite chunk system final ca.spottedleaf.moonrise.patches.chunk_system.scheduling.NewChunkHolder chunkHolder = this.moonrise$getChunkTaskScheduler().chunkHolderManager.getChunkHolder(chunkPos); // isTicking implies the chunk is loaded, and the chunk is loaded now implies the entities are loaded -@@ -2494,7 +2669,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. +@@ -2496,7 +2671,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. // Paper start - optimize redstone (Alternate Current) @Override public alternate.current.wire.WireHandler getWireHandler() { @@ -11797,7 +11795,7 @@ index 2fe9d9b38c01d04416843fdd48d3e33899b7de63..489b0019a859462756634a144952eb7e } // Paper end - optimize redstone (Alternate Current) -@@ -2505,16 +2680,16 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. +@@ -2507,16 +2682,16 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. public void onCreated(Entity entity) {} public void onDestroyed(Entity entity) { @@ -11817,7 +11815,7 @@ index 2fe9d9b38c01d04416843fdd48d3e33899b7de63..489b0019a859462756634a144952eb7e // Paper start - Reset pearls when they stop being ticked if (paperConfig().fixes.disableUnloadedChunkEnderpearlExploit && entity instanceof net.minecraft.world.entity.projectile.ThrownEnderpearl pearl) { pearl.cachedOwner = null; -@@ -2525,6 +2700,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. +@@ -2527,6 +2702,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. public void onTrackingStart(Entity entity) { org.spigotmc.AsyncCatcher.catchOp("entity register"); // Spigot @@ -11825,7 +11823,7 @@ index 2fe9d9b38c01d04416843fdd48d3e33899b7de63..489b0019a859462756634a144952eb7e // ServerLevel.this.getChunkSource().addEntity(entity); // Paper - ignore and warn about illegal addEntity calls instead of crashing server; moved down below valid=true if (entity instanceof ServerPlayer entityplayer) { ServerLevel.this.players.add(entityplayer); -@@ -2538,7 +2714,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. +@@ -2540,7 +2716,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. Util.logAndPauseIfInIde("onTrackingStart called during navigation iteration", new IllegalStateException("onTrackingStart called during navigation iteration")); } @@ -11834,7 +11832,7 @@ index 2fe9d9b38c01d04416843fdd48d3e33899b7de63..489b0019a859462756634a144952eb7e } if (entity instanceof EnderDragon entityenderdragon) { -@@ -2548,7 +2724,9 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. +@@ -2550,7 +2726,9 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. for (int j = 0; j < i; ++j) { EnderDragonPart entitycomplexpart = aentitycomplexpart[j]; @@ -11844,7 +11842,7 @@ index 2fe9d9b38c01d04416843fdd48d3e33899b7de63..489b0019a859462756634a144952eb7e } } -@@ -2570,16 +2748,24 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. +@@ -2572,16 +2750,24 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. public void onTrackingEnd(Entity entity) { org.spigotmc.AsyncCatcher.catchOp("entity unregister"); // Spigot @@ -11870,7 +11868,7 @@ index 2fe9d9b38c01d04416843fdd48d3e33899b7de63..489b0019a859462756634a144952eb7e map.carriedByPlayers.remove( (Player) entity ); for ( Iterator iter = (Iterator) map.carriedBy.iterator(); iter.hasNext(); ) { -@@ -2589,6 +2775,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. +@@ -2591,6 +2777,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. iter.remove(); } } @@ -11878,7 +11876,7 @@ index 2fe9d9b38c01d04416843fdd48d3e33899b7de63..489b0019a859462756634a144952eb7e } } } ); -@@ -2619,7 +2806,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. +@@ -2621,7 +2808,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. Util.logAndPauseIfInIde("onTrackingStart called during navigation iteration", new IllegalStateException("onTrackingStart called during navigation iteration")); } @@ -11887,7 +11885,7 @@ index 2fe9d9b38c01d04416843fdd48d3e33899b7de63..489b0019a859462756634a144952eb7e } if (entity instanceof EnderDragon entityenderdragon) { -@@ -2629,13 +2816,16 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. +@@ -2631,13 +2818,16 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. for (int j = 0; j < i; ++j) { EnderDragonPart entitycomplexpart = aentitycomplexpart[j]; @@ -11905,7 +11903,7 @@ index 2fe9d9b38c01d04416843fdd48d3e33899b7de63..489b0019a859462756634a144952eb7e for (ServerPlayer player : ServerLevel.this.players) { player.getBukkitEntity().onEntityRemove(entity); diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 6c280abdef5f80b668d6090f9d35283a33e21e0c..9f379fd5f3999e64c9b37851316ecd9069e19201 100644 +index c396580a9cfd86ff261bed439bb4662ae88010b5..2f55541136976a8a04a657d87a658b11a1e1db2f 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java @@ -15,6 +15,7 @@ import java.util.Objects; @@ -12412,7 +12410,7 @@ index 6c280abdef5f80b668d6090f9d35283a33e21e0c..9f379fd5f3999e64c9b37851316ecd90 @Nullable @Override public Entity changeDimension(DimensionTransition teleportTarget) { -@@ -2365,6 +2837,12 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple +@@ -2369,6 +2841,12 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple public void setCamera(@Nullable Entity entity) { Entity entity1 = this.getCamera(); @@ -12425,7 +12423,7 @@ index 6c280abdef5f80b668d6090f9d35283a33e21e0c..9f379fd5f3999e64c9b37851316ecd90 this.camera = (Entity) (entity == null ? this : entity); if (entity1 != this.camera) { // Paper start - Add PlayerStartSpectatingEntityEvent and PlayerStopSpectatingEntity -@@ -2918,7 +3396,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple +@@ -2922,7 +3400,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple this.experienceLevel = this.newLevel; this.totalExperience = this.newTotalExp; this.experienceProgress = 0; @@ -12435,7 +12433,7 @@ index 6c280abdef5f80b668d6090f9d35283a33e21e0c..9f379fd5f3999e64c9b37851316ecd90 this.removeAllEffects(org.bukkit.event.entity.EntityPotionEffectEvent.Cause.DEATH); this.effectsDirty = true; diff --git a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java -index cc01ead133cc6859ca5d7a1d0ac3c12955e590da..41fe0aeb3b74499ebce944fd43c3b4e9aec8b821 100644 +index ee9e4521079137d7b72194e8789810e7a89b8e75..3669dbb613570feb953178389e098f0eb1376d47 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java @@ -133,7 +133,7 @@ public class ServerPlayerGameMode { @@ -12523,10 +12521,10 @@ index 5a8a33638ceb1d980ffc3e6dd86e7eb11dfd9375..67b45f2916fa061e7430c6f3987bdb25 public boolean isOldChunkAround(ChunkPos chunkPos, int checkRadius) { diff --git a/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java -index b43f87ff4b9853b5d4bbea5ff9686d64d9d0d26b..d766bb360eb98bab1e067cad032b54fa6455f386 100644 +index 6998f32f8d79dbdb6b31ffaa126602fc4a428616..aae9002c0072f3ca6aefd10e9247116d0995e9b0 100644 --- a/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java -@@ -108,6 +108,10 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack +@@ -113,6 +113,10 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack } @@ -12537,7 +12535,7 @@ index b43f87ff4b9853b5d4bbea5ff9686d64d9d0d26b..d766bb360eb98bab1e067cad032b54fa @Override public void onDisconnect(DisconnectionDetails info) { // Paper start - Fix kick event leave message not being sent -@@ -115,10 +119,18 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack +@@ -120,10 +124,18 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack } public void onDisconnect(DisconnectionDetails info, @Nullable net.kyori.adventure.text.Component quitMessage) { // Paper end - Fix kick event leave message not being sent @@ -12556,7 +12554,7 @@ index b43f87ff4b9853b5d4bbea5ff9686d64d9d0d26b..d766bb360eb98bab1e067cad032b54fa } -@@ -132,9 +144,9 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack +@@ -137,9 +149,9 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack this.keepAlivePending = false; } else if (!this.isSingleplayerOwner()) { // Paper start - This needs to be handled on the main thread for plugins @@ -12568,7 +12566,7 @@ index b43f87ff4b9853b5d4bbea5ff9686d64d9d0d26b..d766bb360eb98bab1e067cad032b54fa // Paper end - This needs to be handled on the main thread for plugins } -@@ -346,24 +358,8 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack +@@ -351,24 +363,8 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack if (this.processedDisconnect) { return; } @@ -12595,7 +12593,7 @@ index b43f87ff4b9853b5d4bbea5ff9686d64d9d0d26b..d766bb360eb98bab1e067cad032b54fa return; } -@@ -396,7 +392,7 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack +@@ -401,7 +397,7 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack Objects.requireNonNull(this.connection); // CraftBukkit - Don't wait @@ -12677,10 +12675,10 @@ index 880e5c52746e9e3a9a1f42ec6461be54e3ee136c..34c7fbf154c42d07b3b317b13632243a ServerConfigurationPacketListenerImpl.LOGGER.error("Couldn't place player in world", exception); // Paper start - Debugging diff --git a/src/main/java/net/minecraft/server/network/ServerConnectionListener.java b/src/main/java/net/minecraft/server/network/ServerConnectionListener.java -index 8aff5129f85ab5729b3da2e465871be62d15bdf2..8044271ff01dfc6808f5a3b60be74f6ddeee1e8f 100644 +index 3a9e25b436f366fffe08c3b0c1fce11ed42ee646..ae88c6e2635b1608383f8c74813d723f7c6ffaf8 100644 --- a/src/main/java/net/minecraft/server/network/ServerConnectionListener.java +++ b/src/main/java/net/minecraft/server/network/ServerConnectionListener.java -@@ -161,10 +161,13 @@ public class ServerConnectionListener { +@@ -167,10 +167,13 @@ public class ServerConnectionListener { }); } // Paper end - Add support for proxy protocol @@ -12695,7 +12693,7 @@ index 8aff5129f85ab5729b3da2e465871be62d15bdf2..8044271ff01dfc6808f5a3b60be74f6d } }).group(eventloopgroup).localAddress(address)).option(ChannelOption.AUTO_READ, false).bind().syncUninterruptibly()); // CraftBukkit // Paper - Unix domain socket support } -@@ -226,7 +229,7 @@ public class ServerConnectionListener { +@@ -232,7 +235,7 @@ public class ServerConnectionListener { // Spigot Start this.addPending(); // Paper - prevent blocking on adding a new connection while the server is ticking // This prevents players from 'gaming' the server, and strategically relogging to increase their position in the tick order @@ -12705,7 +12703,7 @@ index 8aff5129f85ab5729b3da2e465871be62d15bdf2..8044271ff01dfc6808f5a3b60be74f6d Collections.shuffle( this.connections ); } diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 4320af392b7bd29d6a5d6da44361ffd0da16036a..804166bf2da81927ab449811be9fcf67e74eed00 100644 +index befeaac4786760f6847a5945da2296a3e68dbb17..b6abbf351809635fcf3fed1476e3bb2f8ccdaccb 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 @@ -13002,7 +13000,7 @@ index 4320af392b7bd29d6a5d6da44361ffd0da16036a..804166bf2da81927ab449811be9fcf67 if ((quitMessage != null) && !quitMessage.equals(net.kyori.adventure.text.Component.empty())) { this.server.getPlayerList().broadcastSystemMessage(PaperAdventure.asVanilla(quitMessage), false); // Paper end -@@ -2353,7 +2405,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -2361,7 +2413,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl this.player.resetLastActionTime(); // CraftBukkit start if (sync) { @@ -13011,7 +13009,7 @@ index 4320af392b7bd29d6a5d6da44361ffd0da16036a..804166bf2da81927ab449811be9fcf67 } else { runnable.run(); } -@@ -2411,7 +2463,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -2419,7 +2471,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl String originalFormat = event.getFormat(), originalMessage = event.getMessage(); this.cserver.getPluginManager().callEvent(event); @@ -13020,7 +13018,7 @@ index 4320af392b7bd29d6a5d6da44361ffd0da16036a..804166bf2da81927ab449811be9fcf67 // Evil plugins still listening to deprecated event final PlayerChatEvent queueEvent = new PlayerChatEvent(player, event.getMessage(), event.getFormat(), event.getRecipients()); queueEvent.setCancelled(event.isCancelled()); -@@ -2509,6 +2561,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -2517,6 +2569,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl if (s.isEmpty()) { ServerGamePacketListenerImpl.LOGGER.warn(this.player.getScoreboardName() + " tried to send an empty message"); } else if (this.getCraftPlayer().isConversing()) { @@ -13028,7 +13026,7 @@ index 4320af392b7bd29d6a5d6da44361ffd0da16036a..804166bf2da81927ab449811be9fcf67 final String conversationInput = s; this.server.processQueue.add(new Runnable() { @Override -@@ -2744,8 +2797,25 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -2752,8 +2805,25 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl // Spigot End public void switchToConfig() { @@ -13055,7 +13053,7 @@ index 4320af392b7bd29d6a5d6da44361ffd0da16036a..804166bf2da81927ab449811be9fcf67 this.send(ClientboundStartConfigurationPacket.INSTANCE); this.connection.setupOutboundProtocol(ConfigurationProtocols.CLIENTBOUND); } -@@ -2771,7 +2841,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -2779,7 +2849,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl this.player.resetLastActionTime(); this.player.setShiftKeyDown(packet.isUsingSecondaryAction()); @@ -13064,7 +13062,7 @@ index 4320af392b7bd29d6a5d6da44361ffd0da16036a..804166bf2da81927ab449811be9fcf67 if (!worldserver.getWorldBorder().isWithinBounds(entity.blockPosition())) { return; } -@@ -2915,6 +2985,12 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -2923,6 +2993,12 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl switch (packetplayinclientcommand_enumclientcommand) { case PERFORM_RESPAWN: if (this.player.wonGame) { @@ -13077,7 +13075,7 @@ index 4320af392b7bd29d6a5d6da44361ffd0da16036a..804166bf2da81927ab449811be9fcf67 this.player.wonGame = false; this.player = this.server.getPlayerList().respawn(this.player, true, Entity.RemovalReason.CHANGED_DIMENSION, RespawnReason.END_PORTAL); // CraftBukkit CriteriaTriggers.CHANGED_DIMENSION.trigger(this.player, Level.END, Level.OVERWORLD); -@@ -2923,6 +2999,17 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -2931,6 +3007,17 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl return; } @@ -13095,7 +13093,7 @@ index 4320af392b7bd29d6a5d6da44361ffd0da16036a..804166bf2da81927ab449811be9fcf67 this.player = this.server.getPlayerList().respawn(this.player, false, Entity.RemovalReason.KILLED, RespawnReason.DEATH); // CraftBukkit if (this.server.isHardcore()) { this.player.setGameMode(GameType.SPECTATOR, org.bukkit.event.player.PlayerGameModeChangeEvent.Cause.HARDCORE_DEATH, null); // Paper - Expand PlayerGameModeChangeEvent -@@ -3475,7 +3562,18 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -3483,7 +3570,18 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl this.filterTextPacket(list).thenAcceptAsync((list1) -> { this.updateSignText(packet, list1); @@ -13116,10 +13114,10 @@ index 4320af392b7bd29d6a5d6da44361ffd0da16036a..804166bf2da81927ab449811be9fcf67 private void updateSignText(ServerboundSignUpdatePacket packet, List signText) { diff --git a/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java -index b0f7a378f19b9837c060c891002cd5db756cdae1..bc9956d36ce3adabd50dc4b6467a0fd24386e4e0 100644 +index 40638b439966619e9c70a18a32abd95b2178fe9f..9451cccebf7acee3bd9f28f4f9d60412d1554ff4 100644 --- a/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java -@@ -106,7 +106,11 @@ public class ServerLoginPacketListenerImpl implements ServerLoginPacketListener, +@@ -111,7 +111,11 @@ public class ServerLoginPacketListenerImpl implements ServerLoginPacketListener, } // Paper end - Do not allow logins while the server is shutting down if (this.state == ServerLoginPacketListenerImpl.State.VERIFYING) { @@ -13132,7 +13130,7 @@ index b0f7a378f19b9837c060c891002cd5db756cdae1..bc9956d36ce3adabd50dc4b6467a0fd2 this.verifyLoginAndFinishConnectionSetup((GameProfile) Objects.requireNonNull(this.authenticatedProfile)); } // Paper - prevent logins to be processed even though disconnect was called } -@@ -252,7 +256,7 @@ public class ServerLoginPacketListenerImpl implements ServerLoginPacketListener, +@@ -257,7 +261,7 @@ public class ServerLoginPacketListenerImpl implements ServerLoginPacketListener, })); } @@ -13141,7 +13139,7 @@ index b0f7a378f19b9837c060c891002cd5db756cdae1..bc9956d36ce3adabd50dc4b6467a0fd2 if (flag) { this.state = ServerLoginPacketListenerImpl.State.WAITING_FOR_DUPE_DISCONNECT; -@@ -372,7 +376,7 @@ public class ServerLoginPacketListenerImpl implements ServerLoginPacketListener, +@@ -377,7 +381,7 @@ public class ServerLoginPacketListenerImpl implements ServerLoginPacketListener, uniqueId = gameprofile.getId(); // Paper end - Add more fields to AsyncPlayerPreLoginEvent @@ -13216,7 +13214,7 @@ index 653856d0b8dcf2baf4cc77a276f17c8cc1fa717e..3f5639f26f249ca10e03826231d087ab date1 = fallback; } diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index 0368d6ba9cc9fe557d3c7172a87a7a5b15445e47..4e484a111fc8d7a98e89aa06042bcd1d61c8cfad 100644 +index 5e2c4969e77c669acbb4a13c07033cb267c3d586..444f363e577344e962ffc515f6a052e349a0466d 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java @@ -134,10 +134,10 @@ public abstract class PlayerList { @@ -13496,7 +13494,7 @@ index 0368d6ba9cc9fe557d3c7172a87a7a5b15445e47..4e484a111fc8d7a98e89aa06042bcd1d entityplayer.stopRiding(); // CraftBukkit this.players.remove(entityplayer); this.playersByName.remove(entityplayer.getScoreboardName().toLowerCase(java.util.Locale.ROOT)); // Spigot -@@ -974,10 +1052,10 @@ public abstract class PlayerList { +@@ -980,10 +1058,10 @@ public abstract class PlayerList { public void tick() { if (++this.sendAllPlayerInfoIn > 600) { // CraftBukkit start @@ -13510,7 +13508,7 @@ index 0368d6ba9cc9fe557d3c7172a87a7a5b15445e47..4e484a111fc8d7a98e89aa06042bcd1d @Override public boolean test(ServerPlayer input) { return target.getBukkitEntity().canSee(input.getBukkitEntity()); -@@ -1003,18 +1081,17 @@ public abstract class PlayerList { +@@ -1009,18 +1087,17 @@ public abstract class PlayerList { // CraftBukkit start - add a world/entity limited version public void broadcastAll(Packet packet, net.minecraft.world.entity.player.Player entityhuman) { @@ -13533,7 +13531,7 @@ index 0368d6ba9cc9fe557d3c7172a87a7a5b15445e47..4e484a111fc8d7a98e89aa06042bcd1d } } -@@ -1058,8 +1135,7 @@ public abstract class PlayerList { +@@ -1064,8 +1141,7 @@ public abstract class PlayerList { if (scoreboardteam == null) { this.broadcastSystemMessage(message, false); } else { @@ -13543,7 +13541,7 @@ index 0368d6ba9cc9fe557d3c7172a87a7a5b15445e47..4e484a111fc8d7a98e89aa06042bcd1d if (entityplayer.getTeam() != scoreboardteam) { entityplayer.sendSystemMessage(message); -@@ -1070,10 +1146,12 @@ public abstract class PlayerList { +@@ -1076,10 +1152,12 @@ public abstract class PlayerList { } public String[] getPlayerNamesArray() { @@ -13559,7 +13557,7 @@ index 0368d6ba9cc9fe557d3c7172a87a7a5b15445e47..4e484a111fc8d7a98e89aa06042bcd1d } return astring; -@@ -1092,7 +1170,9 @@ public abstract class PlayerList { +@@ -1098,7 +1176,9 @@ public abstract class PlayerList { ServerPlayer entityplayer = this.getPlayer(profile.getId()); if (entityplayer != null) { @@ -13569,7 +13567,7 @@ index 0368d6ba9cc9fe557d3c7172a87a7a5b15445e47..4e484a111fc8d7a98e89aa06042bcd1d } } -@@ -1102,7 +1182,10 @@ public abstract class PlayerList { +@@ -1108,7 +1188,10 @@ public abstract class PlayerList { ServerPlayer entityplayer = this.getPlayer(profile.getId()); if (entityplayer != null) { @@ -13580,7 +13578,7 @@ index 0368d6ba9cc9fe557d3c7172a87a7a5b15445e47..4e484a111fc8d7a98e89aa06042bcd1d } } -@@ -1164,8 +1247,7 @@ public abstract class PlayerList { +@@ -1171,8 +1254,7 @@ public abstract class PlayerList { } public void broadcast(@Nullable net.minecraft.world.entity.player.Player player, double x, double y, double z, double distance, ResourceKey worldKey, Packet packet) { @@ -13590,7 +13588,7 @@ index 0368d6ba9cc9fe557d3c7172a87a7a5b15445e47..4e484a111fc8d7a98e89aa06042bcd1d // CraftBukkit start - Test if player receiving packet can see the source of the packet if (player != null && !entityplayer.getBukkitEntity().canSee(player.getBukkitEntity())) { -@@ -1195,12 +1277,21 @@ public abstract class PlayerList { +@@ -1202,12 +1284,21 @@ public abstract class PlayerList { io.papermc.paper.util.MCUtil.ensureMain("Save Players" , () -> { // Paper - Ensure main MinecraftTimings.savePlayers.startTiming(); // Paper int numSaved = 0; @@ -13617,7 +13615,7 @@ index 0368d6ba9cc9fe557d3c7172a87a7a5b15445e47..4e484a111fc8d7a98e89aa06042bcd1d } // Paper end - Incremental chunk and player saving } -@@ -1319,6 +1410,20 @@ public abstract class PlayerList { +@@ -1326,6 +1417,20 @@ public abstract class PlayerList { } public void removeAll(boolean isRestarting) { @@ -13638,7 +13636,7 @@ index 0368d6ba9cc9fe557d3c7172a87a7a5b15445e47..4e484a111fc8d7a98e89aa06042bcd1d // Paper end // CraftBukkit start - disconnect safely for (ServerPlayer player : this.players) { -@@ -1328,7 +1433,7 @@ public abstract class PlayerList { +@@ -1335,7 +1440,7 @@ public abstract class PlayerList { // CraftBukkit end // Paper start - Configurable player collision; Remove collideRule team if it exists @@ -13833,7 +13831,7 @@ index e9df8f8541b8a1b85c7d2925ff3cba813007a1ef..d3f2775a68121ca80ef55ea4c280a0c9 return blockToFallLocation(blockState); } else { diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index e0827d8bb3fa17d4f590a5342ff41a514f623e68..d1a8e8a7f03f1769431b6711cf842898e8c59aaa 100644 +index 4b54d0ea31062972e68ee8fafe3cfaf68f65a5cd..4aefadd491f1c0c541d23fcaeaf03fd2ae995f3e 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java @@ -178,7 +178,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess @@ -13911,7 +13909,7 @@ index e0827d8bb3fa17d4f590a5342ff41a514f623e68..d1a8e8a7f03f1769431b6711cf842898 if (this.canSpawnSprintParticle()) { this.spawnSprintParticle(); } -@@ -1128,8 +1140,8 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -1130,8 +1142,8 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } else { this.wasOnFire = this.isOnFire(); if (movementType == MoverType.PISTON) { @@ -13922,7 +13920,7 @@ index e0827d8bb3fa17d4f590a5342ff41a514f623e68..d1a8e8a7f03f1769431b6711cf842898 movement = this.limitPistonMovement(movement); if (movement.equals(Vec3.ZERO)) { return; -@@ -1421,7 +1433,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -1423,7 +1435,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess if (movement.lengthSqr() <= 1.0E-7D) { return movement; } else { @@ -13931,7 +13929,7 @@ index e0827d8bb3fa17d4f590a5342ff41a514f623e68..d1a8e8a7f03f1769431b6711cf842898 if (i != this.pistonDeltasGameTime) { Arrays.fill(this.pistonDeltas, 0.0D); -@@ -3124,7 +3136,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3126,7 +3138,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess this.passengers = ImmutableList.copyOf(list); } @@ -13940,7 +13938,7 @@ index e0827d8bb3fa17d4f590a5342ff41a514f623e68..d1a8e8a7f03f1769431b6711cf842898 } } -@@ -3172,7 +3184,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3174,7 +3186,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } entity.boardingCooldown = 60; @@ -13949,7 +13947,7 @@ index e0827d8bb3fa17d4f590a5342ff41a514f623e68..d1a8e8a7f03f1769431b6711cf842898 } return true; // CraftBukkit } -@@ -3255,7 +3267,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3257,7 +3269,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } } @@ -13958,7 +13956,7 @@ index e0827d8bb3fa17d4f590a5342ff41a514f623e68..d1a8e8a7f03f1769431b6711cf842898 Level world = this.level(); if (world instanceof ServerLevel worldserver) { -@@ -3264,23 +3276,21 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3266,23 +3278,21 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess if (this.portalProcess.processPortalTeleportation(worldserver, this, this.canUsePortal(false))) { worldserver.getProfiler().push("portal"); this.setPortalCooldown(); @@ -13990,7 +13988,7 @@ index e0827d8bb3fa17d4f590a5342ff41a514f623e68..d1a8e8a7f03f1769431b6711cf842898 } public int getDimensionChangingDelay() { -@@ -3421,6 +3431,11 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3423,6 +3433,11 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess @Nullable public PlayerTeam getTeam() { @@ -14002,7 +14000,7 @@ index e0827d8bb3fa17d4f590a5342ff41a514f623e68..d1a8e8a7f03f1769431b6711cf842898 if (!this.level().paperConfig().scoreboards.allowNonPlayerEntitiesOnScoreboards && !(this instanceof Player)) { return null; } // Paper - Perf: Disable Scoreboards for non players by default return this.level().getScoreboard().getPlayersTeam(this.getScoreboardName()); } -@@ -3710,8 +3725,751 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3712,8 +3727,751 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess this.portalProcess = original.portalProcess; } @@ -14754,7 +14752,7 @@ index e0827d8bb3fa17d4f590a5342ff41a514f623e68..d1a8e8a7f03f1769431b6711cf842898 Level world = this.level(); // Paper start - Fix item duplication and teleport issues -@@ -3828,6 +4586,12 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3832,6 +4590,12 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } @@ -14767,7 +14765,7 @@ index e0827d8bb3fa17d4f590a5342ff41a514f623e68..d1a8e8a7f03f1769431b6711cf842898 protected void removeAfterChangingDimensions() { this.setRemoved(Entity.RemovalReason.CHANGED_DIMENSION, null); // CraftBukkit - add Bukkit remove cause if (this instanceof Leashable leashable && leashable.isLeashed()) { // Paper - only call if it is leashed -@@ -4699,7 +5463,8 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -4703,7 +5467,8 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } } // Paper end - Fix MC-4 @@ -14777,7 +14775,7 @@ index e0827d8bb3fa17d4f590a5342ff41a514f623e68..d1a8e8a7f03f1769431b6711cf842898 synchronized (this.posLock) { // Paper this.position = new Vec3(x, y, z); } // Paper -@@ -4720,7 +5485,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -4724,7 +5489,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess // Paper start - Block invalid positions and bounding box; don't allow desync of pos and AABB // hanging has its own special logic @@ -14786,7 +14784,7 @@ index e0827d8bb3fa17d4f590a5342ff41a514f623e68..d1a8e8a7f03f1769431b6711cf842898 this.setBoundingBox(this.makeBoundingBox()); } // Paper end - Block invalid positions and bounding box -@@ -4805,6 +5570,12 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -4809,6 +5574,12 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess return this.removalReason != null; } @@ -14799,7 +14797,7 @@ index e0827d8bb3fa17d4f590a5342ff41a514f623e68..d1a8e8a7f03f1769431b6711cf842898 @Nullable public Entity.RemovalReason getRemovalReason() { return this.removalReason; -@@ -4827,6 +5598,9 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -4831,6 +5602,9 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess CraftEventFactory.callEntityRemoveEvent(this, cause); // CraftBukkit end final boolean alreadyRemoved = this.removalReason != null; // Paper - Folia schedulers @@ -14809,7 +14807,7 @@ index e0827d8bb3fa17d4f590a5342ff41a514f623e68..d1a8e8a7f03f1769431b6711cf842898 if (this.removalReason == null) { this.removalReason = entity_removalreason; } -@@ -4849,6 +5623,10 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -4853,6 +5627,10 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess this.removalReason = null; } @@ -14821,7 +14819,7 @@ index e0827d8bb3fa17d4f590a5342ff41a514f623e68..d1a8e8a7f03f1769431b6711cf842898 /** * Invoked only when the entity is truly removed from the server, never to be added to any world. diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index ccd9dff20a60f019e0c320acfb526b8bf3e5f806..6e2ce383bb4d52702dfcb8823ce0c5dce7c81b5f 100644 +index 2aa6374cd4a96efd85899be8cd3172a8257bfe6b..551ad6757e76ec9c731488f0355d4950ad1b0bd4 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java @@ -265,7 +265,7 @@ public abstract class LivingEntity extends Entity implements Attackable { @@ -14946,7 +14944,7 @@ index ccd9dff20a60f019e0c320acfb526b8bf3e5f806..6e2ce383bb4d52702dfcb8823ce0c5dc if (this.xo != this.getX() || this.yo != this.getY() || this.zo != this.getZ() || this.yRotO != this.getYRot() || this.xRotO != this.getXRot()) { Location from = new Location(this.level().getWorld(), this.xo, this.yo, this.zo, this.yRotO, this.xRotO); Location to = new Location(this.level().getWorld(), this.getX(), this.getY(), this.getZ(), this.getYRot(), this.getXRot()); -@@ -4249,7 +4268,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -4252,7 +4271,7 @@ public abstract class LivingEntity extends Entity implements Attackable { BlockPos blockposition = BlockPos.containing(d0, d1, d2); Level world = this.level(); @@ -15472,42 +15470,37 @@ index b83be9bbb9f348da83c0fd1ecc7f65c8a58b45b9..5d6b1a63a2a213f8a4e81c5e57484700 BlockPos blockposition = this.blockPosition(); boolean flag = this.blockState.getBlock() instanceof ConcretePowderBlock; diff --git a/src/main/java/net/minecraft/world/entity/item/ItemEntity.java b/src/main/java/net/minecraft/world/entity/item/ItemEntity.java -index 607f1a9802eb0ff4865af4c53f302128a6e6fe02..8fb07f303b62292c01d77162272d8cca9c8afd29 100644 +index 4423973d4d9a2c3879d98d1d4c8b8c117c677ac5..8fb07f303b62292c01d77162272d8cca9c8afd29 100644 --- a/src/main/java/net/minecraft/world/entity/item/ItemEntity.java +++ b/src/main/java/net/minecraft/world/entity/item/ItemEntity.java @@ -60,7 +60,7 @@ public class ItemEntity extends Entity implements TraceableEntity { @Nullable public UUID target; public final float bobOffs; -- private int lastTick = MinecraftServer.currentTick - 1; // CraftBukkit +- // private int lastTick = MinecraftServer.currentTick - 1; // CraftBukkit // Paper - remove anti tick skipping measures / wall time + //private int lastTick = MinecraftServer.currentTick - 1; // CraftBukkit // Folia - region threading public boolean canMobPickup = true; // Paper - Item#canEntityPickup private int despawnRate = -1; // Paper - Alternative item-despawn-rate public net.kyori.adventure.util.TriState frictionState = net.kyori.adventure.util.TriState.NOT_SET; // Paper - Friction API -@@ -153,13 +153,11 @@ public class ItemEntity extends Entity implements TraceableEntity { +@@ -153,11 +153,11 @@ public class ItemEntity extends Entity implements TraceableEntity { this.discard(EntityRemoveEvent.Cause.DESPAWN); // CraftBukkit - add Bukkit remove cause } else { super.tick(); -- // CraftBukkit start - Use wall time for pickup and despawn timers -- int elapsedTicks = MinecraftServer.currentTick - this.lastTick; -- if (this.pickupDelay != 32767) this.pickupDelay -= elapsedTicks; -- this.pickupDelay = Math.max(0, this.pickupDelay); // Paper - don't go below 0 -- if (this.age != -32768) this.age += elapsedTicks; -- this.lastTick = MinecraftServer.currentTick; -- // CraftBukkit end +- // Paper start - remove anti tick skipping measures / wall time - revert to vanilla + // Folia start - region threading - restore original timers -+ if (this.pickupDelay > 0 && this.pickupDelay != 32767) { -+ --this.pickupDelay; -+ } + if (this.pickupDelay > 0 && this.pickupDelay != 32767) { + --this.pickupDelay; + } +- // Paper end - remove anti tick skipping measures / wall time - revert to vanilla + // Folia end - region threading - restore original timers this.xo = this.getX(); this.yo = this.getY(); -@@ -212,11 +210,11 @@ public class ItemEntity extends Entity implements TraceableEntity { +@@ -210,11 +210,11 @@ public class ItemEntity extends Entity implements TraceableEntity { this.mergeWithNeighbours(); } -- /* CraftBukkit start - moved up +- // Paper - remove anti tick skipping measures / wall time - revert to vanilla /* CraftBukkit start - moved up + // Folia - region threading - restore original timers if (this.age != -32768) { ++this.age; @@ -15517,29 +15510,24 @@ index 607f1a9802eb0ff4865af4c53f302128a6e6fe02..8fb07f303b62292c01d77162272d8cca this.hasImpulse |= this.updateInWaterStateAndDoFluidPushing(); if (!this.level().isClientSide) { -@@ -243,13 +241,14 @@ public class ItemEntity extends Entity implements TraceableEntity { +@@ -241,14 +241,14 @@ public class ItemEntity extends Entity implements TraceableEntity { // Spigot start - copied from above @Override public void inactiveTick() { -- // CraftBukkit start - Use wall time for pickup and despawn timers -- int elapsedTicks = MinecraftServer.currentTick - this.lastTick; -- if (this.pickupDelay != 32767) this.pickupDelay -= elapsedTicks; -- this.pickupDelay = Math.max(0, this.pickupDelay); // Paper - don't go below 0 -- if (this.age != -32768) this.age += elapsedTicks; -- this.lastTick = MinecraftServer.currentTick; -- // CraftBukkit end +- // Paper start - remove anti tick skipping measures / wall time - copied from above + // Folia start - region threading - restore original timers -+ if (this.pickupDelay > 0 && this.pickupDelay != 32767) { -+ --this.pickupDelay; -+ } -+ if (this.age != -32768) { -+ ++this.age; -+ } + if (this.pickupDelay > 0 && this.pickupDelay != 32767) { + --this.pickupDelay; + } + if (this.age != -32768) { + ++this.age; + } +- // Paper end - remove anti tick skipping measures / wall time - copied from above + // Folia end - region threading - restore original timers if (!this.level().isClientSide && this.age >= this.despawnRate) { // Spigot // Paper - Alternative item-despawn-rate // CraftBukkit start - fire ItemDespawnEvent -@@ -561,14 +560,22 @@ public class ItemEntity extends Entity implements TraceableEntity { +@@ -560,14 +560,22 @@ public class ItemEntity extends Entity implements TraceableEntity { return false; } @@ -15603,44 +15591,41 @@ index 2985296a9a034e535157f55e322fc8c107827752..d9ae587c5d3ef67d5ee8c9238c39a823 } diff --git a/src/main/java/net/minecraft/world/entity/monster/Zombie.java b/src/main/java/net/minecraft/world/entity/monster/Zombie.java -index 2280004638fd19ed018cb3e77d53a018b34ec516..9460ffdede40a2e3601d3c97b1d1ca4e62dcbf29 100644 +index 2b43337ac63d051718a2074fcc46e128a1d65129..9460ffdede40a2e3601d3c97b1d1ca4e62dcbf29 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Zombie.java +++ b/src/main/java/net/minecraft/world/entity/monster/Zombie.java @@ -96,7 +96,7 @@ public class Zombie extends Monster { private boolean canBreakDoors; private int inWaterTime; public int conversionTime; -- private int lastTick = MinecraftServer.currentTick; // CraftBukkit - add field +- // private int lastTick = MinecraftServer.currentTick; // CraftBukkit - add field // Paper - remove anti tick skipping measures / wall time + //private int lastTick = MinecraftServer.currentTick; // CraftBukkit - add field // Folia - region threading - restore original timers private boolean shouldBurnInDay = true; // Paper - Add more Zombie API public Zombie(EntityType type, Level world) { -@@ -219,10 +219,7 @@ public class Zombie extends Monster { +@@ -219,7 +219,7 @@ public class Zombie extends Monster { public void tick() { if (!this.level().isClientSide && this.isAlive() && !this.isNoAi()) { if (this.isUnderWaterConverting()) { -- // CraftBukkit start - Use wall time instead of ticks for conversion -- int elapsedTicks = MinecraftServer.currentTick - this.lastTick; -- this.conversionTime -= elapsedTicks; -- // CraftBukkit end +- --this.conversionTime; // Paper - remove anti tick skipping measures / wall time + --this.conversionTime; // Folia - region threading - restore original timers if (this.conversionTime < 0) { this.doUnderWaterConversion(); } -@@ -239,7 +236,7 @@ public class Zombie extends Monster { +@@ -236,7 +236,7 @@ public class Zombie extends Monster { } super.tick(); -- this.lastTick = MinecraftServer.currentTick; // CraftBukkit +- // this.lastTick = MinecraftServer.currentTick; // CraftBukkit // Paper - remove anti tick skipping measures / wall time + //this.lastTick = MinecraftServer.currentTick; // CraftBukkit // Folia - region threading - restore original timers } @Override -@@ -280,7 +277,7 @@ public class Zombie extends Monster { +@@ -277,7 +277,7 @@ public class Zombie extends Monster { } // Paper end - Add more Zombie API public void startUnderWaterConversion(int ticksUntilWaterConversion) { -- this.lastTick = MinecraftServer.currentTick; // CraftBukkit +- // this.lastTick = MinecraftServer.currentTick; // CraftBukkit // Paper - remove anti tick skipping measures / wall time + // Folia - region threading - restore original timers this.conversionTime = ticksUntilWaterConversion; this.getEntityData().set(Zombie.DATA_DROWNED_CONVERSION_ID, true); @@ -15680,10 +15665,10 @@ index e0dabbf6d7a87b8722769c78ef0d2ba4353ed2cb..90627c6a0c0e0f03a20cd32a7f15a0cf @Override diff --git a/src/main/java/net/minecraft/world/entity/npc/AbstractVillager.java b/src/main/java/net/minecraft/world/entity/npc/AbstractVillager.java -index 49b35fab8ee98a384ee12d36bbe2ac813342f1d6..5f3104b2a46d4b47cf505012438f848e3b744315 100644 +index d28ebcae036168dd65a5f3236d12ee416308c23f..4153d16c3fc6b16315b3822251e4f740cf7dbd98 100644 --- a/src/main/java/net/minecraft/world/entity/npc/AbstractVillager.java +++ b/src/main/java/net/minecraft/world/entity/npc/AbstractVillager.java -@@ -226,10 +226,18 @@ public abstract class AbstractVillager extends AgeableMob implements InventoryCa +@@ -224,10 +224,18 @@ public abstract class AbstractVillager extends AgeableMob implements InventoryCa this.readInventoryFromTag(nbt, this.registryAccess()); } @@ -15890,10 +15875,10 @@ index 9ca29b3d4bf8bca5f51f3644e12fcbec2cb5d35e..b5edbd36a1114449fe5f9bf1018bff79 Vec3 vec3d = this.getDeltaMovement(); diff --git a/src/main/java/net/minecraft/world/entity/projectile/AbstractHurtingProjectile.java b/src/main/java/net/minecraft/world/entity/projectile/AbstractHurtingProjectile.java -index 3107ad04dda9f43976a385976d6952e2f2af3939..dc075e777055508c17ac4fa4d46e51e1721cb2e8 100644 +index f79fc0ed58af2cf55e8642b6d7fc9e4f57d0ba20..f70905fde2591cbabf15d47ff3c87b6662b966d5 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/AbstractHurtingProjectile.java +++ b/src/main/java/net/minecraft/world/entity/projectile/AbstractHurtingProjectile.java -@@ -80,6 +80,11 @@ public abstract class AbstractHurtingProjectile extends Projectile { +@@ -79,6 +79,11 @@ public abstract class AbstractHurtingProjectile extends Projectile { this.discard(EntityRemoveEvent.Cause.DESPAWN); // CraftBukkit - add Bukkit remove cause } else { super.tick(); @@ -15991,7 +15976,7 @@ index 8575941fd238750c5d56843989a48bcbde2d8a88..185501a2daea0351281c578bff79dc50 HitResult movingobjectposition = ProjectileUtil.getHitResultOnMoveVector(this, this::canHitEntity); diff --git a/src/main/java/net/minecraft/world/entity/projectile/Projectile.java b/src/main/java/net/minecraft/world/entity/projectile/Projectile.java -index de64de5d1328d3e0826c9990eb7c7eca5088cb9c..420531643a486da9d99f011a93461e54d0d9032b 100644 +index 10ade433c083851d9ea4797c6ec618db122229f9..0e831070fe7a9ac58de4b25b74a53b38334c695a 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/Projectile.java +++ b/src/main/java/net/minecraft/world/entity/projectile/Projectile.java @@ -38,7 +38,7 @@ public abstract class Projectile extends Entity implements TraceableEntity { @@ -16062,7 +16047,7 @@ index de64de5d1328d3e0826c9990eb7c7eca5088cb9c..420531643a486da9d99f011a93461e54 } } -@@ -367,7 +383,7 @@ public abstract class Projectile extends Entity implements TraceableEntity { +@@ -364,7 +380,7 @@ public abstract class Projectile extends Entity implements TraceableEntity { public boolean mayInteract(Level world, BlockPos pos) { Entity entity = this.getOwner(); @@ -16433,7 +16418,7 @@ index 647a4601deace52f8d855f512a73671f82b4762a..255f6e720ebe0f76954fdba03cd2aae0 } diff --git a/src/main/java/net/minecraft/world/item/ItemStack.java b/src/main/java/net/minecraft/world/item/ItemStack.java -index b6a2f3e4f22f36e75a1630bd456c2f471edbb398..0b802cd958d7a7087933f5d21dc16f9ee51426b6 100644 +index eec0ec43590be7e8ae5b530a7404c98b5e23cb53..fced6b23a3026458ff56d3effb4f4ead24a83d31 100644 --- a/src/main/java/net/minecraft/world/item/ItemStack.java +++ b/src/main/java/net/minecraft/world/item/ItemStack.java @@ -421,31 +421,32 @@ public final class ItemStack implements DataComponentHolder { @@ -16798,10 +16783,10 @@ index 141b748abe80402731cdaf14a3d36aa7cef4f4bd..95938efe2282a024d9d428dedd16cbe1 return player; } diff --git a/src/main/java/net/minecraft/world/level/Explosion.java b/src/main/java/net/minecraft/world/level/Explosion.java -index ad57bf49476192dea6a7367cbd0ad3f11e142e1b..d95d9b2ee7de56627d146cc898bc9d37171c5030 100644 +index f696afd7e241bf1966a2d505b5d59bff824b43e4..e642638f70dffab027f8c538889e3b17da1c29df 100644 --- a/src/main/java/net/minecraft/world/level/Explosion.java +++ b/src/main/java/net/minecraft/world/level/Explosion.java -@@ -844,17 +844,18 @@ public class Explosion { +@@ -845,17 +845,18 @@ public class Explosion { if (!this.level.paperConfig().environment.optimizeExplosions) { return this.getSeenFraction(vec3d, entity, blockCache, blockPos); // Paper - optimise collisions } @@ -16824,7 +16809,7 @@ index ad57bf49476192dea6a7367cbd0ad3f11e142e1b..d95d9b2ee7de56627d146cc898bc9d37 private final double posX, posY, posZ; private final double minX, minY, minZ; diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index e2a0487089eb5a7bdc1433e4c75f69d8e9f9d5f9..b0ad25daf2d3c1727c61686e35eb4c03e1c60122 100644 +index 507671476c3d2d92a2fdb05be24443af27d26dcf..d518487433088f090edb0d12e222b85f0c93b792 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java @@ -116,10 +116,10 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl @@ -17134,7 +17119,7 @@ index e2a0487089eb5a7bdc1433e4c75f69d8e9f9d5f9..b0ad25daf2d3c1727c61686e35eb4c03 // Paper end - Prevent block entity and entity crashes } this.moonrise$midTickTasks(); // Paper - rewrite chunk system -@@ -1527,9 +1566,14 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl +@@ -1544,9 +1583,14 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl @Nullable public BlockEntity getBlockEntity(BlockPos blockposition, boolean validate) { @@ -17150,7 +17135,7 @@ index e2a0487089eb5a7bdc1433e4c75f69d8e9f9d5f9..b0ad25daf2d3c1727c61686e35eb4c03 return blockEntity; } // Paper end - Perf: Optimize capturedTileEntities lookup -@@ -1542,8 +1586,8 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl +@@ -1559,8 +1603,8 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl if (!this.isOutsideBuildHeight(blockposition)) { // CraftBukkit start @@ -17161,7 +17146,7 @@ index e2a0487089eb5a7bdc1433e4c75f69d8e9f9d5f9..b0ad25daf2d3c1727c61686e35eb4c03 return; } // CraftBukkit end -@@ -1623,6 +1667,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl +@@ -1640,6 +1684,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl @Override public List getEntities(@Nullable Entity except, AABB box, Predicate predicate) { @@ -17169,7 +17154,7 @@ index e2a0487089eb5a7bdc1433e4c75f69d8e9f9d5f9..b0ad25daf2d3c1727c61686e35eb4c03 this.getProfiler().incrementCounter("getEntities"); // Paper start - rewrite chunk system final List ret = new java.util.ArrayList<>(); -@@ -1649,6 +1694,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl +@@ -1666,6 +1711,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl public void getEntities(final EntityTypeTest entityTypeTest, final AABB boundingBox, final Predicate predicate, final List into, final int maxCount) { @@ -17177,7 +17162,7 @@ index e2a0487089eb5a7bdc1433e4c75f69d8e9f9d5f9..b0ad25daf2d3c1727c61686e35eb4c03 this.getProfiler().incrementCounter("getEntities"); if (entityTypeTest instanceof net.minecraft.world.entity.EntityType byType) { -@@ -1734,13 +1780,30 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl +@@ -1751,13 +1797,30 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl public void disconnect() {} @@ -17210,7 +17195,7 @@ index e2a0487089eb5a7bdc1433e4c75f69d8e9f9d5f9..b0ad25daf2d3c1727c61686e35eb4c03 public boolean mayInteract(Player player, BlockPos pos) { return true; -@@ -1933,8 +1996,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl +@@ -1950,8 +2013,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl public abstract RecipeManager getRecipeManager(); public BlockPos getBlockRandomPos(int x, int y, int z, int l) { @@ -17220,7 +17205,7 @@ index e2a0487089eb5a7bdc1433e4c75f69d8e9f9d5f9..b0ad25daf2d3c1727c61686e35eb4c03 return new BlockPos(x + (i1 & 15), y + (i1 >> 16 & l), z + (i1 >> 8 & 15)); } -@@ -1964,7 +2026,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl +@@ -1981,7 +2043,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl @Override public long nextSubTickCount() { @@ -17422,7 +17407,7 @@ index 26ec4838c476b8091f80aeac61db8041d5c89e88..82d333b2644c7af7137f155bfd10e03e } diff --git a/src/main/java/net/minecraft/world/level/block/DispenserBlock.java b/src/main/java/net/minecraft/world/level/block/DispenserBlock.java -index f6edfea463b3725d3a79aca38825e86dbf82175c..92cab51f6b3eeb07b574bd3ba82d736e8880acae 100644 +index e1021d8be840f378568f28639c259182055c78ac..640887a47048f938c3e12634207182ceba68bdcc 100644 --- a/src/main/java/net/minecraft/world/level/block/DispenserBlock.java +++ b/src/main/java/net/minecraft/world/level/block/DispenserBlock.java @@ -51,7 +51,7 @@ public class DispenserBlock extends BaseEntityBlock { @@ -17434,7 +17419,7 @@ index f6edfea463b3725d3a79aca38825e86dbf82175c..92cab51f6b3eeb07b574bd3ba82d736e @Override public MapCodec codec() { -@@ -111,7 +111,7 @@ public class DispenserBlock extends BaseEntityBlock { +@@ -110,7 +110,7 @@ public class DispenserBlock extends BaseEntityBlock { if (idispensebehavior != DispenseItemBehavior.NOOP) { if (!org.bukkit.craftbukkit.event.CraftEventFactory.handleBlockPreDispenseEvent(world, pos, itemstack, i)) return; // Paper - Add BlockPreDispenseEvent @@ -17937,28 +17922,28 @@ index 7dfabb11d3c8112f6daef35d204a2e324f4ddb5e..b7c1c8e3701fc2d67df34aaf5cebdf78 } diff --git a/src/main/java/net/minecraft/world/level/block/entity/BrewingStandBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/BrewingStandBlockEntity.java -index a2fafef89d5354e2cb02f5672810909950a57777..46011ababdadaafd72a8717911e49f6581ab5688 100644 +index 0a93bacd62249bae1800ff306b8a7c765b0e5a8b..c45a38ece596accd47ab7b59a8a99453b9a7e8f3 100644 --- a/src/main/java/net/minecraft/world/level/block/entity/BrewingStandBlockEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/BrewingStandBlockEntity.java -@@ -54,7 +54,7 @@ public class BrewingStandBlockEntity extends BaseContainerBlockEntity implements +@@ -55,7 +55,7 @@ public class BrewingStandBlockEntity extends BaseContainerBlockEntity implements public int fuel; protected final ContainerData dataAccess; // CraftBukkit start - add fields and methods -- private int lastTick = MinecraftServer.currentTick; +- // private int lastTick = MinecraftServer.currentTick; // Paper - remove anti tick skipping measures / wall time + //private int lastTick = MinecraftServer.currentTick; // Folia - region ticking - restore original timers public List transaction = new java.util.ArrayList(); private int maxStack = MAX_STACK; -@@ -170,11 +170,10 @@ public class BrewingStandBlockEntity extends BaseContainerBlockEntity implements +@@ -180,10 +180,11 @@ public class BrewingStandBlockEntity extends BaseContainerBlockEntity implements + boolean flag1 = blockEntity.brewTime > 0; ItemStack itemstack1 = (ItemStack) blockEntity.items.get(3); - // CraftBukkit start - Use wall time instead of ticks for brewing -- int elapsedTicks = MinecraftServer.currentTick - blockEntity.lastTick; -- blockEntity.lastTick = MinecraftServer.currentTick; +- // Paper - remove anti tick skipping measures / wall time ++ // CraftBukkit start - Use wall time instead of ticks for brewing + // Folia - region ticking - restore original timers if (flag1) { -- blockEntity.brewTime -= elapsedTicks; +- --blockEntity.brewTime; // Paper - remove anti tick skipping measures / wall time - revert to vanilla + --blockEntity.brewTime; // Folia - region ticking - restore original timers boolean flag2 = blockEntity.brewTime <= 0; // == -> <= // CraftBukkit end @@ -19039,7 +19024,7 @@ index 763b315b1d761bc3bd82d9b847ed3f64fd5ce991..7a044d337df8a14150a695d539a8e5c8 } } diff --git a/src/main/java/net/minecraft/world/level/saveddata/maps/MapItemSavedData.java b/src/main/java/net/minecraft/world/level/saveddata/maps/MapItemSavedData.java -index 17f33c83c6033564d6bf4fbd388b0b847c68adb3..684a0a4c7583da882687e010e2f2e051804b6602 100644 +index 6794466051dd4b725d579b2136c37844995a648e..9af0c40e5509b10775c51014f6f739a9f0476a6b 100644 --- a/src/main/java/net/minecraft/world/level/saveddata/maps/MapItemSavedData.java +++ b/src/main/java/net/minecraft/world/level/saveddata/maps/MapItemSavedData.java @@ -212,7 +212,7 @@ public class MapItemSavedData extends SavedData { @@ -19381,7 +19366,7 @@ index 7a69564572357a7acc043e35b9c113beeb738951..ea161048b68de3c8cdcba5f4cb66eb15 LevelChunkTicks levelChunkTicks = this.allContainers.get(l); if (levelChunkTicks == null) { diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 1b36e94617d4e777c419660936460d5cf8a4b3e8..454cac11619fc1e8317db0b95a174f6747af6e60 100644 +index b7af2d4300facf41a025c8ca322bf6541949b3ab..4b96a1f9e9ac3b65f7c9f0a3742792395fba1c8e 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -312,7 +312,7 @@ public final class CraftServer implements Server { @@ -19463,7 +19448,7 @@ index 1b36e94617d4e777c419660936460d5cf8a4b3e8..454cac11619fc1e8317db0b95a174f67 if (this.commandMap.dispatch(sender, commandLine)) { return true; } -@@ -3194,7 +3237,7 @@ public final class CraftServer implements Server { +@@ -3191,7 +3234,7 @@ public final class CraftServer implements Server { @Override public int getCurrentTick() { @@ -19473,10 +19458,10 @@ index 1b36e94617d4e777c419660936460d5cf8a4b3e8..454cac11619fc1e8317db0b95a174f67 @Override diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -index ffd284f0e25c6f20672f7225aafd37e6c87ccf03..6b535d154e33947a85a2fe5b40a241a9d172db84 100644 +index 33e4818ba5a90d78d69baad9f6b1be1b1382e9f3..b25e4e143e25a228a3d93930a3fc57bd14d4459a 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -@@ -192,7 +192,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { +@@ -227,7 +227,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { @Override public int getTickableTileEntityCount() { @@ -19485,7 +19470,7 @@ index ffd284f0e25c6f20672f7225aafd37e6c87ccf03..6b535d154e33947a85a2fe5b40a241a9 } @Override -@@ -257,7 +257,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { +@@ -302,7 +302,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { // Paper start - per world spawn limits for (SpawnCategory spawnCategory : SpawnCategory.values()) { if (CraftSpawnCategory.isValidForLimits(spawnCategory)) { @@ -19494,7 +19479,7 @@ index ffd284f0e25c6f20672f7225aafd37e6c87ccf03..6b535d154e33947a85a2fe5b40a241a9 } } // Paper end - per world spawn limits -@@ -321,6 +321,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { +@@ -372,6 +372,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { @Override public Chunk getChunkAt(int x, int z) { @@ -19502,7 +19487,7 @@ index ffd284f0e25c6f20672f7225aafd37e6c87ccf03..6b535d154e33947a85a2fe5b40a241a9 warnUnsafeChunk("getting a faraway chunk", x, z); // Paper // Paper start - add ticket to hold chunk for a little while longer if plugin accesses it net.minecraft.world.level.chunk.LevelChunk chunk = this.world.getChunkSource().getChunkAtIfLoadedImmediately(x, z); -@@ -344,7 +345,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { +@@ -395,7 +396,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { // Paper start private void addTicket(int x, int z) { @@ -19511,7 +19496,7 @@ index ffd284f0e25c6f20672f7225aafd37e6c87ccf03..6b535d154e33947a85a2fe5b40a241a9 } // Paper end -@@ -363,10 +364,10 @@ public class CraftWorld extends CraftRegionAccessor implements World { +@@ -414,10 +415,10 @@ public class CraftWorld extends CraftRegionAccessor implements World { @Override public boolean isChunkGenerated(int x, int z) { // Paper start - Fix this method @@ -19524,7 +19509,7 @@ index ffd284f0e25c6f20672f7225aafd37e6c87ccf03..6b535d154e33947a85a2fe5b40a241a9 } ChunkAccess chunk = world.getChunkSource().getChunkAtImmediately(x, z); if (chunk != null) { -@@ -423,7 +424,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { +@@ -474,7 +475,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { } private boolean unloadChunk0(int x, int z, boolean save) { @@ -19533,7 +19518,7 @@ index ffd284f0e25c6f20672f7225aafd37e6c87ccf03..6b535d154e33947a85a2fe5b40a241a9 if (!this.isChunkLoaded(x, z)) { return true; } -@@ -438,7 +439,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { +@@ -489,7 +490,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { @Override public boolean regenerateChunk(int x, int z) { @@ -19542,7 +19527,7 @@ index ffd284f0e25c6f20672f7225aafd37e6c87ccf03..6b535d154e33947a85a2fe5b40a241a9 throw new UnsupportedOperationException("Not supported in this Minecraft version! Unless you can fix it, this is not a bug :)"); /* if (!unloadChunk0(x, z, false)) { -@@ -465,6 +466,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { +@@ -516,6 +517,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { @Override public boolean refreshChunk(int x, int z) { @@ -19550,7 +19535,7 @@ index ffd284f0e25c6f20672f7225aafd37e6c87ccf03..6b535d154e33947a85a2fe5b40a241a9 ChunkHolder playerChunk = this.world.getChunkSource().chunkMap.getVisibleChunkIfPresent(ChunkPos.asLong(x, z)); if (playerChunk == null) return false; -@@ -525,7 +527,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { +@@ -576,7 +578,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { @Override public boolean loadChunk(int x, int z, boolean generate) { @@ -19559,7 +19544,7 @@ index ffd284f0e25c6f20672f7225aafd37e6c87ccf03..6b535d154e33947a85a2fe5b40a241a9 warnUnsafeChunk("loading a faraway chunk", x, z); // Paper ChunkAccess chunk = this.world.getChunkSource().getChunk(x, z, generate || isChunkGenerated(x, z) ? ChunkStatus.FULL : ChunkStatus.EMPTY, true); // Paper -@@ -566,7 +568,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { +@@ -617,7 +619,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { DistanceManager chunkDistanceManager = this.world.getChunkSource().chunkMap.distanceManager; if (chunkDistanceManager.addRegionTicketAtDistance(TicketType.PLUGIN_TICKET, new ChunkPos(x, z), 2, plugin)) { // keep in-line with force loading, add at level 31 @@ -19568,7 +19553,7 @@ index ffd284f0e25c6f20672f7225aafd37e6c87ccf03..6b535d154e33947a85a2fe5b40a241a9 return true; } -@@ -777,13 +779,15 @@ public class CraftWorld extends CraftRegionAccessor implements World { +@@ -828,13 +830,15 @@ public class CraftWorld extends CraftRegionAccessor implements World { @Override public boolean generateTree(Location loc, TreeType type, BlockChangeDelegate delegate) { @@ -19589,7 +19574,7 @@ index ffd284f0e25c6f20672f7225aafd37e6c87ccf03..6b535d154e33947a85a2fe5b40a241a9 BlockPos position = ((CraftBlockState) blockstate).getPosition(); net.minecraft.world.level.block.state.BlockState oldBlock = this.world.getBlockState(position); int flag = ((CraftBlockState) blockstate).getFlag(); -@@ -791,10 +795,10 @@ public class CraftWorld extends CraftRegionAccessor implements World { +@@ -842,10 +846,10 @@ public class CraftWorld extends CraftRegionAccessor implements World { net.minecraft.world.level.block.state.BlockState newBlock = this.world.getBlockState(position); this.world.notifyAndUpdatePhysics(position, null, oldBlock, newBlock, newBlock, flag, 512); } @@ -19602,7 +19587,7 @@ index ffd284f0e25c6f20672f7225aafd37e6c87ccf03..6b535d154e33947a85a2fe5b40a241a9 return false; } } -@@ -828,6 +832,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { +@@ -879,6 +883,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { @Override public void setTime(long time) { @@ -19610,7 +19595,7 @@ index ffd284f0e25c6f20672f7225aafd37e6c87ccf03..6b535d154e33947a85a2fe5b40a241a9 long margin = (time - this.getFullTime()) % 24000; if (margin < 0) margin += 24000; this.setFullTime(this.getFullTime() + margin); -@@ -840,6 +845,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { +@@ -891,6 +896,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { @Override public void setFullTime(long time) { @@ -19618,7 +19603,7 @@ index ffd284f0e25c6f20672f7225aafd37e6c87ccf03..6b535d154e33947a85a2fe5b40a241a9 // Notify anyone who's listening TimeSkipEvent event = new TimeSkipEvent(this, TimeSkipEvent.SkipReason.CUSTOM, time - this.world.getDayTime()); this.server.getPluginManager().callEvent(event); -@@ -867,7 +873,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { +@@ -918,7 +924,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { @Override public long getGameTime() { @@ -19627,7 +19612,7 @@ index ffd284f0e25c6f20672f7225aafd37e6c87ccf03..6b535d154e33947a85a2fe5b40a241a9 } @Override -@@ -896,11 +902,13 @@ public class CraftWorld extends CraftRegionAccessor implements World { +@@ -947,11 +953,13 @@ public class CraftWorld extends CraftRegionAccessor implements World { explosionType = net.minecraft.world.level.Level.ExplosionInteraction.MOB; // Respect mobGriefing gamerule } @@ -19636,12 +19621,12 @@ index ffd284f0e25c6f20672f7225aafd37e6c87ccf03..6b535d154e33947a85a2fe5b40a241a9 } // Paper start @Override - public boolean createExplosion(Entity source, Location loc, float power, boolean setFire, boolean breakBlocks) { + public boolean createExplosion(Entity source, Location loc, float power, boolean setFire, boolean breakBlocks, boolean excludeSourceFromDamage) { + ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.world, loc.getX(), loc.getZ(), "Cannot create explosion asynchronously"); // Folia - region threading - return !world.explode(source != null ? ((org.bukkit.craftbukkit.entity.CraftEntity) source).getHandle() : null, loc.getX(), loc.getY(), loc.getZ(), power, setFire, breakBlocks ? net.minecraft.world.level.Level.ExplosionInteraction.MOB : net.minecraft.world.level.Level.ExplosionInteraction.NONE).wasCanceled; - } - // Paper end -@@ -977,6 +985,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { + return !world.explode(source != null ? ((org.bukkit.craftbukkit.entity.CraftEntity) source).getHandle() : null, loc.getX(), loc.getY(), loc.getZ(), power, setFire, breakBlocks ? net.minecraft.world.level.Level.ExplosionInteraction.MOB : net.minecraft.world.level.Level.ExplosionInteraction.NONE, explosion -> { + explosion.excludeSourceFromDamage = excludeSourceFromDamage; + }).wasCanceled; +@@ -1030,6 +1038,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { @Override public int getHighestBlockYAt(int x, int z, org.bukkit.HeightMap heightMap) { @@ -19649,7 +19634,7 @@ index ffd284f0e25c6f20672f7225aafd37e6c87ccf03..6b535d154e33947a85a2fe5b40a241a9 warnUnsafeChunk("getting a faraway chunk", x >> 4, z >> 4); // Paper // Transient load for this tick return this.world.getChunk(x >> 4, z >> 4).getHeight(CraftHeightMap.toNMS(heightMap), x, z); -@@ -1007,6 +1016,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { +@@ -1060,6 +1069,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); @@ -19657,7 +19642,7 @@ index ffd284f0e25c6f20672f7225aafd37e6c87ccf03..6b535d154e33947a85a2fe5b40a241a9 if (this.world.hasChunkAt(pos)) { net.minecraft.world.level.chunk.LevelChunk chunk = this.world.getChunkAt(pos); -@@ -1317,6 +1327,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { +@@ -1370,6 +1380,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { @Override public void setStorm(boolean hasStorm) { @@ -19665,7 +19650,7 @@ index ffd284f0e25c6f20672f7225aafd37e6c87ccf03..6b535d154e33947a85a2fe5b40a241a9 this.world.serverLevelData.setRaining(hasStorm, org.bukkit.event.weather.WeatherChangeEvent.Cause.PLUGIN); // Paper - Add cause to Weather/ThunderChangeEvents this.setWeatherDuration(0); // Reset weather duration (legacy behaviour) this.setClearWeatherDuration(0); // Reset clear weather duration (reset "/weather clear" commands) -@@ -1329,6 +1340,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { +@@ -1382,6 +1393,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { @Override public void setWeatherDuration(int duration) { @@ -19673,7 +19658,7 @@ index ffd284f0e25c6f20672f7225aafd37e6c87ccf03..6b535d154e33947a85a2fe5b40a241a9 this.world.serverLevelData.setRainTime(duration); } -@@ -1339,6 +1351,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { +@@ -1392,6 +1404,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { @Override public void setThundering(boolean thundering) { @@ -19681,7 +19666,7 @@ index ffd284f0e25c6f20672f7225aafd37e6c87ccf03..6b535d154e33947a85a2fe5b40a241a9 this.world.serverLevelData.setThundering(thundering, org.bukkit.event.weather.ThunderChangeEvent.Cause.PLUGIN); // Paper - Add cause to Weather/ThunderChangeEvents this.setThunderDuration(0); // Reset weather duration (legacy behaviour) this.setClearWeatherDuration(0); // Reset clear weather duration (reset "/weather clear" commands) -@@ -1351,6 +1364,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { +@@ -1404,6 +1417,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { @Override public void setThunderDuration(int duration) { @@ -19689,7 +19674,7 @@ index ffd284f0e25c6f20672f7225aafd37e6c87ccf03..6b535d154e33947a85a2fe5b40a241a9 this.world.serverLevelData.setThunderTime(duration); } -@@ -1361,6 +1375,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { +@@ -1414,6 +1428,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { @Override public void setClearWeatherDuration(int duration) { @@ -19697,7 +19682,7 @@ index ffd284f0e25c6f20672f7225aafd37e6c87ccf03..6b535d154e33947a85a2fe5b40a241a9 this.world.serverLevelData.setClearWeatherTime(duration); } -@@ -1555,6 +1570,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { +@@ -1608,6 +1623,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { @Override public void setKeepSpawnInMemory(boolean keepLoaded) { @@ -19705,7 +19690,7 @@ index ffd284f0e25c6f20672f7225aafd37e6c87ccf03..6b535d154e33947a85a2fe5b40a241a9 if (keepLoaded) { this.setGameRule(GameRule.SPAWN_CHUNK_RADIUS, this.getGameRuleDefault(GameRule.SPAWN_CHUNK_RADIUS)); } else { -@@ -1623,6 +1639,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { +@@ -1676,6 +1692,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { @Override public void setHardcore(boolean hardcore) { @@ -19713,7 +19698,7 @@ index ffd284f0e25c6f20672f7225aafd37e6c87ccf03..6b535d154e33947a85a2fe5b40a241a9 this.world.serverLevelData.settings.hardcore = hardcore; } -@@ -1635,6 +1652,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { +@@ -1688,6 +1705,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { @Override @Deprecated public void setTicksPerAnimalSpawns(int ticksPerAnimalSpawns) { @@ -19721,7 +19706,7 @@ index ffd284f0e25c6f20672f7225aafd37e6c87ccf03..6b535d154e33947a85a2fe5b40a241a9 this.setTicksPerSpawns(SpawnCategory.ANIMAL, ticksPerAnimalSpawns); } -@@ -1647,6 +1665,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { +@@ -1700,6 +1718,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { @Override @Deprecated public void setTicksPerMonsterSpawns(int ticksPerMonsterSpawns) { @@ -19729,7 +19714,7 @@ index ffd284f0e25c6f20672f7225aafd37e6c87ccf03..6b535d154e33947a85a2fe5b40a241a9 this.setTicksPerSpawns(SpawnCategory.MONSTER, ticksPerMonsterSpawns); } -@@ -1659,6 +1678,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { +@@ -1712,6 +1731,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { @Override @Deprecated public void setTicksPerWaterSpawns(int ticksPerWaterSpawns) { @@ -19737,7 +19722,7 @@ index ffd284f0e25c6f20672f7225aafd37e6c87ccf03..6b535d154e33947a85a2fe5b40a241a9 this.setTicksPerSpawns(SpawnCategory.WATER_ANIMAL, ticksPerWaterSpawns); } -@@ -1671,6 +1691,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { +@@ -1724,6 +1744,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { @Override @Deprecated public void setTicksPerWaterAmbientSpawns(int ticksPerWaterAmbientSpawns) { @@ -19745,7 +19730,7 @@ index ffd284f0e25c6f20672f7225aafd37e6c87ccf03..6b535d154e33947a85a2fe5b40a241a9 this.setTicksPerSpawns(SpawnCategory.WATER_AMBIENT, ticksPerWaterAmbientSpawns); } -@@ -1683,6 +1704,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { +@@ -1736,6 +1757,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { @Override @Deprecated public void setTicksPerWaterUndergroundCreatureSpawns(int ticksPerWaterUndergroundCreatureSpawns) { @@ -19753,7 +19738,7 @@ index ffd284f0e25c6f20672f7225aafd37e6c87ccf03..6b535d154e33947a85a2fe5b40a241a9 this.setTicksPerSpawns(SpawnCategory.WATER_UNDERGROUND_CREATURE, ticksPerWaterUndergroundCreatureSpawns); } -@@ -1695,11 +1717,13 @@ public class CraftWorld extends CraftRegionAccessor implements World { +@@ -1748,11 +1770,13 @@ public class CraftWorld extends CraftRegionAccessor implements World { @Override @Deprecated public void setTicksPerAmbientSpawns(int ticksPerAmbientSpawns) { @@ -19767,7 +19752,7 @@ index ffd284f0e25c6f20672f7225aafd37e6c87ccf03..6b535d154e33947a85a2fe5b40a241a9 Preconditions.checkArgument(spawnCategory != null, "SpawnCategory cannot be null"); Preconditions.checkArgument(CraftSpawnCategory.isValidForLimits(spawnCategory), "SpawnCategory.%s are not supported", spawnCategory); -@@ -1716,21 +1740,25 @@ public class CraftWorld extends CraftRegionAccessor implements World { +@@ -1769,21 +1793,25 @@ public class CraftWorld extends CraftRegionAccessor implements World { @Override public void setMetadata(String metadataKey, MetadataValue newMetadataValue) { @@ -19793,7 +19778,7 @@ index ffd284f0e25c6f20672f7225aafd37e6c87ccf03..6b535d154e33947a85a2fe5b40a241a9 this.server.getWorldMetadata().removeMetadata(this, metadataKey, owningPlugin); } -@@ -1743,6 +1771,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { +@@ -1796,6 +1824,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { @Override @Deprecated public void setMonsterSpawnLimit(int limit) { @@ -19801,7 +19786,7 @@ index ffd284f0e25c6f20672f7225aafd37e6c87ccf03..6b535d154e33947a85a2fe5b40a241a9 this.setSpawnLimit(SpawnCategory.MONSTER, limit); } -@@ -1755,6 +1784,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { +@@ -1808,6 +1837,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { @Override @Deprecated public void setAnimalSpawnLimit(int limit) { @@ -19809,7 +19794,7 @@ index ffd284f0e25c6f20672f7225aafd37e6c87ccf03..6b535d154e33947a85a2fe5b40a241a9 this.setSpawnLimit(SpawnCategory.ANIMAL, limit); } -@@ -1767,6 +1797,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { +@@ -1820,6 +1850,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { @Override @Deprecated public void setWaterAnimalSpawnLimit(int limit) { @@ -19817,7 +19802,7 @@ index ffd284f0e25c6f20672f7225aafd37e6c87ccf03..6b535d154e33947a85a2fe5b40a241a9 this.setSpawnLimit(SpawnCategory.WATER_ANIMAL, limit); } -@@ -1779,6 +1810,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { +@@ -1832,6 +1863,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { @Override @Deprecated public void setWaterAmbientSpawnLimit(int limit) { @@ -19825,7 +19810,7 @@ index ffd284f0e25c6f20672f7225aafd37e6c87ccf03..6b535d154e33947a85a2fe5b40a241a9 this.setSpawnLimit(SpawnCategory.WATER_AMBIENT, limit); } -@@ -1791,6 +1823,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { +@@ -1844,6 +1876,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { @Override @Deprecated public void setWaterUndergroundCreatureSpawnLimit(int limit) { @@ -19833,7 +19818,7 @@ index ffd284f0e25c6f20672f7225aafd37e6c87ccf03..6b535d154e33947a85a2fe5b40a241a9 this.setSpawnLimit(SpawnCategory.WATER_UNDERGROUND_CREATURE, limit); } -@@ -1803,6 +1836,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { +@@ -1856,6 +1889,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { @Override @Deprecated public void setAmbientSpawnLimit(int limit) { @@ -19841,7 +19826,7 @@ index ffd284f0e25c6f20672f7225aafd37e6c87ccf03..6b535d154e33947a85a2fe5b40a241a9 this.setSpawnLimit(SpawnCategory.AMBIENT, limit); } -@@ -1825,6 +1859,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { +@@ -1878,6 +1912,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { @Override public void setSpawnLimit(SpawnCategory spawnCategory, int limit) { @@ -19849,7 +19834,7 @@ index ffd284f0e25c6f20672f7225aafd37e6c87ccf03..6b535d154e33947a85a2fe5b40a241a9 Preconditions.checkArgument(spawnCategory != null, "SpawnCategory cannot be null"); Preconditions.checkArgument(CraftSpawnCategory.isValidForLimits(spawnCategory), "SpawnCategory.%s are not supported", spawnCategory); -@@ -1907,7 +1942,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { +@@ -1960,7 +1995,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { if (!(entity instanceof CraftEntity craftEntity) || entity.getWorld() != this || sound == null || category == null) return; ClientboundSoundEntityPacket packet = new ClientboundSoundEntityPacket(CraftSound.bukkitToMinecraftHolder(sound), net.minecraft.sounds.SoundSource.valueOf(category.name()), craftEntity.getHandle(), volume, pitch, seed); @@ -19858,7 +19843,7 @@ index ffd284f0e25c6f20672f7225aafd37e6c87ccf03..6b535d154e33947a85a2fe5b40a241a9 if (entityTracker != null) { entityTracker.broadcastAndSend(packet); } -@@ -1919,7 +1954,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { +@@ -1972,7 +2007,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { if (!(entity instanceof CraftEntity craftEntity) || entity.getWorld() != this || sound == null || category == null) return; ClientboundSoundEntityPacket packet = new ClientboundSoundEntityPacket(Holder.direct(SoundEvent.createVariableRangeEvent(ResourceLocation.parse(sound))), net.minecraft.sounds.SoundSource.valueOf(category.name()), craftEntity.getHandle(), volume, pitch, seed); @@ -19867,7 +19852,7 @@ index ffd284f0e25c6f20672f7225aafd37e6c87ccf03..6b535d154e33947a85a2fe5b40a241a9 if (entityTracker != null) { entityTracker.broadcastAndSend(packet); } -@@ -2008,6 +2043,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { +@@ -2061,6 +2096,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { @Override public boolean setGameRuleValue(String rule, String value) { @@ -19875,7 +19860,7 @@ index ffd284f0e25c6f20672f7225aafd37e6c87ccf03..6b535d154e33947a85a2fe5b40a241a9 // No null values allowed if (rule == null || value == null) return false; -@@ -2050,6 +2086,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { +@@ -2103,6 +2139,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { @Override public boolean setGameRule(GameRule rule, T newValue) { @@ -19883,7 +19868,7 @@ index ffd284f0e25c6f20672f7225aafd37e6c87ccf03..6b535d154e33947a85a2fe5b40a241a9 Preconditions.checkArgument(rule != null, "GameRule cannot be null"); Preconditions.checkArgument(newValue != null, "GameRule value cannot be null"); -@@ -2276,6 +2313,12 @@ public class CraftWorld extends CraftRegionAccessor implements World { +@@ -2329,6 +2366,12 @@ public class CraftWorld extends CraftRegionAccessor implements World { @Override public void sendGameEvent(Entity sourceEntity, org.bukkit.GameEvent gameEvent, Vector position) { @@ -19896,7 +19881,7 @@ index ffd284f0e25c6f20672f7225aafd37e6c87ccf03..6b535d154e33947a85a2fe5b40a241a9 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 -@@ -2404,7 +2447,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { +@@ -2454,7 +2497,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 @@ -19905,7 +19890,7 @@ index ffd284f0e25c6f20672f7225aafd37e6c87ccf03..6b535d154e33947a85a2fe5b40a241a9 net.minecraft.world.level.chunk.LevelChunk immediate = this.world.getChunkSource().getChunkAtIfLoadedImmediately(x, z); if (immediate != null) { return java.util.concurrent.CompletableFuture.completedFuture(new CraftChunk(immediate)); -@@ -2421,7 +2464,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { +@@ -2471,7 +2514,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { java.util.concurrent.CompletableFuture ret = new java.util.concurrent.CompletableFuture<>(); ca.spottedleaf.moonrise.common.util.ChunkSystem.scheduleChunkLoad(this.getHandle(), x, z, gen, ChunkStatus.FULL, true, priority, (c) -> { @@ -20145,7 +20130,7 @@ index fa63a6cfcfcc4eee4503a82d85333c139c8c8b2b..def7749e6dc4ae8351b72deefc759366 net.minecraft.world.item.ItemStack nms = org.bukkit.craftbukkit.inventory.CraftItemStack.asNMSCopy(item); diff --git a/src/main/java/org/bukkit/craftbukkit/command/ConsoleCommandCompleter.java b/src/main/java/org/bukkit/craftbukkit/command/ConsoleCommandCompleter.java -index 3e93a6c489972ff2b4ecff3d83cc72b2d5c970f8..66dc7e20544c7000f4824b02cc3a31bc5c87f74c 100644 +index a45e658996e483e9a21cfd8178153ddb7b87ae69..25303f144422469350fdc6f84320b16bcc9f6e0c 100644 --- a/src/main/java/org/bukkit/craftbukkit/command/ConsoleCommandCompleter.java +++ b/src/main/java/org/bukkit/craftbukkit/command/ConsoleCommandCompleter.java @@ -50,7 +50,7 @@ public class ConsoleCommandCompleter implements Completer { @@ -20167,7 +20152,7 @@ index 3e93a6c489972ff2b4ecff3d83cc72b2d5c970f8..66dc7e20544c7000f4824b02cc3a31bc List offers = waitable.get(); if (offers == null) { diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java -index cd789c235acf740ec29c30b180e7fbe1a140caa9..f05e9a36cbb8476c355fc79da2c670c8a362cdb0 100644 +index 89c8713d2c2206d1b0d8c0a392c9d13b3e736f0c..88dd653f3c7871cae5983f4a0f62af0f3dd1bd99 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java @@ -79,6 +79,11 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { @@ -20295,19 +20280,20 @@ index cd789c235acf740ec29c30b180e7fbe1a140caa9..f05e9a36cbb8476c355fc79da2c670c8 return java.util.Collections.emptySet(); } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index a0d5082590ee03060f0dbb4770d196efc316c328..0e3eed03f307a414effdd30414b8d01797349908 100644 +index 42d7660efe5baa6f796f2a7606686c765b6f2478..b402eb28568f9f9609c3bf93ca28a1fc4c8f5aa7 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -649,7 +649,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -651,7 +651,8 @@ public class CraftPlayer extends CraftHumanEntity implements Player { @Override public void kickPlayer(String message) { - org.spigotmc.AsyncCatcher.catchOp("player kick"); // Spigot + //org.spigotmc.AsyncCatcher.catchOp("player kick"); // Spigot // Folia - thread-safe now, as it will simply delay the kick - if (this.getHandle().connection == null) return; ++ if (this.getHandle().transferCookieConnection == null) return; + this.getHandle().transferCookieConnection.kickPlayer(CraftChatMessage.fromStringOrEmpty(message, true), org.bukkit.event.player.PlayerKickEvent.Cause.PLUGIN); // Paper - kick event cause + } - this.getHandle().connection.disconnect(CraftChatMessage.fromStringOrEmpty(message, true), org.bukkit.event.player.PlayerKickEvent.Cause.PLUGIN); // Paper - kick event cause -@@ -1408,6 +1408,11 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -1412,6 +1413,11 @@ public class CraftPlayer extends CraftHumanEntity implements Player { @Override public boolean teleport(Location location, org.bukkit.event.player.PlayerTeleportEvent.TeleportCause cause, io.papermc.paper.entity.TeleportFlag... flags) { @@ -20319,7 +20305,7 @@ index a0d5082590ee03060f0dbb4770d196efc316c328..0e3eed03f307a414effdd30414b8d017 Set relativeArguments; Set allFlags; if (flags.length == 0) { -@@ -2060,7 +2065,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -2064,7 +2070,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { private void unregisterEntity(Entity other) { // Paper end ChunkMap tracker = ((ServerLevel) this.getHandle().level()).getChunkSource().chunkMap; @@ -20328,7 +20314,7 @@ index a0d5082590ee03060f0dbb4770d196efc316c328..0e3eed03f307a414effdd30414b8d017 if (entry != null) { entry.removePlayer(this.getHandle()); } -@@ -2157,7 +2162,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -2161,7 +2167,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { if (original != null) otherPlayer.setUUID(original); // Paper - uuid override } @@ -20337,7 +20323,7 @@ index a0d5082590ee03060f0dbb4770d196efc316c328..0e3eed03f307a414effdd30414b8d017 if (entry != null && !entry.seenBy.contains(this.getHandle().connection)) { entry.updatePlayer(this.getHandle()); } -@@ -3353,7 +3358,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -3357,7 +3363,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { { if ( CraftPlayer.this.getHealth() <= 0 && CraftPlayer.this.isOnline() ) { @@ -20347,7 +20333,7 @@ index a0d5082590ee03060f0dbb4770d196efc316c328..0e3eed03f307a414effdd30414b8d017 } diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -index 77ef27f9254235180a8596c6c8c4af750dc759d1..f2a3cb4be886bd81d795b57b97536306534c5973 100644 +index 4632eb883e9f5efde520ee543bcad25827c0da2c..d1de8ce4b479affaa6aa493ad2c2a86d3e03deb3 100644 --- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java @@ -953,7 +953,7 @@ public class CraftEventFactory { @@ -20390,7 +20376,7 @@ index 2f4d6b56301195f8d39ed50dffe842464065bfe1..5a24902b735cbd64dd5cd5ad46b096c4 if (!this.isAsyncScheduler && !task.isSync()) { this.asyncScheduler.handle(task, delay); diff --git a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java -index 28dbe30a98a6730839949bc9a6a90b78619ff84d..c9e31dcdde9d96edfc12e694065f1f4643bb9db3 100644 +index cdeb340cad6d650300bfb5e62a121449094e3ec1..98c87c3c657f411454948241bc5b5c36165130d6 100644 --- a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java +++ b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java @@ -369,6 +369,12 @@ public final class CraftMagicNumbers implements UnsafeValues { diff --git a/patches/server/0004-Max-pending-logins.patch b/patches/server/0004-Max-pending-logins.patch index e9e288ac08..6f0751f33f 100644 --- a/patches/server/0004-Max-pending-logins.patch +++ b/patches/server/0004-Max-pending-logins.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Max pending logins Should help the floodgates on launch diff --git a/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java -index bc9956d36ce3adabd50dc4b6467a0fd24386e4e0..d0f8a81ed0363764d185682c3de667703d30e8eb 100644 +index 9451cccebf7acee3bd9f28f4f9d60412d1554ff4..8098b1a447a7c054e15edc09d2fa50e48f73e926 100644 --- a/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java -@@ -112,7 +112,7 @@ public class ServerLoginPacketListenerImpl implements ServerLoginPacketListener, +@@ -117,7 +117,7 @@ public class ServerLoginPacketListenerImpl implements ServerLoginPacketListener, if (this.server.getPlayerList().pushPendingJoin(name, uniqueId, this.connection)) { // Folia end - region threading - rewrite login process this.verifyLoginAndFinishConnectionSetup((GameProfile) Objects.requireNonNull(this.authenticatedProfile)); @@ -19,7 +19,7 @@ index bc9956d36ce3adabd50dc4b6467a0fd24386e4e0..d0f8a81ed0363764d185682c3de66770 // CraftBukkit start diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index 4e484a111fc8d7a98e89aa06042bcd1d61c8cfad..cc0c75340cc366f07a5bf169b4de50ba2d9ce366 100644 +index 444f363e577344e962ffc515f6a052e349a0466d..7503afc82ec13a7f5732d32d70ce47900a747352 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java @@ -175,6 +175,17 @@ public abstract class PlayerList { diff --git a/patches/server/0006-Make-CraftEntity-getHandle-and-overrides-perform-thr.patch b/patches/server/0006-Make-CraftEntity-getHandle-and-overrides-perform-thr.patch index bf20e2527f..3cf5d3d8b3 100644 --- a/patches/server/0006-Make-CraftEntity-getHandle-and-overrides-perform-thr.patch +++ b/patches/server/0006-Make-CraftEntity-getHandle-and-overrides-perform-thr.patch @@ -29,10 +29,10 @@ index 41bf71d116ffc5431586ce54abba7f8def6c1dcf..1cf9a7677449ab8f03fb23d835e3fadc } diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index d1a8e8a7f03f1769431b6711cf842898e8c59aaa..0dce7e72a2c5f7360a43b662b43b47603e2aa213 100644 +index 4aefadd491f1c0c541d23fcaeaf03fd2ae995f3e..2ccc358daae43dcebf03db64526f17fbd9df23f8 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -3044,6 +3044,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3046,6 +3046,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess if (!force && (!this.canRide(entity) || !entity.canAddPassenger(this))) { return false; } else { @@ -40,7 +40,7 @@ index d1a8e8a7f03f1769431b6711cf842898e8c59aaa..0dce7e72a2c5f7360a43b662b43b4760 // CraftBukkit start if (entity.getBukkitEntity() instanceof Vehicle && this.getBukkitEntity() instanceof LivingEntity) { VehicleEnterEvent event = new VehicleEnterEvent((Vehicle) entity.getBukkitEntity(), this.getBukkitEntity()); -@@ -3065,6 +3066,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3067,6 +3068,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess return false; } // CraftBukkit end @@ -48,7 +48,7 @@ index d1a8e8a7f03f1769431b6711cf842898e8c59aaa..0dce7e72a2c5f7360a43b662b43b4760 if (this.isPassenger()) { this.stopRiding(); } -@@ -3148,6 +3150,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3150,6 +3152,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess throw new IllegalStateException("Use x.stopRiding(y), not y.removePassenger(x)"); } else { // CraftBukkit start @@ -56,7 +56,7 @@ index d1a8e8a7f03f1769431b6711cf842898e8c59aaa..0dce7e72a2c5f7360a43b662b43b4760 CraftEntity craft = (CraftEntity) entity.getBukkitEntity().getVehicle(); Entity orig = craft == null ? null : craft.getHandle(); if (this.getBukkitEntity() instanceof Vehicle && entity.getBukkitEntity() instanceof LivingEntity) { -@@ -3175,6 +3178,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3177,6 +3180,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess return false; } // CraftBukkit end @@ -153,10 +153,10 @@ index 5beaa2bb0d58fe477ce8d2de8b77600d3b416d8c..c8406f2d83f4c8b60efec0de546f4576 } // Paper end diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractVillager.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractVillager.java -index 34e4c763c7ec971885147ab2509281fad56e1ca6..7fb2e28c12dba743d8c2fb0a8a4e2f3e76d151f6 100644 +index 3199f04d00836a0a51547c679f3f3c80d00da502..a1959919109fe04d4b829dcd2d244842ab05fe13 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractVillager.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractVillager.java -@@ -17,8 +17,16 @@ public class CraftAbstractVillager extends CraftAgeable implements AbstractVilla +@@ -15,8 +15,16 @@ public class CraftAbstractVillager extends CraftAgeable implements CraftMerchant super(server, entity); } @@ -979,7 +979,7 @@ index d657fd2c507a5b215aeab0a5f3e9c2ee892a27c8..399ef60ab5f1bf02b638c8c46a72d297 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java -index f05e9a36cbb8476c355fc79da2c670c8a362cdb0..ed840f7c36265354ebf07c9fbe2c42155ea1fc4b 100644 +index 88dd653f3c7871cae5983f4a0f62af0f3dd1bd99..7be80f2774b5ec3d0bede096da8f2b6d1cf7b09b 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java @@ -498,7 +498,7 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { @@ -1441,10 +1441,10 @@ index 9b6ff0f64966c78a3233860bb0840182b52f01bc..fb34651a9e4ed0cb05721d15524a26f8 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java -index c1bad887d1340ebc7c63fda3dceff929e4a44517..37c8bd3dc3e539ca92216ae5c2896b037d9af21e 100644 +index 7dcfb45c24d7743956be514c7d554e06aac77b3e..6a052ed8d66a62b42c98a3b1d60263dd8018fed1 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java -@@ -290,8 +290,16 @@ public class CraftHumanEntity extends CraftLivingEntity implements HumanEntity { +@@ -298,8 +298,16 @@ public class CraftHumanEntity extends CraftLivingEntity implements HumanEntity { this.mode = mode; } @@ -1677,7 +1677,7 @@ index e9f471e60af0725ec34e2985d63ae9ea9f88590a..cd824fc65ac2b1fe55710da4700f7c31 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java -index beb6ad312028adb14053e3f019a4fcf6c9149373..90939123cd749321d3846f0970aa75417c1a0f52 100644 +index 4750df7354ccb5afd0910efe0415f3a2eb19a546..07e7f8b9da47f80ef01f3914129be2a4c3c8951d 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java @@ -477,6 +477,13 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { @@ -2234,10 +2234,10 @@ index 2638c341bc02f201f7ab17fdebcdbdf3a7ec05bf..074b2919be2b5544b0a46e6cd32f6c57 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 0e3eed03f307a414effdd30414b8d01797349908..28c6923c90ca106256ca75769828cd62d5542ca7 100644 +index b402eb28568f9f9609c3bf93ca28a1fc4c8f5aa7..913c0403c6c9ec5d2b7b48452c84bc6223a60690 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -669,7 +669,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -670,7 +670,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { @Override public void kick(net.kyori.adventure.text.Component message, org.bukkit.event.player.PlayerKickEvent.Cause cause) { @@ -2246,7 +2246,7 @@ index 0e3eed03f307a414effdd30414b8d01797349908..28c6923c90ca106256ca75769828cd62 final ServerGamePacketListenerImpl connection = this.getHandle().connection; if (connection != null) { connection.disconnect(message == null ? net.kyori.adventure.text.Component.empty() : message, cause); -@@ -2311,9 +2311,16 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -2316,9 +2316,16 @@ public class CraftPlayer extends CraftHumanEntity implements Player { return this; } diff --git a/patches/server/0007-Throw-UnsupportedOperationException-for-broken-APIs.patch b/patches/server/0007-Throw-UnsupportedOperationException-for-broken-APIs.patch index 611d5a7767..df158eb359 100644 --- a/patches/server/0007-Throw-UnsupportedOperationException-for-broken-APIs.patch +++ b/patches/server/0007-Throw-UnsupportedOperationException-for-broken-APIs.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Throw UnsupportedOperationException() for broken APIs diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 454cac11619fc1e8317db0b95a174f6747af6e60..39e4493ef5c7d4bfd903da18b76e14235a535ab5 100644 +index 4b96a1f9e9ac3b65f7c9f0a3742792395fba1c8e..8d138a38e9e7af10ae6128ecb467e662c86729e7 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -1310,6 +1310,7 @@ public final class CraftServer implements Server { diff --git a/patches/server/0010-Prevent-block-updates-in-non-loaded-or-non-owned-chu.patch b/patches/server/0010-Prevent-block-updates-in-non-loaded-or-non-owned-chu.patch index 1cab7bea2a..f3bbeb7f74 100644 --- a/patches/server/0010-Prevent-block-updates-in-non-loaded-or-non-owned-chu.patch +++ b/patches/server/0010-Prevent-block-updates-in-non-loaded-or-non-owned-chu.patch @@ -9,10 +9,10 @@ add explicit block update suppression techniques, it's better than the server crashing. diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index b0ad25daf2d3c1727c61686e35eb4c03e1c60122..d963e8a6a498232a9ae760b2befaa17578a192f8 100644 +index d518487433088f090edb0d12e222b85f0c93b792..db232ac0cc27ddff4bc25ba9b9a5f3a1996fc4e8 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java -@@ -1919,7 +1919,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl +@@ -1936,7 +1936,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl Direction enumdirection = (Direction) iterator.next(); BlockPos blockposition1 = pos.relative(enumdirection); diff --git a/patches/server/0012-Skip-worldstate-access-when-waking-players-up-during.patch b/patches/server/0012-Skip-worldstate-access-when-waking-players-up-during.patch index f5c4e80937..0d03372190 100644 --- a/patches/server/0012-Skip-worldstate-access-when-waking-players-up-during.patch +++ b/patches/server/0012-Skip-worldstate-access-when-waking-players-up-during.patch @@ -9,7 +9,7 @@ data deserialization and is racey even in Vanilla. But in Folia, some accesses may throw and as such we need to fix this directly. diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 9f379fd5f3999e64c9b37851316ecd9069e19201..d681ec617590a3718f926cd5a9749952d5ac52bd 100644 +index 2f55541136976a8a04a657d87a658b11a1e1db2f..673d94f56882e86545e5e435ecb39caf8a8d43fe 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java @@ -709,7 +709,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple @@ -22,10 +22,10 @@ index 9f379fd5f3999e64c9b37851316ecd9069e19201..d681ec617590a3718f926cd5a9749952 // CraftBukkit start diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 6e2ce383bb4d52702dfcb8823ce0c5dce7c81b5f..bd544eee8d7439a466f0f82e7d7a51a63b7294c0 100644 +index 551ad6757e76ec9c731488f0355d4950ad1b0bd4..9b8fd458c851d72901568845d973330ed58260a9 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -4448,6 +4448,11 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -4451,6 +4451,11 @@ public abstract class LivingEntity extends Entity implements Attackable { } }); diff --git a/patches/server/0016-Sync-vehicle-position-to-player-position-on-player-d.patch b/patches/server/0016-Sync-vehicle-position-to-player-position-on-player-d.patch index 9419b90cb2..62bd7d8f19 100644 --- a/patches/server/0016-Sync-vehicle-position-to-player-position-on-player-d.patch +++ b/patches/server/0016-Sync-vehicle-position-to-player-position-on-player-d.patch @@ -7,7 +7,7 @@ This allows the player to be re-positioned before logging into the world without causing thread checks to trip on Folia. diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index cc0c75340cc366f07a5bf169b4de50ba2d9ce366..5b68d16ef099285482e66a714d2e2f4c54e011ab 100644 +index 7503afc82ec13a7f5732d32d70ce47900a747352..77164bd5d562a72d5936dc84a41071472421eeb5 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java @@ -516,7 +516,13 @@ public abstract class PlayerList { diff --git a/patches/server/0017-Region-profiler.patch b/patches/server/0017-Region-profiler.patch index 8db3b3c6b6..614cc5f286 100644 --- a/patches/server/0017-Region-profiler.patch +++ b/patches/server/0017-Region-profiler.patch @@ -1460,7 +1460,7 @@ index eda5f0d099f9f8621de8ad7808098abf6f5cb544..ac56b02498eb38883ae462be6ef3d15c this.profiler.popPush("players"); MinecraftTimings.playerListTimer.startTiming(); // Spigot // Paper diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java -index dff1f17a4c164e82ed4f5d9e9f48ee62c671e589..728454fcfbeddcfe1b0a95e89827f33d7f7838bc 100644 +index 6f746f5ce9751dce4912f7633c126788eb684bd0..74524dcd4539a31e9d0037cd607ffbfce02f414c 100644 --- a/src/main/java/net/minecraft/server/level/ChunkMap.java +++ b/src/main/java/net/minecraft/server/level/ChunkMap.java @@ -392,13 +392,18 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider @@ -1641,7 +1641,7 @@ index e13ccac27fa4f4c23185f12c776e80970ab844e6..135fa024d81b962761f0edc6896a2a50 // Paper end - chunk tick iteration optimisations 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 489b0019a859462756634a144952eb7e1fe973e3..0166d6bd686d68ffdcc42e908b0d1aa41a3bffdf 100644 +index f03f968d1526fbcff1ae87376370ba5976c2b807..90d78ddf8518c0df307cdaa8b7cfb5549491c6e5 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java @@ -709,6 +709,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. @@ -1785,10 +1785,10 @@ index 489b0019a859462756634a144952eb7e1fe973e3..0166d6bd686d68ffdcc42e908b0d1aa4 } else { passenger.stopRiding(); diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index 5b68d16ef099285482e66a714d2e2f4c54e011ab..0bc623397576fc7c95fdeebf86b660b7ae1f2c25 100644 +index 77164bd5d562a72d5936dc84a41071472421eeb5..93ceea16e436e9227bc983417b258c307156198e 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -1292,6 +1292,7 @@ public abstract class PlayerList { +@@ -1299,6 +1299,7 @@ public abstract class PlayerList { public void saveAll(int interval) { io.papermc.paper.util.MCUtil.ensureMain("Save Players" , () -> { // Paper - Ensure main @@ -1796,7 +1796,7 @@ index 5b68d16ef099285482e66a714d2e2f4c54e011ab..0bc623397576fc7c95fdeebf86b660b7 MinecraftTimings.savePlayers.startTiming(); // Paper int numSaved = 0; long now = System.nanoTime(); // Folia - region threading -@@ -1303,7 +1304,9 @@ public abstract class PlayerList { +@@ -1310,7 +1311,9 @@ public abstract class PlayerList { } // Folia end - region threading if (interval == -1 || now - entityplayer.lastSave >= timeInterval) { // Folia - region threading @@ -1838,7 +1838,7 @@ index cb61462d4691a055a4b25f7b953609d8a154fdfe..c74a01a8551457507441d266b6923b42 this.factory = factory; this.category = spawnGroup; diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index d963e8a6a498232a9ae760b2befaa17578a192f8..4bb14874912557008fab7361754f2d2eb98fc5aa 100644 +index db232ac0cc27ddff4bc25ba9b9a5f3a1996fc4e8..3e739362046d624dd46412f7c50a7220d26593cf 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java @@ -203,6 +203,9 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl diff --git a/patches/server/0018-Disable-spark-profiler.patch b/patches/server/0018-Disable-spark-profiler.patch index 961061104e..bc8978e5e3 100644 --- a/patches/server/0018-Disable-spark-profiler.patch +++ b/patches/server/0018-Disable-spark-profiler.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Disable spark profiler It's not thread-safe. The plugin instead needs to be used. diff --git a/src/main/java/io/papermc/paper/SparksFly.java b/src/main/java/io/papermc/paper/SparksFly.java -index c7c396a7a94c35d973eb0796f8aba6e669ed5b7c..5e1eb6e1853ff19f26ca6f01dac77a05c804f539 100644 +index 19c4aa20617f555d02f9c1c5a93b7204ab7251d8..4b30b05dcd99176715d49133fb99b96383a0ecbc 100644 --- a/src/main/java/io/papermc/paper/SparksFly.java +++ b/src/main/java/io/papermc/paper/SparksFly.java -@@ -108,7 +108,7 @@ public final class SparksFly { +@@ -109,7 +109,7 @@ public final class SparksFly { private void enable() { if (!this.enabled) { @@ -18,7 +18,7 @@ index c7c396a7a94c35d973eb0796f8aba6e669ed5b7c..5e1eb6e1853ff19f26ca6f01dac77a05 this.enabled = true; this.spark.enable(); } else { -@@ -160,7 +160,7 @@ public final class SparksFly { +@@ -161,7 +161,7 @@ public final class SparksFly { } public static boolean isPluginPreferred() { From bfa4ae5d16b6b81e482cab3c0e7f9bca228f84c9 Mon Sep 17 00:00:00 2001 From: Antoine PRONNIER Date: Thu, 17 Oct 2024 20:45:38 +0200 Subject: [PATCH 2/2] Update paper --- gradle.properties | 2 +- patches/server/0003-Threaded-Regions.patch | 51 +++++----------------- 2 files changed, 12 insertions(+), 41 deletions(-) diff --git a/gradle.properties b/gradle.properties index f06fc613d8..807fe1bd4a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ group=dev.folia version=1.21.1-R0.1-SNAPSHOT mcVersion=1.21.1 -paperRef=4430e96e1b82f3e8244a5c979afb7a69f38222aa +paperRef=aebbdc9e9a18b580d2647af52f77a506bcf7bbc2 org.gradle.caching=true org.gradle.parallel=true diff --git a/patches/server/0003-Threaded-Regions.patch b/patches/server/0003-Threaded-Regions.patch index cc66c877d8..8739f2b775 100644 --- a/patches/server/0003-Threaded-Regions.patch +++ b/patches/server/0003-Threaded-Regions.patch @@ -7829,7 +7829,7 @@ index cb308808906a8cdb127df8284e106e00553473ca..05bc1f010b50e673e9a185d96e338bae } diff --git a/src/main/java/net/minecraft/network/Connection.java b/src/main/java/net/minecraft/network/Connection.java -index 3e550f8e7cd4f4e16f499a8a2a4b95420270f07a..b0136591a37734493a310332b1f56f1259f913af 100644 +index 4a8356a714ed50d4a32bcf046a2e16491bef014b..cf160825199374f2c99ac200b371da95c612043c 100644 --- a/src/main/java/net/minecraft/network/Connection.java +++ b/src/main/java/net/minecraft/network/Connection.java @@ -93,7 +93,7 @@ public class Connection extends SimpleChannelInboundHandler> { @@ -8089,7 +8089,7 @@ index 3e550f8e7cd4f4e16f499a8a2a4b95420270f07a..b0136591a37734493a310332b1f56f12 } -@@ -887,10 +944,10 @@ public class Connection extends SimpleChannelInboundHandler> { +@@ -895,10 +952,10 @@ public class Connection extends SimpleChannelInboundHandler> { public void handleDisconnection() { if (this.channel != null && !this.channel.isOpen()) { @@ -8102,7 +8102,7 @@ index 3e550f8e7cd4f4e16f499a8a2a4b95420270f07a..b0136591a37734493a310332b1f56f12 PacketListener packetlistener = this.getPacketListener(); PacketListener packetlistener1 = packetlistener != null ? packetlistener : this.disconnectListener; -@@ -922,6 +979,22 @@ public class Connection extends SimpleChannelInboundHandler> { +@@ -930,6 +987,22 @@ public class Connection extends SimpleChannelInboundHandler> { } } // Paper end - Add PlayerConnectionCloseEvent @@ -8125,7 +8125,7 @@ index 3e550f8e7cd4f4e16f499a8a2a4b95420270f07a..b0136591a37734493a310332b1f56f12 } } -@@ -942,15 +1015,25 @@ public class Connection extends SimpleChannelInboundHandler> { +@@ -950,15 +1023,25 @@ public class Connection extends SimpleChannelInboundHandler> { // Paper start - Optimize network public void clearPacketQueue() { final net.minecraft.server.level.ServerPlayer player = getPlayer(); @@ -12521,7 +12521,7 @@ index 5a8a33638ceb1d980ffc3e6dd86e7eb11dfd9375..67b45f2916fa061e7430c6f3987bdb25 public boolean isOldChunkAround(ChunkPos chunkPos, int checkRadius) { diff --git a/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java -index 6998f32f8d79dbdb6b31ffaa126602fc4a428616..aae9002c0072f3ca6aefd10e9247116d0995e9b0 100644 +index 7174f8c89a7cdcf40ff28f6636ecfb23b13ccdaa..f1c678337f7760ccec21dadd646a29f6aae3a6bb 100644 --- a/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java @@ -113,6 +113,10 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack @@ -12554,19 +12554,7 @@ index 6998f32f8d79dbdb6b31ffaa126602fc4a428616..aae9002c0072f3ca6aefd10e9247116d } -@@ -137,9 +149,9 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack - this.keepAlivePending = false; - } else if (!this.isSingleplayerOwner()) { - // Paper start - This needs to be handled on the main thread for plugins -- server.submit(() -> { -+ // Folia - region threading - do not schedule to main anymore, there is no main - this.disconnect(ServerCommonPacketListenerImpl.TIMEOUT_DISCONNECTION_MESSAGE, PlayerKickEvent.Cause.TIMEOUT); // Paper - kick event cause -- }); -+ // Folia - region threading - do not schedule to main anymore, there is no main - // Paper end - This needs to be handled on the main thread for plugins - } - -@@ -351,24 +363,8 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack +@@ -347,24 +359,8 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack if (this.processedDisconnect) { return; } @@ -12593,7 +12581,7 @@ index 6998f32f8d79dbdb6b31ffaa126602fc4a428616..aae9002c0072f3ca6aefd10e9247116d return; } -@@ -401,7 +397,7 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack +@@ -397,7 +393,7 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack Objects.requireNonNull(this.connection); // CraftBukkit - Don't wait @@ -12601,7 +12589,7 @@ index 6998f32f8d79dbdb6b31ffaa126602fc4a428616..aae9002c0072f3ca6aefd10e9247116d + // Folia - region threading } - protected boolean isSingleplayerOwner() { + // Paper start - add proper async disconnect diff --git a/src/main/java/net/minecraft/server/network/ServerConfigurationPacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerConfigurationPacketListenerImpl.java index 880e5c52746e9e3a9a1f42ec6461be54e3ee136c..34c7fbf154c42d07b3b317b13632243a81904e3c 100644 --- a/src/main/java/net/minecraft/server/network/ServerConfigurationPacketListenerImpl.java @@ -12703,7 +12691,7 @@ index 3a9e25b436f366fffe08c3b0c1fce11ed42ee646..ae88c6e2635b1608383f8c74813d723f Collections.shuffle( this.connections ); } diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index befeaac4786760f6847a5945da2296a3e68dbb17..b6abbf351809635fcf3fed1476e3bb2f8ccdaccb 100644 +index 064d52d4479727c6a32bf357be8da32d1760e7fc..4bbe9c0ad321c55b2108c38c409ceea583337ad0 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 @@ -12841,24 +12829,6 @@ index befeaac4786760f6847a5945da2296a3e68dbb17..b6abbf351809635fcf3fed1476e3bb2f return; } -@@ -791,7 +826,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 -- this.disconnect(Component.translatable("disconnect.spam"), org.bukkit.event.player.PlayerKickEvent.Cause.SPAM); // Paper - Kick event cause -+ this.disconnect(Component.translatable("disconnect.spam"), org.bukkit.event.player.PlayerKickEvent.Cause.SPAM); // Paper - Kick event cause // Folia - region threading - return; - } - // CraftBukkit end -@@ -803,7 +838,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl - // Paper start - final int index; - if (packet.getCommand().length() > 64 && ((index = packet.getCommand().indexOf(' ')) == -1 || index >= 64)) { -- this.disconnect(Component.translatable("disconnect.spam"), org.bukkit.event.player.PlayerKickEvent.Cause.SPAM); -+ this.disconnect(Component.translatable("disconnect.spam"), org.bukkit.event.player.PlayerKickEvent.Cause.SPAM); // Folia - region threading - return; - } - // Paper end @@ -828,7 +863,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl } @@ -12873,8 +12843,9 @@ index befeaac4786760f6847a5945da2296a3e68dbb17..b6abbf351809635fcf3fed1476e3bb2f // Paper end - Book size limits // CraftBukkit start - if (this.lastBookTick + 20 > MinecraftServer.currentTick) { +- this.disconnectAsync(Component.literal("Book edited too quickly!"), org.bukkit.event.player.PlayerKickEvent.Cause.ILLEGAL_ACTION); // Paper - kick event cause // Paper - add proper async disconnect + if (this.lastBookTick + 20 > this.lastTick) { // Folia - region threading - this.disconnect(Component.literal("Book edited too quickly!"), org.bukkit.event.player.PlayerKickEvent.Cause.ILLEGAL_ACTION); // Paper - kick event cause ++ this.disconnectAsync(Component.literal("Book edited too quickly!"), org.bukkit.event.player.PlayerKickEvent.Cause.ILLEGAL_ACTION); // Paper - add proper async disconnect return; } - this.lastBookTick = MinecraftServer.currentTick;