From 8ac38d927f16698fadaa7cf6be5507ba2eb742d5 Mon Sep 17 00:00:00 2001 From: granny Date: Thu, 25 Jan 2024 01:07:43 -0800 Subject: [PATCH] Updated Upstream (Paper) Upstream has released updates that appear to apply and compile correctly Paper Changes: PaperMC/Paper@484d6bf [ci skip] Move some disruptive patches back PaperMC/Paper@52619e7 [ci skip] Add more patch identifying comments PaperMC/Paper@e660379 [ci skip] Move some disruptive patches back PaperMC/Paper@c57d1aa Move diffs around to compile without later ones applied PaperMC/Paper@581b101 Add world to Entity AddTo/RemoveFrom Events (#10183) PaperMC/Paper@24dc2bf Add BlockStateMeta#clearBlockState (#10160) PaperMC/Paper@76da4bc Expose LootTable of DecoratedPot (#10023) PaperMC/Paper@11645e3 [ci skip] (Mostly) finish adding identifying patch comments PaperMC/Paper@51bef80 [ci skip] Remove removed patches PaperMC/Paper@ad2cf68 [ci skip] Move chunk system patch back a bit PaperMC/Paper@d405ff1 [ci skip] Fixup last commit PaperMC/Paper@a4a08b7 [ci skip] Move chunk system patch a bit back PaperMC/Paper@b700460 Convert average tick value in the GUI to the correct granularity PaperMC/Paper@1831240 [ci skip] Move chunk system patch back --- gradle.properties | 2 +- patches/api/0005-Purpur-client-support.patch | 4 +- patches/api/0010-AFK-API.patch | 4 +- patches/api/0041-Debug-Marker-API.patch | 8 +- patches/api/0042-Add-death-screen-API.patch | 4 +- .../0001-Pufferfish-Server-Changes.patch | 126 ++++++++-------- patches/server/0002-Rebrand.patch | 26 ++-- .../server/0003-Fix-pufferfish-issues.patch | 12 +- patches/server/0004-Purpur-config-files.patch | 10 +- .../server/0005-Purpur-client-support.patch | 10 +- .../0007-Component-related-conveniences.patch | 10 +- patches/server/0008-Ridables.patch | 42 +++--- .../0010-Barrels-and-enderchests-6-rows.patch | 12 +- patches/server/0012-AFK-API.patch | 22 +-- .../server/0013-Bring-back-server-name.patch | 6 +- .../0014-Configurable-server-mod-name.patch | 8 +- patches/server/0016-Lagging-threshold.patch | 10 +- .../0025-Zombie-horse-naturally-spawn.patch | 4 +- .../0045-Add-permission-for-F3-N-debug.patch | 4 +- .../0046-Configurable-TPS-Catchup.patch | 4 +- ...Add-player-death-exp-control-options.patch | 6 +- ...urable-void-damage-height-and-damage.patch | 6 +- .../0055-Add-canSaveToDisk-to-Entity.patch | 4 +- ...0059-Add-5-second-tps-average-in-tps.patch | 54 +++---- .../server/0061-Item-entity-immunities.patch | 6 +- ...-Add-allow-water-in-end-world-option.patch | 4 +- patches/server/0074-Squid-EAR-immunity.patch | 4 +- ...Stop-squids-floating-on-top-of-water.patch | 6 +- ...tities-can-use-portals-configuration.patch | 6 +- .../0096-Configurable-daylight-cycle.patch | 6 +- patches/server/0117-Implement-TPSBar.patch | 16 +- ...therite-armor-grants-fire-resistance.patch | 6 +- ...0124-Add-EntityTeleportHinderedEvent.patch | 6 +- ...26-Movement-options-for-armor-stands.patch | 4 +- .../server/0127-Fix-stuck-in-portals.patch | 6 +- patches/server/0147-Drowning-Settings.patch | 6 +- ...nge-multiplier-critical-damage-value.patch | 4 +- ...173-API-for-any-mob-to-burn-daylight.patch | 12 +- .../0176-Add-toggle-for-sand-duping-fix.patch | 8 +- ...ggle-for-end-portal-safe-teleporting.patch | 4 +- ...after-eating-food-fills-hunger-bar-c.patch | 10 +- ...layer-join-full-server-by-permission.patch | 4 +- .../0181-Add-portal-permission-bypass.patch | 10 +- patches/server/0187-Add-uptime-command.patch | 8 +- .../0194-Player-ridable-in-water-option.patch | 6 +- .../0208-Extended-OfflinePlayer-API.patch | 4 +- ...the-ability-to-add-combustible-items.patch | 4 +- .../server/0218-UPnP-Port-Forwarding.patch | 6 +- ...rable-valid-characters-for-usernames.patch | 4 +- ...counts-in-beehives-to-Purpur-clients.patch | 4 +- ...Configurable-player-pickup-exp-delay.patch | 4 +- patches/server/0251-Stonecutter-damage.patch | 8 +- .../0260-Add-local-difficulty-api.patch | 4 +- ...0261-Add-toggle-for-RNG-manipulation.patch | 12 +- .../0263-Allow-custom-ChatDecorators.patch | 4 +- patches/server/0264-Remove-Timings.patch | 78 +++++----- .../server/0265-Remove-Mojang-Profiler.patch | 140 ++++++++---------- patches/server/0268-Debug-Marker-API.patch | 12 +- .../server/0272-Add-death-screen-API.patch | 4 +- ...0275-Add-item-packet-serialize-event.patch | 6 +- patches/server/0284-Fire-Immunity-API.patch | 10 +- ...leport-to-spawn-on-nether-ceiling-da.patch | 4 +- .../server/0298-Shears-can-defuse-TNT.patch | 6 +- 63 files changed, 422 insertions(+), 432 deletions(-) diff --git a/gradle.properties b/gradle.properties index 295ae36e3..4e41490c3 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ group = org.purpurmc.purpur version = 1.20.4-R0.1-SNAPSHOT mcVersion = 1.20.4 -paperCommit = 25013d997057eb89471d285db2a4b40acde6272d +paperCommit = 1831240d1c48086fc0199584787cd2013d4d4b5f org.gradle.caching = true org.gradle.parallel = true diff --git a/patches/api/0005-Purpur-client-support.patch b/patches/api/0005-Purpur-client-support.patch index 26b2dc2f7..7b17c1063 100644 --- a/patches/api/0005-Purpur-client-support.patch +++ b/patches/api/0005-Purpur-client-support.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Purpur client support diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java -index ae61a39b25267b84fe0b8766e4b12d9b24b44ded..515f1d5d6a5674e5667d61651f27ca6bb6823ad5 100644 +index 815631a6157b87a9ead270fe0b11ac3892a3fbf4..f6f3493163fdc145973d1417b5cd4c4f5dddbf8b 100644 --- a/src/main/java/org/bukkit/entity/Player.java +++ b/src/main/java/org/bukkit/entity/Player.java -@@ -3574,4 +3574,13 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM +@@ -3578,4 +3578,13 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM @Override Spigot spigot(); // Spigot end diff --git a/patches/api/0010-AFK-API.patch b/patches/api/0010-AFK-API.patch index 0626fd91c..9c824ab2e 100644 --- a/patches/api/0010-AFK-API.patch +++ b/patches/api/0010-AFK-API.patch @@ -5,10 +5,10 @@ Subject: [PATCH] AFK API diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java -index 515f1d5d6a5674e5667d61651f27ca6bb6823ad5..65dfe7600a7aa7e7cc30915f04f39fde2afba688 100644 +index f6f3493163fdc145973d1417b5cd4c4f5dddbf8b..63b2f4dc478397ccadc61f8538914ff3eff808cd 100644 --- a/src/main/java/org/bukkit/entity/Player.java +++ b/src/main/java/org/bukkit/entity/Player.java -@@ -3582,5 +3582,25 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM +@@ -3586,5 +3586,25 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM * @return True if Player uses Purpur Client */ public boolean usesPurpurClient(); diff --git a/patches/api/0041-Debug-Marker-API.patch b/patches/api/0041-Debug-Marker-API.patch index 940a3c83f..d6a8a694d 100644 --- a/patches/api/0041-Debug-Marker-API.patch +++ b/patches/api/0041-Debug-Marker-API.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Debug Marker API diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java -index 610887890529db62887174a10e1687ea1883fafa..109304f8064ab2fab57f9c0f1745e446e6748b3d 100644 +index ab6c060717c01ff6d6a6153c29f2f7aa4f3a0588..2bb2b9ba757d18510e3f45304cfbb56c28113ed7 100644 --- a/src/main/java/org/bukkit/Bukkit.java +++ b/src/main/java/org/bukkit/Bukkit.java @@ -2880,5 +2880,89 @@ public final class Bukkit { @@ -179,7 +179,7 @@ index c001488119c64f9ee2babce29a8ff9f86aec9bfb..529fb1beadefc79ce6bf5755d5223301 // Purpur end } diff --git a/src/main/java/org/bukkit/World.java b/src/main/java/org/bukkit/World.java -index 8368b34d071f4f2c687e753ae52de4c03e3ac9f9..eea802fbee51e919595f6501161bf2fd58d6a1c1 100644 +index 87ab8d4d5f6311c88572fa9a5536aca991e2e86b..3d4481ea5328735357a7c60c99e5b3a073e7aa0f 100644 --- a/src/main/java/org/bukkit/World.java +++ b/src/main/java/org/bukkit/World.java @@ -4180,6 +4180,76 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient @@ -260,10 +260,10 @@ index 8368b34d071f4f2c687e753ae52de4c03e3ac9f9..eea802fbee51e919595f6501161bf2fd /** diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java -index 65dfe7600a7aa7e7cc30915f04f39fde2afba688..73415adcdd161b3b3b79be14967f805df2733030 100644 +index 63b2f4dc478397ccadc61f8538914ff3eff808cd..05dd1b62940920883c8709ea36a29e9f4574caa0 100644 --- a/src/main/java/org/bukkit/entity/Player.java +++ b/src/main/java/org/bukkit/entity/Player.java -@@ -3602,5 +3602,75 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM +@@ -3606,5 +3606,75 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM * @deprecated Use {@link #resetIdleDuration()} instead */ void resetIdleTimer(); diff --git a/patches/api/0042-Add-death-screen-API.patch b/patches/api/0042-Add-death-screen-API.patch index 9ebeb1ee0..1a018260c 100644 --- a/patches/api/0042-Add-death-screen-API.patch +++ b/patches/api/0042-Add-death-screen-API.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add death screen API diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java -index 73415adcdd161b3b3b79be14967f805df2733030..3aa79be25d63f704170baaf799482ccdde6a2830 100644 +index 05dd1b62940920883c8709ea36a29e9f4574caa0..48ef9837cc26313e76678555d7187eb3b9c8e4d7 100644 --- a/src/main/java/org/bukkit/entity/Player.java +++ b/src/main/java/org/bukkit/entity/Player.java -@@ -3672,5 +3672,25 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM +@@ -3676,5 +3676,25 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM * Clears all debug block highlights */ void clearBlockHighlights(); diff --git a/patches/server/0001-Pufferfish-Server-Changes.patch b/patches/server/0001-Pufferfish-Server-Changes.patch index e505d9bb6..adf860c63 100644 --- a/patches/server/0001-Pufferfish-Server-Changes.patch +++ b/patches/server/0001-Pufferfish-Server-Changes.patch @@ -86,10 +86,10 @@ index 376e8983fdfdbb6c3e5fd8ad0f6a05e655b622bf..658e9b4590a82d179907feea04e129fd + classpath(sourceSets.main.map { it.runtimeClasspath }) } diff --git a/src/main/java/co/aikar/timings/TimingsExport.java b/src/main/java/co/aikar/timings/TimingsExport.java -index a2f71a6d1a9e98133dff6cd0f625da9435a8af14..ff940e43ca35094bbcae6c7d471d3c4aeb7c1727 100644 +index 7620c72a4c243cbeea245203ce03a97cbfa7d922..b35a9f4c5f8960864c402ede8a51fb5ab9c4fcc0 100644 --- a/src/main/java/co/aikar/timings/TimingsExport.java +++ b/src/main/java/co/aikar/timings/TimingsExport.java -@@ -242,7 +242,8 @@ public class TimingsExport extends Thread { +@@ -240,7 +240,8 @@ public class TimingsExport extends Thread { parent.put("config", createObject( pair("spigot", mapAsJSON(Bukkit.spigot().getSpigotConfig(), null)), pair("bukkit", mapAsJSON(Bukkit.spigot().getBukkitConfig(), null)), @@ -1497,19 +1497,19 @@ index ba12919c3f9aec34a9e64993b143ae92be5eb172..9efeab9078e2d08903e482718b840797 } else { this.lastTimeStamp = body.timeStamp(); diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 49ab2773658a2c6fababa316707762a8e2b19c58..9e632e6d865a802119aa70a2f393d3cab46e9aae 100644 +index 23d2264dfc4f763a7198eb543e7f86a5a5aa85c3..c51485db18db179be33b4416debbc30c93bdf5c2 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -314,6 +314,8 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop S spin(Function serverFactory) { AtomicReference atomicreference = new AtomicReference(); -@@ -1217,6 +1219,12 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop { // Paper - rewrite chunk system +@@ -1214,6 +1216,12 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop // Spigot - Spigot > // CraftBukkit - cb > vanilla! -+ return "Pufferfish"; // Pufferfish - Pufferfish > // Paper - Paper > // Spigot - Spigot > // CraftBukkit - cb > vanilla! +- return "Paper"; // Paper ++ return "Pufferfish"; // Pufferfish - Pufferfish > // Paper } public SystemReport fillSystemReport(SystemReport details) { -@@ -2439,6 +2447,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop mainThreadExecutor, LightChunkGetter chunkProvider, ChunkGenerator chunkGenerator, ChunkProgressListener worldGenerationProgressListener, ChunkStatusUpdateListener chunkStatusChangeListener, Supplier persistentStateManagerFactory, int viewDistance, boolean dsync) { -@@ -1458,8 +1458,28 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider +@@ -1448,8 +1448,28 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider return ChunkMap.this.level.getServer().getScaledTrackingDistance(initialDistance); } @@ -1602,7 +1602,7 @@ index 424de333bf4fc5632410c689d9b17b2eab3371c4..b72969b3bc4319387e3946ea01c5b05a Iterator iterator = this.entity.getIndirectPassengers().iterator(); while (iterator.hasNext()) { -@@ -1471,6 +1491,9 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider +@@ -1461,6 +1481,9 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider i = j; } } @@ -1613,20 +1613,20 @@ index 424de333bf4fc5632410c689d9b17b2eab3371c4..b72969b3bc4319387e3946ea01c5b05a return this.scaledRange(i); } diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java -index 77a2458b8acb21c64676934cd8d6b05ef6351c10..ad8e79c72841ff80f8af3580d2cdb89c13f6d688 100644 +index 366c0c9b45a819f7f94ebe3e49b8ab7f9edf9ce7..097f6eb96c2df203565a0c50aba6221e67a7e026 100644 --- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java +++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java -@@ -73,6 +73,9 @@ public class ServerChunkCache extends ChunkSource { - final it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap loadedChunkMap = new it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap<>(8192, 0.5f); - +@@ -77,6 +77,9 @@ public class ServerChunkCache extends ChunkSource { private final LevelChunk[] lastLoadedChunks = new LevelChunk[4 * 4]; -+ + // Paper end + + public boolean firstRunSpawnCounts = true; // Pufferfish + public final java.util.concurrent.atomic.AtomicBoolean _pufferfish_spawnCountsReady = new java.util.concurrent.atomic.AtomicBoolean(false); // Pufferfish - optimize countmobs - - private static int getChunkCacheKey(int x, int z) { - return x & 3 | ((z & 3) << 2); -@@ -528,6 +531,7 @@ public class ServerChunkCache extends ChunkSource { ++ + public ServerChunkCache(ServerLevel world, LevelStorageSource.LevelStorageAccess session, DataFixer dataFixer, StructureTemplateManager structureTemplateManager, Executor workerExecutor, ChunkGenerator chunkGenerator, int viewDistance, int simulationDistance, boolean dsync, ChunkProgressListener worldGenerationProgressListener, ChunkStatusUpdateListener chunkStatusChangeListener, Supplier persistentStateManagerFactory) { + this.level = world; + this.mainThreadProcessor = new ServerChunkCache.MainThreadExecutor(world); +@@ -513,6 +516,7 @@ public class ServerChunkCache extends ChunkSource { // Paper - optimise chunk tick iteration @@ -1634,7 +1634,7 @@ index 77a2458b8acb21c64676934cd8d6b05ef6351c10..ad8e79c72841ff80f8af3580d2cdb89c if (this.level.getServer().tickRateManager().runsNormally()) { gameprofilerfiller.popPush("naturalSpawnCount"); this.level.timings.countNaturalMobs.startTiming(); // Paper - timings -@@ -536,6 +540,7 @@ public class ServerChunkCache extends ChunkSource { +@@ -521,6 +525,7 @@ public class ServerChunkCache extends ChunkSource { int naturalSpawnChunkCount = k; NaturalSpawner.SpawnState spawnercreature_d; // moved down if ((this.spawnFriendlies || this.spawnEnemies) && this.level.paperConfig().entities.spawning.perPlayerMobSpawns) { // don't count mobs when animals and monsters are disabled @@ -1642,7 +1642,7 @@ index 77a2458b8acb21c64676934cd8d6b05ef6351c10..ad8e79c72841ff80f8af3580d2cdb89c // re-set mob counts for (ServerPlayer player : this.level.players) { // Paper start - per player mob spawning backoff -@@ -550,14 +555,18 @@ public class ServerChunkCache extends ChunkSource { +@@ -535,14 +540,18 @@ public class ServerChunkCache extends ChunkSource { } // Paper end - per player mob spawning backoff } @@ -1664,7 +1664,7 @@ index 77a2458b8acb21c64676934cd8d6b05ef6351c10..ad8e79c72841ff80f8af3580d2cdb89c gameprofilerfiller.popPush("spawnAndTick"); boolean flag = this.level.getGameRules().getBoolean(GameRules.RULE_DOMOBSPAWNING) && !this.level.players().isEmpty(); // CraftBukkit -@@ -647,8 +656,8 @@ public class ServerChunkCache extends ChunkSource { +@@ -632,8 +641,8 @@ public class ServerChunkCache extends ChunkSource { if (tick && chunk1.chunkStatus.isOrAfter(net.minecraft.server.level.FullChunkStatus.ENTITY_TICKING)) { // Paper end - optimise chunk tick iteration chunk1.incrementInhabitedTime(j); @@ -1675,11 +1675,11 @@ index 77a2458b8acb21c64676934cd8d6b05ef6351c10..ad8e79c72841ff80f8af3580d2cdb89c } if (true || this.level.shouldTickBlocksAt(chunkcoordintpair.toLong())) { // Paper - optimise chunk tick iteration -@@ -695,6 +704,40 @@ public class ServerChunkCache extends ChunkSource { +@@ -680,6 +689,40 @@ public class ServerChunkCache extends ChunkSource { gameprofilerfiller.pop(); gameprofilerfiller.pop(); } -+ ++ + // Pufferfish start - optimize mob spawning + if (gg.pufferfish.pufferfish.PufferfishConfig.enableAsyncMobSpawning) { + for (ServerPlayer player : this.level.players) { @@ -1717,7 +1717,7 @@ index 77a2458b8acb21c64676934cd8d6b05ef6351c10..ad8e79c72841ff80f8af3580d2cdb89c private void getFullChunk(long pos, Consumer chunkConsumer) { diff --git a/src/main/java/net/minecraft/server/level/ServerEntity.java b/src/main/java/net/minecraft/server/level/ServerEntity.java -index ae188ae314336d971303023c7b7b8ecf32bae253..79914528f6d255355284b04253218a7c4dec1ead 100644 +index 529ab44baaf573b97cf7e89560c548642733188f..db55ad9aaabfa1ea998754f3ac352d1698936696 100644 --- a/src/main/java/net/minecraft/server/level/ServerEntity.java +++ b/src/main/java/net/minecraft/server/level/ServerEntity.java @@ -183,7 +183,8 @@ public class ServerEntity { @@ -1739,7 +1739,7 @@ index ae188ae314336d971303023c7b7b8ecf32bae253..79914528f6d255355284b04253218a7c this.wasOnGround = this.entity.onGround(); this.teleportDelay = 0; diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index fa203e66887f5db1083728166e2f81ea4f656bd7..6c4a30779346985a7423286965bcc6446a777785 100644 +index 6934e9dac0d69c043b73b7c46d59f2d39b37c67f..dbe612427b894df9da1335b94163ba9b89b090c0 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java @@ -894,6 +894,7 @@ public class ServerLevel extends Level implements WorldGenLevel { @@ -1789,13 +1789,13 @@ index fa203e66887f5db1083728166e2f81ea4f656bd7..6c4a30779346985a7423286965bcc644 gameprofilerfiller.push("thunder"); final BlockPos.MutableBlockPos blockposition = this.chunkTickMutablePosition; // Paper - use mutable to reduce allocation rate, final to force compile fail on change -- if (!this.paperConfig().environment.disableThunder && flag && this.isThundering() && this.spigotConfig.thunderChance > 0 && this.random.nextInt(this.spigotConfig.thunderChance) == 0) { // Spigot // Paper - disable thunder -+ if (!this.paperConfig().environment.disableThunder && flag && this.isThundering() && this.spigotConfig.thunderChance > 0 && /*this.random.nextInt(this.spigotConfig.thunderChance) == 0 &&*/ chunk.shouldDoLightning(this.random)) { // Spigot // Paper - disable thunder // Pufferfish - replace random with shouldDoLightning +- if (!this.paperConfig().environment.disableThunder && flag && this.isThundering() && this.spigotConfig.thunderChance > 0 && this.random.nextInt(this.spigotConfig.thunderChance) == 0) { // Spigot // Paper - Option to disable thunder ++ if (!this.paperConfig().environment.disableThunder && flag && this.isThundering() && this.spigotConfig.thunderChance > 0 && /*this.random.nextInt(this.spigotConfig.thunderChance) == 0 &&*/ chunk.shouldDoLightning(this.random)) { // Spigot // Paper - Option to disable thunder // Pufferfish - replace random with shouldDoLightning blockposition.set(this.findLightningTargetAround(this.getBlockRandomPos(j, 0, k, 15))); // Paper if (this.isRainingAt(blockposition)) { diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 42b433d9461d0912b39542263684323369469ac0..79701158989205af7b70ab5d312c1d3fa27c6cd2 100644 +index 6f9ec543185b6f68bb1eaa61a7ebea9d866d688f..7b74541d648de48579221945e4bab963882cc1f2 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java @@ -1121,6 +1121,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl @@ -1919,7 +1919,7 @@ index d6cbe98e67fdbf8db46338a88ab1356dd63b50a3..20dd3a63b2f955b05a75eb240e33ae4c int LARGE_MAX_STACK_SIZE = 64; int DEFAULT_DISTANCE_LIMIT = 8; diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 554fc0d4e791a98a46216714f0fb07e178ddabe4..8328fb75f117a523301ed31b79fbee33ca82cbad 100644 +index 2c06f3ebf7e1069727387bfc60db30c958c14b5a..00b26925b9e0ef7290f904273da875603b6ce11b 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java @@ -308,7 +308,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S @@ -1931,16 +1931,16 @@ index 554fc0d4e791a98a46216714f0fb07e178ddabe4..8328fb75f117a523301ed31b79fbee33 private ChunkPos chunkPosition; private Vec3 deltaMovement; private float yRot; -@@ -439,6 +439,12 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S - return this.originWorld; +@@ -501,6 +501,12 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S + return chunkMap.playerEntityTrackerTrackMaps[type.ordinal()].getObjectsInRange(MCUtil.getCoordinateKey(this)); } - // Paper end + // Paper end - optimise entity tracking + // Pufferfish start + public boolean activatedPriorityReset = false; // DAB + public int activatedPriority = gg.pufferfish.pufferfish.PufferfishConfig.maximumActivationPrio; // golf score + public final BlockPos.MutableBlockPos cachedBlockPos = new BlockPos.MutableBlockPos(); // used where needed + // Pufferfish end -+ ++ public float getBukkitYaw() { return this.yRot; } @@ -1957,7 +1957,7 @@ index 554fc0d4e791a98a46216714f0fb07e178ddabe4..8328fb75f117a523301ed31b79fbee33 this.baseTick(); } -@@ -4407,16 +4419,18 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -4402,16 +4414,18 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S } public boolean updateFluidHeightAndDoFluidPushing(TagKey tag, double speed) { @@ -1983,7 +1983,7 @@ index 554fc0d4e791a98a46216714f0fb07e178ddabe4..8328fb75f117a523301ed31b79fbee33 double d1 = 0.0D; boolean flag = this.isPushedByFluid(); boolean flag1 = false; -@@ -4424,14 +4438,61 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -4419,14 +4433,61 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S int k1 = 0; BlockPos.MutableBlockPos blockposition_mutableblockposition = new BlockPos.MutableBlockPos(); @@ -2051,7 +2051,7 @@ index 554fc0d4e791a98a46216714f0fb07e178ddabe4..8328fb75f117a523301ed31b79fbee33 if (d2 >= axisalignedbb.minY) { flag1 = true; -@@ -4453,9 +4514,12 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -4448,9 +4509,12 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S // CraftBukkit end } } @@ -2078,7 +2078,7 @@ index edc723ea5ca3a325106e7af38c60dbf9f0f5fb77..ab6cd363231a668c9b16df825a72d320 private String descriptionId; @Nullable diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index ca1900d29a86b9b39078da39b071950128c08c23..47d9d45a5244ea991bedd16ff9ef0a40128b0258 100644 +index 6071451339080bbdd98fb634791a56988984c8bc..5641bc7f50cef7819ddaeb76a4a4f9c80f473d31 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java @@ -142,7 +142,6 @@ import org.bukkit.event.entity.EntityTeleportEvent; @@ -2140,7 +2140,7 @@ index ca1900d29a86b9b39078da39b071950128c08c23..47d9d45a5244ea991bedd16ff9ef0a40 if (this.isSpectator()) { return false; diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java -index 22506c5c823c65e65034a962312c1dbd44356e23..4e5038e3cb6644e14d4b0022444386c50c827d0b 100644 +index 24629412d2b4acaa81788ce70412b03387cc777c..a181a298334212847166409a2121476ba5871cb2 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java @@ -221,14 +221,16 @@ public abstract class Mob extends LivingEntity implements Targeting { @@ -2231,7 +2231,7 @@ index 646d9a121d908a2fc3e4e302484dd5cd1bfc6804..e546ecdccde352502e26a8668eaaafe0 } diff --git a/src/main/java/net/minecraft/world/entity/ai/goal/GoalSelector.java b/src/main/java/net/minecraft/world/entity/ai/goal/GoalSelector.java -index b738ee2d3801fadfd09313f05ae24593e56b0ec6..1635818fc4b1788c0d397085239df6dd75b210ab 100644 +index 676f5485a4ca9252e911213dcda8d51776b637b6..2d63ee8fef87264d4b61290effa6ba86a787aa61 100644 --- a/src/main/java/net/minecraft/world/entity/ai/goal/GoalSelector.java +++ b/src/main/java/net/minecraft/world/entity/ai/goal/GoalSelector.java @@ -53,9 +53,12 @@ public class GoalSelector { @@ -2701,18 +2701,18 @@ index 27b0a79f7a7c47047216aae42944bac2a2151181..a097cfc528f709c80575f35483b68783 autorecipestackmanager.initialize(this); // Paper - better exact choice recipes int i = 0; diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index ae42d5b3dea423a144056c64337af213609923d4..6ee7286797da79a3d47a85b1a4b7139804571969 100644 +index b33bb001a48788e727e2f01788a6163024121bf3..763fe7d1e8334441a5db2285bd4424d165e1c945 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java -@@ -211,6 +211,8 @@ public abstract class Level implements LevelAccessor, AutoCloseable { - // Paper end - Use getChunkIfLoadedImmediately +@@ -212,6 +212,8 @@ public abstract class Level implements LevelAccessor, AutoCloseable { public abstract ResourceKey getTypeKey(); -+ -+ protected final io.papermc.paper.util.math.ThreadUnsafeRandom randomTickRandom = new io.papermc.paper.util.math.ThreadUnsafeRandom(java.util.concurrent.ThreadLocalRandom.current().nextLong()); public net.minecraft.util.RandomSource getThreadUnsafeRandom() { return this.randomTickRandom; } // Pufferfish - move thread unsafe random initialization // Pufferfish - getter ++ protected final io.papermc.paper.util.math.ThreadUnsafeRandom randomTickRandom = new io.papermc.paper.util.math.ThreadUnsafeRandom(java.util.concurrent.ThreadLocalRandom.current().nextLong()); public net.minecraft.util.RandomSource getThreadUnsafeRandom() { return this.randomTickRandom; } // Pufferfish - move thread unsafe random initialization // Pufferfish - getter ++ protected Level(WritableLevelData worlddatamutable, ResourceKey resourcekey, RegistryAccess iregistrycustom, Holder holder, Supplier supplier, boolean flag, boolean flag1, long i, int j, org.bukkit.generator.ChunkGenerator gen, org.bukkit.generator.BiomeProvider biomeProvider, org.bukkit.World.Environment env, java.util.function.Function paperWorldConfigCreator, java.util.concurrent.Executor executor) { // Paper - create paper world config; Async-Anti-Xray: Pass executor this.spigotConfig = new org.spigotmc.SpigotWorldConfig(((net.minecraft.world.level.storage.PrimaryLevelData) worlddatamutable).getLevelName()); // Spigot + this.paperConfig = paperWorldConfigCreator.apply(this.spigotConfig); // Paper - create paper world config @@ -1317,13 +1319,13 @@ public abstract class Level implements LevelAccessor, AutoCloseable { try { tickConsumer.accept(entity); @@ -2720,13 +2720,13 @@ index ae42d5b3dea423a144056c64337af213609923d4..6ee7286797da79a3d47a85b1a4b71398 - } catch (Throwable throwable) { + } catch (Throwable throwable) { // Pufferfish - diff on change ServerLevel.tick if (throwable instanceof ThreadDeath) throw throwable; // Paper - // Paper start - Prevent tile entity and entity crashes + // Paper start - Prevent block entity and entity crashes final String msg = String.format("Entity threw exception at %s:%s,%s,%s", entity.level().getWorld().getName(), entity.getX(), entity.getY(), entity.getZ()); MinecraftServer.LOGGER.error(msg, throwable); - getCraftServer().getPluginManager().callEvent(new ServerExceptionEvent(new ServerInternalException(msg, throwable))); + getCraftServer().getPluginManager().callEvent(new ServerExceptionEvent(new ServerInternalException(msg, throwable))); // Paper - ServerExceptionEvent - entity.discard(); + entity.discard(); // Pufferfish - diff on change ServerLevel.tick - // Paper end + // Paper end - Prevent block entity and entity crashes } } @@ -1797,6 +1799,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { @@ -2738,7 +2738,7 @@ index ae42d5b3dea423a144056c64337af213609923d4..6ee7286797da79a3d47a85b1a4b71398 } diff --git a/src/main/java/net/minecraft/world/level/NaturalSpawner.java b/src/main/java/net/minecraft/world/level/NaturalSpawner.java -index 1712bd7c3a9b515c7bf8909f7392a385ef243ff9..00b965de947cb13a178061278d1ffa4342e8e065 100644 +index 17e9f3a30e287faf210e08dc7eb177a70f049f43..96fc603c2fccc1d9610248b2116d35696bc65e4e 100644 --- a/src/main/java/net/minecraft/world/level/NaturalSpawner.java +++ b/src/main/java/net/minecraft/world/level/NaturalSpawner.java @@ -429,12 +429,12 @@ public final class NaturalSpawner { @@ -3000,7 +3000,7 @@ index a94300a457b25f0e33a8eeabba6dd5720ca9ab1e..b41635dd0569ff7df909df492d3e850a } diff --git a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java -index d85ed706703e50f76df8db414827ccd41a5985d9..177673cc19cd70f60bb489cb2e74b39fbb8f8d24 100644 +index 6ec3fc801453fd54c25b642e6fa71c19b463311d..922191159fadf8e89646d7299aadee4aa851f71a 100644 --- a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java +++ b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java @@ -86,6 +86,18 @@ public class LevelChunk extends ChunkAccess { @@ -3032,7 +3032,7 @@ index d85ed706703e50f76df8db414827ccd41a5985d9..177673cc19cd70f60bb489cb2e74b39f // CraftBukkit start diff --git a/src/main/java/net/minecraft/world/level/chunk/LevelChunkSection.java b/src/main/java/net/minecraft/world/level/chunk/LevelChunkSection.java -index b10c652f53edfbf29f28b047d3b3c8edca21bc56..0806ec65a6c4e0518be01db9af2dd118d73da98d 100644 +index 796bbef3544e06b8e7aac7e8ac5f740a2613f4bd..2422ca3ffc6ab7178cacf933b8013f85e7de4bd9 100644 --- a/src/main/java/net/minecraft/world/level/chunk/LevelChunkSection.java +++ b/src/main/java/net/minecraft/world/level/chunk/LevelChunkSection.java @@ -25,6 +25,7 @@ public class LevelChunkSection { @@ -3273,7 +3273,7 @@ index ebe65474a4a05ff1637d7f37ebcfe690af59def5..42142c512b12e5b269c19f1e821c50e7 @Nullable diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 28b02fee73a3ab604f6921800a7ede59e2e6f414..a6b8e768edacd1600992af5fd0a4562f1420b568 100644 +index 25f41119bcc19bab7cd2fdb044147b3f78a8ef1c..5b01cd1b9a07fc8600fddb9d9e0aea3ac5a288f0 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -264,7 +264,7 @@ import javax.annotation.Nullable; // Paper @@ -3336,7 +3336,7 @@ index 774556a62eb240da42e84db4502e2ed43495be17..80553face9c70c2a3d897681e7761df8 if (stream != null) { diff --git a/src/main/java/org/spigotmc/ActivationRange.java b/src/main/java/org/spigotmc/ActivationRange.java -index fafc8b84d6b6368c70b8eedfdb4c3a9deace9c26..a69814d3a6214af734d670fe5545518a5f8a8dc5 100644 +index c39894e824334f1dc52e0466cf9d84f7e219be70..41cddf7e42f0e8f80973e482a95e55d3bd19f659 100644 --- a/src/main/java/org/spigotmc/ActivationRange.java +++ b/src/main/java/org/spigotmc/ActivationRange.java @@ -38,6 +38,10 @@ import co.aikar.timings.MinecraftTimings; @@ -3350,7 +3350,7 @@ index fafc8b84d6b6368c70b8eedfdb4c3a9deace9c26..a69814d3a6214af734d670fe5545518a public class ActivationRange { -@@ -222,6 +226,25 @@ public class ActivationRange +@@ -221,6 +225,25 @@ public class ActivationRange } // Paper end - Configurable marker ticking ActivationRange.activateEntity(entity); @@ -3376,7 +3376,7 @@ index fafc8b84d6b6368c70b8eedfdb4c3a9deace9c26..a69814d3a6214af734d670fe5545518a } // Paper end } -@@ -238,12 +261,12 @@ public class ActivationRange +@@ -237,12 +260,12 @@ public class ActivationRange if ( MinecraftServer.currentTick > entity.activatedTick ) { if ( entity.defaultActivationState ) @@ -3391,7 +3391,7 @@ index fafc8b84d6b6368c70b8eedfdb4c3a9deace9c26..a69814d3a6214af734d670fe5545518a entity.activatedTick = MinecraftServer.currentTick; } } -@@ -297,7 +320,7 @@ public class ActivationRange +@@ -296,7 +319,7 @@ public class ActivationRange if ( entity instanceof LivingEntity ) { LivingEntity living = (LivingEntity) entity; diff --git a/patches/server/0002-Rebrand.patch b/patches/server/0002-Rebrand.patch index 157e07764..7d64e8ff8 100644 --- a/patches/server/0002-Rebrand.patch +++ b/patches/server/0002-Rebrand.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Rebrand diff --git a/build.gradle.kts b/build.gradle.kts -index fd785a79b1708aadd760f5b62d49d4d4e55e9938..4bdf291e2e2d96ea7385ae667983f1731baa176a 100644 +index 658e9b4590a82d179907feea04e129fdba9a2f42..f253b340d75302fda8e59a2ad113f652c2417869 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -13,12 +13,12 @@ configurations.named(log4jPlugins.compileClasspathConfigurationName) { @@ -177,10 +177,10 @@ index e047dee632022abfe05865d1e71838be8d5d053a..888e31a0454888c36cb27602a28619f1 stringbuilder.append(CrashReport.getErrorComment()); stringbuilder.append("\n\n"); diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 1343649cd77a42dd502747581050b401840a6efe..de0f93e1a85754051315653f707b95753ff7dc70 100644 +index c51485db18db179be33b4416debbc30c93bdf5c2..3c2eb7eeff23cd2b93105518a5cfbfb39565b845 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -956,7 +956,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop // Paper - Paper > // Spigot - Spigot > // CraftBukkit - cb > vanilla! -+ return "Purpur"; // Purpur - Purpur > // Pufferfish - Pufferfish > // Paper - Paper > // Spigot - Spigot > // CraftBukkit - cb > vanilla! +- return "Pufferfish"; // Pufferfish - Pufferfish > // Paper ++ return "Purpur"; // Purpur - Purpur > // Pufferfish - Pufferfish > // Paper } public SystemReport fillSystemReport(SystemReport details) { diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index cfc41926305441cb36ed67a8cb7e327cd80ff301..63a27079bae650672c027443ff4dc8d4e21a4d06 100644 +index 5b01cd1b9a07fc8600fddb9d9e0aea3ac5a288f0..b8e578330ad7953f013767c7ff040fee468ce5a5 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -264,7 +264,7 @@ import javax.annotation.Nullable; // Paper @@ -239,7 +239,7 @@ index 4e56018b64d11f76c8da43fd8f85c6de72204e36..9607675e6c5bff2183c4420d11fc63ee @Override diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java -index 1f1ef68a9a449a4a90c284f34a397ab4b6d905f6..1b75b8286f6203a7268746b5a487d6f089405127 100644 +index 4afc1c9d2a7638e84a55fe30932dc36db465c31a..ea966037755ba552dc6cf2f4792e9d23f0e77b1c 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java @@ -915,7 +915,7 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { @@ -265,7 +265,7 @@ index 700932b65e4fda560d684b0aa079bcee3923f73e..d1b1bc4845fc9519fc892e962c3e7d89 // (async tasks must live with race-conditions if they attempt to cancel between these few lines of code) } diff --git a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java -index c909efd2060dc95bd3ecb8c9fec36a1e69a642ff..6eeebfaf577263316f3562a8f968310acd616763 100644 +index 2338ba106c19c3e61d1a2088cc51d0744432666d..2331190c476a2bfe3797aa61a4a792a9cc42ff59 100644 --- a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java +++ b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java @@ -482,7 +482,7 @@ public final class CraftMagicNumbers implements UnsafeValues { @@ -291,7 +291,7 @@ index 80553face9c70c2a3d897681e7761df85b22d464..99597258e8e88cd9e2c901c4ac3ff7fa if (stream != null) { diff --git a/src/main/java/org/spigotmc/WatchdogThread.java b/src/main/java/org/spigotmc/WatchdogThread.java -index 40dcdf6885e99b26283a9ea2bd4d4bf6ec358e71..5fc8cc40ab627eba0b2110c73d31af213a935733 100644 +index 9e638f72f180ff5ef63ec3dd6cf548c53f7bd4a5..f7296691cb4af7814de1520347b307ff209082e4 100644 --- a/src/main/java/org/spigotmc/WatchdogThread.java +++ b/src/main/java/org/spigotmc/WatchdogThread.java @@ -96,7 +96,7 @@ public final class WatchdogThread extends io.papermc.paper.util.TickThread // Pa @@ -321,7 +321,7 @@ index 40dcdf6885e99b26283a9ea2bd4d4bf6ec358e71..5fc8cc40ab627eba0b2110c73d31af21 // if ( net.minecraft.world.level.Level.lastPhysicsProblem != null ) { -@@ -185,12 +185,12 @@ public final class WatchdogThread extends io.papermc.paper.util.TickThread // Pa +@@ -184,12 +184,12 @@ public final class WatchdogThread extends io.papermc.paper.util.TickThread // Pa // Paper end } else { @@ -333,10 +333,10 @@ index 40dcdf6885e99b26283a9ea2bd4d4bf6ec358e71..5fc8cc40ab627eba0b2110c73d31af21 log.log( Level.SEVERE, "------------------------------" ); - log.log( Level.SEVERE, "Server thread dump (Look for plugins here before reporting to Paper!):" ); // Paper + log.log( Level.SEVERE, "Server thread dump (Look for plugins here before reporting to Purpur!):" ); // Paper // Purpur - io.papermc.paper.chunk.system.scheduling.ChunkTaskScheduler.dumpAllChunkLoadInfo(isLongTimeout); // Paper // Paper - rewrite chunk system + io.papermc.paper.chunk.system.scheduling.ChunkTaskScheduler.dumpAllChunkLoadInfo(isLongTimeout); // Paper - rewrite chunk system this.dumpTickingInfo(); // Paper - log detailed tick information WatchdogThread.dumpThread( ManagementFactory.getThreadMXBean().getThreadInfo( MinecraftServer.getServer().serverThread.getId(), Integer.MAX_VALUE ), log ); -@@ -206,7 +206,7 @@ public final class WatchdogThread extends io.papermc.paper.util.TickThread // Pa +@@ -205,7 +205,7 @@ public final class WatchdogThread extends io.papermc.paper.util.TickThread // Pa WatchdogThread.dumpThread( thread, log ); } } else { diff --git a/patches/server/0003-Fix-pufferfish-issues.patch b/patches/server/0003-Fix-pufferfish-issues.patch index 7a5e18f1a..d921ef9d2 100644 --- a/patches/server/0003-Fix-pufferfish-issues.patch +++ b/patches/server/0003-Fix-pufferfish-issues.patch @@ -40,7 +40,7 @@ index ad368b58005b6b0453b709c2ef0ea23bca53d34a..2dac1ec1daf4084f33ead33d5128d295 "This can improve performance by a few percent, but has minor gameplay implications."); } diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index e387de54c9786711272f0ec3f8d312e472a9c4ea..e0f1f23bcf4f59cffa98ea1c70f774fd787dae08 100644 +index dbe612427b894df9da1335b94163ba9b89b090c0..0982d44b9dd30c13d9d879095cc9a839bbda8bdc 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java @@ -992,7 +992,7 @@ public class ServerLevel extends Level implements WorldGenLevel { @@ -53,22 +53,20 @@ index e387de54c9786711272f0ec3f8d312e472a9c4ea..e0f1f23bcf4f59cffa98ea1c70f774fd private int currentIceAndSnowTick = 0; protected void resetIceAndSnowTick() { this.currentIceAndSnowTick = this.randomTickRandom.nextInt(16); } // Pufferfish diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index 4f568184557d21b44569a9a16456962ee983101b..aa6c3df047e97bde3c352caae7eb3c09e2f45978 100644 +index 763fe7d1e8334441a5db2285bd4424d165e1c945..b923bdd07d81e09d69f1cbd6f6389ab34e9c427d 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java -@@ -211,8 +211,8 @@ public abstract class Level implements LevelAccessor, AutoCloseable { - // Paper end - Use getChunkIfLoadedImmediately +@@ -212,7 +212,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { public abstract ResourceKey getTypeKey(); -- + - protected final io.papermc.paper.util.math.ThreadUnsafeRandom randomTickRandom = new io.papermc.paper.util.math.ThreadUnsafeRandom(java.util.concurrent.ThreadLocalRandom.current().nextLong()); public net.minecraft.util.RandomSource getThreadUnsafeRandom() { return this.randomTickRandom; } // Pufferfish - move thread unsafe random initialization // Pufferfish - getter -+ + //protected final io.papermc.paper.util.math.ThreadUnsafeRandom randomTickRandom = new io.papermc.paper.util.math.ThreadUnsafeRandom(java.util.concurrent.ThreadLocalRandom.current().nextLong()); public net.minecraft.util.RandomSource getThreadUnsafeRandom() { return this.randomTickRandom; } // Pufferfish - move thread unsafe random initialization // Pufferfish - getter // Purpur - dont break ABI protected Level(WritableLevelData worlddatamutable, ResourceKey resourcekey, RegistryAccess iregistrycustom, Holder holder, Supplier supplier, boolean flag, boolean flag1, long i, int j, org.bukkit.generator.ChunkGenerator gen, org.bukkit.generator.BiomeProvider biomeProvider, org.bukkit.World.Environment env, java.util.function.Function paperWorldConfigCreator, java.util.concurrent.Executor executor) { // Paper - create paper world config; Async-Anti-Xray: Pass executor this.spigotConfig = new org.spigotmc.SpigotWorldConfig(((net.minecraft.world.level.storage.PrimaryLevelData) worlddatamutable).getLevelName()); // Spigot diff --git a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java -index 177673cc19cd70f60bb489cb2e74b39fbb8f8d24..c3fb622845770bcee9ddd6ebbeee174b06ee16eb 100644 +index 922191159fadf8e89646d7299aadee4aa851f71a..5fab6909bd2ee303f49b7e667617bcae608e82d7 100644 --- a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java +++ b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java @@ -122,7 +122,7 @@ public class LevelChunk extends ChunkAccess { diff --git a/patches/server/0004-Purpur-config-files.patch b/patches/server/0004-Purpur-config-files.patch index 705d5b047..820762f80 100644 --- a/patches/server/0004-Purpur-config-files.patch +++ b/patches/server/0004-Purpur-config-files.patch @@ -37,7 +37,7 @@ index 692c962193cf9fcc6801fc93f3220bdc673d527b..8cde30544e14f8fc2dac32966ae3c21f metrics.addCustomChart(new Metrics.DrilldownPie("java_version", () -> { Map> map = new HashMap<>(); diff --git a/src/main/java/net/minecraft/commands/CommandSourceStack.java b/src/main/java/net/minecraft/commands/CommandSourceStack.java -index 623403c56d79e29421f340e97c05488efaf1893d..d7333193b20fc6d9a4aaa0ef00a2a66655250081 100644 +index f341813e9713e39bfe142ca34b751de3d8efd25b..b0d96ae08959cdca9177eb875faa99f4a8e92632 100644 --- a/src/main/java/net/minecraft/commands/CommandSourceStack.java +++ b/src/main/java/net/minecraft/commands/CommandSourceStack.java @@ -335,6 +335,30 @@ public class CommandSourceStack implements ExecutionCommandSource 0; // Paper +@@ -1698,6 +1698,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 0; // Paper - BlockPhysicsEvent net.minecraft.world.level.block.entity.HopperBlockEntity.skipHopperEvents = worldserver.paperConfig().hopper.disableMoveEvent || org.bukkit.event.inventory.InventoryMoveItemEvent.getHandlerList().getRegisteredListeners().length == 0; // Paper - Perf: Optimize Hoppers worldserver.hasEntityMoveEvent = io.papermc.paper.event.entity.EntityMoveEvent.getHandlerList().getRegisteredListeners().length > 0; // Paper - Add EntityMoveEvent + worldserver.hasRidableMoveEvent = org.purpurmc.purpur.event.entity.RidableMoveEvent.getHandlerList().getRegisteredListeners().length > 0; // Purpur @@ -34,19 +34,19 @@ index 3506a1ff01fab1dc7f99c219e23c3b0b9e5a5565..21a23f1c5d644a1212269d77dc598925 this.profiler.push(() -> { return worldserver + " " + worldserver.dimension().location(); diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index e8784caa72af2bf27988c393d5f66aa79401a9bf..5a5eece4393aba0902a94f94c10172ddda53776c 100644 +index 0982d44b9dd30c13d9d879095cc9a839bbda8bdc..cdc17904cdf3d6669503e09debfbb156a80f0020 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java @@ -224,6 +224,7 @@ public class ServerLevel extends Level implements WorldGenLevel { - public boolean hasPhysicsEvent = true; // Paper + public boolean hasPhysicsEvent = true; // Paper - BlockPhysicsEvent public boolean hasEntityMoveEvent; // Paper - Add EntityMoveEvent private final alternate.current.wire.WireHandler wireHandler = new alternate.current.wire.WireHandler(this); // Paper - optimize redstone (Alternate Current) + public boolean hasRidableMoveEvent = false; // Purpur - @Override public LevelChunk getChunkIfLoaded(int x, int z) { // Paper - this was added in world too but keeping here for NMS ABI + public LevelChunk getChunkIfLoaded(int x, int z) { return this.chunkSource.getChunkAtIfLoadedImmediately(x, z); // Paper - Use getChunkIfLoadedImmediately diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 47b98effff238fd238da85eef6a108e3dfff98e8..936224e1884f7f7d03d51c2cce3599a78d174b80 100644 +index 6c3e5ad96ff1c33181663d89c3c227e1a96e4912..62fd29f19b93f07a87377f26d9e5b169b9d80f4f 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java @@ -763,6 +763,15 @@ public class ServerPlayer extends Player { @@ -66,7 +66,7 @@ index 47b98effff238fd238da85eef6a108e3dfff98e8..936224e1884f7f7d03d51c2cce3599a7 public void doTick() { diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 79701158989205af7b70ab5d312c1d3fa27c6cd2..4326b324ff5c815b38211fe24cb5f05b974c3200 100644 +index 7b74541d648de48579221945e4bab963882cc1f2..564ad357c3f85c3018b51e592474722f9f92bf35 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java @@ -2704,6 +2704,8 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl @@ -79,7 +79,7 @@ index 79701158989205af7b70ab5d312c1d3fa27c6cd2..4326b324ff5c815b38211fe24cb5f05b if ((entity instanceof Bucketable && entity instanceof LivingEntity && origItem != null && origItem.asItem() == Items.WATER_BUCKET) && (event.isCancelled() || ServerGamePacketListenerImpl.this.player.getInventory().getSelected() == null || ServerGamePacketListenerImpl.this.player.getInventory().getSelected().getItem() != origItem)) { entity.getEntityData().resendPossiblyDesyncedEntity(player); // Paper - The entire mob gets deleted, so resend it. diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 4f74874821683127265da4d9b2b7cba69e475576..3bb76702a36b3ee638779b5d83093965b42341ce 100644 +index b8236e91b4bf204e728cba13c95292329f0058e9..fcc95eaaa8f9160f8a3c2391f6d23c27266c3771 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java @@ -378,7 +378,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S @@ -91,7 +91,7 @@ index 4f74874821683127265da4d9b2b7cba69e475576..3bb76702a36b3ee638779b5d83093965 private float eyeHeight; public boolean isInPowderSnow; public boolean wasInPowderSnow; -@@ -3012,6 +3012,13 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -3010,6 +3010,13 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S this.passengers = ImmutableList.copyOf(list); } @@ -105,7 +105,7 @@ index 4f74874821683127265da4d9b2b7cba69e475576..3bb76702a36b3ee638779b5d83093965 this.gameEvent(GameEvent.ENTITY_MOUNT, passenger); } } -@@ -3051,6 +3058,14 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -3049,6 +3056,14 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S return false; } // CraftBukkit end @@ -120,7 +120,7 @@ index 4f74874821683127265da4d9b2b7cba69e475576..3bb76702a36b3ee638779b5d83093965 if (this.passengers.size() == 1 && this.passengers.get(0) == entity) { this.passengers = ImmutableList.of(); } else { -@@ -4992,4 +5007,44 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -4987,4 +5002,44 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S return ((net.minecraft.server.level.ServerChunkCache) level.getChunkSource()).isPositionTicking(this); } // Paper end - Expose entity id counter @@ -190,7 +190,7 @@ index 1bb8b6e91c44cd13411d96d749fa64835c75a267..75c278b67ad2b78766efd8f89c4c2ca7 protected ParticleOptions getInkParticle() { return ParticleTypes.GLOW_SQUID_INK; diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 47d9d45a5244ea991bedd16ff9ef0a40128b0258..a47e0b6b1650ae88fcbdc2f12c1b00ad94f29f85 100644 +index 5641bc7f50cef7819ddaeb76a4a4f9c80f473d31..5e663a0d0c4fe1f32ac3483b86c085ec2205b3dc 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java @@ -217,9 +217,9 @@ public abstract class LivingEntity extends Entity implements Attackable { @@ -268,7 +268,7 @@ index 47d9d45a5244ea991bedd16ff9ef0a40128b0258..a47e0b6b1650ae88fcbdc2f12c1b00ad // Paper end - Add EntityMoveEvent if (!this.level().isClientSide && this.isSensitiveToWater() && this.isInWaterRainOrBubble()) { diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java -index 4e5038e3cb6644e14d4b0022444386c50c827d0b..f6261b43cad2c97e08788c27d0bdc1d8a42bd4d5 100644 +index a181a298334212847166409a2121476ba5871cb2..76729680ea74eedd648eeaafbdfed4ee817b5675 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java @@ -148,8 +148,8 @@ public abstract class Mob extends LivingEntity implements Targeting { @@ -1912,7 +1912,7 @@ index b5d6857eaf2bed14adcb5f5e80d91b44eb8b0dcc..bc57978d89db43e97a38ea56c3541e8f } diff --git a/src/main/java/net/minecraft/world/entity/animal/Squid.java b/src/main/java/net/minecraft/world/entity/animal/Squid.java -index f60c4cd0543fd5d50fa7e2c1a9e8381227adb540..7fa03dbc442942b70f374096e346d54089d8f0a0 100644 +index 4f32597c7af34d599f6658fe4962d41624e60419..0ee9d5eeabb0352d0a92fa0106b7a3a834a9c146 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Squid.java +++ b/src/main/java/net/minecraft/world/entity/animal/Squid.java @@ -48,9 +48,32 @@ public class Squid extends WaterAnimal { @@ -4251,7 +4251,7 @@ index 92974452d8f63fde8524cfac305ee2ef5212f840..3568c4b7ecfa250bbeb1799685b487df protected void defineSynchedData() { super.defineSynchedData(); diff --git a/src/main/java/net/minecraft/world/entity/monster/Slime.java b/src/main/java/net/minecraft/world/entity/monster/Slime.java -index 2e59a32aa8afe45641a319b1a6c347ee944398a8..01416cef059e4b8d82a0676a0ced19a325a47ace 100644 +index 2502cb476032c6a247132ce2e427721d6c9f8ce4..23ed3890fd5a5786c1d251b926cb386b16f8b4f9 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Slime.java +++ b/src/main/java/net/minecraft/world/entity/monster/Slime.java @@ -61,6 +61,7 @@ public class Slime extends Mob implements Enemy { @@ -4381,7 +4381,7 @@ index 2e59a32aa8afe45641a319b1a6c347ee944398a8..01416cef059e4b8d82a0676a0ced19a3 } diff --git a/src/main/java/net/minecraft/world/entity/monster/Spider.java b/src/main/java/net/minecraft/world/entity/monster/Spider.java -index 0c68ed759421d6bce4435399f1b4980510081cac..8133ff59a1dba12542c7b582381433267ca18ce5 100644 +index 7618364e5373fe17cfe45a5a4ee9ab25e591581c..dd1a6fc505ce2214903dbe703bcabe7d264fbe90 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Spider.java +++ b/src/main/java/net/minecraft/world/entity/monster/Spider.java @@ -53,14 +53,33 @@ public class Spider extends Monster { @@ -4746,7 +4746,7 @@ index 11275a9ec6faa69c9f054683cb47312e443ba883..dc29e875c1e184c1c4553c127bb8c86d this.level().getProfiler().pop(); this.updateActivity(); 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 3fa43be16cc8d35622c269db37875b4bd0a09405..aa6533c40b73bc72a4906f0533f13e74e58c091a 100644 +index 5c40e994007dbf46ebc12c1e6a6ca90379471b74..3be3e46408b2d43f2cbb27b516be8c466ab0ed79 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Zombie.java +++ b/src/main/java/net/minecraft/world/entity/monster/Zombie.java @@ -107,11 +107,30 @@ public class Zombie extends Monster { @@ -5114,10 +5114,10 @@ index 1c89f20debfad9807c90a21cc336d5790294ebce..3782209c6d3408393e91ffe64976a15c this.setTradingPlayer(player); this.openTradingScreen(player, this.getDisplayName(), 1); diff --git a/src/main/java/net/minecraft/world/entity/player/Player.java b/src/main/java/net/minecraft/world/entity/player/Player.java -index 35869e655a7488f7b5868895287b8045b03f2d63..1662bff77da2acae9661f1a083e048d5626189f7 100644 +index 44a17a8e763455e834dcf488044a0f4907ce346e..16e90cc84433a0cdabcf3fec8d9734d074b73c71 100644 --- a/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java -@@ -194,6 +194,19 @@ public abstract class Player extends LivingEntity { +@@ -192,6 +192,19 @@ public abstract class Player extends LivingEntity { } // CraftBukkit end @@ -5172,7 +5172,7 @@ index 78dd3365dc4d1265fc2102f740d75a384f5df5c5..4a2331c22a022881d66bcfd4134b0ffe public boolean isPickable() { return false; diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java -index f16ac1d640fc97f348c244d4ea86e3278b30ae19..6f7be7d29b4654d463299c62b8a01696ca187eb2 100644 +index 8698104e3eb98e2cc5da5de87a8f538860c1d91d..39ae3335866669be54f31ee6cd10d41bc70b193c 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java @@ -1227,4 +1227,27 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { diff --git a/patches/server/0010-Barrels-and-enderchests-6-rows.patch b/patches/server/0010-Barrels-and-enderchests-6-rows.patch index 22bf57dca..0668f4706 100644 --- a/patches/server/0010-Barrels-and-enderchests-6-rows.patch +++ b/patches/server/0010-Barrels-and-enderchests-6-rows.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Barrels and enderchests 6 rows diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index 2a4b63ead77cf6117b1ebefe9d9dbd6c73ed4d95..9cc88489e9545b6d2de410d702a8395ccf101f89 100644 +index 5eedc109e84a8e059ccacf43fc2a8d8475ee3543..2b65d30a143fdc2af635125901f2aba8fdc8c4a7 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -1189,6 +1189,27 @@ public abstract class PlayerList { +@@ -1188,6 +1188,27 @@ public abstract class PlayerList { player.getBukkitEntity().recalculatePermissions(); // CraftBukkit this.server.getCommands().sendCommands(player); } // Paper - Add sendOpLevel API @@ -37,13 +37,13 @@ index 2a4b63ead77cf6117b1ebefe9d9dbd6c73ed4d95..9cc88489e9545b6d2de410d702a8395c public boolean isWhiteListed(GameProfile profile) { diff --git a/src/main/java/net/minecraft/world/entity/player/Player.java b/src/main/java/net/minecraft/world/entity/player/Player.java -index b33f63016fc2818b0a6a05107e435e1c9be3ca97..1f7022c086c88d9a7b8672ede2a5a14f85999461 100644 +index 16e90cc84433a0cdabcf3fec8d9734d074b73c71..9d3e681faa5639b540e8c9b68dc9098ace3ecf03 100644 --- a/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java -@@ -183,6 +183,7 @@ public abstract class Player extends LivingEntity { - public boolean affectsSpawning = true; +@@ -181,6 +181,7 @@ public abstract class Player extends LivingEntity { + public float hurtDir; // Paper - protected -> public + public boolean affectsSpawning = true; // Paper - Affects Spawning API public net.kyori.adventure.util.TriState flyingFallDamage = net.kyori.adventure.util.TriState.NOT_SET; // Paper - flying fall damage - // Paper end + public int sixRowEnderchestSlotCount = -1; // Purpur // CraftBukkit start diff --git a/patches/server/0012-AFK-API.patch b/patches/server/0012-AFK-API.patch index 9b8f3480d..bf6434d3d 100644 --- a/patches/server/0012-AFK-API.patch +++ b/patches/server/0012-AFK-API.patch @@ -5,7 +5,7 @@ Subject: [PATCH] AFK API diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 936224e1884f7f7d03d51c2cce3599a78d174b80..ae60a3ba8a482cbae6905e66cfbb034c298a25e2 100644 +index 62fd29f19b93f07a87377f26d9e5b169b9d80f4f..e4f36920d54688b515b86ada943765d460361889 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java @@ -2234,8 +2234,68 @@ public class ServerPlayer extends Player { @@ -78,7 +78,7 @@ index 936224e1884f7f7d03d51c2cce3599a78d174b80..ae60a3ba8a482cbae6905e66cfbb034c return this.stats; } diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 4326b324ff5c815b38211fe24cb5f05b974c3200..1c14341cff817e66d982d306f5e51248bca7ec19 100644 +index 564ad357c3f85c3018b51e592474722f9f92bf35..466df3f098688d42320127273c07219cc3673258 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java @@ -325,6 +325,20 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl @@ -165,7 +165,7 @@ index 823efad652d8ff9e96b99375b102fef6f017716e..caa8a69bde0c212c36dd990a67836ac2 } // CraftBukkit start diff --git a/src/main/java/net/minecraft/world/entity/EntitySelector.java b/src/main/java/net/minecraft/world/entity/EntitySelector.java -index b350d41a724048af06f9aa9bbef039d3d719c3a8..4f25d52e70752d56c0c03d437651638ac57fa576 100644 +index d8cc5614502db7025349e085381b6b32ad32296a..f1b9e83206cc67e6ef29ebe088351b0aaa5eb349 100644 --- a/src/main/java/net/minecraft/world/entity/EntitySelector.java +++ b/src/main/java/net/minecraft/world/entity/EntitySelector.java @@ -40,6 +40,7 @@ public final class EntitySelector { @@ -175,7 +175,7 @@ index b350d41a724048af06f9aa9bbef039d3d719c3a8..4f25d52e70752d56c0c03d437651638a + public static Predicate notAfk = (player) -> !player.isAfk(); // Purpur private EntitySelector() {} - // Paper start + // Paper start - Affects Spawning API diff --git a/src/main/java/net/minecraft/world/entity/ai/targeting/TargetingConditions.java b/src/main/java/net/minecraft/world/entity/ai/targeting/TargetingConditions.java index 3c4f4af85a3f2d4f9f52827164e63727b916c33a..aa4dec55c1d4cd9796587ea3a3343131a4d2f0a4 100644 --- a/src/main/java/net/minecraft/world/entity/ai/targeting/TargetingConditions.java @@ -192,10 +192,10 @@ index 3c4f4af85a3f2d4f9f52827164e63727b916c33a..aa4dec55c1d4cd9796587ea3a3343131 if (baseEntity == null) { if (this.isCombat && (!targetEntity.canBeSeenAsEnemy() || targetEntity.level().getDifficulty() == Difficulty.PEACEFUL)) { diff --git a/src/main/java/net/minecraft/world/entity/player/Player.java b/src/main/java/net/minecraft/world/entity/player/Player.java -index 45a5e6d8a77d820674a7c27867cfbb373c0be860..ad17b7e61b882acefb6ea6fd769244c5c028f5ec 100644 +index 9d3e681faa5639b540e8c9b68dc9098ace3ecf03..dac631ffd190829e299ab30415ade7c06f70f4c3 100644 --- a/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java -@@ -189,6 +189,13 @@ public abstract class Player extends LivingEntity { +@@ -187,6 +187,13 @@ public abstract class Player extends LivingEntity { public boolean fauxSleeping; public int oldLevel = -1; @@ -210,7 +210,7 @@ index 45a5e6d8a77d820674a7c27867cfbb373c0be860..ad17b7e61b882acefb6ea6fd769244c5 public CraftHumanEntity getBukkitEntity() { return (CraftHumanEntity) super.getBukkitEntity(); diff --git a/src/main/java/net/minecraft/world/level/EntityGetter.java b/src/main/java/net/minecraft/world/level/EntityGetter.java -index ff0b7b9e4ae3aa0c170d05bc51fd7ff26e7531ee..53d4000593d4c79de8e8ab04bfd614b7ee0ad7a5 100644 +index ed84c87a3f76bc0254c1abb189e6b8b808823465..5bc68b1ef33f297e9a4b1bdd7d69f86a46ad6fbd 100644 --- a/src/main/java/net/minecraft/world/level/EntityGetter.java +++ b/src/main/java/net/minecraft/world/level/EntityGetter.java @@ -191,7 +191,7 @@ public interface EntityGetter { @@ -223,10 +223,10 @@ index ff0b7b9e4ae3aa0c170d05bc51fd7ff26e7531ee..53d4000593d4c79de8e8ab04bfd614b7 if (range < 0.0D || d < range * range) { return true; diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 4ab63267c4ec808d3daf94478a1425b5aa70b75f..833d20484c3bd5b59fff64141f2aa352742a3d5f 100644 +index 8de8452b93833dbfe9e69b2b269264c0aa167e52..84ab7296ca213ccc2d8983b6a4417993cbed70b5 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -524,10 +524,15 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -482,10 +482,15 @@ public class CraftPlayer extends CraftHumanEntity implements Player { @Override public void setPlayerListName(String name) { @@ -243,7 +243,7 @@ index 4ab63267c4ec808d3daf94478a1425b5aa70b75f..833d20484c3bd5b59fff64141f2aa352 for (ServerPlayer player : (List) this.server.getHandle().players) { if (player.getBukkitEntity().canSee(this)) { player.connection.send(new ClientboundPlayerInfoUpdatePacket(ClientboundPlayerInfoUpdatePacket.Action.UPDATE_DISPLAY_NAME, this.getHandle())); -@@ -3379,5 +3384,20 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -3367,5 +3372,20 @@ public class CraftPlayer extends CraftHumanEntity implements Player { public boolean usesPurpurClient() { return getHandle().purpurClient; } @@ -317,7 +317,7 @@ index e248395ad5f5f012aeefecf367d54f90cade0996..70f53ccb22de2c05c9ead68f8bd29d0b public boolean untamedTamablesAreRidable = true; public boolean useNightVisionWhenRiding = false; diff --git a/src/main/java/org/spigotmc/ActivationRange.java b/src/main/java/org/spigotmc/ActivationRange.java -index a69814d3a6214af734d670fe5545518a5f8a8dc5..a2227d7148910631c9cec73aef2c24e223385963 100644 +index 41cddf7e42f0e8f80973e482a95e55d3bd19f659..b73bb349aed01a96515e5d4d7fe67d28bd80189f 100644 --- a/src/main/java/org/spigotmc/ActivationRange.java +++ b/src/main/java/org/spigotmc/ActivationRange.java @@ -203,6 +203,7 @@ public class ActivationRange diff --git a/patches/server/0013-Bring-back-server-name.patch b/patches/server/0013-Bring-back-server-name.patch index 2f7357df3..e6a15fd42 100644 --- a/patches/server/0013-Bring-back-server-name.patch +++ b/patches/server/0013-Bring-back-server-name.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Bring back server name diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServerProperties.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServerProperties.java -index 1643186bcb2caf5d29fd551afd35830726dbb80a..d53e0b67d847dfec2f4b118b5ca3f0ed1dc29ad6 100644 +index bab2471616404821671264ccefd729cab8d0bf58..ae75edfaa9e4c72f11fbb7ffc66294be47c206cc 100644 --- a/src/main/java/net/minecraft/server/dedicated/DedicatedServerProperties.java +++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServerProperties.java @@ -57,6 +57,7 @@ public class DedicatedServerProperties extends Settings // Pufferfish - Pufferfish > // Paper - Paper > // Spigot - Spigot > // CraftBukkit - cb > vanilla! -+ return org.purpurmc.purpur.PurpurConfig.serverModName; // Purpur - Purpur > // Pufferfish - Pufferfish > // Paper - Paper > // Spigot - Spigot > // CraftBukkit - cb > vanilla! +- return "Purpur"; // Purpur - Purpur > // Pufferfish - Pufferfish > // Paper ++ return org.purpurmc.purpur.PurpurConfig.serverModName; // Purpur - Purpur > // Pufferfish - Pufferfish > // Paper } public SystemReport fillSystemReport(SystemReport details) { diff --git a/patches/server/0016-Lagging-threshold.patch b/patches/server/0016-Lagging-threshold.patch index 859fbaa48..8ef789291 100644 --- a/patches/server/0016-Lagging-threshold.patch +++ b/patches/server/0016-Lagging-threshold.patch @@ -5,18 +5,18 @@ Subject: [PATCH] Lagging threshold diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 8955a2537744658164175120e30feb7088e1f6cc..0dbd0e67e236059ef960c5b88b9eb4ac40008298 100644 +index 979acf21f88bf6248404dcdd1b20d3c0ab8dcde4..fef2374ac572361a40f86311ed0879830f031040 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -307,6 +307,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop this.getY() >= v) && (!(this instanceof Player player) || !player.getAbilities().invulnerable))) { - // Paper end + // Paper end - Configurable nether ceiling damage diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index c27e254d42697f028f3aca902bcb58ba33f95ce4..d668fd41d2bc2ab6a782cf5415507cbd83754c18 100644 +index b1e6a65769d0915712571214f82f225437b02706..f4c1fd338dc1f37859eb13b5c9e9dae52aac0218 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java @@ -2541,7 +2541,7 @@ public abstract class LivingEntity extends Entity implements Attackable { diff --git a/patches/server/0055-Add-canSaveToDisk-to-Entity.patch b/patches/server/0055-Add-canSaveToDisk-to-Entity.patch index 1e6bf3f8b..d49d23a18 100644 --- a/patches/server/0055-Add-canSaveToDisk-to-Entity.patch +++ b/patches/server/0055-Add-canSaveToDisk-to-Entity.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add canSaveToDisk to Entity diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 9f354cbc17e66c425a274b00f15e6cf51cdb2cee..96e79ca690a3951dd24601673703f914465c48a3 100644 +index 605c15bb3ca7f4c13a7c869ccd61961d5e01937e..2dcfcc740aab2fe069aff01bff37c1c310203998 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -498,6 +498,10 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -560,6 +560,10 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S return false; } diff --git a/patches/server/0059-Add-5-second-tps-average-in-tps.patch b/patches/server/0059-Add-5-second-tps-average-in-tps.patch index 28c91e5c6..3bf8e8623 100644 --- a/patches/server/0059-Add-5-second-tps-average-in-tps.patch +++ b/patches/server/0059-Add-5-second-tps-average-in-tps.patch @@ -5,32 +5,23 @@ Subject: [PATCH] Add 5 second tps average in /tps diff --git a/src/main/java/com/destroystokyo/paper/gui/RAMDetails.java b/src/main/java/com/destroystokyo/paper/gui/RAMDetails.java -index 066b9e4c4f0e7773548eda045cdd1ca8445221d2..92eaba96135ccddb7d682dab7e82cde9318a48ef 100644 +index 039a86034928a5eb7aaa2d7ca76a7bddcca346bd..308f67d0616e2d6bb135258f1fda53ccdee01430 100644 --- a/src/main/java/com/destroystokyo/paper/gui/RAMDetails.java +++ b/src/main/java/com/destroystokyo/paper/gui/RAMDetails.java -@@ -58,7 +58,7 @@ public class RAMDetails extends JList { - GraphData data = RAMGraph.DATA.peekLast(); - Vector vector = new Vector<>(); - -- double[] tps = new double[] {server.tps1.getAverage(), server.tps5.getAverage(), server.tps15.getAverage()}; -+ double[] tps = new double[] {server.tps5s.getAverage(), server.tps1.getAverage(), server.tps5.getAverage(), server.tps15.getAverage()}; // Purpur - String[] tpsAvg = new String[tps.length]; - - for ( int g = 0; g < tps.length; g++) { -@@ -67,7 +67,7 @@ public class RAMDetails extends JList { +@@ -68,7 +68,7 @@ public class RAMDetails extends JList { vector.add("Memory use: " + (data.getUsedMem() / 1024L / 1024L) + " mb (" + (data.getFree() * 100L / data.getMax()) + "% free)"); vector.add("Heap: " + (data.getTotal() / 1024L / 1024L) + " / " + (data.getMax() / 1024L / 1024L) + " mb"); - vector.add("Avg tick: " + DECIMAL_FORMAT.format(this.getAverage(server.getTickTimesNanos())) + " ms"); + vector.add("Avg tick: " + DECIMAL_FORMAT.format((double)this.server.getAverageTickTimeNanos() / (double) TimeUtil.NANOSECONDS_PER_MILLISECOND) + " ms"); - vector.add("TPS from last 1m, 5m, 15m: " + String.join(", ", tpsAvg)); + vector.add("TPS from last 5s, 1m, 5m, 15m: " + String.join(", ", tpsAvg)); // Purpur - setListData(vector); } + diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 830d02bfb5fc84079fc70d59919a9547e4cf2874..56e5c6ff88b6037f725020ac381d6ae473c059a4 100644 +index 73d7385c00f41075b00e68d3b44c56501c47a6a5..cc17176b4019a99e8322942a33cb66a0ea93735a 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -303,7 +303,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 0 && args[0].equals("mem") && sender.hasPermission("bukkit.command.tpsmemory")) { diff --git a/patches/server/0061-Item-entity-immunities.patch b/patches/server/0061-Item-entity-immunities.patch index b272a33a4..07c7adae8 100644 --- a/patches/server/0061-Item-entity-immunities.patch +++ b/patches/server/0061-Item-entity-immunities.patch @@ -5,15 +5,15 @@ Subject: [PATCH] Item entity immunities diff --git a/src/main/java/net/minecraft/server/level/ServerEntity.java b/src/main/java/net/minecraft/server/level/ServerEntity.java -index 79914528f6d255355284b04253218a7c4dec1ead..2568b4ad72a7b99484aaa048257a3b5465b63b9d 100644 +index db55ad9aaabfa1ea998754f3ac352d1698936696..04b98e23eed926d8473cc2464e04a5b9f18f1140 100644 --- a/src/main/java/net/minecraft/server/level/ServerEntity.java +++ b/src/main/java/net/minecraft/server/level/ServerEntity.java @@ -73,7 +73,7 @@ public class ServerEntity { @Nullable private List> trackedDataValues; // CraftBukkit start -- final Set trackedPlayers; // Paper - private -> package -+ public final Set trackedPlayers; // Paper - private -> package // Purpur - package -> public +- private final Set trackedPlayers; ++ public final Set trackedPlayers; // Purpur - private -> public public ServerEntity(ServerLevel worldserver, Entity entity, int i, boolean flag, Consumer> consumer, Set trackedPlayers) { this.trackedPlayers = trackedPlayers; diff --git a/patches/server/0070-Add-allow-water-in-end-world-option.patch b/patches/server/0070-Add-allow-water-in-end-world-option.patch index a63cdee03..f61551db1 100644 --- a/patches/server/0070-Add-allow-water-in-end-world-option.patch +++ b/patches/server/0070-Add-allow-water-in-end-world-option.patch @@ -27,10 +27,10 @@ index 6371f326fc86cfc53e39bf8ed13b646f7705fbbc..3dec0c5fc8dece5341634eaf8e94fe19 return true; diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index 4325d7e8da1e1051b0525897736f1bca83eb7f6a..85411279ca52e0b3e499fffe4b08cb2ab1c3aaf6 100644 +index 5b4a47e3078a8bf0533228af14c1a1031ec3ae69..6fc02fab7c0eda20abe8274e8b891f95d2c70b62 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java -@@ -1912,4 +1912,13 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -1911,4 +1911,13 @@ public abstract class Level implements LevelAccessor, AutoCloseable { return null; } // Paper end - optimize redstone (Alternate Current) diff --git a/patches/server/0074-Squid-EAR-immunity.patch b/patches/server/0074-Squid-EAR-immunity.patch index 247da5700..cb395933b 100644 --- a/patches/server/0074-Squid-EAR-immunity.patch +++ b/patches/server/0074-Squid-EAR-immunity.patch @@ -25,7 +25,7 @@ index e813fa037ca17bec29db916eac882cbfab432e56..c87c7feb140864771cbef3dcee1f8931 public boolean spiderRidable = false; diff --git a/src/main/java/org/spigotmc/ActivationRange.java b/src/main/java/org/spigotmc/ActivationRange.java -index 08b266efbefc45e9b08b2c03a36441a8c7564197..e7c384a8bf16de5132245c24226fff22f5c38585 100644 +index b73bb349aed01a96515e5d4d7fe67d28bd80189f..f9e3f4e15719ed9284ec315b8a1ef63dc242e009 100644 --- a/src/main/java/org/spigotmc/ActivationRange.java +++ b/src/main/java/org/spigotmc/ActivationRange.java @@ -15,6 +15,7 @@ import net.minecraft.world.entity.ambient.AmbientCreature; @@ -36,7 +36,7 @@ index 08b266efbefc45e9b08b2c03a36441a8c7564197..e7c384a8bf16de5132245c24226fff22 import net.minecraft.world.entity.animal.WaterAnimal; import net.minecraft.world.entity.animal.horse.Llama; import net.minecraft.world.entity.boss.EnderDragonPart; -@@ -402,6 +403,7 @@ public class ActivationRange +@@ -401,6 +402,7 @@ public class ActivationRange */ public static boolean checkIfActive(Entity entity) { diff --git a/patches/server/0084-Stop-squids-floating-on-top-of-water.patch b/patches/server/0084-Stop-squids-floating-on-top-of-water.patch index ac8df3dec..b3a82c218 100644 --- a/patches/server/0084-Stop-squids-floating-on-top-of-water.patch +++ b/patches/server/0084-Stop-squids-floating-on-top-of-water.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Stop squids floating on top of water diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 96e79ca690a3951dd24601673703f914465c48a3..46dfa64da35505ca8be525d0eca0e2840840f776 100644 +index 2dcfcc740aab2fe069aff01bff37c1c310203998..28e2c99a757b75a0939fe50516592358eff8f719 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -4451,6 +4451,12 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -4446,6 +4446,12 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S this.yRotO = this.getYRot(); } @@ -22,7 +22,7 @@ index 96e79ca690a3951dd24601673703f914465c48a3..46dfa64da35505ca8be525d0eca0e284 if (false && this.touchingUnloadedChunk()) { // Pufferfish - cost of a lookup here is the same cost as below, so skip return false; diff --git a/src/main/java/net/minecraft/world/entity/animal/Squid.java b/src/main/java/net/minecraft/world/entity/animal/Squid.java -index 913b66be2111da862e706d4978825c64cfe8b00b..f68c18b6645981126329b58379946308bbb8ccf8 100644 +index f9db04ee35928d76dc504808a2acfca85295a6e6..59423504642953397b77ee8c9dca7aa4b3ef2f74 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Squid.java +++ b/src/main/java/net/minecraft/world/entity/animal/Squid.java @@ -75,6 +75,12 @@ public class Squid extends WaterAnimal { diff --git a/patches/server/0086-Entities-can-use-portals-configuration.patch b/patches/server/0086-Entities-can-use-portals-configuration.patch index 9e626d409..5df43813a 100644 --- a/patches/server/0086-Entities-can-use-portals-configuration.patch +++ b/patches/server/0086-Entities-can-use-portals-configuration.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Entities can use portals configuration diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 46dfa64da35505ca8be525d0eca0e2840840f776..cc7cdb842df3a9d9cb9dc86b589c9893e06577ce 100644 +index 28e2c99a757b75a0939fe50516592358eff8f719..cdf8c8a571edfa1a54bbcb2e11d69536e7df61bf 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -3152,7 +3152,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -3150,7 +3150,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S public void handleInsidePortal(BlockPos pos) { if (this.isOnPortalCooldown()) { this.setPortalCooldown(); @@ -17,7 +17,7 @@ index 46dfa64da35505ca8be525d0eca0e2840840f776..cc7cdb842df3a9d9cb9dc86b589c9893 if (!this.level().isClientSide && !pos.equals(this.portalEntrancePos)) { this.portalEntrancePos = pos.immutable(); } -@@ -3859,7 +3859,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -3857,7 +3857,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S } public boolean canChangeDimensions() { diff --git a/patches/server/0096-Configurable-daylight-cycle.patch b/patches/server/0096-Configurable-daylight-cycle.patch index 08f54b125..8e6b2c30f 100644 --- a/patches/server/0096-Configurable-daylight-cycle.patch +++ b/patches/server/0096-Configurable-daylight-cycle.patch @@ -18,10 +18,10 @@ index 9ec6145fe04ec64bbee8ec6a837719caebdbc6f5..358d610ad020cada1bb83e393deeeaae public ClientboundSetTimePacket(long time, long timeOfDay, boolean doDaylightCycle) { this.gameTime = time; diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 6dda652c76130b477b3d47bc53761a36ef55c1d7..dde0affb3b966ea3160a9f28b2921d128b6c1b92 100644 +index cc17176b4019a99e8322942a33cb66a0ea93735a..d4f1151dd15c608194b6b6f7e7987b74a3928b50 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1693,7 +1693,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop. diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index cc7cdb842df3a9d9cb9dc86b589c9893e06577ce..7e92c7a9c5792cb0d4c6c4370449aa0cf36d7dc5 100644 +index cdf8c8a571edfa1a54bbcb2e11d69536e7df61bf..72a81ccb270e9cb23bd8324fe4f6d4cea22a0105 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -1875,7 +1875,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -1876,7 +1876,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S return this.isInWater() || flag; } diff --git a/patches/server/0127-Fix-stuck-in-portals.patch b/patches/server/0127-Fix-stuck-in-portals.patch index d77c53435..79e9ab4bb 100644 --- a/patches/server/0127-Fix-stuck-in-portals.patch +++ b/patches/server/0127-Fix-stuck-in-portals.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Fix stuck in portals diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 58b531c14c36bec725891c899b3f3586b5c11d9e..921738689a367c231e99eff6bc9fc305ebb31012 100644 +index 485fa2fecb3d83635757319d70cd8e90f95807c0..3c41a23964b115145d6b14930444f16c85769634 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java @@ -1271,6 +1271,7 @@ public class ServerPlayer extends Player { @@ -17,10 +17,10 @@ index 58b531c14c36bec725891c899b3f3586b5c11d9e..921738689a367c231e99eff6bc9fc305 // CraftBukkit end this.setServerLevel(worldserver); diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 7e92c7a9c5792cb0d4c6c4370449aa0cf36d7dc5..a040e92c3b3700461e630cd5299ff6c7400c273f 100644 +index 72a81ccb270e9cb23bd8324fe4f6d4cea22a0105..dcbb4d08a365ac5a697d6d69984b916fbc5abcd9 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -3149,12 +3149,15 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -3147,12 +3147,15 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S return Vec3.directionFromRotation(this.getRotationVector()); } diff --git a/patches/server/0147-Drowning-Settings.patch b/patches/server/0147-Drowning-Settings.patch index e09faf044..8bfe24259 100644 --- a/patches/server/0147-Drowning-Settings.patch +++ b/patches/server/0147-Drowning-Settings.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Drowning Settings diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index a040e92c3b3700461e630cd5299ff6c7400c273f..1bb50f182fa6274cb0c631e0d4e79288443b3a53 100644 +index dcbb4d08a365ac5a697d6d69984b916fbc5abcd9..ae97146bf8e86a4be1b5d33f2956b28a2ed50359 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -3398,7 +3398,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -3396,7 +3396,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S } public int getMaxAirSupply() { @@ -18,7 +18,7 @@ index a040e92c3b3700461e630cd5299ff6c7400c273f..1bb50f182fa6274cb0c631e0d4e79288 public int getAirSupply() { diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 06a647ae44423e14f4266c9cc25ff78ee16bc3c8..95a004d6b0581cf9aa6805f08a34a04baefef8fa 100644 +index a64a41c521aea5f90fcfe72dc24ae5261c5f0b6d..be5c0141d40864bbf7338f2f5b389ec8ea41e4a8 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java @@ -438,7 +438,7 @@ public abstract class LivingEntity extends Entity implements Attackable { diff --git a/patches/server/0168-Add-config-change-multiplier-critical-damage-value.patch b/patches/server/0168-Add-config-change-multiplier-critical-damage-value.patch index 1e1a20aef..201053b38 100644 --- a/patches/server/0168-Add-config-change-multiplier-critical-damage-value.patch +++ b/patches/server/0168-Add-config-change-multiplier-critical-damage-value.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add config change multiplier critical damage value diff --git a/src/main/java/net/minecraft/world/entity/player/Player.java b/src/main/java/net/minecraft/world/entity/player/Player.java -index a48467ed99653dfb5b953baebdc947dea6fb0481..3020992f10d6fc547ab0ea431383cdcb1322eaa6 100644 +index 7126eab84084620661c1fd3c3311ac24fbcfad09..63ab4eaf21d69ab40ea4d659322b429cb640db60 100644 --- a/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java -@@ -1314,7 +1314,7 @@ public abstract class Player extends LivingEntity { +@@ -1312,7 +1312,7 @@ public abstract class Player extends LivingEntity { flag2 = flag2 && !this.level().paperConfig().entities.behavior.disablePlayerCrits; // Paper - Toggleable player crits flag2 = flag2 && !this.isSprinting(); if (flag2) { diff --git a/patches/server/0173-API-for-any-mob-to-burn-daylight.patch b/patches/server/0173-API-for-any-mob-to-burn-daylight.patch index d63fc2337..21898e1dd 100644 --- a/patches/server/0173-API-for-any-mob-to-burn-daylight.patch +++ b/patches/server/0173-API-for-any-mob-to-burn-daylight.patch @@ -6,10 +6,10 @@ Subject: [PATCH] API for any mob to burn daylight Co-authored by: Encode42 diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 1bb50f182fa6274cb0c631e0d4e79288443b3a53..ac0fc8b7184ba1b6d40261cc15d81a7936f728d4 100644 +index ae97146bf8e86a4be1b5d33f2956b28a2ed50359..db3bdc0699143b9634226c1c371955ec4ac735c8 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -502,6 +502,21 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -564,6 +564,21 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S return true; } @@ -32,7 +32,7 @@ index 1bb50f182fa6274cb0c631e0d4e79288443b3a53..ac0fc8b7184ba1b6d40261cc15d81a79 return this.hardCollides; } diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index d72838fe8a0a9540750bfc3a26202e93493c98f3..6eb7a1398d1ce63ec6c11d9865f4c16b51c361de 100644 +index d2b1d362a0187a6eefa9d2a1d47971b783c252b7..6ba0fbaba03d9b7dede1b869f004bb020d25c885 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java @@ -262,6 +262,7 @@ public abstract class LivingEntity extends Entity implements Attackable { @@ -92,7 +92,7 @@ index d72838fe8a0a9540750bfc3a26202e93493c98f3..6eb7a1398d1ce63ec6c11d9865f4c16b public boolean isSensitiveToWater() { diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java -index 4383b2555cb416fce7b62b046211dbc3e8c75601..c029752141efbc48005dae0e3c1a071ba039b3a7 100644 +index de8c9905e4fec3d77501871ae3041860f1ce2e50..2cf0d698b341d418d0ac4760f95e3ea52c193098 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java @@ -1758,17 +1758,7 @@ public abstract class Mob extends LivingEntity implements Targeting { @@ -278,7 +278,7 @@ index 637b229817f9f2c3ad224f300b56a6bee4c8a341..bcb1912ea218fbb4b849ab84a7025202 // Paper end private static enum AttackPhase { 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 edc47e077fe44d1b817b791ddde86e052a5bf831..2dad874c0a425cf2d0a385b6061ab79d81b82c86 100644 +index 94b92c6e588f871d4b0d86bb8f860a99e473a4ea..e568d014f577ab705645152446156dc04895b3bf 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Zombie.java +++ b/src/main/java/net/minecraft/world/entity/monster/Zombie.java @@ -96,11 +96,12 @@ public class Zombie extends Monster { @@ -354,7 +354,7 @@ index edc47e077fe44d1b817b791ddde86e052a5bf831..2dad874c0a425cf2d0a385b6061ab79d // Paper end - Add more Zombie API diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java -index c3880875f5148d869d7e067fe78cbd1b9492b501..2ef6dc2390ed622eda284e3b4c85ec64e057c981 100644 +index a260e3768892dcf7ddd955cf8753d4d19cd2e8d3..9304a2d06400dfa244ddb4d9591de988b334c3cf 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java @@ -83,6 +83,11 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { diff --git a/patches/server/0176-Add-toggle-for-sand-duping-fix.patch b/patches/server/0176-Add-toggle-for-sand-duping-fix.patch index 5304718df..28ace66b0 100644 --- a/patches/server/0176-Add-toggle-for-sand-duping-fix.patch +++ b/patches/server/0176-Add-toggle-for-sand-duping-fix.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Add toggle for sand duping fix diff --git a/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java b/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java -index 45c07733f03b5c11f6d8e820f65dc950c70d9a67..8e9ab1335626493b8d74f71f643565c0e65af94c 100644 +index 9daf8aa557d9f4fdbcc138a47892ea5a061dd877..3a25741693a8fd08ac4308da3f178155c28bf46b 100644 --- a/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java +++ b/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java @@ -133,7 +133,7 @@ public class FallingBlockEntity extends Entity { @@ -17,9 +17,9 @@ index 45c07733f03b5c11f6d8e820f65dc950c70d9a67..8e9ab1335626493b8d74f71f643565c0 return; } // Paper end - fix sand duping -@@ -150,7 +150,7 @@ public class FallingBlockEntity extends Entity { - this.move(MoverType.SELF, this.getDeltaMovement()); +@@ -149,7 +149,7 @@ public class FallingBlockEntity extends Entity { + this.move(MoverType.SELF, this.getDeltaMovement()); // Paper start - fix sand duping - if (this.isRemoved()) { + if (this.level().purpurConfig.fixSandDuping && this.isRemoved()) { // Purpur @@ -27,7 +27,7 @@ index 45c07733f03b5c11f6d8e820f65dc950c70d9a67..8e9ab1335626493b8d74f71f643565c0 } // Paper end - fix sand duping diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index fca69da24c29c9215529e5a203d7ab282ec4b7f7..7f69260fc1286c243ecc46311e1188a465f9d481 100644 +index 072387303cf013876e6d13ccd6646e7f197bf7ac..77fa5b91ac5a65d2dce6195214c39dbff4aa6c8b 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -683,6 +683,11 @@ public class PurpurWorldConfig { diff --git a/patches/server/0177-Add-toggle-for-end-portal-safe-teleporting.patch b/patches/server/0177-Add-toggle-for-end-portal-safe-teleporting.patch index 5c5520efb..0c65cd3e4 100644 --- a/patches/server/0177-Add-toggle-for-end-portal-safe-teleporting.patch +++ b/patches/server/0177-Add-toggle-for-end-portal-safe-teleporting.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add toggle for end portal safe teleporting diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index ac0fc8b7184ba1b6d40261cc15d81a7936f728d4..57376b7c0d281a7950a69348b5aa869e89719232 100644 +index db3bdc0699143b9634226c1c371955ec4ac735c8..5bdafc37deac75cf6e332ba1094e375031713ca4 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -3223,7 +3223,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -3221,7 +3221,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S } this.processPortalCooldown(); diff --git a/patches/server/0179-Burp-delay-burp-after-eating-food-fills-hunger-bar-c.patch b/patches/server/0179-Burp-delay-burp-after-eating-food-fills-hunger-bar-c.patch index 0a876fa38..e030101a2 100644 --- a/patches/server/0179-Burp-delay-burp-after-eating-food-fills-hunger-bar-c.patch +++ b/patches/server/0179-Burp-delay-burp-after-eating-food-fills-hunger-bar-c.patch @@ -6,18 +6,18 @@ Subject: [PATCH] Burp delay, burp after eating food fills hunger bar diff --git a/src/main/java/net/minecraft/world/entity/player/Player.java b/src/main/java/net/minecraft/world/entity/player/Player.java -index 5260138c46ca499369ff9a1c4acccb594d2c431a..cbfa65a50cb07e825b62493668764ce9f2c4a3fd 100644 +index 63ab4eaf21d69ab40ea4d659322b429cb640db60..59a6836778ee11c66455c29a4dbbe94d6940c812 100644 --- a/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java -@@ -184,6 +184,7 @@ public abstract class Player extends LivingEntity { +@@ -182,6 +182,7 @@ public abstract class Player extends LivingEntity { + public boolean affectsSpawning = true; // Paper - Affects Spawning API public net.kyori.adventure.util.TriState flyingFallDamage = net.kyori.adventure.util.TriState.NOT_SET; // Paper - flying fall damage - // Paper end public int sixRowEnderchestSlotCount = -1; // Purpur + public int burpDelay = 0; // Purpur // CraftBukkit start public boolean fauxSleeping; -@@ -259,6 +260,12 @@ public abstract class Player extends LivingEntity { +@@ -257,6 +258,12 @@ public abstract class Player extends LivingEntity { @Override public void tick() { @@ -30,7 +30,7 @@ index 5260138c46ca499369ff9a1c4acccb594d2c431a..cbfa65a50cb07e825b62493668764ce9 this.noPhysics = this.isSpectator(); if (this.isSpectator()) { this.setOnGround(false); -@@ -2313,7 +2320,7 @@ public abstract class Player extends LivingEntity { +@@ -2311,7 +2318,7 @@ public abstract class Player extends LivingEntity { public ItemStack eat(Level world, ItemStack stack) { this.getFoodData().eat(stack.getItem(), stack); this.awardStat(Stats.ITEM_USED.get(stack.getItem())); diff --git a/patches/server/0180-Allow-player-join-full-server-by-permission.patch b/patches/server/0180-Allow-player-join-full-server-by-permission.patch index 341773752..0faea0bc0 100644 --- a/patches/server/0180-Allow-player-join-full-server-by-permission.patch +++ b/patches/server/0180-Allow-player-join-full-server-by-permission.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Allow player join full server by permission diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index 61a34f3e49b21254984011bc470d72c86d55dba1..0d75ccbf6c5cacd9ce2355d4dca2b1290a8da39f 100644 +index 1f17abac0d9ae19b2d3a5c28a19a6e8a69b6e380..d1afad129159d5ce7cf9530a7dfb6ed5b4fa25f3 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -755,7 +755,7 @@ public abstract class PlayerList { +@@ -754,7 +754,7 @@ public abstract class PlayerList { event.disallow(PlayerLoginEvent.Result.KICK_BANNED, io.papermc.paper.adventure.PaperAdventure.asAdventure(ichatmutablecomponent)); // Paper - Adventure } else { // return this.players.size() >= this.maxPlayers && !this.canBypassPlayerLimit(gameprofile) ? IChatBaseComponent.translatable("multiplayer.disconnect.server_full") : null; diff --git a/patches/server/0181-Add-portal-permission-bypass.patch b/patches/server/0181-Add-portal-permission-bypass.patch index 11edca307..8a9e3eb08 100644 --- a/patches/server/0181-Add-portal-permission-bypass.patch +++ b/patches/server/0181-Add-portal-permission-bypass.patch @@ -5,18 +5,18 @@ Subject: [PATCH] Add portal permission bypass diff --git a/src/main/java/net/minecraft/world/entity/player/Player.java b/src/main/java/net/minecraft/world/entity/player/Player.java -index 5631240aed1c032faeb291358e40180f8aa40e49..952bf54a96f3ee84059f13c5821af2cfafa05c60 100644 +index 59a6836778ee11c66455c29a4dbbe94d6940c812..f0e910a738d71a7759f41e6294e16db256c9c641 100644 --- a/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java -@@ -185,6 +185,7 @@ public abstract class Player extends LivingEntity { - // Paper end +@@ -183,6 +183,7 @@ public abstract class Player extends LivingEntity { + public net.kyori.adventure.util.TriState flyingFallDamage = net.kyori.adventure.util.TriState.NOT_SET; // Paper - flying fall damage public int sixRowEnderchestSlotCount = -1; // Purpur public int burpDelay = 0; // Purpur + public boolean canPortalInstant = false; // Purpur // CraftBukkit start public boolean fauxSleeping; -@@ -474,7 +475,7 @@ public abstract class Player extends LivingEntity { +@@ -472,7 +473,7 @@ public abstract class Player extends LivingEntity { @Override public int getPortalWaitTime() { @@ -26,7 +26,7 @@ index 5631240aed1c032faeb291358e40180f8aa40e49..952bf54a96f3ee84059f13c5821af2cf @Override diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java -index c3dbcb317b7d366feb31f707ad1199c60169f07f..0a14e5d9922836d42a03b496023e76c98fccd824 100644 +index acbb64010cd59668aa1bcb52ff1220789cadb1d3..6c2e91b986099027d83aba85f14ae69cbc358348 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java @@ -266,6 +266,7 @@ public class CraftHumanEntity extends CraftLivingEntity implements HumanEntity { diff --git a/patches/server/0187-Add-uptime-command.patch b/patches/server/0187-Add-uptime-command.patch index 33fc91637..9bc4e12b9 100644 --- a/patches/server/0187-Add-uptime-command.patch +++ b/patches/server/0187-Add-uptime-command.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Add uptime command diff --git a/src/main/java/net/minecraft/commands/Commands.java b/src/main/java/net/minecraft/commands/Commands.java -index 77cced190bd287ff3f5bc8697f16b333da0bc786..bf51f5e414ab45e33efa4057ab251120290b43e1 100644 +index 9c335df92b0a6c7705c9def89ba5c320d2c8ed03..c2b8a653b01aa3e0856afa3e96555f5e8f0e81bd 100644 --- a/src/main/java/net/minecraft/commands/Commands.java +++ b/src/main/java/net/minecraft/commands/Commands.java @@ -253,6 +253,7 @@ public class Commands { @@ -17,12 +17,12 @@ index 77cced190bd287ff3f5bc8697f16b333da0bc786..bf51f5e414ab45e33efa4057ab251120 } diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index fb3b7f0d6e1577f4bba4589dc454ed6d064bd49f..60d2f483de06ca661aad809425d8b52397273732 100644 +index efba2fa31b8f4b7dfe15a36ab8366d3267971a5d..1c5955a5ca94c55f573ba8a4cdc81308a4357fe6 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -294,6 +294,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop processQueue = new java.util.concurrent.ConcurrentLinkedQueue(); diff --git a/patches/server/0194-Player-ridable-in-water-option.patch b/patches/server/0194-Player-ridable-in-water-option.patch index b7c8194ca..dcf0e411d 100644 --- a/patches/server/0194-Player-ridable-in-water-option.patch +++ b/patches/server/0194-Player-ridable-in-water-option.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Player ridable in water option diff --git a/src/main/java/net/minecraft/world/entity/player/Player.java b/src/main/java/net/minecraft/world/entity/player/Player.java -index f262fc2069895b302073c09a58412b9e980e6660..dca769857dbf045bf2184f7761e9a09933858b51 100644 +index f0e910a738d71a7759f41e6294e16db256c9c641..712d4a9cae11f75ffce45c912bf14ff92fe4735e 100644 --- a/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java -@@ -2041,6 +2041,11 @@ public abstract class Player extends LivingEntity { +@@ -2039,6 +2039,11 @@ public abstract class Player extends LivingEntity { return this.inventory.armor; } @@ -21,7 +21,7 @@ index f262fc2069895b302073c09a58412b9e980e6660..dca769857dbf045bf2184f7761e9a099 if (!this.isPassenger() && this.onGround() && !this.isInWater() && !this.isInPowderSnow) { if (this.getShoulderEntityLeft().isEmpty()) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 8bbc9eea77aa96ebd20c5901c03b35e66e79ce63..b2c7777ce1e8492d875c2575685d7668093c8eda 100644 +index 34360b9ed30b20159a6174ef5fc64c415b661f53..14164ef2a4204886c279897b89aca6e071005870 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -394,6 +394,7 @@ public class PurpurWorldConfig { diff --git a/patches/server/0208-Extended-OfflinePlayer-API.patch b/patches/server/0208-Extended-OfflinePlayer-API.patch index 27d9d3fdd..e95efd712 100644 --- a/patches/server/0208-Extended-OfflinePlayer-API.patch +++ b/patches/server/0208-Extended-OfflinePlayer-API.patch @@ -223,10 +223,10 @@ index 2bbc39c257965ad91ee360cdfcd3538a0f041c7e..91fbc0cfc84045e32a4ee16fba8164de + // Purpur end - OfflinePlayer API } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index c7f3072ad6e54b55e896c8d99a16da9849fa8d3b..9306facdc8aa56674f896fa3ab3d2b54dc5a2f4b 100644 +index 4efb8e47a29249cbca52b637d6f721cf2a9afcfb..b2b000ab47897f9d8f47840ae95ef2db478f808c 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -2646,6 +2646,28 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -2604,6 +2604,28 @@ public class CraftPlayer extends CraftHumanEntity implements Player { return this.getHandle().getAbilities().walkingSpeed * 2f; } diff --git a/patches/server/0209-Added-the-ability-to-add-combustible-items.patch b/patches/server/0209-Added-the-ability-to-add-combustible-items.patch index 7e75b06cd..ee1567638 100644 --- a/patches/server/0209-Added-the-ability-to-add-combustible-items.patch +++ b/patches/server/0209-Added-the-ability-to-add-combustible-items.patch @@ -51,10 +51,10 @@ index acfacda5001ef188acfef8ac0d319d66ce1883fb..1d179e9485df78657ce67ab7ca4c4b1b private int maxStack = MAX_STACK; public List transaction = new java.util.ArrayList(); diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index acf930d1d30e924177e49cde6d41a3ada1f16e5d..c1d1d5b561470e3ff1b75b41d83116ae05bef19e 100644 +index 555cffaf05116c7c0a3071c83221d10710be62e8..4e8ff16b5ca3cd2ddf2a44c7cd625fbf2311706d 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -1573,6 +1573,19 @@ public final class CraftServer implements Server { +@@ -1572,6 +1572,19 @@ public final class CraftServer implements Server { return true; } diff --git a/patches/server/0218-UPnP-Port-Forwarding.patch b/patches/server/0218-UPnP-Port-Forwarding.patch index d16085d8e..fb7f81945 100644 --- a/patches/server/0218-UPnP-Port-Forwarding.patch +++ b/patches/server/0218-UPnP-Port-Forwarding.patch @@ -5,18 +5,18 @@ Subject: [PATCH] UPnP Port Forwarding diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 2eb14b686effe22721b377c55f5dede050ddd616..dec396d4d8b603d1d5282d9273c0258964b27389 100644 +index 1c5955a5ca94c55f573ba8a4cdc81308a4357fe6..8934a7a211ea8dff1eff4fa2f7597b03a834e22d 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -309,6 +309,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop type, Level world) { super(type, world); -- //this.random.setSeed((long)this.getId()); // Paper - we set the random to shared, do not clobber the seed -+ if (!world.purpurConfig.entitySharedRandom) this.random.setSeed((long) this.getId()); // Paper - we set the random to shared, do not clobber the seed // Purpur +- //this.random.setSeed((long)this.getId()); // Paper - Share random for entities to make them more random ++ if (!world.purpurConfig.entitySharedRandom) this.random.setSeed((long) this.getId()); // Paper - Share random for entities to make them more random // Purpur this.tentacleSpeed = 1.0F / (this.random.nextFloat() + 1.0F) * 0.2F; } diff --git a/patches/server/0263-Allow-custom-ChatDecorators.patch b/patches/server/0263-Allow-custom-ChatDecorators.patch index cf85490f9..f8ed54728 100644 --- a/patches/server/0263-Allow-custom-ChatDecorators.patch +++ b/patches/server/0263-Allow-custom-ChatDecorators.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Allow custom ChatDecorators Requires NMS to utilize. I'll write an API for this once our upstreams calm down with the changes. diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index b254f5be452fd9a8661124645551a1aa0c5ef23e..6cfdb98969b1461912c857b6b8ae38f532f3bc9e 100644 +index 6ba1ab3b5593d740e02b6314c9a599a0ef5120a1..add9d9900908ea8ee7787f38d37d8626840d4a6b 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -2845,6 +2845,15 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop { entityplayer.connection.suspendFlushing(); }); @@ -129,7 +129,7 @@ index 18e69effb48634dfc28061b5e0a669a8bb5ba002..1169088d9aa970e834ddfb43bf3be35e // Paper start - Folia scheduler API ((io.papermc.paper.threadedregions.scheduler.FoliaGlobalRegionScheduler) Bukkit.getGlobalRegionScheduler()).tick(); getAllLevels().forEach(level -> { -@@ -1682,21 +1682,21 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop list = Lists.newArrayList(); List list1 = this.level.players(); ObjectIterator objectiterator = this.entityMap.values().iterator(); @@ -297,7 +297,7 @@ index b72969b3bc4319387e3946ea01c5b05acd8a87cb..18a42d8c8c038cb94e06909d96d05e06 ChunkMap.TrackedEntity playerchunkmap_entitytracker; -@@ -1208,17 +1208,17 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider +@@ -1198,17 +1198,17 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider playerchunkmap_entitytracker.serverEntity.sendChanges(); } } @@ -319,23 +319,23 @@ index b72969b3bc4319387e3946ea01c5b05acd8a87cb..18a42d8c8c038cb94e06909d96d05e06 } diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java -index ad8e79c72841ff80f8af3580d2cdb89c13f6d688..e828f3d14af21318a716b9eba4b9bf80e377b073 100644 +index 097f6eb96c2df203565a0c50aba6221e67a7e026..13ba576ad447a8bbc0712126ec86524f5bbd9a6d 100644 --- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java +++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java -@@ -296,10 +296,10 @@ public class ServerChunkCache extends ChunkSource { +@@ -281,10 +281,10 @@ public class ServerChunkCache extends ChunkSource { + if (!completablefuture.isDone()) { // Paper io.papermc.paper.chunk.system.scheduling.ChunkTaskScheduler.pushChunkWait(this.level, x1, z1); // Paper - rewrite chunk system - // Paper end - com.destroystokyo.paper.io.SyncLoadFinder.logSyncLoad(this.level, x1, z1); // Paper - Add debug for sync chunk loads + com.destroystokyo.paper.io.SyncLoadFinder.logSyncLoad(this.level, x, z); // Paper - Add debug for sync chunk loads - this.level.timings.syncChunkLoad.startTiming(); // Paper + //this.level.timings.syncChunkLoad.startTiming(); // Paper // Purpur chunkproviderserver_b.managedBlock(completablefuture::isDone); - io.papermc.paper.chunk.system.scheduling.ChunkTaskScheduler.popChunkWait(); // Paper - async chunk debug // Paper - rewrite chunk system + io.papermc.paper.chunk.system.scheduling.ChunkTaskScheduler.popChunkWait(); // Paper - rewrite chunk system - this.level.timings.syncChunkLoad.stopTiming(); // Paper + //this.level.timings.syncChunkLoad.stopTiming(); // Paper // Purpur } // Paper ichunkaccess = (ChunkAccess) ((Either) completablefuture.join()).map((ichunkaccess1) -> { return ichunkaccess1; -@@ -448,17 +448,17 @@ public class ServerChunkCache extends ChunkSource { +@@ -433,17 +433,17 @@ public class ServerChunkCache extends ChunkSource { public void save(boolean flush) { this.runDistanceManagerUpdates(); @@ -357,7 +357,7 @@ index ad8e79c72841ff80f8af3580d2cdb89c13f6d688..e828f3d14af21318a716b9eba4b9bf80 } // Paper end - Incremental chunk and player saving -@@ -495,23 +495,23 @@ public class ServerChunkCache extends ChunkSource { +@@ -480,23 +480,23 @@ public class ServerChunkCache extends ChunkSource { @Override public void tick(BooleanSupplier shouldKeepTicking, boolean tickChunks) { this.level.getProfiler().push("purge"); @@ -387,7 +387,7 @@ index ad8e79c72841ff80f8af3580d2cdb89c13f6d688..e828f3d14af21318a716b9eba4b9bf80 this.level.getProfiler().pop(); this.clearCache(); } -@@ -527,14 +527,14 @@ public class ServerChunkCache extends ChunkSource { +@@ -512,14 +512,14 @@ public class ServerChunkCache extends ChunkSource { gameprofilerfiller.push("pollingChunks"); gameprofilerfiller.push("filteringLoadedChunks"); // Paper - optimise chunk tick iteration @@ -404,7 +404,7 @@ index ad8e79c72841ff80f8af3580d2cdb89c13f6d688..e828f3d14af21318a716b9eba4b9bf80 int k = this.distanceManager.getNaturalSpawnChunkCount(); // Paper start - Optional per player mob spawns int naturalSpawnChunkCount = k; -@@ -564,7 +564,7 @@ public class ServerChunkCache extends ChunkSource { +@@ -549,7 +549,7 @@ public class ServerChunkCache extends ChunkSource { // Pufferfish end } // Paper end - Optional per player mob spawns @@ -413,7 +413,7 @@ index ad8e79c72841ff80f8af3580d2cdb89c13f6d688..e828f3d14af21318a716b9eba4b9bf80 // this.lastSpawnState = spawnercreature_d; // Pufferfish - this is managed asynchronously gameprofilerfiller.popPush("spawnAndTick"); -@@ -673,19 +673,19 @@ public class ServerChunkCache extends ChunkSource { +@@ -658,19 +658,19 @@ public class ServerChunkCache extends ChunkSource { } } // Paper end - optimise chunk tick iteration @@ -437,7 +437,7 @@ index ad8e79c72841ff80f8af3580d2cdb89c13f6d688..e828f3d14af21318a716b9eba4b9bf80 // Paper start - optimise chunk tick iteration if (!this.chunkMap.needsChangeBroadcasting.isEmpty()) { it.unimi.dsi.fastutil.objects.ReferenceOpenHashSet copy = this.chunkMap.needsChangeBroadcasting.clone(); -@@ -699,7 +699,7 @@ public class ServerChunkCache extends ChunkSource { +@@ -684,7 +684,7 @@ public class ServerChunkCache extends ChunkSource { } } // Paper end - optimise chunk tick iteration @@ -447,7 +447,7 @@ index ad8e79c72841ff80f8af3580d2cdb89c13f6d688..e828f3d14af21318a716b9eba4b9bf80 gameprofilerfiller.pop(); 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 979448b2260484375c70cb83d65be25914a2ab76..11a457103c59d230617e404b5523691ea493da96 100644 +index 009d077f979d5ae85b359f3829038015af347429..b4b256721b7a5d25deec717123501a163fcfd8fe 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java @@ -866,7 +866,7 @@ public class ServerLevel extends Level implements WorldGenLevel { @@ -521,7 +521,7 @@ index 979448b2260484375c70cb83d65be25914a2ab76..11a457103c59d230617e404b5523691e this.tickBlockEntities(); } @@ -1099,7 +1099,7 @@ public class ServerLevel extends Level implements WorldGenLevel { - } // Paper + } // Paper - Option to disable ice and snow gameprofilerfiller.popPush("tickBlocks"); - timings.chunkTicksBlocks.startTiming(); // Paper @@ -630,7 +630,7 @@ index 979448b2260484375c70cb83d65be25914a2ab76..11a457103c59d230617e404b5523691e } else if (close) { chunkproviderserver.close(false); } // Paper - rewrite chunk system diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 962dd813a9422ae14f7a149c605c7df4fee61f91..ecd94a7927da0f7a048c6628a9edb01d39ee2ba7 100644 +index 7ac11a52e88248de227ab7b85260be9ed5654739..de61e915475a1b3b6faba16673ac1f271527a1b4 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java @@ -2442,7 +2442,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl @@ -661,10 +661,10 @@ index 962dd813a9422ae14f7a149c605c7df4fee61f91..ecd94a7927da0f7a048c6628a9edb01d } // CraftBukkit end diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index 10723caec1b099596607d23c8a32691765803181..061bdd934f31c9e1d9a37f7831eb1f19d0e46805 100644 +index d1afad129159d5ce7cf9530a7dfb6ed5b4fa25f3..b230739cf929c8f2b51a812fffe54be343ce3e05 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -1274,7 +1274,7 @@ public abstract class PlayerList { +@@ -1273,7 +1273,7 @@ public abstract class PlayerList { public void saveAll(int interval) { io.papermc.paper.util.MCUtil.ensureMain("Save Players" , () -> { // Paper - Ensure main @@ -673,7 +673,7 @@ index 10723caec1b099596607d23c8a32691765803181..061bdd934f31c9e1d9a37f7831eb1f19 int numSaved = 0; long now = MinecraftServer.currentTick; for (int i = 0; i < this.players.size(); ++i) { -@@ -1285,7 +1285,7 @@ public abstract class PlayerList { +@@ -1284,7 +1284,7 @@ public abstract class PlayerList { } // Paper end - Incremental chunk and player saving } @@ -732,7 +732,7 @@ index fcdb9bde8e1605e30dde3e580491522d4b62cdc0..7094701d213c73ba47ace806962244c1 } diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index cf9b76f596409803904f53b8d8fb90888d5fcb95..061a546ff8421d16fa37cf2337cded4bdfc943f3 100644 +index af6def325c97b5a71a671a401d02c1f43b8acd96..ef8b596a02970c514fc6e5e0fb7ded76d82240ac 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java @@ -1317,15 +1317,15 @@ public abstract class Level implements LevelAccessor, AutoCloseable { @@ -764,7 +764,7 @@ index cf9b76f596409803904f53b8d8fb90888d5fcb95..061a546ff8421d16fa37cf2337cded4b co.aikar.timings.TimingHistory.tileEntityTicks += this.blockEntityTickers.size(); // Paper gameprofilerfiller.pop(); diff --git a/src/main/java/net/minecraft/world/level/NaturalSpawner.java b/src/main/java/net/minecraft/world/level/NaturalSpawner.java -index 00b965de947cb13a178061278d1ffa4342e8e065..f2f778d876703c06e0d1bfd7a35adde35abe4939 100644 +index 96fc603c2fccc1d9610248b2116d35696bc65e4e..3d99667fa297ea15c5d3a0526a846ce177a5037a 100644 --- a/src/main/java/net/minecraft/world/level/NaturalSpawner.java +++ b/src/main/java/net/minecraft/world/level/NaturalSpawner.java @@ -133,7 +133,7 @@ public final class NaturalSpawner { @@ -786,7 +786,7 @@ index 00b965de947cb13a178061278d1ffa4342e8e065..f2f778d876703c06e0d1bfd7a35adde3 } diff --git a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java -index c3fb622845770bcee9ddd6ebbeee174b06ee16eb..134d2d56af71aceb1ca33d7bb708124655c5d319 100644 +index 5fab6909bd2ee303f49b7e667617bcae608e82d7..8c0df10efd59594c63cca2a1c22386acf17e5299 100644 --- a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java +++ b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java @@ -799,7 +799,7 @@ public class LevelChunk extends ChunkAccess { @@ -817,7 +817,7 @@ index c3fb622845770bcee9ddd6ebbeee174b06ee16eb..134d2d56af71aceb1ca33d7bb7081246 if (this.blockEntity.getType().isValid(iblockdata)) { @@ -1199,7 +1199,7 @@ public class LevelChunk extends ChunkAccess { - // Paper end + // Paper end - Prevent block entity and entity crashes // Spigot start } finally { - this.blockEntity.tickTimer.stopTiming(); @@ -903,7 +903,7 @@ index b3e1adeb932da9b3bed16acd94e2f16da48a7c72..d3ec817e95628f1fc8be4a29c9a0f13c // Paper end - add timings for scoreboard search } diff --git a/src/main/java/org/spigotmc/ActivationRange.java b/src/main/java/org/spigotmc/ActivationRange.java -index 1085d90f6db968760a52f9d00a25299618264c5f..9113c8ebff5e71f859a19f024969582052c57546 100644 +index f9e3f4e15719ed9284ec315b8a1ef63dc242e009..2e9aed328e576abbe216fdb2071c13421e6645b8 100644 --- a/src/main/java/org/spigotmc/ActivationRange.java +++ b/src/main/java/org/spigotmc/ActivationRange.java @@ -170,7 +170,7 @@ public class ActivationRange @@ -915,7 +915,7 @@ index 1085d90f6db968760a52f9d00a25299618264c5f..9113c8ebff5e71f859a19f0249695820 final int miscActivationRange = world.spigotConfig.miscActivationRange; final int raiderActivationRange = world.spigotConfig.raiderActivationRange; final int animalActivationRange = world.spigotConfig.animalActivationRange; -@@ -250,7 +250,7 @@ public class ActivationRange +@@ -249,7 +249,7 @@ public class ActivationRange } // Paper end } diff --git a/patches/server/0265-Remove-Mojang-Profiler.patch b/patches/server/0265-Remove-Mojang-Profiler.patch index 5071ad143..6c0ccc4fb 100644 --- a/patches/server/0265-Remove-Mojang-Profiler.patch +++ b/patches/server/0265-Remove-Mojang-Profiler.patch @@ -89,10 +89,10 @@ index 821dc4aeaf48460000682604fba51b340b9738e7..3aa2ce6a2a3d3cdfc372a60419a09f49 } diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 1169088d9aa970e834ddfb43bf3be35ead16f96e..9424b1383681b9f875af1a4245a58b8fd7811642 100644 +index 22659bfb081a022ed0f7ffb67293e3584ba7fff4..101c57df8b77827b78dd5423715f784da645b38e 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -344,13 +344,13 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 0 && this.tickCount % autosavePeriod == 0; try { this.isSaving = true; -@@ -1570,7 +1570,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 0; // Paper - Add EntityMoveEvent worldserver.hasRidableMoveEvent = org.purpurmc.purpur.event.entity.RidableMoveEvent.getHandlerList().getRegisteredListeners().length > 0; // Purpur @@ -244,7 +244,7 @@ index 1169088d9aa970e834ddfb43bf3be35ead16f96e..9424b1383681b9f875af1a4245a58b8f try { //worldserver.timings.doTick.startTiming(); // Spigot // Purpur -@@ -1757,17 +1757,17 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop { this.executeBlocking(() -> { this.saveDebugReport(path.resolve("server")); -@@ -2724,40 +2724,40 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop loadedChunkMap = new it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap<>(8192, 0.5f); - - private final LevelChunk[] lastLoadedChunks = new LevelChunk[4 * 4]; -- -+ - public boolean firstRunSpawnCounts = true; // Pufferfish - public final java.util.concurrent.atomic.AtomicBoolean _pufferfish_spawnCountsReady = new java.util.concurrent.atomic.AtomicBoolean(false); // Pufferfish - optimize countmobs - -@@ -277,16 +277,16 @@ public class ServerChunkCache extends ChunkSource { +@@ -264,16 +264,16 @@ public class ServerChunkCache extends ChunkSource { return ifLoaded; } // Paper end - Perf: Optimise getChunkAt calls for loaded chunks @@ -509,7 +500,7 @@ index e828f3d14af21318a716b9eba4b9bf80e377b073..a5067485fb6683e3255681a9c5a6df86 CompletableFuture> completablefuture = this.getChunkFutureMainThread(x, z, leastStatus, create, true); // Paper ServerChunkCache.MainThreadExecutor chunkproviderserver_b = this.mainThreadProcessor; -@@ -482,24 +482,24 @@ public class ServerChunkCache extends ChunkSource { +@@ -467,24 +467,24 @@ public class ServerChunkCache extends ChunkSource { // CraftBukkit start - modelled on below public void purgeUnload() { if (true) return; // Paper - tickets will be removed later, this behavior isn't really well accounted for by the chunk system @@ -539,7 +530,7 @@ index e828f3d14af21318a716b9eba4b9bf80e377b073..a5067485fb6683e3255681a9c5a6df86 if (tickChunks) { //this.level.timings.chunks.startTiming(); // Paper - timings // Purpur this.chunkMap.level.playerChunkLoader.tick(); // Paper - replace player chunk loader - this is mostly required to account for view distance changes -@@ -509,10 +509,10 @@ public class ServerChunkCache extends ChunkSource { +@@ -494,10 +494,10 @@ public class ServerChunkCache extends ChunkSource { } //this.level.timings.doChunkUnload.startTiming(); // Spigot // Purpur @@ -552,7 +543,7 @@ index e828f3d14af21318a716b9eba4b9bf80e377b073..a5067485fb6683e3255681a9c5a6df86 this.clearCache(); } -@@ -522,10 +522,10 @@ public class ServerChunkCache extends ChunkSource { +@@ -507,10 +507,10 @@ public class ServerChunkCache extends ChunkSource { this.lastInhabitedUpdate = i; if (!this.level.isDebug()) { @@ -566,7 +557,7 @@ index e828f3d14af21318a716b9eba4b9bf80e377b073..a5067485fb6683e3255681a9c5a6df86 // Paper - optimise chunk tick iteration //if (this.level.getServer().tickRateManager().runsNormally()) this.level.timings.chunkTicks.startTiming(); // Paper // Purpur -@@ -533,7 +533,7 @@ public class ServerChunkCache extends ChunkSource { +@@ -518,7 +518,7 @@ public class ServerChunkCache extends ChunkSource { this.level.resetIceAndSnowTick(); // Pufferfish - reset ice & snow tick random if (this.level.getServer().tickRateManager().runsNormally()) { @@ -575,7 +566,7 @@ index e828f3d14af21318a716b9eba4b9bf80e377b073..a5067485fb6683e3255681a9c5a6df86 //this.level.timings.countNaturalMobs.startTiming(); // Paper - timings // Purpur int k = this.distanceManager.getNaturalSpawnChunkCount(); // Paper start - Optional per player mob spawns -@@ -567,7 +567,7 @@ public class ServerChunkCache extends ChunkSource { +@@ -552,7 +552,7 @@ public class ServerChunkCache extends ChunkSource { // this.level.timings.countNaturalMobs.stopTiming(); // Paper - timings // Purpur // this.lastSpawnState = spawnercreature_d; // Pufferfish - this is managed asynchronously @@ -584,7 +575,7 @@ index e828f3d14af21318a716b9eba4b9bf80e377b073..a5067485fb6683e3255681a9c5a6df86 boolean flag = this.level.getGameRules().getBoolean(GameRules.RULE_DOMOBSPAWNING) && !this.level.players().isEmpty(); // CraftBukkit // Paper start - optimise chunk tick iteration -@@ -675,7 +675,7 @@ public class ServerChunkCache extends ChunkSource { +@@ -660,7 +660,7 @@ public class ServerChunkCache extends ChunkSource { // Paper end - optimise chunk tick iteration // this.level.timings.chunkTicks.stopTiming(); // Paper // Purpur @@ -593,7 +584,7 @@ index e828f3d14af21318a716b9eba4b9bf80e377b073..a5067485fb6683e3255681a9c5a6df86 if (flag) { //try (co.aikar.timings.Timing ignored = this.level.timings.miscMobSpawning.startTiming()) { // Paper - timings // Purpur this.level.tickCustomSpawners(this.spawnEnemies, this.spawnFriendlies); -@@ -683,7 +683,7 @@ public class ServerChunkCache extends ChunkSource { +@@ -668,7 +668,7 @@ public class ServerChunkCache extends ChunkSource { } } @@ -602,7 +593,7 @@ index e828f3d14af21318a716b9eba4b9bf80e377b073..a5067485fb6683e3255681a9c5a6df86 // Paper - optimise chunk tick iteration //this.level.timings.broadcastChunkUpdates.startTiming(); // Paper - timing // Purpur // Paper start - optimise chunk tick iteration -@@ -701,10 +701,10 @@ public class ServerChunkCache extends ChunkSource { +@@ -686,8 +686,8 @@ public class ServerChunkCache extends ChunkSource { // Paper end - optimise chunk tick iteration //this.level.timings.broadcastChunkUpdates.stopTiming(); // Paper - timing // Purpur // Paper - optimise chunk tick iteration @@ -611,12 +602,9 @@ index e828f3d14af21318a716b9eba4b9bf80e377b073..a5067485fb6683e3255681a9c5a6df86 + //gameprofilerfiller.pop(); // Purpur + //gameprofilerfiller.pop(); // Purpur } -- -+ + // Pufferfish start - optimize mob spawning - if (gg.pufferfish.pufferfish.PufferfishConfig.enableAsyncMobSpawning) { - for (ServerPlayer player : this.level.players) { -@@ -908,7 +908,7 @@ public class ServerChunkCache extends ChunkSource { +@@ -893,7 +893,7 @@ public class ServerChunkCache extends ChunkSource { @Override protected void doRunTask(Runnable task) { @@ -626,7 +614,7 @@ index e828f3d14af21318a716b9eba4b9bf80e377b073..a5067485fb6683e3255681a9c5a6df86 } diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 11a457103c59d230617e404b5523691ea493da96..587899c4fc3257436f05d08b548016d216d32774 100644 +index b4b256721b7a5d25deec717123501a163fcfd8fe..75b3de5c1e26815aa04dba3f09f2ef7807767154 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java @@ -824,16 +824,16 @@ public class ServerLevel extends Level implements WorldGenLevel { @@ -768,7 +756,7 @@ index 11a457103c59d230617e404b5523691ea493da96..587899c4fc3257436f05d08b548016d2 + //gameprofilerfiller.push("thunder"); // Purpur final BlockPos.MutableBlockPos blockposition = this.chunkTickMutablePosition; // Paper - use mutable to reduce allocation rate, final to force compile fail on change - if (!this.paperConfig().environment.disableThunder && flag && this.isThundering() && this.spigotConfig.thunderChance > 0 && /*this.random.nextInt(this.spigotConfig.thunderChance) == 0 &&*/ chunk.shouldDoLightning(this.random)) { // Spigot // Paper - disable thunder // Pufferfish - replace random with shouldDoLightning + if (!this.paperConfig().environment.disableThunder && flag && this.isThundering() && this.spigotConfig.thunderChance > 0 && /*this.random.nextInt(this.spigotConfig.thunderChance) == 0 &&*/ chunk.shouldDoLightning(this.random)) { // Spigot // Paper - Option to disable thunder // Pufferfish - replace random with shouldDoLightning @@ -1085,7 +1084,7 @@ public class ServerLevel extends Level implements WorldGenLevel { } } @@ -776,11 +764,11 @@ index 11a457103c59d230617e404b5523691ea493da96..587899c4fc3257436f05d08b548016d2 - gameprofilerfiller.popPush("iceandsnow"); + //gameprofilerfiller.popPush("iceandsnow"); // Purpur - if (!this.paperConfig().environment.disableIceAndSnow) { // Paper + if (!this.paperConfig().environment.disableIceAndSnow) { // Paper - Option to disable ice and snow for (int l = 0; l < randomTickSpeed; ++l) { @@ -1098,7 +1097,7 @@ public class ServerLevel extends Level implements WorldGenLevel { } - } // Paper + } // Paper - Option to disable ice and snow - gameprofilerfiller.popPush("tickBlocks"); + //gameprofilerfiller.popPush("tickBlocks"); // Purpur @@ -848,7 +836,7 @@ index 11a457103c59d230617e404b5523691ea493da96..587899c4fc3257436f05d08b548016d2 while (iterator.hasNext()) { diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 161e24ca04c0aae21ee34e79baca6af0a356185a..52be525a4fdaa7d222ba5ab4a6a8d6ccf938a7b1 100644 +index 620b7937b03ba178b3fc70b542962b12ce0d3bac..a3b3d85ff56a050219d2997955d088724132e988 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java @@ -1240,7 +1240,7 @@ public class ServerPlayer extends Player { @@ -1107,7 +1095,7 @@ index 2e6e8eac987c4ef6b2dcd3de592d8a51d2b29792..863343a87fe34d72f04af89d75268b47 }; } diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index d3134fe3c14a4fe153cea6b17a3764bfc891620a..dfc36d46bc6b5a4fc5d48f54ddc9114161128c5a 100644 +index e0929385a6b218ea654f552bed531f116d629274..b60796b736d2992a192b58b98a2becbf9f5ac9d1 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java @@ -851,7 +851,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S @@ -1128,7 +1116,7 @@ index d3134fe3c14a4fe153cea6b17a3764bfc891620a..dfc36d46bc6b5a4fc5d48f54ddc91141 } public void setSharedFlagOnFire(boolean onFire) { -@@ -1131,7 +1131,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -1132,7 +1132,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S } } @@ -1137,7 +1125,7 @@ index d3134fe3c14a4fe153cea6b17a3764bfc891620a..dfc36d46bc6b5a4fc5d48f54ddc91141 if (this.stuckSpeedMultiplier.lengthSqr() > 1.0E-7D) { movement = movement.multiply(this.stuckSpeedMultiplier); this.stuckSpeedMultiplier = Vec3.ZERO; -@@ -1140,7 +1140,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -1141,7 +1141,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S // Paper start - ignore movement changes while inactive. if (isTemporarilyActive && !(this instanceof ItemEntity || this instanceof net.minecraft.world.entity.vehicle.AbstractMinecart) && movement == getDeltaMovement() && movementType == MoverType.SELF) { setDeltaMovement(Vec3.ZERO); @@ -1146,7 +1134,7 @@ index d3134fe3c14a4fe153cea6b17a3764bfc891620a..dfc36d46bc6b5a4fc5d48f54ddc91141 return; } // Paper end -@@ -1161,8 +1161,8 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -1162,8 +1162,8 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S this.setPos(this.getX() + vec3d1.x, this.getY() + vec3d1.y, this.getZ() + vec3d1.z); } @@ -1157,7 +1145,7 @@ index d3134fe3c14a4fe153cea6b17a3764bfc891620a..dfc36d46bc6b5a4fc5d48f54ddc91141 boolean flag = !Mth.equal(movement.x, vec3d1.x); boolean flag1 = !Mth.equal(movement.z, vec3d1.z); -@@ -1181,7 +1181,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -1182,7 +1182,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S this.checkFallDamage(vec3d1.y, this.onGround(), iblockdata, blockposition); if (this.isRemoved()) { @@ -1166,7 +1154,7 @@ index d3134fe3c14a4fe153cea6b17a3764bfc891620a..dfc36d46bc6b5a4fc5d48f54ddc91141 } else { if (this.horizontalCollision) { Vec3 vec3d2 = this.getDeltaMovement(); -@@ -1319,7 +1319,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -1320,7 +1320,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S this.setRemainingFireTicks(-this.getFireImmuneTicks()); } @@ -1175,7 +1163,7 @@ index d3134fe3c14a4fe153cea6b17a3764bfc891620a..dfc36d46bc6b5a4fc5d48f54ddc91141 } } // Paper start - detailed watchdog information -@@ -3190,7 +3190,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -3188,7 +3188,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S ServerLevel worldserver1 = minecraftserver.getLevel(resourcekey); if (true && !this.isPassenger() && this.portalTime++ >= i) { // CraftBukkit @@ -1184,7 +1172,7 @@ index d3134fe3c14a4fe153cea6b17a3764bfc891620a..dfc36d46bc6b5a4fc5d48f54ddc91141 this.portalTime = i; // Paper start - Add EntityPortalReadyEvent io.papermc.paper.event.entity.EntityPortalReadyEvent event = new io.papermc.paper.event.entity.EntityPortalReadyEvent(this.getBukkitEntity(), worldserver1 == null ? null : worldserver1.getWorld(), org.bukkit.PortalType.NETHER); -@@ -3208,7 +3208,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -3206,7 +3206,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S } } // Paper - Add EntityPortalReadyEvent // CraftBukkit end @@ -1193,7 +1181,7 @@ index d3134fe3c14a4fe153cea6b17a3764bfc891620a..dfc36d46bc6b5a4fc5d48f54ddc91141 } this.isInsidePortal = false; -@@ -3683,14 +3683,14 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -3681,14 +3681,14 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S } // Paper end - Fix item duplication and teleport issues if (this.level() instanceof ServerLevel && !this.isRemoved()) { @@ -1210,7 +1198,7 @@ index d3134fe3c14a4fe153cea6b17a3764bfc891620a..dfc36d46bc6b5a4fc5d48f54ddc91141 PortalInfo shapedetectorshape = (location == null) ? this.findDimensionEntryPoint(worldserver) : new PortalInfo(new Vec3(location.x(), location.y(), location.z()), Vec3.ZERO, this.yRot, this.xRot, worldserver, null); // CraftBukkit if (shapedetectorshape == null) { -@@ -3729,7 +3729,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -3727,7 +3727,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S this.unRide(); // CraftBukkit end @@ -1219,7 +1207,7 @@ index d3134fe3c14a4fe153cea6b17a3764bfc891620a..dfc36d46bc6b5a4fc5d48f54ddc91141 // Paper start - Fix item duplication and teleport issues if (this instanceof Mob) { ((Mob) this).dropLeash(true, true); // Paper drop lead -@@ -3756,10 +3756,10 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -3754,10 +3754,10 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S } this.removeAfterChangingDimensions(); @@ -1233,7 +1221,7 @@ index d3134fe3c14a4fe153cea6b17a3764bfc891620a..dfc36d46bc6b5a4fc5d48f54ddc91141 } } else { diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index fae05c2ca9f1cf090de3f162c7067b0ccfbaec14..18ab2de61fe749e82c8eec328d2696214339bd19 100644 +index 87c4e2ef041238f84a00f2b032ed10c3f250eb0d..66abff00db43413b07d51d48654eab7be821bc93 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java @@ -409,7 +409,7 @@ public abstract class LivingEntity extends Entity implements Attackable { @@ -1344,7 +1332,7 @@ index fae05c2ca9f1cf090de3f162c7067b0ccfbaec14..18ab2de61fe749e82c8eec328d269621 // Purpur start if (this.xo != this.getX() || this.yo != this.getY() || this.zo != this.getZ() || this.yRotO != this.getYRot() || this.xRotO != this.getXRot()) { diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java -index 9e5b7702780709b59f0f302a5ec60e62ac13fd5c..b8948e2b8390f7b670766d2453a01483c32d854c 100644 +index 2cf0d698b341d418d0ac4760f95e3ea52c193098..11062e250657cb839ca046d6c224647915d3ee7b 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java @@ -367,13 +367,13 @@ public abstract class Mob extends LivingEntity implements Targeting { @@ -1384,7 +1372,7 @@ index 9e5b7702780709b59f0f302a5ec60e62ac13fd5c..b8948e2b8390f7b670766d2453a01483 @@ -936,46 +936,46 @@ public abstract class Mob extends LivingEntity implements Targeting { return; } - // Paper end + // Paper end - Allow nerfed mobs to jump and float - this.level().getProfiler().push("sensing"); + //this.level().getProfiler().push("sensing"); // Purpur this.sensing.tick(); @@ -1449,7 +1437,7 @@ index 9e5b7702780709b59f0f302a5ec60e62ac13fd5c..b8948e2b8390f7b670766d2453a01483 } diff --git a/src/main/java/net/minecraft/world/entity/ai/goal/GoalSelector.java b/src/main/java/net/minecraft/world/entity/ai/goal/GoalSelector.java -index 1635818fc4b1788c0d397085239df6dd75b210ab..02978315bc2b828cc603ce7478408f3f82c249c2 100644 +index 2d63ee8fef87264d4b61290effa6ba86a787aa61..bb068bffc9e2f035dee90276156129ce750a7cd7 100644 --- a/src/main/java/net/minecraft/world/entity/ai/goal/GoalSelector.java +++ b/src/main/java/net/minecraft/world/entity/ai/goal/GoalSelector.java @@ -105,8 +105,8 @@ public class GoalSelector { @@ -1501,13 +1489,13 @@ index 1635818fc4b1788c0d397085239df6dd75b210ab..02978315bc2b828cc603ce7478408f3f public Set getAvailableGoals() { diff --git a/src/main/java/net/minecraft/world/entity/ai/navigation/PathNavigation.java b/src/main/java/net/minecraft/world/entity/ai/navigation/PathNavigation.java -index a9922074b6aa6a9898615385bb11d2a758662970..9ffbe784a0d45b494f29ab1555841b4be9f58128 100644 +index a04fb58c29b462e20ed0b702cef478e3985b7cd2..43699f94dd0fd97513242fcdbc4ec4d0dc260f8e 100644 --- a/src/main/java/net/minecraft/world/entity/ai/navigation/PathNavigation.java +++ b/src/main/java/net/minecraft/world/entity/ai/navigation/PathNavigation.java -@@ -172,12 +172,12 @@ public abstract class PathNavigation { +@@ -173,12 +173,12 @@ public abstract class PathNavigation { } } - // Paper end + // Paper end - EntityPathfindEvent - this.level.getProfiler().push("pathfind"); + //this.level.getProfiler().push("pathfind"); // Purpur BlockPos blockPos = useHeadPos ? this.mob.blockPosition().above() : this.mob.blockPosition(); @@ -1811,7 +1799,7 @@ index ceda40e0246830155d13f36073b0ba45a5146de6..795a91cf05dc4f5fba84eaa501e8163f this.assignProfessionWhenSpawned = false; } diff --git a/src/main/java/net/minecraft/world/level/Explosion.java b/src/main/java/net/minecraft/world/level/Explosion.java -index 1fa02130dcb65b3109fde0cb612b538b1c4cd4cb..353ee2d2ea86ba98052acb2edb5d0b3d9393f3ca 100644 +index 28ef910885dbd48965fba6f08cec412697b1b7f0..02dae407069a0200e271cc9c6f3ec6ff80f79025 100644 --- a/src/main/java/net/minecraft/world/level/Explosion.java +++ b/src/main/java/net/minecraft/world/level/Explosion.java @@ -659,7 +659,7 @@ public class Explosion { @@ -1833,7 +1821,7 @@ index 1fa02130dcb65b3109fde0cb612b538b1c4cd4cb..353ee2d2ea86ba98052acb2edb5d0b3d if (this.fire) { diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index 061a546ff8421d16fa37cf2337cded4bdfc943f3..2cdee8e0f0af1f8c6d8551fd5ee6f87d94de31a8 100644 +index ef8b596a02970c514fc6e5e0fb7ded76d82240ac..4779fd92a88c3d485ab3282ab63158f0894f7896 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java @@ -1314,9 +1314,9 @@ public abstract class Level implements LevelAccessor, AutoCloseable { @@ -1885,7 +1873,7 @@ index 061a546ff8421d16fa37cf2337cded4bdfc943f3..2cdee8e0f0af1f8c6d8551fd5ee6f87d } diff --git a/src/main/java/net/minecraft/world/level/NaturalSpawner.java b/src/main/java/net/minecraft/world/level/NaturalSpawner.java -index f2f778d876703c06e0d1bfd7a35adde35abe4939..edc3676c4da974be4b628e2b3baae99679e9b2c1 100644 +index 3d99667fa297ea15c5d3a0526a846ce177a5037a..a0ab8be389a175b5e6c42798650a06882a7b3886 100644 --- a/src/main/java/net/minecraft/world/level/NaturalSpawner.java +++ b/src/main/java/net/minecraft/world/level/NaturalSpawner.java @@ -132,7 +132,7 @@ public final class NaturalSpawner { @@ -1907,7 +1895,7 @@ index f2f778d876703c06e0d1bfd7a35adde35abe4939..edc3676c4da974be4b628e2b3baae996 // Paper start - Add mobcaps commands diff --git a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java -index 134d2d56af71aceb1ca33d7bb708124655c5d319..f782fee9243129d0990777dcd2d74735ceb5e64e 100644 +index 8c0df10efd59594c63cca2a1c22386acf17e5299..1b49ecbf8fdbe8b734f8ca5191dc9ed70aa66af7 100644 --- a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java +++ b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java @@ -457,11 +457,11 @@ public class LevelChunk extends ChunkAccess { @@ -1945,7 +1933,7 @@ index 134d2d56af71aceb1ca33d7bb708124655c5d319..f782fee9243129d0990777dcd2d74735 + //gameprofilerfiller.pop(); } catch (Throwable throwable) { if (throwable instanceof ThreadDeath) throw throwable; // Paper - // Paper start - Prevent tile entity and entity crashes + // Paper start - Prevent block entity and entity crashes diff --git a/src/main/java/net/minecraft/world/level/pathfinder/PathFinder.java b/src/main/java/net/minecraft/world/level/pathfinder/PathFinder.java index eb18494bd7257fa5eb00dea16cf4d5667b796f2b..f039d6109ee6f55542adc8f30476ba9a9e4974bf 100644 --- a/src/main/java/net/minecraft/world/level/pathfinder/PathFinder.java diff --git a/patches/server/0268-Debug-Marker-API.patch b/patches/server/0268-Debug-Marker-API.patch index 09a214ece..85116db93 100644 --- a/patches/server/0268-Debug-Marker-API.patch +++ b/patches/server/0268-Debug-Marker-API.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Debug Marker API diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 866d49ef3de9e9629b00b3dc0515ab089ab47908..067164b3698bcb89ae2f8d09cb7009108a999670 100644 +index 4e8ff16b5ca3cd2ddf2a44c7cd625fbf2311706d..b2d990fda0c144a837ac3c2118da15a77885edcf 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -1584,6 +1584,42 @@ public final class CraftServer implements Server { +@@ -1583,6 +1583,42 @@ public final class CraftServer implements Server { public void removeFuel(org.bukkit.Material material) { net.minecraft.world.level.block.entity.AbstractFurnaceBlockEntity.removeFuel(net.minecraft.world.item.ItemStack.fromBukkitCopy(new ItemStack(material))); } @@ -52,10 +52,10 @@ index 866d49ef3de9e9629b00b3dc0515ab089ab47908..067164b3698bcb89ae2f8d09cb700910 @Override diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -index 8af705619e8a784c6128d7ff4838eeae56e59821..f6c6cd92e1eff044abefa6ca74477d361f4434ec 100644 +index 354ef8d61668e5532f60034291bf8f0374f8ac52..7a2e6d1c4b1d553c172f7d704036e3dfb39228a7 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -@@ -2419,6 +2419,42 @@ public class CraftWorld extends CraftRegionAccessor implements World { +@@ -2377,6 +2377,42 @@ public class CraftWorld extends CraftRegionAccessor implements World { public float getLocalDifficultyAt(Location location) { return getHandle().getCurrentDifficultyAt(io.papermc.paper.util.MCUtil.toBlockPosition(location)).getEffectiveDifficulty(); } @@ -99,10 +99,10 @@ index 8af705619e8a784c6128d7ff4838eeae56e59821..f6c6cd92e1eff044abefa6ca74477d36 @Override diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 9306facdc8aa56674f896fa3ab3d2b54dc5a2f4b..e3c2279c0096976b9b8a574b731fad7bfa6f770f 100644 +index b2b000ab47897f9d8f47840ae95ef2db478f808c..b33bae43348925a0f4f9ca22839084b435e44b00 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -3425,5 +3425,43 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -3413,5 +3413,43 @@ public class CraftPlayer extends CraftHumanEntity implements Player { public void resetIdleTimer() { getHandle().resetLastActionTime(); } diff --git a/patches/server/0272-Add-death-screen-API.patch b/patches/server/0272-Add-death-screen-API.patch index 408a7f568..e7a364a3c 100644 --- a/patches/server/0272-Add-death-screen-API.patch +++ b/patches/server/0272-Add-death-screen-API.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add death screen API diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index e3c2279c0096976b9b8a574b731fad7bfa6f770f..8c90eddd40c8ab2f4d727e3c7d9b6312d57bf277 100644 +index b33bae43348925a0f4f9ca22839084b435e44b00..137595efe9e828810cf1f006027ac96606ad8821 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -3463,5 +3463,11 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -3451,5 +3451,11 @@ public class CraftPlayer extends CraftHumanEntity implements Player { if (this.getHandle().connection == null) return; this.getHandle().connection.send(new net.minecraft.network.protocol.common.ClientboundCustomPayloadPacket(new net.minecraft.network.protocol.common.custom.GameTestClearMarkersDebugPayload())); } diff --git a/patches/server/0275-Add-item-packet-serialize-event.patch b/patches/server/0275-Add-item-packet-serialize-event.patch index 92547d212..74b94d41b 100644 --- a/patches/server/0275-Add-item-packet-serialize-event.patch +++ b/patches/server/0275-Add-item-packet-serialize-event.patch @@ -36,10 +36,10 @@ index b863249ff7e13cf4939c8961601f0564c62fd661..bdcfd80f937c34956911373905d66424 this.writeId(BuiltInRegistries.ITEM, item); diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 9424b1383681b9f875af1a4245a58b8fd7811642..fb260519d6546392a3fce8fcc1f80884cce0fabe 100644 +index 101c57df8b77827b78dd5423715f784da645b38e..09a290feb90751f3630fd23346c2cc8900fc841a 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1719,6 +1719,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop this.getY() >= v) && (!(this instanceof Player player) || !player.getAbilities().invulnerable))) { - // Paper end + // Paper end - Configurable nether ceiling damage + if (this.level().purpurConfig.teleportOnNetherCeilingDamage && this.level.getWorld().getEnvironment() == org.bukkit.World.Environment.NETHER && this instanceof ServerPlayer player) player.teleport(io.papermc.paper.util.MCUtil.toLocation(this.level, this.level.getSharedSpawnPos())); else // Purpur this.onBelowWorld(); } diff --git a/patches/server/0298-Shears-can-defuse-TNT.patch b/patches/server/0298-Shears-can-defuse-TNT.patch index 258a72eb9..1ba58a570 100644 --- a/patches/server/0298-Shears-can-defuse-TNT.patch +++ b/patches/server/0298-Shears-can-defuse-TNT.patch @@ -8,13 +8,13 @@ Shears can now defuse TNT. Each world can have a configured chance for the TNT t By default the option is disabled to avoid breaking any possible vanilla mechanics. diff --git a/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java b/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java -index c3e47426382296d650fa00ce0bc1a82bf23c7877..dfc3e9d2611ce418ac6f6cc5a23bb74415007713 100644 +index cd7b955754b809826048b80723e2e9055b373a4a..b929bef749397797203eb6fb7a7e817d90ec310c 100644 --- a/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java +++ b/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java -@@ -207,4 +207,29 @@ public class PrimedTnt extends Entity implements TraceableEntity { +@@ -199,4 +199,29 @@ public class PrimedTnt extends Entity implements TraceableEntity { return !level().paperConfig().fixes.preventTntFromMovingInWater && super.isPushedByFluid(); } - // Paper end + // Paper end - Option to prevent TNT from moving in water + // Purpur start - Shears can defuse TNT + @Override + public net.minecraft.world.InteractionResult interact(net.minecraft.world.entity.player.Player player, net.minecraft.world.InteractionHand hand) {