From d801e88a2acfae26531a8fe39a62525e174f1df6 Mon Sep 17 00:00:00 2001 From: Dreeam <61569423+Dreeam-qwq@users.noreply.github.com> Date: Thu, 27 Feb 2025 06:03:30 -0500 Subject: [PATCH] Updated Upstream (Paper/Gale/Purpur) Upstream has released updates that appear to apply and compile correctly Paper Changes: PaperMC/Paper@5e2a3bc0 Call EntityChangeBlockEvent with correct block when waxing (#12154) PaperMC/Paper@ab984a07 Always pass event block to damage source (#12158) PaperMC/Paper@7b4d44f5 Revert "Always pass event block to damage source (#12158)" PaperMC/Paper@e5a8ee84 Hide soul speed particles for vanished players (#12152) PaperMC/Paper@fcb2e815 Clear lastSection on game event listener removal PaperMC/Paper@636ae0cd Add missing Paper comments to player movement patch PaperMC/Paper@9be4e07a Pin snapshot dependencies (#12185) PaperMC/Paper@f12d33f0 Track codec writing PaperMC/Paper@1d9b3994 Add config option for failed beehive release cooldowns (#12186) PaperMC/Paper@5f2ee83e Fix first execution of async delayed/repeating tasks being sync (#12166) PaperMC/Paper@b00875f8 Add a method on Registry to get the size (#12182) PaperMC/Paper@ca261090 Don't process empty rcon commands (#12188) PaperMC/Paper@a501c459 Deprecate server config getters (#12189) PaperMC/Paper@7f3d3591 Use MiniMessage#deserialize(String, Pointered) in sendRichMessage for send messages (#12177) PaperMC/Paper@9b9f046f Remove broken code (#12171) PaperMC/Paper@fc56c728 Add methods for Creaking (#12094) PaperMC/Paper@f63dbeaf Fix cancelled HangingPlaceEvent inventory desync (#12161) PaperMC/Paper@9421f223 Make CustomArgumentType use parse(reader,source) (#12191) PaperMC/Paper@0a6e7435 Fix invulnerability damage and armour (#12190) Gale Changes: Dreeam-qwq/Gale@b2c11564 Updated Upstream (Paper) Dreeam-qwq/Gale@a9e4baae Updated Upstream (Paper) Dreeam-qwq/Gale@32a291bc [ci/skip] Update comment Purpur Changes: PurpurMC/Purpur@62cbd47a Updated Upstream (Paper) PurpurMC/Purpur@d41aaca1 Updated Upstream (Paper) PurpurMC/Purpur@3f8e6134 Fix EntityTameEvent not being called when `always-tame-in-creative` option is enabled (#1645) PurpurMC/Purpur@b34d675f fix `zombie_horse.spawn-chance` option not working --- gradle.properties | 2 +- .../features/0002-Leaf-config.patch | 4 +- .../features/0004-Purpur-API-Changes.patch | 20 +++--- .../features/0009-Leaves-Replay-Mod-API.patch | 8 +-- leaf-server/build.gradle.kts.patch | 21 +++---- ...0007-Purpur-Server-Minecraft-Changes.patch | 62 +++++++++---------- .../features/0025-Leaves-Replay-Mod-API.patch | 6 +- ...Configurable-chat-message-signatures.patch | 6 +- .../features/0085-Multithreaded-Tracker.patch | 6 +- ...ecessary-calculations-if-player-is-n.patch | 6 +- .../0104-Lithium-equipment-tracking.patch | 8 +-- .../features/0106-Cache-chunk-key.patch | 4 +- .../features/0120-Only-player-pushable.patch | 8 +-- .../0005-Purpur-Server-Paper-Changes.patch | 14 ++--- .../features/0011-Leaves-Replay-Mod-API.patch | 4 +- .../0015-Including-5s-in-getTPS.patch | 4 +- 16 files changed, 88 insertions(+), 95 deletions(-) diff --git a/gradle.properties b/gradle.properties index 9b106683..a2870135 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ group=cn.dreeam.leaf mcVersion=1.21.4 version=1.21.4-R0.1-SNAPSHOT -galeCommit=0b5fbea3d4797d2a189fe3790105f5ce613ee93c +galeCommit=32a291bcd732b610c22322c97c467cc069940091 org.gradle.configuration-cache=true org.gradle.caching=true diff --git a/leaf-api/paper-patches/features/0002-Leaf-config.patch b/leaf-api/paper-patches/features/0002-Leaf-config.patch index d23186e2..14e745f9 100644 --- a/leaf-api/paper-patches/features/0002-Leaf-config.patch +++ b/leaf-api/paper-patches/features/0002-Leaf-config.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Leaf config diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java -index f7cbfdfca459f9b42ec6bd7ae1b412ce2757c2fe..84b5626a0ccd4fd1976f28eeb2ae99acdb62afa8 100644 +index 3446d5bb24fac345b65ac78927155f60fe437b2c..0f4bc6a5b87a72f521f6ca04cfe14147b4e35fe4 100644 --- a/src/main/java/org/bukkit/Server.java +++ b/src/main/java/org/bukkit/Server.java -@@ -2386,6 +2386,14 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi +@@ -2414,6 +2414,14 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi // Paper end diff --git a/leaf-api/paper-patches/features/0004-Purpur-API-Changes.patch b/leaf-api/paper-patches/features/0004-Purpur-API-Changes.patch index 88290a98..f32e6dc3 100644 --- a/leaf-api/paper-patches/features/0004-Purpur-API-Changes.patch +++ b/leaf-api/paper-patches/features/0004-Purpur-API-Changes.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Purpur API Changes Original license: MIT Original project: https://github.com/PurpurMC/Purpur -Commit: 196c1768e1cfa467b82acf260156892784c84578 +Commit: b34d675fef91bae2df723705f2568c7afd552d2d Patches listed below are removed in this patch, They exists in Gale or Leaf: * "co/aikar/timings/TimedEventExecutor.java.patch" @@ -70,12 +70,12 @@ index 6b2f6ab137ae37ff0db4827886614436b7ed5dcb..66a9fc729182476c4f601cdb32bcb109 /** * The brand id for Pufferfish. diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java -index 4d0ec80ace15ab46e888a3f6e7452842bda8c60c..7ce5e34bfb3d8db97b32e9f8ec010e4ff088be65 100644 +index e4db2817be2411116ff29cc85ce97e515eb6e51f..0825a913b4f7d5e81d485df6415ab68a4e1530ce 100644 --- a/src/main/java/org/bukkit/Bukkit.java +++ b/src/main/java/org/bukkit/Bukkit.java -@@ -3050,4 +3050,133 @@ public final class Bukkit { - public static Server.Spigot spigot() { - return server.spigot(); +@@ -3061,4 +3061,133 @@ public final class Bukkit { + public static void restart() { + server.restart(); } + + // Purpur start - Bring back server name @@ -444,10 +444,10 @@ index ed8e11001c8d3c475dc851aedf6e6812a872dc54..c597c298795fb9893447bc822d941c17 + // Purpur end - OfflinePlayer API } diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java -index 84b5626a0ccd4fd1976f28eeb2ae99acdb62afa8..13346dfe2a6d848cf63cbba95d8dea8dfdddf905 100644 +index 0f4bc6a5b87a72f521f6ca04cfe14147b4e35fe4..42bc72411462f3699a7a60f987eeca6046f4cf75 100644 --- a/src/main/java/org/bukkit/Server.java +++ b/src/main/java/org/bukkit/Server.java -@@ -2386,6 +2386,18 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi +@@ -2414,6 +2414,18 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi // Paper end @@ -466,7 +466,7 @@ index 84b5626a0ccd4fd1976f28eeb2ae99acdb62afa8..13346dfe2a6d848cf63cbba95d8dea8d // Leaf start - Leaf config - API @NotNull public org.bukkit.configuration.file.YamlConfiguration getLeafConfig() -@@ -2743,4 +2755,111 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi +@@ -2783,4 +2795,111 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi */ long getLastTickOversleepTime(); // Gale end - YAPFA - last tick time - API @@ -958,10 +958,10 @@ index bcc6ba95bd21c7972865838c636a03f50b6c1f1a..c3fcd8dd7dbb1e1a18e17c014c1e6411 + // Purpur end } diff --git a/src/main/java/org/bukkit/entity/LivingEntity.java b/src/main/java/org/bukkit/entity/LivingEntity.java -index d21a228bbec0302e75c4db5aa1db54f321143587..a4acc3578e935cd1174474bd1f6ff14db4294fe7 100644 +index 5c1a368194d9e560784391205268641938ad06f1..a04b6603a64cd6bf1049fd684407dcf9d9d7b5e9 100644 --- a/src/main/java/org/bukkit/entity/LivingEntity.java +++ b/src/main/java/org/bukkit/entity/LivingEntity.java -@@ -1468,4 +1468,20 @@ public interface LivingEntity extends Attributable, Damageable, ProjectileSource +@@ -1476,4 +1476,20 @@ public interface LivingEntity extends Attributable, Damageable, ProjectileSource */ boolean canUseEquipmentSlot(org.bukkit.inventory.@NotNull EquipmentSlot slot); // Paper end - Expose canUseSlot diff --git a/leaf-api/paper-patches/features/0009-Leaves-Replay-Mod-API.patch b/leaf-api/paper-patches/features/0009-Leaves-Replay-Mod-API.patch index fe280ccd..e0679329 100644 --- a/leaf-api/paper-patches/features/0009-Leaves-Replay-Mod-API.patch +++ b/leaf-api/paper-patches/features/0009-Leaves-Replay-Mod-API.patch @@ -11,10 +11,10 @@ Original project: https://github.com/LeavesMC/Leaves This patch is Powered by ReplayMod(https://github.com/ReplayMod) diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java -index 7ce5e34bfb3d8db97b32e9f8ec010e4ff088be65..f044efd4426e528dd1a2932dedabc54291b0c336 100644 +index 0825a913b4f7d5e81d485df6415ab68a4e1530ce..f40e06c63a82dbbd6bbcadf2a71b7d2825f2b3a9 100644 --- a/src/main/java/org/bukkit/Bukkit.java +++ b/src/main/java/org/bukkit/Bukkit.java -@@ -3179,4 +3179,10 @@ public final class Bukkit { +@@ -3190,4 +3190,10 @@ public final class Bukkit { server.clearBlockHighlights(); } // Purpur end - Debug Marker API @@ -26,10 +26,10 @@ index 7ce5e34bfb3d8db97b32e9f8ec010e4ff088be65..f044efd4426e528dd1a2932dedabc542 + // Leaves end - Photographer API } diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java -index 13346dfe2a6d848cf63cbba95d8dea8dfdddf905..eddcbd7bdf8d86ee07cb7a95e8c043c4abba8344 100644 +index 42bc72411462f3699a7a60f987eeca6046f4cf75..b4ef18cac662c089ac975a0fae0df93e692fc9bc 100644 --- a/src/main/java/org/bukkit/Server.java +++ b/src/main/java/org/bukkit/Server.java -@@ -2862,4 +2862,8 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi +@@ -2902,4 +2902,8 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi */ void clearBlockHighlights(); // Purpur end - Debug Marker API diff --git a/leaf-server/build.gradle.kts.patch b/leaf-server/build.gradle.kts.patch index ff3cbaa9..96109c83 100644 --- a/leaf-server/build.gradle.kts.patch +++ b/leaf-server/build.gradle.kts.patch @@ -92,7 +92,7 @@ implementation("net.minecrell:terminalconsoleappender:1.3.0") implementation("net.kyori:adventure-text-serializer-ansi:4.18.0") // Keep in sync with adventureVersion from Paper-API build file -@@ -160,35 +_,49 @@ +@@ -160,36 +_,50 @@ all its classes to check if they are plugins. Scanning takes about 1-2 seconds so adding this speeds up the server start. */ @@ -105,7 +105,7 @@ runtimeOnly(log4jPlugins.output) alsoShade(log4jPlugins.output) - implementation("com.velocitypowered:velocity-native:3.4.0-SNAPSHOT") { + implementation("com.velocitypowered:velocity-native:3.4.0-20250222.161222-36") { isTransitive = false } - implementation("io.netty:netty-codec-haproxy:4.1.115.Final") // Add support for proxy protocol @@ -115,7 +115,8 @@ + implementation("org.apache.logging.log4j:log4j-iostreams:2.24.3") + // Leaf end - Bump Dependencies implementation("org.ow2.asm:asm-commons:9.7.1") - implementation("org.spongepowered:configurate-yaml:4.2.0-SNAPSHOT") + implementation("org.spongepowered:configurate-yaml:4.2.0-20250225.064233-199") + implementation("org.spongepowered:configurate-core:4.2.0-20250225.064233-204") // Pinned dependency of above pinned yaml snapshot. implementation("commons-lang:commons-lang:2.6") - runtimeOnly("org.xerial:sqlite-jdbc:3.47.0.0") + runtimeOnly("org.xerial:sqlite-jdbc:3.47.2.0") // Leaf - Bump Dependencies @@ -160,24 +161,16 @@ implementation("net.neoforged:srgutils:1.0.9") // Mappings handling implementation("net.neoforged:AutoRenamingTool:2.0.3") // Remap plugins -@@ -202,6 +_,8 @@ +@@ -203,6 +_,8 @@ // Spark implementation("me.lucko:spark-api:0.1-20240720.200737-2") - implementation("me.lucko:spark-paper:1.10.119-SNAPSHOT") + implementation("me.lucko:spark-paper:1.10.119-20241121.092015-1") + + implementation("io.netty:netty-all:4.1.116.Final") // Leaf - Bump Dependencies // Dreeam TODO - Update to 4.2.0 } // Gale start - hide irrelevant compilation warnings -@@ -219,21 +_,21 @@ - val git = Git(rootProject.layout.projectDirectory.path) - val mcVersion = rootProject.providers.gradleProperty("mcVersion").get() - val build = System.getenv("BUILD_NUMBER") ?: null -- val buildTime = Instant.now() // Gale - branding changes - we don't have ci yet -+ val buildTime = Instant.now() // Leaf - Rebrand - Always use current for build time - val gitHash = git.exec(providers, "rev-parse", "--short=7", "HEAD").get().trim() - val implementationVersion = "$mcVersion-${build ?: "DEV"}-$gitHash" - val date = git.exec(providers, "show", "-s", "--format=%ci", gitHash).get().trim() +@@ -227,14 +_,14 @@ val gitBranch = git.exec(providers, "rev-parse", "--abbrev-ref", "HEAD").get().trim() attributes( "Main-Class" to "org.bukkit.craftbukkit.Main", diff --git a/leaf-server/minecraft-patches/features/0007-Purpur-Server-Minecraft-Changes.patch b/leaf-server/minecraft-patches/features/0007-Purpur-Server-Minecraft-Changes.patch index 28517049..77c9a8fa 100644 --- a/leaf-server/minecraft-patches/features/0007-Purpur-Server-Minecraft-Changes.patch +++ b/leaf-server/minecraft-patches/features/0007-Purpur-Server-Minecraft-Changes.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Purpur Server Minecraft Changes Original license: MIT Original project: https://github.com/PurpurMC/Purpur -Commit: 196c1768e1cfa467b82acf260156892784c84578 +Commit: b34d675fef91bae2df723705f2568c7afd552d2d Patches listed below are removed in this patch, They exists in Gale or Leaf: * "net/minecraft/CrashReport.java.patch" @@ -490,7 +490,7 @@ index 8b7af734ca4ed3cafa810460b2cea6c1e6342a69..c394e4ea9b066895a8ad370615383a4a ItemEntity itemEntity = serverPlayer.drop(itemStack, false, false, false); // CraftBukkit - SPIGOT-2942: Add boolean to call event if (itemEntity != null) { diff --git a/net/minecraft/server/dedicated/DedicatedServer.java b/net/minecraft/server/dedicated/DedicatedServer.java -index 1e32d308c42194b0ae0a07e5baf12dfa43846ffe..4027873ebfb71d73d9c6c9d00602f11ac5cbc78c 100644 +index 649403ef1d5d898052412d6d47783769f291b94f..5151c24697ceb01b4728d7d3fda5fee31db682d7 100644 --- a/net/minecraft/server/dedicated/DedicatedServer.java +++ b/net/minecraft/server/dedicated/DedicatedServer.java @@ -106,6 +106,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface @@ -724,7 +724,7 @@ index f262a7c5ae4e7d56f16f5c0f4f145a2e428abbe4..614c7d9f673c926562acc8fa3b378862 private JComponent buildOnboardingPanel() { String onboardingLink = "https://docs.papermc.io/paper/next-steps"; diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java -index b69a1a5a81cb0a8d4d01c8ab1de039e46f3426f6..a1cbdab00636ee08ffad5726a7750e31d75ed44d 100644 +index b69a1a5a81cb0a8d4d01c8ab1de039e46f3426f6..e3f8a469042636e4e49456d3bff862384d8ea1b8 100644 --- a/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java @@ -205,6 +205,8 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe @@ -824,27 +824,27 @@ index b69a1a5a81cb0a8d4d01c8ab1de039e46f3426f6..a1cbdab00636ee08ffad5726a7750e31 public void tickCustomSpawners(boolean spawnEnemies, boolean spawnFriendlies) { for (CustomSpawner customSpawner : this.customSpawners) { customSpawner.tick(this, spawnEnemies, spawnFriendlies); -@@ -919,9 +961,18 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -919,9 +961,17 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe && this.random.nextDouble() < currentDifficultyAt.getEffectiveDifficulty() * this.paperConfig().entities.spawning.skeletonHorseThunderSpawnChance.or(0.01) // Paper - Configurable spawn chances for skeleton horses && !this.getBlockState(blockPos.below()).is(Blocks.LIGHTNING_ROD); if (flag) { +- SkeletonHorse skeletonHorse = EntityType.SKELETON_HORSE.create(this, EntitySpawnReason.EVENT); + // Purpur start - Special mobs naturally spawn -+ net.minecraft.world.entity.animal.horse.AbstractHorse entityhorseskeleton; ++ net.minecraft.world.entity.animal.horse.AbstractHorse skeletonHorse; + if (purpurConfig.zombieHorseSpawnChance > 0D && random.nextDouble() <= purpurConfig.zombieHorseSpawnChance) { -+ entityhorseskeleton = EntityType.ZOMBIE_HORSE.create(this, EntitySpawnReason.EVENT); ++ skeletonHorse = EntityType.ZOMBIE_HORSE.create(this, EntitySpawnReason.EVENT); + } else { -+ entityhorseskeleton = EntityType.SKELETON_HORSE.create(this, EntitySpawnReason.EVENT); -+ if (entityhorseskeleton != null) ((SkeletonHorse) entityhorseskeleton).setTrap(true); ++ skeletonHorse = EntityType.SKELETON_HORSE.create(this, EntitySpawnReason.EVENT); ++ if (skeletonHorse != null) ((SkeletonHorse) skeletonHorse).setTrap(true); + } + // Purpur end - Special mobs naturally spawn - SkeletonHorse skeletonHorse = EntityType.SKELETON_HORSE.create(this, EntitySpawnReason.EVENT); if (skeletonHorse != null) { - skeletonHorse.setTrap(true); + //skeletonHorse.setTrap(true); // Purpur - Special mobs naturally spawn - moved up skeletonHorse.setAge(0); skeletonHorse.setPos(blockPos.getX(), blockPos.getY(), blockPos.getZ()); this.addFreshEntity(skeletonHorse, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.LIGHTNING); // CraftBukkit -@@ -989,7 +1040,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -989,7 +1039,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe pointOfInterestType -> pointOfInterestType.is(PoiTypes.LIGHTNING_ROD), blockPos -> blockPos.getY() == this.getHeight(Heightmap.Types.WORLD_SURFACE, blockPos.getX(), blockPos.getZ()) - 1, pos, @@ -853,7 +853,7 @@ index b69a1a5a81cb0a8d4d01c8ab1de039e46f3426f6..a1cbdab00636ee08ffad5726a7750e31 PoiManager.Occupancy.ANY ); return optional.map(blockPos -> blockPos.above(1)); -@@ -1037,8 +1088,26 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -1037,8 +1087,26 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe int _int = this.getGameRules().getInt(GameRules.RULE_PLAYERS_SLEEPING_PERCENTAGE); Component component; if (this.sleepStatus.areEnoughSleeping(_int)) { @@ -880,7 +880,7 @@ index b69a1a5a81cb0a8d4d01c8ab1de039e46f3426f6..a1cbdab00636ee08ffad5726a7750e31 component = Component.translatable("sleep.players_sleeping", this.sleepStatus.amountSleeping(), this.sleepStatus.sleepersNeeded(_int)); } -@@ -1171,6 +1240,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -1171,6 +1239,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe @VisibleForTesting public void resetWeatherCycle() { // CraftBukkit start @@ -888,7 +888,7 @@ index b69a1a5a81cb0a8d4d01c8ab1de039e46f3426f6..a1cbdab00636ee08ffad5726a7750e31 this.serverLevelData.setRaining(false, org.bukkit.event.weather.WeatherChangeEvent.Cause.SLEEP); // Paper - Add cause to Weather/ThunderChangeEvents // If we stop due to everyone sleeping we should reset the weather duration to some other random value. // Not that everyone ever manages to get the whole server to sleep at the same time.... -@@ -1178,6 +1248,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -1178,6 +1247,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe this.serverLevelData.setRainTime(0); } // CraftBukkit end @@ -896,7 +896,7 @@ index b69a1a5a81cb0a8d4d01c8ab1de039e46f3426f6..a1cbdab00636ee08ffad5726a7750e31 this.serverLevelData.setThundering(false, org.bukkit.event.weather.ThunderChangeEvent.Cause.SLEEP); // Paper - Add cause to Weather/ThunderChangeEvents // CraftBukkit start // If we stop due to everyone sleeping we should reset the weather duration to some other random value. -@@ -2659,7 +2730,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -2659,7 +2729,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe // Spigot start if (entity.getBukkitEntity() instanceof org.bukkit.inventory.InventoryHolder && (!(entity instanceof ServerPlayer) || entity.getRemovalReason() != Entity.RemovalReason.KILLED)) { // SPIGOT-6876: closeInventory clears death message // Paper start - Fix merchant inventory not closing on entity removal @@ -1279,7 +1279,7 @@ index ea34bb4913e7357f5b76a64443f7e744abdf7b5e..de115ee71fa240440b54c553e0d3ddaf try { String channels = payload.toString(com.google.common.base.Charsets.UTF_8); diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index e3e758a608e16fc7b4ae795dfd2baecc8b0cb844..c0be2543ab55fda85302812a4773e551f64cf7d9 100644 +index 5d6f89468b0c8452a4166e707b514b22105a9b1a..f869deca50e463f34a003be473c7bfbe51b297ec 100644 --- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java @@ -326,6 +326,20 @@ public class ServerGamePacketListenerImpl @@ -2304,7 +2304,7 @@ index efee812785240c1ab1fd47514cfb236a3548f9cf..b982d4b7bdf39fcaf5f22cc889467d7b protected ParticleOptions getInkParticle() { return ParticleTypes.GLOW_SQUID_INK; diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java -index bfd71ce095cb35cc7c71b3dae71b40fc7d42f360..7a07789f115cb4a8917097e0697e80184104817e 100644 +index 696ef08b2d897c91a20bc22987b1f5c7047615be..ac006d8738592bc5cb77033adc8c442ce302a476 100644 --- a/net/minecraft/world/entity/LivingEntity.java +++ b/net/minecraft/world/entity/LivingEntity.java @@ -248,9 +248,9 @@ public abstract class LivingEntity extends Entity implements Attackable { @@ -2535,7 +2535,7 @@ index bfd71ce095cb35cc7c71b3dae71b40fc7d42f360..7a07789f115cb4a8917097e0697e8018 } // CraftBukkit start - Call death event // Paper start - call advancement triggers with correct entity equipment -@@ -3033,6 +3099,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -3040,6 +3106,7 @@ public abstract class LivingEntity extends Entity implements Attackable { float f = (float)(d * 10.0 - 3.0); if (f > 0.0F) { this.playSound(this.getFallDamageSound((int)f), 1.0F, 1.0F); @@ -2543,7 +2543,7 @@ index bfd71ce095cb35cc7c71b3dae71b40fc7d42f360..7a07789f115cb4a8917097e0697e8018 this.hurt(this.damageSources().flyIntoWall(), f); } } -@@ -3523,8 +3590,10 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -3530,8 +3597,10 @@ public abstract class LivingEntity extends Entity implements Attackable { this.pushEntities(); // Paper start - Add EntityMoveEvent @@ -2556,7 +2556,7 @@ index bfd71ce095cb35cc7c71b3dae71b40fc7d42f360..7a07789f115cb4a8917097e0697e8018 Location from = new Location(this.level().getWorld(), this.xo, this.yo, this.zo, this.yRotO, this.xRotO); Location to = new Location(this.level().getWorld(), this.getX(), this.getY(), this.getZ(), this.getYRot(), this.getXRot()); io.papermc.paper.event.entity.EntityMoveEvent event = new io.papermc.paper.event.entity.EntityMoveEvent(this.getBukkitLivingEntity(), from, to.clone()); -@@ -3534,11 +3603,52 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -3541,11 +3610,52 @@ public abstract class LivingEntity extends Entity implements Attackable { this.absMoveTo(event.getTo().getX(), event.getTo().getY(), event.getTo().getZ(), event.getTo().getYaw(), event.getTo().getPitch()); } } @@ -2609,7 +2609,7 @@ index bfd71ce095cb35cc7c71b3dae71b40fc7d42f360..7a07789f115cb4a8917097e0697e8018 } public boolean isSensitiveToWater() { -@@ -3560,7 +3670,18 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -3567,7 +3677,18 @@ public abstract class LivingEntity extends Entity implements Attackable { if (i1 % 2 == 0) { List list = EquipmentSlot.VALUES.stream().filter(slot -> canGlideUsing(this.getItemBySlot(slot), slot)).toList(); EquipmentSlot equipmentSlot = Util.getRandom(list, this.random); @@ -2629,7 +2629,7 @@ index bfd71ce095cb35cc7c71b3dae71b40fc7d42f360..7a07789f115cb4a8917097e0697e8018 } this.gameEvent(GameEvent.ELYTRA_GLIDE); -@@ -4443,6 +4564,12 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -4450,6 +4571,12 @@ public abstract class LivingEntity extends Entity implements Attackable { : slot == equippable.slot() && this.canUseSlot(equippable.slot()) && equippable.canBeEquippedBy(this.getType()); } @@ -3208,7 +3208,7 @@ index 579ca031d461ed4327fe4fb45c5289565322e64e..95fa516910a3834bbd4db6d11279e13a } else if (this.nextStartTick > 0) { this.nextStartTick--; diff --git a/net/minecraft/world/entity/ai/goal/RunAroundLikeCrazyGoal.java b/net/minecraft/world/entity/ai/goal/RunAroundLikeCrazyGoal.java -index 878d7813b3f2f52bef336c6d855d738bc2f83491..0752a8c6308f9f74ffe177d7a1decde2227228f9 100644 +index 878d7813b3f2f52bef336c6d855d738bc2f83491..d0f94f065d2ecf6ca6b47ac49422ffa656a18f55 100644 --- a/net/minecraft/world/entity/ai/goal/RunAroundLikeCrazyGoal.java +++ b/net/minecraft/world/entity/ai/goal/RunAroundLikeCrazyGoal.java @@ -58,7 +58,7 @@ public class RunAroundLikeCrazyGoal extends Goal { @@ -3216,7 +3216,7 @@ index 878d7813b3f2f52bef336c6d855d738bc2f83491..0752a8c6308f9f74ffe177d7a1decde2 int temper = this.horse.getTemper(); int maxTemper = this.horse.getMaxTemper(); - if (maxTemper > 0 && this.horse.getRandom().nextInt(maxTemper) < temper && !org.bukkit.craftbukkit.event.CraftEventFactory.callEntityTameEvent(this.horse, ((org.bukkit.craftbukkit.entity.CraftHumanEntity) this.horse.getBukkitEntity().getPassenger()).getHandle()).isCancelled()) { // CraftBukkit - fire EntityTameEvent -+ if (this.horse.level().purpurConfig.alwaysTameInCreative && player.hasInfiniteMaterials() || maxTemper > 0 && this.horse.getRandom().nextInt(maxTemper) < temper && !org.bukkit.craftbukkit.event.CraftEventFactory.callEntityTameEvent(this.horse, ((org.bukkit.craftbukkit.entity.CraftHumanEntity) this.horse.getBukkitEntity().getPassenger()).getHandle()).isCancelled()) { // CraftBukkit - fire EntityTameEvent // Purpur - Config to always tame in Creative ++ if (((this.horse.level().purpurConfig.alwaysTameInCreative && player.hasInfiniteMaterials()) || (maxTemper > 0 && this.horse.getRandom().nextInt(maxTemper) < temper)) && !org.bukkit.craftbukkit.event.CraftEventFactory.callEntityTameEvent(this.horse, ((org.bukkit.craftbukkit.entity.CraftHumanEntity) this.horse.getBukkitEntity().getPassenger()).getHandle()).isCancelled()) { // CraftBukkit - fire EntityTameEvent // Purpur - Config to always tame in Creative this.horse.tameWithName(player); return; } @@ -3758,7 +3758,7 @@ index 94244b148533ef026bf5c56abbc2bb5cfa83c938..d5727999eb67ff30dbf47865d5945248 if (Bee.this.random.nextFloat() < 0.05F && this.successfulPollinatingTicks > this.lastSoundPlayedTick + 60) { this.lastSoundPlayedTick = this.successfulPollinatingTicks; diff --git a/net/minecraft/world/entity/animal/Cat.java b/net/minecraft/world/entity/animal/Cat.java -index 1a7a5c81a260cc740994d1a63c4775c41c238dea..edd796fd34e43d66a48104201d885756fdd968c3 100644 +index 1a7a5c81a260cc740994d1a63c4775c41c238dea..e5d4dc41a72cdae15a08e6bb5425056a325c584c 100644 --- a/net/minecraft/world/entity/animal/Cat.java +++ b/net/minecraft/world/entity/animal/Cat.java @@ -93,10 +93,65 @@ public class Cat extends TamableAnimal implements VariantHolder !playerList.isOp(player.getGameProfile())) .map(player -> player.getGameProfile().getName()), diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java -index a1cbdab00636ee08ffad5726a7750e31d75ed44d..01836d12c5a4603d04bad192657540e0ae5a1ec0 100644 +index e3f8a469042636e4e49456d3bff862384d8ea1b8..d6f68208e4d487950eecc12edb197322cd80a4ad 100644 --- a/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java @@ -216,6 +216,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe @@ -153,7 +153,7 @@ index a1cbdab00636ee08ffad5726a7750e31d75ed44d..01836d12c5a4603d04bad192657540e0 } // Paper start -@@ -2672,6 +2674,11 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -2671,6 +2673,11 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe // ServerLevel.this.getChunkSource().addEntity(entity); // Paper - ignore and warn about illegal addEntity calls instead of crashing server; moved down below valid=true if (entity instanceof ServerPlayer serverPlayer) { ServerLevel.this.players.add(serverPlayer); @@ -165,7 +165,7 @@ index a1cbdab00636ee08ffad5726a7750e31d75ed44d..01836d12c5a4603d04bad192657540e0 ServerLevel.this.updateSleepingPlayerList(); } -@@ -2742,6 +2749,11 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -2741,6 +2748,11 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe ServerLevel.this.getChunkSource().removeEntity(entity); if (entity instanceof ServerPlayer serverPlayer) { ServerLevel.this.players.remove(serverPlayer); diff --git a/leaf-server/minecraft-patches/features/0047-Mirai-Configurable-chat-message-signatures.patch b/leaf-server/minecraft-patches/features/0047-Mirai-Configurable-chat-message-signatures.patch index 2f9fe613..7a875537 100644 --- a/leaf-server/minecraft-patches/features/0047-Mirai-Configurable-chat-message-signatures.patch +++ b/leaf-server/minecraft-patches/features/0047-Mirai-Configurable-chat-message-signatures.patch @@ -11,10 +11,10 @@ Original license: GPLv3 Original project: https://github.com/etil2jz/Mirai diff --git a/net/minecraft/network/FriendlyByteBuf.java b/net/minecraft/network/FriendlyByteBuf.java -index e5e5d9bc095ccd9fbf1c8aaa09e5c4ebb1d1c920..7c2df09decf90f691d35516a2eb74e97370f6a37 100644 +index d1daa3443446f47e2215f0c7c5823da58e053bab..abb0141426fd716e79a947b9498a8351daa342fc 100644 --- a/net/minecraft/network/FriendlyByteBuf.java +++ b/net/minecraft/network/FriendlyByteBuf.java -@@ -114,6 +114,17 @@ public class FriendlyByteBuf extends ByteBuf { +@@ -118,6 +118,17 @@ public class FriendlyByteBuf extends ByteBuf { public void writeJsonWithCodec(Codec codec, T value, int maxLength) { // Paper end - Adventure; add max length parameter DataResult dataResult = codec.encodeStart(JsonOps.INSTANCE, value); @@ -91,7 +91,7 @@ index 30bd254542d631676494f349ff3f44f52d54ab2f..63e6411d8bac1629e143cc620fe35dba public record Favicon(byte[] iconBytes) { diff --git a/net/minecraft/server/dedicated/DedicatedServer.java b/net/minecraft/server/dedicated/DedicatedServer.java -index 4027873ebfb71d73d9c6c9d00602f11ac5cbc78c..e3c395ff665d741136ec868a889042390bd25f73 100644 +index 5151c24697ceb01b4728d7d3fda5fee31db682d7..d4048661575ebfaf128ba25da365843774364e0e 100644 --- a/net/minecraft/server/dedicated/DedicatedServer.java +++ b/net/minecraft/server/dedicated/DedicatedServer.java @@ -668,6 +668,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface diff --git a/leaf-server/minecraft-patches/features/0085-Multithreaded-Tracker.patch b/leaf-server/minecraft-patches/features/0085-Multithreaded-Tracker.patch index 7d7a7c05..e52917cf 100644 --- a/leaf-server/minecraft-patches/features/0085-Multithreaded-Tracker.patch +++ b/leaf-server/minecraft-patches/features/0085-Multithreaded-Tracker.patch @@ -218,10 +218,10 @@ index d8298c7925e3bcea07ead4d438478cc51abcfa16..75670751064add901c2628d53d802835 attributesToSync.clear(); diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java -index dd27e6b47233776fdec8860391be772029c987aa..cbbc27e8030d28f95dccebec9b496f2ac8eb38a9 100644 +index 34276e9a114ae70bc109d68d44b2f545cd10db88..5423d8228c1da56135ae32b958f432d5b94707ed 100644 --- a/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java -@@ -2497,7 +2497,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -2496,7 +2496,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe @Override public LevelEntityGetter getEntities() { @@ -231,7 +231,7 @@ index dd27e6b47233776fdec8860391be772029c987aa..cbbc27e8030d28f95dccebec9b496f2a } diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 9960b26d5f5d931bacea3fb5c8fbe14dddd8d0e2..b6070af21a2f8f393146cab36488506eb0d308d0 100644 +index 74e2435f09f12f20ce9ad61c7688ac93a06846d5..7c3043961540eb4c4acbc705c62e7cb6996a512f 100644 --- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java @@ -1816,7 +1816,7 @@ public class ServerGamePacketListenerImpl diff --git a/leaf-server/minecraft-patches/features/0097-Lithium-Skip-unnecessary-calculations-if-player-is-n.patch b/leaf-server/minecraft-patches/features/0097-Lithium-Skip-unnecessary-calculations-if-player-is-n.patch index 9e54ba97..e058cc2f 100644 --- a/leaf-server/minecraft-patches/features/0097-Lithium-Skip-unnecessary-calculations-if-player-is-n.patch +++ b/leaf-server/minecraft-patches/features/0097-Lithium-Skip-unnecessary-calculations-if-player-is-n.patch @@ -12,10 +12,10 @@ As part of: Lithium (https://github.com/CaffeineMC/lithium-fabric) Licensed under: LGPL-3.0 (https://www.gnu.org/licenses/lgpl-3.0.html) diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java -index f744c9dca670cbbcc7549be17bf51eb683dd1ae0..f70a843be612903136ae603c4d4c0bad06f4628a 100644 +index 316242d60db43494300a29b7d0945d0d76ac9987..0138bd4d95a592bfa5ccbb33fa6c1201f289fd2a 100644 --- a/net/minecraft/world/entity/LivingEntity.java +++ b/net/minecraft/world/entity/LivingEntity.java -@@ -2732,6 +2732,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -2739,6 +2739,7 @@ public abstract class LivingEntity extends Entity implements Attackable { } protected void updateSwingTime() { @@ -23,7 +23,7 @@ index f744c9dca670cbbcc7549be17bf51eb683dd1ae0..f70a843be612903136ae603c4d4c0bad int currentSwingDuration = this.getCurrentSwingDuration(); if (this.swinging) { this.swingTime++; -@@ -3683,6 +3684,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -3690,6 +3691,7 @@ public abstract class LivingEntity extends Entity implements Attackable { protected void updateFallFlying() { this.checkSlowFallDistance(); if (!this.level().isClientSide) { diff --git a/leaf-server/minecraft-patches/features/0104-Lithium-equipment-tracking.patch b/leaf-server/minecraft-patches/features/0104-Lithium-equipment-tracking.patch index e371af9d..03dac236 100644 --- a/leaf-server/minecraft-patches/features/0104-Lithium-equipment-tracking.patch +++ b/leaf-server/minecraft-patches/features/0104-Lithium-equipment-tracking.patch @@ -76,7 +76,7 @@ index a8c6549f772208cd543607224fef2c2389b14f24..709631db548a16a969a373e26ebbcd69 public boolean equals(Object other) { return this == other diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java -index f70a843be612903136ae603c4d4c0bad06f4628a..f4f978073fca1be8fe18bc13f64385d4c0cd4b3d 100644 +index 0138bd4d95a592bfa5ccbb33fa6c1201f289fd2a..00233a7066d751821566b43993e8c45e7dad95d0 100644 --- a/net/minecraft/world/entity/LivingEntity.java +++ b/net/minecraft/world/entity/LivingEntity.java @@ -159,7 +159,7 @@ import org.bukkit.event.entity.EntityTeleportEvent; @@ -116,7 +116,7 @@ index f70a843be612903136ae603c4d4c0bad06f4628a..f4f978073fca1be8fe18bc13f64385d4 Equippable equippable = newItem.get(DataComponents.EQUIPPABLE); if (!this.isSilent() && equippable != null && slot == equippable.slot() && !silent) { // CraftBukkit this.level() -@@ -3348,6 +3353,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -3355,6 +3360,7 @@ public abstract class LivingEntity extends Entity implements Attackable { public void detectEquipmentUpdatesPublic() { // CraftBukkit Map map = this.collectEquipmentChanges(); if (map != null) { @@ -124,7 +124,7 @@ index f70a843be612903136ae603c4d4c0bad06f4628a..f4f978073fca1be8fe18bc13f64385d4 this.handleHandSwap(map); if (!map.isEmpty()) { this.handleEquipmentChanges(map); -@@ -3357,6 +3363,10 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -3364,6 +3370,10 @@ public abstract class LivingEntity extends Entity implements Attackable { @Nullable private Map collectEquipmentChanges() { @@ -135,7 +135,7 @@ index f70a843be612903136ae603c4d4c0bad06f4628a..f4f978073fca1be8fe18bc13f64385d4 Map map = null; // Paper start - EntityEquipmentChangedEvent record EquipmentChangeImpl(org.bukkit.inventory.ItemStack oldItem, org.bukkit.inventory.ItemStack newItem) implements io.papermc.paper.event.entity.EntityEquipmentChangedEvent.EquipmentChange { -@@ -4716,6 +4726,81 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -4723,6 +4733,81 @@ public abstract class LivingEntity extends Entity implements Attackable { return this.lastHurtByPlayerTime; } diff --git a/leaf-server/minecraft-patches/features/0106-Cache-chunk-key.patch b/leaf-server/minecraft-patches/features/0106-Cache-chunk-key.patch index 31e3ccaf..a9932a9c 100644 --- a/leaf-server/minecraft-patches/features/0106-Cache-chunk-key.patch +++ b/leaf-server/minecraft-patches/features/0106-Cache-chunk-key.patch @@ -84,7 +84,7 @@ index 571db5f9bf94745a8afe2cd313e593fb15db5e37..1487b7d8be435b3fbad2aabd05796965 valueInMap = new ServerChunkTasks( keyInMap, ServerLightQueue.this.lightInterface, ServerLightQueue.this, priority diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java -index cbbc27e8030d28f95dccebec9b496f2ac8eb38a9..1277b4b6b5283afebb78b403824e6a5aa1e5734f 100644 +index 5423d8228c1da56135ae32b958f432d5b94707ed..95bed1e67758543a7aec12eee1229ee2c4057c88 100644 --- a/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java @@ -508,7 +508,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe @@ -96,7 +96,7 @@ index cbbc27e8030d28f95dccebec9b496f2ac8eb38a9..1277b4b6b5283afebb78b403824e6a5a return; } -@@ -2570,7 +2570,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -2569,7 +2569,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe public boolean isNaturalSpawningAllowed(ChunkPos chunkPos) { // Paper start - rewrite chunk system diff --git a/leaf-server/minecraft-patches/features/0120-Only-player-pushable.patch b/leaf-server/minecraft-patches/features/0120-Only-player-pushable.patch index e86dea63..6b8b3ffa 100644 --- a/leaf-server/minecraft-patches/features/0120-Only-player-pushable.patch +++ b/leaf-server/minecraft-patches/features/0120-Only-player-pushable.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Only player pushable Useful for extreme cases like massive entities collide together in a small area diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java -index f4f978073fca1be8fe18bc13f64385d4c0cd4b3d..deb31fa0e0c9c8ccb21c5ae7e86bb1c5406e2177 100644 +index 00233a7066d751821566b43993e8c45e7dad95d0..03c9edad5c2f5e902b7a766c6d0be61bf3c263ae 100644 --- a/net/minecraft/world/entity/LivingEntity.java +++ b/net/minecraft/world/entity/LivingEntity.java -@@ -3624,7 +3624,7 @@ public abstract class LivingEntity extends Entity implements Attackable, net.caf +@@ -3631,7 +3631,7 @@ public abstract class LivingEntity extends Entity implements Attackable, net.caf this.checkAutoSpinAttack(boundingBox, this.getBoundingBox()); } @@ -18,7 +18,7 @@ index f4f978073fca1be8fe18bc13f64385d4c0cd4b3d..deb31fa0e0c9c8ccb21c5ae7e86bb1c5 // Paper start - Add EntityMoveEvent // Purpur start - Ridables if (this.xo != this.getX() || this.yo != this.getY() || this.zo != this.getZ() || this.yRotO != this.getYRot() || this.xRotO != this.getXRot()) { -@@ -3762,7 +3762,14 @@ public abstract class LivingEntity extends Entity implements Attackable, net.caf +@@ -3769,7 +3769,14 @@ public abstract class LivingEntity extends Entity implements Attackable, net.caf return; } // Paper end - don't run getEntities if we're not going to use its result @@ -34,7 +34,7 @@ index f4f978073fca1be8fe18bc13f64385d4c0cd4b3d..deb31fa0e0c9c8ccb21c5ae7e86bb1c5 if (!entities.isEmpty()) { // Paper - don't run getEntities if we're not going to use its result; moved up if (_int > 0 && entities.size() > _int - 1 && this.random.nextInt(4) == 0) { -@@ -3795,6 +3802,44 @@ public abstract class LivingEntity extends Entity implements Attackable, net.caf +@@ -3802,6 +3809,44 @@ public abstract class LivingEntity extends Entity implements Attackable, net.caf } } diff --git a/leaf-server/paper-patches/features/0005-Purpur-Server-Paper-Changes.patch b/leaf-server/paper-patches/features/0005-Purpur-Server-Paper-Changes.patch index 4cc9bf87..35448f8a 100644 --- a/leaf-server/paper-patches/features/0005-Purpur-Server-Paper-Changes.patch +++ b/leaf-server/paper-patches/features/0005-Purpur-Server-Paper-Changes.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Purpur Server Paper Changes Original license: MIT Original project: https://github.com/PurpurMC/Purpur -Commit: 196c1768e1cfa467b82acf260156892784c84578 +Commit: b34d675fef91bae2df723705f2568c7afd552d2d Patches listed below are removed in this patch, They exists in Gale or Leaf: * "Rebrand.patch" @@ -282,10 +282,10 @@ index 352d62385e56d5805510596ec9424e5d14336861..b4d4ad2dc7d719d72c0786791f803fbc final ConfigurationTransformation.VersionedBuilder versionedBuilder = Transformations.versionedBuilder(); diff --git a/src/main/java/io/papermc/paper/configuration/WorldConfiguration.java b/src/main/java/io/papermc/paper/configuration/WorldConfiguration.java -index d7c9acaffdcff5e35e026ae90a3e521bab13b074..a426ba82af695426952bb5e04fa721e6ccff2f89 100644 +index d193330bfd97767705c878e359969378d43b99d0..4bc6a6572f18b333a3c48b2a96f3079998e7d77f 100644 --- a/src/main/java/io/papermc/paper/configuration/WorldConfiguration.java +++ b/src/main/java/io/papermc/paper/configuration/WorldConfiguration.java -@@ -398,6 +398,7 @@ public class WorldConfiguration extends ConfigurationPart { +@@ -401,6 +401,7 @@ public class WorldConfiguration extends ConfigurationPart { public boolean useVanillaWorldScoreboardNameColoring = false; } @@ -293,7 +293,7 @@ index d7c9acaffdcff5e35e026ae90a3e521bab13b074..a426ba82af695426952bb5e04fa721e6 public Environment environment; public class Environment extends ConfigurationPart { -@@ -407,7 +408,9 @@ public class WorldConfiguration extends ConfigurationPart { +@@ -410,7 +411,9 @@ public class WorldConfiguration extends ConfigurationPart { public boolean disableExplosionKnockback = false; public boolean generateFlatBedrock = false; public FrostedIce frostedIce; @@ -558,7 +558,7 @@ index 94ca0407303c4493ab4928b12ec6ecc75aaca549..f2d87c12dd19210ce7e2147fada5c101 + // Purpur end - OfflinePlayer API } diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 0b085b3748a2700c3eb3bc158e5d42afae1efc1d..1816ec002c91d108529e9b1dcd7b5f0a7fbc52ef 100644 +index 93f115da494a66a756961b0cc16dea11010ea54f..feb39ef98af539f0c97cdd2bada7bb8febfb4de8 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -429,6 +429,20 @@ public final class CraftServer implements Server { @@ -685,8 +685,8 @@ index 0b085b3748a2700c3eb3bc158e5d42afae1efc1d..1816ec002c91d108529e9b1dcd7b5f0a + @Override public void restart() { - org.spigotmc.RestartCommand.restart(); -@@ -3358,4 +3441,18 @@ public final class CraftServer implements Server { + CraftServer.this.restart(); +@@ -3363,4 +3446,18 @@ public final class CraftServer implements Server { return MinecraftServer.lastTickOversleepTime; } // Gale end - YAPFA - last tick time - API diff --git a/leaf-server/paper-patches/features/0011-Leaves-Replay-Mod-API.patch b/leaf-server/paper-patches/features/0011-Leaves-Replay-Mod-API.patch index ef4d77b4..a928a97c 100644 --- a/leaf-server/paper-patches/features/0011-Leaves-Replay-Mod-API.patch +++ b/leaf-server/paper-patches/features/0011-Leaves-Replay-Mod-API.patch @@ -27,7 +27,7 @@ index 4c003acccdd2dd17918b15316001e52e7670123e..780f3a48152fef6a06dc67bf7fbd1965 HandlerList handlers = event.getHandlers(); RegisteredListener[] listeners = handlers.getRegisteredListeners(); diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 514c2d414ac59c71929a7686204465c72d122513..f1d6e2e31ef776a792124d79446323d0bb2c611f 100644 +index 989008d7c33813bda72464690690bdf78946eac3..144e876399dd61396ae5d192182b3be87ec84da0 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -322,6 +322,8 @@ public final class CraftServer implements Server { @@ -48,7 +48,7 @@ index 514c2d414ac59c71929a7686204465c72d122513..f1d6e2e31ef776a792124d79446323d0 @Override public CraftPlayer apply(ServerPlayer player) { return player.getBukkitEntity(); -@@ -3455,4 +3457,11 @@ public final class CraftServer implements Server { +@@ -3460,4 +3462,11 @@ public final class CraftServer implements Server { return getServer().lagging; } // Purpur end - Lagging threshold diff --git a/leaf-server/paper-patches/features/0015-Including-5s-in-getTPS.patch b/leaf-server/paper-patches/features/0015-Including-5s-in-getTPS.patch index 582ea006..503dfebf 100644 --- a/leaf-server/paper-patches/features/0015-Including-5s-in-getTPS.patch +++ b/leaf-server/paper-patches/features/0015-Including-5s-in-getTPS.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Including 5s in getTPS() diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index f1d6e2e31ef776a792124d79446323d0bb2c611f..ef0c0374261bc4d673e0b8150e268328125e3542 100644 +index 144e876399dd61396ae5d192182b3be87ec84da0..230e645e215103b6c09fc09e3653e76879a27727 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -3179,6 +3179,8 @@ public final class CraftServer implements Server { +@@ -3184,6 +3184,8 @@ public final class CraftServer implements Server { @Override public double[] getTPS() {