diff --git a/gradle.properties b/gradle.properties index b830ef17..9edc8c4c 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=94af07ac59b7d1c87c0025b9ae17c624092b9272 +galeCommit=73519d55c52e34c33820139d80f9fc8d5fdfe783 org.gradle.configuration-cache=true org.gradle.caching=true 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 a6207a54..5395350e 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: e6a1ebd3f6e4cfe93f96dd82ecb3234f0482768a +Commit: 22bd4186ca92f21a01714ba8e6b4823ccc576c81 Patches listed below are removed in this patch, They exists in Gale or Leaf: * "co/aikar/timings/TimedEventExecutor.java.patch" @@ -579,10 +579,10 @@ index 84b5626a0ccd4fd1976f28eeb2ae99acdb62afa8..13346dfe2a6d848cf63cbba95d8dea8d + // Purpur end - Debug Marker API } diff --git a/src/main/java/org/bukkit/World.java b/src/main/java/org/bukkit/World.java -index 8784842d14bbbe7dbde181e86782a0955be66924..3af8eb8064aeafa3606fed23e7ca2bc74c194726 100644 +index 015d852d5a0c01042a2153a6916d408660356c59..886b0eac9f3047c54cc788f05507893e31f7ad6d 100644 --- a/src/main/java/org/bukkit/World.java +++ b/src/main/java/org/bukkit/World.java -@@ -4253,6 +4253,86 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient +@@ -4278,6 +4278,86 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient @Nullable public DragonBattle getEnderDragonBattle(); @@ -802,7 +802,7 @@ index 7b379fb21e800a766ad022705a12dff6d42279ab..10a8d64ad2da0be2c14f34c3e7d1957c // Paper start /** diff --git a/src/main/java/org/bukkit/entity/Entity.java b/src/main/java/org/bukkit/entity/Entity.java -index ddf7829eee5e3f0ded9319a5a0a7b2e2486320a4..49d3ca54a761e08cfe1bc770cb879223bf0e21e8 100644 +index 1dac39dec5ad636799984574caeb328818a3c5c9..be56f0f42d4ec23397f9974e158b49fcc7ed44f3 100644 --- a/src/main/java/org/bukkit/entity/Entity.java +++ b/src/main/java/org/bukkit/entity/Entity.java @@ -1196,4 +1196,59 @@ public interface Entity extends Metadatable, CommandSender, Nameable, Persistent @@ -1008,7 +1008,7 @@ index bc84b892cae5fe7019a3ad481e9da79956efa1fe..48eb5b00c460cccde29d327cef1d63fc + // Purpur end } diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java -index a6356997a51a441ca65414dd7e3579c1c0f885d4..ca8abdebf8e9d23e982883a7283fdedf12a36170 100644 +index 8c2cc023bf76c0ba2be06f7c792e0a5ca9aa92ce..c8d13654e2e572272c6307abd2b4d590f4e1507d 100644 --- a/src/main/java/org/bukkit/entity/Player.java +++ b/src/main/java/org/bukkit/entity/Player.java @@ -3912,4 +3912,123 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM @@ -1321,11 +1321,11 @@ index f1f97a85ec713c05c882d7588f4a3e4a017f4795..813f6cd253322538bdf96eb323dd23a7 + // Purpur end } diff --git a/src/main/java/org/bukkit/inventory/ItemStack.java b/src/main/java/org/bukkit/inventory/ItemStack.java -index 55457c7539c08e861263333ae40cbfe9d25814f4..9b3c3d6563c94aec225a332db5d5653887ac5f4b 100644 +index c84cddac865ac5ae51618609714793099d126529..1eb468784fd323fe824ebcde6a3e35b5f00a9118 100644 --- a/src/main/java/org/bukkit/inventory/ItemStack.java +++ b/src/main/java/org/bukkit/inventory/ItemStack.java -@@ -21,6 +21,13 @@ import org.bukkit.inventory.meta.ItemMeta; - import org.bukkit.material.MaterialData; +@@ -21,6 +21,13 @@ import org.bukkit.material.MaterialData; + import org.bukkit.persistence.PersistentDataContainer; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +// Purpur start - ItemStack convenience methods @@ -1338,7 +1338,7 @@ index 55457c7539c08e861263333ae40cbfe9d25814f4..9b3c3d6563c94aec225a332db5d56538 /** * Represents a stack of items. -@@ -1329,4 +1336,482 @@ public class ItemStack implements Cloneable, ConfigurationSerializable, Translat +@@ -1345,4 +1352,482 @@ public class ItemStack implements Cloneable, ConfigurationSerializable, Translat return this.craftDelegate.matchesWithoutData(item, excludeTypes, ignoreCount); } // Paper end - data component API diff --git a/leaf-api/paper-patches/features/0010-Async-structure-locate-api.patch b/leaf-api/paper-patches/features/0010-Async-structure-locate-api.patch index 2d8985be..9240fdb6 100644 --- a/leaf-api/paper-patches/features/0010-Async-structure-locate-api.patch +++ b/leaf-api/paper-patches/features/0010-Async-structure-locate-api.patch @@ -9,10 +9,10 @@ Added some asynchronous structure locate methods in World, requires async-locator to be enabled in Leaf config, or else it will fall back to sync methods. diff --git a/src/main/java/org/bukkit/World.java b/src/main/java/org/bukkit/World.java -index 3af8eb8064aeafa3606fed23e7ca2bc74c194726..2d314d7f75f320384c20c97f60c0c9611b890316 100644 +index 886b0eac9f3047c54cc788f05507893e31f7ad6d..f354527ada36431e95595ef60557e6b13360f75a 100644 --- a/src/main/java/org/bukkit/World.java +++ b/src/main/java/org/bukkit/World.java -@@ -4047,6 +4047,60 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient +@@ -4072,6 +4072,60 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient @Nullable StructureSearchResult locateNearestStructure(@NotNull Location origin, @NotNull Structure structure, int radius, boolean findUnexplored); diff --git a/leaf-server/minecraft-patches/features/0001-Rebrand.patch b/leaf-server/minecraft-patches/features/0001-Rebrand.patch index 93daabf8..4ec276e9 100644 --- a/leaf-server/minecraft-patches/features/0001-Rebrand.patch +++ b/leaf-server/minecraft-patches/features/0001-Rebrand.patch @@ -35,18 +35,18 @@ index 3e0e88afcf010d9a3d46e48bca5cbdf98fe97544..5a9173b6039ee8404529a04904c5f9e9 public SystemReport getSystemReport() { diff --git a/net/minecraft/world/damagesource/DamageSource.java b/net/minecraft/world/damagesource/DamageSource.java -index aea139e47a0866c63c0fc6728840e5ad92a26403..ac7352a2b264abf4db4b89f39a2c86f390776336 100644 +index fb5e47278a62f3896a2a1ed144bad45ba3de080a..0d9e5aab214df54a7a24bec45fcc8ad85f699710 100644 --- a/net/minecraft/world/damagesource/DamageSource.java +++ b/net/minecraft/world/damagesource/DamageSource.java -@@ -66,7 +66,7 @@ public class DamageSource { +@@ -49,7 +49,7 @@ public class DamageSource { - public DamageSource customEventDamager(Entity entity) { + public DamageSource eventEntityDamager(final Entity entity) { if (this.directEntity != null) { -- throw new IllegalStateException("Cannot set custom event damager when direct entity is already set (report a bug to Paper, if you think this is a Gale bug, please report it at https://github.com/GaleMC/Gale/issues)"); // Gale - branding changes -+ throw new IllegalStateException("Cannot set custom event damager when direct entity is already set (report a bug to Paper, if you think this is a Leaf bug, please report it at https://github.com/Winds-Studio/Leaf/issues)"); // Gale - branding changes // Leaf - Rebrand +- throw new IllegalStateException("Cannot set an event damager when a direct entity is already set (report a bug to Paper, if you think this is a Gale bug, please report it at https://github.com/GaleMC/Gale/issues)"); // Gale - branding changes ++ throw new IllegalStateException("Cannot set an event damager when a direct entity is already set (report a bug to Paper, if you think this is a Leaf bug, please report it at https://github.com/Winds-Studio/Leaf/issues)"); // Gale - branding changes // Leaf - Rebrand } - DamageSource damageSource = this.cloneInstance(); - damageSource.customEventDamager = entity; + final DamageSource damageSource = this.copy(); + damageSource.eventEntityDamager = entity; diff --git a/net/minecraft/world/level/chunk/storage/RegionFileStorage.java b/net/minecraft/world/level/chunk/storage/RegionFileStorage.java index 3abb8aefcca325e28f0af07bd859be74f0aee08d..320e9e24711d2a326313b3a202c7ef987f71f229 100644 --- a/net/minecraft/world/level/chunk/storage/RegionFileStorage.java diff --git a/leaf-server/minecraft-patches/features/0004-Pufferfish-Dynamic-Activation-of-Brain.patch b/leaf-server/minecraft-patches/features/0004-Pufferfish-Dynamic-Activation-of-Brain.patch index 590e1e80..9e7d7b46 100644 --- a/leaf-server/minecraft-patches/features/0004-Pufferfish-Dynamic-Activation-of-Brain.patch +++ b/leaf-server/minecraft-patches/features/0004-Pufferfish-Dynamic-Activation-of-Brain.patch @@ -32,7 +32,7 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . diff --git a/io/papermc/paper/entity/activation/ActivationRange.java b/io/papermc/paper/entity/activation/ActivationRange.java -index 54916fe57ceeab24936ce50709402ecf1fcd9a10..cd2fa33f6e655419f2a1155aed8566742385d922 100644 +index 6db99585fa47fe2d2ae6eff8efe16190dd756511..a9269356de964585028e69a3713ca64f67ba02bf 100644 --- a/io/papermc/paper/entity/activation/ActivationRange.java +++ b/io/papermc/paper/entity/activation/ActivationRange.java @@ -173,6 +173,22 @@ public final class ActivationRange { @@ -73,7 +73,7 @@ index 54916fe57ceeab24936ce50709402ecf1fcd9a10..cd2fa33f6e655419f2a1155aed856674 } } diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java -index 7c9496e8564c2464e79661153fd295bb027b7bdb..95d69c4b40e4ebe12d8033dbcc7ba195a0ccfb5a 100644 +index 9fe9ce0488be5eeb4f5da2f2716accc2093f6a4e..e1f5e3cc57a8c2945b7925a31bde06f6c6525726 100644 --- a/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java @@ -781,6 +781,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe @@ -85,13 +85,13 @@ index 7c9496e8564c2464e79661153fd295bb027b7bdb..95d69c4b40e4ebe12d8033dbcc7ba195 if (!tickRateManager.isEntityFrozen(entity)) { entity.checkDespawn(); diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java -index a839042a883831ab5bf7bca7fa707b10a97689f8..22af2c4996601847f2bbe9d6fef2fc4bd82725fc 100644 +index 4ea2672aae628ab1b6a72cb486aa917be5ab0cab..c2a2892d34497a616951f4689ab6126191d9f655 100644 --- a/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java -@@ -335,6 +335,8 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess - public boolean freezeLocked = false; // Paper - Freeze Tick Lock API +@@ -336,6 +336,8 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess public boolean fixedPose = false; // Paper - Expand Pose API private final int despawnTime; // Paper - entity despawn time limit + public int totalEntityAge; // Paper - age-like counter for all entities + public boolean activatedPriorityReset = false; // Pufferfish - DAB + public int activatedPriority = org.dreeam.leaf.config.modules.opt.DynamicActivationofBrain.maximumActivationPrio; // Pufferfish - DAB (golf score) public final io.papermc.paper.entity.activation.ActivationType activationType = io.papermc.paper.entity.activation.ActivationType.activationTypeFor(this); // Paper - EAR 2/tracking ranges diff --git a/leaf-server/minecraft-patches/features/0006-Purpur-Server-Minecraft-Changes.patch b/leaf-server/minecraft-patches/features/0006-Purpur-Server-Minecraft-Changes.patch index 352c6c8e..83f7a55b 100644 --- a/leaf-server/minecraft-patches/features/0006-Purpur-Server-Minecraft-Changes.patch +++ b/leaf-server/minecraft-patches/features/0006-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: e6a1ebd3f6e4cfe93f96dd82ecb3234f0482768a +Commit: 22bd4186ca92f21a01714ba8e6b4823ccc576c81 Patches listed below are removed in this patch, They exists in Gale or Leaf: * "net/minecraft/CrashReport.java.patch" @@ -118,7 +118,7 @@ index c2b7164a1395842ab95428540782eeda4c7960b0..59c70c567051bc7dba0d308387352d1b 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 60cfa713ffc778d0cd11dfb2ea1a52db806119b2..967c01f9e40c2c73f266de281425c918472cf66e 100644 +index fadc6c2494ac3aaa426d16d36adc688e1f39e27a..06df7711ca33d592d9a23ef0b2c3e73b468e2f57 100644 --- a/net/minecraft/commands/Commands.java +++ b/net/minecraft/commands/Commands.java @@ -213,8 +213,8 @@ public class Commands { @@ -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 95d69c4b40e4ebe12d8033dbcc7ba195a0ccfb5a..bb38adebfcf2e3c52971a79d8363a45f067727a9 100644 +index e1f5e3cc57a8c2945b7925a31bde06f6c6525726..cb8556fcf50293341cb090616e1e25e04d2eb5d8 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 @@ -896,7 +896,7 @@ index 95d69c4b40e4ebe12d8033dbcc7ba195a0ccfb5a..bb38adebfcf2e3c52971a79d8363a45f 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. -@@ -2657,7 +2728,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -2659,7 +2730,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 657fbc5e5d81b44fefc2d9d6c6bfe47f179a7843..ca16bef85f94ffb87eb27c9ec1429cba77e7fbc1 100644 +index e3e758a608e16fc7b4ae795dfd2baecc8b0cb844..c0be2543ab55fda85302812a4773e551f64cf7d9 100644 --- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java @@ -326,6 +326,20 @@ public class ServerGamePacketListenerImpl @@ -1698,20 +1698,20 @@ index d3de87eaf0eb84af77165391c7b94085d425f21d..edaa6f66f33b6a9bfb4862ec5557080b } } diff --git a/net/minecraft/world/damagesource/DamageSource.java b/net/minecraft/world/damagesource/DamageSource.java -index ac7352a2b264abf4db4b89f39a2c86f390776336..0a596e20393936d8fc9f03ba0891d0c223279247 100644 +index 0d9e5aab214df54a7a24bec45fcc8ad85f699710..0eb210a8c6f42a3a1ee61e946ccfec25cbc3a44b 100644 --- a/net/minecraft/world/damagesource/DamageSource.java +++ b/net/minecraft/world/damagesource/DamageSource.java -@@ -28,6 +28,8 @@ public class DamageSource { - private boolean sweep = false; - private boolean melting = false; - private boolean poison = false; +@@ -30,6 +30,8 @@ public class DamageSource { + @Nullable + private org.bukkit.block.BlockState fromBlockSnapshot; // Captured block snapshot when the eventBlockDamager is not relevant (e.g. for bad respawn point explosions the block is already removed) + private boolean critical; // Supports arrows and sweeping damage + private boolean scissors = false; // Purpur - Dont run with scissors! + private boolean stonecutter = false; // Purpur - Stonecutter damage - @Nullable - private Entity customEventDamager = null; // This field is a helper for when causing entity damage is not set by vanilla // Paper - fix DamageSource API -@@ -58,6 +60,27 @@ public class DamageSource { - return this.poison; + public DamageSource knownCause(final org.bukkit.event.entity.EntityDamageEvent.DamageCause cause) { + final DamageSource damageSource = this.copy(); +@@ -42,6 +44,27 @@ public class DamageSource { + return this.knownCause; } + // Purpur start - Dont run with scissors! @@ -1735,19 +1735,19 @@ index ac7352a2b264abf4db4b89f39a2c86f390776336..0a596e20393936d8fc9f03ba0891d0c2 + } + // Purpur end - Stonecutter damage + - // Paper start - fix DamageSource API @Nullable - public Entity getCustomEventDamager() { -@@ -118,6 +141,8 @@ public class DamageSource { - damageSource.sweep = this.isSweep(); - damageSource.poison = this.isPoison(); - damageSource.melting = this.isMelting(); + public Entity eventEntityDamager() { + return this.eventEntityDamager; +@@ -103,6 +126,8 @@ public class DamageSource { + damageSource.eventBlockDamager = this.eventBlockDamager; + damageSource.fromBlockSnapshot = this.fromBlockSnapshot; + damageSource.critical = this.critical; + damageSource.scissors = this.isScissors(); // Purpur - Dont run with scissors! + damageSource.stonecutter = this.isStonecutter(); // Purpur - Stonecutter damage return damageSource; } // CraftBukkit end -@@ -184,12 +209,21 @@ public class DamageSource { +@@ -169,12 +194,21 @@ public class DamageSource { } else { Component component = this.causingEntity == null ? this.directEntity.getDisplayName() : this.causingEntity.getDisplayName(); ItemStack itemStack = this.causingEntity instanceof LivingEntity livingEntity1 ? livingEntity1.getMainHandItem() : ItemStack.EMPTY; @@ -1771,28 +1771,30 @@ index ac7352a2b264abf4db4b89f39a2c86f390776336..0a596e20393936d8fc9f03ba0891d0c2 return this.type().msgId(); } diff --git a/net/minecraft/world/damagesource/DamageSources.java b/net/minecraft/world/damagesource/DamageSources.java -index b1054b6b2bff568a8805fc0f610c431f3f349a04..a6660ba22847911c661bb7a608a96e1d059c4ae2 100644 +index cc206ecff2d95f0398ca424c178a336ad80cc396..0276f02e149f3ef5e0f9aec8b0a8a6cb3d638aae 100644 --- a/net/minecraft/world/damagesource/DamageSources.java +++ b/net/minecraft/world/damagesource/DamageSources.java -@@ -45,11 +45,15 @@ public class DamageSources { - // CraftBukkit start - private final DamageSource melting; - private final DamageSource poison; +@@ -42,6 +42,8 @@ public class DamageSources { + private final DamageSource stalagmite; + private final DamageSource outsideBorder; + private final DamageSource genericKill; + private final DamageSource scissors; // Purpur - Dont run with scissors! + private final DamageSource stonecutter; // Purpur - Stonecutter damage public DamageSources(RegistryAccess registry) { this.damageTypes = registry.lookupOrThrow(Registries.DAMAGE_TYPE); - this.melting = this.source(DamageTypes.ON_FIRE).melting(); - this.poison = this.source(DamageTypes.MAGIC).poison(); +@@ -70,6 +72,8 @@ public class DamageSources { + this.stalagmite = this.source(DamageTypes.STALAGMITE); + this.outsideBorder = this.source(DamageTypes.OUTSIDE_BORDER); + this.genericKill = this.source(DamageTypes.GENERIC_KILL); + this.scissors = this.source(DamageTypes.MAGIC).scissors(); // Purpur - Dont run with scissors! + this.stonecutter = this.source(DamageTypes.MAGIC).stonecutter(); // Purpur - Stonecutter damage - // CraftBukkit end - this.inFire = this.source(DamageTypes.IN_FIRE); - this.campfire = this.source(DamageTypes.CAMPFIRE); -@@ -100,6 +104,17 @@ public class DamageSources { } - // CraftBukkit end + + private DamageSource source(ResourceKey damageTypeKey) { +@@ -176,6 +180,18 @@ public class DamageSources { + return this.stalagmite; + } + // Purpur start - Dont run with scissors! + public DamageSource scissors() { @@ -1805,8 +1807,9 @@ index b1054b6b2bff568a8805fc0f610c431f3f349a04..a6660ba22847911c661bb7a608a96e1d + return this.stonecutter; + } + // Purpur end - Stonecutter damage - public DamageSource inFire() { - return this.inFire; ++ + public DamageSource fallingBlock(Entity entity) { + return this.source(DamageTypes.FALLING_BLOCK, entity); } diff --git a/net/minecraft/world/effect/HungerMobEffect.java b/net/minecraft/world/effect/HungerMobEffect.java index 0890694ae96b6cd60079c34066e7a6e288f038e8..6c0e6bd2a171edc57dec71af178764454de73313 100644 @@ -1822,7 +1825,7 @@ index 0890694ae96b6cd60079c34066e7a6e288f038e8..6c0e6bd2a171edc57dec71af17876445 return true; diff --git a/net/minecraft/world/effect/PoisonMobEffect.java b/net/minecraft/world/effect/PoisonMobEffect.java -index 522e11a98ccd9186e7b00f6d7e28516cf33b830c..a33402b06ce99767fa0a5d4bf6881077bd1bd107 100644 +index 75327fd96858fd508ea63a6983e5cbc655a8800f..73cfc61ac3f8e33e6b9f4fd08a292266c0adb535 100644 --- a/net/minecraft/world/effect/PoisonMobEffect.java +++ b/net/minecraft/world/effect/PoisonMobEffect.java @@ -12,8 +12,8 @@ public class PoisonMobEffect extends MobEffect { @@ -1830,9 +1833,9 @@ index 522e11a98ccd9186e7b00f6d7e28516cf33b830c..a33402b06ce99767fa0a5d4bf6881077 @Override public boolean applyEffectTick(ServerLevel level, LivingEntity entity, int amplifier) { - if (entity.getHealth() > 1.0F) { -- entity.hurtServer(level, entity.damageSources().poison(), 1.0F); // CraftBukkit - DamageSource.MAGIC -> CraftEventFactory.POISON +- entity.hurtServer(level, entity.damageSources().magic().knownCause(org.bukkit.event.entity.EntityDamageEvent.DamageCause.POISON), 1.0F); // CraftBukkit + if (entity.getHealth() > entity.level().purpurConfig.entityMinimalHealthPoison) { // Purpur -+ entity.hurtServer(level, entity.damageSources().poison(), entity.level().purpurConfig.entityPoisonDegenerationAmount); // CraftBukkit - DamageSource.MAGIC -> CraftEventFactory.POISON // Purpur - Config MobEffect by world ++ entity.hurtServer(level, entity.damageSources().magic().knownCause(org.bukkit.event.entity.EntityDamageEvent.DamageCause.POISON), entity.level().purpurConfig.entityPoisonDegenerationAmount); // CraftBukkit // Purpur - Config MobEffect by world } return true; @@ -1877,7 +1880,7 @@ index 1fc9e1ad541c46124183a401b2a7d99aea69cecf..881271f0bc77a8a8a7d31daad9a8188b } diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java -index 0f3c00c0d6be858351f00a71e2586212ab0f3668..3be4556a14b61fad5690a4e664e9e27ab94bb41f 100644 +index c2a2892d34497a616951f4689ab6126191d9f655..f83a90cba0229842389740199a8d7f12fe44b0d9 100644 --- a/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java @@ -134,7 +134,7 @@ import net.minecraft.world.scores.Team; @@ -1912,7 +1915,7 @@ index 0f3c00c0d6be858351f00a71e2586212ab0f3668..3be4556a14b61fad5690a4e664e9e27a private boolean hasGlowingTag; private final Set tags = new io.papermc.paper.util.SizeLimitedSet<>(new it.unimi.dsi.fastutil.objects.ObjectOpenHashSet<>(), MAX_ENTITY_TAG_COUNT); // Paper - fully limit tag size - replace set impl private final double[] pistonDeltas = new double[]{0.0, 0.0, 0.0}; -@@ -343,6 +344,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -344,6 +345,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess public long activatedTick = Integer.MIN_VALUE; public boolean isTemporarilyActive; public long activatedImmunityTick = Integer.MIN_VALUE; @@ -1920,7 +1923,7 @@ index 0f3c00c0d6be858351f00a71e2586212ab0f3668..3be4556a14b61fad5690a4e664e9e27a public void inactiveTick() { } -@@ -524,10 +526,39 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -525,10 +527,39 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } // Paper end - optimise entity tracker @@ -1960,7 +1963,7 @@ index 0f3c00c0d6be858351f00a71e2586212ab0f3668..3be4556a14b61fad5690a4e664e9e27a this.position = Vec3.ZERO; this.blockPosition = BlockPos.ZERO; this.chunkPosition = ChunkPos.ZERO; -@@ -908,6 +939,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -909,6 +940,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess && this.level.paperConfig().environment.netherCeilingVoidDamageHeight.test(v -> this.getY() >= v) && (!(this instanceof Player player) || !player.getAbilities().invulnerable))) { // Paper end - Configurable nether ceiling damage @@ -1968,7 +1971,7 @@ index 0f3c00c0d6be858351f00a71e2586212ab0f3668..3be4556a14b61fad5690a4e664e9e27a this.onBelowWorld(); } } -@@ -1838,7 +1870,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -1839,7 +1871,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } public boolean fireImmune() { @@ -1977,7 +1980,7 @@ index 0f3c00c0d6be858351f00a71e2586212ab0f3668..3be4556a14b61fad5690a4e664e9e27a } public boolean causeFallDamage(float fallDistance, float multiplier, DamageSource source) { -@@ -1907,7 +1939,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -1908,7 +1940,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess return this.isInWater() || flag; } @@ -1986,7 +1989,7 @@ index 0f3c00c0d6be858351f00a71e2586212ab0f3668..3be4556a14b61fad5690a4e664e9e27a if (this.getVehicle() instanceof AbstractBoat abstractBoat && !abstractBoat.isUnderWater()) { this.wasTouchingWater = false; } else if (this.updateFluidHeightAndDoFluidPushing(FluidTags.WATER, 0.014)) { -@@ -2543,6 +2575,13 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -2544,6 +2576,13 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess compound.putBoolean("Paper.FreezeLock", true); } // Paper end @@ -2000,7 +2003,7 @@ index 0f3c00c0d6be858351f00a71e2586212ab0f3668..3be4556a14b61fad5690a4e664e9e27a return compound; } catch (Throwable var9) { CrashReport crashReport = CrashReport.forThrowable(var9, "Saving entity NBT"); -@@ -2692,6 +2731,13 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -2693,6 +2732,13 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess freezeLocked = compound.getBoolean("Paper.FreezeLock"); } // Paper end @@ -2014,7 +2017,7 @@ index 0f3c00c0d6be858351f00a71e2586212ab0f3668..3be4556a14b61fad5690a4e664e9e27a } catch (Throwable var17) { CrashReport crashReport = CrashReport.forThrowable(var17, "Loading entity NBT"); CrashReportCategory crashReportCategory = crashReport.addCategory("Entity being loaded"); -@@ -2938,6 +2984,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -2939,6 +2985,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess if (this.isAlive() && this instanceof Leashable leashable) { if (leashable.getLeashHolder() == player) { if (!this.level().isClientSide()) { @@ -2022,7 +2025,7 @@ index 0f3c00c0d6be858351f00a71e2586212ab0f3668..3be4556a14b61fad5690a4e664e9e27a // CraftBukkit start - fire PlayerUnleashEntityEvent // Paper start - Expand EntityUnleashEvent org.bukkit.event.player.PlayerUnleashEntityEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callPlayerUnleashEntityEvent(this, player, hand, !player.hasInfiniteMaterials()); -@@ -3144,6 +3191,13 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3145,6 +3192,13 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess this.passengers = ImmutableList.copyOf(list); } @@ -2036,7 +2039,7 @@ index 0f3c00c0d6be858351f00a71e2586212ab0f3668..3be4556a14b61fad5690a4e664e9e27a this.gameEvent(GameEvent.ENTITY_MOUNT, passenger); } } -@@ -3185,6 +3239,14 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3186,6 +3240,14 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess return false; } // CraftBukkit end @@ -2051,7 +2054,7 @@ index 0f3c00c0d6be858351f00a71e2586212ab0f3668..3be4556a14b61fad5690a4e664e9e27a if (this.passengers.size() == 1 && this.passengers.get(0) == passenger) { this.passengers = ImmutableList.of(); } else { -@@ -3263,15 +3325,18 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3264,15 +3326,18 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess return Vec3.directionFromRotation(this.getRotationVector()); } @@ -2071,7 +2074,7 @@ index 0f3c00c0d6be858351f00a71e2586212ab0f3668..3be4556a14b61fad5690a4e664e9e27a } } } -@@ -3473,7 +3538,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3474,7 +3539,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } public int getMaxAirSupply() { @@ -2080,7 +2083,7 @@ index 0f3c00c0d6be858351f00a71e2586212ab0f3668..3be4556a14b61fad5690a4e664e9e27a } public int getAirSupply() { -@@ -3961,7 +4026,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3962,7 +4027,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess // CraftBukkit end public boolean canUsePortal(boolean allowPassengers) { @@ -2089,7 +2092,7 @@ index 0f3c00c0d6be858351f00a71e2586212ab0f3668..3be4556a14b61fad5690a4e664e9e27a } public boolean canTeleport(Level fromLevel, Level toLevel) { -@@ -4498,6 +4563,12 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -4499,6 +4564,12 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess return Mth.lerp(partialTick, this.yRotO, this.yRot); } @@ -2102,7 +2105,7 @@ index 0f3c00c0d6be858351f00a71e2586212ab0f3668..3be4556a14b61fad5690a4e664e9e27a // Paper start - optimise collisions public boolean updateFluidHeightAndDoFluidPushing(final TagKey fluid, final double flowScale) { if (this.touchingUnloadedChunk()) { -@@ -4906,7 +4977,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -4907,7 +4978,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } public float maxUpStep() { @@ -2111,7 +2114,7 @@ index 0f3c00c0d6be858351f00a71e2586212ab0f3668..3be4556a14b61fad5690a4e664e9e27a } public void onExplosionHit(@Nullable Entity entity) { -@@ -5104,4 +5175,44 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -5105,4 +5176,44 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess return ((ServerLevel) this.level).isPositionEntityTicking(this.blockPosition()); } // Paper end - Expose entity id counter @@ -2298,7 +2301,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 8f144c36b9fe1f5380459ae869f5a61f629b0d39..8c56af2500f05b74e94c56faf75d186f0d383390 100644 +index bfd71ce095cb35cc7c71b3dae71b40fc7d42f360..7a07789f115cb4a8917097e0697e80184104817e 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 { @@ -2537,7 +2540,7 @@ index 8f144c36b9fe1f5380459ae869f5a61f629b0d39..8c56af2500f05b74e94c56faf75d186f this.hurt(this.damageSources().flyIntoWall(), f); } } -@@ -3505,8 +3572,10 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -3523,8 +3590,10 @@ public abstract class LivingEntity extends Entity implements Attackable { this.pushEntities(); // Paper start - Add EntityMoveEvent @@ -2550,7 +2553,7 @@ index 8f144c36b9fe1f5380459ae869f5a61f629b0d39..8c56af2500f05b74e94c56faf75d186f 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()); -@@ -3516,11 +3585,52 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -3534,11 +3603,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()); } } @@ -2603,7 +2606,7 @@ index 8f144c36b9fe1f5380459ae869f5a61f629b0d39..8c56af2500f05b74e94c56faf75d186f } public boolean isSensitiveToWater() { -@@ -3542,7 +3652,18 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -3560,7 +3670,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); @@ -2623,7 +2626,7 @@ index 8f144c36b9fe1f5380459ae869f5a61f629b0d39..8c56af2500f05b74e94c56faf75d186f } this.gameEvent(GameEvent.ELYTRA_GLIDE); -@@ -4425,6 +4546,12 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -4443,6 +4564,12 @@ public abstract class LivingEntity extends Entity implements Attackable { : slot == equippable.slot() && this.canUseSlot(equippable.slot()) && equippable.canBeEquippedBy(this.getType()); } @@ -5680,7 +5683,7 @@ index e686c500e4b5f3e7b0e808af8b2e43ddbd163bef..c1760dda7b42471982e4ad78b6150b54 this.goalSelector.addGoal(2, new BreedGoal(this, 1.0)); this.goalSelector.addGoal(3, new TemptGoal(this, 1.1, stack -> stack.is(ItemTags.SHEEP_FOOD), false)); diff --git a/net/minecraft/world/entity/animal/SnowGolem.java b/net/minecraft/world/entity/animal/SnowGolem.java -index 8871964fd735178804b95182db1fd6bc1088f69d..1b9d4562b73ecdf783ecdaf4f4eff9037a4387e6 100644 +index 8a63b656b86b98f3756807498721d4daac5a38ef..eccf5f67bdacaf018e368843448754bc28a54b98 100644 --- a/net/minecraft/world/entity/animal/SnowGolem.java +++ b/net/minecraft/world/entity/animal/SnowGolem.java @@ -44,17 +44,63 @@ import net.minecraft.world.phys.Vec3; @@ -5772,7 +5775,7 @@ index 8871964fd735178804b95182db1fd6bc1088f69d..1b9d4562b73ecdf783ecdaf4f4eff903 @Override @@ -95,10 +143,11 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM - this.hurtServer(serverLevel, this.damageSources().melting(), 1.0F); // CraftBukkit - DamageSources.ON_FIRE -> CraftEventFactory.MELTING + this.hurtServer(serverLevel, this.damageSources().onFire().knownCause(org.bukkit.event.entity.EntityDamageEvent.DamageCause.MELTING), 1.0F); // CraftBukkit } - if (!serverLevel.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) { @@ -5990,7 +5993,7 @@ index fa5f7f7d54083f9ea2095dd44362069d00e0b9a5..41074e7847583583331ef8d685a9f9b8 return "entity.minecraft.tropical_fish.predefined." + variantId; } diff --git a/net/minecraft/world/entity/animal/Turtle.java b/net/minecraft/world/entity/animal/Turtle.java -index 354ec2b987882d8f40ef4ac5257183d2fda73bb8..3c877699914c906fca265c96770b1c29ed89a1e2 100644 +index 0e2d2dd3f2ef2783f3773a9a05c4f718991f7784..10477fea8fcd70bf0c1ba4b6e1113625be690e68 100644 --- a/net/minecraft/world/entity/animal/Turtle.java +++ b/net/minecraft/world/entity/animal/Turtle.java @@ -84,6 +84,52 @@ public class Turtle extends Animal { @@ -12605,7 +12608,7 @@ index ef2afb17a22a703470e13d12c989a685e72f0ab8..80a01b8c6dfb0f3bcc6872cdf38b48f7 blockPos = blockPos1; break; diff --git a/net/minecraft/world/entity/player/Player.java b/net/minecraft/world/entity/player/Player.java -index baab70c95fdcb230ecaef1174a8d5e298826462b..37cccba70cf4815b19fcf9f1526cdc25c2e81407 100644 +index e587f8125ab29b3f9c829cd225deb5b7a6b7affa..5b684ff1096ef56fc5d6ad16963bb19ec880ced4 100644 --- a/net/minecraft/world/entity/player/Player.java +++ b/net/minecraft/world/entity/player/Player.java @@ -201,11 +201,22 @@ public abstract class Player extends LivingEntity { @@ -12694,13 +12697,13 @@ index baab70c95fdcb230ecaef1174a8d5e298826462b..37cccba70cf4815b19fcf9f1526cdc25 @@ -1277,7 +1318,7 @@ public abstract class Player extends LivingEntity { flag2 = flag2 && !this.level().paperConfig().entities.behavior.disablePlayerCrits; // Paper - Toggleable player crits if (flag2) { - damageSource = damageSource.critical(true); // Paper start - critical damage API + damageSource = damageSource.critical(); // Paper - critical damage API - f *= 1.5F; + f *= this.level().purpurConfig.playerCriticalDamageMultiplier; // Purpur - Add config change multiplier critical damage value } float f2 = f + f1; -@@ -1890,7 +1931,23 @@ public abstract class Player extends LivingEntity { +@@ -1892,7 +1933,23 @@ public abstract class Player extends LivingEntity { @Override protected int getBaseExperienceReward(ServerLevel level) { @@ -12725,7 +12728,7 @@ index baab70c95fdcb230ecaef1174a8d5e298826462b..37cccba70cf4815b19fcf9f1526cdc25 } @Override -@@ -1974,6 +2031,13 @@ public abstract class Player extends LivingEntity { +@@ -1976,6 +2033,13 @@ public abstract class Player extends LivingEntity { return slot != EquipmentSlot.BODY; } @@ -12740,7 +12743,7 @@ index baab70c95fdcb230ecaef1174a8d5e298826462b..37cccba70cf4815b19fcf9f1526cdc25 if (this.isPassenger() || !this.onGround() || this.isInWater() || this.isInPowderSnow) { return false; diff --git a/net/minecraft/world/entity/projectile/AbstractArrow.java b/net/minecraft/world/entity/projectile/AbstractArrow.java -index d206ac2b9cade292b0d69e9aeb0f81227ec0b49e..f9b538f4cd831aa5a22bb778c2bf3cd97a27f9dd 100644 +index aa301c849b020fac951f8afa7cd27401def16d3a..ecf25b60096f6a77a7bd6b6212d322adb3fe5e8a 100644 --- a/net/minecraft/world/entity/projectile/AbstractArrow.java +++ b/net/minecraft/world/entity/projectile/AbstractArrow.java @@ -74,6 +74,7 @@ public abstract class AbstractArrow extends Projectile { @@ -12882,7 +12885,7 @@ index c57bbdc13221d2ce349f3f1d894193f80ff1e24b..1d399532c67c213c95c06837b0c78553 protected void onHit(HitResult result) { super.onHit(result); diff --git a/net/minecraft/world/entity/projectile/ThrownEnderpearl.java b/net/minecraft/world/entity/projectile/ThrownEnderpearl.java -index 128bf1555b996c454e753b1ed004cfeae4b0436f..1d240ebbf81154d361cc5449d0f43ea467bfb097 100644 +index 1345097a2a417f95c44143fd7e0d4cec38990121..d212f57c8c0b2086f567fd30237b110203d9e8cb 100644 --- a/net/minecraft/world/entity/projectile/ThrownEnderpearl.java +++ b/net/minecraft/world/entity/projectile/ThrownEnderpearl.java @@ -133,9 +133,10 @@ public class ThrownEnderpearl extends ThrowableItemProjectile { @@ -12901,8 +12904,8 @@ index 128bf1555b996c454e753b1ed004cfeae4b0436f..1d240ebbf81154d361cc5449d0f43ea4 if (serverPlayer1 != null) { serverPlayer1.resetFallDistance(); serverPlayer1.resetCurrentImpulseContext(); -- serverPlayer1.hurtServer(serverPlayer.serverLevel(), this.damageSources().enderPearl().customEventDamager(this), 5.0F); // CraftBukkit // Paper - fix DamageSource API -+ serverPlayer1.hurtServer(serverPlayer.serverLevel(), this.damageSources().enderPearl().customEventDamager(this), this.level().purpurConfig.enderPearlDamage); // CraftBukkit // Paper - fix DamageSource API // Purpur - Configurable Ender Pearl damage +- serverPlayer1.hurtServer(serverPlayer.serverLevel(), this.damageSources().enderPearl().eventEntityDamager(this), 5.0F); // CraftBukkit // Paper - fix DamageSource API ++ serverPlayer1.hurtServer(serverPlayer.serverLevel(), this.damageSources().enderPearl().eventEntityDamager(this), this.level().purpurConfig.enderPearlDamage); // CraftBukkit // Paper - fix DamageSource API // Purpur - Configurable Ender Pearl damage } this.playSound(serverLevel, vec3); @@ -12920,7 +12923,7 @@ index 2c66f788759330fba412ccb2187945b6ca0cacb6..251e9a368800afab1a47bb9162077b2e if (this.level() instanceof ServerLevel serverLevel && this.pickup == AbstractArrow.Pickup.ALLOWED) { this.spawnAtLocation(serverLevel, this.getPickupItem(), 0.1F); diff --git a/net/minecraft/world/entity/projectile/WitherSkull.java b/net/minecraft/world/entity/projectile/WitherSkull.java -index a83839fce264429e2a8fd3b19cd2d0a6d88585e0..9af37bd40649f602d700fc7b683c646ae9189eb9 100644 +index c4cdc7655a8e4931717e9fa788c5811879526e9e..a0b909c745ea60cae73def06f9d947345911c5e4 100644 --- a/net/minecraft/world/entity/projectile/WitherSkull.java +++ b/net/minecraft/world/entity/projectile/WitherSkull.java @@ -92,7 +92,7 @@ public class WitherSkull extends AbstractHurtingProjectile { @@ -14618,7 +14621,7 @@ index 4bee1ba137d078563cedfdd184a8b4603df17487..d3f5242fc66529bf3137da4d505a6cf5 double d2 = nearestPlayer.distanceToSqr(d, y, d1); if (level.isLoadedAndInBounds(mutableBlockPos) && isRightDistanceToPlayerAndSpawnPoint(level, chunk, mutableBlockPos, d2)) { // Paper - don't load chunks for mob spawn diff --git a/net/minecraft/world/level/ServerExplosion.java b/net/minecraft/world/level/ServerExplosion.java -index ea22342896a608036042b5f5800302eae29f6c40..f2ef7af916318d9b83395455b9f25b61401e3017 100644 +index 4d183fb445c43621c5ce95edc1af27b6a41f0acb..a22ef98cf584fd9e66ac86ce2f66ec04e6353608 100644 --- a/net/minecraft/world/level/ServerExplosion.java +++ b/net/minecraft/world/level/ServerExplosion.java @@ -317,7 +317,7 @@ public class ServerExplosion implements Explosion { @@ -14755,7 +14758,7 @@ index 045d85b1267e20ca66ef08eb981f167c64d8c780..e804ca8d6c9c9b8d9f982a970cc3eddd return true; } else { diff --git a/net/minecraft/world/level/block/BedBlock.java b/net/minecraft/world/level/block/BedBlock.java -index c23c255cefe7c5be618bbe97a99ae3215d8e48c0..60c68936cd80e0137a1c92d6d1687321855c040f 100644 +index 8c21e8aa4922691fa66cd22d631646c554251bdd..999abf6a27682eed16273c9a73dc9479fc3008c0 100644 --- a/net/minecraft/world/level/block/BedBlock.java +++ b/net/minecraft/world/level/block/BedBlock.java @@ -100,7 +100,7 @@ public class BedBlock extends HorizontalDirectionalBlock implements EntityBlock @@ -14771,8 +14774,8 @@ index c23c255cefe7c5be618bbe97a99ae3215d8e48c0..60c68936cd80e0137a1c92d6d1687321 } Vec3 center = pos.getCenter(); -- level.explode(null, level.damageSources().badRespawnPointExplosion(center, blockState), null, center, 5.0F, true, Level.ExplosionInteraction.BLOCK); // CraftBukkit - add state -+ if (level.purpurConfig.bedExplode) level.explode(null, level.damageSources().badRespawnPointExplosion(center, blockState), null, center, (float) level.purpurConfig.bedExplosionPower, level.purpurConfig.bedExplosionFire, level.purpurConfig.bedExplosionEffect); // CraftBukkit - add state // Purpur - Implement bed explosion options +- level.explode(null, level.damageSources().badRespawnPointExplosion(center).causingBlockSnapshot(blockState), null, center, 5.0F, true, Level.ExplosionInteraction.BLOCK); // CraftBukkit - add state ++ if (level.purpurConfig.bedExplode) level.explode(null, level.damageSources().badRespawnPointExplosion(center).causingBlockSnapshot(blockState), null, center, (float) level.purpurConfig.bedExplosionPower, level.purpurConfig.bedExplosionFire, level.purpurConfig.bedExplosionEffect); // CraftBukkit - add state // Purpur - Implement bed explosion options return InteractionResult.SUCCESS_SERVER; } // CraftBukkit end @@ -14955,7 +14958,7 @@ index bc52568bfa56635300266424488e524d77d95e09..8f2eebc60d655d5a2c233e2b931cdca2 + // Purpur end - Ability for hoe to replant crops } diff --git a/net/minecraft/world/level/block/CactusBlock.java b/net/minecraft/world/level/block/CactusBlock.java -index 913779c68b178dbbfac3b1dcee0c6342028e5570..dfc55eec85f35534dfa36c007d3b3d015ec809a3 100644 +index 8c3aca2430eac2a31d1e0b1137e3324ec5b29a20..079b4c95cf81119ca99daeb159aefca389afed74 100644 --- a/net/minecraft/world/level/block/CactusBlock.java +++ b/net/minecraft/world/level/block/CactusBlock.java @@ -21,7 +21,7 @@ import net.minecraft.world.level.pathfinder.PathComputationType; @@ -15024,7 +15027,7 @@ index f15b56cbfb6540ea26c6a0abdd701b7d7f1a974e..cf6cf43fc3b234cecccf5c7c0cd4571d } diff --git a/net/minecraft/world/level/block/CampfireBlock.java b/net/minecraft/world/level/block/CampfireBlock.java -index ce0267f3651dcdc59a1b1ecffe14560a8107353d..d735b6e3ade144a4645345fb7b0f2013fa9002e5 100644 +index 0bf42a5fdf2c606062b9be4443a9a22346159ecb..9dc0c206e325d2818923e56c97d83b24e1161c26 100644 --- a/net/minecraft/world/level/block/CampfireBlock.java +++ b/net/minecraft/world/level/block/CampfireBlock.java @@ -141,7 +141,7 @@ public class CampfireBlock extends BaseEntityBlock implements SimpleWaterloggedB @@ -15119,7 +15122,7 @@ index 4f98ae8bd4bfb681883132eddb57cbc5703d7d9e..c84e1c124b733fb918de17340f7e0f57 } } diff --git a/net/minecraft/world/level/block/ChestBlock.java b/net/minecraft/world/level/block/ChestBlock.java -index 9ed50f09147984ba8864edabb89669e2f4fc7bea..af4abe255da35e9b7ecfd29914d5e54e26f0c3cd 100644 +index 4d2a5888695b99fb150e23b7d8c4b4d4a455b8c6..db4b26262e3ee1064f2930377b56f13298c47203 100644 --- a/net/minecraft/world/level/block/ChestBlock.java +++ b/net/minecraft/world/level/block/ChestBlock.java @@ -357,6 +357,7 @@ public class ChestBlock extends AbstractChestBlock implements @@ -15592,7 +15595,7 @@ index 19d1906e9d4e92ff49a833bca03a7308ee8059e3..47a7ce88bf4d26408545dcc061aa7633 } } diff --git a/net/minecraft/world/level/block/MagmaBlock.java b/net/minecraft/world/level/block/MagmaBlock.java -index 6245b268d1361973a9dee2b80454779b7d0922f0..3345a151bdb5262be6ce117947f9975b7fdcfdf0 100644 +index db83c3630064a6875b477021a1f78bdf59c4ddc3..bbf8447cf986015f8a2e55f39d7b4f0dd9abcb23 100644 --- a/net/minecraft/world/level/block/MagmaBlock.java +++ b/net/minecraft/world/level/block/MagmaBlock.java @@ -28,7 +28,7 @@ public class MagmaBlock extends Block { @@ -15601,7 +15604,7 @@ index 6245b268d1361973a9dee2b80454779b7d0922f0..3345a151bdb5262be6ce117947f9975b public void stepOn(Level level, BlockPos pos, BlockState state, Entity entity) { - if (!entity.isSteppingCarefully() && entity instanceof LivingEntity) { + if ((!entity.isSteppingCarefully() || level.purpurConfig.magmaBlockDamageWhenSneaking) && entity instanceof LivingEntity) { // Purpur - Configurable damage settings for magma blocks - entity.hurt(level.damageSources().hotFloor().directBlock(level, pos), 1.0F); // CraftBukkit + entity.hurt(level.damageSources().hotFloor().eventBlockDamager(level, pos), 1.0F); // CraftBukkit } diff --git a/net/minecraft/world/level/block/NetherPortalBlock.java b/net/minecraft/world/level/block/NetherPortalBlock.java @@ -15714,7 +15717,7 @@ index 9ca4ae8cdf9d88b8b6a6ed5d4c0b306bd0539ffe..42c696aa307516642029646305a4f71a } diff --git a/net/minecraft/world/level/block/PointedDripstoneBlock.java b/net/minecraft/world/level/block/PointedDripstoneBlock.java -index 8580d44daeb0dacd96714537c2abafd9700cd16b..b70735764bd81c3570845c45aa79782b9867c30b 100644 +index 6a3548ee9f7d31e1fb02a47f4d8b9c1ed0bc2bc6..aa1fd38f26459944f0a08d88e68b989cb54728ed 100644 --- a/net/minecraft/world/level/block/PointedDripstoneBlock.java +++ b/net/minecraft/world/level/block/PointedDripstoneBlock.java @@ -197,20 +197,20 @@ public class PointedDripstoneBlock extends Block implements Fallable, SimpleWate @@ -15768,15 +15771,15 @@ index f33b53257a231dccf16740f1e78a3cdfa6e70726..4b3d00b085ea5d345b418815c9869f5f } else { int x = pos.getX(); diff --git a/net/minecraft/world/level/block/RespawnAnchorBlock.java b/net/minecraft/world/level/block/RespawnAnchorBlock.java -index e6e93814b6d22eb0ef4122c04ddce30c12c28d3f..e49fba46b006cb4b7568403d2d15777e253b0aab 100644 +index f90d1b0a9e4b80a42f450ff49a46765da19ce562..0631e6f0c242a1fc1dfa606a4d60686c31c7eb13 100644 --- a/net/minecraft/world/level/block/RespawnAnchorBlock.java +++ b/net/minecraft/world/level/block/RespawnAnchorBlock.java @@ -159,7 +159,7 @@ public class RespawnAnchorBlock extends Block { }; Vec3 center = pos2.getCenter(); level.explode( -- null, level.damageSources().badRespawnPointExplosion(center, blockState), explosionDamageCalculator, center, 5.0F, true, Level.ExplosionInteraction.BLOCK // CraftBukkit - add state -+ null, level.damageSources().badRespawnPointExplosion(center, blockState), explosionDamageCalculator, center, (float) level.purpurConfig.respawnAnchorExplosionPower, level.purpurConfig.respawnAnchorExplosionFire, level.purpurConfig.respawnAnchorExplosionEffect // CraftBukkit - add state // Purpur - Implement respawn anchor explosion options +- null, level.damageSources().badRespawnPointExplosion(center).causingBlockSnapshot(blockState), explosionDamageCalculator, center, 5.0F, true, Level.ExplosionInteraction.BLOCK // CraftBukkit - add state ++ null, level.damageSources().badRespawnPointExplosion(center).causingBlockSnapshot(blockState), explosionDamageCalculator, center, (float) level.purpurConfig.respawnAnchorExplosionPower, level.purpurConfig.respawnAnchorExplosionFire, level.purpurConfig.respawnAnchorExplosionEffect // CraftBukkit - add state // Purpur - Implement respawn anchor explosion options ); } @@ -16351,7 +16354,7 @@ index 77618757c0e678532dbab814aceed83f7f1cd892..3fd0f42618e5c2c683335d1d3e0bb74c + // Purpur end - Persistent BlockEntity Lore and DisplayName } diff --git a/net/minecraft/world/level/block/entity/ConduitBlockEntity.java b/net/minecraft/world/level/block/entity/ConduitBlockEntity.java -index 269994df977801c67b8c576bde2478624b2631a1..b1689c67458f77f19c86d5d1d23f30e10a27d7a8 100644 +index 9d80625fc95e4968cf80492dc7ecf1fd27e585b8..00b2d069c6eb26742f0fd74ac1103e428873248a 100644 --- a/net/minecraft/world/level/block/entity/ConduitBlockEntity.java +++ b/net/minecraft/world/level/block/entity/ConduitBlockEntity.java @@ -155,7 +155,7 @@ public class ConduitBlockEntity extends BlockEntity { @@ -16396,8 +16399,8 @@ index 269994df977801c67b8c576bde2478624b2631a1..b1689c67458f77f19c86d5d1d23f30e1 } if (damageTarget && blockEntity.destroyTarget != null) { // CraftBukkit -- if (blockEntity.destroyTarget.hurtServer((net.minecraft.server.level.ServerLevel) level, level.damageSources().magic().directBlock(level, pos), 4.0F)) // CraftBukkit -+ if (blockEntity.destroyTarget.hurtServer((net.minecraft.server.level.ServerLevel) level, level.damageSources().magic().directBlock(level, pos), level.purpurConfig.conduitDamageAmount)) // CraftBukkit // Purpur - Conduit behavior configuration +- if (blockEntity.destroyTarget.hurtServer((net.minecraft.server.level.ServerLevel) level, level.damageSources().magic().eventBlockDamager(level, pos), 4.0F)) // CraftBukkit ++ if (blockEntity.destroyTarget.hurtServer((net.minecraft.server.level.ServerLevel) level, level.damageSources().magic().eventBlockDamager(level, pos), level.purpurConfig.conduitDamageAmount)) // CraftBukkit // Purpur - Conduit behavior configuration level.playSound( null, blockEntity.destroyTarget.getX(), @@ -16720,7 +16723,7 @@ index 710f4570bb45a25f20cf914c640539cfa9c9d31b..19ee66cc966cbd124d8c59bc55586237 private static final double SAFE_TRAVEL_MAX_VERTICAL_DELTA = 1.0; private final Direction.Axis axis; diff --git a/net/minecraft/world/level/saveddata/maps/MapItemSavedData.java b/net/minecraft/world/level/saveddata/maps/MapItemSavedData.java -index f5a131e870a4f1ad06ebfb1f360720cf19656fb5..3a8c5a252ea5986b2366fa774ea1754494af1d59 100644 +index 3c1c89aade5ff092b880ba1bf1de83f54d3d62cc..681dec447486138088fe5f705ef4fadab531139f 100644 --- a/net/minecraft/world/level/saveddata/maps/MapItemSavedData.java +++ b/net/minecraft/world/level/saveddata/maps/MapItemSavedData.java @@ -68,6 +68,7 @@ public class MapItemSavedData extends SavedData { diff --git a/leaf-server/minecraft-patches/features/0007-Fix-Pufferfish-and-Purpur-patches.patch b/leaf-server/minecraft-patches/features/0007-Fix-Pufferfish-and-Purpur-patches.patch index 39e33c88..538f60ba 100644 --- a/leaf-server/minecraft-patches/features/0007-Fix-Pufferfish-and-Purpur-patches.patch +++ b/leaf-server/minecraft-patches/features/0007-Fix-Pufferfish-and-Purpur-patches.patch @@ -78,7 +78,7 @@ index 72cdd8f72fb3f552d9729f21de438405abe3acdb..90a8494840faa0e7f605c904c657a953 // Gale end - MultiPaper - skip unnecessary mob spawning computations int _int = this.level.getGameRules().getInt(GameRules.RULE_RANDOMTICKING); diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index ca16bef85f94ffb87eb27c9ec1429cba77e7fbc1..64841780b8fb037e730d947b21b1469e3f86229f 100644 +index c0be2543ab55fda85302812a4773e551f64cf7d9..ffe2f8577ec42c9f071d72a191e8fefc6ba67f0e 100644 --- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java @@ -1232,7 +1232,7 @@ public class ServerGamePacketListenerImpl @@ -91,10 +91,10 @@ index ca16bef85f94ffb87eb27c9ec1429cba77e7fbc1..64841780b8fb037e730d947b21b1469e this.disconnectAsync(Component.literal("Book too large!"), org.bukkit.event.player.PlayerKickEvent.Cause.ILLEGAL_ACTION); // Paper - kick event cause // Paper - add proper async disconnect return; diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java -index 3be4556a14b61fad5690a4e664e9e27ab94bb41f..761b3806ddec0675935dc2e24d36e4b221c53c9b 100644 +index f83a90cba0229842389740199a8d7f12fe44b0d9..b775996b6dbc09c95c83a542da12dee7bf65bf4c 100644 --- a/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java -@@ -532,23 +532,37 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -533,23 +533,37 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } // Purpur end - Add canSaveToDisk to Entity @@ -142,7 +142,7 @@ index 3be4556a14b61fad5690a4e664e9e27ab94bb41f..761b3806ddec0675935dc2e24d36e4b2 public Entity(EntityType entityType, Level level) { this.type = entityType; diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java -index 8c56af2500f05b74e94c56faf75d186f0d383390..4fb6102c8ef930de80356c66397ca2167b1d0174 100644 +index 7a07789f115cb4a8917097e0697e80184104817e..c9870c7ce29e240d60b5b29bdf4deba85023be60 100644 --- a/net/minecraft/world/entity/LivingEntity.java +++ b/net/minecraft/world/entity/LivingEntity.java @@ -1024,13 +1024,13 @@ public abstract class LivingEntity extends Entity implements Attackable { diff --git a/leaf-server/minecraft-patches/features/0021-Leaves-Jade-Protocol.patch b/leaf-server/minecraft-patches/features/0021-Leaves-Jade-Protocol.patch index 3b5828a2..968af07b 100644 --- a/leaf-server/minecraft-patches/features/0021-Leaves-Jade-Protocol.patch +++ b/leaf-server/minecraft-patches/features/0021-Leaves-Jade-Protocol.patch @@ -34,19 +34,6 @@ index ec9db1c12426db80dbf02d704e6c7ec867d59f6f..0fdda6b24aee95170e54079e53125b4a return Math.max(0, ticksToBeFrog - this.age); } -diff --git a/net/minecraft/world/level/block/entity/trialspawner/TrialSpawnerData.java b/net/minecraft/world/level/block/entity/trialspawner/TrialSpawnerData.java -index 4977262e78fe320d72158479c267842837344b67..4190940922af3a00845e6c656873ef8bca409f2c 100644 ---- a/net/minecraft/world/level/block/entity/trialspawner/TrialSpawnerData.java -+++ b/net/minecraft/world/level/block/entity/trialspawner/TrialSpawnerData.java -@@ -67,7 +67,7 @@ public class TrialSpawnerData { - ); - public final Set detectedPlayers = new HashSet<>(); - public final Set currentMobs = new HashSet<>(); -- protected long cooldownEndsAt; -+ public long cooldownEndsAt; // Leaves - protected -> public - protected long nextMobSpawnsAt; - protected int totalMobsSpawned; - public Optional nextSpawnData; diff --git a/net/minecraft/world/level/storage/loot/LootPool.java b/net/minecraft/world/level/storage/loot/LootPool.java index 29ad43245a310756c4227acd7532e905f7f8b8ee..ad422817593449b8e914628b51d760e732e2d50c 100644 --- a/net/minecraft/world/level/storage/loot/LootPool.java @@ -61,7 +48,7 @@ index 29ad43245a310756c4227acd7532e905f7f8b8ee..ad422817593449b8e914628b51d760e7 private final Predicate compositeCondition; private final List functions; diff --git a/net/minecraft/world/level/storage/loot/LootTable.java b/net/minecraft/world/level/storage/loot/LootTable.java -index f95d0f2da3d958519d28278079555c800aad02f8..bebffd07047e41c53b9e4f1ad5917680b8e8c796 100644 +index dd646b11ef0a40e7f782742e62ccccfa9bcfd235..c9820777342124524c046d910085b1bf89c12488 100644 --- a/net/minecraft/world/level/storage/loot/LootTable.java +++ b/net/minecraft/world/level/storage/loot/LootTable.java @@ -45,7 +45,7 @@ public class LootTable { diff --git a/leaf-server/minecraft-patches/features/0024-Leaves-Replay-Mod-API.patch b/leaf-server/minecraft-patches/features/0024-Leaves-Replay-Mod-API.patch index a0153db5..4296ceee 100644 --- a/leaf-server/minecraft-patches/features/0024-Leaves-Replay-Mod-API.patch +++ b/leaf-server/minecraft-patches/features/0024-Leaves-Replay-Mod-API.patch @@ -134,7 +134,7 @@ index 5c0a04db38821dbb0cba2bb6f0787f113d167efd..cd153db93f709c3142942fac88ae3ca2 .filter(player -> !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 bb38adebfcf2e3c52971a79d8363a45f067727a9..69a807ccda1ec5334316863604aa3192065d16a1 100644 +index cb8556fcf50293341cb090616e1e25e04d2eb5d8..d23e367b2e4374764dc059232c136a99db1cc9c6 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 bb38adebfcf2e3c52971a79d8363a45f067727a9..69a807ccda1ec5334316863604aa3192 } // Paper start -@@ -2670,6 +2672,11 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -2672,6 +2674,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 bb38adebfcf2e3c52971a79d8363a45f067727a9..69a807ccda1ec5334316863604aa3192 ServerLevel.this.updateSleepingPlayerList(); } -@@ -2740,6 +2747,11 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -2742,6 +2749,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/0054-Configurable-unknown-command-message.patch b/leaf-server/minecraft-patches/features/0054-Configurable-unknown-command-message.patch index 422e7cc1..889fa87d 100644 --- a/leaf-server/minecraft-patches/features/0054-Configurable-unknown-command-message.patch +++ b/leaf-server/minecraft-patches/features/0054-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 d8464f77c54f547161356b78e76429923937b4a7..a59162764f141d9bb88c7084c66661f14de7ad57 100644 +index 6b8757569e0f0d756612fc180fef13143c606eaf..07e690c623fe38ce099aa2f0002e7a7456120f3b 100644 --- a/net/minecraft/commands/Commands.java +++ b/net/minecraft/commands/Commands.java -@@ -389,31 +389,9 @@ public class Commands { +@@ -383,31 +383,9 @@ 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())); @@ -42,7 +42,7 @@ index d8464f77c54f547161356b78e76429923937b4a7..a59162764f141d9bb88c7084c66661f1 org.bukkit.Bukkit.getServer().getPluginManager().callEvent(event); if (event.message() != null) { source.sendFailure(io.papermc.paper.adventure.PaperAdventure.asVanilla(event.message()), false); -@@ -676,6 +654,86 @@ public class Commands { +@@ -624,6 +602,86 @@ public class Commands { }; } diff --git a/leaf-server/minecraft-patches/features/0065-Remove-stream-in-updateFluidOnEyes.patch b/leaf-server/minecraft-patches/features/0065-Remove-stream-in-updateFluidOnEyes.patch index 36be7e6b..ff4f9d28 100644 --- a/leaf-server/minecraft-patches/features/0065-Remove-stream-in-updateFluidOnEyes.patch +++ b/leaf-server/minecraft-patches/features/0065-Remove-stream-in-updateFluidOnEyes.patch @@ -46,10 +46,10 @@ index 6c7edbbf3935c40ccb78bee680ea75431718b9bd..a1b4dc70d555cce5e06c0298736d8b89 public String toString() { return "Reference{" + this.key + "=" + this.value + "}"; diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java -index 8bb2abb01f1af34d6829cbbf759a425d871f3e3f..40bc2f9ffc565229f1ba8910ebc3bb7be5f849c6 100644 +index 970420761b2c3b82a60479c556e76e385bf211e1..4d88aa70c01e03baf8aea897b00f335c7be91f46 100644 --- a/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java -@@ -1983,7 +1983,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -1984,7 +1984,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess FluidState fluidState = this.level().getFluidState(blockPos); double d = blockPos.getY() + fluidState.getHeight(this.level(), blockPos); if (d > eyeY) { diff --git a/leaf-server/minecraft-patches/features/0084-Multithreaded-Tracker.patch b/leaf-server/minecraft-patches/features/0084-Multithreaded-Tracker.patch index 02700732..0b80083a 100644 --- a/leaf-server/minecraft-patches/features/0084-Multithreaded-Tracker.patch +++ b/leaf-server/minecraft-patches/features/0084-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 f9e335c86684969b744a7d7c1d96458e830bbd35..9f3fe9ffdbd2973754898233cca60b7335d671c9 100644 +index 23f57512e2b4284af0bdbb6f4fc823f26a32d739..623d5e02090b18b2b54dd6fc0da5e579021caca5 100644 --- a/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java -@@ -2495,7 +2495,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -2497,7 +2497,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe @Override public LevelEntityGetter getEntities() { @@ -231,7 +231,7 @@ index f9e335c86684969b744a7d7c1d96458e830bbd35..9f3fe9ffdbd2973754898233cca60b73 } diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 7b493b28f57977c92c4a45049cedcb0cedbe8ae9..89a9a9738ae1a6b67fa3840000af496ebcff67da 100644 +index 9960b26d5f5d931bacea3fb5c8fbe14dddd8d0e2..b6070af21a2f8f393146cab36488506eb0d308d0 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/0091-Optimize-Entity-distanceToSqr.patch b/leaf-server/minecraft-patches/features/0091-Optimize-Entity-distanceToSqr.patch index faa58202..2e0a9008 100644 --- a/leaf-server/minecraft-patches/features/0091-Optimize-Entity-distanceToSqr.patch +++ b/leaf-server/minecraft-patches/features/0091-Optimize-Entity-distanceToSqr.patch @@ -8,10 +8,10 @@ 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 40bc2f9ffc565229f1ba8910ebc3bb7be5f849c6..3beb2b05265cf274f52170018cc22243b06c05e9 100644 +index 4d88aa70c01e03baf8aea897b00f335c7be91f46..4544dd876d3cbcdb9b774b4a1f0c4737f3124bc5 100644 --- a/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java -@@ -2193,31 +2193,6 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -2194,31 +2194,6 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess return new Vec3(this.xOld, this.yOld, this.zOld); } @@ -43,7 +43,7 @@ index 40bc2f9ffc565229f1ba8910ebc3bb7be5f849c6..3beb2b05265cf274f52170018cc22243 public void playerTouch(Player player) { } -@@ -5229,4 +5204,34 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -5230,4 +5205,34 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess return false; } // Purpur end - Ridables diff --git a/leaf-server/minecraft-patches/features/0096-Lithium-Skip-unnecessary-calculations-if-player-is-n.patch b/leaf-server/minecraft-patches/features/0096-Lithium-Skip-unnecessary-calculations-if-player-is-n.patch index 60526426..9e54ba97 100644 --- a/leaf-server/minecraft-patches/features/0096-Lithium-Skip-unnecessary-calculations-if-player-is-n.patch +++ b/leaf-server/minecraft-patches/features/0096-Lithium-Skip-unnecessary-calculations-if-player-is-n.patch @@ -12,7 +12,7 @@ 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 a7f87ba5a447be8bd1a4029da999aca34a583b5e..4c9c41b3d0f8752e6dc60c513a951b79945a4549 100644 +index f744c9dca670cbbcc7549be17bf51eb683dd1ae0..f70a843be612903136ae603c4d4c0bad06f4628a 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 { @@ -23,7 +23,7 @@ index a7f87ba5a447be8bd1a4029da999aca34a583b5e..4c9c41b3d0f8752e6dc60c513a951b79 int currentSwingDuration = this.getCurrentSwingDuration(); if (this.swinging) { this.swingTime++; -@@ -3665,6 +3666,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -3683,6 +3684,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/0103-Lithium-equipment-tracking.patch b/leaf-server/minecraft-patches/features/0103-Lithium-equipment-tracking.patch index 0762e577..e371af9d 100644 --- a/leaf-server/minecraft-patches/features/0103-Lithium-equipment-tracking.patch +++ b/leaf-server/minecraft-patches/features/0103-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 4c9c41b3d0f8752e6dc60c513a951b79945a4549..7d88bcb727b53217f10472d73726a96f54ebc31d 100644 +index f70a843be612903136ae603c4d4c0bad06f4628a..f4f978073fca1be8fe18bc13f64385d4c0cd4b3d 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; @@ -133,9 +133,9 @@ index 4c9c41b3d0f8752e6dc60c513a951b79945a4549..7d88bcb727b53217f10472d73726a96f + if (!isArmorStandUpdateNoTick && !this.equipmentChanged) return null; + // Leaf end - Lithium - equipment tracking Map map = null; - - for (EquipmentSlot equipmentSlot : EquipmentSlot.VALUES) { -@@ -4698,6 +4708,81 @@ public abstract class LivingEntity extends Entity implements Attackable { + // 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 { return this.lastHurtByPlayerTime; } diff --git a/leaf-server/minecraft-patches/features/0105-Cache-chunk-key.patch b/leaf-server/minecraft-patches/features/0105-Cache-chunk-key.patch index 7dd39f4d..9dd9ad7b 100644 --- a/leaf-server/minecraft-patches/features/0105-Cache-chunk-key.patch +++ b/leaf-server/minecraft-patches/features/0105-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 9f3fe9ffdbd2973754898233cca60b7335d671c9..dd1827931e7a2f771444867ad556444de5001060 100644 +index 623d5e02090b18b2b54dd6fc0da5e579021caca5..26223a3c26691303a91b988b6d84373a303785dd 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 9f3fe9ffdbd2973754898233cca60b7335d671c9..dd1827931e7a2f771444867ad556444d return; } -@@ -2568,7 +2568,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -2570,7 +2570,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe public boolean isNaturalSpawningAllowed(ChunkPos chunkPos) { // Paper start - rewrite chunk system diff --git a/leaf-server/paper-patches/features/0004-Purpur-Server-Paper-Changes.patch b/leaf-server/paper-patches/features/0004-Purpur-Server-Paper-Changes.patch index aa80ff2d..216804c9 100644 --- a/leaf-server/paper-patches/features/0004-Purpur-Server-Paper-Changes.patch +++ b/leaf-server/paper-patches/features/0004-Purpur-Server-Paper-Changes.patch @@ -3,10 +3,12 @@ From: Github Actions Date: Thu, 16 Jan 2025 11:21:12 +0000 Subject: [PATCH] Purpur Server Paper Changes +TODO: Add Improve output of plugins command back tonight + Original license: MIT Original project: https://github.com/PurpurMC/Purpur -Commit: e6a1ebd3f6e4cfe93f96dd82ecb3234f0482768a +Commit: 22bd4186ca92f21a01714ba8e6b4823ccc576c81 Patches listed below are removed in this patch, They exists in Gale or Leaf: * "Rebrand.patch" @@ -142,134 +144,6 @@ index 6bdc683b5ade408ee27f1d6636b4d60c8c89cb7c..bc6d3898d8784e50a0e2264bbb5bde63 ignored.add("goal_selector_1"); ignored.add("goal_selector_2"); -diff --git a/src/main/java/io/papermc/paper/command/PaperPluginsCommand.java b/src/main/java/io/papermc/paper/command/PaperPluginsCommand.java -index f0fce4113fb07c64adbec029d177c236cbdcbae8..94dc9f97de086e3ab51d1b000eb116cf868a75db 100644 ---- a/src/main/java/io/papermc/paper/command/PaperPluginsCommand.java -+++ b/src/main/java/io/papermc/paper/command/PaperPluginsCommand.java -@@ -78,10 +78,10 @@ public class PaperPluginsCommand extends BukkitCommand { - this.setAliases(Arrays.asList("pl")); - } - -- private static List formatProviders(TreeMap> plugins) { -+ private static List formatProviders(TreeMap> plugins, @NotNull CommandSender sender) { // Purpur - Improve output of plugins command - List components = new ArrayList<>(plugins.size()); - for (PluginProvider entry : plugins.values()) { -- components.add(formatProvider(entry)); -+ components.add(formatProvider(entry, sender)); // Purpur - Improve output of plugins command - } - - boolean isFirst = true; -@@ -109,7 +109,7 @@ public class PaperPluginsCommand extends BukkitCommand { - return formattedSublists; - } - -- private static Component formatProvider(PluginProvider provider) { -+ private static Component formatProvider(PluginProvider provider, @NotNull CommandSender sender) { // Purpur - Improve output of plugins command - TextComponent.Builder builder = Component.text(); - if (provider instanceof SpigotPluginProvider spigotPluginProvider && CraftMagicNumbers.isLegacy(spigotPluginProvider.getMeta())) { - builder.append(LEGACY_PLUGIN_STAR); -@@ -117,13 +117,65 @@ public class PaperPluginsCommand extends BukkitCommand { - - String name = provider.getMeta().getName(); - Component pluginName = Component.text(name, fromStatus(provider)) -- .clickEvent(ClickEvent.runCommand("/version " + name)); -+ // Purpur start - Improve output of plugins command -+ .clickEvent(ClickEvent.suggestCommand("/version " + name)); -+ -+ if (sender instanceof org.bukkit.entity.Player && sender.hasPermission("bukkit.command.version")) { -+ // Event components -+ String description = provider.getMeta().getDescription(); -+ TextComponent.Builder hover = Component.text(); -+ hover.append(Component.text("Version: ", NamedTextColor.WHITE)).append(Component.text(provider.getMeta().getVersion(), NamedTextColor.GREEN)); -+ -+ if (description != null) { -+ hover.append(Component.newline()) -+ .append(Component.text("Description: ", NamedTextColor.WHITE)) -+ .append(Component.text(description, NamedTextColor.GREEN)); -+ } -+ -+ if (provider.getMeta().getWebsite() != null) { -+ hover.append(Component.newline()) -+ .append(Component.text("Website: ", NamedTextColor.WHITE)) -+ .append(Component.text(provider.getMeta().getWebsite(), NamedTextColor.GREEN)); -+ } -+ -+ if (!provider.getMeta().getAuthors().isEmpty()) { -+ hover.append(Component.newline()); -+ if (provider.getMeta().getAuthors().size() == 1) { -+ hover.append(Component.text("Author: ")); -+ } else { -+ hover.append(Component.text("Authors: ")); -+ } -+ -+ hover.append(getAuthors(provider.getMeta())); -+ } -+ -+ pluginName = pluginName.hoverEvent(hover.build()); -+ } -+ // Purpur end - Improve output of plugins command - - builder.append(pluginName); - - return builder.build(); - } - -+ // Purpur start - Improve output of plugins command -+ @NotNull -+ private static TextComponent getAuthors(@NotNull final PluginMeta pluginMeta) { -+ TextComponent.Builder builder = Component.text(); -+ List authors = pluginMeta.getAuthors(); -+ -+ for (int i = 0; i < authors.size(); i++) { -+ if (i > 0) { -+ builder.append(Component.text(i < authors.size() - 1 ? ", " : " and ", NamedTextColor.WHITE)); -+ } -+ -+ builder.append(Component.text(authors.get(i), NamedTextColor.GREEN)); -+ } -+ -+ return builder.build(); -+ } -+ // Purpur end - Improve output of plugins command -+ - private static Component asPlainComponents(String strings) { - net.kyori.adventure.text.TextComponent.Builder builder = Component.text(); - for (String string : strings.split("\n")) { -@@ -182,24 +234,24 @@ public class PaperPluginsCommand extends BukkitCommand { - } - } - -- Component infoMessage = Component.text("Server Plugins (%s):".formatted(paperPlugins.size() + spigotPlugins.size()), NamedTextColor.WHITE); -+ //Component infoMessage = Component.text("Server Plugins (%s):".formatted(paperPlugins.size() + spigotPlugins.size()), NamedTextColor.WHITE); // Purpur - Improve output of plugins command - //.append(INFO_ICON_START.hoverEvent(SERVER_PLUGIN_INFO)); TODO: Add docs - -- sender.sendMessage(infoMessage); -+ //sender.sendMessage(infoMessage); // Purpur - Improve output of plugins command - -- if (!paperPlugins.isEmpty()) { -- sender.sendMessage(PAPER_HEADER); -- } -+ //if (!paperPlugins.isEmpty()) { // Purpur - Improve output of plugins command -+ sender.sendMessage(PAPER_HEADER.append(Component.text(" (%s):".formatted(paperPlugins.size())))); // Purpur - Improve output of plugins command -+ //} // Purpur - Improve output of plugins command - -- for (Component component : formatProviders(paperPlugins)) { -+ for (Component component : formatProviders(paperPlugins, sender)) { // Purpur - Improve output of plugins command - sender.sendMessage(component); - } - -- if (!spigotPlugins.isEmpty()) { -- sender.sendMessage(BUKKIT_HEADER); -- } -+ //if (!spigotPlugins.isEmpty()) { // Purpur - Improve output of plugins command -+ sender.sendMessage(BUKKIT_HEADER.append(Component.text(" (%s):".formatted(spigotPlugins.size())))); // Purpur - Improve output of plugins command -+ //} // Purpur - Improve output of plugins command - -- for (Component component : formatProviders(spigotPlugins)) { -+ for (Component component : formatProviders(spigotPlugins, sender)) { // Purpur - Improve output of plugins command - sender.sendMessage(component); - } - diff --git a/src/main/java/io/papermc/paper/configuration/PaperConfigurations.java b/src/main/java/io/papermc/paper/configuration/PaperConfigurations.java index 352d62385e56d5805510596ec9424e5d14336861..b4d4ad2dc7d719d72c0786791f803fbcf0982d1f 100644 --- a/src/main/java/io/papermc/paper/configuration/PaperConfigurations.java @@ -559,10 +433,10 @@ 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 6f94aed7e136bd13dddaca1e2a214e55cf87403b..bdefa58dac3236e26ca40f92c1c64f8cffa01582 100644 +index 0b085b3748a2700c3eb3bc158e5d42afae1efc1d..1816ec002c91d108529e9b1dcd7b5f0a7fbc52ef 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -428,6 +428,20 @@ public final class CraftServer implements Server { +@@ -429,6 +429,20 @@ public final class CraftServer implements Server { this.paperPluginManager = new io.papermc.paper.plugin.manager.PaperPluginManagerImpl(this, this.commandMap, pluginManager); this.pluginManager.paperPluginManager = this.paperPluginManager; // Paper end @@ -583,7 +457,7 @@ index 6f94aed7e136bd13dddaca1e2a214e55cf87403b..bdefa58dac3236e26ca40f92c1c64f8c CraftRegistry.setMinecraftRegistry(console.registryAccess()); -@@ -1089,6 +1103,7 @@ public final class CraftServer implements Server { +@@ -1090,6 +1104,7 @@ public final class CraftServer implements Server { org.spigotmc.SpigotConfig.init((File) this.console.options.valueOf("spigot-settings")); // Spigot this.console.paperConfigurations.reloadConfigs(this.console); this.console.galeConfigurations.reloadConfigs(this.console); // Gale - Gale configuration @@ -591,7 +465,7 @@ index 6f94aed7e136bd13dddaca1e2a214e55cf87403b..bdefa58dac3236e26ca40f92c1c64f8c for (ServerLevel world : this.console.getAllLevels()) { // world.serverLevelData.setDifficulty(config.difficulty); // Paper - per level difficulty world.setSpawnSettings(world.serverLevelData.getDifficulty() != Difficulty.PEACEFUL && config.spawnMonsters); // Paper - per level difficulty (from MinecraftServer#setDifficulty(ServerLevel, Difficulty, boolean)) -@@ -1104,6 +1119,7 @@ public final class CraftServer implements Server { +@@ -1105,6 +1120,7 @@ public final class CraftServer implements Server { } } world.spigotConfig.init(); // Spigot @@ -599,7 +473,7 @@ index 6f94aed7e136bd13dddaca1e2a214e55cf87403b..bdefa58dac3236e26ca40f92c1c64f8c } Plugin[] pluginClone = pluginManager.getPlugins().clone(); // Paper -@@ -1122,6 +1138,7 @@ public final class CraftServer implements Server { +@@ -1123,6 +1139,7 @@ public final class CraftServer implements Server { io.papermc.paper.command.PaperCommands.registerCommands(this.console); // Paper org.galemc.gale.command.GaleCommands.registerCommands(this.console); // Gale - Gale commands - register commands this.spark.registerCommandBeforePlugins(this); // Paper - spark @@ -607,7 +481,7 @@ index 6f94aed7e136bd13dddaca1e2a214e55cf87403b..bdefa58dac3236e26ca40f92c1c64f8c this.overrideAllCommandBlockCommands = this.commandsConfiguration.getStringList("command-block-overrides").contains("*"); this.ignoreVanillaPermissions = this.commandsConfiguration.getBoolean("ignore-vanilla-permissions"); -@@ -1653,6 +1670,60 @@ public final class CraftServer implements Server { +@@ -1654,6 +1671,60 @@ public final class CraftServer implements Server { return true; } @@ -668,7 +542,7 @@ index 6f94aed7e136bd13dddaca1e2a214e55cf87403b..bdefa58dac3236e26ca40f92c1c64f8c @Override public List getRecipesFor(ItemStack result) { Preconditions.checkArgument(result != null, "ItemStack cannot be null"); -@@ -3060,6 +3131,18 @@ public final class CraftServer implements Server { +@@ -3066,6 +3137,18 @@ public final class CraftServer implements Server { } // Gale end - Gale configuration - API @@ -687,7 +561,7 @@ index 6f94aed7e136bd13dddaca1e2a214e55cf87403b..bdefa58dac3236e26ca40f92c1c64f8c @Override public void restart() { org.spigotmc.RestartCommand.restart(); -@@ -3352,4 +3435,18 @@ public final class CraftServer implements Server { +@@ -3358,4 +3441,18 @@ public final class CraftServer implements Server { return MinecraftServer.lastTickOversleepTime; } // Gale end - YAPFA - last tick time - API @@ -707,10 +581,10 @@ index 6f94aed7e136bd13dddaca1e2a214e55cf87403b..bdefa58dac3236e26ca40f92c1c64f8c + // Purpur end - Lagging threshold } diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -index 284b58ece65d9cf6411a79abb748f1dfa52edc92..ba5797e9e518d7a1054bad0c7a1fb10b9eaf32bd 100644 +index 1439d282167dc8a2e66f4896849153b810112988..ca60f91ef012c94174a0803eb77699ba9ecff5e1 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -@@ -2373,6 +2373,50 @@ public class CraftWorld extends CraftRegionAccessor implements World { +@@ -2346,6 +2346,50 @@ public class CraftWorld extends CraftRegionAccessor implements World { return (this.getHandle().getDragonFight() == null) ? null : new CraftDragonBattle(this.getHandle().getDragonFight()); } @@ -931,7 +805,7 @@ index d657fd2c507a5b215aeab0a5f3e9c2ee892a27c8..3604d92c122b5c8be823098ce7b91e57 // Paper start @Override diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java -index 659f0f9c7e45e5174f4736c4878a78d330b1d4ee..0d46585c0128cea7265870de5fe260681c65d7c3 100644 +index 1ee0ad266955e36b729ba31eb75aad9289acd8e4..8635cd772c5c2ae0ba326812ff2a1a179285a86f 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java @@ -90,6 +90,25 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { @@ -1140,10 +1014,10 @@ index 351f42842b780d053cd2e5bad9ae299449141b10..054d2c2b93c43faeeaf56f482eb7b943 + // Purpur end - Llama API } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index baffa036078bfc38505f9008a54a5abff65704db..d84d716629d93e264bc40c565e9fedd1ce38722c 100644 +index 3260f20b667918dd7cd641d5d96688721fce2f9c..5ee96349f7d720e6cf36ced42c7197579730ccbd 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -591,10 +591,15 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -592,10 +592,15 @@ public class CraftPlayer extends CraftHumanEntity implements Player { @Override public void setPlayerListName(String name) { @@ -1160,7 +1034,7 @@ index baffa036078bfc38505f9008a54a5abff65704db..d84d716629d93e264bc40c565e9fedd1 if (this.getHandle().connection == null) return; // Paper - Updates are possible before the player has fully joined for (ServerPlayer player : (List) this.server.getHandle().players) { if (player.getBukkitEntity().canSee(this)) { -@@ -1433,6 +1438,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -1434,6 +1439,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { // Paper start - Teleport passenger API // Don't allow teleporting between worlds while keeping passengers if (ignorePassengers && entity.isVehicle() && location.getWorld() != this.getWorld()) { @@ -1168,7 +1042,7 @@ index baffa036078bfc38505f9008a54a5abff65704db..d84d716629d93e264bc40c565e9fedd1 return false; } -@@ -1454,6 +1460,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -1455,6 +1461,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { } if (entity.isVehicle() && !ignorePassengers) { // Paper - Teleport API @@ -1176,7 +1050,7 @@ index baffa036078bfc38505f9008a54a5abff65704db..d84d716629d93e264bc40c565e9fedd1 return false; } -@@ -2752,6 +2759,28 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -2753,6 +2760,28 @@ public class CraftPlayer extends CraftHumanEntity implements Player { return this.getHandle().getAbilities().walkingSpeed * 2f; } @@ -1205,7 +1079,7 @@ index baffa036078bfc38505f9008a54a5abff65704db..d84d716629d93e264bc40c565e9fedd1 private void validateSpeed(float value) { Preconditions.checkArgument(value <= 1f && value >= -1f, "Speed value (%s) need to be between -1f and 1f", value); } -@@ -3581,4 +3610,75 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -3583,4 +3612,75 @@ public class CraftPlayer extends CraftHumanEntity implements Player { handle.containerMenu.broadcastChanges(); return new PaperPlayerGiveResult(leftovers.build(), drops.build()); } @@ -1362,7 +1236,7 @@ index c1b7f1281fbd41e765d2c1881763ca25b20e924d..53c620e717d39ef16f44c9697ac4809a + // 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 fd4c1d67c134caf818f10bfd54831863c485f6a9..0131eaade61bc30a094a3166e8cd58cd7cfd7921 100644 +index 57c3f8531bf85b53af3a4aad6e9e369d5cff0ce3..a9edb1818edb50e739d507d6dacc1409e70db8d5 100644 --- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java @@ -602,6 +602,15 @@ public class CraftEventFactory { @@ -1381,16 +1255,16 @@ index fd4c1d67c134caf818f10bfd54831863c485f6a9..0131eaade61bc30a094a3166e8cd58cd return event; } -@@ -1131,7 +1140,7 @@ public class CraftEventFactory { - return CraftEventFactory.callEntityDamageEvent(source.getDirectBlock(), source.getDirectBlockState(), entity, DamageCause.LAVA, bukkitDamageSource, modifiers, modifierFunctions, cancelled); - } else if (source.getDirectBlock() != null) { +@@ -1135,7 +1144,7 @@ public class CraftEventFactory { DamageCause cause; -- if (source.is(DamageTypes.CACTUS) || source.is(DamageTypes.SWEET_BERRY_BUSH) || source.is(DamageTypes.STALAGMITE) || source.is(DamageTypes.FALLING_STALACTITE) || source.is(DamageTypes.FALLING_ANVIL)) { -+ if (source.is(DamageTypes.CACTUS) || source.is(DamageTypes.SWEET_BERRY_BUSH) || source.is(DamageTypes.STALAGMITE) || source.is(DamageTypes.FALLING_STALACTITE) || source.is(DamageTypes.FALLING_ANVIL) || source.isStonecutter()) { // Purpur - Stonecutter damage + if (source.knownCause() != null) { + cause = source.knownCause(); +- } else if (source.is(DamageTypes.CACTUS) || source.is(DamageTypes.SWEET_BERRY_BUSH) || source.is(DamageTypes.STALAGMITE) || source.is(DamageTypes.FALLING_STALACTITE) || source.is(DamageTypes.FALLING_ANVIL)) { ++ } else if (source.is(DamageTypes.CACTUS) || source.is(DamageTypes.SWEET_BERRY_BUSH) || source.is(DamageTypes.STALAGMITE) || source.is(DamageTypes.FALLING_STALACTITE) || source.is(DamageTypes.FALLING_ANVIL) || source.isStonecutter()) { // Purpur - Stonecutter damage cause = DamageCause.CONTACT; } else if (source.is(DamageTypes.HOT_FLOOR)) { cause = DamageCause.HOT_FLOOR; -@@ -1191,6 +1200,7 @@ public class CraftEventFactory { +@@ -1193,6 +1202,7 @@ public class CraftEventFactory { EntityDamageEvent event; if (damager != null) { event = new EntityDamageByEntityEvent(damager.getBukkitEntity(), damagee.getBukkitEntity(), cause, bukkitDamageSource, modifiers, modifierFunctions, critical); @@ -1494,10 +1368,10 @@ index 792cb6adf0c7a6335cc5985fce8bed2e0f1149af..5734c5caffda79383ae30df20c3defb5 + // Purpur end - Anvil API } diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java -index 3799973696eabbdc992bee4ff24175fc28ec8d7c..ae68b1d72be45503acc8c7a52b20d95d7b651f06 100644 +index a6668ae293737a78316724a94866ad7781af68a4..b389563f1efde27341ebf26276ca5c97e495a16a 100644 --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java -@@ -666,4 +666,285 @@ public final class CraftItemStack extends ItemStack { +@@ -693,4 +693,285 @@ public final class CraftItemStack extends ItemStack { } // Paper end - data component API diff --git a/leaf-server/paper-patches/features/0006-Remove-Timings.patch b/leaf-server/paper-patches/features/0006-Remove-Timings.patch index 3c1cfdc5..04d531b9 100644 --- a/leaf-server/paper-patches/features/0006-Remove-Timings.patch +++ b/leaf-server/paper-patches/features/0006-Remove-Timings.patch @@ -47,10 +47,10 @@ index 097500a59336db1bbfffcd1aa4cff7a8586e46ec..f06076864582ed153c6154fd7f3e9101 @Override diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index de2c10a18869d3fcfc1ae1329489155d7bdc4dd8..911bb12bcbcae2b8046d786e7b828cc1e1bcdb3a 100644 +index 1816ec002c91d108529e9b1dcd7b5f0a7fbc52ef..aa6f0588f282e3152ef9639d6fb2b8cd1d54bdb7 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -1048,10 +1048,8 @@ public final class CraftServer implements Server { +@@ -1049,10 +1049,8 @@ public final class CraftServer implements Server { commands.performCommand(results, commandLine, commandLine, true); } catch (CommandException ex) { this.pluginManager.callEvent(new com.destroystokyo.paper.event.server.ServerExceptionEvent(new com.destroystokyo.paper.exception.ServerCommandException(ex, target, sender, args))); // Paper diff --git a/leaf-server/paper-patches/features/0007-KeYi-Player-Skull-API.patch b/leaf-server/paper-patches/features/0007-KeYi-Player-Skull-API.patch index 5dcf3a53..ecb3d1ae 100644 --- a/leaf-server/paper-patches/features/0007-KeYi-Player-Skull-API.patch +++ b/leaf-server/paper-patches/features/0007-KeYi-Player-Skull-API.patch @@ -7,10 +7,10 @@ Original license: MIT Original project: https://github.com/KeYiMC/KeYi diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index d84d716629d93e264bc40c565e9fedd1ce38722c..b78782a90bd9dcc43e9b98781f95a619b00d88cb 100644 +index 5ee96349f7d720e6cf36ced42c7197579730ccbd..9604dbd470a58790637f4caa691043ff8b9b9721 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -3681,4 +3681,31 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -3683,4 +3683,31 @@ public class CraftPlayer extends CraftHumanEntity implements Player { this.getHandle().connection.send(new net.minecraft.network.protocol.game.ClientboundPlayerCombatKillPacket(getEntityId(), io.papermc.paper.adventure.PaperAdventure.asVanilla(message))); } // Purpur end - Death screen API diff --git a/leaf-server/paper-patches/features/0008-Slice-Smooth-Teleports.patch b/leaf-server/paper-patches/features/0008-Slice-Smooth-Teleports.patch index 2fe42f08..6cc719c0 100644 --- a/leaf-server/paper-patches/features/0008-Slice-Smooth-Teleports.patch +++ b/leaf-server/paper-patches/features/0008-Slice-Smooth-Teleports.patch @@ -9,10 +9,10 @@ Original project: https://github.com/Cryptite/Slice Co-authored-by: HaHaWTH <102713261+HaHaWTH@users.noreply.github.com> diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index b78782a90bd9dcc43e9b98781f95a619b00d88cb..5480b93b922f282fb2193a5b7ed16651764de5f5 100644 +index 9604dbd470a58790637f4caa691043ff8b9b9721..add4414067eaaaa2cc5fa3e02aa6cd2a3cd5dadc 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -1383,6 +1383,25 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -1384,6 +1384,25 @@ public class CraftPlayer extends CraftHumanEntity implements Player { // Paper end - Teleportation API } diff --git a/leaf-server/paper-patches/features/0009-Leaves-Protocol-Core.patch b/leaf-server/paper-patches/features/0009-Leaves-Protocol-Core.patch index 5dfcea97..686d82ac 100644 --- a/leaf-server/paper-patches/features/0009-Leaves-Protocol-Core.patch +++ b/leaf-server/paper-patches/features/0009-Leaves-Protocol-Core.patch @@ -12,10 +12,10 @@ Original project: https://github.com/LeavesMC/Leaves Commit: 41476d86922416c45f703df2871890831fc42bb5 diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index c4be459991b458aaf9288b467e73f142e9b26825..53dbd3022fc4ab4786b2b9d8de27b84bfee81935 100644 +index aa6f0588f282e3152ef9639d6fb2b8cd1d54bdb7..514c2d414ac59c71929a7686204465c72d122513 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -507,6 +507,7 @@ public final class CraftServer implements Server { +@@ -508,6 +508,7 @@ public final class CraftServer implements Server { this.potionBrewer = new io.papermc.paper.potion.PaperPotionBrewer(console); // Paper - custom potion mixes datapackManager = new io.papermc.paper.datapack.PaperDatapackManager(console.getPackRepository()); // Paper this.spark = new io.papermc.paper.SparksFly(this); // Paper - spark @@ -23,7 +23,7 @@ index c4be459991b458aaf9288b467e73f142e9b26825..53dbd3022fc4ab4786b2b9d8de27b84b } public boolean getCommandBlockOverride(String command) { -@@ -1139,6 +1140,7 @@ public final class CraftServer implements Server { +@@ -1140,6 +1141,7 @@ public final class CraftServer implements Server { org.purpurmc.purpur.PurpurConfig.registerCommands(); // Purpur - Purpur config files this.overrideAllCommandBlockCommands = this.commandsConfiguration.getStringList("command-block-overrides").contains("*"); this.ignoreVanillaPermissions = this.commandsConfiguration.getBoolean("ignore-vanilla-permissions"); diff --git a/leaf-server/paper-patches/features/0010-Leaves-Replay-Mod-API.patch b/leaf-server/paper-patches/features/0010-Leaves-Replay-Mod-API.patch index b0b5b185..591cc4fe 100644 --- a/leaf-server/paper-patches/features/0010-Leaves-Replay-Mod-API.patch +++ b/leaf-server/paper-patches/features/0010-Leaves-Replay-Mod-API.patch @@ -27,10 +27,10 @@ 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 53dbd3022fc4ab4786b2b9d8de27b84bfee81935..acd4369d6b8766bce201f35105a90bfe3ae99bb1 100644 +index 514c2d414ac59c71929a7686204465c72d122513..f1d6e2e31ef776a792124d79446323d0bb2c611f 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -321,6 +321,8 @@ public final class CraftServer implements Server { +@@ -322,6 +322,8 @@ public final class CraftServer implements Server { private final io.papermc.paper.threadedregions.scheduler.FoliaAsyncScheduler asyncScheduler = new io.papermc.paper.threadedregions.scheduler.FoliaAsyncScheduler(); private final io.papermc.paper.threadedregions.scheduler.FoliaGlobalRegionScheduler globalRegionScheduler = new io.papermc.paper.threadedregions.scheduler.FoliaGlobalRegionScheduler(); @@ -39,7 +39,7 @@ index 53dbd3022fc4ab4786b2b9d8de27b84bfee81935..acd4369d6b8766bce201f35105a90bfe @Override public final io.papermc.paper.threadedregions.scheduler.RegionScheduler getRegionScheduler() { return this.regionizedScheduler; -@@ -409,7 +411,7 @@ public final class CraftServer implements Server { +@@ -410,7 +412,7 @@ public final class CraftServer implements Server { public CraftServer(DedicatedServer console, PlayerList playerList) { this.console = console; this.playerList = (DedicatedPlayerList) playerList; @@ -48,7 +48,7 @@ index 53dbd3022fc4ab4786b2b9d8de27b84bfee81935..acd4369d6b8766bce201f35105a90bfe @Override public CraftPlayer apply(ServerPlayer player) { return player.getBukkitEntity(); -@@ -3449,4 +3451,11 @@ public final class CraftServer implements Server { +@@ -3455,4 +3457,11 @@ public final class CraftServer implements Server { return getServer().lagging; } // Purpur end - Lagging threshold @@ -61,7 +61,7 @@ index 53dbd3022fc4ab4786b2b9d8de27b84bfee81935..acd4369d6b8766bce201f35105a90bfe + // Leaves end - replay mod api } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java -index 0d46585c0128cea7265870de5fe260681c65d7c3..5c99cdd9e88c9a9a350393b755037b5c7433377a 100644 +index 8635cd772c5c2ae0ba326812ff2a1a179285a86f..cc024874fbde9678bdddfdca7c25080869d66de2 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java @@ -117,6 +117,8 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { @@ -74,10 +74,10 @@ index 0d46585c0128cea7265870de5fe260681c65d7c3..5c99cdd9e88c9a9a350393b755037b5c if (entity instanceof EnderDragonPart complexPart) { if (complexPart.parentMob instanceof EnderDragon) { diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 5480b93b922f282fb2193a5b7ed16651764de5f5..6b72004ac0d40bba230e4d721a868fdd37117e22 100644 +index add4414067eaaaa2cc5fa3e02aa6cd2a3cd5dadc..020f6fdb1e7a17a6189cefb9c2350289e2e0e10b 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -2283,7 +2283,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -2284,7 +2284,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { @Override public boolean canSee(Player player) { diff --git a/leaf-server/paper-patches/features/0013-SparklyPaper-Optimize-canSee-checks.patch b/leaf-server/paper-patches/features/0013-SparklyPaper-Optimize-canSee-checks.patch index 2e5e8fa8..f1dddfcf 100644 --- a/leaf-server/paper-patches/features/0013-SparklyPaper-Optimize-canSee-checks.patch +++ b/leaf-server/paper-patches/features/0013-SparklyPaper-Optimize-canSee-checks.patch @@ -16,10 +16,10 @@ This seems stupid, but it does seem that it improves the performance a bit, and We also create a "canSee" method tailored for "ChunkMap#updatePlayer()", a method without the equals check (the "updatePlayer()" already checks if the entity is the same entity) because the CraftPlayer's `equals()` check is a *bit* expensive compared to only checking the object's identity, and because the identity has already been check, we don't need to check it twice. diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 6b72004ac0d40bba230e4d721a868fdd37117e22..9353905312c53b9e54f54d774b80a22f414a9a56 100644 +index 020f6fdb1e7a17a6189cefb9c2350289e2e0e10b..ecf97945743b3988d910a7f5b010732d4b31526b 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -213,7 +213,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -214,7 +214,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { private boolean hasPlayedBefore = false; private final ConversationTracker conversationTracker = new ConversationTracker(); private final Set channels = new HashSet(); @@ -28,7 +28,7 @@ index 6b72004ac0d40bba230e4d721a868fdd37117e22..9353905312c53b9e54f54d774b80a22f private final Set unlistedEntities = new HashSet<>(); // Paper - Add Listing API for Player private static final WeakHashMap> pluginWeakReferences = new WeakHashMap<>(); private int hash = 0; -@@ -2288,9 +2288,16 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -2289,9 +2289,16 @@ public class CraftPlayer extends CraftHumanEntity implements Player { @Override public boolean canSee(org.bukkit.entity.Entity entity) { diff --git a/leaf-server/paper-patches/features/0014-Including-5s-in-getTPS.patch b/leaf-server/paper-patches/features/0014-Including-5s-in-getTPS.patch index 971308d4..582ea006 100644 --- a/leaf-server/paper-patches/features/0014-Including-5s-in-getTPS.patch +++ b/leaf-server/paper-patches/features/0014-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 acd4369d6b8766bce201f35105a90bfe3ae99bb1..19de30ac7bf35f1267515857d1790019613f9cc5 100644 +index f1d6e2e31ef776a792124d79446323d0bb2c611f..ef0c0374261bc4d673e0b8150e268328125e3542 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -3173,6 +3173,8 @@ public final class CraftServer implements Server { +@@ -3179,6 +3179,8 @@ public final class CraftServer implements Server { @Override public double[] getTPS() { diff --git a/leaf-server/paper-patches/features/0018-Matter-Secure-Seed.patch b/leaf-server/paper-patches/features/0018-Matter-Secure-Seed.patch index 58a459fc..6eae85d5 100644 --- a/leaf-server/paper-patches/features/0018-Matter-Secure-Seed.patch +++ b/leaf-server/paper-patches/features/0018-Matter-Secure-Seed.patch @@ -32,10 +32,10 @@ index de8b9048c8395c05b8688bc9d984b8ad680f15b3..fab62216edd7181585fbf1e5cd9870e8 @Override diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 19de30ac7bf35f1267515857d1790019613f9cc5..d8e90d528f8bf300a84d2105651059106c5f7d99 100644 +index ef0c0374261bc4d673e0b8150e268328125e3542..2f030eae4603f9a33fbc8d0e9b400479ab336e32 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -1413,7 +1413,11 @@ public final class CraftServer implements Server { +@@ -1414,7 +1414,11 @@ public final class CraftServer implements Server { registryAccess = levelDataAndDimensions.dimensions().dimensionsRegistryAccess(); } else { LevelSettings levelSettings; diff --git a/leaf-server/paper-patches/features/0021-Replace-world-map-with-optimized-collection.patch b/leaf-server/paper-patches/features/0021-Replace-world-map-with-optimized-collection.patch index 358124ce..7b753545 100644 --- a/leaf-server/paper-patches/features/0021-Replace-world-map-with-optimized-collection.patch +++ b/leaf-server/paper-patches/features/0021-Replace-world-map-with-optimized-collection.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Replace world map with optimized collection diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index c58a626e9ab72f45665cda40581e268ead322091..dc7ef642c8dfdb643dda3f3eed66b8371a6911fc 100644 +index 2f030eae4603f9a33fbc8d0e9b400479ab336e32..116c842ef64835152a662476b6c33152360c1a4a 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -284,7 +284,7 @@ public final class CraftServer implements Server { +@@ -285,7 +285,7 @@ public final class CraftServer implements Server { private final StructureManager structureManager; protected final DedicatedServer console; protected final DedicatedPlayerList playerList; diff --git a/leaf-server/paper-patches/features/0026-Faster-CraftServer-getworlds-list-creation.patch b/leaf-server/paper-patches/features/0026-Faster-CraftServer-getworlds-list-creation.patch index 1a600538..c9e72749 100644 --- a/leaf-server/paper-patches/features/0026-Faster-CraftServer-getworlds-list-creation.patch +++ b/leaf-server/paper-patches/features/0026-Faster-CraftServer-getworlds-list-creation.patch @@ -8,10 +8,10 @@ replacing ArrayList with Fastutil ObjectArrayList brings about 40% performance improvement in benchmark. diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index dc7ef642c8dfdb643dda3f3eed66b8371a6911fc..de8001b527d354b16ccc6919675fd5d5038410c9 100644 +index 116c842ef64835152a662476b6c33152360c1a4a..fcedf7af3fff97821cbb7ee2e0fef070659deb5a 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -992,7 +992,7 @@ public final class CraftServer implements Server { +@@ -993,7 +993,7 @@ public final class CraftServer implements Server { @Override public List getWorlds() { diff --git a/leaf-server/paper-patches/features/0028-Async-structure-locate-api.patch b/leaf-server/paper-patches/features/0028-Async-structure-locate-api.patch index 6c3f8b12..fa396fc3 100644 --- a/leaf-server/paper-patches/features/0028-Async-structure-locate-api.patch +++ b/leaf-server/paper-patches/features/0028-Async-structure-locate-api.patch @@ -9,10 +9,10 @@ Added some asynchronous structure locate methods in World, requires async-locator to be enabled in Leaf config, or else it will fall back to sync methods. diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -index ba5797e9e518d7a1054bad0c7a1fb10b9eaf32bd..5d3c7a131c6becbf0c95e5c7bd8b4e727a102b24 100644 +index ca60f91ef012c94174a0803eb77699ba9ecff5e1..15673166e566b2a6d5093210d99b154e69fab0ad 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -@@ -2298,6 +2298,45 @@ public class CraftWorld extends CraftRegionAccessor implements World { +@@ -2271,6 +2271,45 @@ public class CraftWorld extends CraftRegionAccessor implements World { return new CraftStructureSearchResult(CraftStructure.minecraftToBukkit(found.getSecond().value()), CraftLocation.toBukkit(found.getFirst(), this)); }