diff --git a/gradle.properties b/gradle.properties index a15c548c..5fddeca0 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ group=cn.dreeam.leaf mcVersion=1.21.7 version=1.21.7-R0.1-SNAPSHOT -paperCommit=b4466ec981d104c4756d1a3b90c2ee0d6ce4e6bd +paperCommit=76fb5060c1f02993d4448cae3b19116ae4f0b053 org.gradle.configuration-cache=true org.gradle.caching=true diff --git a/leaf-api/paper-patches/features/0011-Purpur-API-Changes.patch b/leaf-api/paper-patches/features/0011-Purpur-API-Changes.patch index 067fd9f6..b516a742 100644 --- a/leaf-api/paper-patches/features/0011-Purpur-API-Changes.patch +++ b/leaf-api/paper-patches/features/0011-Purpur-API-Changes.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Purpur API Changes Original license: MIT Original project: https://github.com/PurpurMC/Purpur -Commit: 2d8cdd15c79fce29455eaf8bedfc203bd16ca4d7 +Commit: 11c030a8f81b2f845a9f2749790692c2d152f284 Patches listed below are removed in this patch, They exists in Gale or Leaf: * "co/aikar/timings/TimedEventExecutor.java.patch" diff --git a/leaf-server/minecraft-patches/features/0274-Fix-infinite-loop-in-dismount-loc-check.patch b/leaf-archived-patches/removed/1.21.7/mcserver/0274-Fix-infinite-loop-in-dismount-loc-check.patch similarity index 91% rename from leaf-server/minecraft-patches/features/0274-Fix-infinite-loop-in-dismount-loc-check.patch rename to leaf-archived-patches/removed/1.21.7/mcserver/0274-Fix-infinite-loop-in-dismount-loc-check.patch index 8aea590d..a5485708 100644 --- a/leaf-server/minecraft-patches/features/0274-Fix-infinite-loop-in-dismount-loc-check.patch +++ b/leaf-archived-patches/removed/1.21.7/mcserver/0274-Fix-infinite-loop-in-dismount-loc-check.patch @@ -3,6 +3,9 @@ From: Dreeam <61569423+Dreeam-qwq@users.noreply.github.com> Date: Fri, 11 Jul 2025 06:10:41 +0800 Subject: [PATCH] Fix infinite loop in dismount loc check +Removed since Leaf 1.21.7, fixed in Paper (mache) side, +Very fun VineFlower decompile issue. + Invert the condition to prevent infinite loop diff --git a/net/minecraft/world/entity/animal/horse/AbstractHorse.java b/net/minecraft/world/entity/animal/horse/AbstractHorse.java diff --git a/leaf-server/build.gradle.kts.patch b/leaf-server/build.gradle.kts.patch index 6ba79334..70384a77 100644 --- a/leaf-server/build.gradle.kts.patch +++ b/leaf-server/build.gradle.kts.patch @@ -7,7 +7,7 @@ +val leafMavenPublicUrl = "https://maven.nostal.ink/repository/maven-snapshots/" // Leaf - project setup - Add publish repo dependencies { - mache("io.papermc:mache:1.21.7+build.1") + mache("io.papermc:mache:1.21.7+build.2") - paperclip("io.papermc:paperclip:3.0.3") + paperclip("cn.dreeam:quantumleaper:1.0.0-SNAPSHOT") // Leaf - project setup - Use own paperclip fork testRuntimeOnly("org.junit.platform:junit-platform-launcher") diff --git a/leaf-server/minecraft-patches/features/0005-Remove-vanilla-profiler.patch b/leaf-server/minecraft-patches/features/0005-Remove-vanilla-profiler.patch index e4a1dfbe..7b1bd061 100644 --- a/leaf-server/minecraft-patches/features/0005-Remove-vanilla-profiler.patch +++ b/leaf-server/minecraft-patches/features/0005-Remove-vanilla-profiler.patch @@ -1079,7 +1079,7 @@ index b4c983216cd839d793a09e327bb2f15ab90cbff8..1413511500ce8ae25cc4af1d54fc33c8 for (Entity entity : passengerEntity.getPassengers()) { this.tickPassenger(passengerEntity, entity, isActive); // Paper - EAR 2 diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java -index 21ae237a94232090029539652310f7d1e4aba381..4132ebc316af92aedd3b5f21d291e7d57560e985 100644 +index 163ede7fe353417942a98f9bd2757fc0f133b418..c37c86e837fa8894172e65031d3d41b9281cacab 100644 --- a/net/minecraft/server/level/ServerPlayer.java +++ b/net/minecraft/server/level/ServerPlayer.java @@ -106,8 +106,6 @@ import net.minecraft.util.HashOps; @@ -1234,7 +1234,7 @@ index 64b0508ef21952c65b0b967b756b2a4c64d96899..b6b03fbbd669e6331b30255df5419611 protected abstract T prepare(ResourceManager resourceManager, ProfilerFiller profiler); diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java -index 162dfba21cee2f3a9eb8403bf04aa3de5211a31c..31a939facfd4b506a2cff3cee6e4b86a12b1d343 100644 +index ff5e165a51dd8e15bb4b42e7ba27449d8f27d0cf..397bf42ef1d83cc242ca8228cd28e5f862da72d7 100644 --- a/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java @@ -80,8 +80,6 @@ import net.minecraft.tags.TagKey; @@ -1306,7 +1306,7 @@ index 162dfba21cee2f3a9eb8403bf04aa3de5211a31c..31a939facfd4b506a2cff3cee6e4b86a } } // Paper start - detailed watchdog information -@@ -3407,8 +3394,6 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3406,8 +3393,6 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess this.processPortalCooldown(); if (this.portalProcess != null) { if (this.portalProcess.processPortalTeleportation(serverLevel, this, this.canUsePortal(false))) { @@ -1315,7 +1315,7 @@ index 162dfba21cee2f3a9eb8403bf04aa3de5211a31c..31a939facfd4b506a2cff3cee6e4b86a this.setPortalCooldown(); TeleportTransition portalDestination = this.portalProcess.getPortalDestination(serverLevel, this); if (portalDestination != null) { -@@ -3419,7 +3404,6 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3418,7 +3403,6 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } } @@ -1323,7 +1323,7 @@ index 162dfba21cee2f3a9eb8403bf04aa3de5211a31c..31a939facfd4b506a2cff3cee6e4b86a } else if (this.portalProcess.hasExpired()) { this.portalProcess = null; } -@@ -3986,15 +3970,12 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3985,15 +3969,12 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess entity.teleport(this.calculatePassengerTransition(teleportTransition, entity)); } @@ -1339,7 +1339,7 @@ index 162dfba21cee2f3a9eb8403bf04aa3de5211a31c..31a939facfd4b506a2cff3cee6e4b86a return this; } -@@ -4010,11 +3991,8 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -4009,11 +3990,8 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } } @@ -1351,7 +1351,7 @@ index 162dfba21cee2f3a9eb8403bf04aa3de5211a31c..31a939facfd4b506a2cff3cee6e4b86a return null; } else { // Paper start - Fix item duplication and teleport issues -@@ -4034,7 +4012,6 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -4033,7 +4011,6 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess newLevel.resetEmptyTime(); teleportTransition.postTeleportTransition().onTransition(entityx); this.teleportSpectators(teleportTransition, oldLevel); @@ -1360,7 +1360,7 @@ index 162dfba21cee2f3a9eb8403bf04aa3de5211a31c..31a939facfd4b506a2cff3cee6e4b86a } } diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java -index 35d71978a3d360eed97feb66d1048bee337ef2b9..97431aa47b5425578bf14b992596962c64c87f35 100644 +index 8f5dc1180de2d144e0d081770ef26937dfdbd705..532cc5ae07d81bedeaa8d76bd5a8d1cd8760e0a2 100644 --- a/net/minecraft/world/entity/LivingEntity.java +++ b/net/minecraft/world/entity/LivingEntity.java @@ -69,8 +69,6 @@ import net.minecraft.tags.FluidTags; diff --git a/leaf-server/minecraft-patches/features/0046-Reduce-array-allocations.patch b/leaf-server/minecraft-patches/features/0046-Reduce-array-allocations.patch index a7c6e3f4..4f0bf100 100644 --- a/leaf-server/minecraft-patches/features/0046-Reduce-array-allocations.patch +++ b/leaf-server/minecraft-patches/features/0046-Reduce-array-allocations.patch @@ -152,7 +152,7 @@ index a9c2f419200483673f6743ed94af110a8e875e71..617eb1b9d30d499124576c5d7cb51525 return ret; } diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java -index 8df0dbadca1dc72ac8d267654414044eb988ee43..784a08d0aed30fd0362e408aaa5772003021c0ad 100644 +index bb1d7467b3fe01762c8ef28f1f9f6563e18a6195..af726d261f8d27ba95daa2657abd26a7461903ac 100644 --- a/net/minecraft/server/level/ServerPlayer.java +++ b/net/minecraft/server/level/ServerPlayer.java @@ -1100,7 +1100,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc @@ -165,7 +165,7 @@ index 8df0dbadca1dc72ac8d267654414044eb988ee43..784a08d0aed30fd0362e408aaa577200 this.getInventory().equipment.set(value, net.minecraft.world.item.ItemStack.EMPTY); } diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 1729f36ec81f0f7ac0bf494513e6b0ceba87e063..b1d2e52c04cdc7285bc732e91006f76c3552d35f 100644 +index 83ab47fead8c07c70a96d5794baa04cd1444fb8f..3f1f68ed20ec6c944f031afc74052e63594e84e6 100644 --- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java @@ -2794,7 +2794,7 @@ public class ServerGamePacketListenerImpl @@ -176,7 +176,7 @@ index 1729f36ec81f0f7ac0bf494513e6b0ceba87e063..b1d2e52c04cdc7285bc732e91006f76c + target.getId(), java.util.Arrays.stream(net.minecraft.world.entity.EquipmentSlot.VALUES_ARRAY) // Gale - JettPack - reduce array allocations .map((slot) -> com.mojang.datafixers.util.Pair.of(slot, ((LivingEntity) target).getItemBySlot(slot).copy())) .collect(Collectors.toList()), true)); // Paper - sanitize - } + player.containerMenu.sendAllDataToRemote(); diff --git a/net/minecraft/server/players/StoredUserList.java b/net/minecraft/server/players/StoredUserList.java index d445e8f126f077d8419c52fa5436ea963a1a42a4..39483f7b453d6faedeccc1ab1eda76669395ea5a 100644 --- a/net/minecraft/server/players/StoredUserList.java @@ -217,10 +217,10 @@ index 3eea236bd1fd401fefdf7c5cc553a3db335029c7..3739272cbc73b7c4f15a2fbe874905cf if (!itemBySlot.isEmpty()) { newMob.setItemSlot(equipmentSlot, itemBySlot.copyAndClear()); diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java -index 31a939facfd4b506a2cff3cee6e4b86a12b1d343..e8cd21863aff0aa37b2e6c23a3c60335a3d279cb 100644 +index 397bf42ef1d83cc242ca8228cd28e5f862da72d7..584403a056350b05da0108ea668a1583db2ee943 100644 --- a/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java -@@ -3077,7 +3077,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3076,7 +3076,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } private boolean attemptToShearEquipment(Player player, InteractionHand hand, ItemStack stack, Mob mob) { @@ -284,10 +284,10 @@ index b383836c200ca9f7bd84639367aa81b57868fb25..3af4a6dcc81afaf2860325fe5852c9a9 private static Map createForAllSlots(List equipmentSlots, float dropChance) { diff --git a/net/minecraft/world/item/ItemStack.java b/net/minecraft/world/item/ItemStack.java -index cf283389d9263ba29720bf296a778be9eaf308a7..8803c03846828b532bd2b6e164c589995907c96b 100644 +index da16f4831c875e07c25d7ed041bed493db614658..951c86278e8cb5cd801a5db2ebfabef8c6d813ef 100644 --- a/net/minecraft/world/item/ItemStack.java +++ b/net/minecraft/world/item/ItemStack.java -@@ -1153,7 +1153,7 @@ public final class ItemStack implements DataComponentHolder { +@@ -1149,7 +1149,7 @@ public final class ItemStack implements DataComponentHolder { private void addAttributeTooltips(Consumer tooltipAdder, TooltipDisplay tooltipDisplay, @Nullable Player player) { if (tooltipDisplay.shows(DataComponents.ATTRIBUTE_MODIFIERS)) { diff --git a/leaf-server/minecraft-patches/features/0060-Skip-entity-move-if-movement-is-zero.patch b/leaf-server/minecraft-patches/features/0060-Skip-entity-move-if-movement-is-zero.patch index 3465b9fa..5ef91568 100644 --- a/leaf-server/minecraft-patches/features/0060-Skip-entity-move-if-movement-is-zero.patch +++ b/leaf-server/minecraft-patches/features/0060-Skip-entity-move-if-movement-is-zero.patch @@ -13,7 +13,7 @@ As part of: VMP (https://github.com/RelativityMC/VMP-fabric) Licensed under: MIT (https://opensource.org/licenses/MIT) diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java -index e0f82de257a0f4c6ad3c7c4362b46d12e56391a7..0c0ef8705a8a2f7e96c84f380a43fdc48abdb1e3 100644 +index ab6abe703c3df6908c8001fc81efe2dca062eba1..9b81d49b6a6a93019100416c21ba8c732203395e 100644 --- a/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java @@ -260,6 +260,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess @@ -36,7 +36,7 @@ index e0f82de257a0f4c6ad3c7c4362b46d12e56391a7..0c0ef8705a8a2f7e96c84f380a43fdc4 final Vec3 originalMovement = movement; // Paper - Expose pre-collision velocity // Paper start - detailed watchdog information ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread("Cannot move an entity off-main"); -@@ -4376,6 +4382,11 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -4375,6 +4381,11 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } public final void setBoundingBox(AABB bb) { diff --git a/leaf-server/minecraft-patches/features/0074-Don-t-load-chunks-to-activate-climbing-entities.patch b/leaf-server/minecraft-patches/features/0074-Don-t-load-chunks-to-activate-climbing-entities.patch index d0486aad..6d1047b8 100644 --- a/leaf-server/minecraft-patches/features/0074-Don-t-load-chunks-to-activate-climbing-entities.patch +++ b/leaf-server/minecraft-patches/features/0074-Don-t-load-chunks-to-activate-climbing-entities.patch @@ -7,10 +7,10 @@ License: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html) Gale - https://galemc.org diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java -index 8fcc1223942114f46c36028326e9c7daf4f0d9e0..41279a276622062338bef685491cc2959ecb2ff4 100644 +index 79c88dae33c0b1f27064d388e4c6ec7501d3313e..fa6a565e308cdf356855172621dcd7d8c3237403 100644 --- a/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java -@@ -4874,6 +4874,16 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -4873,6 +4873,16 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess return this.inBlockState; } @@ -28,7 +28,7 @@ index 8fcc1223942114f46c36028326e9c7daf4f0d9e0..41279a276622062338bef685491cc295 return this.chunkPosition; } diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java -index 586b79bc844b098336c6d3bf342b570396e6af88..9e93c446fb3641a88643d382abddc5d2acc8a810 100644 +index 80e250ce17f315ddaa783624413397f56b52f5b9..ae2e0afb0c36fc5512dcea3d15997a737e91de11 100644 --- a/net/minecraft/world/entity/LivingEntity.java +++ b/net/minecraft/world/entity/LivingEntity.java @@ -2129,8 +2129,17 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin diff --git a/leaf-server/minecraft-patches/features/0085-Optimize-matching-item-checks.patch b/leaf-server/minecraft-patches/features/0085-Optimize-matching-item-checks.patch index 6096cc1e..501ad3ca 100644 --- a/leaf-server/minecraft-patches/features/0085-Optimize-matching-item-checks.patch +++ b/leaf-server/minecraft-patches/features/0085-Optimize-matching-item-checks.patch @@ -7,10 +7,10 @@ License: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html) Gale - https://galemc.org diff --git a/net/minecraft/world/item/ItemStack.java b/net/minecraft/world/item/ItemStack.java -index 8803c03846828b532bd2b6e164c589995907c96b..3acc2ae8533f19a6f9b2b6a1d96271f1047384a4 100644 +index 951c86278e8cb5cd801a5db2ebfabef8c6d813ef..6ceb6cf302bad28e453fa89ec16083b0e0c5c398 100644 --- a/net/minecraft/world/item/ItemStack.java +++ b/net/minecraft/world/item/ItemStack.java -@@ -868,11 +868,11 @@ public final class ItemStack implements DataComponentHolder { +@@ -864,11 +864,11 @@ public final class ItemStack implements DataComponentHolder { } public static boolean isSameItem(ItemStack stack, ItemStack other) { diff --git a/leaf-server/minecraft-patches/features/0095-Purpur-Server-Minecraft-Changes.patch b/leaf-server/minecraft-patches/features/0095-Purpur-Server-Minecraft-Changes.patch index 3ed57661..c73e137b 100644 --- a/leaf-server/minecraft-patches/features/0095-Purpur-Server-Minecraft-Changes.patch +++ b/leaf-server/minecraft-patches/features/0095-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: 2d8cdd15c79fce29455eaf8bedfc203bd16ca4d7 +Commit: 11c030a8f81b2f845a9f2749790692c2d152f284 Patches listed below are removed in this patch, They exists in Gale or Leaf: * "net/minecraft/CrashReport.java.patch" @@ -118,7 +118,7 @@ index 3acfb2a78845dd8081dc3c01d653034232c76e60..51caf352e77df49fc04bf84f1fab29b6 boolean flag = this.source.acceptsSuccess() && !this.silent; boolean flag1 = allowLogging && this.source.shouldInformAdmins() && !this.silent; diff --git a/net/minecraft/commands/Commands.java b/net/minecraft/commands/Commands.java -index e00624a738e65ab14ec68a8d0e7861522fa32e82..1dc009e85403fe0b6a68daefecfe5cb25ad263cd 100644 +index e00624a738e65ab14ec68a8d0e7861522fa32e82..287c0936930ff4f3ca6dc2a4cbfc796a120fe4c0 100644 --- a/net/minecraft/commands/Commands.java +++ b/net/minecraft/commands/Commands.java @@ -249,7 +249,7 @@ public class Commands { @@ -130,7 +130,20 @@ index e00624a738e65ab14ec68a8d0e7861522fa32e82..1dc009e85403fe0b6a68daefecfe5cb2 RaidCommand.register(this.dispatcher, context); DebugPathCommand.register(this.dispatcher); DebugMobSpawningCommand.register(this.dispatcher); -@@ -277,6 +277,14 @@ public class Commands { +@@ -261,6 +261,12 @@ public class Commands { + } + } + ++ // Purpur start - register disabled minecraft commands ++ if (org.purpurmc.purpur.PurpurConfig.registerMinecraftDisabledCommands) { ++ net.minecraft.server.commands.ChaseCommand.register(this.dispatcher); ++ } ++ // Purpur end - register disabled minecraft commands ++ + if (selection.includeDedicated) { + BanIpCommands.register(this.dispatcher); + BanListCommands.register(this.dispatcher); +@@ -277,6 +283,14 @@ public class Commands { StopCommand.register(this.dispatcher); TransferCommand.register(this.dispatcher); WhitelistCommand.register(this.dispatcher); @@ -303,10 +316,10 @@ index 8bab2c26e10e8495fd39be470bcb02917fe56f40..e72eda830644851656fae3118c513d7b } // Paper end - Buffer joins to world diff --git a/net/minecraft/server/Main.java b/net/minecraft/server/Main.java -index b16f3f515a76ddbbd74d73464396cf094cb30599..dd6ae338fa48d52962ee0af5b1572077ba6dff91 100644 +index b16f3f515a76ddbbd74d73464396cf094cb30599..4134679c838307de7ae410cfc727fada0eeebf6b 100644 --- a/net/minecraft/server/Main.java +++ b/net/minecraft/server/Main.java -@@ -109,6 +109,12 @@ public class Main { +@@ -109,6 +109,13 @@ public class Main { JvmProfiler.INSTANCE.start(Environment.SERVER); } @@ -314,6 +327,7 @@ index b16f3f515a76ddbbd74d73464396cf094cb30599..dd6ae338fa48d52962ee0af5b1572077 + org.bukkit.configuration.file.YamlConfiguration purpurConfiguration = io.papermc.paper.configuration.PaperConfigurations.loadLegacyConfigFile((File) optionSet.valueOf("purpur-settings")); + org.purpurmc.purpur.PurpurConfig.clampEnchantLevels = purpurConfiguration.getBoolean("settings.enchantment.clamp-levels", true); + org.purpurmc.purpur.PurpurConfig.registerMinecraftDebugCommands = purpurConfiguration.getBoolean("settings.register-minecraft-debug-commands"); // Purpur - register minecraft debug commands ++ org.purpurmc.purpur.PurpurConfig.registerMinecraftDisabledCommands = purpurConfiguration.getBoolean("settings.register-minecraft-disabled-commands"); // Purpur - register disabled minecraft commands + // Purpur end - Add toggle for enchant level clamping - load config files early + org.dreeam.leaf.config.LeafConfig.loadConfig(); // Leaf - Leaf config @@ -925,7 +939,7 @@ index 3f70fca36f67fa421314ff92d372a97112a19025..95c128f028c3cce7d0b37821a6e75208 } // Paper end - Fix merchant inventory not closing on entity removal diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java -index feb4f7c70220e9c48a17a815631298bcb8366ded..e181134e654a32aef9174dcc5d1a163858f7f143 100644 +index 3592f91f1876a044b61d0d7b28a1619ab2cff04a..852802af6885607ddd9de795c66ef499fef11722 100644 --- a/net/minecraft/server/level/ServerPlayer.java +++ b/net/minecraft/server/level/ServerPlayer.java @@ -428,6 +428,9 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc @@ -1223,7 +1237,7 @@ index feb4f7c70220e9c48a17a815631298bcb8366ded..e181134e654a32aef9174dcc5d1a1638 + // Purpur end - Add rambar command } diff --git a/net/minecraft/server/level/ServerPlayerGameMode.java b/net/minecraft/server/level/ServerPlayerGameMode.java -index 6734756d7a51e635a50a47577f9e6b6f8111db51..c4a4f08272b34f72dea4feaaeb66d153b2aab8c8 100644 +index cfbf34964288526e93d0a5b212c1b60296c10430..d638821595138ef972163925136eb57207b31719 100644 --- a/net/minecraft/server/level/ServerPlayerGameMode.java +++ b/net/minecraft/server/level/ServerPlayerGameMode.java @@ -348,6 +348,7 @@ public class ServerPlayerGameMode { @@ -1299,7 +1313,7 @@ index de630a692291926c52a0947f9943e59433ab130a..ca9ba2a2535eab66622230778efdf941 this.playerBrand = new net.minecraft.network.FriendlyByteBuf(io.netty.buffer.Unpooled.wrappedBuffer(data)).readUtf(256); } diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index b1d2e52c04cdc7285bc732e91006f76c3552d35f..cb646939cc6465135030b715d203ba2211981b8e 100644 +index 3f1f68ed20ec6c944f031afc74052e63594e84e6..6fc36c917bee5453e4aadd018389893c0f5dd6f4 100644 --- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java @@ -338,6 +338,20 @@ public class ServerGamePacketListenerImpl @@ -1530,10 +1544,10 @@ index b1d2e52c04cdc7285bc732e91006f76c3552d35f..cb646939cc6465135030b715d203ba22 + player.processClick(hand); // Purpur - Ridables + - // Entity in bucket - SPIGOT-4048 and SPIGOT-6859a + // Entity in bucket - SPIGOT-4048 and SPIGOT-6859 if ((target instanceof net.minecraft.world.entity.animal.Bucketable && target instanceof LivingEntity && origItem != null && origItem == Items.WATER_BUCKET) && (event.isCancelled() || ServerGamePacketListenerImpl.this.player.getInventory().getSelectedItem().isEmpty() || !ServerGamePacketListenerImpl.this.player.getInventory().getSelectedItem().is(origItem))) { target.resendPossiblyDesyncedEntityData(ServerGamePacketListenerImpl.this.player); // Paper - The entire mob gets deleted, so resend it -@@ -3553,7 +3637,7 @@ public class ServerGamePacketListenerImpl +@@ -3495,7 +3579,7 @@ public class ServerGamePacketListenerImpl @Override public void handleChangeGameMode(ServerboundChangeGameModePacket packet) { PacketUtils.ensureRunningOnSameThread(packet, this, this.player.level()); @@ -1909,7 +1923,7 @@ index 1fc9e1ad541c46124183a401b2a7d99aea69cecf..881271f0bc77a8a8a7d31daad9a8188b } diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java -index 28e2ad1238651b8adb47b77763b0c8ae8172fe8a..fb387919e51504beafd2e7947faa41795df18100 100644 +index 9ee1ce59ee5612a0793ad76c4635af63c315657a..5b6c8d4caac3fca20e5994e24267f04cb59c27dd 100644 --- a/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java @@ -146,6 +146,7 @@ import org.jetbrains.annotations.Contract; @@ -2037,7 +2051,7 @@ index 28e2ad1238651b8adb47b77763b0c8ae8172fe8a..fb387919e51504beafd2e7947faa4179 // Paper start - EntityUnleashEvent if (!org.bukkit.craftbukkit.event.CraftEventFactory.handlePlayerUnleashEntityEvent( leashable2, player, hand, !player.hasInfiniteMaterials(), true -@@ -3300,6 +3342,13 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3299,6 +3341,13 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess this.passengers = ImmutableList.copyOf(list); } @@ -2051,7 +2065,7 @@ index 28e2ad1238651b8adb47b77763b0c8ae8172fe8a..fb387919e51504beafd2e7947faa4179 this.gameEvent(GameEvent.ENTITY_MOUNT, passenger); } } -@@ -3341,6 +3390,14 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3340,6 +3389,14 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess return false; } // CraftBukkit end @@ -2066,7 +2080,7 @@ index 28e2ad1238651b8adb47b77763b0c8ae8172fe8a..fb387919e51504beafd2e7947faa4179 if (this.passengers.size() == 1 && this.passengers.get(0) == passenger) { this.passengers = ImmutableList.of(); } else { -@@ -3410,15 +3467,18 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3409,15 +3466,18 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess return Vec3.directionFromRotation(this.getRotationVector()); } @@ -2086,7 +2100,7 @@ index 28e2ad1238651b8adb47b77763b0c8ae8172fe8a..fb387919e51504beafd2e7947faa4179 } } } -@@ -3620,7 +3680,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3619,7 +3679,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } public int getMaxAirSupply() { @@ -2095,7 +2109,7 @@ index 28e2ad1238651b8adb47b77763b0c8ae8172fe8a..fb387919e51504beafd2e7947faa4179 } public int getAirSupply() { -@@ -4167,7 +4227,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -4166,7 +4226,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess // CraftBukkit end public boolean canUsePortal(boolean allowPassengers) { @@ -2104,7 +2118,7 @@ index 28e2ad1238651b8adb47b77763b0c8ae8172fe8a..fb387919e51504beafd2e7947faa4179 } public boolean canTeleport(Level fromLevel, Level toLevel) { -@@ -4697,6 +4757,12 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -4696,6 +4756,12 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess return Mth.lerp(partialTick, this.yRotO, this.yRot); } @@ -2117,7 +2131,7 @@ index 28e2ad1238651b8adb47b77763b0c8ae8172fe8a..fb387919e51504beafd2e7947faa4179 // Paper start - optimise collisions public boolean updateFluidHeightAndDoFluidPushing(final TagKey fluid, final double flowScale) { if (this.touchingUnloadedChunk()) { -@@ -5133,7 +5199,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -5132,7 +5198,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } public float maxUpStep() { @@ -2126,7 +2140,7 @@ index 28e2ad1238651b8adb47b77763b0c8ae8172fe8a..fb387919e51504beafd2e7947faa4179 } public void onExplosionHit(@Nullable Entity entity) { -@@ -5391,4 +5457,44 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -5390,4 +5456,44 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess return ((ServerLevel) this.level()).isPositionEntityTicking(this.blockPosition()); } // Paper end - Expose entity id counter @@ -2310,7 +2324,7 @@ index aab9adb8313c4b18279c7fd7500ef04bda09c6c1..86a694b94045b47f6e98c480645f7573 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 40b9dd1a1568f0f1eeba6925167a79cde48d66fd..25a7651efa80938124bbda27a1de25e9a6eb3620 100644 +index 89e073b0a40738a7c1c7aea84eb2409e252e5473..310b2c9197c0c32fd1be05ab10eae5fc1d43fc26 100644 --- a/net/minecraft/world/entity/LivingEntity.java +++ b/net/minecraft/world/entity/LivingEntity.java @@ -236,9 +236,9 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin @@ -2396,7 +2410,7 @@ index 40b9dd1a1568f0f1eeba6925167a79cde48d66fd..25a7651efa80938124bbda27a1de25e9 } // Paper - The sleeping pos will always also set the actual pos, so a desync suggests something is wrong }, this::clearSleepingPos); input.read("Brain", Codec.PASSTHROUGH).ifPresent(dynamic -> this.brain = this.makeBrain((Dynamic)dynamic)); -+ this.shouldBurnInDay = input.getBooleanOr("Purpur.ShouldBurnInDay", false); // Purpur - API for any mob to burn daylight ++ this.shouldBurnInDay = input.getBooleanOr("Purpur.ShouldBurnInDay", this.shouldBurnInDay); // Purpur - API for any mob to burn daylight this.lastHurtByPlayer = EntityReference.read(input, "last_hurt_by_player"); this.lastHurtByPlayerMemoryTime = input.getIntOr("last_hurt_by_player_memory_time", 0); this.lastHurtByMob = EntityReference.read(input, "last_hurt_by_mob"); @@ -2645,7 +2659,7 @@ index 40b9dd1a1568f0f1eeba6925167a79cde48d66fd..25a7651efa80938124bbda27a1de25e9 } this.gameEvent(GameEvent.ELYTRA_GLIDE); -@@ -4530,6 +4661,12 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -4524,6 +4655,12 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin : slot == equippable.slot() && this.canUseSlot(equippable.slot()) && equippable.canBeEquippedBy(this.getType()); } @@ -6621,7 +6635,7 @@ index 2a72d7f422c340dabef11a6dc680358207bee637..11b020704a673c69bd2d4ab6313ea32e brain.setMemory(MemoryModuleType.RAM_TARGET, entity.position()); brain.eraseMemory(MemoryModuleType.RAM_COOLDOWN_TICKS); diff --git a/net/minecraft/world/entity/animal/horse/AbstractHorse.java b/net/minecraft/world/entity/animal/horse/AbstractHorse.java -index 31ed5d7cfbda1a1f98ebfc89f5cbc65332cabdae..e78ef459d6eecb7f69882ed95cd9f9967f53989f 100644 +index e7e4558d0f018a0c975d12d77287cda4df5a500a..6f1006281128d6da0dda43cc61ee672e872186af 100644 --- a/net/minecraft/world/entity/animal/horse/AbstractHorse.java +++ b/net/minecraft/world/entity/animal/horse/AbstractHorse.java @@ -127,11 +127,61 @@ public abstract class AbstractHorse extends Animal implements HasCustomInventory @@ -9881,10 +9895,10 @@ index 5ef9566b16a4d0300ee45a993c46e734db156416..04d5910d736dee2a88a2602f4a984954 return false; } else { diff --git a/net/minecraft/world/entity/monster/Phantom.java b/net/minecraft/world/entity/monster/Phantom.java -index ffcfdbc80df2a9e6c546348b86e7615e6109eb49..3b812e0860e37d30d5d12f97410ed5fd2babadf6 100644 +index ffcfdbc80df2a9e6c546348b86e7615e6109eb49..32f037ae8a3dbb1f3c7e123db67b91ee23bc83b3 100644 --- a/net/minecraft/world/entity/monster/Phantom.java +++ b/net/minecraft/world/entity/monster/Phantom.java -@@ -49,19 +49,111 @@ public class Phantom extends Mob implements Enemy { +@@ -49,19 +49,110 @@ public class Phantom extends Mob implements Enemy { @Nullable public BlockPos anchorPoint; Phantom.AttackPhase attackPhase = Phantom.AttackPhase.CIRCLE; @@ -9892,7 +9906,8 @@ index ffcfdbc80df2a9e6c546348b86e7615e6109eb49..3b812e0860e37d30d5d12f97410ed5fd // Paper start @Nullable public java.util.UUID spawningEntity; - public boolean shouldBurnInDay = true; +- public boolean shouldBurnInDay = true; ++ //public boolean shouldBurnInDay = true; // Purpur - API for any mob to burn daylight // Paper end + private static final net.minecraft.world.item.crafting.Ingredient TORCH = net.minecraft.world.item.crafting.Ingredient.of(net.minecraft.world.item.Items.TORCH, net.minecraft.world.item.Items.SOUL_TORCH); // Purpur - Phantoms burn in light @@ -9976,7 +9991,6 @@ index ffcfdbc80df2a9e6c546348b86e7615e6109eb49..3b812e0860e37d30d5d12f97410ed5fd + } + // Purpur end - Toggle for water sensitive mob damage + -+ //private boolean shouldBurnInDay = true; // Purpur - moved to LivingEntity; keep methods for ABI compatibility - API for any mob to burn daylight + // Purpur start - API for any mob to burn daylight + public boolean shouldBurnInDay() { + boolean burnFromDaylight = this.shouldBurnInDay && this.level().purpurConfig.phantomBurnInDaylight; @@ -9996,7 +10010,7 @@ index ffcfdbc80df2a9e6c546348b86e7615e6109eb49..3b812e0860e37d30d5d12f97410ed5fd @Override public boolean isFlapping() { return (this.getUniqueFlapTickOffset() + this.tickCount) % TICKS_PER_FLAP == 0; -@@ -74,9 +166,17 @@ public class Phantom extends Mob implements Enemy { +@@ -74,9 +165,17 @@ public class Phantom extends Mob implements Enemy { @Override protected void registerGoals() { @@ -10017,7 +10031,7 @@ index ffcfdbc80df2a9e6c546348b86e7615e6109eb49..3b812e0860e37d30d5d12f97410ed5fd this.targetSelector.addGoal(1, new Phantom.PhantomAttackPlayerTargetGoal()); } -@@ -92,7 +192,11 @@ public class Phantom extends Mob implements Enemy { +@@ -92,7 +191,11 @@ public class Phantom extends Mob implements Enemy { private void updatePhantomSizeInfo() { this.refreshDimensions(); @@ -10030,7 +10044,7 @@ index ffcfdbc80df2a9e6c546348b86e7615e6109eb49..3b812e0860e37d30d5d12f97410ed5fd } public int getPhantomSize() { -@@ -117,6 +221,23 @@ public class Phantom extends Mob implements Enemy { +@@ -117,6 +220,23 @@ public class Phantom extends Mob implements Enemy { return true; } @@ -10054,7 +10068,7 @@ index ffcfdbc80df2a9e6c546348b86e7615e6109eb49..3b812e0860e37d30d5d12f97410ed5fd @Override public void tick() { super.tick(); -@@ -148,10 +269,7 @@ public class Phantom extends Mob implements Enemy { +@@ -148,10 +268,7 @@ public class Phantom extends Mob implements Enemy { @Override public void aiStep() { @@ -10066,7 +10080,7 @@ index ffcfdbc80df2a9e6c546348b86e7615e6109eb49..3b812e0860e37d30d5d12f97410ed5fd super.aiStep(); } -@@ -167,6 +285,15 @@ public class Phantom extends Mob implements Enemy { +@@ -167,6 +284,15 @@ public class Phantom extends Mob implements Enemy { @Override public void travel(Vec3 travelVector) { this.travelFlying(travelVector, 0.2F); @@ -10082,7 +10096,7 @@ index ffcfdbc80df2a9e6c546348b86e7615e6109eb49..3b812e0860e37d30d5d12f97410ed5fd } @Override -@@ -174,7 +301,11 @@ public class Phantom extends Mob implements Enemy { +@@ -174,7 +300,11 @@ public class Phantom extends Mob implements Enemy { ServerLevelAccessor level, DifficultyInstance difficulty, EntitySpawnReason spawnReason, @Nullable SpawnGroupData spawnGroupData ) { this.anchorPoint = this.blockPosition().above(5); @@ -10095,7 +10109,7 @@ index ffcfdbc80df2a9e6c546348b86e7615e6109eb49..3b812e0860e37d30d5d12f97410ed5fd return super.finalizeSpawn(level, difficulty, spawnReason, spawnGroupData); } -@@ -185,7 +316,7 @@ public class Phantom extends Mob implements Enemy { +@@ -185,7 +315,7 @@ public class Phantom extends Mob implements Enemy { this.setPhantomSize(input.getIntOr("size", 0)); // Paper start this.spawningEntity = input.read("Paper.SpawningEntity", net.minecraft.core.UUIDUtil.CODEC).orElse(null); @@ -10104,16 +10118,16 @@ index ffcfdbc80df2a9e6c546348b86e7615e6109eb49..3b812e0860e37d30d5d12f97410ed5fd // Paper end } -@@ -196,7 +327,7 @@ public class Phantom extends Mob implements Enemy { +@@ -196,7 +326,7 @@ public class Phantom extends Mob implements Enemy { output.putInt("size", this.getPhantomSize()); // Paper start output.storeNullable("Paper.SpawningEntity", net.minecraft.core.UUIDUtil.CODEC, this.spawningEntity); - output.putBoolean("Paper.ShouldBurnInDay", this.shouldBurnInDay); -+ output.putBoolean("Paper.ShouldBurnInDay", this.shouldBurnInDay); // Purpur - implemented in LivingEntity - API for any mob to burn daylight ++ //output.putBoolean("Paper.ShouldBurnInDay", this.shouldBurnInDay); // Purpur - implemented in LivingEntity - API for any mob to burn daylight // Paper end } -@@ -266,6 +397,7 @@ public class Phantom extends Mob implements Enemy { +@@ -266,6 +396,7 @@ public class Phantom extends Mob implements Enemy { List nearbyPlayers = serverLevel.getNearbyPlayers( this.attackTargeting, Phantom.this, Phantom.this.getBoundingBox().inflate(16.0, 64.0, 16.0) ); @@ -10121,7 +10135,7 @@ index ffcfdbc80df2a9e6c546348b86e7615e6109eb49..3b812e0860e37d30d5d12f97410ed5fd if (!nearbyPlayers.isEmpty()) { nearbyPlayers.sort(Comparator.comparing(Entity::getY).reversed()); -@@ -415,25 +547,160 @@ public class Phantom extends Mob implements Enemy { +@@ -415,25 +546,160 @@ public class Phantom extends Mob implements Enemy { } } @@ -10285,7 +10299,7 @@ index ffcfdbc80df2a9e6c546348b86e7615e6109eb49..3b812e0860e37d30d5d12f97410ed5fd if (Phantom.this.horizontalCollision) { Phantom.this.setYRot(Phantom.this.getYRot() + 180.0F); this.speed = 0.1F; -@@ -500,6 +767,12 @@ public class Phantom extends Mob implements Enemy { +@@ -500,6 +766,12 @@ public class Phantom extends Mob implements Enemy { return false; } else if (!target.isAlive()) { return false; @@ -12709,7 +12723,7 @@ index fce3f0f81d3195045cdc9ad7320f1d92f033c36d..352f55882ea77e8d89942e6c58ef3b4b blockPos = blockPos1; break; diff --git a/net/minecraft/world/entity/player/Player.java b/net/minecraft/world/entity/player/Player.java -index 1610ef636a0d93c1e07bad9e82ac4d9982c4e854..78dc237d5de38cff9f013d36da9bbb16104dec96 100644 +index 19e2ba14091b2fac74ce3b94da7a627029fcd914..6c9dfd76596b2e890b0b0dad5d98e8785a68c5a1 100644 --- a/net/minecraft/world/entity/player/Player.java +++ b/net/minecraft/world/entity/player/Player.java @@ -220,17 +220,40 @@ public abstract class Player extends LivingEntity { @@ -12802,7 +12816,7 @@ index 1610ef636a0d93c1e07bad9e82ac4d9982c4e854..78dc237d5de38cff9f013d36da9bbb16 } float f2 = f + f1; -@@ -1831,7 +1871,23 @@ public abstract class Player extends LivingEntity { +@@ -1830,7 +1870,23 @@ public abstract class Player extends LivingEntity { @Override protected int getBaseExperienceReward(ServerLevel level) { @@ -12827,7 +12841,7 @@ index 1610ef636a0d93c1e07bad9e82ac4d9982c4e854..78dc237d5de38cff9f013d36da9bbb16 } @Override -@@ -1870,6 +1926,13 @@ public abstract class Player extends LivingEntity { +@@ -1869,6 +1925,13 @@ public abstract class Player extends LivingEntity { return this.inventory.add(stack); } @@ -13315,7 +13329,7 @@ index 793e4528755fa5688efbad75418188e693ad0157..20f702c8266eb54a8835861188eb937f } diff --git a/net/minecraft/world/inventory/AbstractContainerMenu.java b/net/minecraft/world/inventory/AbstractContainerMenu.java -index f4548edae77eb86e54ba499acbb20613fd60d7bd..1f601781643945920c7522b9c6100d0a37ad535d 100644 +index 96da9b8e3556e58365dc6742f44d6dfd608e2953..2305a3ef6bbb21ab77cb261f20c08ac8ce1bf9ed 100644 --- a/net/minecraft/world/inventory/AbstractContainerMenu.java +++ b/net/minecraft/world/inventory/AbstractContainerMenu.java @@ -65,6 +65,7 @@ public abstract class AbstractContainerMenu { @@ -13911,10 +13925,10 @@ index bd919b9a83f9736f02783b1ba3863fd1b77c7e89..eb8d2d6f9c65185f5fe16a13ab0cdbba return optional; } else { diff --git a/net/minecraft/world/item/BlockItem.java b/net/minecraft/world/item/BlockItem.java -index b5b53168755525eccaa0a4361172006522cf4e05..2860d49c072d4b9e473390a84e45171b984b198e 100644 +index 6db566adf2d0df1d26221eda04aa01738df6d3d2..3dbdb5c30f8af89e768016bb683a4d2c1549aa0e 100644 --- a/net/minecraft/world/item/BlockItem.java +++ b/net/minecraft/world/item/BlockItem.java -@@ -145,7 +145,16 @@ public class BlockItem extends Item { +@@ -144,7 +144,16 @@ public class BlockItem extends Item { } protected boolean updateCustomBlockEntityTag(BlockPos pos, Level level, @Nullable Player player, ItemStack stack, BlockState state) { @@ -13932,7 +13946,7 @@ index b5b53168755525eccaa0a4361172006522cf4e05..2860d49c072d4b9e473390a84e45171b } @Nullable -@@ -212,6 +221,7 @@ public class BlockItem extends Item { +@@ -211,6 +220,7 @@ public class BlockItem extends Item { } if (!type.onlyOpCanSetNbt() || player != null && (player.canUseGameMasterBlocks() || (player.getAbilities().instabuild && player.getBukkitEntity().hasPermission("minecraft.nbt.place")))) { // Spigot - add permission @@ -13940,7 +13954,7 @@ index b5b53168755525eccaa0a4361172006522cf4e05..2860d49c072d4b9e473390a84e45171b return customData.loadInto(blockEntity, level.registryAccess()); } -@@ -253,6 +263,7 @@ public class BlockItem extends Item { +@@ -252,6 +262,7 @@ public class BlockItem extends Item { public void onDestroyed(ItemEntity itemEntity) { ItemContainerContents itemContainerContents = itemEntity.getItem().set(DataComponents.CONTAINER, ItemContainerContents.EMPTY); if (itemContainerContents != null) { @@ -14017,7 +14031,7 @@ index de287715568f358dd83383d68f845df9a7b5a117..8c7be8a71348a3e66c8bf6b6cb39fe00 return true; diff --git a/net/minecraft/world/item/CrossbowItem.java b/net/minecraft/world/item/CrossbowItem.java -index 45fc973971d00c35e5b715bfa6ae5042822ed35f..2ab3da301f7edbb811c2e055f75434a799ef093a 100644 +index 7c54e658acf32ba260457e32f4cc6620f80a5f3c..d49a5360d4a21e5b15bac94a823831e25d242a3d 100644 --- a/net/minecraft/world/item/CrossbowItem.java +++ b/net/minecraft/world/item/CrossbowItem.java @@ -66,7 +66,7 @@ public class CrossbowItem extends ProjectileWeaponItem { @@ -14045,7 +14059,7 @@ index d9c03b5e3768146bc8bcae2f86387b62ae89450b..eceb19b432d1bf5f1931568e78ab1e25 + // Purpur end - Shulker spawn from bullet options } diff --git a/net/minecraft/world/item/EggItem.java b/net/minecraft/world/item/EggItem.java -index ccae6089cdc4fffca7d759252006a13c2c14691a..c4097bd6acf671ddf857350154e6e1a04e76d64b 100644 +index 2dc15a06572401c22fa4b8009fa1cdc3ceef0473..75ce17c1fa8c74981c44f3dab7e82351eef3b2f3 100644 --- a/net/minecraft/world/item/EggItem.java +++ b/net/minecraft/world/item/EggItem.java @@ -24,7 +24,7 @@ public class EggItem extends Item implements ProjectileItem { @@ -14071,7 +14085,7 @@ index 49f94f242a0906e74eb58313cf095a0b04c304c4..0db35674726e3039f2c20aed1993d6d3 } else { BlockPos blockPos = clickedPos.above(); final BlockPos aboveBlockPos = blockPos; // Paper - OBFHELPER diff --git a/net/minecraft/world/item/EnderpearlItem.java b/net/minecraft/world/item/EnderpearlItem.java -index 3becd19d3264fa631497e967656cc7ca39252586..f824f155549857d5205ba67eb5916e0b0b65efb4 100644 +index 0b4464b23a85c237026b31ab224f599fea42d2ee..411ddda1003ac1b9bb75735154ffe8996ab8b6f3 100644 --- a/net/minecraft/world/item/EnderpearlItem.java +++ b/net/minecraft/world/item/EnderpearlItem.java @@ -24,7 +24,7 @@ public class EnderpearlItem extends Item { @@ -14092,7 +14106,7 @@ index 3becd19d3264fa631497e967656cc7ca39252586..f824f155549857d5205ba67eb5916e0b if (player instanceof net.minecraft.server.level.ServerPlayer serverPlayer) { serverPlayer.deregisterEnderPearl(thrownEnderpearl.projectile()); diff --git a/net/minecraft/world/item/FireworkRocketItem.java b/net/minecraft/world/item/FireworkRocketItem.java -index 83cfe63b0245f79d0873477ab3aae75f690ecb68..f32370217735b5e9556a0df7652682d89f23c595 100644 +index f86b0579e707ecfa5c2074ea22bbe383b5e11841..43a6d9bd3a2e301e3957e9933663c3aff43722d6 100644 --- a/net/minecraft/world/item/FireworkRocketItem.java +++ b/net/minecraft/world/item/FireworkRocketItem.java @@ -72,6 +72,17 @@ public class FireworkRocketItem extends Item implements ProjectileItem { @@ -14162,7 +14176,7 @@ index 3bf3d4030c4da65fa386a8b8083d259a6046d15e..77a8d5d334cd93d23149afa8e58f4114 consumer.accept(context); if (player != null) { diff --git a/net/minecraft/world/item/ItemStack.java b/net/minecraft/world/item/ItemStack.java -index 3acc2ae8533f19a6f9b2b6a1d96271f1047384a4..793c0a380b84d246db748be7e8807f1c0fa92d65 100644 +index 6ceb6cf302bad28e453fa89ec16083b0e0c5c398..8c713d90e81df61d65fa6770516afc4704bbbb6f 100644 --- a/net/minecraft/world/item/ItemStack.java +++ b/net/minecraft/world/item/ItemStack.java @@ -450,6 +450,7 @@ public final class ItemStack implements DataComponentHolder { @@ -14208,7 +14222,7 @@ index 3acc2ae8533f19a6f9b2b6a1d96271f1047384a4..793c0a380b84d246db748be7e8807f1c public int getDamageValue() { return Mth.clamp(this.getOrDefault(DataComponents.DAMAGE, 0), 0, this.getMaxDamage()); } -@@ -678,6 +700,14 @@ public final class ItemStack implements DataComponentHolder { +@@ -674,6 +696,14 @@ public final class ItemStack implements DataComponentHolder { org.bukkit.craftbukkit.event.CraftEventFactory.callPlayerItemBreakEvent(serverPlayer, this); // Paper - Add EntityDamageItemEvent } // CraftBukkit end @@ -14223,7 +14237,7 @@ index 3acc2ae8533f19a6f9b2b6a1d96271f1047384a4..793c0a380b84d246db748be7e8807f1c this.shrink(1); onBreak.accept(item); } -@@ -1210,6 +1240,12 @@ public final class ItemStack implements DataComponentHolder { +@@ -1206,6 +1236,12 @@ public final class ItemStack implements DataComponentHolder { return !this.getOrDefault(DataComponents.ENCHANTMENTS, ItemEnchantments.EMPTY).isEmpty(); } @@ -14271,7 +14285,7 @@ index ba0b254d43651bca1f29b5272af05d068fc37ba8..780793750c99185e8139a1cd0ad52bc7 int i = 1 << savedData.scale; int i1 = savedData.centerX; diff --git a/net/minecraft/world/item/MinecartItem.java b/net/minecraft/world/item/MinecartItem.java -index 620069daba04d48b57fc933328eda77f6ca9333e..0403b9b01994269d394820e8c8710ba1b9808bf0 100644 +index e116ba0c2a1335ad009abc75675bd339dc034bd2..19fb2091ed57f10af52116519a5ac31dd4e9aeb0 100644 --- a/net/minecraft/world/item/MinecartItem.java +++ b/net/minecraft/world/item/MinecartItem.java @@ -30,8 +30,9 @@ public class MinecartItem extends Item { @@ -14307,10 +14321,10 @@ index a928124ee46a10e9033f771970198e36712917a6..65ff8078474d5039238e9398d8cfc12e // Paper end - Add PlayerNameEntityEvent mob.setPersistenceRequired(); diff --git a/net/minecraft/world/item/ProjectileWeaponItem.java b/net/minecraft/world/item/ProjectileWeaponItem.java -index 1a9f91f3ee9c4d3902106eebd2639cc85a0dc34c..fb5077450aa9f7b7a03dd20c27a68dfdaab5ef06 100644 +index f35c8b81a55a9b8dbeb7c918d657cf65189642bd..f12b9e4e8a78c713782af548d1cb15ef363305b4 100644 --- a/net/minecraft/world/item/ProjectileWeaponItem.java +++ b/net/minecraft/world/item/ProjectileWeaponItem.java -@@ -109,6 +109,8 @@ public abstract class ProjectileWeaponItem extends Item { +@@ -106,6 +106,8 @@ public abstract class ProjectileWeaponItem extends Item { abstractArrow.setCritArrow(true); } @@ -14339,7 +14353,7 @@ index 887ac9f547ceaf76fd533ae47239a64c29a64b18..a290ad578498da07093ea31080cc3fbc afterAction = () -> { // Paper if (!level.isClientSide()) { diff --git a/net/minecraft/world/item/SnowballItem.java b/net/minecraft/world/item/SnowballItem.java -index 8eec16040fb9ae6bcccbd71bbe93521cdce5ccce..38b82537209449407922491506a7ca6224229ca9 100644 +index bef1a8faa8e9567c9707ffb2b34c278c75581e35..fa3a9501134226f269882a14900b924df7d25046 100644 --- a/net/minecraft/world/item/SnowballItem.java +++ b/net/minecraft/world/item/SnowballItem.java @@ -26,7 +26,7 @@ public class SnowballItem extends Item implements ProjectileItem { @@ -14380,7 +14394,7 @@ index 7a961e5ebbdac061f6e73e4ed07fe957ba759066..d48c1dedbd39770ccf3c9c3ff3351b39 level.sendBlockUpdated(clickedPos, blockState, blockState, 3); level.gameEvent(context.getPlayer(), GameEvent.BLOCK_CHANGE, clickedPos); diff --git a/net/minecraft/world/item/ThrowablePotionItem.java b/net/minecraft/world/item/ThrowablePotionItem.java -index 86198fb3150409b4b3e123982d8d3ba40b774621..6495c82fb88062875024c59a7c29d6d18b7a2f41 100644 +index 92a2a9c84d8f0a44dffee22834f5ae6c6b4fec43..e2cdb3d43eca6e0e52fb00fbf3801f4b0983c19b 100644 --- a/net/minecraft/world/item/ThrowablePotionItem.java +++ b/net/minecraft/world/item/ThrowablePotionItem.java @@ -24,7 +24,7 @@ public abstract class ThrowablePotionItem extends PotionItem implements Projecti @@ -14393,7 +14407,7 @@ index 86198fb3150409b4b3e123982d8d3ba40b774621..6495c82fb88062875024c59a7c29d6d1 if (event.callEvent() && thrownPotion.attemptSpawn()) { if (event.shouldConsume()) { diff --git a/net/minecraft/world/item/TridentItem.java b/net/minecraft/world/item/TridentItem.java -index df629e3f2defce5e65aaf874d7c5ddff71f39c28..34d15412b8f68ed1bae45b81ecf759c9c4d7e20c 100644 +index fac4c58ea5d467a8686e42676e2323fbddeb8c7b..7fe10d298a1204d87c0484f97f3767de6779c687 100644 --- a/net/minecraft/world/item/TridentItem.java +++ b/net/minecraft/world/item/TridentItem.java @@ -83,7 +83,7 @@ public class TridentItem extends Item implements ProjectileItem { @@ -14405,7 +14419,7 @@ index df629e3f2defce5e65aaf874d7c5ddff71f39c28..34d15412b8f68ed1bae45b81ecf759c9 ); // Paper start - PlayerLaunchProjectileEvent com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent event = new com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent((org.bukkit.entity.Player) player.getBukkitEntity(), org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(stack), (org.bukkit.entity.Projectile) tridentDelayed.projectile().getBukkitEntity()); -@@ -94,6 +94,7 @@ public class TridentItem extends Item implements ProjectileItem { +@@ -93,6 +93,7 @@ public class TridentItem extends Item implements ProjectileItem { return false; } ThrownTrident thrownTrident = tridentDelayed.projectile(); // Paper - PlayerLaunchProjectileEvent @@ -14413,7 +14427,7 @@ index df629e3f2defce5e65aaf874d7c5ddff71f39c28..34d15412b8f68ed1bae45b81ecf759c9 if (event.shouldConsume()) { stack.hurtWithoutBreaking(1, player); // Paper - PlayerLaunchProjectileEvent } -@@ -126,6 +127,18 @@ public class TridentItem extends Item implements ProjectileItem { +@@ -125,6 +126,18 @@ public class TridentItem extends Item implements ProjectileItem { f1 *= tridentSpinAttackStrength / squareRoot; f2 *= tridentSpinAttackStrength / squareRoot; org.bukkit.craftbukkit.event.CraftEventFactory.callPlayerRiptideEvent(player, stack, f, f1, f2); // CraftBukkit @@ -15085,7 +15099,7 @@ index d4fbf130e23a959be8268085067b3bea1541be9a..2e79ce7e02aaa4abcef1507bba71e030 + // Purpur end - bonemealable cactus } diff --git a/net/minecraft/world/level/block/CakeBlock.java b/net/minecraft/world/level/block/CakeBlock.java -index 72236993ebc4fbfc8b6316577caaa9c780bd447b..7c3b5170690af3bbdc856af96c3e01b0e55d6412 100644 +index cdd138a1d25a23fe3ca783383b45226154242ef0..fb820f05c5b9cbb1d4a99e26421ae639a1955365 100644 --- a/net/minecraft/world/level/block/CakeBlock.java +++ b/net/minecraft/world/level/block/CakeBlock.java @@ -109,6 +109,7 @@ public class CakeBlock extends Block { @@ -16873,10 +16887,10 @@ index 84f3073444ae9e11e5d11224d6af6474ced925e2..e53398996bbb278c6e06024d8ca945b3 } diff --git a/org/purpurmc/purpur/PurpurConfig.java b/org/purpurmc/purpur/PurpurConfig.java new file mode 100644 -index 0000000000000000000000000000000000000000..ed777b003140486fd5d8d1db7af770301e30bec9 +index 0000000000000000000000000000000000000000..88f737304d4f4a774956a1cc39b5c01c37a3891d --- /dev/null +++ b/org/purpurmc/purpur/PurpurConfig.java -@@ -0,0 +1,592 @@ +@@ -0,0 +1,597 @@ +package org.purpurmc.purpur; + +import com.google.common.base.Throwables; @@ -17452,6 +17466,11 @@ index 0000000000000000000000000000000000000000..ed777b003140486fd5d8d1db7af77030 + registerMinecraftDebugCommands = getBoolean("settings.register-minecraft-debug-commands", registerMinecraftDebugCommands); + } + ++ public static boolean registerMinecraftDisabledCommands = false; ++ private static void registerMinecraftDisabledCommands() { ++ registerMinecraftDisabledCommands = getBoolean("settings.register-minecraft-disabled-commands", registerMinecraftDebugCommands); ++ } ++ + public static List startupCommands = new ArrayList<>(); + private static void startupCommands() { + startupCommands.clear(); diff --git a/leaf-server/minecraft-patches/features/0109-Leaves-Protocol-Core.patch b/leaf-server/minecraft-patches/features/0109-Leaves-Protocol-Core.patch index d6a7221c..37612ba9 100644 --- a/leaf-server/minecraft-patches/features/0109-Leaves-Protocol-Core.patch +++ b/leaf-server/minecraft-patches/features/0109-Leaves-Protocol-Core.patch @@ -69,7 +69,7 @@ index 12e697a626ce68127ac2157fca0e5408beb13f0b..46118a63b721d445623c4d831881652d this.tickables.get(i).run(); } diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java -index c746d86439d45e60903248438a23cc1463154645..849428f5ad870ac93f29cec8bc7d3d335550cf14 100644 +index 940d6c2b5610e7bda00267db4108866d5cba3d8a..1105b9e12600b8fc0df664bfd2fa53c7ade78da2 100644 --- a/net/minecraft/server/level/ServerPlayer.java +++ b/net/minecraft/server/level/ServerPlayer.java @@ -437,6 +437,8 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc @@ -94,10 +94,10 @@ index ca9ba2a2535eab66622230778efdf941f540f6d2..95f89a415f7f7b9d4d7823744cb6bcc6 bridge.removeChannel(channel); } diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 1fda5f9d285a51fd642369b4cc32826c38019c69..aefe56847cab77cfc83ef24e965a1be9d9454107 100644 +index 7abe38f2c3939a2074b72f1d664ba5ad24fc591f..16e546fab3c7a025de7d04147b5b64d77b30c5a8 100644 --- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -3735,6 +3735,17 @@ public class ServerGamePacketListenerImpl +@@ -3677,6 +3677,17 @@ public class ServerGamePacketListenerImpl @Override public void handleCustomPayload(ServerboundCustomPayloadPacket packet) { diff --git a/leaf-server/minecraft-patches/features/0130-Improve-Purpur-AFK-system.patch b/leaf-server/minecraft-patches/features/0130-Improve-Purpur-AFK-system.patch index d0d598b2..50ed845d 100644 --- a/leaf-server/minecraft-patches/features/0130-Improve-Purpur-AFK-system.patch +++ b/leaf-server/minecraft-patches/features/0130-Improve-Purpur-AFK-system.patch @@ -7,10 +7,10 @@ AFK command & command cooldown AFK title message diff --git a/net/minecraft/commands/Commands.java b/net/minecraft/commands/Commands.java -index 1dc009e85403fe0b6a68daefecfe5cb25ad263cd..de450f9ef03944b101b483126af6a778ae8a4d1d 100644 +index 287c0936930ff4f3ca6dc2a4cbfc796a120fe4c0..3f32da75ee0a8a993b54e4156f7e4be9cc922ade 100644 --- a/net/minecraft/commands/Commands.java +++ b/net/minecraft/commands/Commands.java -@@ -277,6 +277,7 @@ public class Commands { +@@ -283,6 +283,7 @@ public class Commands { StopCommand.register(this.dispatcher); TransferCommand.register(this.dispatcher); WhitelistCommand.register(this.dispatcher); @@ -19,7 +19,7 @@ index 1dc009e85403fe0b6a68daefecfe5cb25ad263cd..de450f9ef03944b101b483126af6a778 org.purpurmc.purpur.command.DemoCommand.register(this.dispatcher); // Purpur - Add demo command org.purpurmc.purpur.command.PingCommand.register(this.dispatcher); // Purpur - Add ping command diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java -index 77ca4f505dc0a1aa6292cfcd957b734ab107f657..5f4dcb645670dd1b07ff865d50530b731f0ef769 100644 +index b8f586376fe0e75fb8fb219a07849764d987cd10..f3282991e922e5e1527a374e771f437718fb2b84 100644 --- a/net/minecraft/server/level/ServerPlayer.java +++ b/net/minecraft/server/level/ServerPlayer.java @@ -2423,6 +2423,10 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc @@ -53,7 +53,7 @@ index 77ca4f505dc0a1aa6292cfcd957b734ab107f657..5f4dcb645670dd1b07ff865d50530b73 } else { getBukkitEntity().setPlayerListName(prefix + scoreboardName + suffix, true); diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index c6b871037f9dea8c6cbe9d0a2acff2cb2a960c09..b3c138e78552ba348d67c37343c6684d37f2e10f 100644 +index a08351fc29a06f1db491b2aa8b79f1850bc8cb19..b3f45d5e8ff92c50adfc4885349ec0d29992037d 100644 --- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java @@ -2371,6 +2371,7 @@ public class ServerGamePacketListenerImpl @@ -164,7 +164,7 @@ index e999ce4ed3a1bba81f61085ead2565f2d3e90cfa..9026b45b6ee7f53f3a3872cda1a8c3f9 player.awardStat(Stats.LEAVE_GAME); // CraftBukkit start - Quitting must be before we do final save of data, in case plugins need to modify it diff --git a/org/purpurmc/purpur/PurpurConfig.java b/org/purpurmc/purpur/PurpurConfig.java -index 31450de492fbfdd83608ae668072bebd525db566..b83b4536ac756b797f6f2d14886372f01e91145c 100644 +index 21fa7e0e6838bf9a81ee6faf19c944e69b1fe740..f8045ef8b800b608388fbdc31337ab349a54b8a6 100644 --- a/org/purpurmc/purpur/PurpurConfig.java +++ b/org/purpurmc/purpur/PurpurConfig.java @@ -175,6 +175,11 @@ public class PurpurConfig { diff --git a/leaf-server/minecraft-patches/features/0141-Configurable-unknown-command-message.patch b/leaf-server/minecraft-patches/features/0141-Configurable-unknown-command-message.patch index 26912e28..f62a31f7 100644 --- a/leaf-server/minecraft-patches/features/0141-Configurable-unknown-command-message.patch +++ b/leaf-server/minecraft-patches/features/0141-Configurable-unknown-command-message.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Configurable unknown command message diff --git a/net/minecraft/commands/Commands.java b/net/minecraft/commands/Commands.java -index de450f9ef03944b101b483126af6a778ae8a4d1d..d201c3965d5a55de740175c140bc7ee411f1be78 100644 +index 3f32da75ee0a8a993b54e4156f7e4be9cc922ade..32a9d6e9b18ac1cf66c12462221ebb53f86eac3e 100644 --- a/net/minecraft/commands/Commands.java +++ b/net/minecraft/commands/Commands.java -@@ -405,31 +405,8 @@ public class Commands { +@@ -411,31 +411,8 @@ public class Commands { // Paper start - Add UnknownCommandEvent final net.kyori.adventure.text.TextComponent.Builder builder = net.kyori.adventure.text.Component.text(); // source.sendFailure(ComponentUtils.fromMessage(var7.getRawMessage())); @@ -41,7 +41,7 @@ index de450f9ef03944b101b483126af6a778ae8a4d1d..d201c3965d5a55de740175c140bc7ee4 org.bukkit.Bukkit.getServer().getPluginManager().callEvent(event); if (event.message() != null) { source.sendFailure(io.papermc.paper.adventure.PaperAdventure.asVanilla(event.message()), false); -@@ -663,6 +640,92 @@ public class Commands { +@@ -669,6 +646,92 @@ public class Commands { }; } diff --git a/leaf-server/minecraft-patches/features/0176-Optimize-Entity-distanceToSqr.patch b/leaf-server/minecraft-patches/features/0176-Optimize-Entity-distanceToSqr.patch index 1d659cca..ea11681c 100644 --- a/leaf-server/minecraft-patches/features/0176-Optimize-Entity-distanceToSqr.patch +++ b/leaf-server/minecraft-patches/features/0176-Optimize-Entity-distanceToSqr.patch @@ -8,7 +8,7 @@ avoids multiple casting in Entity#distanceTo, using Math#sqrt directly instead o these methods more able to be inlined by the JIT compiler. diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java -index 574be7359a2ad62c95a42c46c7a0f3c7a42eb44e..23b5695bf27663bbf1f2e3fd2010c0722ad425b0 100644 +index 2bed05da7e5ba52e85d437460679a7b81293fe5b..fde4109b27fbafd9db1eaeedf7a6cd754a84024d 100644 --- a/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java @@ -2260,31 +2260,6 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess @@ -43,7 +43,7 @@ index 574be7359a2ad62c95a42c46c7a0f3c7a42eb44e..23b5695bf27663bbf1f2e3fd2010c072 public void playerTouch(Player player) { } -@@ -5510,4 +5485,34 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -5509,4 +5484,34 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess return false; } // Purpur end - Ridables diff --git a/leaf-server/minecraft-patches/features/0211-SparklyPaper-Parallel-world-ticking.patch b/leaf-server/minecraft-patches/features/0211-SparklyPaper-Parallel-world-ticking.patch index 2ce99497..d89f61b4 100644 --- a/leaf-server/minecraft-patches/features/0211-SparklyPaper-Parallel-world-ticking.patch +++ b/leaf-server/minecraft-patches/features/0211-SparklyPaper-Parallel-world-ticking.patch @@ -664,7 +664,7 @@ index 498b1ab5013030c4b9fe0eca57215d93965c43b6..397ac1603c742b82e74cfb5d3e579935 // Paper start - extra debug info if (entity.valid) { diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java -index 42032812e3c50f3ade62a0e69cb1168d83c42a71..4140d5beb01b530e97ae308eedc639de70df696f 100644 +index 74cf3d2b8681fe75564ebeeefd2111d71c77c4df..bf50cc20f0254ad4115a9db8ca633e219dcfbaa0 100644 --- a/net/minecraft/server/level/ServerPlayer.java +++ b/net/minecraft/server/level/ServerPlayer.java @@ -465,6 +465,8 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc @@ -849,10 +849,10 @@ index f9e7532f86122a379692561a639a209a126e8bba..fab317d6c9a1c914f19bae11846cb576 if (isLocatorBarEnabledFor(player)) { if (!connection.isBroken()) { diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java -index fea6b829474e4fafbb9986a0c4fd73ae8fae1e09..8e4b092fb5f93cee60fc08ba08db143f2e5ab383 100644 +index 129248da7e1bfa5edc1c1a43c98a400f697e735f..4be8e90dfe99663ea84dae04d9bb2b0e3bb01098 100644 --- a/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java -@@ -3510,15 +3510,40 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3509,15 +3509,40 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess if (this.portalProcess != null) { if (this.portalProcess.processPortalTeleportation(serverLevel, this, this.canUsePortal(false))) { this.setPortalCooldown(); @@ -900,7 +900,7 @@ index fea6b829474e4fafbb9986a0c4fd73ae8fae1e09..8e4b092fb5f93cee60fc08ba08db143f } else if (this.portalProcess.hasExpired()) { this.portalProcess = null; } -@@ -4095,6 +4120,8 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -4094,6 +4119,8 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } private Entity teleportCrossDimension(ServerLevel oldLevel, ServerLevel newLevel, TeleportTransition teleportTransition) { @@ -1090,7 +1090,7 @@ index 2258736e6f9f52efe5bd353b8949a7a0b9a4fdb8..aa71eca6cd69cfa79b84cb181c25c4be } else { Entity entity = owner.teleport( diff --git a/net/minecraft/world/inventory/AbstractContainerMenu.java b/net/minecraft/world/inventory/AbstractContainerMenu.java -index 1f601781643945920c7522b9c6100d0a37ad535d..f32148322f56f766108c6958124731a885c3bbc7 100644 +index 2305a3ef6bbb21ab77cb261f20c08ac8ce1bf9ed..2e05f740943b3088fc10606bfe37417be404e747 100644 --- a/net/minecraft/world/inventory/AbstractContainerMenu.java +++ b/net/minecraft/world/inventory/AbstractContainerMenu.java @@ -96,8 +96,14 @@ public abstract class AbstractContainerMenu { @@ -1109,7 +1109,7 @@ index 1f601781643945920c7522b9c6100d0a37ad535d..f32148322f56f766108c6958124731a8 this.containerId = containerId; } diff --git a/net/minecraft/world/item/ItemStack.java b/net/minecraft/world/item/ItemStack.java -index 793c0a380b84d246db748be7e8807f1c0fa92d65..7cf8894b1fd6283567dca0b7d0b945b2fbae1b8c 100644 +index 8c713d90e81df61d65fa6770516afc4704bbbb6f..f5ca3d6b29b11475ac56cd206464577b2d85b7dc 100644 --- a/net/minecraft/world/item/ItemStack.java +++ b/net/minecraft/world/item/ItemStack.java @@ -398,8 +398,8 @@ public final class ItemStack implements DataComponentHolder { diff --git a/leaf-server/minecraft-patches/features/0213-PaperPR-Fix-cancelled-Projectile-Events-still-consum.patch b/leaf-server/minecraft-patches/features/0213-PaperPR-Fix-cancelled-Projectile-Events-still-consum.patch index 3983b986..6d53d270 100644 --- a/leaf-server/minecraft-patches/features/0213-PaperPR-Fix-cancelled-Projectile-Events-still-consum.patch +++ b/leaf-server/minecraft-patches/features/0213-PaperPR-Fix-cancelled-Projectile-Events-still-consum.patch @@ -27,7 +27,7 @@ index ce1ce18410fc1d47d999c918a8f880b43bf9797c..b9d31b0cbeabd5c62b810e50f6128786 level.playSound( diff --git a/net/minecraft/world/item/CrossbowItem.java b/net/minecraft/world/item/CrossbowItem.java -index 2ab3da301f7edbb811c2e055f75434a799ef093a..74fd1472d6840b7106d8f424319170e2e891bbac 100644 +index d49a5360d4a21e5b15bac94a823831e25d242a3d..2c2f169096fa904adb4cda0186bae7d0ab35f1e3 100644 --- a/net/minecraft/world/item/CrossbowItem.java +++ b/net/minecraft/world/item/CrossbowItem.java @@ -95,7 +95,7 @@ public class CrossbowItem extends ProjectileWeaponItem { @@ -65,7 +65,7 @@ index 2ab3da301f7edbb811c2e055f75434a799ef093a..74fd1472d6840b7106d8f424319170e2 CriteriaTriggers.SHOT_CROSSBOW.trigger(serverPlayer, weapon); serverPlayer.awardStat(Stats.ITEM_USED.get(weapon.getItem())); diff --git a/net/minecraft/world/item/ProjectileWeaponItem.java b/net/minecraft/world/item/ProjectileWeaponItem.java -index fb5077450aa9f7b7a03dd20c27a68dfdaab5ef06..f37fd3b9ab725e5b8eb7fccf9b35bbc09e3a2d0c 100644 +index f12b9e4e8a78c713782af548d1cb15ef363305b4..d1661c9b971ba431da3f71fd6e0c3517c6625a11 100644 --- a/net/minecraft/world/item/ProjectileWeaponItem.java +++ b/net/minecraft/world/item/ProjectileWeaponItem.java @@ -40,7 +40,20 @@ public abstract class ProjectileWeaponItem extends Item { @@ -131,10 +131,10 @@ index fb5077450aa9f7b7a03dd20c27a68dfdaab5ef06..f37fd3b9ab725e5b8eb7fccf9b35bbc0 if (event.getProjectile() == projectile.getBukkitEntity()) { if (Projectile.spawnProjectile( -@@ -82,7 +115,25 @@ public abstract class ProjectileWeaponItem extends Item { - if (shooter instanceof net.minecraft.server.level.ServerPlayer serverPlayer) { - serverPlayer.containerMenu.sendAllDataToRemote(); - } +@@ -79,7 +112,25 @@ public abstract class ProjectileWeaponItem extends Item { + level, + itemStack + ).isRemoved()) { - return; + // Paper start - prevent item consumption for cancelled events + continue; // call for each shot projectile @@ -158,7 +158,7 @@ index fb5077450aa9f7b7a03dd20c27a68dfdaab5ef06..f37fd3b9ab725e5b8eb7fccf9b35bbc0 } } // CraftBukkit end -@@ -92,6 +143,7 @@ public abstract class ProjectileWeaponItem extends Item { +@@ -89,6 +140,7 @@ public abstract class ProjectileWeaponItem extends Item { } } } @@ -166,7 +166,7 @@ index fb5077450aa9f7b7a03dd20c27a68dfdaab5ef06..f37fd3b9ab725e5b8eb7fccf9b35bbc0 } protected int getDurabilityUse(ItemStack stack) { -@@ -115,11 +167,21 @@ public abstract class ProjectileWeaponItem extends Item { +@@ -112,11 +164,21 @@ public abstract class ProjectileWeaponItem extends Item { } protected static List draw(ItemStack weapon, ItemStack ammo, LivingEntity shooter) { @@ -192,7 +192,7 @@ index fb5077450aa9f7b7a03dd20c27a68dfdaab5ef06..f37fd3b9ab725e5b8eb7fccf9b35bbc0 if (ammo.isEmpty()) { return List.of(); } else { -@@ -127,8 +189,9 @@ public abstract class ProjectileWeaponItem extends Item { +@@ -124,8 +186,9 @@ public abstract class ProjectileWeaponItem extends Item { List list = new ArrayList<>(i); ItemStack itemStack = ammo.copy(); @@ -203,7 +203,7 @@ index fb5077450aa9f7b7a03dd20c27a68dfdaab5ef06..f37fd3b9ab725e5b8eb7fccf9b35bbc0 if (!itemStack1.isEmpty()) { list.add(itemStack1); } -@@ -139,17 +202,23 @@ public abstract class ProjectileWeaponItem extends Item { +@@ -136,17 +199,23 @@ public abstract class ProjectileWeaponItem extends Item { } protected static ItemStack useAmmo(ItemStack weapon, ItemStack ammo, LivingEntity shooter, boolean intangable) { diff --git a/leaf-server/minecraft-patches/features/0227-Prevent-double-chunk-retrieving-in-entity-fluid-push.patch b/leaf-server/minecraft-patches/features/0227-Prevent-double-chunk-retrieving-in-entity-fluid-push.patch index 455bea9b..bba19a09 100644 --- a/leaf-server/minecraft-patches/features/0227-Prevent-double-chunk-retrieving-in-entity-fluid-push.patch +++ b/leaf-server/minecraft-patches/features/0227-Prevent-double-chunk-retrieving-in-entity-fluid-push.patch @@ -11,10 +11,10 @@ As part of: Airplane (https://github.com/TECHNOVE/Airplane) Licensed under: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html) diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java -index 8e4b092fb5f93cee60fc08ba08db143f2e5ab383..9a13cf8460472b8d3968cd8269a2b63d0b49f1a9 100644 +index 4be8e90dfe99663ea84dae04d9bb2b0e3bb01098..aa1c937f8cee164b9e832b7d155bcbcf22e95b63 100644 --- a/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java -@@ -4813,10 +4813,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -4812,10 +4812,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess // Paper start - optimise collisions public boolean updateFluidHeightAndDoFluidPushing(final TagKey fluid, final double flowScale) { @@ -26,7 +26,7 @@ index 8e4b092fb5f93cee60fc08ba08db143f2e5ab383..9a13cf8460472b8d3968cd8269a2b63d final AABB boundingBox = this.getBoundingBox().deflate(1.0E-3); final Level world = this.level; -@@ -4852,7 +4849,11 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -4851,7 +4848,11 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess for (int currChunkZ = minChunkZ; currChunkZ <= maxChunkZ; ++currChunkZ) { for (int currChunkX = minChunkX; currChunkX <= maxChunkX; ++currChunkX) { diff --git a/leaf-server/minecraft-patches/features/0241-Flush-location-while-knockback.patch b/leaf-server/minecraft-patches/features/0241-Flush-location-while-knockback.patch index 1e3f1108..26b7f38c 100644 --- a/leaf-server/minecraft-patches/features/0241-Flush-location-while-knockback.patch +++ b/leaf-server/minecraft-patches/features/0241-Flush-location-while-knockback.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Flush location while knockback diff --git a/net/minecraft/world/entity/player/Player.java b/net/minecraft/world/entity/player/Player.java -index 78dc237d5de38cff9f013d36da9bbb16104dec96..2dcc4446f898124dfc9134f9fae892167256d724 100644 +index 6c9dfd76596b2e890b0b0dad5d98e8785a68c5a1..731f50fa6786557db0a1745442b2ad61a6685375 100644 --- a/net/minecraft/world/entity/player/Player.java +++ b/net/minecraft/world/entity/player/Player.java @@ -1363,6 +1363,13 @@ public abstract class Player extends LivingEntity { @@ -34,4 +34,4 @@ index 78dc237d5de38cff9f013d36da9bbb16104dec96..2dcc4446f898124dfc9134f9fae89216 + // Leaf end - Flush location while knockback } else { sendSoundEffect(this, this.getX(), this.getY(), this.getZ(), SoundEvents.PLAYER_ATTACK_NODAMAGE, this.getSoundSource(), 1.0F, 1.0F); // Paper - send while respecting visibility - this.containerMenu.sendAllDataToRemote(); // CraftBukkit - resync on cancelled event + // CraftBukkit end diff --git a/leaf-server/minecraft-patches/features/0263-Fix-crash-during-parsing-unknown-command-message.patch b/leaf-server/minecraft-patches/features/0263-Fix-crash-during-parsing-unknown-command-message.patch index 4acd9e3e..511d1155 100644 --- a/leaf-server/minecraft-patches/features/0263-Fix-crash-during-parsing-unknown-command-message.patch +++ b/leaf-server/minecraft-patches/features/0263-Fix-crash-during-parsing-unknown-command-message.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Fix crash during parsing unknown command message Use direct impl for unknown commands message parse to prevent crash diff --git a/net/minecraft/commands/Commands.java b/net/minecraft/commands/Commands.java -index d201c3965d5a55de740175c140bc7ee411f1be78..38e3c638c8df954f62e8405883bf7a78b19691c3 100644 +index 32a9d6e9b18ac1cf66c12462221ebb53f86eac3e..5f80c7b06411e0ad9b0f71f03bb4568daea3ea4d 100644 --- a/net/minecraft/commands/Commands.java +++ b/net/minecraft/commands/Commands.java -@@ -654,7 +654,7 @@ public class Commands { +@@ -660,7 +660,7 @@ public class Commands { net.kyori.adventure.text.Component detailComponent = null; if (rawMessage.contains("")) { @@ -18,7 +18,7 @@ index d201c3965d5a55de740175c140bc7ee411f1be78..38e3c638c8df954f62e8405883bf7a78 } final String input = commandSyntaxException.getInput(); -@@ -697,7 +697,7 @@ public class Commands { +@@ -703,7 +703,7 @@ public class Commands { private static net.kyori.adventure.text.Component getVanillaUnknownCommandMessage( net.kyori.adventure.text.TextComponent.Builder builder, CommandSyntaxException var7, String command ) { diff --git a/leaf-server/minecraft-patches/features/0270-optimize-waypoint.patch b/leaf-server/minecraft-patches/features/0270-optimize-waypoint.patch index be092c36..6aec3971 100644 --- a/leaf-server/minecraft-patches/features/0270-optimize-waypoint.patch +++ b/leaf-server/minecraft-patches/features/0270-optimize-waypoint.patch @@ -5,10 +5,10 @@ Subject: [PATCH] optimize waypoint diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java -index eff20b8de6bddfeec4f25e6381bf914bca38e1c6..f408c1f89435b473896249834a081a0b34aa7767 100644 +index bdac75d6c9805af0363d2d183330318ca2ff82da..2b29b0e5334ad9f8b3768e9b198565f093c6d3a4 100644 --- a/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java -@@ -5145,6 +5145,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -5144,6 +5144,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess return; } // Paper end - Block invalid positions and bounding box @@ -16,7 +16,7 @@ index eff20b8de6bddfeec4f25e6381bf914bca38e1c6..f408c1f89435b473896249834a081a0b if (this.position.x != x || this.position.y != y || this.position.z != z) { synchronized (this.posLock) { // Paper - detailed watchdog information this.position = new Vec3(x, y, z); -@@ -5152,7 +5153,8 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -5151,7 +5152,8 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess int floor = Mth.floor(x); int floor1 = Mth.floor(y); int floor2 = Mth.floor(z); @@ -26,7 +26,7 @@ index eff20b8de6bddfeec4f25e6381bf914bca38e1c6..f408c1f89435b473896249834a081a0b this.blockPosition = new BlockPos(floor, floor1, floor2); this.inBlockState = null; if (SectionPos.blockToSectionCoord(floor) != this.chunkPosition.x || SectionPos.blockToSectionCoord(floor2) != this.chunkPosition.z) { -@@ -5161,7 +5163,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -5160,7 +5162,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } this.levelCallback.onMove(); diff --git a/leaf-server/minecraft-patches/features/0271-Paw-optimization.patch b/leaf-server/minecraft-patches/features/0271-Paw-optimization.patch index 991829eb..541c9b86 100644 --- a/leaf-server/minecraft-patches/features/0271-Paw-optimization.patch +++ b/leaf-server/minecraft-patches/features/0271-Paw-optimization.patch @@ -132,7 +132,7 @@ index 307738d09dc4eb5918cbfb1153feb739fbc1cc68..0fc09b85e9d8e12f8103dcf755afa392 private void tickPassenger(Entity ridingEntity, Entity passengerEntity, final boolean isActive) { // Paper - EAR 2 diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java -index f408c1f89435b473896249834a081a0b34aa7767..918cb68282ce179c6c3f5455f108501f7e965068 100644 +index 2b29b0e5334ad9f8b3768e9b198565f093c6d3a4..086525c31bd8167baac79a7f41e3e4d1ca783136 100644 --- a/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java @@ -1170,16 +1170,6 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess @@ -183,7 +183,7 @@ index f408c1f89435b473896249834a081a0b34aa7767..918cb68282ce179c6c3f5455f108501f } private void applyMovementEmissionAndPlaySound(Entity.MovementEmission movementEmission, Vec3 movement, BlockPos pos, BlockState state) { -@@ -5046,9 +5020,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -5045,9 +5019,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } public void setDeltaMovement(Vec3 deltaMovement) { @@ -193,7 +193,7 @@ index f408c1f89435b473896249834a081a0b34aa7767..918cb68282ce179c6c3f5455f108501f } public void addDeltaMovement(Vec3 addend) { -@@ -5147,9 +5119,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -5146,9 +5118,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess // Paper end - Block invalid positions and bounding box boolean blockUpdated; // Leaf - optimize waypoint if (this.position.x != x || this.position.y != y || this.position.z != z) { diff --git a/leaf-server/paper-patches/features/0009-Purpur-Server-Paper-Changes.patch b/leaf-server/paper-patches/features/0009-Purpur-Server-Paper-Changes.patch index aa29b756..fc06bb72 100644 --- a/leaf-server/paper-patches/features/0009-Purpur-Server-Paper-Changes.patch +++ b/leaf-server/paper-patches/features/0009-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: 2d8cdd15c79fce29455eaf8bedfc203bd16ca4d7 +Commit: 11c030a8f81b2f845a9f2749790692c2d152f284 Patches listed below are removed in this patch, They exists in Gale or Leaf: * "Rebrand.patch" @@ -1067,6 +1067,25 @@ index 02deb9c37250144be9afa0fe55df2a49017a7070..dfb597fcb8d01ed6cf20eae57e260949 + } + // Purpur end - Llama API } +diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPhantom.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPhantom.java +index cabdcbef0e6f7ca41ff5677bc2e6a81665ca812d..c47ca9ab164b6abd28e979c94456918162e49214 100644 +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPhantom.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPhantom.java +@@ -35,12 +35,12 @@ public class CraftPhantom extends CraftMob implements Phantom, CraftEnemy { + + @Override + public boolean shouldBurnInDay() { +- return this.getHandle().shouldBurnInDay; ++ return this.getHandle().shouldBurnInDay(); // Purpur - API for any mob to burn daylight + } + + @Override + public void setShouldBurnInDay(boolean shouldBurnInDay) { +- this.getHandle().shouldBurnInDay = shouldBurnInDay; ++ this.getHandle().setShouldBurnInDay(shouldBurnInDay); // Purpur - API for any mob to burn daylight + } + + @Override diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java index 9d6235390c530b4f3780ac8d088ad8f6ee3db58e..ab454a7c53b074c8c60bab38c0544aa3b69d5c6d 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -1292,7 +1311,7 @@ index 723a8e659485850632adf173e52669e6e4f3fcc0..98880f082af386f2a1dc64bc13667030 + // Purpur end - Configurable chance for wolves to spawn rabid } diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -index 1d112510093d5eb5117adf16b92dd3411a610a4a..a162440a583801671787163d998d6b9546ef7e61 100644 +index 183d83f023644c9c5dba0702ba2464566e74ad32..658385b2887d6debec7fc941c28621da5d263411 100644 --- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java @@ -525,6 +525,15 @@ public class CraftEventFactory {