diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index fa85615bb..24c276e11 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -17,8 +17,7 @@ jobs: distribution: temurin java-version: 21 cache: 'gradle' - - uses: gradle/wrapper-validation-action@v2 - - uses: gradle/actions/setup-gradle@v3 + - uses: gradle/actions/setup-gradle@v4 - name: Configure Git run: git config --global user.email "no-reply@github.com" && git config --global user.name "Github Actions" - name: Apply Patches diff --git a/.idea/runConfigurations/Run_Purpur_Paperclip_Jar.xml b/.idea/runConfigurations/Run_Purpur_Paperclip_Jar.xml index dcfd05e12..3f3ea1dc5 100644 --- a/.idea/runConfigurations/Run_Purpur_Paperclip_Jar.xml +++ b/.idea/runConfigurations/Run_Purpur_Paperclip_Jar.xml @@ -1,6 +1,6 @@ - - \ No newline at end of file + diff --git a/README.md b/README.md index e91e4be2a..f8cce85a3 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ Join us on Discord: ## Downloads Downloads can be obtained from the [downloads page](https://purpurmc.org/downloads/) or the [downloads API](https://api.purpurmc.org). -[![Build Status](https://img.shields.io/github/actions/workflow/status/PurpurMC/Purpur/build.yml?branch=ver%2F1.21.3&event=push&label=Downloads&logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABhWlDQ1BJQ0MgcHJvZmlsZQAAKJF9kT1Iw0AcxV9bxSIVh1YQcYhQnSyIiuimVShChVArtOpgcukXNGlIUlwcBdeCgx+LVQcXZ10dXAVB8APE0clJ0UVK/F9SaBHjwXE/3t173L0D/PUyU82OMUDVLCOViAuZ7KrQ9YogwujDEGYkZupzopiE5/i6h4+vdzGe5X3uz9Gj5EwG+ATiWaYbFvEG8dSmpXPeJ46woqQQnxOPGnRB4keuyy6/cS447OeZESOdmieOEAuFNpbbmBUNlXiSOKqoGuX7My4rnLc4q+Uqa96TvzCU01aWuU5zEAksYgkiBMioooQyLMRo1UgxkaL9uId/wPGL5JLJVQIjxwIqUCE5fvA/+N2tmZ8Yd5NCcaDzxbY/hoGuXaBRs+3vY9tunACBZ+BKa/krdWD6k/RaS4seAb3bwMV1S5P3gMsdoP9JlwzJkQI0/fk88H5G35QFwrdA95rbW3Mfpw9AmrpK3gAHh8BIgbLXPd4dbO/t3zPN/n4Ax9dyyerighsAAAAGYktHRAAAAAAAAPlDu38AAAAJcEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfmCBMWBjFhOpnxAAACyklEQVQ4y32TXWgdZRCGn8k5Z3e/bzcJRFuoDRqIIPGniaSl1qgXKYhiLUgleFESW1qQ4g94oVKQJmga0ILRBuvfheJFIbY3SmzRFsWgQrTQFlRoKSVXgcMxJiS7++1ukvHiNKGU6FzNDO8MMw8zwn9Yz5c6anKeChxiMk599aq8sZ5Obk3sGNd7G5aZCHJ+Oj8gAwD9I3rSJmyvzLHz+HG5frO+vOaNa3NXiUkKQj9hQ1jQgWrlyCCV6gIdtmBjoJwbPqgL+R08PDQkCUADwD0TerqzxFTJY++vz0l7c0q/F7P5+aNUqyvM2CU2RAV7hsek3XPs3/QHF7/YrSfrDVQrxrErdESNNTYByAp3NmWUTYaGGSuho+QltAGYRdqilChMeKbO4Ijang5+CVJmbcr20PG3n9NiY6ZOvCW9ACMHdDLIeDDIqTWmtAQJV6OMyhOTsqWBQQo/hvP7pFcWeDxwtAQxGqbEq3isI7EOjRy3NyuPPHtOur0UXWMQZXgAX78uP3sJpTBmyHfsGDmotdF+rQWObq/gnSCm9PQ3chnA3qgRgL5jmjXlTM/n7Ny8yJXRY2IA3tur0yaHF8blLoAzj2kaNNBpZvk2iGntuiZBHWLOtXJC3hbzV5SxtDq6yZmzCXOrsRezHNa4YBzlKGN6bQXryD96W+4PU14zGbw/oLMf79EPbAI2g7M9+smP3fqPKVAT81LnFWnzM1y9gYC9gWtwTD6MEsq+Y8Lm7DMZ7cZxt5/T5xd8Fy5SfuC6fA4QZjdd8eEX9eLwAZ1StHKiT1MARStnHtWZH7bpjKIVgKutmipq50O94Mr6+9oKR8ekyy7x5qd9/NmYslynK4WfUjWOqiAFgElZmY+41BTzcrAkW9d9ptO9etgU7I8S3vVyDtkY/JzPwoxXzCJjt6Uy+r/fuGq/3affezkPRSniJ0y2zsqT6+n+BfRHKWgwbKNIAAAAAElFTkSuQmCC)](https://purpurmc.org/downloads/) +[![Build Status](https://img.shields.io/github/actions/workflow/status/PurpurMC/Purpur/build.yml?branch=ver%2F1.21.4&event=push&label=Downloads&logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABhWlDQ1BJQ0MgcHJvZmlsZQAAKJF9kT1Iw0AcxV9bxSIVh1YQcYhQnSyIiuimVShChVArtOpgcukXNGlIUlwcBdeCgx+LVQcXZ10dXAVB8APE0clJ0UVK/F9SaBHjwXE/3t173L0D/PUyU82OMUDVLCOViAuZ7KrQ9YogwujDEGYkZupzopiE5/i6h4+vdzGe5X3uz9Gj5EwG+ATiWaYbFvEG8dSmpXPeJ46woqQQnxOPGnRB4keuyy6/cS447OeZESOdmieOEAuFNpbbmBUNlXiSOKqoGuX7My4rnLc4q+Uqa96TvzCU01aWuU5zEAksYgkiBMioooQyLMRo1UgxkaL9uId/wPGL5JLJVQIjxwIqUCE5fvA/+N2tmZ8Yd5NCcaDzxbY/hoGuXaBRs+3vY9tunACBZ+BKa/krdWD6k/RaS4seAb3bwMV1S5P3gMsdoP9JlwzJkQI0/fk88H5G35QFwrdA95rbW3Mfpw9AmrpK3gAHh8BIgbLXPd4dbO/t3zPN/n4Ax9dyyerighsAAAAGYktHRAAAAAAAAPlDu38AAAAJcEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfmCBMWBjFhOpnxAAACyklEQVQ4y32TXWgdZRCGn8k5Z3e/bzcJRFuoDRqIIPGniaSl1qgXKYhiLUgleFESW1qQ4g94oVKQJmga0ILRBuvfheJFIbY3SmzRFsWgQrTQFlRoKSVXgcMxJiS7++1ukvHiNKGU6FzNDO8MMw8zwn9Yz5c6anKeChxiMk599aq8sZ5Obk3sGNd7G5aZCHJ+Oj8gAwD9I3rSJmyvzLHz+HG5frO+vOaNa3NXiUkKQj9hQ1jQgWrlyCCV6gIdtmBjoJwbPqgL+R08PDQkCUADwD0TerqzxFTJY++vz0l7c0q/F7P5+aNUqyvM2CU2RAV7hsek3XPs3/QHF7/YrSfrDVQrxrErdESNNTYByAp3NmWUTYaGGSuho+QltAGYRdqilChMeKbO4Ijang5+CVJmbcr20PG3n9NiY6ZOvCW9ACMHdDLIeDDIqTWmtAQJV6OMyhOTsqWBQQo/hvP7pFcWeDxwtAQxGqbEq3isI7EOjRy3NyuPPHtOur0UXWMQZXgAX78uP3sJpTBmyHfsGDmotdF+rQWObq/gnSCm9PQ3chnA3qgRgL5jmjXlTM/n7Ny8yJXRY2IA3tur0yaHF8blLoAzj2kaNNBpZvk2iGntuiZBHWLOtXJC3hbzV5SxtDq6yZmzCXOrsRezHNa4YBzlKGN6bQXryD96W+4PU14zGbw/oLMf79EPbAI2g7M9+smP3fqPKVAT81LnFWnzM1y9gYC9gWtwTD6MEsq+Y8Lm7DMZ7cZxt5/T5xd8Fy5SfuC6fA4QZjdd8eEX9eLwAZ1StHKiT1MARStnHtWZH7bpjKIVgKutmipq50O94Mr6+9oKR8ekyy7x5qd9/NmYslynK4WfUjWOqiAFgElZmY+41BTzcrAkW9d9ptO9etgU7I8S3vVyDtkY/JzPwoxXzCJjt6Uy+r/fuGq/3affezkPRSniJ0y2zsqT6+n+BfRHKWgwbKNIAAAAAElFTkSuQmCC)](https://purpurmc.org/downloads/) Downloads API endpoints: * List versions of Minecraft with builds available: @@ -67,7 +67,7 @@ Maven org.purpurmc.purpur purpur-api - 1.21.3-R0.1-SNAPSHOT + 1.21.4-R0.1-SNAPSHOT provided ``` @@ -80,7 +80,7 @@ repositories { ``` ```kotlin dependencies { - compileOnly("org.purpurmc.purpur:purpur-api:1.21.3-R0.1-SNAPSHOT") + compileOnly("org.purpurmc.purpur:purpur-api:1.21.4-R0.1-SNAPSHOT") } ``` diff --git a/build.gradle.kts b/build.gradle.kts index 3b32c2004..d472edfdd 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -4,7 +4,7 @@ import org.gradle.api.tasks.testing.logging.TestLogEvent plugins { java `maven-publish` - id("io.papermc.paperweight.patcher") version "1.7.5" + id("io.papermc.paperweight.patcher") version "1.7.7" } allprojects { diff --git a/gradle.properties b/gradle.properties index dd22396b4..532df5a57 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,8 +1,8 @@ group = org.purpurmc.purpur -version = 1.21.3-R0.1-SNAPSHOT +version = 1.21.4-R0.1-SNAPSHOT -mcVersion = 1.21.3 -paperCommit = da7138233f6392e791d790d1c3407414c855f9c2 +mcVersion = 1.21.4 +paperCommit = d4630f1223ba8cef0f9767d22f70999f1292cbcf org.gradle.caching = true org.gradle.parallel = true diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index df97d72b8..e2847c820 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/patches/dropped-server/0224-Shears-can-have-looting-enchantment.patch b/patches/1-21-3/dropped-server/0224-Shears-can-have-looting-enchantment.patch similarity index 100% rename from patches/dropped-server/0224-Shears-can-have-looting-enchantment.patch rename to patches/1-21-3/dropped-server/0224-Shears-can-have-looting-enchantment.patch diff --git a/patches/dropped-server/0247-Remove-Mojang-Profiler.patch b/patches/1-21-3/dropped-server/0247-Remove-Mojang-Profiler.patch similarity index 100% rename from patches/dropped-server/0247-Remove-Mojang-Profiler.patch rename to patches/1-21-3/dropped-server/0247-Remove-Mojang-Profiler.patch diff --git a/patches/api/0001-Pufferfish-API-Changes.patch b/patches/api/0001-Pufferfish-API-Changes.patch index d98e022d4..1259ec0fb 100644 --- a/patches/api/0001-Pufferfish-API-Changes.patch +++ b/patches/api/0001-Pufferfish-API-Changes.patch @@ -20,10 +20,10 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . diff --git a/build.gradle.kts b/build.gradle.kts -index e29e5024fa693baae469d47fe77b57118f14627c..aae422978887a0f2cf531b2dc862705148569676 100644 +index 571534b42cd9c33d6a7bb6fe3bf3a28e33f8e5de..5ceaca1bd75335f85b4876a394ea8c2643cda694 100644 --- a/build.gradle.kts +++ b/build.gradle.kts -@@ -64,6 +64,7 @@ dependencies { +@@ -66,6 +66,7 @@ dependencies { apiAndDocs("net.kyori:adventure-text-logger-slf4j") api("org.apache.logging.log4j:log4j-api:$log4jVersion") api("org.slf4j:slf4j-api:$slf4jVersion") @@ -31,7 +31,7 @@ index e29e5024fa693baae469d47fe77b57118f14627c..aae422978887a0f2cf531b2dc8627051 implementation("org.ow2.asm:asm:9.7.1") implementation("org.ow2.asm:asm-commons:9.7.1") -@@ -148,6 +149,13 @@ val generateApiVersioningFile by tasks.registering { +@@ -150,6 +151,13 @@ val generateApiVersioningFile by tasks.registering { } } @@ -389,7 +389,7 @@ index 0000000000000000000000000000000000000000..ae2464920c9412ac90b819a540ee58be + +} diff --git a/src/main/java/org/bukkit/map/MapPalette.java b/src/main/java/org/bukkit/map/MapPalette.java -index 55a46db9d73885ea967ac929013906b687e476bb..b99796629100c7d5fff1b7f84026001e0013b477 100644 +index 6995f9cc08d162e3adcd3a28f6bfa6d329661999..b9edb96fc5bac8793477657dbb45ccf98ab17f27 100644 --- a/src/main/java/org/bukkit/map/MapPalette.java +++ b/src/main/java/org/bukkit/map/MapPalette.java @@ -1,6 +1,7 @@ @@ -426,7 +426,7 @@ index 55a46db9d73885ea967ac929013906b687e476bb..b99796629100c7d5fff1b7f84026001e } diff --git a/src/main/java/org/bukkit/plugin/SimplePluginManager.java b/src/main/java/org/bukkit/plugin/SimplePluginManager.java -index b878e7167cfcdea0e224c182b40abeadd339d3b3..6b6edf9007997d9672e4c850464c1b71cb55f6b4 100644 +index 001465eedafa51ac027a4db51cba6223edfe1171..2e6d62c4f3687e299c34e876c503b400e13be05a 100644 --- a/src/main/java/org/bukkit/plugin/SimplePluginManager.java +++ b/src/main/java/org/bukkit/plugin/SimplePluginManager.java @@ -597,7 +597,9 @@ public final class SimplePluginManager implements PluginManager { @@ -452,7 +452,7 @@ index b878e7167cfcdea0e224c182b40abeadd339d3b3..6b6edf9007997d9672e4c850464c1b71 callEvent(new com.destroystokyo.paper.event.server.ServerExceptionEvent(new com.destroystokyo.paper.exception.ServerEventException(msg, ex, registration.getPlugin(), registration.getListener(), event))); } diff --git a/src/main/java/org/bukkit/plugin/java/JavaPluginLoader.java b/src/main/java/org/bukkit/plugin/java/JavaPluginLoader.java -index eaefbb00e9993d54906cc8cf35cf753c0d6c7707..301e82369603f3dd6e6c1bd380da4bacacd7ef6c 100644 +index b412aaf08901d169ac9fc89b36f9d6ccb95c53d3..45a9ca8969f635d20cc44c062fda85bbccd8f8ff 100644 --- a/src/main/java/org/bukkit/plugin/java/JavaPluginLoader.java +++ b/src/main/java/org/bukkit/plugin/java/JavaPluginLoader.java @@ -336,7 +336,13 @@ public final class JavaPluginLoader implements PluginLoader { diff --git a/patches/api/0004-Purpur-config-files.patch b/patches/api/0004-Purpur-config-files.patch index e5c8ebacd..468f17714 100644 --- a/patches/api/0004-Purpur-config-files.patch +++ b/patches/api/0004-Purpur-config-files.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Purpur config files diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java -index 0b78564256ebc647ebac402e549d86ab6e307c8d..625421183a3953d0d72d477e231f6831c87b7843 100644 +index ad816538b30079c62d5e1eb98c6f4b61e12e8d47..f90da51a8d1003a5cba86decbd42470f7f7e9211 100644 --- a/src/main/java/org/bukkit/Server.java +++ b/src/main/java/org/bukkit/Server.java @@ -2283,6 +2283,18 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi diff --git a/patches/api/0005-Build-System-Changes.patch b/patches/api/0005-Build-System-Changes.patch index 6c76eb4c5..ae251c792 100644 --- a/patches/api/0005-Build-System-Changes.patch +++ b/patches/api/0005-Build-System-Changes.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Build System Changes diff --git a/build.gradle.kts b/build.gradle.kts -index aae422978887a0f2cf531b2dc862705148569676..b0fd6c1804844f09428051952e3ac4e58f8c859c 100644 +index 5ceaca1bd75335f85b4876a394ea8c2643cda694..49546dfbb4dd006b5a2419908890ba4c2a0e207a 100644 --- a/build.gradle.kts +++ b/build.gradle.kts -@@ -168,6 +168,8 @@ tasks.jar { +@@ -170,6 +170,8 @@ tasks.jar { } tasks.withType { diff --git a/patches/api/0006-Purpur-client-support.patch b/patches/api/0006-Purpur-client-support.patch index 74ab545c2..1a93d2934 100644 --- a/patches/api/0006-Purpur-client-support.patch +++ b/patches/api/0006-Purpur-client-support.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Purpur client support diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java -index 95f0b3186e313c7fbd5c8531d52b82a69e525f94..76fd6c5377bb5b4d1c1f508456931bf27ad49e3e 100644 +index fac4aec289e07231d80a9890653432f688355afa..c8365c38c91b3e6c4f721074f0646fe5adffbdf6 100644 --- a/src/main/java/org/bukkit/entity/Player.java +++ b/src/main/java/org/bukkit/entity/Player.java @@ -3911,4 +3911,13 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM diff --git a/patches/api/0008-Ridables.patch b/patches/api/0008-Ridables.patch index 5c154c7b9..7ecc992d5 100644 --- a/patches/api/0008-Ridables.patch +++ b/patches/api/0008-Ridables.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Ridables diff --git a/src/main/java/org/bukkit/entity/Entity.java b/src/main/java/org/bukkit/entity/Entity.java -index d0ae8a94db20281d3664d74718c65234eb2e5f83..bf6d13cc6b0566f4076383c8f170dc8c9589e416 100644 +index 19272cff8d6d040e95b2644d70acdac606e06c16..5603ecc5d8f6ccf29333e1c47db3af36379a27d6 100644 --- a/src/main/java/org/bukkit/entity/Entity.java +++ b/src/main/java/org/bukkit/entity/Entity.java @@ -1172,4 +1172,35 @@ public interface Entity extends Metadatable, CommandSender, Nameable, Persistent diff --git a/patches/api/0009-Allow-inventory-resizing.patch b/patches/api/0009-Allow-inventory-resizing.patch index 2a53bc89b..da51c8ec8 100644 --- a/patches/api/0009-Allow-inventory-resizing.patch +++ b/patches/api/0009-Allow-inventory-resizing.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Allow inventory resizing diff --git a/src/main/java/org/bukkit/event/inventory/InventoryType.java b/src/main/java/org/bukkit/event/inventory/InventoryType.java -index 7184f80899206bedeac387e9f8a35482801efd4b..e4197c89c04b91732ce96981f8df0a0bdaee24ce 100644 +index 81118a91c2e22e02a1f774d1cc4d3e97064087ce..3ac1e4a821a5b48d3936222cbfddadd3b803deef 100644 --- a/src/main/java/org/bukkit/event/inventory/InventoryType.java +++ b/src/main/java/org/bukkit/event/inventory/InventoryType.java @@ -164,7 +164,7 @@ public enum InventoryType { diff --git a/patches/api/0011-AFK-API.patch b/patches/api/0011-AFK-API.patch index de7666ebd..1c3bac8d5 100644 --- a/patches/api/0011-AFK-API.patch +++ b/patches/api/0011-AFK-API.patch @@ -5,7 +5,7 @@ Subject: [PATCH] AFK API diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java -index 76fd6c5377bb5b4d1c1f508456931bf27ad49e3e..5d449299f958cb747e62e9ccfc8ff6cc32236dcd 100644 +index c8365c38c91b3e6c4f721074f0646fe5adffbdf6..ed0f892ed987419809fe1a0390b6278c99659919 100644 --- a/src/main/java/org/bukkit/entity/Player.java +++ b/src/main/java/org/bukkit/entity/Player.java @@ -3919,5 +3919,25 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM diff --git a/patches/api/0012-Bring-back-server-name.patch b/patches/api/0012-Bring-back-server-name.patch index 80173f2f6..b88bcca78 100644 --- a/patches/api/0012-Bring-back-server-name.patch +++ b/patches/api/0012-Bring-back-server-name.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Bring back server name diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java -index 5ce98e09e9bfcae45896401c69578aa879222893..82c65e39d02b3bb63360d36df45f8ed7a0bc096b 100644 +index 8ab94f8189ebd9d4158231871abdebec399deb2c..c38fa167bbe46dfd34b90b47f6918a399af12c32 100644 --- a/src/main/java/org/bukkit/Bukkit.java +++ b/src/main/java/org/bukkit/Bukkit.java @@ -2968,4 +2968,15 @@ public final class Bukkit { @@ -25,7 +25,7 @@ index 5ce98e09e9bfcae45896401c69578aa879222893..82c65e39d02b3bb63360d36df45f8ed7 + // Purpur end } diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java -index f1c121c150d2ab7ca2d080846a5f726920210662..715ca4c541fb3bc2f30c53c2f52025ac2e70cd3c 100644 +index f90da51a8d1003a5cba86decbd42470f7f7e9211..2d17726681b9001179590e9c33ee5b6561fb7789 100644 --- a/src/main/java/org/bukkit/Server.java +++ b/src/main/java/org/bukkit/Server.java @@ -2619,4 +2619,13 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi diff --git a/patches/api/0014-Lagging-threshold.patch b/patches/api/0014-Lagging-threshold.patch index 55e73e3c2..86737ba98 100644 --- a/patches/api/0014-Lagging-threshold.patch +++ b/patches/api/0014-Lagging-threshold.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Lagging threshold diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java -index 82c65e39d02b3bb63360d36df45f8ed7a0bc096b..30b4005b99a31de2c64d35432a751c00b3b335f6 100644 +index c38fa167bbe46dfd34b90b47f6918a399af12c32..cd6c712a2ad92f73c7ce8f4ada8b810fcba00ba3 100644 --- a/src/main/java/org/bukkit/Bukkit.java +++ b/src/main/java/org/bukkit/Bukkit.java @@ -2978,5 +2978,14 @@ public final class Bukkit { @@ -24,7 +24,7 @@ index 82c65e39d02b3bb63360d36df45f8ed7a0bc096b..30b4005b99a31de2c64d35432a751c00 // Purpur end } diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java -index 715ca4c541fb3bc2f30c53c2f52025ac2e70cd3c..ca315417c7e60d50f48af07c53f6e7405fb88053 100644 +index 2d17726681b9001179590e9c33ee5b6561fb7789..788702d1c5be00a78a0438e267fe5fca9985e4ce 100644 --- a/src/main/java/org/bukkit/Server.java +++ b/src/main/java/org/bukkit/Server.java @@ -2627,5 +2627,12 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi diff --git a/patches/api/0017-ItemStack-convenience-methods.patch b/patches/api/0017-ItemStack-convenience-methods.patch index 445add8de..9beb1702d 100644 --- a/patches/api/0017-ItemStack-convenience-methods.patch +++ b/patches/api/0017-ItemStack-convenience-methods.patch @@ -5,10 +5,10 @@ Subject: [PATCH] ItemStack convenience methods diff --git a/src/main/java/org/bukkit/Material.java b/src/main/java/org/bukkit/Material.java -index c7ce8fa1ff9feda66d5a4e497112a24ff51c9d2b..f588307487368ea686f22a50b0a5d79ade3dcb04 100644 +index e89edabd36a6755912694d8a8700da4ebe5c5829..ba2eff0f2ecffbea4b42d5c6e4485ee0087dc981 100644 --- a/src/main/java/org/bukkit/Material.java +++ b/src/main/java/org/bukkit/Material.java -@@ -5840,4 +5840,40 @@ public enum Material implements Keyed, Translatable, net.kyori.adventure.transla +@@ -5811,4 +5811,40 @@ public enum Material implements Keyed, Translatable, net.kyori.adventure.transla return this.asItemType().getDefaultDataTypes(); } // Paper end - data component API @@ -50,7 +50,7 @@ index c7ce8fa1ff9feda66d5a4e497112a24ff51c9d2b..f588307487368ea686f22a50b0a5d79a + // Purpur end } diff --git a/src/main/java/org/bukkit/inventory/ItemStack.java b/src/main/java/org/bukkit/inventory/ItemStack.java -index 6e4ca7d95953a25c0aaafd35e54ef9254a1b5f0b..f5961444f1c05b66c410d64e4e9c4f79fe360382 100644 +index 8c9654cd19af8b28fa276a55c5060eb389e60c1c..875124b06d87cd4163f0ab1d4dd75f939622f8aa 100644 --- a/src/main/java/org/bukkit/inventory/ItemStack.java +++ b/src/main/java/org/bukkit/inventory/ItemStack.java @@ -19,6 +19,13 @@ import org.bukkit.inventory.meta.ItemMeta; diff --git a/patches/api/0020-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch b/patches/api/0020-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch index 5bb9157f4..e358db980 100644 --- a/patches/api/0020-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch +++ b/patches/api/0020-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Add predicate to recipe's ExactChoice ingredient diff --git a/src/main/java/org/bukkit/inventory/RecipeChoice.java b/src/main/java/org/bukkit/inventory/RecipeChoice.java -index f1aa67997f904953742e8895e49341c2f73d44a2..993cf7995514fb0ef3c4388bb3ce49c3187ab251 100644 +index 922bb69b5f218e489a6dd5e0f207743c1f1d3d35..9b3e292be334d21eb978373f434bf3811ec4af2b 100644 --- a/src/main/java/org/bukkit/inventory/RecipeChoice.java +++ b/src/main/java/org/bukkit/inventory/RecipeChoice.java @@ -191,6 +191,7 @@ public interface RecipeChoice extends Predicate, Cloneable { diff --git a/patches/api/0025-Add-enchantment-target-for-bows-and-crossbows.patch b/patches/api/0025-Add-enchantment-target-for-bows-and-crossbows.patch index d9680f160..ecbfea9ea 100644 --- a/patches/api/0025-Add-enchantment-target-for-bows-and-crossbows.patch +++ b/patches/api/0025-Add-enchantment-target-for-bows-and-crossbows.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Add enchantment target for bows and crossbows diff --git a/src/main/java/org/bukkit/enchantments/EnchantmentTarget.java b/src/main/java/org/bukkit/enchantments/EnchantmentTarget.java -index 455ff52d90565838fe7640c3f045b27082a6c2f1..5831ffe24eed01311c71989dcb1830dbc395607b 100644 +index 6fcc15d588239481136876d117ab346a8deac1dd..bd653ad99e8e75af1494b595640c3910f4d37e6e 100644 --- a/src/main/java/org/bukkit/enchantments/EnchantmentTarget.java +++ b/src/main/java/org/bukkit/enchantments/EnchantmentTarget.java @@ -227,6 +227,18 @@ public enum EnchantmentTarget { diff --git a/patches/api/0026-API-for-any-mob-to-burn-daylight.patch b/patches/api/0026-API-for-any-mob-to-burn-daylight.patch index 1e4faa436..2a27a45f4 100644 --- a/patches/api/0026-API-for-any-mob-to-burn-daylight.patch +++ b/patches/api/0026-API-for-any-mob-to-burn-daylight.patch @@ -6,7 +6,7 @@ Subject: [PATCH] API for any mob to burn daylight Co-authored by: Encode42 diff --git a/src/main/java/org/bukkit/entity/Entity.java b/src/main/java/org/bukkit/entity/Entity.java -index bf6d13cc6b0566f4076383c8f170dc8c9589e416..22713e97e7c7b643b80c07a88ae890d7c4304730 100644 +index 5603ecc5d8f6ccf29333e1c47db3af36379a27d6..a4136da96f0759ca137a86f2518af58bccb6b632 100644 --- a/src/main/java/org/bukkit/entity/Entity.java +++ b/src/main/java/org/bukkit/entity/Entity.java @@ -1202,5 +1202,12 @@ public interface Entity extends Metadatable, CommandSender, Nameable, Persistent @@ -23,7 +23,7 @@ index bf6d13cc6b0566f4076383c8f170dc8c9589e416..22713e97e7c7b643b80c07a88ae890d7 // Purpur end } diff --git a/src/main/java/org/bukkit/entity/LivingEntity.java b/src/main/java/org/bukkit/entity/LivingEntity.java -index 68c08e7a212bc3e3885f9b5a4d9aef85fcb3b029..a22909446b7193b1de121bdd6d7b6fbf81dc3be4 100644 +index d21a228bbec0302e75c4db5aa1db54f321143587..a4acc3578e935cd1174474bd1f6ff14db4294fe7 100644 --- a/src/main/java/org/bukkit/entity/LivingEntity.java +++ b/src/main/java/org/bukkit/entity/LivingEntity.java @@ -1468,4 +1468,20 @@ public interface LivingEntity extends Attributable, Damageable, ProjectileSource diff --git a/patches/api/0031-Extended-OfflinePlayer-API.patch b/patches/api/0031-Extended-OfflinePlayer-API.patch index 0ec08e967..932732b9a 100644 --- a/patches/api/0031-Extended-OfflinePlayer-API.patch +++ b/patches/api/0031-Extended-OfflinePlayer-API.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Extended OfflinePlayer API diff --git a/src/main/java/org/bukkit/OfflinePlayer.java b/src/main/java/org/bukkit/OfflinePlayer.java -index a028f2fe541491729856051780b33dba07832fb6..fc64902368a068481f16d5db99c94386caf6b60b 100644 +index 5622fe3165baad8138c22cfc016ed6c3834cf702..6d31b561d915180fcd473b317721064feed28f37 100644 --- a/src/main/java/org/bukkit/OfflinePlayer.java +++ b/src/main/java/org/bukkit/OfflinePlayer.java @@ -573,4 +573,106 @@ public interface OfflinePlayer extends ServerOperator, AnimalTamer, Configuratio diff --git a/patches/api/0032-Added-the-ability-to-add-combustible-items.patch b/patches/api/0032-Added-the-ability-to-add-combustible-items.patch index 9dc154ac6..10b834d4c 100644 --- a/patches/api/0032-Added-the-ability-to-add-combustible-items.patch +++ b/patches/api/0032-Added-the-ability-to-add-combustible-items.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Added the ability to add combustible items diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java -index 30b4005b99a31de2c64d35432a751c00b3b335f6..c4de1352f3f061e950d3fdc114b6542cf13a34ce 100644 +index cd6c712a2ad92f73c7ce8f4ada8b810fcba00ba3..79528ad4408eac53754ccc810445970e263a1a32 100644 --- a/src/main/java/org/bukkit/Bukkit.java +++ b/src/main/java/org/bukkit/Bukkit.java @@ -2987,5 +2987,24 @@ public final class Bukkit { @@ -34,7 +34,7 @@ index 30b4005b99a31de2c64d35432a751c00b3b335f6..c4de1352f3f061e950d3fdc114b6542c // Purpur end } diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java -index ca315417c7e60d50f48af07c53f6e7405fb88053..30e52ca06cac23f35143767937ce474a8339018a 100644 +index 788702d1c5be00a78a0438e267fe5fca9985e4ce..c1523229138d5d07569c8e564cf27b8276cca153 100644 --- a/src/main/java/org/bukkit/Server.java +++ b/src/main/java/org/bukkit/Server.java @@ -2634,5 +2634,20 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi diff --git a/patches/api/0034-Shears-can-have-looting-enchantment.patch b/patches/api/0034-Shears-can-have-looting-enchantment.patch index 53f2a3f93..d9c0fb00f 100644 --- a/patches/api/0034-Shears-can-have-looting-enchantment.patch +++ b/patches/api/0034-Shears-can-have-looting-enchantment.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Shears can have looting enchantment diff --git a/src/main/java/org/bukkit/enchantments/EnchantmentTarget.java b/src/main/java/org/bukkit/enchantments/EnchantmentTarget.java -index 5831ffe24eed01311c71989dcb1830dbc395607b..45f5493eebfecf56b7c0ef4659c078dfc62c0612 100644 +index bd653ad99e8e75af1494b595640c3910f4d37e6e..13b903e785a9ef5e513cb9d6483482133cc5f25b 100644 --- a/src/main/java/org/bukkit/enchantments/EnchantmentTarget.java +++ b/src/main/java/org/bukkit/enchantments/EnchantmentTarget.java @@ -238,6 +238,16 @@ public enum EnchantmentTarget { diff --git a/patches/api/0036-Add-local-difficulty-api.patch b/patches/api/0036-Add-local-difficulty-api.patch index 6d5c157b8..bb9a78b78 100644 --- a/patches/api/0036-Add-local-difficulty-api.patch +++ b/patches/api/0036-Add-local-difficulty-api.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Add local difficulty api diff --git a/src/main/java/org/bukkit/World.java b/src/main/java/org/bukkit/World.java -index 7a439c99fc4c5ee17d674460c8e58a9fe0c64e02..26a0ed5437842492432a26778fadd9ae41dc0569 100644 +index bef54a6c8290e09cbaac20b03dde8dfb902c96b0..3d1e2a6804980c091fe2a66a6810564d317d339f 100644 --- a/src/main/java/org/bukkit/World.java +++ b/src/main/java/org/bukkit/World.java @@ -4246,6 +4246,16 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient diff --git a/patches/api/0039-Debug-Marker-API.patch b/patches/api/0039-Debug-Marker-API.patch index 12501152a..470a7bff7 100644 --- a/patches/api/0039-Debug-Marker-API.patch +++ b/patches/api/0039-Debug-Marker-API.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Debug Marker API diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java -index c4de1352f3f061e950d3fdc114b6542cf13a34ce..d42c463ff5e60318470e6c3270ff7bc6f0aaaeb1 100644 +index 79528ad4408eac53754ccc810445970e263a1a32..db453d04efb00baaeabb904a7bd1b99dd0a50735 100644 --- a/src/main/java/org/bukkit/Bukkit.java +++ b/src/main/java/org/bukkit/Bukkit.java @@ -3006,5 +3006,89 @@ public final class Bukkit { @@ -99,7 +99,7 @@ index c4de1352f3f061e950d3fdc114b6542cf13a34ce..d42c463ff5e60318470e6c3270ff7bc6 // Purpur end } diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java -index 30e52ca06cac23f35143767937ce474a8339018a..9a25dd2166892d612d32a4611a2531a3cee6754f 100644 +index c1523229138d5d07569c8e564cf27b8276cca153..fcfad39173ecf2573a1ba77236bce8d9f73e02bb 100644 --- a/src/main/java/org/bukkit/Server.java +++ b/src/main/java/org/bukkit/Server.java @@ -2649,5 +2649,75 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi @@ -179,7 +179,7 @@ index 30e52ca06cac23f35143767937ce474a8339018a..9a25dd2166892d612d32a4611a2531a3 // Purpur end } diff --git a/src/main/java/org/bukkit/World.java b/src/main/java/org/bukkit/World.java -index 26a0ed5437842492432a26778fadd9ae41dc0569..820c22c7a20d19a74139bc1537515405b4b2f46c 100644 +index 3d1e2a6804980c091fe2a66a6810564d317d339f..5f7de23e419175e55459df760c7190639ea39f18 100644 --- a/src/main/java/org/bukkit/World.java +++ b/src/main/java/org/bukkit/World.java @@ -4254,6 +4254,76 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient @@ -260,7 +260,7 @@ index 26a0ed5437842492432a26778fadd9ae41dc0569..820c22c7a20d19a74139bc1537515405 /** diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java -index 5d449299f958cb747e62e9ccfc8ff6cc32236dcd..0b8f7c39ff90b57eb7104d3a0cf1c29ee551b522 100644 +index ed0f892ed987419809fe1a0390b6278c99659919..8cedbba4e65b0a8d3a17c6960033e2a324c64bc9 100644 --- a/src/main/java/org/bukkit/entity/Player.java +++ b/src/main/java/org/bukkit/entity/Player.java @@ -3939,5 +3939,75 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM diff --git a/patches/api/0040-Add-death-screen-API.patch b/patches/api/0040-Add-death-screen-API.patch index 5990cff42..11afb29cd 100644 --- a/patches/api/0040-Add-death-screen-API.patch +++ b/patches/api/0040-Add-death-screen-API.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Add death screen API diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java -index 0b8f7c39ff90b57eb7104d3a0cf1c29ee551b522..a7f989121c493baff9d2b6910c39145a0e12477d 100644 +index 8cedbba4e65b0a8d3a17c6960033e2a324c64bc9..6f7f1fc3db0237021fa1bd0f11fe56b2d6d4f84a 100644 --- a/src/main/java/org/bukkit/entity/Player.java +++ b/src/main/java/org/bukkit/entity/Player.java @@ -4009,5 +4009,25 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM diff --git a/patches/api/0042-Add-log-suppression-for-LibraryLoader.patch b/patches/api/0042-Add-log-suppression-for-LibraryLoader.patch index 182f6f25e..663369b2b 100644 --- a/patches/api/0042-Add-log-suppression-for-LibraryLoader.patch +++ b/patches/api/0042-Add-log-suppression-for-LibraryLoader.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Add log suppression for LibraryLoader diff --git a/src/main/java/org/bukkit/plugin/java/JavaPluginLoader.java b/src/main/java/org/bukkit/plugin/java/JavaPluginLoader.java -index 301e82369603f3dd6e6c1bd380da4bacacd7ef6c..0c6ca7588fb3d6b6497ddf032fe75e5c6c9719e5 100644 +index 45a9ca8969f635d20cc44c062fda85bbccd8f8ff..e2b631fc160f13ea6e27b69f835bbdf83d6d3dec 100644 --- a/src/main/java/org/bukkit/plugin/java/JavaPluginLoader.java +++ b/src/main/java/org/bukkit/plugin/java/JavaPluginLoader.java @@ -55,6 +55,7 @@ public final class JavaPluginLoader implements PluginLoader { diff --git a/patches/api/0043-Fire-Immunity-API.patch b/patches/api/0043-Fire-Immunity-API.patch index 114d153fc..5de466a43 100644 --- a/patches/api/0043-Fire-Immunity-API.patch +++ b/patches/api/0043-Fire-Immunity-API.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Fire Immunity API diff --git a/src/main/java/org/bukkit/entity/Entity.java b/src/main/java/org/bukkit/entity/Entity.java -index 22713e97e7c7b643b80c07a88ae890d7c4304730..b7d53973ac4e829a03821d59e0b3a28d6f6a4373 100644 +index a4136da96f0759ca137a86f2518af58bccb6b632..076fe310d500ebb52e705a3a69e895061702f470 100644 --- a/src/main/java/org/bukkit/entity/Entity.java +++ b/src/main/java/org/bukkit/entity/Entity.java @@ -1209,5 +1209,18 @@ public interface Entity extends Metadatable, CommandSender, Nameable, Persistent diff --git a/patches/api/0048-Stonecutter-damage.patch b/patches/api/0048-Stonecutter-damage.patch index 8b2294a75..1ae8744ad 100644 --- a/patches/api/0048-Stonecutter-damage.patch +++ b/patches/api/0048-Stonecutter-damage.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Stonecutter damage diff --git a/src/main/java/org/bukkit/event/entity/EntityDamageEvent.java b/src/main/java/org/bukkit/event/entity/EntityDamageEvent.java -index 73aa5dc079ecb1c38c55ae1916b12edf81b723f5..dccf60802b3503e3188a90a4ec7f3562c99e560a 100644 +index d1a5424ff3b289f1c82449ef6d88eb52665df41b..f23b0c250f88926c147af0314b5c4d23c5f8dbae 100644 --- a/src/main/java/org/bukkit/event/entity/EntityDamageEvent.java +++ b/src/main/java/org/bukkit/event/entity/EntityDamageEvent.java @@ -308,7 +308,8 @@ public class EntityDamageEvent extends EntityEvent implements Cancellable { diff --git a/patches/generated-api/0001-Ridables.patch b/patches/generated-api/0001-Ridables.patch index 1f5c1512d..4552c2066 100644 --- a/patches/generated-api/0001-Ridables.patch +++ b/patches/generated-api/0001-Ridables.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Ridables diff --git a/com/destroystokyo/paper/entity/ai/VanillaGoal.java b/com/destroystokyo/paper/entity/ai/VanillaGoal.java -index 35dfd25f21ca67b7f4d69326500980f4a021ef49..cd76656694067b333152ac46bc6a40ad8d28d2ac 100644 +index f15a7b4471cd31a487467ec7ecf7a186fa887a51..9b9eb256c4f17693e717e87e62a2e61b928f073a 100644 --- a/com/destroystokyo/paper/entity/ai/VanillaGoal.java +++ b/com/destroystokyo/paper/entity/ai/VanillaGoal.java @@ -441,6 +441,12 @@ public interface VanillaGoal extends Goal { diff --git a/patches/generated-api/0002-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch b/patches/generated-api/0002-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch index 0bcffe627..61152fef7 100644 --- a/patches/generated-api/0002-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch +++ b/patches/generated-api/0002-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Phantoms attracted to crystals and crystals shoot phantoms diff --git a/com/destroystokyo/paper/entity/ai/VanillaGoal.java b/com/destroystokyo/paper/entity/ai/VanillaGoal.java -index cd76656694067b333152ac46bc6a40ad8d28d2ac..d3b12268a01b0181b340175757c8b7f657540e94 100644 +index 9b9eb256c4f17693e717e87e62a2e61b928f073a..33eed1c791eeaeb4eba538d32ce8516c5d5fc6c0 100644 --- a/com/destroystokyo/paper/entity/ai/VanillaGoal.java +++ b/com/destroystokyo/paper/entity/ai/VanillaGoal.java @@ -445,6 +445,8 @@ public interface VanillaGoal extends Goal { diff --git a/patches/generated-api/0003-Add-option-to-disable-zombie-aggressiveness-towards-.patch b/patches/generated-api/0003-Add-option-to-disable-zombie-aggressiveness-towards-.patch index dd360f3a2..b77789f97 100644 --- a/patches/generated-api/0003-Add-option-to-disable-zombie-aggressiveness-towards-.patch +++ b/patches/generated-api/0003-Add-option-to-disable-zombie-aggressiveness-towards-.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Add option to disable zombie aggressiveness towards villagers diff --git a/com/destroystokyo/paper/entity/ai/VanillaGoal.java b/com/destroystokyo/paper/entity/ai/VanillaGoal.java -index d3b12268a01b0181b340175757c8b7f657540e94..79de9f1ab1e709d1402d3a8017cc729b7fffc961 100644 +index 33eed1c791eeaeb4eba538d32ce8516c5d5fc6c0..9ef2111b60ace1a088c8c3d4707b26c06f14037c 100644 --- a/com/destroystokyo/paper/entity/ai/VanillaGoal.java +++ b/com/destroystokyo/paper/entity/ai/VanillaGoal.java @@ -447,6 +447,8 @@ public interface VanillaGoal extends Goal { diff --git a/patches/generated-api/0004-Rabid-Wolf-API.patch b/patches/generated-api/0004-Rabid-Wolf-API.patch index 616e58886..5096e181a 100644 --- a/patches/generated-api/0004-Rabid-Wolf-API.patch +++ b/patches/generated-api/0004-Rabid-Wolf-API.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Rabid Wolf API diff --git a/com/destroystokyo/paper/entity/ai/VanillaGoal.java b/com/destroystokyo/paper/entity/ai/VanillaGoal.java -index 79de9f1ab1e709d1402d3a8017cc729b7fffc961..e8b22b5ea11671d847a2e243ce570afd4ecb8aca 100644 +index 9ef2111b60ace1a088c8c3d4707b26c06f14037c..6eea8fbe575c4570c2b760c9828f8ec5b81c7202 100644 --- a/com/destroystokyo/paper/entity/ai/VanillaGoal.java +++ b/com/destroystokyo/paper/entity/ai/VanillaGoal.java @@ -449,6 +449,7 @@ public interface VanillaGoal extends Goal { diff --git a/patches/generated-api/0005-Iron-golem-poppy-calms-anger.patch b/patches/generated-api/0005-Iron-golem-poppy-calms-anger.patch index 72f6aef36..bae54e389 100644 --- a/patches/generated-api/0005-Iron-golem-poppy-calms-anger.patch +++ b/patches/generated-api/0005-Iron-golem-poppy-calms-anger.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Iron golem poppy calms anger diff --git a/com/destroystokyo/paper/entity/ai/VanillaGoal.java b/com/destroystokyo/paper/entity/ai/VanillaGoal.java -index e8b22b5ea11671d847a2e243ce570afd4ecb8aca..a9816fbfa466b3fe3f82c19aeeeb564c660e4b6a 100644 +index 6eea8fbe575c4570c2b760c9828f8ec5b81c7202..e7795889133063ac165d5b4783ddcbcbb442f189 100644 --- a/com/destroystokyo/paper/entity/ai/VanillaGoal.java +++ b/com/destroystokyo/paper/entity/ai/VanillaGoal.java @@ -450,6 +450,7 @@ public interface VanillaGoal extends Goal { diff --git a/patches/server/0001-Pufferfish-Server-Changes.patch b/patches/server/0001-Pufferfish-Server-Changes.patch index 9bb4020f5..ab554b199 100644 --- a/patches/server/0001-Pufferfish-Server-Changes.patch +++ b/patches/server/0001-Pufferfish-Server-Changes.patch @@ -20,7 +20,7 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . diff --git a/build.gradle.kts b/build.gradle.kts -index faf3e3fd72e8c915e7a4803dacbe1bb576c6663e..1bb33b64bd73c8ea591c3ffdf5573c7c55a520f3 100644 +index 2da91ed6363c0851e4c459188f5e8ef5475e0c97..96d831791edbe6ae07325008b760f70f75c4d713 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -25,7 +25,7 @@ abstract class MockitoAgentProvider : CommandLineArgumentProvider { @@ -29,10 +29,10 @@ index faf3e3fd72e8c915e7a4803dacbe1bb576c6663e..1bb33b64bd73c8ea591c3ffdf5573c7c dependencies { - implementation(project(":paper-api")) + implementation(project(":pufferfish-api")) // Pufferfish // Paper + implementation("ca.spottedleaf:concurrentutil:0.0.2") // Paper - Add ConcurrentUtil dependency // Paper start implementation("org.jline:jline-terminal-ffm:3.27.1") // use ffm on java 22+ - implementation("org.jline:jline-terminal-jni:3.27.1") // fall back to jni on java 21 -@@ -60,6 +60,13 @@ dependencies { +@@ -61,6 +61,13 @@ dependencies { runtimeOnly("org.apache.maven.resolver:maven-resolver-connector-basic:1.9.18") runtimeOnly("org.apache.maven.resolver:maven-resolver-transport-http:1.9.18") @@ -46,8 +46,8 @@ index faf3e3fd72e8c915e7a4803dacbe1bb576c6663e..1bb33b64bd73c8ea591c3ffdf5573c7c testImplementation("io.github.classgraph:classgraph:4.8.47") // Paper - mob goal test testImplementation("org.junit.jupiter:junit-jupiter:5.10.2") testImplementation("org.junit.platform:junit-platform-suite-engine:1.10.0") -@@ -86,6 +93,14 @@ paperweight { - craftBukkitPackageVersion.set("v1_21_R2") // also needs to be updated in MappingEnvironment +@@ -87,6 +94,14 @@ paperweight { + craftBukkitPackageVersion.set("v1_21_R3") // also needs to be updated in MappingEnvironment } + @@ -61,7 +61,7 @@ index faf3e3fd72e8c915e7a4803dacbe1bb576c6663e..1bb33b64bd73c8ea591c3ffdf5573c7c tasks.jar { archiveClassifier.set("dev") -@@ -99,14 +114,14 @@ tasks.jar { +@@ -100,14 +115,14 @@ tasks.jar { val gitBranch = git("rev-parse", "--abbrev-ref", "HEAD").getText().trim() // Paper attributes( "Main-Class" to "org.bukkit.craftbukkit.Main", @@ -131,10 +131,10 @@ index c21e00812f1aaa1279834a0562d360d6b89e146c..877d2095a066854939f260ca4b0b8c7b } diff --git a/src/main/java/com/destroystokyo/paper/Metrics.java b/src/main/java/com/destroystokyo/paper/Metrics.java -index 4b002e8b75d117b726b0de274a76d3596fce015b..692c962193cf9fcc6801fc93f3220bdc673d527b 100644 +index 8f62879582195d8ae4f64bd23f752fa133b1c973..8433c3ac440faa969069d1929b8b77fcb1080be7 100644 --- a/src/main/java/com/destroystokyo/paper/Metrics.java +++ b/src/main/java/com/destroystokyo/paper/Metrics.java -@@ -593,7 +593,7 @@ public class Metrics { +@@ -592,7 +592,7 @@ public class Metrics { boolean logFailedRequests = config.getBoolean("logFailedRequests", false); // Only start Metrics, if it's enabled in the config if (config.getBoolean("enabled", true)) { @@ -143,7 +143,7 @@ index 4b002e8b75d117b726b0de274a76d3596fce015b..692c962193cf9fcc6801fc93f3220bdc metrics.addCustomChart(new Metrics.SimplePie("minecraft_version", () -> { String minecraftVersion = Bukkit.getVersion(); -@@ -607,11 +607,11 @@ public class Metrics { +@@ -606,11 +606,11 @@ public class Metrics { final String implVersion = org.bukkit.craftbukkit.Main.class.getPackage().getImplementationVersion(); if (implVersion != null) { final String buildOrHash = implVersion.substring(implVersion.lastIndexOf('-') + 1); @@ -1017,18 +1017,18 @@ index 0000000000000000000000000000000000000000..facd55463d44cb7e3d2ca6892982f549 + } +} diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 4158473fd553a16fec23bcbcf9a278d413120600..2a24e011b8a1128396a0a092456050c4b88f8260 100644 +index ae4ebf509837e8d44255781c61d02873f8b74be8..312edb4c47a404c1d20e6bdf748a4ccb49a330f4 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -333,6 +333,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop pluginsBlockingSleep = new java.util.HashSet<>(); // Paper - API to allow/disallow tick sleeping + public gg.pufferfish.pufferfish.util.AsyncExecutor mobSpawnExecutor = new gg.pufferfish.pufferfish.util.AsyncExecutor("MobSpawning"); // Pufferfish - optimize mob spawning public static S spin(Function serverFactory) { - AtomicReference atomicreference = new AtomicReference(); -@@ -1341,6 +1342,12 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop persistentStateManagerFactory) { this.level = world; this.mainThreadProcessor = new ServerChunkCache.MainThreadExecutor(world); -@@ -504,6 +507,43 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon +@@ -511,6 +514,43 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon this.broadcastChangedChunks(gameprofilerfiller); gameprofilerfiller.pop(); } @@ -1128,7 +1128,7 @@ index d021cd5b6136f0125076513977f430c6d4dd4f9f..1cb8c9d21eef27492efc4995525c198c } private void broadcastChangedChunks(ProfilerFiller profiler) { -@@ -553,6 +593,7 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon +@@ -560,6 +600,7 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon final int naturalSpawnChunkCount = j; NaturalSpawner.SpawnState spawnercreature_d; // moved down if ((this.spawnFriendlies || this.spawnEnemies) && this.level.paperConfig().entities.spawning.perPlayerMobSpawns) { // don't count mobs when animals and monsters are disabled @@ -1136,7 +1136,7 @@ index d021cd5b6136f0125076513977f430c6d4dd4f9f..1cb8c9d21eef27492efc4995525c198c // re-set mob counts for (ServerPlayer player : this.level.players) { // Paper start - per player mob spawning backoff -@@ -567,13 +608,17 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon +@@ -574,13 +615,17 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon } // Paper end - per player mob spawning backoff } @@ -1157,7 +1157,7 @@ index d021cd5b6136f0125076513977f430c6d4dd4f9f..1cb8c9d21eef27492efc4995525c198c profiler.popPush("spawnAndTick"); boolean flag = this.level.getGameRules().getBoolean(GameRules.RULE_DOMOBSPAWNING) && !this.level.players().isEmpty(); // CraftBukkit int k = this.level.getGameRules().getInt(GameRules.RULE_RANDOMTICKING); -@@ -590,7 +635,7 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon +@@ -597,7 +642,7 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon // Paper end - PlayerNaturallySpawnCreaturesEvent boolean flag1 = this.level.ticksPerSpawnCategory.getLong(org.bukkit.entity.SpawnCategory.ANIMAL) != 0L && this.level.getLevelData().getGameTime() % this.level.ticksPerSpawnCategory.getLong(org.bukkit.entity.SpawnCategory.ANIMAL) == 0L; // CraftBukkit @@ -1166,7 +1166,7 @@ index d021cd5b6136f0125076513977f430c6d4dd4f9f..1cb8c9d21eef27492efc4995525c198c } else { list1 = List.of(); } -@@ -602,8 +647,8 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon +@@ -609,8 +654,8 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon ChunkPos chunkcoordintpair = chunk.getPos(); chunk.incrementInhabitedTime(timeDelta); @@ -1178,7 +1178,7 @@ index d021cd5b6136f0125076513977f430c6d4dd4f9f..1cb8c9d21eef27492efc4995525c198c if (true) { // Paper - rewrite chunk system diff --git a/src/main/java/net/minecraft/server/level/ServerEntity.java b/src/main/java/net/minecraft/server/level/ServerEntity.java -index 90eb4927fa51ce3df86aa7b6c71f49150a03e337..3ea4920323606150548d6e9fc1ce67724f19dc60 100644 +index 103e2c414780be66324bcb9cd4ea539bbdfe12ad..c563326d3131bc726c7f43311c3eaa82131c6745 100644 --- a/src/main/java/net/minecraft/server/level/ServerEntity.java +++ b/src/main/java/net/minecraft/server/level/ServerEntity.java @@ -207,6 +207,7 @@ public class ServerEntity { @@ -1198,10 +1198,10 @@ index 90eb4927fa51ce3df86aa7b6c71f49150a03e337..3ea4920323606150548d6e9fc1ce6772 this.wasOnGround = this.entity.onGround(); this.teleportDelay = 0; diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 585e2b43a0326f0b81597fa1234d3c67c76af550..59f90878ec9f110d78bce998deb1dcd2830b0f08 100644 +index 1f898500d0e9b18a880645ceb0a8ff0fe75f4e48..fe295515b8043d988eb87c2caf516a4ae4169451 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -792,6 +792,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -793,6 +793,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe org.spigotmc.ActivationRange.activateEntities(this); // Spigot this.entityTickList.forEach((entity) -> { @@ -1209,7 +1209,7 @@ index 585e2b43a0326f0b81597fa1234d3c67c76af550..59f90878ec9f110d78bce998deb1dcd2 if (!entity.isRemoved()) { if (!tickratemanager.isEntityFrozen(entity)) { gameprofilerfiller.push("checkDespawn"); -@@ -809,7 +810,20 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -810,7 +811,20 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe } gameprofilerfiller.push("tick"); @@ -1231,7 +1231,7 @@ index 585e2b43a0326f0b81597fa1234d3c67c76af550..59f90878ec9f110d78bce998deb1dcd2 gameprofilerfiller.pop(); } } -@@ -930,7 +944,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -931,7 +945,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe ProfilerFiller gameprofilerfiller = Profiler.get(); gameprofilerfiller.push("thunder"); @@ -1241,10 +1241,10 @@ index 585e2b43a0326f0b81597fa1234d3c67c76af550..59f90878ec9f110d78bce998deb1dcd2 if (this.isRainingAt(blockposition)) { diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index cd1b6b539a62fa5237d6dab2d1c09a2e631d9941..56a6367245b133f3ac86af99a738325885f2e94a 100644 +index 84fa24880d02dc7ba1ec8bda3575be38447fd4b2..dedd8b3644699c4bdb33c9a7046342b620889b87 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -1172,6 +1172,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -1226,6 +1226,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl @Override public void handleEditBook(ServerboundEditBookPacket packet) { @@ -1253,7 +1253,7 @@ index cd1b6b539a62fa5237d6dab2d1c09a2e631d9941..56a6367245b133f3ac86af99a7383258 final io.papermc.paper.configuration.type.number.IntOr.Disabled pageMax = io.papermc.paper.configuration.GlobalConfiguration.get().itemValidation.bookSize.pageMax; if (!this.cserver.isPrimaryThread() && pageMax.enabled()) { diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index a15546e433ebba6c0de01bdaaef201a3d99a87b5..0a0d004699eeaae12852b197b32a449a86de3028 100644 +index 1b547be0fe97119edf4f29666cfe0037e0c778e0..0348a458493c4fe22552ae2404272dd9b989d53e 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java @@ -389,6 +389,9 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess @@ -1267,7 +1267,7 @@ index a15546e433ebba6c0de01bdaaef201a3d99a87b5..0a0d004699eeaae12852b197b32a449a public void setOrigin(@javax.annotation.Nonnull Location location) { this.origin = location.toVector(); diff --git a/src/main/java/net/minecraft/world/entity/EntityType.java b/src/main/java/net/minecraft/world/entity/EntityType.java -index c8c2394558952d7ca57d29874485251b8f2b3400..7e7603680310976312050aaff5bdaa805901617f 100644 +index d23914a3ab3723d532ae867db6b954c843030f75..8c1dad4b7f6461aca5ac37a25c880c550b0dcf5f 100644 --- a/src/main/java/net/minecraft/world/entity/EntityType.java +++ b/src/main/java/net/minecraft/world/entity/EntityType.java @@ -385,6 +385,7 @@ public class EntityType implements FeatureElement, EntityTypeT @@ -1279,10 +1279,10 @@ index c8c2394558952d7ca57d29874485251b8f2b3400..7e7603680310976312050aaff5bdaa80 private Component description; private final Optional> lootTable; diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index f36a075dbee2b96d01899e02460b1d8443e91749..e21e549e8102477aae599487acc6dd39616d6c26 100644 +index 96b4fbe4a4655777ff10b32e3257e2fac2aba12a..ee2c88638f058172ef730de9b112ce6506211d3b 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -467,7 +467,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -465,7 +465,7 @@ public abstract class LivingEntity extends Entity implements Attackable { if (world1 instanceof ServerLevel) { worldserver1 = (ServerLevel) world1; @@ -1311,7 +1311,7 @@ index f36a075dbee2b96d01899e02460b1d8443e91749..e21e549e8102477aae599487acc6dd39 @Override protected float getBlockSpeedFactor() { return Mth.lerp((float) this.getAttributeValue(Attributes.MOVEMENT_EFFICIENCY), super.getBlockSpeedFactor(), 1.0F); -@@ -2120,6 +2133,20 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -2135,6 +2148,20 @@ public abstract class LivingEntity extends Entity implements Attackable { return this.lastClimbablePos; } @@ -1333,10 +1333,10 @@ index f36a075dbee2b96d01899e02460b1d8443e91749..e21e549e8102477aae599487acc6dd39 if (this.isSpectator()) { return false; diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java -index dbd321f3dc3cc80737830db63aed47a6935e8e89..237eed7259f0cedf5b96ea54c195c3359d286064 100644 +index 5a0b51342f4a646101f4588697bcae7d1ca8a010..8ebe26c46db485ee0bdf64a313681d465051f436 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java -@@ -235,14 +235,16 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab +@@ -231,14 +231,16 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab return this.lookControl; } @@ -1377,7 +1377,7 @@ index dbd321f3dc3cc80737830db63aed47a6935e8e89..237eed7259f0cedf5b96ea54c195c335 gameprofilerfiller.pop(); } diff --git a/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeMap.java b/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeMap.java -index 94d04a20f97405e02d7cccaabadc7a7e86e336f7..31aa4221de653f0695b21d438964bae20cffad07 100644 +index fb967ac7b3e7828301f08a7fe9b039441cf7da30..b4cfae23709b7c3aed28317846e37c9311c948c1 100644 --- a/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeMap.java +++ b/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeMap.java @@ -23,9 +23,11 @@ public class AttributeMap { @@ -1481,10 +1481,10 @@ index 60c2868f255d372226e0c1389caaa5477bbef41e..3de177a40649183b5b210e5f0c610a52 private void setupAnimationStates() { if (this.isResting()) { diff --git a/src/main/java/net/minecraft/world/entity/animal/allay/Allay.java b/src/main/java/net/minecraft/world/entity/animal/allay/Allay.java -index 05c3d43fafc781e2c2d762dd5f509753df8da3b3..94692082aa85d7e4e52a4e16bb5e49b0bf6eb93f 100644 +index b86f638390d386c838318a4d9b6571ac5514df8f..f4788104b1bb73810fdf0dc7f5311d5b078a81d5 100644 --- a/src/main/java/net/minecraft/world/entity/animal/allay/Allay.java +++ b/src/main/java/net/minecraft/world/entity/animal/allay/Allay.java -@@ -219,11 +219,13 @@ public class Allay extends PathfinderMob implements InventoryCarrier, VibrationS +@@ -223,11 +223,13 @@ public class Allay extends PathfinderMob implements InventoryCarrier, VibrationS return 0.4F; } @@ -1517,7 +1517,7 @@ index 31b10cd404b672d7ce21c2107d8f83e32de26ef4..cb47876a13cb1990bb0ab4cff1bbe57b gameprofilerfiller.pop(); gameprofilerfiller.push("axolotlActivityUpdate"); diff --git a/src/main/java/net/minecraft/world/entity/animal/frog/Frog.java b/src/main/java/net/minecraft/world/entity/animal/frog/Frog.java -index 36846ba6b6c7494c745ebd8b221479a9d02ff318..3461c7150fc44ee608169aa993f6ff44d4c978be 100644 +index ca04e5d829331551a2c2f44e223ff05c6ce04e76..db91b8018591fe248efda417fcde7fd2071c4cb6 100644 --- a/src/main/java/net/minecraft/world/entity/animal/frog/Frog.java +++ b/src/main/java/net/minecraft/world/entity/animal/frog/Frog.java @@ -184,10 +184,12 @@ public class Frog extends Animal implements VariantHolder> { @@ -1570,10 +1570,10 @@ index 76aca47d8638d5c37c57d3a59fa7f8ceaa5a53b4..fb92cd4b0c15b614c0c06d2867039aee gameprofilerfiller.pop(); gameprofilerfiller.push("goatActivityUpdate"); diff --git a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java -index 244e38db508efa3eebebb6392c4ebb0805367baf..d62c0d3c2bd5df5ee908bdcfdffaae9ce780810f 100644 +index bd9e10f79eaf0d23908229b3ebc2227946a14843..2ce65ef77e4b28e1fd5ac7bd6a304cc115b8aca2 100644 --- a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java +++ b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java -@@ -152,6 +152,13 @@ public class WitherBoss extends Monster implements RangedAttackMob { +@@ -151,6 +151,13 @@ public class WitherBoss extends Monster implements RangedAttackMob { this.bossEvent.setName(this.getDisplayName()); } @@ -1588,10 +1588,10 @@ index 244e38db508efa3eebebb6392c4ebb0805367baf..d62c0d3c2bd5df5ee908bdcfdffaae9c protected SoundEvent getAmbientSound() { return SoundEvents.WITHER_AMBIENT; diff --git a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java -index 48dcd2bc12ce1d08cc5195bff5460dc0dd9902d3..c7153cfec847fca4ce5d9ec729628aed5bed11be 100644 +index 2a394381a4ad46359359ba402b65c62b331480b4..4e4dab5bc202f6f421dcff98f0e36e8e70378b49 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java +++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java -@@ -307,11 +307,17 @@ public class EnderMan extends Monster implements NeutralMob { +@@ -306,11 +306,17 @@ public class EnderMan extends Monster implements NeutralMob { private boolean teleport(double x, double y, double z) { BlockPos.MutableBlockPos blockposition_mutableblockposition = new BlockPos.MutableBlockPos(x, y, z); @@ -1630,10 +1630,10 @@ index 92270912ef26924f611a1df7cb3d5b485b0a262d..9c20651b74157582e60793ceba8adde2 gameprofilerfiller.pop(); HoglinAi.updateActivity(this); diff --git a/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java b/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java -index e04d2c5e75dc774fe893a552474fdb8045c32693..d1870bf4c01c846a721480eb6611a67db9b98d02 100644 +index 2121d2a2e1aa1d0f0390cc515317096431f6dcb0..74ab50723056fef2a96dcc9e2de0e58526738011 100644 --- a/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java +++ b/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java -@@ -304,11 +304,13 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento +@@ -307,11 +307,13 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento return !this.cannotHunt; } @@ -1648,7 +1648,7 @@ index e04d2c5e75dc774fe893a552474fdb8045c32693..d1870bf4c01c846a721480eb6611a67d gameprofilerfiller.pop(); PiglinAi.updateActivity(this); diff --git a/src/main/java/net/minecraft/world/entity/monster/warden/Warden.java b/src/main/java/net/minecraft/world/entity/monster/warden/Warden.java -index 6180019da58b19d2595da508aed3196af922d587..457f9f6bf6a8e8f2e0b4246a0589e344756370d2 100644 +index c47ed605f0822effd58df4f875297ed015e1e57e..4331ada8bed7ade7b53fd8ba000c1c1b34fa4331 100644 --- a/src/main/java/net/minecraft/world/entity/monster/warden/Warden.java +++ b/src/main/java/net/minecraft/world/entity/monster/warden/Warden.java @@ -275,11 +275,13 @@ public class Warden extends Monster implements VibrationSystem { @@ -1666,7 +1666,7 @@ index 6180019da58b19d2595da508aed3196af922d587..457f9f6bf6a8e8f2e0b4246a0589e344 gameprofilerfiller.pop(); super.customServerAiStep(world); diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java -index b7a34f1c4d7b5ef3f7a843d152e33c839dcdedd5..d9a60871bce4da7e6dc7c3c986498602c355ac04 100644 +index 2d8ba55906c8da16fde850e3412f4a6bda3d56e7..3fd86782134a674f58ef37288c8963a4a92f685c 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java @@ -142,6 +142,8 @@ public class Villager extends AbstractVillager implements ReputationEventHandler @@ -1700,10 +1700,10 @@ index b7a34f1c4d7b5ef3f7a843d152e33c839dcdedd5..d9a60871bce4da7e6dc7c3c986498602 if (this.assignProfessionWhenSpawned) { this.assignProfessionWhenSpawned = false; diff --git a/src/main/java/net/minecraft/world/entity/player/Inventory.java b/src/main/java/net/minecraft/world/entity/player/Inventory.java -index 0990bcf65f484b9a019c91fcdae1783bac6388da..99feda30fb85a7615560b6e9a3701d5dfeb3e524 100644 +index 110456deaa662bc1c0f6ba7878bb3074869a4350..58c8e8f06f5cf028b158350327bf42984fcb4d38 100644 --- a/src/main/java/net/minecraft/world/entity/player/Inventory.java +++ b/src/main/java/net/minecraft/world/entity/player/Inventory.java -@@ -649,6 +649,8 @@ public class Inventory implements Container, Nameable { +@@ -636,6 +636,8 @@ public class Inventory implements Container, Nameable { } public boolean contains(ItemStack stack) { @@ -1712,7 +1712,7 @@ index 0990bcf65f484b9a019c91fcdae1783bac6388da..99feda30fb85a7615560b6e9a3701d5d Iterator iterator = this.compartments.iterator(); while (iterator.hasNext()) { -@@ -663,6 +665,18 @@ public class Inventory implements Container, Nameable { +@@ -650,6 +652,18 @@ public class Inventory implements Container, Nameable { } } } @@ -1732,7 +1732,7 @@ index 0990bcf65f484b9a019c91fcdae1783bac6388da..99feda30fb85a7615560b6e9a3701d5d return false; } diff --git a/src/main/java/net/minecraft/world/entity/projectile/Projectile.java b/src/main/java/net/minecraft/world/entity/projectile/Projectile.java -index 6c2d4d6f3a36ab452dfd3c33f66e54f152906639..5a791fad8c27e4997d53f2e5d9a5aa28189fdf28 100644 +index 9a7b56b653848974e1194eb4f6d40cb99a96ff57..593b343b7cd5a24e34ad19a9e93eb9258f862357 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/Projectile.java +++ b/src/main/java/net/minecraft/world/entity/projectile/Projectile.java @@ -58,6 +58,36 @@ public abstract class Projectile extends Entity implements TraceableEntity { @@ -1786,7 +1786,7 @@ index b62db8c7c8c57e43869ee239ebf4b02f112355d9..2bee342e59e600426c8681a3ce641a12 } } diff --git a/src/main/java/net/minecraft/world/item/crafting/ShapelessRecipe.java b/src/main/java/net/minecraft/world/item/crafting/ShapelessRecipe.java -index 12f95bee2a69fd5df7c4a165537e01299e60c5f6..d7ce86752e4138cdd3844b3374609753aa20f9ea 100644 +index 12f95bee2a69fd5df7c4a165537e01299e60c5f6..4b3769020a92124bd5677cf75e268b8bc5ba2031 100644 --- a/src/main/java/net/minecraft/world/item/crafting/ShapelessRecipe.java +++ b/src/main/java/net/minecraft/world/item/crafting/ShapelessRecipe.java @@ -31,8 +31,13 @@ public class ShapelessRecipe implements CraftingRecipe { @@ -1803,7 +1803,7 @@ index 12f95bee2a69fd5df7c4a165537e01299e60c5f6..d7ce86752e4138cdd3844b3374609753 this.group = group; this.category = category; this.result = result; -@@ -80,6 +85,28 @@ public class ShapelessRecipe implements CraftingRecipe { +@@ -80,6 +85,27 @@ public class ShapelessRecipe implements CraftingRecipe { } public boolean matches(CraftingInput input, Level world) { @@ -1828,15 +1828,14 @@ index 12f95bee2a69fd5df7c4a165537e01299e60c5f6..d7ce86752e4138cdd3844b3374609753 + return ingredients.isEmpty(); + } + // Pufferfish end -+ // Paper start - Improve exact choice recipe ingredients & unwrap ternary if (input.ingredientCount() != this.ingredients.size()) { return false; diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index 0de2b79481352b52438dde284262019b29949ad8..eb9fdff179f59d49b17ee3af18cef7508d45987f 100644 +index 27f9d167b5ae9ce5117798ea44324107df59425f..6470f145e2470574a40ddce6ca5bf924c1bb094c 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java -@@ -1487,16 +1487,16 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl +@@ -1488,16 +1488,16 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl public void guardEntityTick(Consumer tickConsumer, T entity) { try { tickConsumer.accept(entity); @@ -1857,10 +1856,10 @@ index 0de2b79481352b52438dde284262019b29949ad8..eb9fdff179f59d49b17ee3af18cef750 // Paper start - Option to prevent armor stands from doing entity lookups @Override diff --git a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java -index 4640baec5bed6c2d53cc0f8ca1d273cc115abe9b..29e5234c008b8ac1df240a242ff7966057075171 100644 +index 97937e3bd211997f0a0a3e9e671a1c59712d0003..99a95d77f44dddfd7be6c2ebd60e827d9de956b7 100644 --- a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java +++ b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java -@@ -88,6 +88,18 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p +@@ -89,6 +89,18 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p private final LevelChunkTicks fluidTicks; private LevelChunk.UnsavedListener unsavedListener; @@ -1879,7 +1878,7 @@ index 4640baec5bed6c2d53cc0f8ca1d273cc115abe9b..29e5234c008b8ac1df240a242ff79660 public LevelChunk(Level world, ChunkPos pos) { this(world, pos, UpgradeData.EMPTY, new LevelChunkTicks<>(), new LevelChunkTicks<>(), 0L, (LevelChunkSection[]) null, (LevelChunk.PostLoadProcessor) null, (BlendingData) null); } -@@ -121,6 +133,8 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p +@@ -122,6 +134,8 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p this.debug = !empty && this.level.isDebug(); this.defaultBlockState = empty ? VOID_AIR_BLOCKSTATE : AIR_BLOCKSTATE; // Paper end - get block chunk optimisation @@ -1914,7 +1913,7 @@ index 7c989318dc7ad89bb0d9143fcaac1e4bba6f5907..143a4d4efcc989ed4a4c73cc304e1978 } } diff --git a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java -index 507f908916cbeb592496f963b46e4c2121a7b5e3..da306aab94697a86ac052f4536c9eff1ff23a92f 100644 +index 15892c7769caa15f3d52a1ee2147cf9615aa0e25..6ef651e6dc16bad45aeb76f8e17b97871c506a64 100644 --- a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java +++ b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java @@ -505,7 +505,7 @@ public final class CraftMagicNumbers implements UnsafeValues { diff --git a/patches/server/0002-Fix-pufferfish-issues.patch b/patches/server/0002-Fix-pufferfish-issues.patch index 1236523e4..529a0ffb1 100644 --- a/patches/server/0002-Fix-pufferfish-issues.patch +++ b/patches/server/0002-Fix-pufferfish-issues.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Fix pufferfish issues diff --git a/build.gradle.kts b/build.gradle.kts -index 1bb33b64bd73c8ea591c3ffdf5573c7c55a520f3..c8f5e9eaf5fb83148ffb8ff18cb33d51561a6610 100644 +index 96d831791edbe6ae07325008b760f70f75c4d713..cfa25c0cd7f7e249a4f22dc1d316bbf702b27e37 100644 --- a/build.gradle.kts +++ b/build.gradle.kts -@@ -62,7 +62,7 @@ dependencies { +@@ -63,7 +63,7 @@ dependencies { // Pufferfish start implementation("org.yaml:snakeyaml:1.32") @@ -73,7 +73,7 @@ index 790bad0494454ca12ee152e3de6da3da634d9b20..bf1aacdfac2d501c62038a22cb9eac7f @Override diff --git a/src/main/java/net/minecraft/world/entity/projectile/Projectile.java b/src/main/java/net/minecraft/world/entity/projectile/Projectile.java -index 5a791fad8c27e4997d53f2e5d9a5aa28189fdf28..af8dc4a57987cc84cb1002f2e5f25c28ec98173f 100644 +index 593b343b7cd5a24e34ad19a9e93eb9258f862357..0dbfa1e9ae1f0b8b9c4e9de59a7844ae96f63077 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/Projectile.java +++ b/src/main/java/net/minecraft/world/entity/projectile/Projectile.java @@ -77,7 +77,7 @@ public abstract class Projectile extends Entity implements TraceableEntity { @@ -86,10 +86,10 @@ index 5a791fad8c27e4997d53f2e5d9a5aa28189fdf28..af8dc4a57987cc84cb1002f2e5f25c28 return; } diff --git a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java -index 29e5234c008b8ac1df240a242ff7966057075171..5c4843f6cfd13790a44fc0f928f1fbcef8a648ce 100644 +index 99a95d77f44dddfd7be6c2ebd60e827d9de956b7..090e196cf391dced8adcb8106026d67b2aeac6b0 100644 --- a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java +++ b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java -@@ -134,7 +134,7 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p +@@ -135,7 +135,7 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p this.defaultBlockState = empty ? VOID_AIR_BLOCKSTATE : AIR_BLOCKSTATE; // Paper end - get block chunk optimisation diff --git a/patches/server/0003-Rebrand.patch b/patches/server/0003-Rebrand.patch index 07d5b27c0..0cb5df170 100644 --- a/patches/server/0003-Rebrand.patch +++ b/patches/server/0003-Rebrand.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Rebrand diff --git a/build.gradle.kts b/build.gradle.kts -index c8f5e9eaf5fb83148ffb8ff18cb33d51561a6610..77602e4445b1b45a17e5552ac6a769e0ed46ebc7 100644 +index cfa25c0cd7f7e249a4f22dc1d316bbf702b27e37..74d7aaae57e0e9ea9e31c4b2189ba50a0ac83bea 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -25,7 +25,7 @@ abstract class MockitoAgentProvider : CommandLineArgumentProvider { @@ -14,10 +14,10 @@ index c8f5e9eaf5fb83148ffb8ff18cb33d51561a6610..77602e4445b1b45a17e5552ac6a769e0 dependencies { - implementation(project(":pufferfish-api")) // Pufferfish // Paper + implementation(project(":purpur-api")) // Pufferfish // Paper // Purpur + implementation("ca.spottedleaf:concurrentutil:0.0.2") // Paper - Add ConcurrentUtil dependency // Paper start implementation("org.jline:jline-terminal-ffm:3.27.1") // use ffm on java 22+ - implementation("org.jline:jline-terminal-jni:3.27.1") // fall back to jni on java 21 -@@ -67,6 +67,10 @@ dependencies { +@@ -68,6 +68,10 @@ dependencies { } // Pufferfish end @@ -28,7 +28,7 @@ index c8f5e9eaf5fb83148ffb8ff18cb33d51561a6610..77602e4445b1b45a17e5552ac6a769e0 testImplementation("io.github.classgraph:classgraph:4.8.47") // Paper - mob goal test testImplementation("org.junit.jupiter:junit-jupiter:5.10.2") testImplementation("org.junit.platform:junit-platform-suite-engine:1.10.0") -@@ -114,14 +118,14 @@ tasks.jar { +@@ -115,14 +119,14 @@ tasks.jar { val gitBranch = git("rev-parse", "--abbrev-ref", "HEAD").getText().trim() // Paper attributes( "Main-Class" to "org.bukkit.craftbukkit.Main", @@ -48,7 +48,7 @@ index c8f5e9eaf5fb83148ffb8ff18cb33d51561a6610..77602e4445b1b45a17e5552ac6a769e0 "Build-Number" to (build ?: ""), "Build-Time" to Instant.now().toString(), "Git-Branch" to gitBranch, // Paper -@@ -187,7 +191,7 @@ fun TaskContainer.registerRunTask( +@@ -188,7 +192,7 @@ fun TaskContainer.registerRunTask( name: String, block: JavaExec.() -> Unit ): TaskProvider = register(name) { @@ -254,7 +254,7 @@ index 4e56018b64d11f76c8da43fd8f85c6de72204e36..9607675e6c5bff2183c4420d11fc63ee @Override diff --git a/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java b/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java -index 6fef86e47e37eab6721cfd67d494afb25a2ded68..c914e1e13c4f64f24efa5f825e58efb69632bfa6 100644 +index 1354ccfbf525e5e64483ac5f443cc2325ba63850..5e7b833fc9f37bc370c76e5c43e6c9919d6d20af 100644 --- a/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java +++ b/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java @@ -491,7 +491,7 @@ public class CraftScheduler implements BukkitScheduler { @@ -267,7 +267,7 @@ index 6fef86e47e37eab6721cfd67d494afb25a2ded68..c914e1e13c4f64f24efa5f825e58efb6 // (async tasks must live with race-conditions if they attempt to cancel between these few lines of code) } diff --git a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java -index da306aab94697a86ac052f4536c9eff1ff23a92f..86ba02ba848ee20a2e2b52baab8986dd5a013f98 100644 +index 6ef651e6dc16bad45aeb76f8e17b97871c506a64..8979956334ad5802d221e45eba91248e7f048d13 100644 --- a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java +++ b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java @@ -505,7 +505,7 @@ public final class CraftMagicNumbers implements UnsafeValues { diff --git a/patches/server/0004-Purpur-config-files.patch b/patches/server/0004-Purpur-config-files.patch index e217ce420..30b8a97de 100644 --- a/patches/server/0004-Purpur-config-files.patch +++ b/patches/server/0004-Purpur-config-files.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Purpur config files diff --git a/src/main/java/com/destroystokyo/paper/Metrics.java b/src/main/java/com/destroystokyo/paper/Metrics.java -index 692c962193cf9fcc6801fc93f3220bdc673d527b..8cde30544e14f8fc2dac32966ae3c21f8cf3a551 100644 +index 8433c3ac440faa969069d1929b8b77fcb1080be7..4a8f95670e25c81952cccbaf4c6e49514cacd529 100644 --- a/src/main/java/com/destroystokyo/paper/Metrics.java +++ b/src/main/java/com/destroystokyo/paper/Metrics.java -@@ -593,7 +593,7 @@ public class Metrics { +@@ -592,7 +592,7 @@ public class Metrics { boolean logFailedRequests = config.getBoolean("logFailedRequests", false); // Only start Metrics, if it's enabled in the config if (config.getBoolean("enabled", true)) { @@ -17,7 +17,7 @@ index 692c962193cf9fcc6801fc93f3220bdc673d527b..8cde30544e14f8fc2dac32966ae3c21f metrics.addCustomChart(new Metrics.SimplePie("minecraft_version", () -> { String minecraftVersion = Bukkit.getVersion(); -@@ -602,16 +602,8 @@ public class Metrics { +@@ -601,16 +601,8 @@ public class Metrics { })); metrics.addCustomChart(new Metrics.SingleLineChart("players", () -> Bukkit.getOnlinePlayers().size())); @@ -92,10 +92,10 @@ index d62f7375394409a278bc565c8263506c598ceeba..2a7fd4420467cce0c4ddca749955ba45 gg.pufferfish.pufferfish.PufferfishConfig.load(); // Pufferfish gg.pufferfish.pufferfish.PufferfishCommand.init(); // Pufferfish diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index eb9fdff179f59d49b17ee3af18cef7508d45987f..e7b9c8a473403002a75b6840250439c91ed12c1c 100644 +index 6470f145e2470574a40ddce6ca5bf924c1bb094c..31ec722cfb102eaea5511aca07a48e4ad36d73af 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java -@@ -174,6 +174,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl +@@ -175,6 +175,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl // Paper end - add paper world config public final com.destroystokyo.paper.antixray.ChunkPacketBlockController chunkPacketBlockController; // Paper - Anti-Xray @@ -103,7 +103,7 @@ index eb9fdff179f59d49b17ee3af18cef7508d45987f..e7b9c8a473403002a75b6840250439c9 public static BlockPos lastPhysicsProblem; // Spigot private org.spigotmc.TickLimiter entityLimiter; private org.spigotmc.TickLimiter tileLimiter; -@@ -842,6 +843,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl +@@ -843,6 +844,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl // Paper end - getblock optimisations - cache world height/sections this.spigotConfig = new org.spigotmc.SpigotWorldConfig(((net.minecraft.world.level.storage.PrimaryLevelData) worlddatamutable).getLevelName()); // Spigot this.paperConfig = paperWorldConfigCreator.apply(this.spigotConfig); // Paper - create paper world config @@ -112,7 +112,7 @@ index eb9fdff179f59d49b17ee3af18cef7508d45987f..e7b9c8a473403002a75b6840250439c9 this.world = new CraftWorld((ServerLevel) this, gen, biomeProvider, env); diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index ac8af406180bc680d46e8edc3da0fc2e5211345a..48a8bdd45c063797144e98e76f6007ae9025124e 100644 +index 97b5d6ba2b19a7c730730c74175a29157aed1840..ac83ec97e5a55d2184c0c0d64b9b340f39c2be9f 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -1086,6 +1086,7 @@ public final class CraftServer implements Server { @@ -159,7 +159,7 @@ index ac8af406180bc680d46e8edc3da0fc2e5211345a..48a8bdd45c063797144e98e76f6007ae public void restart() { org.spigotmc.RestartCommand.restart(); diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java -index be0d38544395a9b3befb898bb961f34e32fe9509..9ad9239ae0804cc7a4a9ea4a05401b303ae9b372 100644 +index 1c2439ffc1e407ff69286817d22f127470ce07ba..ae274a56f7cb6200b3c556ed61254bb28146c771 100644 --- a/src/main/java/org/bukkit/craftbukkit/Main.java +++ b/src/main/java/org/bukkit/craftbukkit/Main.java @@ -176,6 +176,14 @@ public class Main { diff --git a/patches/server/0005-Purpur-client-support.patch b/patches/server/0005-Purpur-client-support.patch index efb60b3fd..d868c1f62 100644 --- a/patches/server/0005-Purpur-client-support.patch +++ b/patches/server/0005-Purpur-client-support.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Purpur client support diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 5a8f396d47577f087abb415c972fd4f51e50faba..77823507f99bc39181fe3c285cd077ca6ef0296b 100644 +index fc7f7a34babd095a51b5321f600aef65a2a9d123..c067ac7481367afbcdb051b7a215ebf0f28e3c9c 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -329,6 +329,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple +@@ -327,6 +327,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple public com.destroystokyo.paper.event.entity.PlayerNaturallySpawnCreaturesEvent playerNaturallySpawnedEvent; // Paper - PlayerNaturallySpawnCreaturesEvent public @Nullable String clientBrandName = null; // Paper - Brand support public org.bukkit.event.player.PlayerQuitEvent.QuitReason quitReason = null; // Paper - Add API for quit reason; there are a lot of changes to do if we change all methods leading to the event @@ -43,10 +43,10 @@ index b0bc66dc7248aae691dcab68b925b52a1695e63f..b6dd6bde947ac7502f25d31603995961 try { String channels = payload.toString(com.google.common.base.Charsets.UTF_8); diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 554714e449d1d2439b05d7e15f72afccd17d4df5..3d2322233aff511bcc5c85b24230c2e08dc0bcd0 100644 +index 20f64850cb42d986358f01ffcdb42187e1684bca..0528b90bf718e4b3dc144cc33806126dfbe736e2 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -3580,4 +3580,11 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -3557,4 +3557,11 @@ public class CraftPlayer extends CraftHumanEntity implements Player { this.getHandle().connection.send(new net.minecraft.network.protocol.game.ClientboundEntityEventPacket(((CraftEntity) target).getHandle(), effect.getData())); } // Paper end - entity effect API diff --git a/patches/server/0008-Component-related-conveniences.patch b/patches/server/0008-Component-related-conveniences.patch index e66d1c195..a72eef78d 100644 --- a/patches/server/0008-Component-related-conveniences.patch +++ b/patches/server/0008-Component-related-conveniences.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Component related conveniences diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 77823507f99bc39181fe3c285cd077ca6ef0296b..785ea646cbefb8dc1e22a57bc3a18cdbee440e06 100644 +index e223a732b8ff485645fa3a4c08c6bf6dff146dd7..5bad9af939411e23a84184cdc13004bc5e2e2568 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -2253,6 +2253,26 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple +@@ -2236,6 +2236,26 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple this.lastSentExp = -1; // CraftBukkit - Added to reset } @@ -35,7 +35,7 @@ index 77823507f99bc39181fe3c285cd077ca6ef0296b..785ea646cbefb8dc1e22a57bc3a18cdb @Override public void displayClientMessage(Component message, boolean overlay) { this.sendSystemMessage(message, overlay); -@@ -2477,6 +2497,20 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple +@@ -2457,6 +2477,20 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple return new CommandSourceStack(this.commandSource(), this.position(), this.getRotationVector(), this.serverLevel(), this.getPermissionLevel(), this.getName().getString(), this.getDisplayName(), this.server, this); } @@ -57,7 +57,7 @@ index 77823507f99bc39181fe3c285cd077ca6ef0296b..785ea646cbefb8dc1e22a57bc3a18cdb this.sendSystemMessage(message, false); } diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index 30de3d1a7792c38ae946f19cb0e14637919b5001..cf8b7f93a1ba027c00d7f45809fa51f1ab55a5de 100644 +index 9b71655a425356132afb786eff623f558e1e3498..b973a07d199bc856643b23c090eb56bd1aeb0104 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java @@ -991,6 +991,20 @@ public abstract class PlayerList { diff --git a/patches/server/0009-Ridables.patch b/patches/server/0009-Ridables.patch index aad8fd8e8..923555079 100644 --- a/patches/server/0009-Ridables.patch +++ b/patches/server/0009-Ridables.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Ridables diff --git a/src/main/java/net/minecraft/core/BlockPos.java b/src/main/java/net/minecraft/core/BlockPos.java -index f58a94efafbc01d402cd03a108bb90f60930a316..21ea63da99c5b3e2e1ab9cc1049c903bba6cf288 100644 +index faffd87c357511ef00646971a16acf1009362c59..c98e0d9d8bc9e6ef12a9b9d6082e98bc5bb7a5f6 100644 --- a/src/main/java/net/minecraft/core/BlockPos.java +++ b/src/main/java/net/minecraft/core/BlockPos.java -@@ -62,6 +62,12 @@ public class BlockPos extends Vec3i { +@@ -63,6 +63,12 @@ public class BlockPos extends Vec3i { public static final int MAX_HORIZONTAL_COORDINATE = 33554431; // Paper end - Optimize Bit Operations by inlining @@ -22,10 +22,10 @@ index f58a94efafbc01d402cd03a108bb90f60930a316..21ea63da99c5b3e2e1ab9cc1049c903b super(x, y, z); } diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 2a24e011b8a1128396a0a092456050c4b88f8260..ff4d04092aa6322788d55d3c0253cb7f6f3cd493 100644 +index 312edb4c47a404c1d20e6bdf748a4ccb49a330f4..c391d42e1e84beeee6cf8796f748b70be9c98b52 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1863,6 +1863,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 0; // Paper - Add EntityMoveEvent net.minecraft.world.level.block.entity.HopperBlockEntity.skipHopperEvents = worldserver.paperConfig().hopper.disableMoveEvent || org.bukkit.event.inventory.InventoryMoveItemEvent.getHandlerList().getRegisteredListeners().length == 0; // Paper - Perf: Optimize Hoppers worldserver.updateLagCompensationTick(); // Paper - lag compensation @@ -34,10 +34,10 @@ index 2a24e011b8a1128396a0a092456050c4b88f8260..ff4d04092aa6322788d55d3c0253cb7f gameprofilerfiller.push(() -> { String s = String.valueOf(worldserver); diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 59f90878ec9f110d78bce998deb1dcd2830b0f08..498f0478bdb790bc3083d2cf5e81633054255fe2 100644 +index fe295515b8043d988eb87c2caf516a4ae4169451..4de53bba7b0bf036d2ef76970f01ca5414514ebc 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -231,6 +231,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -232,6 +232,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe public boolean hasPhysicsEvent = true; // Paper - BlockPhysicsEvent public boolean hasEntityMoveEvent; // Paper - Add EntityMoveEvent private final alternate.current.wire.WireHandler wireHandler = new alternate.current.wire.WireHandler(this); // Paper - optimize redstone (Alternate Current) @@ -46,10 +46,10 @@ index 59f90878ec9f110d78bce998deb1dcd2830b0f08..498f0478bdb790bc3083d2cf5e816330 public LevelChunk getChunkIfLoaded(int x, int z) { return this.chunkSource.getChunkAtIfLoadedImmediately(x, z); // Paper - Use getChunkIfLoadedImmediately diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 785ea646cbefb8dc1e22a57bc3a18cdbee440e06..749145ac5ee84b5ebbf4b1eba2df680c1c51bd88 100644 +index f8787b8a4a267cc7f5e1a81344f0de9cacf43e07..1e0ca760b18e34a4c320439838283b8fcd87075a 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -1033,6 +1033,15 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple +@@ -1030,6 +1030,15 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple this.trackEnteredOrExitedLavaOnVehicle(); this.updatePlayerAttributes(); this.advancements.flushDirty(this); @@ -66,20 +66,20 @@ index 785ea646cbefb8dc1e22a57bc3a18cdbee440e06..749145ac5ee84b5ebbf4b1eba2df680c private void updatePlayerAttributes() { diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 56a6367245b133f3ac86af99a738325885f2e94a..d2145df4e9b0dd16e7d394b8983c36fd073d3e31 100644 +index dedd8b3644699c4bdb33c9a7046342b620889b87..ddbfd4884daaa4cffdb5e4d8923a8755dab76d91 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -2822,6 +2822,8 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -2888,6 +2888,8 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl - ServerGamePacketListenerImpl.this.cserver.getPluginManager().callEvent(event); + ServerGamePacketListenerImpl.this.cserver.getPluginManager().callEvent(event); -+ player.processClick(enumhand); // Purpur ++ player.processClick(enumhand); // Purpur + - // Entity in bucket - SPIGOT-4048 and SPIGOT-6859a - if ((entity instanceof Bucketable && entity instanceof LivingEntity && origItem != null && origItem.asItem() == Items.WATER_BUCKET) && (event.isCancelled() || ServerGamePacketListenerImpl.this.player.getInventory().getSelected() == null || ServerGamePacketListenerImpl.this.player.getInventory().getSelected().getItem() != origItem)) { + // Entity in bucket - SPIGOT-4048 and SPIGOT-6859a + if ((entity instanceof Bucketable && entity instanceof LivingEntity && origItem != null && origItem.asItem() == Items.WATER_BUCKET) && (event.isCancelled() || ServerGamePacketListenerImpl.this.player.getInventory().getSelected() == null || ServerGamePacketListenerImpl.this.player.getInventory().getSelected().getItem() != origItem)) { entity.resendPossiblyDesyncedEntityData(ServerGamePacketListenerImpl.this.player); // Paper - The entire mob gets deleted, so resend it diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 0a0d004699eeaae12852b197b32a449a86de3028..0e084e2dcd0294274aa42b2a15fe58bee54ff393 100644 +index 0348a458493c4fe22552ae2404272dd9b989d53e..c11689baa8e917a2163bd550452b7a6694163b72 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java @@ -340,7 +340,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess @@ -91,7 +91,7 @@ index 0a0d004699eeaae12852b197b32a449a86de3028..0e084e2dcd0294274aa42b2a15fe58be private float eyeHeight; public boolean isInPowderSnow; public boolean wasInPowderSnow; -@@ -3297,6 +3297,13 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3327,6 +3327,13 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess this.passengers = ImmutableList.copyOf(list); } @@ -105,7 +105,7 @@ index 0a0d004699eeaae12852b197b32a449a86de3028..0e084e2dcd0294274aa42b2a15fe58be this.gameEvent(GameEvent.ENTITY_MOUNT, passenger); } } -@@ -3336,6 +3343,14 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3366,6 +3373,14 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess return false; } // CraftBukkit end @@ -120,7 +120,7 @@ index 0a0d004699eeaae12852b197b32a449a86de3028..0e084e2dcd0294274aa42b2a15fe58be if (this.passengers.size() == 1 && this.passengers.get(0) == entity) { this.passengers = ImmutableList.of(); } else { -@@ -5328,4 +5343,44 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -5358,4 +5373,44 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess return ((net.minecraft.server.level.ServerLevel) this.level).isPositionEntityTicking(this.blockPosition()); } // Paper end - Expose entity id counter @@ -166,7 +166,7 @@ index 0a0d004699eeaae12852b197b32a449a86de3028..0e084e2dcd0294274aa42b2a15fe58be + // Purpur end } diff --git a/src/main/java/net/minecraft/world/entity/GlowSquid.java b/src/main/java/net/minecraft/world/entity/GlowSquid.java -index b851c3ee1426bc0a259bf6c4a662af0c9883dd71..7c11b5e73d4f3c0be7c467f7522c2d974ab330f3 100644 +index 397765b1547ae47b64963b3807b206c50a6650e1..0e1c89923ac5dfd339e591ab19b0212ab57fde4a 100644 --- a/src/main/java/net/minecraft/world/entity/GlowSquid.java +++ b/src/main/java/net/minecraft/world/entity/GlowSquid.java @@ -25,6 +25,19 @@ public class GlowSquid extends Squid { @@ -190,11 +190,11 @@ index b851c3ee1426bc0a259bf6c4a662af0c9883dd71..7c11b5e73d4f3c0be7c467f7522c2d97 protected ParticleOptions getInkParticle() { return ParticleTypes.GLOW_SQUID_INK; diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index e21e549e8102477aae599487acc6dd39616d6c26..30ffb90dda6c95c6f3bc42d1b9747acef0f0f19a 100644 +index ee2c88638f058172ef730de9b112ce6506211d3b..1135737e16849417df1cdcd5f3858ebb04160f06 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -248,9 +248,9 @@ public abstract class LivingEntity extends Entity implements Attackable { - protected int deathScore; +@@ -246,9 +246,9 @@ public abstract class LivingEntity extends Entity implements Attackable { + protected float rotOffs; public float lastHurt; public boolean jumping; - public float xxa; @@ -206,7 +206,7 @@ index e21e549e8102477aae599487acc6dd39616d6c26..30ffb90dda6c95c6f3bc42d1b9747ace protected int lerpSteps; protected double lerpX; protected double lerpY; -@@ -325,7 +325,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -323,7 +323,7 @@ public abstract class LivingEntity extends Entity implements Attackable { this.lastClimbablePos = Optional.empty(); this.activeLocationDependentEnchantments = new EnumMap(EquipmentSlot.class); this.appliedScale = 1.0F; @@ -215,7 +215,7 @@ index e21e549e8102477aae599487acc6dd39616d6c26..30ffb90dda6c95c6f3bc42d1b9747ace this.craftAttributes = new CraftAttributeMap(this.attributes); // CraftBukkit // CraftBukkit - setHealth(getMaxHealth()) inlined and simplified to skip the instanceof check for EntityPlayer, as getBukkitEntity() is not initialized in constructor this.entityData.set(LivingEntity.DATA_HEALTH_ID, (float) this.getAttribute(Attributes.MAX_HEALTH).getValue()); -@@ -375,6 +375,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -373,6 +373,7 @@ public abstract class LivingEntity extends Entity implements Attackable { public static AttributeSupplier.Builder createLivingAttributes() { return AttributeSupplier.builder().add(Attributes.MAX_HEALTH).add(Attributes.KNOCKBACK_RESISTANCE).add(Attributes.MOVEMENT_SPEED).add(Attributes.ARMOR).add(Attributes.ARMOR_TOUGHNESS).add(Attributes.MAX_ABSORPTION).add(Attributes.STEP_HEIGHT).add(Attributes.SCALE).add(Attributes.GRAVITY).add(Attributes.SAFE_FALL_DISTANCE).add(Attributes.FALL_DAMAGE_MULTIPLIER).add(Attributes.JUMP_STRENGTH).add(Attributes.OXYGEN_BONUS).add(Attributes.BURNING_TIME).add(Attributes.EXPLOSION_KNOCKBACK_RESISTANCE).add(Attributes.WATER_MOVEMENT_EFFICIENCY).add(Attributes.MOVEMENT_EFFICIENCY).add(Attributes.ATTACK_KNOCKBACK); } @@ -223,7 +223,7 @@ index e21e549e8102477aae599487acc6dd39616d6c26..30ffb90dda6c95c6f3bc42d1b9747ace @Override protected void checkFallDamage(double heightDifference, boolean onGround, BlockState state, BlockPos landedPosition) { -@@ -3719,8 +3720,10 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -3730,8 +3731,10 @@ public abstract class LivingEntity extends Entity implements Attackable { this.pushEntities(); gameprofilerfiller.pop(); // Paper start - Add EntityMoveEvent @@ -236,7 +236,7 @@ index e21e549e8102477aae599487acc6dd39616d6c26..30ffb90dda6c95c6f3bc42d1b9747ace 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()); -@@ -3730,6 +3733,21 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -3741,6 +3744,21 @@ 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()); } } @@ -259,10 +259,10 @@ index e21e549e8102477aae599487acc6dd39616d6c26..30ffb90dda6c95c6f3bc42d1b9747ace // Paper end - Add EntityMoveEvent world = this.level(); diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java -index 237eed7259f0cedf5b96ea54c195c3359d286064..6502676a94ebb663b6126a21896cda456066d55b 100644 +index 8ebe26c46db485ee0bdf64a313681d465051f436..b57c362e67d9724fc387d3aa5b8547aef648fe91 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java -@@ -163,8 +163,8 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab +@@ -159,8 +159,8 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab this.restrictRadius = -1.0F; this.goalSelector = new GoalSelector(); this.targetSelector = new GoalSelector(); @@ -282,7 +282,7 @@ index 237eed7259f0cedf5b96ea54c195c3359d286064..6502676a94ebb663b6126a21896cda45 } public boolean isWithinRestriction() { -@@ -1819,4 +1819,58 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab +@@ -1822,4 +1822,58 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab public float[] getArmorDropChances() { return this.armorDropChances; } @@ -342,7 +342,7 @@ index 237eed7259f0cedf5b96ea54c195c3359d286064..6502676a94ebb663b6126a21896cda45 + // Purpur end } diff --git a/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeMap.java b/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeMap.java -index 31aa4221de653f0695b21d438964bae20cffad07..861591694785a6ff16f839fa91781791c275de14 100644 +index b4cfae23709b7c3aed28317846e37c9311c948c1..236485c0c9706d5561f8bc950b20411ae628ca96 100644 --- a/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeMap.java +++ b/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeMap.java @@ -24,15 +24,22 @@ public class AttributeMap { @@ -379,10 +379,10 @@ index 31aa4221de653f0695b21d438964bae20cffad07..861591694785a6ff16f839fa91781791 diff --git a/src/main/java/net/minecraft/world/entity/ai/attributes/DefaultAttributes.java b/src/main/java/net/minecraft/world/entity/ai/attributes/DefaultAttributes.java -index 386f9bca728055f7b75fb690b307ff4510068105..157fe8979c780300b6f72cbaa17729031e3b386d 100644 +index c76438d5ce2330eca16dc0b381f97e9506f84aef..b37b82f3313e51d187d76452624b386c8bdbbf58 100644 --- a/src/main/java/net/minecraft/world/entity/ai/attributes/DefaultAttributes.java +++ b/src/main/java/net/minecraft/world/entity/ai/attributes/DefaultAttributes.java -@@ -130,7 +130,7 @@ public class DefaultAttributes { +@@ -131,7 +131,7 @@ public class DefaultAttributes { .put(EntityType.OCELOT, Ocelot.createAttributes().build()) .put(EntityType.PANDA, Panda.createAttributes().build()) .put(EntityType.PARROT, Parrot.createAttributes().build()) @@ -582,10 +582,10 @@ index 9aedc62b1766f6a7db4da7eba55167d21d698791..9708ed3e00059fdf5d1d60e0c607d0ab double d = this.wantedX - this.fish.getX(); double e = this.wantedY - this.fish.getY(); diff --git a/src/main/java/net/minecraft/world/entity/animal/Bee.java b/src/main/java/net/minecraft/world/entity/animal/Bee.java -index 42276acfeadec6e7aa9a91d3f446f4fedb04829d..cf095cf77724c3bbf4c6f867449d27d4638e3c9c 100644 +index 0bafe14342c1acce131ad34717c18aed3718deed..91825f18da8f95d84b9fe6de39e2d519b11b684b 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Bee.java +++ b/src/main/java/net/minecraft/world/entity/animal/Bee.java -@@ -150,6 +150,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { +@@ -154,6 +154,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { public Bee(EntityType type, Level world) { super(type, world); this.remainingCooldownBeforeLocatingNewFlower = Mth.nextInt(this.random, 20, 60); @@ -593,7 +593,7 @@ index 42276acfeadec6e7aa9a91d3f446f4fedb04829d..cf095cf77724c3bbf4c6f867449d27d4 // Paper start - Fix MC-167279 class BeeFlyingMoveControl extends FlyingMoveControl { public BeeFlyingMoveControl(final Mob entity, final int maxPitchChange, final boolean noGravity) { -@@ -158,11 +159,24 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { +@@ -162,11 +163,24 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { @Override public void tick() { @@ -618,7 +618,7 @@ index 42276acfeadec6e7aa9a91d3f446f4fedb04829d..cf095cf77724c3bbf4c6f867449d27d4 } this.moveControl = new BeeFlyingMoveControl(this, 20, true); // Paper end - Fix MC-167279 -@@ -174,6 +188,40 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { +@@ -178,6 +192,40 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { this.setPathfindingMalus(PathType.FENCE, -1.0F); } @@ -659,7 +659,7 @@ index 42276acfeadec6e7aa9a91d3f446f4fedb04829d..cf095cf77724c3bbf4c6f867449d27d4 @Override protected void defineSynchedData(SynchedEntityData.Builder builder) { super.defineSynchedData(builder); -@@ -188,6 +236,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { +@@ -192,6 +240,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { @Override protected void registerGoals() { @@ -667,7 +667,7 @@ index 42276acfeadec6e7aa9a91d3f446f4fedb04829d..cf095cf77724c3bbf4c6f867449d27d4 this.goalSelector.addGoal(0, new Bee.BeeAttackGoal(this, 1.399999976158142D, true)); this.goalSelector.addGoal(1, new Bee.BeeEnterHiveGoal()); this.goalSelector.addGoal(2, new BreedGoal(this, 1.0D)); -@@ -207,6 +256,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { +@@ -211,6 +260,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { this.goalSelector.addGoal(7, new Bee.BeeGrowCropGoal()); this.goalSelector.addGoal(8, new Bee.BeeWanderGoal()); this.goalSelector.addGoal(9, new FloatGoal(this)); @@ -675,8 +675,8 @@ index 42276acfeadec6e7aa9a91d3f446f4fedb04829d..cf095cf77724c3bbf4c6f867449d27d4 this.targetSelector.addGoal(1, (new Bee.BeeHurtByOtherGoal(this)).setAlertOthers(new Class[0])); this.targetSelector.addGoal(2, new Bee.BeeBecomeAngryTargetGoal(this)); this.targetSelector.addGoal(3, new ResetUniversalAngerTargetGoal<>(this, true)); -@@ -701,16 +751,16 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { - this.hivePos = pos; +@@ -738,16 +788,16 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { + return state.is(BlockTags.BEE_ATTRACTIVE) ? ((Boolean) state.getValueOrElse(BlockStateProperties.WATERLOGGED, false) ? false : (state.is(Blocks.SUNFLOWER) ? state.getValue(DoublePlantBlock.HALF) == DoubleBlockHalf.UPPER : true)) : false; } - private class BeeLookControl extends LookControl { @@ -696,7 +696,7 @@ index 42276acfeadec6e7aa9a91d3f446f4fedb04829d..cf095cf77724c3bbf4c6f867449d27d4 } diff --git a/src/main/java/net/minecraft/world/entity/animal/Cat.java b/src/main/java/net/minecraft/world/entity/animal/Cat.java -index 471d5727b964922d8e898be9e1d5c30f9d3bac97..014813371d8699dae7595464e0db85438dde6d8b 100644 +index 989b7be74eaeba7f40eac87c7ee7f252cb0c05c9..e9b6816c34a58b374f25e68d942c5ecc05a9ae78 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Cat.java +++ b/src/main/java/net/minecraft/world/entity/animal/Cat.java @@ -100,12 +100,38 @@ public class Cat extends TamableAnimal implements VariantHolder(this, Rabbit.class, false, (TargetingConditions.Selector) null)); this.targetSelector.addGoal(1, new NonTameRandomTargetGoal<>(this, Turtle.class, false, Turtle.BABY_ON_LAND_SELECTOR)); } -@@ -376,6 +403,7 @@ public class Cat extends TamableAnimal implements VariantHolder { @@ -1145,10 +1145,10 @@ index e07b79ef172095c1800c88342b3ac8dc7703aea2..9d82fec6f5969816095dbd5a11325c79 float f1 = 1.0F + (this.random.nextFloat() - this.random.nextFloat()) * 0.2F; diff --git a/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java b/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java -index eea02ea0d99425a60575f5fa729782494d579080..ba8d47111cf80c8e9a0b47793f125ca91f5f906e 100644 +index b04532aa04aec6ebbff74d64abb73189c2e12016..7518f24e564a68380e46bcefc6cc5b42c0e282d6 100644 --- a/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java +++ b/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java -@@ -65,6 +65,23 @@ public class MushroomCow extends Cow implements Shearable, VariantHolder optional = this.getEffectsFromItemStack(itemstack); - - if (optional.isEmpty()) { -- return InteractionResult.PASS; -+ return tryRide(player, hand); // Purpur - } - - itemstack.consume(1, player); diff --git a/src/main/java/net/minecraft/world/entity/animal/Ocelot.java b/src/main/java/net/minecraft/world/entity/animal/Ocelot.java index 0554ee499c452db6c1e6852f5022b1f197adb024..fe6a22459539dd794be653a9692bb1a5b0a5a512 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Ocelot.java @@ -1332,10 +1323,10 @@ index be753557d7ebd6f1e82b1bdb6d60ecc450f72eec..c87b2c8d8bda77027f980da51bdbd8aa } } diff --git a/src/main/java/net/minecraft/world/entity/animal/Parrot.java b/src/main/java/net/minecraft/world/entity/animal/Parrot.java -index 8883894da73c7d5975a8826d23ee7f542db98b0b..e823715e1caa59505aae257b19d09e8717fb754e 100644 +index a2f0b79599799ad2aa85aff821d8ac76a8e650bd..2bc7e85712c3d81ec84c46b6223a0fa465f66922 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Parrot.java +++ b/src/main/java/net/minecraft/world/entity/animal/Parrot.java -@@ -126,12 +126,68 @@ public class Parrot extends ShoulderRidingEntity implements VariantHolder type, Level world) { super(type, world); @@ -1405,7 +1396,7 @@ index 8883894da73c7d5975a8826d23ee7f542db98b0b..e823715e1caa59505aae257b19d09e87 @Nullable @Override public SpawnGroupData finalizeSpawn(ServerLevelAccessor world, DifficultyInstance difficulty, EntitySpawnReason spawnReason, @Nullable SpawnGroupData entityData) { -@@ -150,8 +206,10 @@ public class Parrot extends ShoulderRidingEntity implements VariantHolder { @@ -1636,7 +1627,7 @@ index 8cc6022507c97af62fb2b4455198bc35744137c9..b1a7e7d708aaed3d2dbfe51887f1f918 + // Purpur end float f = 0.3F; - if (this.horizontalCollision || this.moveControl.hasWanted() && this.moveControl.getWantedY() > this.getY() + 0.5D) { + if (this.moveControl.getSpeedModifier() <= 0.6D) { @@ -188,6 +243,12 @@ public class Rabbit extends Animal implements VariantHolder { @Override @@ -1667,7 +1658,7 @@ index 8cc6022507c97af62fb2b4455198bc35744137c9..b1a7e7d708aaed3d2dbfe51887f1f918 + public void vanillaTick() { // Purpur if (this.rabbit.onGround() && !this.rabbit.jumping && !((Rabbit.RabbitJumpControl) this.rabbit.jumpControl).wantJump()) { this.rabbit.setSpeedModifier(0.0D); - } else if (this.hasWanted()) { + } else if (this.hasWanted() || this.operation == MoveControl.Operation.JUMPING) { this.rabbit.setSpeedModifier(this.nextJumpSpeed); } @@ -1677,10 +1668,10 @@ index 8cc6022507c97af62fb2b4455198bc35744137c9..b1a7e7d708aaed3d2dbfe51887f1f918 @Override diff --git a/src/main/java/net/minecraft/world/entity/animal/Salmon.java b/src/main/java/net/minecraft/world/entity/animal/Salmon.java -index 661997c39df777b6e332f0a5710e7f63a116a499..18e5d9787590dbb2c78087326652558565a6b1f4 100644 +index 500259e6f297276fb3d6943c2bf88c844d4ec7e4..93c43963edebee4bd75fa35000ae39ed62a5ffe7 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Salmon.java +++ b/src/main/java/net/minecraft/world/entity/animal/Salmon.java -@@ -32,6 +32,18 @@ public class Salmon extends AbstractSchoolingFish implements VariantHolder brainProvider() { return Brain.provider(Allay.MEMORY_TYPES, Allay.SENSOR_TYPES); -@@ -225,7 +260,7 @@ public class Allay extends PathfinderMob implements InventoryCarrier, VibrationS +@@ -229,7 +264,7 @@ public class Allay extends PathfinderMob implements InventoryCarrier, VibrationS ProfilerFiller gameprofilerfiller = Profiler.get(); gameprofilerfiller.push("allayBrain"); @@ -2194,7 +2185,7 @@ index f3c884ab9c09f04dd01cabf2ee9de3b5b620563d..3de689deceada1ccc06b9f6d2bb9ba91 public void addAdditionalSaveData(CompoundTag nbt) { super.addAdditionalSaveData(nbt); diff --git a/src/main/java/net/minecraft/world/entity/animal/frog/Frog.java b/src/main/java/net/minecraft/world/entity/animal/frog/Frog.java -index 3461c7150fc44ee608169aa993f6ff44d4c978be..066006dc4fcdd03113242f3fa4bc8dc7b4add81a 100644 +index db91b8018591fe248efda417fcde7fd2071c4cb6..4d246f463acac6ec92915792ddcecb69fa79a8d9 100644 --- a/src/main/java/net/minecraft/world/entity/animal/frog/Frog.java +++ b/src/main/java/net/minecraft/world/entity/animal/frog/Frog.java @@ -106,6 +106,8 @@ public class Frog extends Animal implements VariantHolder> { @@ -2572,7 +2563,7 @@ index 7d0197447990bb79b85a4f1529c3ac3eefb03c84..aff8a1c406ef20779b51fc6daee15ccb @Override protected SoundEvent getAmbientSound() { diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/TraderLlama.java b/src/main/java/net/minecraft/world/entity/animal/horse/TraderLlama.java -index 7b43fcf86984cc200f34c189e7a547996416f379..ff2a33a256644a88869af3d14cdf39ae0c486593 100644 +index 53a8d59681809da931d11ff76c202f950993a142..0bdc132146189364aa08051424a36897ecd43c6e 100644 --- a/src/main/java/net/minecraft/world/entity/animal/horse/TraderLlama.java +++ b/src/main/java/net/minecraft/world/entity/animal/horse/TraderLlama.java @@ -33,6 +33,28 @@ public class TraderLlama extends Llama { @@ -2682,7 +2673,7 @@ index 58f303ce22cba0840a577b09ec5c32b13717fa15..a8830f8434d7c9d1a15ddd403d1ea1db protected void defineSynchedData(SynchedEntityData.Builder builder) { } diff --git a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java -index 2df8bf818345246cc1f88b93e4a3b62e61772efb..3a3106bd26947e8851d672a1a5c45c58f5c7f179 100644 +index d5fc74dbc2c5f6b65fee46e7797b151144c8fd41..c19e00798452ec257f4881b86557a30b4d60bb80 100644 --- a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java +++ b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java @@ -108,6 +108,7 @@ public class EnderDragon extends Mob implements Enemy { @@ -2836,7 +2827,7 @@ index 2df8bf818345246cc1f88b93e4a3b62e61772efb..3a3106bd26947e8851d672a1a5c45c58 this.dragonFight.updateDragon(this); } diff --git a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java -index d62c0d3c2bd5df5ee908bdcfdffaae9ce780810f..754a87c9c7595a4bedf784fbbb6d62b1d0bca756 100644 +index 2ce65ef77e4b28e1fd5ac7bd6a304cc115b8aca2..628e72a4b5df55509b481f33ee2b0942681064af 100644 --- a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java +++ b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java @@ -86,16 +86,30 @@ public class WitherBoss extends Monster implements RangedAttackMob { @@ -2871,7 +2862,7 @@ index d62c0d3c2bd5df5ee908bdcfdffaae9ce780810f..754a87c9c7595a4bedf784fbbb6d62b1 this.setHealth(this.getMaxHealth()); this.xpReward = 50; } -@@ -110,13 +124,114 @@ public class WitherBoss extends Monster implements RangedAttackMob { +@@ -109,13 +123,114 @@ public class WitherBoss extends Monster implements RangedAttackMob { return navigationflying; } @@ -2986,7 +2977,7 @@ index d62c0d3c2bd5df5ee908bdcfdffaae9ce780810f..754a87c9c7595a4bedf784fbbb6d62b1 this.targetSelector.addGoal(1, new HurtByTargetGoal(this, new Class[0])); this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, LivingEntity.class, 0, false, false, WitherBoss.LIVING_ENTITY_SELECTOR)); } -@@ -268,6 +383,15 @@ public class WitherBoss extends Monster implements RangedAttackMob { +@@ -267,6 +382,15 @@ public class WitherBoss extends Monster implements RangedAttackMob { @Override protected void customServerAiStep(ServerLevel world) { @@ -3002,7 +2993,7 @@ index d62c0d3c2bd5df5ee908bdcfdffaae9ce780810f..754a87c9c7595a4bedf784fbbb6d62b1 int i; if (this.getInvulnerableTicks() > 0) { -@@ -586,11 +710,11 @@ public class WitherBoss extends Monster implements RangedAttackMob { +@@ -585,11 +709,11 @@ public class WitherBoss extends Monster implements RangedAttackMob { } public int getAlternativeTarget(int headIndex) { @@ -3017,10 +3008,10 @@ index d62c0d3c2bd5df5ee908bdcfdffaae9ce780810f..754a87c9c7595a4bedf784fbbb6d62b1 public boolean isPowered() { diff --git a/src/main/java/net/minecraft/world/entity/monster/AbstractSkeleton.java b/src/main/java/net/minecraft/world/entity/monster/AbstractSkeleton.java -index 32670a3cb4b54b66d655197e3fde834d2b2b6d34..cf8422f7b9234a16f4537dfd212c55ded92cb1aa 100644 +index 90b6ed81dcfd4021c7e9509da5e8725034fa07e5..617d06f7757ffbdd3eea14f7cbd881eaac075cc3 100644 --- a/src/main/java/net/minecraft/world/entity/monster/AbstractSkeleton.java +++ b/src/main/java/net/minecraft/world/entity/monster/AbstractSkeleton.java -@@ -72,12 +72,14 @@ public abstract class AbstractSkeleton extends Monster implements RangedAttackMo +@@ -74,12 +74,14 @@ public abstract class AbstractSkeleton extends Monster implements RangedAttackMo @Override protected void registerGoals() { @@ -3286,10 +3277,10 @@ index 1906dfc22af208d6e801ad4a8f2f9e9702432691..7e5f447c23c817bf89508dc4049df2b6 } // Paper end - CreeperIgniteEvent diff --git a/src/main/java/net/minecraft/world/entity/monster/Drowned.java b/src/main/java/net/minecraft/world/entity/monster/Drowned.java -index 2e73917ce9270de7483bb1d4e9bf312a31ec9b1e..1a0eace05794a6f3659d4cdffcc568fa99c0bf5f 100644 +index c6c86913c0a48501a9109a3838a3e56685d16d79..8c80a6fd45a2def82e8a28f0b6d648ffb6e06d5b 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Drowned.java +++ b/src/main/java/net/minecraft/world/entity/monster/Drowned.java -@@ -72,6 +72,23 @@ public class Drowned extends Zombie implements RangedAttackMob { +@@ -75,6 +75,23 @@ public class Drowned extends Zombie implements RangedAttackMob { return Zombie.createAttributes().add(Attributes.STEP_HEIGHT, 1.0); } @@ -3313,7 +3304,7 @@ index 2e73917ce9270de7483bb1d4e9bf312a31ec9b1e..1a0eace05794a6f3659d4cdffcc568fa @Override protected void addBehaviourGoals() { this.goalSelector.addGoal(1, new Drowned.DrownedGoToWaterGoal(this, 1.0)); -@@ -396,7 +413,7 @@ public class Drowned extends Zombie implements RangedAttackMob { +@@ -398,7 +415,7 @@ public class Drowned extends Zombie implements RangedAttackMob { } } @@ -3322,7 +3313,7 @@ index 2e73917ce9270de7483bb1d4e9bf312a31ec9b1e..1a0eace05794a6f3659d4cdffcc568fa private final Drowned drowned; public DrownedMoveControl(Drowned drowned) { -@@ -405,7 +422,7 @@ public class Drowned extends Zombie implements RangedAttackMob { +@@ -407,7 +424,7 @@ public class Drowned extends Zombie implements RangedAttackMob { } @Override @@ -3331,7 +3322,7 @@ index 2e73917ce9270de7483bb1d4e9bf312a31ec9b1e..1a0eace05794a6f3659d4cdffcc568fa LivingEntity livingEntity = this.drowned.getTarget(); if (this.drowned.wantsToSwim() && this.drowned.isInWater()) { if (livingEntity != null && livingEntity.getY() > this.drowned.getY() || this.drowned.searchingForLand) { -@@ -425,7 +442,7 @@ public class Drowned extends Zombie implements RangedAttackMob { +@@ -427,7 +444,7 @@ public class Drowned extends Zombie implements RangedAttackMob { float h = (float)(Mth.atan2(f, d) * 180.0F / (float)Math.PI) - 90.0F; this.drowned.setYRot(this.rotlerp(this.drowned.getYRot(), h, 90.0F)); this.drowned.yBodyRot = this.drowned.getYRot(); @@ -3340,7 +3331,7 @@ index 2e73917ce9270de7483bb1d4e9bf312a31ec9b1e..1a0eace05794a6f3659d4cdffcc568fa float j = Mth.lerp(0.125F, this.drowned.getSpeed(), i); this.drowned.setSpeed(j); this.drowned.setDeltaMovement(this.drowned.getDeltaMovement().add((double)j * d * 0.005, (double)j * e * 0.1, (double)j * f * 0.005)); -@@ -434,7 +451,7 @@ public class Drowned extends Zombie implements RangedAttackMob { +@@ -436,7 +453,7 @@ public class Drowned extends Zombie implements RangedAttackMob { this.drowned.setDeltaMovement(this.drowned.getDeltaMovement().add(0.0, -0.008, 0.0)); } @@ -3373,10 +3364,10 @@ index 378694a38115c012978e1fea59d049d1ebd04110..4364ac531826524fc3c099b9900406b2 return Guardian.createAttributes().add(Attributes.MOVEMENT_SPEED, 0.30000001192092896D).add(Attributes.ATTACK_DAMAGE, 8.0D).add(Attributes.MAX_HEALTH, 80.0D); } diff --git a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java -index c7153cfec847fca4ce5d9ec729628aed5bed11be..9b0004497fdd8980ec571536ced9de947b3505b0 100644 +index 4e4dab5bc202f6f421dcff98f0e36e8e70378b49..f0eca1f6a232792d3e2fec2e1a6ac3689f4e5421 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java +++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java -@@ -95,9 +95,27 @@ public class EnderMan extends Monster implements NeutralMob { +@@ -94,9 +94,27 @@ public class EnderMan extends Monster implements NeutralMob { this.setPathfindingMalus(PathType.WATER, -1.0F); } @@ -3404,7 +3395,7 @@ index c7153cfec847fca4ce5d9ec729628aed5bed11be..9b0004497fdd8980ec571536ced9de94 this.goalSelector.addGoal(1, new EnderMan.EndermanFreezeWhenLookedAt(this)); this.goalSelector.addGoal(2, new MeleeAttackGoal(this, 1.0D, false)); this.goalSelector.addGoal(7, new WaterAvoidingRandomStrollGoal(this, 1.0D, 0.0F)); -@@ -105,6 +123,7 @@ public class EnderMan extends Monster implements NeutralMob { +@@ -104,6 +122,7 @@ public class EnderMan extends Monster implements NeutralMob { this.goalSelector.addGoal(8, new RandomLookAroundGoal(this)); this.goalSelector.addGoal(10, new EnderMan.EndermanLeaveBlockGoal(this)); this.goalSelector.addGoal(11, new EnderMan.EndermanTakeBlockGoal(this)); @@ -3412,7 +3403,7 @@ index c7153cfec847fca4ce5d9ec729628aed5bed11be..9b0004497fdd8980ec571536ced9de94 this.targetSelector.addGoal(1, new EnderMan.EndermanLookForPlayerGoal(this, this::isAngryAt)); this.targetSelector.addGoal(2, new HurtByTargetGoal(this, new Class[0])); this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, Endermite.class, true, false)); -@@ -268,7 +287,7 @@ public class EnderMan extends Monster implements NeutralMob { +@@ -267,7 +286,7 @@ public class EnderMan extends Monster implements NeutralMob { @Override protected void customServerAiStep(ServerLevel world) { @@ -3421,7 +3412,7 @@ index c7153cfec847fca4ce5d9ec729628aed5bed11be..9b0004497fdd8980ec571536ced9de94 float f = this.getLightLevelDependentMagicValue(); if (f > 0.5F && world.canSeeSky(this.blockPosition()) && this.random.nextFloat() * 30.0F < (f - 0.4F) * 2.0F && this.tryEscape(com.destroystokyo.paper.event.entity.EndermanEscapeEvent.Reason.RUNAWAY)) { // Paper - EndermanEscapeEvent -@@ -389,6 +408,7 @@ public class EnderMan extends Monster implements NeutralMob { +@@ -388,6 +407,7 @@ public class EnderMan extends Monster implements NeutralMob { public boolean hurtServer(ServerLevel world, DamageSource source, float amount) { if (this.isInvulnerableTo(world, source)) { return false; @@ -3468,7 +3459,7 @@ index 534e98dd7291e09dee1d0f77cbf221b15708590f..e9c0082d1c77435ce61ac40e0a1fd0d0 this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true)); } diff --git a/src/main/java/net/minecraft/world/entity/monster/Evoker.java b/src/main/java/net/minecraft/world/entity/monster/Evoker.java -index 6592baa53ecb4e364d1c1b6f64178fc86c59a982..d1bc1ee90e18639f94b6e6a0d9e680af7396ffd5 100644 +index 14f23c9a248760a57b3d6fe4f2824a4a456a6d37..917062f080f9bf0239c440647efe656cc1e5facf 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Evoker.java +++ b/src/main/java/net/minecraft/world/entity/monster/Evoker.java @@ -53,10 +53,28 @@ public class Evoker extends SpellcasterIllager { @@ -3499,7 +3490,7 @@ index 6592baa53ecb4e364d1c1b6f64178fc86c59a982..d1bc1ee90e18639f94b6e6a0d9e680af + this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur this.goalSelector.addGoal(1, new Evoker.EvokerCastingSpellGoal()); this.goalSelector.addGoal(2, new AvoidEntityGoal<>(this, Player.class, 8.0F, 0.6D, 1.0D)); - this.goalSelector.addGoal(3, new AvoidEntityGoal<>(this, Creaking.class, 8.0F, 1.0D, 1.2D)); + this.goalSelector.addGoal(3, new AvoidEntityGoal<>(this, Creaking.class, 8.0F, 0.6D, 1.0D)); @@ -66,6 +84,7 @@ public class Evoker extends SpellcasterIllager { this.goalSelector.addGoal(8, new RandomStrollGoal(this, 0.6D)); this.goalSelector.addGoal(9, new LookAtPlayerGoal(this, Player.class, 3.0F, 1.0F)); @@ -3827,11 +3818,11 @@ index ae710c3fffc7840a9ff2cbc5cdacef8a2e248253..e74dbe18c40c9e6e6d2d2136d5b3a41b @Override diff --git a/src/main/java/net/minecraft/world/entity/monster/Phantom.java b/src/main/java/net/minecraft/world/entity/monster/Phantom.java -index 150fd890ac65097b5434fd88e8d2b24a89dca79a..3a30a4ed4c69dd786df4f8635c9cca17b85abed6 100644 +index 4ff75412452649ebf106ef591cb97dc7ac8175e7..cdf8b0773c3852d9ad810bba2f0a64c5d81c9d35 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Phantom.java +++ b/src/main/java/net/minecraft/world/entity/monster/Phantom.java @@ -60,6 +60,64 @@ public class Phantom extends FlyingMob implements Enemy { - this.lookControl = new Phantom.PhantomLookControl(this, this); + this.lookControl = new Phantom.PhantomLookControl(this); } + // Purpur start @@ -3949,11 +3940,11 @@ index 150fd890ac65097b5434fd88e8d2b24a89dca79a..3a30a4ed4c69dd786df4f8635c9cca17 } } -- private class PhantomLookControl extends LookControl { -+ private class PhantomLookControl extends org.purpurmc.purpur.controller.LookControllerWASD { // Purpur +- private static class PhantomLookControl extends LookControl { ++ private static class PhantomLookControl extends org.purpurmc.purpur.controller.LookControllerWASD { // Purpur - public PhantomLookControl(final Phantom entity, final Mob phantom) { - super(phantom); + public PhantomLookControl(Mob entity) { + super(entity); } + // Purpur start @@ -3969,10 +3960,10 @@ index 150fd890ac65097b5434fd88e8d2b24a89dca79a..3a30a4ed4c69dd786df4f8635c9cca17 private class PhantomBodyRotationControl extends BodyRotationControl { diff --git a/src/main/java/net/minecraft/world/entity/monster/Pillager.java b/src/main/java/net/minecraft/world/entity/monster/Pillager.java -index 3e8631c7bd1e7591051ca21c6ae7acd87d3c7529..2a58fda916c96307c3fafb5e6f445f28b327e761 100644 +index 91edf8767541982b8cd1be83c33a7b287ffb62fe..4e331b8dbd2457cff672bcf3a5fa13ec838a897d 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Pillager.java +++ b/src/main/java/net/minecraft/world/entity/monster/Pillager.java -@@ -64,16 +64,35 @@ public class Pillager extends AbstractIllager implements CrossbowAttackMob, Inve +@@ -67,16 +67,35 @@ public class Pillager extends AbstractIllager implements CrossbowAttackMob, Inve super(type, world); } @@ -3999,7 +3990,7 @@ index 3e8631c7bd1e7591051ca21c6ae7acd87d3c7529..2a58fda916c96307c3fafb5e6f445f28 this.goalSelector.addGoal(0, new FloatGoal(this)); + this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur this.goalSelector.addGoal(1, new AvoidEntityGoal<>(this, Creaking.class, 8.0F, 1.0D, 1.2D)); - this.goalSelector.addGoal(2, new Raider.HoldGroundAttackGoal(this, 10.0F)); // Paper - decomp fix + this.goalSelector.addGoal(2, new Raider.HoldGroundAttackGoal(this, 10.0F)); this.goalSelector.addGoal(3, new RangedCrossbowAttackGoal<>(this, 1.0D, 8.0F)); this.goalSelector.addGoal(8, new RandomStrollGoal(this, 0.6D)); this.goalSelector.addGoal(9, new LookAtPlayerGoal(this, Player.class, 15.0F, 1.0F)); @@ -4009,10 +4000,10 @@ index 3e8631c7bd1e7591051ca21c6ae7acd87d3c7529..2a58fda916c96307c3fafb5e6f445f28 this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true)); this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, AbstractVillager.class, false)); diff --git a/src/main/java/net/minecraft/world/entity/monster/Ravager.java b/src/main/java/net/minecraft/world/entity/monster/Ravager.java -index c96fbfe448b3e7b722a8db0e1688276776abd94e..ee55507f40425dcdd047d325a74818e158bcc626 100644 +index cfc28828a5b81563a826ae6045553e7350f67986..3755ffd6479ddc384bae350042d3f728bab33146 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Ravager.java +++ b/src/main/java/net/minecraft/world/entity/monster/Ravager.java -@@ -77,15 +77,40 @@ public class Ravager extends Raider { +@@ -75,14 +75,39 @@ public class Ravager extends Raider { this.setPathfindingMalus(PathType.LEAVES, 0.0F); } @@ -4044,7 +4035,6 @@ index c96fbfe448b3e7b722a8db0e1688276776abd94e..ee55507f40425dcdd047d325a74818e1 super.registerGoals(); this.goalSelector.addGoal(0, new FloatGoal(this)); + this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur - this.goalSelector.addGoal(3, new AvoidEntityGoal<>(this, Creaking.class, 8.0F, 1.0D, 1.2D)); this.goalSelector.addGoal(4, new MeleeAttackGoal(this, 1.0D, true)); this.goalSelector.addGoal(5, new WaterAvoidingRandomStrollGoal(this, 0.4D)); this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 6.0F)); @@ -4053,7 +4043,7 @@ index c96fbfe448b3e7b722a8db0e1688276776abd94e..ee55507f40425dcdd047d325a74818e1 this.targetSelector.addGoal(2, (new HurtByTargetGoal(this, new Class[]{Raider.class})).setAlertOthers()); this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, Player.class, true)); this.targetSelector.addGoal(4, new NearestAttackableTargetGoal<>(this, AbstractVillager.class, true, (entityliving, worldserver) -> { -@@ -138,7 +163,7 @@ public class Ravager extends Raider { +@@ -135,7 +160,7 @@ public class Ravager extends Raider { @Override public void aiStep() { super.aiStep(); @@ -4063,7 +4053,7 @@ index c96fbfe448b3e7b722a8db0e1688276776abd94e..ee55507f40425dcdd047d325a74818e1 this.getAttribute(Attributes.MOVEMENT_SPEED).setBaseValue(0.0D); } else { diff --git a/src/main/java/net/minecraft/world/entity/monster/Shulker.java b/src/main/java/net/minecraft/world/entity/monster/Shulker.java -index 6e0f2f6573ed6be9b91de960d55c269417ad8907..06696e0a5b2c6667c181b42cc05f415ffa2846d4 100644 +index 64d99b8b576212f754bd316343562b1ba7f604fa..fcb7d4e15d240e63de2cf593860381fddfeb8beb 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Shulker.java +++ b/src/main/java/net/minecraft/world/entity/monster/Shulker.java @@ -98,12 +98,31 @@ public class Shulker extends AbstractGolem implements VariantHolder type, ServerLevelAccessor world, EntitySpawnReason spawnReason, BlockPos pos, RandomSource random ) { diff --git a/src/main/java/net/minecraft/world/entity/monster/Strider.java b/src/main/java/net/minecraft/world/entity/monster/Strider.java -index 711b7eb8e9fdedbc87965828e573fe8d5c357d53..2214e3e473214a8e8340c4ded0e2c797adde0815 100644 +index 0a9246241985d2d97beb865b7163f1d2198f03b8..7d76e8120d664d537367c16cba83385425c23762 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Strider.java +++ b/src/main/java/net/minecraft/world/entity/monster/Strider.java @@ -97,6 +97,23 @@ public class Strider extends Animal implements ItemSteerable, Saddleable { @@ -4602,10 +4592,10 @@ index a03fa8a3e648532a7ffaaf523ca87c13e8af4c0a..654baff60d6afe6b9bd9479d6ac35ff7 this.targetSelector.addGoal(2, this.healRaidersGoal); this.targetSelector.addGoal(3, this.attackPlayersGoal); diff --git a/src/main/java/net/minecraft/world/entity/monster/WitherSkeleton.java b/src/main/java/net/minecraft/world/entity/monster/WitherSkeleton.java -index 37d3acda84a984bf4f1c44b3d27e2102839d3e8e..e38963f05e460b1a94c3c5d1ade99af78dcc8e6f 100644 +index 557b4e225688416132281e9b1759d46a9b775ff9..8a166bf5c90169f85d85c8a4715116850ab0a5b7 100644 --- a/src/main/java/net/minecraft/world/entity/monster/WitherSkeleton.java +++ b/src/main/java/net/minecraft/world/entity/monster/WitherSkeleton.java -@@ -33,6 +33,23 @@ public class WitherSkeleton extends AbstractSkeleton { +@@ -36,6 +36,23 @@ public class WitherSkeleton extends AbstractSkeleton { this.setPathfindingMalus(PathType.LAVA, 8.0F); } @@ -4701,7 +4691,7 @@ index a12461907278cfbfa3b1c0aa74b9f07a31768b8a..5c443a961900e6eb0d7f410ca6b7da2c } diff --git a/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java b/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java -index 18c19e4b675000aacb74344909fc104964231008..4a95f791ba167be700f982fefe6896be6a0567c2 100644 +index 30bce56a70f923b0ec77c8e3f29e435a71c71510..27e8442301e1d3a526e9f0d7e3e5aa40f385bc06 100644 --- a/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java +++ b/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java @@ -85,6 +85,23 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { @@ -4757,11 +4747,11 @@ index 03e3cbe73119ca76417d4dd192e1560bdfc373ec..aa4160892b9ba2486806b5a54bc1465a public void setPersistentAngerTarget(@Nullable UUID angryAt) { this.persistentAngerTarget = angryAt; diff --git a/src/main/java/net/minecraft/world/entity/monster/creaking/Creaking.java b/src/main/java/net/minecraft/world/entity/monster/creaking/Creaking.java -index 7b5f9284972b3a6bd8125891b23f73438e875c08..399590df6ef7ec30dddf0ecc78308a3659b2970b 100644 +index 6a7e725edece3043c8523d387e2929d5ba8932cb..d0a4df6775d79dfa5193146a1256a4569607597a 100644 --- a/src/main/java/net/minecraft/world/entity/monster/creaking/Creaking.java +++ b/src/main/java/net/minecraft/world/entity/monster/creaking/Creaking.java -@@ -63,6 +63,29 @@ public class Creaking extends Monster { - this.xpReward = 0; +@@ -106,6 +106,29 @@ public class Creaking extends Monster { + return this.getHomePos() != null; } + // Purpur start @@ -4790,12 +4780,13 @@ index 7b5f9284972b3a6bd8125891b23f73438e875c08..399590df6ef7ec30dddf0ecc78308a36 @Override protected BodyRotationControl createBodyControl() { return new Creaking.CreakingBodyRotationControl(this); -@@ -296,28 +319,28 @@ public class Creaking extends Monster { - } +@@ -575,31 +598,31 @@ public class Creaking extends Monster { + return 0.0F; } -- class CreakingLookControl extends LookControl { -+ class CreakingLookControl extends org.purpurmc.purpur.controller.LookControllerWASD { // Purpur +- private class CreakingLookControl extends LookControl { ++ private class CreakingLookControl extends org.purpurmc.purpur.controller.LookControllerWASD { // Purpur + public CreakingLookControl(final Creaking creaking) { super(creaking); } @@ -4807,11 +4798,13 @@ index 7b5f9284972b3a6bd8125891b23f73438e875c08..399590df6ef7ec30dddf0ecc78308a36 - super.tick(); + super.vanillaTick(); // Purpur } + } } -- class CreakingMoveControl extends MoveControl { -+ class CreakingMoveControl extends org.purpurmc.purpur.controller.MoveControllerWASD { // Purpur +- private class CreakingMoveControl extends MoveControl { ++ private class CreakingMoveControl extends org.purpurmc.purpur.controller.MoveControllerWASD { // Purpur + public CreakingMoveControl(final Creaking creaking) { super(creaking); } @@ -4823,8 +4816,8 @@ index 7b5f9284972b3a6bd8125891b23f73438e875c08..399590df6ef7ec30dddf0ecc78308a36 - super.tick(); + super.vanillaTick(); // Purpur } + } - } diff --git a/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java b/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java index 9c20651b74157582e60793ceba8adde2c354f2a8..e978aab6055f9365885e2412afdc44cb6c729af2 100644 --- a/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java @@ -4863,10 +4856,10 @@ index 9c20651b74157582e60793ceba8adde2c354f2a8..e978aab6055f9365885e2412afdc44cb gameprofilerfiller.pop(); HoglinAi.updateActivity(this); diff --git a/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java b/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java -index d1870bf4c01c846a721480eb6611a67db9b98d02..9a3bc9c0ad1b0af3c8196a773dd93b069ca4e92c 100644 +index 74ab50723056fef2a96dcc9e2de0e58526738011..49af4cb966dc1b72088c46eee758386b24bfed31 100644 --- a/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java +++ b/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java -@@ -96,6 +96,23 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento +@@ -99,6 +99,23 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento this.xpReward = 5; } @@ -4890,7 +4883,7 @@ index d1870bf4c01c846a721480eb6611a67db9b98d02..9a3bc9c0ad1b0af3c8196a773dd93b06 @Override public void addAdditionalSaveData(CompoundTag nbt) { super.addAdditionalSaveData(nbt); -@@ -310,7 +327,7 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento +@@ -313,7 +330,7 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento ProfilerFiller gameprofilerfiller = Profiler.get(); gameprofilerfiller.push("piglinBrain"); @@ -4936,7 +4929,7 @@ index 24eaeb93284fe1a573026b85818a93a34fd9e1ec..d7578f7d4eba9d630feb589dd2761789 profilerFiller.pop(); PiglinBruteAi.updateActivity(this); diff --git a/src/main/java/net/minecraft/world/entity/monster/warden/Warden.java b/src/main/java/net/minecraft/world/entity/monster/warden/Warden.java -index 457f9f6bf6a8e8f2e0b4246a0589e344756370d2..5a62fe9c4f0cee9e8b4a48564f76afec609335b1 100644 +index 4331ada8bed7ade7b53fd8ba000c1c1b34fa4331..cf231928bae5493b0684109c769d7da4dc36f872 100644 --- a/src/main/java/net/minecraft/world/entity/monster/warden/Warden.java +++ b/src/main/java/net/minecraft/world/entity/monster/warden/Warden.java @@ -127,8 +127,32 @@ public class Warden extends Monster implements VibrationSystem { @@ -4994,7 +4987,7 @@ index 457f9f6bf6a8e8f2e0b4246a0589e344756370d2..5a62fe9c4f0cee9e8b4a48564f76afec public static void applyDarknessAround(ServerLevel world, Vec3 pos, @Nullable Entity entity, int range) { diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java -index d9a60871bce4da7e6dc7c3c986498602c355ac04..80b6deade244d5ac2a6245fd2f3575af216a302c 100644 +index 3fd86782134a674f58ef37288c8963a4a92f685c..e6c6929901b15c5caa691bc41667a399c7453fa8 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java @@ -158,6 +158,28 @@ public class Villager extends AbstractVillager implements ReputationEventHandler @@ -5099,10 +5092,10 @@ index 1e77cce428d9e53142aaa2cf780b7f862d536eca..f39a69294317e90c8198efc0680f451a this.openTradingScreen(player, this.getDisplayName(), 1); } diff --git a/src/main/java/net/minecraft/world/entity/player/Player.java b/src/main/java/net/minecraft/world/entity/player/Player.java -index 61d412c4f1ebd55661cc3f0260468e3ac0efe0bb..21f85ffe12a6ac11a67c808e4878f9a46f01344e 100644 +index 5b8b85a295a08ae495f729c595b3a78778965342..e4d8fadd6ef32823f8581dab68567c5da9270566 100644 --- a/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java -@@ -208,6 +208,19 @@ public abstract class Player extends LivingEntity { +@@ -211,6 +211,19 @@ public abstract class Player extends LivingEntity { } // CraftBukkit end @@ -5159,7 +5152,7 @@ index 4c47b30867e30d84908abf93dbefc252bc8c3453..a1f25efb38eff32aaabe892ddbc9a604 protected void defineSynchedData(SynchedEntityData.Builder builder) { builder.define(WitherSkull.DATA_DANGEROUS, false); diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java -index ddabaed899c755925ad8618b78c33dacaf2126ac..0d835621a7af64563c86c17358632aa26ac281cd 100644 +index b25b10c24a379097233e61bcc10add841b6a7115..12c65755f85acce10c2d5359539d64498138127b 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java @@ -1306,4 +1306,27 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { @@ -6377,10 +6370,10 @@ index 0000000000000000000000000000000000000000..ba2a37dad43e238e54632975abea8ee6 +} diff --git a/src/main/java/org/purpurmc/purpur/entity/DolphinSpit.java b/src/main/java/org/purpurmc/purpur/entity/DolphinSpit.java new file mode 100644 -index 0000000000000000000000000000000000000000..89c476c740b4efb4f44c1dcd384b908626d96780 +index 0000000000000000000000000000000000000000..5a3df169da4a673d07d17f4f0f016721b9e6bf95 --- /dev/null +++ b/src/main/java/org/purpurmc/purpur/entity/DolphinSpit.java -@@ -0,0 +1,100 @@ +@@ -0,0 +1,101 @@ +package org.purpurmc.purpur.entity; + +import net.minecraft.core.particles.ParticleTypes; @@ -6436,10 +6429,11 @@ index 0000000000000000000000000000000000000000..89c476c740b4efb4f44c1dcd384b9086 + Vec3 motDouble = mot.scale(2.0); + for (int i = 0; i < 5; i++) { + ((ServerLevel) level()).sendParticles(null, ParticleTypes.BUBBLE, ++ false, true, + getX() + random.nextFloat() / 2 - 0.25F, + getY() + random.nextFloat() / 2 - 0.25F, + getZ() + random.nextFloat() / 2 - 0.25F, -+ 0, motDouble.x(), motDouble.y(), motDouble.z(), 0.1D, true); ++ 0, motDouble.x(), motDouble.y(), motDouble.z(), 0.1D); + } + + if (++ticksLived > 20) { @@ -6483,10 +6477,10 @@ index 0000000000000000000000000000000000000000..89c476c740b4efb4f44c1dcd384b9086 +} diff --git a/src/main/java/org/purpurmc/purpur/entity/PhantomFlames.java b/src/main/java/org/purpurmc/purpur/entity/PhantomFlames.java new file mode 100644 -index 0000000000000000000000000000000000000000..d7f5686fe897f3c2424b146c8e7d2862223d1eaf +index 0000000000000000000000000000000000000000..f6358e9afc6758f2b20e97b6037f6db0204a7dd5 --- /dev/null +++ b/src/main/java/org/purpurmc/purpur/entity/PhantomFlames.java -@@ -0,0 +1,122 @@ +@@ -0,0 +1,123 @@ +package org.purpurmc.purpur.entity; + +import net.minecraft.core.particles.ParticleTypes; @@ -6544,10 +6538,11 @@ index 0000000000000000000000000000000000000000..d7f5686fe897f3c2424b146c8e7d2862 + Vec3 motDouble = mot.scale(2.0); + for (int i = 0; i < 5; i++) { + ((ServerLevel) level()).sendParticles(null, ParticleTypes.FLAME, ++ false, true, + getX() + random.nextFloat() / 2 - 0.25F, + getY() + random.nextFloat() / 2 - 0.25F, + getZ() + random.nextFloat() / 2 - 0.25F, -+ 0, motDouble.x(), motDouble.y(), motDouble.z(), 0.1D, true); ++ 0, motDouble.x(), motDouble.y(), motDouble.z(), 0.1D); + } + + if (++ticksLived > 20) { diff --git a/patches/server/0010-Configurable-entity-base-attributes.patch b/patches/server/0010-Configurable-entity-base-attributes.patch index 5684aee49..25809fb7f 100644 --- a/patches/server/0010-Configurable-entity-base-attributes.patch +++ b/patches/server/0010-Configurable-entity-base-attributes.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Configurable entity base attributes diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 0e084e2dcd0294274aa42b2a15fe58bee54ff393..163af180a12bf2847d6eab87e1fa77aef7cd3550 100644 +index d6b48ad015e118ec9599110f54f462ef3a5debc3..fddc4a5e5c4f9f3552b3254fec8254774b20f9f1 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java @@ -177,7 +177,7 @@ import org.bukkit.plugin.PluginManager; @@ -18,7 +18,7 @@ index 0e084e2dcd0294274aa42b2a15fe58bee54ff393..163af180a12bf2847d6eab87e1fa77ae private static final int CURRENT_LEVEL = 2; public boolean preserveMotion = true; // Paper - Fix Entity Teleportation and cancel velocity if teleported; keep initial motion on first setPositionRotation diff --git a/src/main/java/net/minecraft/world/entity/GlowSquid.java b/src/main/java/net/minecraft/world/entity/GlowSquid.java -index 7c11b5e73d4f3c0be7c467f7522c2d974ab330f3..27aee968718af1ae78e2076ddc890114b2c9bb94 100644 +index 0e1c89923ac5dfd339e591ab19b0212ab57fde4a..5a49c44b8f18a1c16f18a4798c733f99ca4e47b7 100644 --- a/src/main/java/net/minecraft/world/entity/GlowSquid.java +++ b/src/main/java/net/minecraft/world/entity/GlowSquid.java @@ -38,6 +38,11 @@ public class GlowSquid extends Squid { @@ -34,10 +34,10 @@ index 7c11b5e73d4f3c0be7c467f7522c2d974ab330f3..27aee968718af1ae78e2076ddc890114 protected ParticleOptions getInkParticle() { return ParticleTypes.GLOW_SQUID_INK; diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 30ffb90dda6c95c6f3bc42d1b9747acef0f0f19a..1077eae6e0952d09410518a856ebece808aefef5 100644 +index 1135737e16849417df1cdcd5f3858ebb04160f06..a16c7069a2ac349a6de366229b77da9a7cec71c0 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -326,6 +326,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -324,6 +324,7 @@ public abstract class LivingEntity extends Entity implements Attackable { this.activeLocationDependentEnchantments = new EnumMap(EquipmentSlot.class); this.appliedScale = 1.0F; this.attributes = new AttributeMap(DefaultAttributes.getSupplier(type), this); // Purpur @@ -45,7 +45,7 @@ index 30ffb90dda6c95c6f3bc42d1b9747acef0f0f19a..1077eae6e0952d09410518a856ebece8 this.craftAttributes = new CraftAttributeMap(this.attributes); // CraftBukkit // CraftBukkit - setHealth(getMaxHealth()) inlined and simplified to skip the instanceof check for EntityPlayer, as getBukkitEntity() is not initialized in constructor this.entityData.set(LivingEntity.DATA_HEALTH_ID, (float) this.getAttribute(Attributes.MAX_HEALTH).getValue()); -@@ -340,6 +341,8 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -338,6 +339,8 @@ public abstract class LivingEntity extends Entity implements Attackable { this.brain = this.makeBrain(new Dynamic(dynamicopsnbt, (Tag) dynamicopsnbt.createMap((Map) ImmutableMap.of(dynamicopsnbt.createString("memories"), (Tag) dynamicopsnbt.emptyMap())))); } @@ -79,10 +79,10 @@ index 1348ec21d1ede67026897563e5c09406c9902043..656088e81781a5711521edec565f4e34 public void readAdditionalSaveData(CompoundTag nbt) { super.readAdditionalSaveData(nbt); diff --git a/src/main/java/net/minecraft/world/entity/animal/Bee.java b/src/main/java/net/minecraft/world/entity/animal/Bee.java -index cf095cf77724c3bbf4c6f867449d27d4638e3c9c..d000acd339a1967d2c448ed8d66c4f1347f797fd 100644 +index 6ae52fa7c0cb3eda4f0d7f8c7dbbf97078dd2d59..5ad7612788c4ef5cc3a6cf5f706999aa6eed4718 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Bee.java +++ b/src/main/java/net/minecraft/world/entity/animal/Bee.java -@@ -485,6 +485,12 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { +@@ -489,6 +489,12 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { return tileentitybeehive != null && tileentitybeehive.isFireNearby(); } @@ -96,7 +96,7 @@ index cf095cf77724c3bbf4c6f867449d27d4638e3c9c..d000acd339a1967d2c448ed8d66c4f13 public int getRemainingPersistentAngerTime() { return (Integer) this.entityData.get(Bee.DATA_REMAINING_ANGER_TIME); diff --git a/src/main/java/net/minecraft/world/entity/animal/Cat.java b/src/main/java/net/minecraft/world/entity/animal/Cat.java -index 014813371d8699dae7595464e0db85438dde6d8b..6c773af722ccb9e144d8858a013c120ecbbcfa4c 100644 +index e9b6816c34a58b374f25e68d942c5ecc05a9ae78..821499778e2b97e39f5d439c4a8c55a283610750 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Cat.java +++ b/src/main/java/net/minecraft/world/entity/animal/Cat.java @@ -123,6 +123,12 @@ public class Cat extends TamableAnimal implements VariantHolder { @@ -214,10 +214,10 @@ index 9d82fec6f5969816095dbd5a11325c79002dbb61..500109364b4741fc310eb22c151754a1 @Override diff --git a/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java b/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java -index ba8d47111cf80c8e9a0b47793f125ca91f5f906e..0005cd7156e46ae790d629d7a985cdace1cc5577 100644 +index 7518f24e564a68380e46bcefc6cc5b42c0e282d6..575a3f5e2c003474a4a4d09db4ba495eddad3ce7 100644 --- a/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java +++ b/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java -@@ -82,6 +82,11 @@ public class MushroomCow extends Cow implements Shearable, VariantHolder { @@ -361,10 +361,10 @@ index b1a7e7d708aaed3d2dbfe51887f1f9189c690ca4..6f3fdf72dd4e8d7399b205818c863e75 @Override diff --git a/src/main/java/net/minecraft/world/entity/animal/Salmon.java b/src/main/java/net/minecraft/world/entity/animal/Salmon.java -index 18e5d9787590dbb2c78087326652558565a6b1f4..9ec3479b0db1f42493db127081e341fa5acc8e41 100644 +index 93c43963edebee4bd75fa35000ae39ed62a5ffe7..1295003dfceb585ef23705c17862efb3feff3868 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Salmon.java +++ b/src/main/java/net/minecraft/world/entity/animal/Salmon.java -@@ -44,6 +44,11 @@ public class Salmon extends AbstractSchoolingFish implements VariantHolder type, ServerLevelAccessor world, EntitySpawnReason spawnReason, BlockPos pos, RandomSource random ) { diff --git a/src/main/java/net/minecraft/world/entity/monster/Strider.java b/src/main/java/net/minecraft/world/entity/monster/Strider.java -index 2214e3e473214a8e8340c4ded0e2c797adde0815..6a45a62c578f033558c26935681f7de74dd98bac 100644 +index 7d76e8120d664d537367c16cba83385425c23762..1ea797619359cca106aafa0b1e14a5cb00af582a 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Strider.java +++ b/src/main/java/net/minecraft/world/entity/monster/Strider.java @@ -114,6 +114,12 @@ public class Strider extends Animal implements ItemSteerable, Saddleable { @@ -1444,10 +1444,10 @@ index 654baff60d6afe6b9bd9479d6ac35ff773d1bf2e..790e36ae4bd1d6290e16ec579127f801 protected void registerGoals() { super.registerGoals(); diff --git a/src/main/java/net/minecraft/world/entity/monster/WitherSkeleton.java b/src/main/java/net/minecraft/world/entity/monster/WitherSkeleton.java -index e38963f05e460b1a94c3c5d1ade99af78dcc8e6f..89ed0d044426aa0415f5cb4eb3f02342fcdddc7d 100644 +index 8a166bf5c90169f85d85c8a4715116850ab0a5b7..b0054b998e5494d64de538450daae432416c4d55 100644 --- a/src/main/java/net/minecraft/world/entity/monster/WitherSkeleton.java +++ b/src/main/java/net/minecraft/world/entity/monster/WitherSkeleton.java -@@ -50,6 +50,12 @@ public class WitherSkeleton extends AbstractSkeleton { +@@ -53,6 +53,12 @@ public class WitherSkeleton extends AbstractSkeleton { } // Purpur end @@ -1504,7 +1504,7 @@ index 5c443a961900e6eb0d7f410ca6b7da2c5e53772f..978f610d31312f36093c0111ce623d11 @Override diff --git a/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java b/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java -index 4a95f791ba167be700f982fefe6896be6a0567c2..a2447844a6a6e08d41bb5152d01da91c852665cf 100644 +index 27e8442301e1d3a526e9f0d7e3e5aa40f385bc06..09d44e4965e820b3cfae909040697d717e3c6643 100644 --- a/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java +++ b/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java @@ -102,6 +102,16 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { @@ -1551,10 +1551,10 @@ index aa4160892b9ba2486806b5a54bc1465a4e273370..ba1ce7e0ed888bd47312e9d7da5426f5 @Nullable diff --git a/src/main/java/net/minecraft/world/entity/monster/creaking/Creaking.java b/src/main/java/net/minecraft/world/entity/monster/creaking/Creaking.java -index f935d475fd1aca407bde420e9ba8002002ea55f6..9bf251915c8a126ba480f44ea203f1a48e1ecde3 100644 +index 2afb53a33b612faf6aac6fc8a27dc285cc558b4d..cf4714b7a81819097f997d08c8c65ec8b1aef1e6 100644 --- a/src/main/java/net/minecraft/world/entity/monster/creaking/Creaking.java +++ b/src/main/java/net/minecraft/world/entity/monster/creaking/Creaking.java -@@ -208,6 +208,14 @@ public class Creaking extends Monster { +@@ -497,6 +497,14 @@ public class Creaking extends Monster { return this.isActive() ? null : SoundEvents.CREAKING_AMBIENT; } @@ -1587,10 +1587,10 @@ index e978aab6055f9365885e2412afdc44cb6c729af2..fc78df484bf747d4a00acd85a3f9f377 @VisibleForTesting diff --git a/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java b/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java -index 9a3bc9c0ad1b0af3c8196a773dd93b069ca4e92c..23673d9ce87acda718d12fce9af0ef5f27983f1a 100644 +index 49af4cb966dc1b72088c46eee758386b24bfed31..fd756b9f51d3ca857ea520288230afa5ab455b95 100644 --- a/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java +++ b/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java -@@ -113,6 +113,12 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento +@@ -116,6 +116,12 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento } // Purpur end @@ -1621,7 +1621,7 @@ index d7578f7d4eba9d630feb589dd2761789f8bcfde9..6459e588e6feb6d7bcf999e36b658bba return Monster.createMonsterAttributes() .add(Attributes.MAX_HEALTH, 50.0) diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java -index 80b6deade244d5ac2a6245fd2f3575af216a302c..9505402564893b3046b86f95fa1e34a64ac98e8e 100644 +index e6c6929901b15c5caa691bc41667a399c7453fa8..24b456dfa4d5383639fb79a45ffceb5c31e8ae53 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java @@ -180,6 +180,12 @@ public class Villager extends AbstractVillager implements ReputationEventHandler diff --git a/patches/server/0011-Barrels-and-enderchests-6-rows.patch b/patches/server/0011-Barrels-and-enderchests-6-rows.patch index adf8bb23d..45c961821 100644 --- a/patches/server/0011-Barrels-and-enderchests-6-rows.patch +++ b/patches/server/0011-Barrels-and-enderchests-6-rows.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Barrels and enderchests 6 rows diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index cf8b7f93a1ba027c00d7f45809fa51f1ab55a5de..595302e0177824c1e3ad54e9a088337eeb2d872b 100644 +index b973a07d199bc856643b23c090eb56bd1aeb0104..88678fb527f170c81d5e2d4a28f65e398dab8939 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java @@ -1116,6 +1116,27 @@ public abstract class PlayerList { @@ -37,10 +37,10 @@ index cf8b7f93a1ba027c00d7f45809fa51f1ab55a5de..595302e0177824c1e3ad54e9a088337e public boolean isWhiteListed(GameProfile profile) { diff --git a/src/main/java/net/minecraft/world/entity/player/Player.java b/src/main/java/net/minecraft/world/entity/player/Player.java -index 21f85ffe12a6ac11a67c808e4878f9a46f01344e..7e9f9b1f9e932116fc12db9cc2c0135144156eda 100644 +index e4d8fadd6ef32823f8581dab68567c5da9270566..e5c11504f85abdf49cea4ebd2aaaccdaff35a75c 100644 --- a/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java -@@ -197,6 +197,7 @@ public abstract class Player extends LivingEntity { +@@ -200,6 +200,7 @@ public abstract class Player extends LivingEntity { private int currentImpulseContextResetGraceTime; public boolean affectsSpawning = true; // Paper - Affects Spawning API public net.kyori.adventure.util.TriState flyingFallDamage = net.kyori.adventure.util.TriState.NOT_SET; // Paper - flying fall damage @@ -108,10 +108,10 @@ index a15d5ff872dbd77f3c3145e0328f3d02e431ff8c..1dcf36d502990d32fc4cd3ea69c3ea33 this.activeChest = blockEntity; } diff --git a/src/main/java/net/minecraft/world/level/block/EnderChestBlock.java b/src/main/java/net/minecraft/world/level/block/EnderChestBlock.java -index 2a207fb2e1c26b562de42240e11c856bd2a23458..6ad4aa371607ab92616626285a7e71757c76a3db 100644 +index 9b6ab617ab7f503cf0b2d4e29333c706ffe95f46..bfe79431dc5707677671df5c0787817c6e14a676 100644 --- a/src/main/java/net/minecraft/world/level/block/EnderChestBlock.java +++ b/src/main/java/net/minecraft/world/level/block/EnderChestBlock.java -@@ -89,7 +89,7 @@ public class EnderChestBlock extends AbstractChestBlock i +@@ -84,7 +84,7 @@ public class EnderChestBlock extends AbstractChestBlock i // Paper start - Fix InventoryOpenEvent cancellation - moved up; playerEnderChestContainer.setActiveChest(enderChestBlockEntity); // Needs to happen before ChestMenu.threeRows as it is required for opening animations if (world instanceof ServerLevel serverLevel && player.openMenu( @@ -120,7 +120,7 @@ index 2a207fb2e1c26b562de42240e11c856bd2a23458..6ad4aa371607ab92616626285a7e7175 ).isPresent()) { // Paper end - Fix InventoryOpenEvent cancellation - moved up; // Paper - Fix InventoryOpenEvent cancellation - moved up; -@@ -104,6 +104,35 @@ public class EnderChestBlock extends AbstractChestBlock i +@@ -99,6 +99,35 @@ public class EnderChestBlock extends AbstractChestBlock i } } @@ -240,7 +240,7 @@ index 6d3f9d5dab6c9a2860ae31cae24310aa2d62da7c..4f29c579f94efe59a8c78520d75676fc case DISPENSER: case DROPPER: diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventory.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventory.java -index af1ae3dacb628da23f7d2988c6e76d3fb2d64103..4ee2d501f882279b48edb4b8bf0824587c276bf6 100644 +index c6159c70f7a37b9bffe268b91905ce848d1d2927..d02adaaa6fbdc1c0eff44cb4a1f1642f9575a821 100644 --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventory.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventory.java @@ -84,7 +84,7 @@ public class CraftInventory implements Inventory { diff --git a/patches/server/0013-AFK-API.patch b/patches/server/0013-AFK-API.patch index 9d76d485d..c48dd9dad 100644 --- a/patches/server/0013-AFK-API.patch +++ b/patches/server/0013-AFK-API.patch @@ -5,10 +5,10 @@ Subject: [PATCH] AFK API diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 749145ac5ee84b5ebbf4b1eba2df680c1c51bd88..d4ed1dd4e4c56cf40632b0857af82a944579da65 100644 +index 1e0ca760b18e34a4c320439838283b8fcd87075a..0f979af9131678991860765163fcc4b0453ef52a 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -2641,8 +2641,68 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple +@@ -2621,8 +2621,68 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple public void resetLastActionTime() { this.lastActionTime = Util.getMillis(); @@ -78,10 +78,10 @@ index 749145ac5ee84b5ebbf4b1eba2df680c1c51bd88..d4ed1dd4e4c56cf40632b0857af82a94 return this.stats; } diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index d2145df4e9b0dd16e7d394b8983c36fd073d3e31..f48b13b9b57e3a25e8afeb37f54e883fd1cadf4d 100644 +index ddbfd4884daaa4cffdb5e4d8923a8755dab76d91..ea579334ea9f0c1675186af3192f3f7a1c23e859 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -342,6 +342,20 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -344,6 +344,20 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl private boolean justTeleported = false; // CraftBukkit end @@ -102,7 +102,7 @@ index d2145df4e9b0dd16e7d394b8983c36fd073d3e31..f48b13b9b57e3a25e8afeb37f54e883f @Override public void tick() { if (this.ackBlockChangesUpTo > -1) { -@@ -398,6 +412,12 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -400,6 +414,12 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl this.recipeSpamPackets.tick(); // Paper - auto recipe limit this.dropSpamThrottler.tick(); if (this.player.getLastActionTime() > 0L && this.server.getPlayerIdleTimeout() > 0 && Util.getMillis() - this.player.getLastActionTime() > (long) this.server.getPlayerIdleTimeout() * 1000L * 60L && !this.player.wonGame) { // Paper - Prevent AFK kick while watching end credits @@ -115,7 +115,7 @@ index d2145df4e9b0dd16e7d394b8983c36fd073d3e31..f48b13b9b57e3a25e8afeb37f54e883f this.player.resetLastActionTime(); // CraftBukkit - SPIGOT-854 this.disconnect((Component) Component.translatable("multiplayer.disconnect.idling"), org.bukkit.event.player.PlayerKickEvent.Cause.IDLING); // Paper - kick event cause } -@@ -663,6 +683,8 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -656,6 +676,8 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl this.lastYaw = to.getYaw(); this.lastPitch = to.getPitch(); @@ -124,7 +124,7 @@ index d2145df4e9b0dd16e7d394b8983c36fd073d3e31..f48b13b9b57e3a25e8afeb37f54e883f Location oldTo = to.clone(); PlayerMoveEvent event = new PlayerMoveEvent(player, from, to); this.cserver.getPluginManager().callEvent(event); -@@ -1501,7 +1523,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -1555,7 +1577,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl movedWrongly = true; if (event.getLogWarning()) // Paper end @@ -133,7 +133,7 @@ index d2145df4e9b0dd16e7d394b8983c36fd073d3e31..f48b13b9b57e3a25e8afeb37f54e883f } // Paper } -@@ -1569,6 +1591,8 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -1623,6 +1645,8 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl this.lastYaw = to.getYaw(); this.lastPitch = to.getPitch(); @@ -192,10 +192,10 @@ index 52982c1e6a4da36392569c791853279f5f9ac31a..b3d4c61b1769b6fcc98b7af854f774d2 if (tester == null) { if (this.isCombat && (!target.canBeSeenAsEnemy() || world.getDifficulty() == Difficulty.PEACEFUL)) { diff --git a/src/main/java/net/minecraft/world/entity/player/Player.java b/src/main/java/net/minecraft/world/entity/player/Player.java -index 7e9f9b1f9e932116fc12db9cc2c0135144156eda..d1b6e7cf8d110d9106ea99431cf9719ea3b102d5 100644 +index e5c11504f85abdf49cea4ebd2aaaccdaff35a75c..47d2f1af81d64054e30b353b66c0a6ad68583298 100644 --- a/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java -@@ -203,6 +203,13 @@ public abstract class Player extends LivingEntity { +@@ -206,6 +206,13 @@ public abstract class Player extends LivingEntity { public boolean fauxSleeping; public int oldLevel = -1; @@ -223,10 +223,10 @@ index 5d7a6e4b73f032db356e7ec369b150013e940ee6..6b2cda6d578a0983b2401ea206292754 if (range < 0.0 || d < range * range) { return true; diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 3d2322233aff511bcc5c85b24230c2e08dc0bcd0..358f42585c865efbd814787879f919f70234e5c4 100644 +index 0528b90bf718e4b3dc144cc33806126dfbe736e2..cfc85a7089de9e30ac9a703b87440475cc2e2cf0 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -583,10 +583,15 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -584,10 +584,15 @@ public class CraftPlayer extends CraftHumanEntity implements Player { @Override public void setPlayerListName(String name) { @@ -243,7 +243,7 @@ index 3d2322233aff511bcc5c85b24230c2e08dc0bcd0..358f42585c865efbd814787879f919f7 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)) { -@@ -3586,5 +3591,20 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -3563,5 +3568,20 @@ public class CraftPlayer extends CraftHumanEntity implements Player { public boolean usesPurpurClient() { return getHandle().purpurClient; } diff --git a/patches/server/0015-Configurable-server-mod-name.patch b/patches/server/0015-Configurable-server-mod-name.patch index 5b65fb53d..a08c17673 100644 --- a/patches/server/0015-Configurable-server-mod-name.patch +++ b/patches/server/0015-Configurable-server-mod-name.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Configurable server mod name diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index ff4d04092aa6322788d55d3c0253cb7f6f3cd493..85e04c38cfda8c546f241a71deeb31efde22dc91 100644 +index 48e40ef7fba63d9354152a02440656ceb3a9b7a6..5a85471d26130c893ad619dbfc9b61c0ee1b938b 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -2019,7 +2019,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop pluginsBlockingSleep = new java.util.HashSet<>(); // Paper - API to allow/disallow tick sleeping + public boolean lagging = false; // Purpur public volatile Thread shutdownThread; // Paper public volatile boolean abnormalExit = false; // Paper -@@ -1304,6 +1305,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop implements FeatureElement, EntityTypeT @@ -25,7 +25,7 @@ index 7e7603680310976312050aaff5bdaa805901617f..23b921a79bd563fd0a1bf7afd55a8e52 public static ResourceLocation getKey(EntityType type) { return BuiltInRegistries.ENTITY_TYPE.getKey(type); } -@@ -605,6 +615,16 @@ public class EntityType implements FeatureElement, EntityTypeT +@@ -615,6 +625,16 @@ public class EntityType implements FeatureElement, EntityTypeT return this.category; } @@ -43,14 +43,13 @@ index 7e7603680310976312050aaff5bdaa805901617f..23b921a79bd563fd0a1bf7afd55a8e52 return this.descriptionId; } diff --git a/src/main/java/net/minecraft/world/item/SpawnEggItem.java b/src/main/java/net/minecraft/world/item/SpawnEggItem.java -index 9956ed42df55daa6d97fd6e3ab5368dad91cfaf0..e0e746d6c78421b40777125ba49f0a04809f5415 100644 +index cc7e9b87e919b4ef8cf77cd780c890fd9a9cfa50..a185d098175e504b7bb93d2cff03ca99eabc11eb 100644 --- a/src/main/java/net/minecraft/world/item/SpawnEggItem.java +++ b/src/main/java/net/minecraft/world/item/SpawnEggItem.java -@@ -73,6 +73,24 @@ public class SpawnEggItem extends Item { +@@ -68,6 +68,23 @@ public class SpawnEggItem extends Item { Spawner spawner = (Spawner) tileentity; - entitytypes = this.getType(itemstack); -+ + entitytypes = this.getType(world.registryAccess(), itemstack); + // Purpur start + if (spawner instanceof net.minecraft.world.level.block.entity.SpawnerBlockEntity) { + org.bukkit.block.Block bukkitBlock = world.getWorld().getBlockAt(blockposition.getX(), blockposition.getY(), blockposition.getZ()); diff --git a/patches/server/0020-Enchantment-convenience-methods.patch b/patches/server/0020-Enchantment-convenience-methods.patch index eac011c5c..573bafb9b 100644 --- a/patches/server/0020-Enchantment-convenience-methods.patch +++ b/patches/server/0020-Enchantment-convenience-methods.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Enchantment convenience methods diff --git a/src/main/java/net/minecraft/world/item/enchantment/EnchantmentHelper.java b/src/main/java/net/minecraft/world/item/enchantment/EnchantmentHelper.java -index f99b87cf70df7eaac13d46f4e0234b1e6483d342..d8fc10f9cd0ab2c26e64613006569a86ce201550 100644 +index 4dd074d04c9a535f6cf24420058fd68594c59edc..64c315372277300e58ce413210f47eed5b6e1d6c 100644 --- a/src/main/java/net/minecraft/world/item/enchantment/EnchantmentHelper.java +++ b/src/main/java/net/minecraft/world/item/enchantment/EnchantmentHelper.java @@ -578,4 +578,14 @@ public class EnchantmentHelper { diff --git a/patches/server/0021-Silk-touch-spawners.patch b/patches/server/0021-Silk-touch-spawners.patch index 7f106b8fd..d867ba596 100644 --- a/patches/server/0021-Silk-touch-spawners.patch +++ b/patches/server/0021-Silk-touch-spawners.patch @@ -5,22 +5,22 @@ Subject: [PATCH] Silk touch spawners diff --git a/src/main/java/net/minecraft/world/item/BlockItem.java b/src/main/java/net/minecraft/world/item/BlockItem.java -index c816c935ecc74a811ffdffbe6ded73c06e92324a..b5b7f1db21a22f16f06ced775c8173f90e36a91c 100644 +index 4377fa2400c4320e0023ece230090a2a3b4b2ab6..ac5dc472337cd9613db5fc03f64763245129dfd9 100644 --- a/src/main/java/net/minecraft/world/item/BlockItem.java +++ b/src/main/java/net/minecraft/world/item/BlockItem.java -@@ -213,6 +213,7 @@ public class BlockItem extends Item { +@@ -223,6 +223,7 @@ public class BlockItem extends Item { + } - if (tileentity != null) { - if (!world.isClientSide && tileentity.onlyOpCanSetNbt() && (player == null || !(player.canUseGameMasterBlocks() || (player.getAbilities().instabuild && player.getBukkitEntity().hasPermission("minecraft.nbt.place"))))) { // Spigot - add permission -+ if (!(!world.isClientSide && world.purpurConfig.silkTouchEnabled && tileentity instanceof net.minecraft.world.level.block.entity.SpawnerBlockEntity && player.getBukkitEntity().hasPermission("purpur.drop.spawners"))) + if (tileentitytypes1.onlyOpCanSetNbt() && (player == null || !(player.canUseGameMasterBlocks() || (player.getAbilities().instabuild && player.getBukkitEntity().hasPermission("minecraft.nbt.place"))))) { // Spigot - add permission ++ if (!(world.purpurConfig.silkTouchEnabled && tileentity instanceof net.minecraft.world.level.block.entity.SpawnerBlockEntity && player.getBukkitEntity().hasPermission("purpur.drop.spawners"))) return false; } diff --git a/src/main/java/net/minecraft/world/item/Items.java b/src/main/java/net/minecraft/world/item/Items.java -index 5a70111cd39af50981cfd440c021340da1de5eab..bf7d12594375d5b252db540a6d669a6e6aca7de8 100644 +index 6d16b4433e79eca0ff8008941f0b9b807b1db9db..41fbe61268c0a16078b5f846ab12bde172872ff7 100644 --- a/src/main/java/net/minecraft/world/item/Items.java +++ b/src/main/java/net/minecraft/world/item/Items.java -@@ -363,7 +363,7 @@ public class Items { +@@ -367,7 +367,7 @@ public class Items { public static final Item PURPUR_BLOCK = registerBlock(Blocks.PURPUR_BLOCK); public static final Item PURPUR_PILLAR = registerBlock(Blocks.PURPUR_PILLAR); public static final Item PURPUR_STAIRS = registerBlock(Blocks.PURPUR_STAIRS); @@ -30,7 +30,7 @@ index 5a70111cd39af50981cfd440c021340da1de5eab..bf7d12594375d5b252db540a6d669a6e public static final Item CHEST = registerBlock(Blocks.CHEST, settings -> settings.component(DataComponents.CONTAINER, ItemContainerContents.EMPTY)); public static final Item CRAFTING_TABLE = registerBlock(Blocks.CRAFTING_TABLE); diff --git a/src/main/java/net/minecraft/world/level/block/SpawnerBlock.java b/src/main/java/net/minecraft/world/level/block/SpawnerBlock.java -index 4f190a40b8474aa06a92c8afcc06d0044120ff7b..80ee7a6f010cc838625674007a3ea908f2f9dadd 100644 +index d751b280a8bf2066d458f8eb548d7aa123fa69c9..fb88b5c1d9e764bf1211d601527133ea8e8268b3 100644 --- a/src/main/java/net/minecraft/world/level/block/SpawnerBlock.java +++ b/src/main/java/net/minecraft/world/level/block/SpawnerBlock.java @@ -42,6 +42,57 @@ public class SpawnerBlock extends BaseEntityBlock { diff --git a/patches/server/0024-Disable-outdated-build-check.patch b/patches/server/0024-Disable-outdated-build-check.patch index 845632208..e5bb0daee 100644 --- a/patches/server/0024-Disable-outdated-build-check.patch +++ b/patches/server/0024-Disable-outdated-build-check.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Disable outdated build check diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java -index 9ad9239ae0804cc7a4a9ea4a05401b303ae9b372..5bce26e9671aab15ac4bac9a0d00b5184bef74ea 100644 +index ae274a56f7cb6200b3c556ed61254bb28146c771..628f7f784c830189c5718a20ce43a9352e400c33 100644 --- a/src/main/java/org/bukkit/craftbukkit/Main.java +++ b/src/main/java/org/bukkit/craftbukkit/Main.java @@ -267,7 +267,7 @@ public class Main { diff --git a/patches/server/0026-Zombie-horse-naturally-spawn.patch b/patches/server/0026-Zombie-horse-naturally-spawn.patch index 57847a580..a4bd3c950 100644 --- a/patches/server/0026-Zombie-horse-naturally-spawn.patch +++ b/patches/server/0026-Zombie-horse-naturally-spawn.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Zombie horse naturally spawn diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 1f49d018683fa19f498c8e68dab8a7ddde6cfad0..c05d0d836ced6db6b4a3e85fe0973dd7b1aaad81 100644 +index d571b4a56807bcc4206d54573604c01290cd3dd7..9451c6fa2307bc12b47a106f2d82508548b109a8 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -953,10 +953,18 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -954,10 +954,18 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe boolean flag1 = this.getGameRules().getBoolean(GameRules.RULE_DOMOBSPAWNING) && this.random.nextDouble() < (double) difficultydamagescaler.getEffectiveDifficulty() * this.paperConfig().entities.spawning.skeletonHorseThunderSpawnChance.or(0.01D) && !this.getBlockState(blockposition.below()).is(Blocks.LIGHTNING_ROD); // Paper - Configurable spawn chances for skeleton horses if (flag1) { diff --git a/patches/server/0028-Rabbit-naturally-spawn-toast-and-killer.patch b/patches/server/0028-Rabbit-naturally-spawn-toast-and-killer.patch index d5147a970..0466b174e 100644 --- a/patches/server/0028-Rabbit-naturally-spawn-toast-and-killer.patch +++ b/patches/server/0028-Rabbit-naturally-spawn-toast-and-killer.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Rabbit naturally spawn toast and killer diff --git a/src/main/java/net/minecraft/world/entity/animal/Rabbit.java b/src/main/java/net/minecraft/world/entity/animal/Rabbit.java -index 6f3fdf72dd4e8d7399b205818c863e754c898101..b0cdc25f6592d44a3ad3fdf4d461e95887105257 100644 +index bd513a21c9fb683f5768cebb69058bd00c808412..d851f25ca886f0e0939e397c4562b88db59f6885 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Rabbit.java +++ b/src/main/java/net/minecraft/world/entity/animal/Rabbit.java @@ -469,10 +469,23 @@ public class Rabbit extends Animal implements VariantHolder { diff --git a/patches/server/0030-Tulips-change-fox-type.patch b/patches/server/0030-Tulips-change-fox-type.patch index 75b4b223b..5c3aac7ed 100644 --- a/patches/server/0030-Tulips-change-fox-type.patch +++ b/patches/server/0030-Tulips-change-fox-type.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Tulips change fox type diff --git a/src/main/java/net/minecraft/world/entity/animal/Fox.java b/src/main/java/net/minecraft/world/entity/animal/Fox.java -index bb98caa1e5ca711293e50ac82a5cad2fa5972db9..355965d88d5ef008111cc72f39e4f8d35741fdfd 100644 +index 23ee27f70ae4c02a9add7562f75c6dd5e12028b4..75fd5fb03aec52c76df55ab75ba5d446e094c9c8 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Fox.java +++ b/src/main/java/net/minecraft/world/entity/animal/Fox.java @@ -384,6 +384,11 @@ public class Fox extends Animal implements VariantHolder { diff --git a/patches/server/0033-Add-option-to-set-armorstand-step-height.patch b/patches/server/0033-Add-option-to-set-armorstand-step-height.patch index cf4d6f0b9..1638f62cb 100644 --- a/patches/server/0033-Add-option-to-set-armorstand-step-height.patch +++ b/patches/server/0033-Add-option-to-set-armorstand-step-height.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Add option to set armorstand step height diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 163af180a12bf2847d6eab87e1fa77aef7cd3550..1057497963a615ae1aaafa5aac1f53471a00c763 100644 +index fddc4a5e5c4f9f3552b3254fec8254774b20f9f1..2e57077a184809e70481c9bba1891e01a9e203f7 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java @@ -300,6 +300,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess @@ -16,7 +16,7 @@ index 163af180a12bf2847d6eab87e1fa77aef7cd3550..1057497963a615ae1aaafa5aac1f5347 public boolean noPhysics; private boolean wasOnFire; public final RandomSource random; -@@ -5142,7 +5143,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -5172,7 +5173,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } public float maxUpStep() { diff --git a/patches/server/0035-Cows-eat-mushrooms.patch b/patches/server/0035-Cows-eat-mushrooms.patch index 4aea692cc..e5f80ee6f 100644 --- a/patches/server/0035-Cows-eat-mushrooms.patch +++ b/patches/server/0035-Cows-eat-mushrooms.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Cows eat mushrooms diff --git a/src/main/java/net/minecraft/world/entity/animal/Cow.java b/src/main/java/net/minecraft/world/entity/animal/Cow.java -index 8229a99d4454df64def52bbf686183284d62c900..e6fa66a8c88d4f20a7383e8fd5b3df44718478fa 100644 +index 8229a99d4454df64def52bbf686183284d62c900..5b1cd0003f48a44609ed42919a191ec22c379640 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Cow.java +++ b/src/main/java/net/minecraft/world/entity/animal/Cow.java @@ -74,7 +74,7 @@ public class Cow extends Animal { @@ -28,7 +28,7 @@ index 8229a99d4454df64def52bbf686183284d62c900..e6fa66a8c88d4f20a7383e8fd5b3df44 } else { return super.mobInteract(player, hand); } -@@ -151,4 +155,66 @@ public class Cow extends Animal { +@@ -151,4 +155,67 @@ public class Cow extends Animal { public EntityDimensions getDefaultDimensions(Pose pose) { return this.isBaby() ? Cow.BABY_DIMENSIONS : super.getDefaultDimensions(pose); } @@ -87,9 +87,10 @@ index 8229a99d4454df64def52bbf686183284d62c900..e6fa66a8c88d4f20a7383e8fd5b3df44 + stack.shrink(1); + } + for (int i = 0; i < 15; ++i) { -+ ((ServerLevel) level()).sendParticles(((ServerLevel) level()).players(), null, net.minecraft.core.particles.ParticleTypes.HAPPY_VILLAGER, ++ ((ServerLevel) level()).sendParticlesSource(((ServerLevel) level()).players(), null, net.minecraft.core.particles.ParticleTypes.HAPPY_VILLAGER, ++ false, true, + getX() + random.nextFloat(), getY() + (random.nextFloat() * 2), getZ() + random.nextFloat(), 1, -+ random.nextGaussian() * 0.05D, random.nextGaussian() * 0.05D, random.nextGaussian() * 0.05D, 0, true); ++ random.nextGaussian() * 0.05D, random.nextGaussian() * 0.05D, random.nextGaussian() * 0.05D, 0); + } + return InteractionResult.SUCCESS; + } diff --git a/patches/server/0036-Fix-cow-rotation-when-shearing-mooshroom.patch b/patches/server/0036-Fix-cow-rotation-when-shearing-mooshroom.patch index 9e7f3ea08..71c0dc850 100644 --- a/patches/server/0036-Fix-cow-rotation-when-shearing-mooshroom.patch +++ b/patches/server/0036-Fix-cow-rotation-when-shearing-mooshroom.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Fix cow rotation when shearing mooshroom diff --git a/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java b/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java -index 0005cd7156e46ae790d629d7a985cdace1cc5577..c7039d7d5e38392fef8787f6e245a44842e2f2a3 100644 +index 575a3f5e2c003474a4a4d09db4ba495eddad3ce7..e5d8f23032244c77b4e2bcb8ead0b20a27acadf7 100644 --- a/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java +++ b/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java -@@ -217,6 +217,13 @@ public class MushroomCow extends Cow implements Shearable, VariantHolder { world.sendParticles(ParticleTypes.EXPLOSION, this.getX(), this.getY(0.5D), this.getZ(), 1, 0.0D, 0.0D, 0.0D, 0.0D); diff --git a/patches/server/0039-Ender-dragon-always-drop-full-exp.patch b/patches/server/0039-Ender-dragon-always-drop-full-exp.patch index 52df8536c..f9542af74 100644 --- a/patches/server/0039-Ender-dragon-always-drop-full-exp.patch +++ b/patches/server/0039-Ender-dragon-always-drop-full-exp.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Ender dragon always drop full exp diff --git a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java -index 0faae8faeba4300a44b8dadedc73c9f1a4022e4f..f356110850dd71d066243ec29853f547d94e4400 100644 +index d1134a81cc3ada28790e8fcd4489d64e9650dae3..8cfe0d5f09fa08c3606f29ce243d6ce5f84090a0 100644 --- a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java +++ b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java @@ -732,7 +732,7 @@ public class EnderDragon extends Mob implements Enemy { diff --git a/patches/server/0041-Minecart-settings-and-WASD-controls.patch b/patches/server/0041-Minecart-settings-and-WASD-controls.patch index 0294834e0..6afc173bc 100644 --- a/patches/server/0041-Minecart-settings-and-WASD-controls.patch +++ b/patches/server/0041-Minecart-settings-and-WASD-controls.patch @@ -5,17 +5,17 @@ Subject: [PATCH] Minecart settings and WASD controls diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index d4ed1dd4e4c56cf40632b0857af82a944579da65..a91a4602b5bc72dc0162fd2d60eebf3a05df4065 100644 +index ae4733c402662630a3892aecd01646d2e7613eed..d8a5d37e3b796392d6b0548371d4f0801d4d9bec 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -1442,6 +1442,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple +@@ -1439,6 +1439,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple if (this.isInvulnerableTo(world, source)) { return false; } else { -+ if (source.is(DamageTypeTags.IS_FALL) && getRootVehicle() instanceof net.minecraft.world.entity.vehicle.AbstractMinecart && level().purpurConfig.minecartControllable && !level().purpurConfig.minecartControllableFallDamage) return false; // Purpur - boolean flag = this.server.isDedicatedServer() && this.isPvpAllowed() && source.is(DamageTypeTags.IS_FALL); ++ if (source.is(net.minecraft.tags.DamageTypeTags.IS_FALL) && getRootVehicle() instanceof net.minecraft.world.entity.vehicle.AbstractMinecart && level().purpurConfig.minecartControllable && !level().purpurConfig.minecartControllableFallDamage) return false; // Purpur + Entity entity = source.getEntity(); - if (!flag && this.spawnInvulnerableTime > 0 && !source.is(DamageTypeTags.BYPASSES_INVULNERABILITY)) { + if (entity instanceof net.minecraft.world.entity.player.Player) { diff --git a/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecart.java b/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecart.java index cdc8606ffe5c75ee19d92e9f86f26b2a502d765e..b31940441596079aae1cd2a38b9d22be18358448 100644 --- a/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecart.java @@ -148,7 +148,7 @@ index 7153d9ed12276a0f2d8b8a17c79734aa25ed1fa5..dc49ea6454e04ae8ec68af12c4bf2ff0 } } diff --git a/src/main/java/net/minecraft/world/level/block/state/BlockBehaviour.java b/src/main/java/net/minecraft/world/level/block/state/BlockBehaviour.java -index 99fd67a78539133adf78d65e2c520ff3dd260301..6b987ee220d94b482d2aeb4ff6bf271853605dc1 100644 +index 8c0f332a1a0918f60226d969918ae7fe4fe74166..6376b8b3ff444f4cab93e2bb5d2becc77c33c118 100644 --- a/src/main/java/net/minecraft/world/level/block/state/BlockBehaviour.java +++ b/src/main/java/net/minecraft/world/level/block/state/BlockBehaviour.java @@ -99,7 +99,7 @@ public abstract class BlockBehaviour implements FeatureElement { diff --git a/patches/server/0042-Disable-loot-drops-on-death-by-cramming.patch b/patches/server/0042-Disable-loot-drops-on-death-by-cramming.patch index 6e1b88dee..83f2cf2bf 100644 --- a/patches/server/0042-Disable-loot-drops-on-death-by-cramming.patch +++ b/patches/server/0042-Disable-loot-drops-on-death-by-cramming.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Disable loot drops on death by cramming diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 1077eae6e0952d09410518a856ebece808aefef5..af017da528924bae0542dd0e59d23c3bf59aa7b3 100644 +index a16c7069a2ac349a6de366229b77da9a7cec71c0..9c31efc4d8c16c8f3c3e384ad247db28e82628d2 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -1927,6 +1927,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -1938,6 +1938,7 @@ public abstract class LivingEntity extends Entity implements Attackable { this.dropEquipment(world); // CraftBukkit - from below if (this.shouldDropLoot() && world.getGameRules().getBoolean(GameRules.RULE_DOMOBLOOT)) { @@ -16,7 +16,7 @@ index 1077eae6e0952d09410518a856ebece808aefef5..af017da528924bae0542dd0e59d23c3b this.dropFromLootTable(world, damageSource, flag); // Paper start final boolean prev = this.clearEquipmentSlots; -@@ -1935,6 +1936,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -1946,6 +1947,7 @@ public abstract class LivingEntity extends Entity implements Attackable { // Paper end this.dropCustomDeathLoot(world, damageSource, flag); this.clearEquipmentSlots = prev; // Paper diff --git a/patches/server/0045-Add-permission-for-F3-N-debug.patch b/patches/server/0045-Add-permission-for-F3-N-debug.patch index fc63dee39..af892d946 100644 --- a/patches/server/0045-Add-permission-for-F3-N-debug.patch +++ b/patches/server/0045-Add-permission-for-F3-N-debug.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Add permission for F3+N debug diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index 595302e0177824c1e3ad54e9a088337eeb2d872b..73c83770e1acd6c57742405a04ffa7a733aea4f6 100644 +index 88678fb527f170c81d5e2d4a28f65e398dab8939..98992aae7c7724a25fc6f6aaee27b07dccbe2292 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java @@ -1108,6 +1108,7 @@ public abstract class PlayerList { diff --git a/patches/server/0046-Configurable-TPS-Catchup.patch b/patches/server/0046-Configurable-TPS-Catchup.patch index 6223b1cad..b6a27acc8 100644 --- a/patches/server/0046-Configurable-TPS-Catchup.patch +++ b/patches/server/0046-Configurable-TPS-Catchup.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Configurable TPS Catchup diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 85f5f8a30053cae087b223f0d80432c5318e67d6..f6ad220e3e228e978c8b635064e8d5bf65ac5a89 100644 +index 93aa1dce5c9bfdfff9372b0a84bfa2d5bf5c1169..d94f92730063454a1acaa037d5c5eed7a7a73490 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1345,7 +1345,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 0; } @@ -49,7 +49,7 @@ index 33e7d2884195677c4d6340d8b84c1dd85c636ec1..239bd6e3d756dc4ecab6ca639fa84ccb return Mth.clamp((Integer) this.getOrDefault(DataComponents.DAMAGE, 0), 0, this.getMaxDamage()); } diff --git a/src/main/java/net/minecraft/world/item/enchantment/EnchantmentHelper.java b/src/main/java/net/minecraft/world/item/enchantment/EnchantmentHelper.java -index d8fc10f9cd0ab2c26e64613006569a86ce201550..73241113e50dc8be89ef8850d49d95ec31fb194f 100644 +index 64c315372277300e58ce413210f47eed5b6e1d6c..2c1799e8c9009a6ab24c24e7363d5a87e41f0c35 100644 --- a/src/main/java/net/minecraft/world/item/enchantment/EnchantmentHelper.java +++ b/src/main/java/net/minecraft/world/item/enchantment/EnchantmentHelper.java @@ -6,6 +6,7 @@ import it.unimi.dsi.fastutil.objects.Object2IntMap.Entry; diff --git a/patches/server/0059-Add-5-second-tps-average-in-tps.patch b/patches/server/0059-Add-5-second-tps-average-in-tps.patch index d244c55c4..51316158c 100644 --- a/patches/server/0059-Add-5-second-tps-average-in-tps.patch +++ b/patches/server/0059-Add-5-second-tps-average-in-tps.patch @@ -26,7 +26,7 @@ index 12b327eea95e0de9e9c39b7d039badee8ec46508..849ecc5af70901f1e40cb6c419f33f1c } diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 67db7d9f57fd4407412b9cfbc8b0ab06f15fff12..e1858bc2b043f0edf5d3f1393340f40aa7bcb36a 100644 +index f8fb46648b9b4ec11632ff5b8de5902c259ccaf2..0cce9061c49a3556d886381fac3bfc78390b7ec4 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -324,7 +324,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop pages, int slotId) { @@ -45,7 +45,7 @@ index f48b13b9b57e3a25e8afeb37f54e883fd1cadf4d..99a023e87428ee200fcb3b663c2ab6a1 itemstack.set(DataComponents.WRITABLE_BOOK_CONTENT, new WritableBookContent(list1)); this.player.getInventory().setItem(slotId, CraftEventFactory.handleEditBookEvent(this.player, slotId, handItem, itemstack)); // CraftBukkit // Paper - Don't ignore result (see other callsite for handleEditBookEvent) -@@ -1274,6 +1283,11 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -1328,6 +1337,11 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl } private void signBook(FilteredText title, List pages, int slotId) { @@ -57,7 +57,7 @@ index f48b13b9b57e3a25e8afeb37f54e883fd1cadf4d..99a023e87428ee200fcb3b663c2ab6a1 ItemStack itemstack = this.player.getInventory().getItem(slotId); if (itemstack.has(DataComponents.WRITABLE_BOOK_CONTENT)) { -@@ -1281,10 +1295,10 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -1335,10 +1349,10 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl itemstack1.remove(DataComponents.WRITABLE_BOOK_CONTENT); List> list1 = (List>) (List) pages.stream().map((filteredtext1) -> { // CraftBukkit - decompile error @@ -70,7 +70,7 @@ index f48b13b9b57e3a25e8afeb37f54e883fd1cadf4d..99a023e87428ee200fcb3b663c2ab6a1 CraftEventFactory.handleEditBookEvent(this.player, slotId, itemstack, itemstack1); // CraftBukkit this.player.getInventory().setItem(slotId, itemstack); // CraftBukkit - event factory updates the hand book } -@@ -1294,6 +1308,16 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -1348,6 +1362,16 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl return this.player.isTextFilteringEnabled() ? Filterable.passThrough(message.filteredOrEmpty()) : Filterable.from(message); } diff --git a/patches/server/0072-Entity-lifespan.patch b/patches/server/0072-Entity-lifespan.patch index 2d401d832..6cd35f666 100644 --- a/patches/server/0072-Entity-lifespan.patch +++ b/patches/server/0072-Entity-lifespan.patch @@ -5,22 +5,22 @@ Subject: [PATCH] Entity lifespan diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 99a023e87428ee200fcb3b663c2ab6a1077b3bf0..f11dc92d796d3044adc8cbd97edf00e047ba72f1 100644 +index ff96fcf7d039c4bae4d77c9c546486c2312f6ecc..92afa94ce5ae84ddbe0564c57300771126c4fde9 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -2857,6 +2857,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl - AABB axisalignedbb = entity.getBoundingBox(); +@@ -2923,6 +2923,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl + AABB axisalignedbb = entity.getBoundingBox(); if (this.player.canInteractWithEntity(axisalignedbb, io.papermc.paper.configuration.GlobalConfiguration.get().misc.clientInteractionLeniencyDistance.or(3.0D))) { // Paper - configurable lenience value for interact range + if (entity instanceof Mob mob) mob.ticksSinceLastInteraction = 0; // Purpur - packet.dispatch(new ServerboundInteractPacket.Handler() { - private void performInteraction(InteractionHand enumhand, ServerGamePacketListenerImpl.EntityInteraction playerconnection_a, PlayerInteractEntityEvent event) { // CraftBukkit - ItemStack itemstack = ServerGamePacketListenerImpl.this.player.getItemInHand(enumhand); + packet.dispatch(new ServerboundInteractPacket.Handler() { + private void performInteraction(InteractionHand enumhand, ServerGamePacketListenerImpl.EntityInteraction playerconnection_a, PlayerInteractEntityEvent event) { // CraftBukkit + ItemStack itemstack = ServerGamePacketListenerImpl.this.player.getItemInHand(enumhand); diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java -index 6502676a94ebb663b6126a21896cda456066d55b..e99b72b89abdded3e988bd1a92d36055fb1a84dc 100644 +index b57c362e67d9724fc387d3aa5b8547aef648fe91..0c55e69bbdc673a87b5ac5ee740817aca2434bb6 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java -@@ -148,6 +148,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab +@@ -144,6 +144,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab private BlockPos restrictCenter; private float restrictRadius; @@ -28,7 +28,7 @@ index 6502676a94ebb663b6126a21896cda456066d55b..e99b72b89abdded3e988bd1a92d36055 public boolean aware = true; // CraftBukkit protected Mob(EntityType type, Level world) { -@@ -336,6 +337,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab +@@ -332,6 +333,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab entityliving = null; } } @@ -36,7 +36,7 @@ index 6502676a94ebb663b6126a21896cda456066d55b..e99b72b89abdded3e988bd1a92d36055 this.target = entityliving; return true; // CraftBukkit end -@@ -380,8 +382,28 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab +@@ -376,8 +378,28 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab } gameprofilerfiller.pop(); @@ -65,7 +65,7 @@ index 6502676a94ebb663b6126a21896cda456066d55b..e99b72b89abdded3e988bd1a92d36055 @Override protected void playHurtSound(DamageSource damageSource) { this.resetAmbientSoundTime(); -@@ -549,6 +571,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab +@@ -546,6 +568,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab } nbt.putBoolean("Bukkit.Aware", this.aware); // CraftBukkit @@ -73,7 +73,7 @@ index 6502676a94ebb663b6126a21896cda456066d55b..e99b72b89abdded3e988bd1a92d36055 } @Override -@@ -626,6 +649,11 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab +@@ -636,6 +659,11 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab this.aware = nbt.getBoolean("Bukkit.Aware"); } // CraftBukkit end @@ -85,7 +85,7 @@ index 6502676a94ebb663b6126a21896cda456066d55b..e99b72b89abdded3e988bd1a92d36055 } @Override -@@ -1741,6 +1769,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab +@@ -1744,6 +1772,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab this.playAttackSound(); } diff --git a/patches/server/0073-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch b/patches/server/0073-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch index 1e5f575d2..788c8b120 100644 --- a/patches/server/0073-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch +++ b/patches/server/0073-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add option to teleport to spawn if outside world border diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index a91a4602b5bc72dc0162fd2d60eebf3a05df4065..cbe608df708d5530813230cddd78568c1a63b448 100644 +index d8a5d37e3b796392d6b0548371d4f0801d4d9bec..6f769f90038042ac11cdd59f36d7f3fd85cfd490 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -3410,4 +3410,26 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple +@@ -3390,4 +3390,26 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple return (CraftPlayer) super.getBukkitEntity(); } // CraftBukkit end @@ -36,10 +36,10 @@ index a91a4602b5bc72dc0162fd2d60eebf3a05df4065..cbe608df708d5530813230cddd78568c + // Purpur end } diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index c1a3103aa692bb5dfb4e162159c77a03d9c9a0e8..2007dd29cc2c1ee4cf88db27e0082c3548ebf344 100644 +index 28c8ff8ffe5f4dd7a4f3f6f2397dd33b29309c9f..bf38f466033928611d58ffd410191cf69814c171 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -479,6 +479,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -477,6 +477,7 @@ public abstract class LivingEntity extends Entity implements Attackable { if (d1 < 0.0D) { d0 = this.level().getWorldBorder().getDamagePerBlock(); if (d0 > 0.0D) { diff --git a/patches/server/0075-Phantoms-burn-in-light.patch b/patches/server/0075-Phantoms-burn-in-light.patch index 347485d36..f902c1988 100644 --- a/patches/server/0075-Phantoms-burn-in-light.patch +++ b/patches/server/0075-Phantoms-burn-in-light.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Phantoms burn in light diff --git a/src/main/java/net/minecraft/world/entity/monster/Phantom.java b/src/main/java/net/minecraft/world/entity/monster/Phantom.java -index bd1c23d849269df504c94da9d0ca0a6846b22c41..987b860f85a1be3159233fb3291773792d291348 100644 +index fbac9260a510ad899aebd5a0196d122505dcc5da..604c4b971279699dd3fbef3b9c5f4b92c01b46e9 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Phantom.java +++ b/src/main/java/net/minecraft/world/entity/monster/Phantom.java @@ -49,6 +49,7 @@ public class Phantom extends FlyingMob implements Enemy { diff --git a/patches/server/0076-Configurable-villager-breeding.patch b/patches/server/0076-Configurable-villager-breeding.patch index 36aeada30..20b86d2c8 100644 --- a/patches/server/0076-Configurable-villager-breeding.patch +++ b/patches/server/0076-Configurable-villager-breeding.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Configurable villager breeding diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java -index 394c8667cfe57fa1fba93231a1ebb5be6dc63c63..3528cc251ebae1011ec3dac4b893157e446a1e22 100644 +index 0ba9fac5214405c40a151954cbf615caca6d4cb3..973dd0cdccb7787bdb36e4c1e8135490ab59c317 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java @@ -769,7 +769,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler diff --git a/patches/server/0078-Totems-work-in-inventory.patch b/patches/server/0078-Totems-work-in-inventory.patch index 451905d38..59ccfd423 100644 --- a/patches/server/0078-Totems-work-in-inventory.patch +++ b/patches/server/0078-Totems-work-in-inventory.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Totems work in inventory diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 2007dd29cc2c1ee4cf88db27e0082c3548ebf344..f8ec83a135feab4140ec075ee45250ebfc511993 100644 +index bf38f466033928611d58ffd410191cf69814c171..1add518a30e1f44849aea6c805cf3cef849f1992 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -1720,6 +1720,18 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -1731,6 +1731,18 @@ public abstract class LivingEntity extends Entity implements Attackable { } } diff --git a/patches/server/0080-Dispensers-place-anvils-option.patch b/patches/server/0080-Dispensers-place-anvils-option.patch index 19c022075..6a5c7d733 100644 --- a/patches/server/0080-Dispensers-place-anvils-option.patch +++ b/patches/server/0080-Dispensers-place-anvils-option.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Dispensers place anvils option diff --git a/src/main/java/net/minecraft/core/dispenser/DispenseItemBehavior.java b/src/main/java/net/minecraft/core/dispenser/DispenseItemBehavior.java -index 0d12605dc84dad49faa18bf1fd058c3c168623ee..c6490554a3025f4de3f3218178fad76cd1848a19 100644 +index c9d7ac819ce26f5301df7df56edce59b7ef377e0..cdd73bb358e309844bef576175a9026cb8563e7e 100644 --- a/src/main/java/net/minecraft/core/dispenser/DispenseItemBehavior.java +++ b/src/main/java/net/minecraft/core/dispenser/DispenseItemBehavior.java @@ -930,5 +930,22 @@ public interface DispenseItemBehavior { diff --git a/patches/server/0083-Short-enderman-height.patch b/patches/server/0083-Short-enderman-height.patch index a30c63635..3e9b004ce 100644 --- a/patches/server/0083-Short-enderman-height.patch +++ b/patches/server/0083-Short-enderman-height.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Short enderman height diff --git a/src/main/java/net/minecraft/world/entity/EntityType.java b/src/main/java/net/minecraft/world/entity/EntityType.java -index 23b921a79bd563fd0a1bf7afd55a8e52ff1da521..40ae00146381a9a1ec70ffae5c683b46c72c56ff 100644 +index fa15b22e464f1dfe83f3d07ff7a28b6740df79b4..2f08747612bd238f12c8d3dccb996118e7c34e33 100644 --- a/src/main/java/net/minecraft/world/entity/EntityType.java +++ b/src/main/java/net/minecraft/world/entity/EntityType.java @@ -389,7 +389,8 @@ public class EntityType implements FeatureElement, EntityTypeT @@ -19,10 +19,10 @@ index 23b921a79bd563fd0a1bf7afd55a8e52ff1da521..40ae00146381a9a1ec70ffae5c683b46 private final FeatureFlagSet requiredFeatures; diff --git a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java -index 04fdefe4c38ef9ed3001f95b34d1632944fcae85..257eac851b6f4628b94784cab7a5cd4ec804944a 100644 +index 1fc16357283bb4f558ff02ca062440218b61ddbf..b6200fdef6d032cbaa3fdc4c2c8494fc0ad8ad65 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java +++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java -@@ -415,6 +415,7 @@ public class EnderMan extends Monster implements NeutralMob { +@@ -414,6 +414,7 @@ public class EnderMan extends Monster implements NeutralMob { if (this.isInvulnerableTo(world, source)) { return false; } else if (getRider() != null && this.isControllable()) { return super.hurtServer(world, source, amount); // Purpur - no teleporting on damage diff --git a/patches/server/0084-Stop-squids-floating-on-top-of-water.patch b/patches/server/0084-Stop-squids-floating-on-top-of-water.patch index 5dc27aa8e..c1d8ea306 100644 --- a/patches/server/0084-Stop-squids-floating-on-top-of-water.patch +++ b/patches/server/0084-Stop-squids-floating-on-top-of-water.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Stop squids floating on top of water diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 56225797f1cf0294c1e6aa824d8c146dca530e9f..bf22cfc2b770fd4dc73168745d535fb6598412ca 100644 +index c8fde4b0b89f8d401149d0029caa13dc0d608d35..e954682b8b38355f73ea2aba1a4677c23d47ed3e 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -4748,6 +4748,12 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -4778,6 +4778,12 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess return Mth.lerp(delta, this.yRotO, this.yRot); } @@ -22,7 +22,7 @@ index 56225797f1cf0294c1e6aa824d8c146dca530e9f..bf22cfc2b770fd4dc73168745d535fb6 public boolean updateFluidHeightAndDoFluidPushing(final TagKey fluid, final double flowScale) { if (this.touchingUnloadedChunk()) { diff --git a/src/main/java/net/minecraft/world/entity/animal/Squid.java b/src/main/java/net/minecraft/world/entity/animal/Squid.java -index 6275cb4ca2b06d8b1b3d53a2b79115bd36da4129..7891d015d2f8dadcff8f457145574ea8ba48fe8d 100644 +index 52a71d1b7585a6745b9dd7a87187d1060408563d..c08de12a2857fef431621c2260274cbfc6032e73 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Squid.java +++ b/src/main/java/net/minecraft/world/entity/animal/Squid.java @@ -78,6 +78,12 @@ public class Squid extends AgeableWaterCreature { diff --git a/patches/server/0086-Entities-can-use-portals.patch b/patches/server/0086-Entities-can-use-portals.patch index d93019c33..c0a5a1304 100644 --- a/patches/server/0086-Entities-can-use-portals.patch +++ b/patches/server/0086-Entities-can-use-portals.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Entities can use portals diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index bf22cfc2b770fd4dc73168745d535fb6598412ca..c5880e627ff48e5e176baf483c08f35a1af488f8 100644 +index e954682b8b38355f73ea2aba1a4677c23d47ed3e..692b4afe8616dac52f687baee86cbbd2af6763ec 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -3441,7 +3441,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3471,7 +3471,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess public void setAsInsidePortal(Portal portal, BlockPos pos) { if (this.isOnPortalCooldown()) { this.setPortalCooldown(); @@ -17,7 +17,7 @@ index bf22cfc2b770fd4dc73168745d535fb6598412ca..c5880e627ff48e5e176baf483c08f35a if (this.portalProcess != null && this.portalProcess.isSamePortal(portal)) { if (!this.portalProcess.isInsidePortalThisTick()) { this.portalProcess.updateEntryPosition(pos.immutable()); -@@ -4160,7 +4160,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -4194,7 +4194,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess // CraftBukkit end public boolean canUsePortal(boolean allowVehicles) { diff --git a/patches/server/0087-Customizable-wither-health-and-healing.patch b/patches/server/0087-Customizable-wither-health-and-healing.patch index a2a40749c..670d5fd4f 100644 --- a/patches/server/0087-Customizable-wither-health-and-healing.patch +++ b/patches/server/0087-Customizable-wither-health-and-healing.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Customizable wither health and healing Adds the ability to customize the health of the wither, as well as the amount that it heals, and how often. diff --git a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java -index 19a7f7926eeb9c4e4d5bbd5e4768d99c456e8f71..e808cd292afc9531d5ec6025e1e83076ba487c0f 100644 +index 1eecabe1cb09ed81172b9ac573b236718e80e08e..093dd2a5ac09767df7406e00d25985d0507957ef 100644 --- a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java +++ b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java -@@ -526,8 +526,10 @@ public class WitherBoss extends Monster implements RangedAttackMob { +@@ -525,8 +525,10 @@ public class WitherBoss extends Monster implements RangedAttackMob { } } diff --git a/patches/server/0088-Allow-toggling-special-MobSpawners-per-world.patch b/patches/server/0088-Allow-toggling-special-MobSpawners-per-world.patch index 601bc43a7..59783f017 100644 --- a/patches/server/0088-Allow-toggling-special-MobSpawners-per-world.patch +++ b/patches/server/0088-Allow-toggling-special-MobSpawners-per-world.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Allow toggling special MobSpawners per world In vanilla, these are all hardcoded on for world type 0 (overworld) and hardcoded off for every other world type. Default config behaviour matches this. diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index c05d0d836ced6db6b4a3e85fe0973dd7b1aaad81..7f12f6a0f8ea0a2570ccb8f6e7f786197ee0ef11 100644 +index 9451c6fa2307bc12b47a106f2d82508548b109a8..d7edb681c0299f9103e7bc9fa082617f61929c19 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -605,7 +605,24 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -606,7 +606,24 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe // CraftBukkit end this.tickTime = flag1; this.server = minecraftserver; diff --git a/patches/server/0090-Add-option-to-disable-zombie-aggressiveness-towards-.patch b/patches/server/0090-Add-option-to-disable-zombie-aggressiveness-towards-.patch index 8b6d208f1..f9d625089 100644 --- a/patches/server/0090-Add-option-to-disable-zombie-aggressiveness-towards-.patch +++ b/patches/server/0090-Add-option-to-disable-zombie-aggressiveness-towards-.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Add option to disable zombie aggressiveness towards villagers diff --git a/src/main/java/com/destroystokyo/paper/entity/ai/MobGoalHelper.java b/src/main/java/com/destroystokyo/paper/entity/ai/MobGoalHelper.java -index 3470720466fc81f977c18e3a97bb918926025a22..c8651af322927c46d075f88890fcd0476bd85440 100644 +index d5d617d72c1d160564e3e53d3c6bdffe3d868145..394d018c3c57989decc5c9a0950de158240150c7 100644 --- a/src/main/java/com/destroystokyo/paper/entity/ai/MobGoalHelper.java +++ b/src/main/java/com/destroystokyo/paper/entity/ai/MobGoalHelper.java @@ -136,6 +136,10 @@ public class MobGoalHelper { @@ -20,10 +20,10 @@ index 3470720466fc81f977c18e3a97bb918926025a22..c8651af322927c46d075f88890fcd047 ignored.add("goal_selector_1"); ignored.add("goal_selector_2"); diff --git a/src/main/java/net/minecraft/world/entity/monster/Drowned.java b/src/main/java/net/minecraft/world/entity/monster/Drowned.java -index 7dc7f8734ffb3c5e50c763cb4e750d20c6e22281..7b3c999a03d91c167dfc1a1c90750b2efd4eb675 100644 +index 58908fa7f13eda35104065e6477ee1a1cb42cf00..fef4417c167ad8526dbbfc0de3e8f2a2b55621ca 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Drowned.java +++ b/src/main/java/net/minecraft/world/entity/monster/Drowned.java -@@ -125,7 +125,19 @@ public class Drowned extends Zombie implements RangedAttackMob { +@@ -128,7 +128,19 @@ public class Drowned extends Zombie implements RangedAttackMob { this.goalSelector.addGoal(7, new RandomStrollGoal(this, 1.0)); this.targetSelector.addGoal(1, new HurtByTargetGoal(this, Drowned.class).setAlertOthers(ZombifiedPiglin.class)); this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, 10, true, false, (target, world) -> this.okTarget(target))); diff --git a/patches/server/0091-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch b/patches/server/0091-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch index 8a33fca32..08d1f639c 100644 --- a/patches/server/0091-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch +++ b/patches/server/0091-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch @@ -5,20 +5,20 @@ Subject: [PATCH] Add predicate to recipe's ExactChoice ingredient diff --git a/src/main/java/net/minecraft/world/item/crafting/Ingredient.java b/src/main/java/net/minecraft/world/item/crafting/Ingredient.java -index 812f919a7a7e309c8513f44104f092496037608f..10730b307971915f52b3e41068a864b8ee1352b4 100644 +index 0b0054b3d5d56ba24e1aee0e3ab56ea5b01a82a8..2e3a834643d56543418e9b9beb9d3448bf059d22 100644 --- a/src/main/java/net/minecraft/world/item/crafting/Ingredient.java +++ b/src/main/java/net/minecraft/world/item/crafting/Ingredient.java -@@ -45,6 +45,7 @@ public final class Ingredient implements Predicate { +@@ -45,6 +45,7 @@ public final class Ingredient implements StackedContents.IngredientInfo itemStacks; + private java.util.Set itemStacks; // Paper - Improve exact choice recipe ingredients + public Predicate predicate; // Purpur public boolean isExact() { return this.itemStacks != null; -@@ -100,6 +101,11 @@ public final class Ingredient implements Predicate { - - return false; +@@ -100,6 +101,11 @@ public final class Ingredient implements StackedContents.IngredientInfo> list = this.items(); - + return itemstack.is(this.values); + } diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftRecipe.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftRecipe.java -index 3592091c6d1371224e82e1f95b003951ad2f8779..4fdc78a9c74b42a8894030221e0452493d68020e 100644 +index 4864e2016cb1d377425297fd1c52b383632cb59e..fc0e93a936dadb0dca758207297f92a22f3955d4 100644 --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftRecipe.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftRecipe.java -@@ -38,6 +38,7 @@ public interface CraftRecipe extends Recipe { +@@ -36,6 +36,7 @@ public interface CraftRecipe extends Recipe { stack = Ingredient.of(((RecipeChoice.MaterialChoice) bukkit).getChoices().stream().map((mat) -> CraftItemType.bukkitToMinecraft(mat))); } else if (bukkit instanceof RecipeChoice.ExactChoice) { stack = Ingredient.ofStacks(((RecipeChoice.ExactChoice) bukkit).getChoices().stream().map((mat) -> CraftItemStack.asNMSCopy(mat)).toList()); diff --git a/patches/server/0092-Flying-squids-Oh-my.patch b/patches/server/0092-Flying-squids-Oh-my.patch index df0ec8a52..b0e155e86 100644 --- a/patches/server/0092-Flying-squids-Oh-my.patch +++ b/patches/server/0092-Flying-squids-Oh-my.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Flying squids! Oh my! diff --git a/src/main/java/net/minecraft/world/entity/GlowSquid.java b/src/main/java/net/minecraft/world/entity/GlowSquid.java -index 27aee968718af1ae78e2076ddc890114b2c9bb94..0f5be53c6f6a66c61dc3f2bebeb18ca61d06c10d 100644 +index 5a49c44b8f18a1c16f18a4798c733f99ca4e47b7..e282af89d635a2866a8655d1e4956f1bd2c6a85b 100644 --- a/src/main/java/net/minecraft/world/entity/GlowSquid.java +++ b/src/main/java/net/minecraft/world/entity/GlowSquid.java @@ -43,6 +43,11 @@ public class GlowSquid extends Squid { @@ -21,7 +21,7 @@ index 27aee968718af1ae78e2076ddc890114b2c9bb94..0f5be53c6f6a66c61dc3f2bebeb18ca6 protected ParticleOptions getInkParticle() { return ParticleTypes.GLOW_SQUID_INK; diff --git a/src/main/java/net/minecraft/world/entity/animal/Squid.java b/src/main/java/net/minecraft/world/entity/animal/Squid.java -index 7891d015d2f8dadcff8f457145574ea8ba48fe8d..4d2992a16865fa60dd38d0ff6dc341f9c5f6bd00 100644 +index c08de12a2857fef431621c2260274cbfc6032e73..8920fcbb5c76e11a91a9a8702525cd59b18fa057 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Squid.java +++ b/src/main/java/net/minecraft/world/entity/animal/Squid.java @@ -84,6 +84,15 @@ public class Squid extends AgeableWaterCreature { diff --git a/patches/server/0094-Configurable-daylight-cycle.patch b/patches/server/0094-Configurable-daylight-cycle.patch index 7217e681b..e08fdd266 100644 --- a/patches/server/0094-Configurable-daylight-cycle.patch +++ b/patches/server/0094-Configurable-daylight-cycle.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Configurable daylight cycle diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index e1858bc2b043f0edf5d3f1393340f40aa7bcb36a..1349b2bbdc38e9f13617c78d3f1079b9e36aece4 100644 +index 0cce9061c49a3556d886381fac3bfc78390b7ec4..6ab178e0541f027791406d547c38f63c1d72ef25 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1858,7 +1858,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop explosionDensityCache = new HashMap<>(); // Paper - Optimize explosions public java.util.ArrayDeque redstoneUpdateInfos; // Paper - Faster redstone torch rapid clock removal; Move from Map in BlockRedstoneTorch to here @@ -95,7 +95,7 @@ index 77093e49fd60993e7cb6bf5712ec53e0fe221776..34e8eb828be517d9ee3973597c74c5ca public CraftWorld getWorld() { return this.world; } -@@ -844,6 +887,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl +@@ -845,6 +888,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl this.spigotConfig = new org.spigotmc.SpigotWorldConfig(((net.minecraft.world.level.storage.PrimaryLevelData) worlddatamutable).getLevelName()); // Spigot this.paperConfig = paperWorldConfigCreator.apply(this.spigotConfig); // Paper - create paper world config this.purpurConfig = new org.purpurmc.purpur.PurpurWorldConfig(((net.minecraft.world.level.storage.PrimaryLevelData) worlddatamutable).getLevelName(), env); // Purpur diff --git a/patches/server/0099-Make-entity-breeding-times-configurable.patch b/patches/server/0099-Make-entity-breeding-times-configurable.patch index 2219ab2f3..c2d72db4c 100644 --- a/patches/server/0099-Make-entity-breeding-times-configurable.patch +++ b/patches/server/0099-Make-entity-breeding-times-configurable.patch @@ -47,10 +47,10 @@ index 4637d062b6a4c4d6de2ef54ec3cfdeb4344ff38e..9987d28ea145f6d0126cb4ea22001e09 entityanimal.resetLove(); worldserver.broadcastEntityEvent(this, (byte) 18); diff --git a/src/main/java/net/minecraft/world/entity/animal/Bee.java b/src/main/java/net/minecraft/world/entity/animal/Bee.java -index d000acd339a1967d2c448ed8d66c4f1347f797fd..51b736979e43cd0e60a8ecaf2cf95511b9f4d858 100644 +index 5ad7612788c4ef5cc3a6cf5f706999aa6eed4718..235a2b732fd62bf7e8c34c14333c41a49a2418e0 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Bee.java +++ b/src/main/java/net/minecraft/world/entity/animal/Bee.java -@@ -491,6 +491,11 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { +@@ -495,6 +495,11 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.beeScale); } @@ -63,7 +63,7 @@ index d000acd339a1967d2c448ed8d66c4f1347f797fd..51b736979e43cd0e60a8ecaf2cf95511 public int getRemainingPersistentAngerTime() { return (Integer) this.entityData.get(Bee.DATA_REMAINING_ANGER_TIME); diff --git a/src/main/java/net/minecraft/world/entity/animal/Cat.java b/src/main/java/net/minecraft/world/entity/animal/Cat.java -index 6c773af722ccb9e144d8858a013c120ecbbcfa4c..f79146925e99da08492e7b445006be003a56f340 100644 +index 821499778e2b97e39f5d439c4a8c55a283610750..4be5d2c0ed8d314e09d43cb00d52f2452f84a426 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Cat.java +++ b/src/main/java/net/minecraft/world/entity/animal/Cat.java @@ -129,6 +129,11 @@ public class Cat extends TamableAnimal implements VariantHolder { @@ -140,10 +140,10 @@ index 355965d88d5ef008111cc72f39e4f8d35741fdfd..0024345d1906e6fb6bbdb189f6d4dbc6 this.partner.resetLove(); worldserver.addFreshEntityWithPassengers(entityfox, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.BREEDING); // CraftBukkit - added SpawnReason diff --git a/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java b/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java -index c7039d7d5e38392fef8787f6e245a44842e2f2a3..3397fa689c6e36981f3944586c2059c8eb7b1e50 100644 +index e5d8f23032244c77b4e2bcb8ead0b20a27acadf7..f17c30c55a75eba58fcda2407d8039f64e646e7f 100644 --- a/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java +++ b/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java -@@ -87,6 +87,11 @@ public class MushroomCow extends Cow implements Shearable, VariantHolder { @@ -252,10 +252,10 @@ index b0cdc25f6592d44a3ad3fdf4d461e95887105257..629a0729cae629dea89fdf491afa9eed @Override diff --git a/src/main/java/net/minecraft/world/entity/animal/Sheep.java b/src/main/java/net/minecraft/world/entity/animal/Sheep.java -index 38799a817742b1bbaf921f1e24cf2fc44ab52050..8d94e1a33ac7748ded0f75212738ba13bd18d492 100644 +index d7aa0f0408f1778907106ff65fda55f36580c6fd..59fe849d3b7a41b2a606031b7bf494affc0d148d 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Sheep.java +++ b/src/main/java/net/minecraft/world/entity/animal/Sheep.java -@@ -114,6 +114,11 @@ public class Sheep extends Animal implements Shearable { +@@ -107,6 +107,11 @@ public class Sheep extends Animal implements Shearable { this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.sheepScale); } @@ -284,7 +284,7 @@ index 500676a78aedc525aca989ccd0380cd2cc1a711b..6b2e27e2f8aeccfc4d84c73be0fa5a04 this.entityData.set(Turtle.HOME_POS, pos); } diff --git a/src/main/java/net/minecraft/world/entity/animal/Wolf.java b/src/main/java/net/minecraft/world/entity/animal/Wolf.java -index 40a766e20d1a2111d561cc05aa49e2ac50187d19..bb2e5e97d33ffaf95a6c88b3c077de1a89a60c6e 100644 +index 975f1a20ceb9f98c9922278640bf0ba1d7b606a4..71f76046b37705d064dc532ae1244ecc2920393a 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Wolf.java +++ b/src/main/java/net/minecraft/world/entity/animal/Wolf.java @@ -152,6 +152,11 @@ public class Wolf extends TamableAnimal implements NeutralMob, VariantHolder> { @@ -458,7 +458,7 @@ index d3b9763aa745154fd796f725c2d5babfaaf22050..069783ed1bb4bbb7dece4b7883fe4d30 return createBaseHorseAttributes().add(Attributes.MAX_HEALTH, 15.0D).add(Attributes.MOVEMENT_SPEED, 0.20000000298023224D); } diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/TraderLlama.java b/src/main/java/net/minecraft/world/entity/animal/horse/TraderLlama.java -index 10074787bbb3935685b9bd78c018309b2e468d87..845f75a48f07e7f25e71ed7b04a2f6b1dc87cbb8 100644 +index 2f0b7ebb8bc9245e940bea76b6563b01722ce961..ec7b3fc6dbc78b226d33b517cbe2eed8eaa35d89 100644 --- a/src/main/java/net/minecraft/world/entity/animal/horse/TraderLlama.java +++ b/src/main/java/net/minecraft/world/entity/animal/horse/TraderLlama.java @@ -70,6 +70,11 @@ public class TraderLlama extends Llama { @@ -506,7 +506,7 @@ index d08ff3f70ed3024dba7cf4405ba08d547ed5bf2d..464a16df15d8759d66f94ad080d1ea28 @Override diff --git a/src/main/java/net/minecraft/world/entity/monster/Strider.java b/src/main/java/net/minecraft/world/entity/monster/Strider.java -index 6a45a62c578f033558c26935681f7de74dd98bac..0cc49b0a600a5e6fb4fc21e698e3a5fef5996df1 100644 +index 1ea797619359cca106aafa0b1e14a5cb00af582a..bfafa45575b99f08cbeb234bdb9c287f9f531b16 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Strider.java +++ b/src/main/java/net/minecraft/world/entity/monster/Strider.java @@ -120,6 +120,11 @@ public class Strider extends Animal implements ItemSteerable, Saddleable { diff --git a/patches/server/0100-Apply-display-names-from-item-forms-of-entities-to-e.patch b/patches/server/0100-Apply-display-names-from-item-forms-of-entities-to-e.patch index 2ad0ca4d6..1cbf33a20 100644 --- a/patches/server/0100-Apply-display-names-from-item-forms-of-entities-to-e.patch +++ b/patches/server/0100-Apply-display-names-from-item-forms-of-entities-to-e.patch @@ -56,7 +56,7 @@ index fd0e78a2318e3950d011c17358245e107b38154a..0fcab828e81176323cbdf16c0ec714d9 } diff --git a/src/main/java/net/minecraft/world/entity/vehicle/AbstractBoat.java b/src/main/java/net/minecraft/world/entity/vehicle/AbstractBoat.java -index e523f651e8776a89ffba015921d708f569fad8f3..56c265940208bc94f531a5af94f564b59f35ebf3 100644 +index a301f32a292afb010f3888732e339897b176243d..1a4fb057025689a22b3dd05f531f0d8639d7e47b 100644 --- a/src/main/java/net/minecraft/world/entity/vehicle/AbstractBoat.java +++ b/src/main/java/net/minecraft/world/entity/vehicle/AbstractBoat.java @@ -930,7 +930,13 @@ public abstract class AbstractBoat extends VehicleEntity implements Leashable { diff --git a/patches/server/0101-Set-name-visible-when-using-a-Name-Tag-on-an-Armor-S.patch b/patches/server/0101-Set-name-visible-when-using-a-Name-Tag-on-an-Armor-S.patch index 6ec3820a3..8eab72bf5 100644 --- a/patches/server/0101-Set-name-visible-when-using-a-Name-Tag-on-an-Armor-S.patch +++ b/patches/server/0101-Set-name-visible-when-using-a-Name-Tag-on-an-Armor-S.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Set name visible when using a Name Tag on an Armor Stand diff --git a/src/main/java/net/minecraft/world/item/NameTagItem.java b/src/main/java/net/minecraft/world/item/NameTagItem.java -index 000d1863bfba98b5132dfc6743362d687b2f54f3..20fece9908382f40b4082f7b1fb7d41914ae31be 100644 +index df9cdcb9544a171a5a07c65ba0150933fb70d5fc..793bd6392ca3c3792306a20538233e4d7fb69b86 100644 --- a/src/main/java/net/minecraft/world/item/NameTagItem.java +++ b/src/main/java/net/minecraft/world/item/NameTagItem.java @@ -23,6 +23,7 @@ public class NameTagItem extends Item { diff --git a/patches/server/0102-Add-config-for-allowing-Endermen-to-despawn-even-whi.patch b/patches/server/0102-Add-config-for-allowing-Endermen-to-despawn-even-whi.patch index 008853b5e..c2f2b7472 100644 --- a/patches/server/0102-Add-config-for-allowing-Endermen-to-despawn-even-whi.patch +++ b/patches/server/0102-Add-config-for-allowing-Endermen-to-despawn-even-whi.patch @@ -8,10 +8,10 @@ This should help to reduce the amount of dirt, gravel, grass, and etc. that Endermen like to randomly place all over the world. diff --git a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java -index 257eac851b6f4628b94784cab7a5cd4ec804944a..a8e2a2096f209fcd24e7921947556691fe6c254a 100644 +index b6200fdef6d032cbaa3fdc4c2c8494fc0ad8ad65..bc17512c6077777169c9759fa445e21f9e51543b 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java +++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java -@@ -474,7 +474,7 @@ public class EnderMan extends Monster implements NeutralMob { +@@ -473,7 +473,7 @@ public class EnderMan extends Monster implements NeutralMob { @Override public boolean requiresCustomPersistence() { diff --git a/patches/server/0103-Add-configurable-snowball-damage.patch b/patches/server/0103-Add-configurable-snowball-damage.patch index 80a91011e..d4248b989 100644 --- a/patches/server/0103-Add-configurable-snowball-damage.patch +++ b/patches/server/0103-Add-configurable-snowball-damage.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Add configurable snowball damage diff --git a/src/main/java/net/minecraft/world/entity/projectile/Snowball.java b/src/main/java/net/minecraft/world/entity/projectile/Snowball.java -index 70961e151666a0ecf5b791853f4581eaebbdcc8b..8c853b6fbbc966ee6ba9ad3770d4e2e2a50ef388 100644 +index 048ca5232d71f07d8ba7d3eaf0236660494c6b35..f712963fcd80535eee2bd04ec55ae1abdadef2bd 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/Snowball.java +++ b/src/main/java/net/minecraft/world/entity/projectile/Snowball.java @@ -58,7 +58,7 @@ public class Snowball extends ThrowableItemProjectile { diff --git a/patches/server/0104-Changeable-Mob-Left-Handed-Chance.patch b/patches/server/0104-Changeable-Mob-Left-Handed-Chance.patch index 366814408..f806c37a9 100644 --- a/patches/server/0104-Changeable-Mob-Left-Handed-Chance.patch +++ b/patches/server/0104-Changeable-Mob-Left-Handed-Chance.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Changeable Mob Left Handed Chance diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java -index e99b72b89abdded3e988bd1a92d36055fb1a84dc..784bf7754c43b02d337da61d6dd7bed134465d11 100644 +index 0c55e69bbdc673a87b5ac5ee740817aca2434bb6..81fb0826a1e4ec3ab36447ec0a4dcbf1196cb441 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java @@ -1428,7 +1428,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab diff --git a/patches/server/0105-Add-boat-fall-damage-config.patch b/patches/server/0105-Add-boat-fall-damage-config.patch index b09926310..adf5f8fb5 100644 --- a/patches/server/0105-Add-boat-fall-damage-config.patch +++ b/patches/server/0105-Add-boat-fall-damage-config.patch @@ -5,16 +5,16 @@ Subject: [PATCH] Add boat fall damage config diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index cbe608df708d5530813230cddd78568c1a63b448..36058eac6f861ae919bbe8ae6386e8f841586ac2 100644 +index 6f769f90038042ac11cdd59f36d7f3fd85cfd490..f63c1eca0c7ecaec70aaae56c479aaae42df3008 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -1442,7 +1442,16 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple +@@ -1439,7 +1439,16 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple if (this.isInvulnerableTo(world, source)) { return false; } else { -- if (source.is(DamageTypeTags.IS_FALL) && getRootVehicle() instanceof net.minecraft.world.entity.vehicle.AbstractMinecart && level().purpurConfig.minecartControllable && !level().purpurConfig.minecartControllableFallDamage) return false; // Purpur +- if (source.is(net.minecraft.tags.DamageTypeTags.IS_FALL) && getRootVehicle() instanceof net.minecraft.world.entity.vehicle.AbstractMinecart && level().purpurConfig.minecartControllable && !level().purpurConfig.minecartControllableFallDamage) return false; // Purpur + // Purpur start -+ if (source.is(DamageTypeTags.IS_FALL)) { // Purpur ++ if (source.is(net.minecraft.tags.DamageTypeTags.IS_FALL)) { // Purpur + if (getRootVehicle() instanceof net.minecraft.world.entity.vehicle.AbstractMinecart && level().purpurConfig.minecartControllable && !level().purpurConfig.minecartControllableFallDamage) { + return false; + } @@ -23,9 +23,9 @@ index cbe608df708d5530813230cddd78568c1a63b448..36058eac6f861ae919bbe8ae6386e8f8 + } + } + // Purpur end - boolean flag = this.server.isDedicatedServer() && this.isPvpAllowed() && source.is(DamageTypeTags.IS_FALL); + Entity entity = source.getEntity(); - if (!flag && this.spawnInvulnerableTime > 0 && !source.is(DamageTypeTags.BYPASSES_INVULNERABILITY)) { + if (entity instanceof net.minecraft.world.entity.player.Player) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java index 897fac3caeab051cf2634d4e8b3dca62b389acd8..3bd6931d3b19bd9687cdaee2b245cd3f2e9df0bc 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java diff --git a/patches/server/0108-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch b/patches/server/0108-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch index 4e8e82f3e..2aa721605 100644 --- a/patches/server/0108-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch +++ b/patches/server/0108-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch @@ -90,10 +90,10 @@ index 8508ac7de8cda3127b73e11ff4aee62502e65ead..b1544e028d5a9b84b944e1fb5a12bb16 throwHalfStack(entity, this.trades, villager); } diff --git a/src/main/java/net/minecraft/world/entity/ai/behavior/VillagerGoalPackages.java b/src/main/java/net/minecraft/world/entity/ai/behavior/VillagerGoalPackages.java -index bb65d46967cb04f611b3c9c97d5732cfb21ede9b..7f4156e4690bbd57f9e9141f008851062cae733d 100644 +index 41f4107101bcd5d753b72cdbabe7946a1975c653..4475b406dde30e5be8ce9d2ff45f8d22d242690c 100644 --- a/src/main/java/net/minecraft/world/entity/ai/behavior/VillagerGoalPackages.java +++ b/src/main/java/net/minecraft/world/entity/ai/behavior/VillagerGoalPackages.java -@@ -52,8 +52,13 @@ public class VillagerGoalPackages { +@@ -74,8 +74,13 @@ public class VillagerGoalPackages { } public static ImmutableList>> getWorkPackage(VillagerProfession profession, float speed) { @@ -136,7 +136,7 @@ index a0e0692d17760f440fe81d52887284c787e562db..ab9bebc07b5228dbc0d3ba4b0f7d1bbe brain.setMemory(MemoryModuleType.SECONDARY_JOB_SITE, list); } else { diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java -index 3528cc251ebae1011ec3dac4b893157e446a1e22..280f35782e4b336465ed45373e7843dd9f697d85 100644 +index 973dd0cdccb7787bdb36e4c1e8135490ab59c317..0ceeaef16ce0c4abcc3bd7350ed147c91bda8d64 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java @@ -227,7 +227,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler diff --git a/patches/server/0110-Configurable-chance-for-wolves-to-spawn-rabid.patch b/patches/server/0110-Configurable-chance-for-wolves-to-spawn-rabid.patch index 9d983622e..ce02d2cce 100644 --- a/patches/server/0110-Configurable-chance-for-wolves-to-spawn-rabid.patch +++ b/patches/server/0110-Configurable-chance-for-wolves-to-spawn-rabid.patch @@ -7,7 +7,7 @@ Configurable chance to spawn a wolf that is rabid. Rabid wolves attack all players, mobs, and animals. diff --git a/src/main/java/net/minecraft/world/entity/animal/Wolf.java b/src/main/java/net/minecraft/world/entity/animal/Wolf.java -index bb2e5e97d33ffaf95a6c88b3c077de1a89a60c6e..34ca92be146bec3d2f6e46f473c3e68b0a97b168 100644 +index 71f76046b37705d064dc532ae1244ecc2920393a..e0e8ef7f579c36b082dbcd8c4f330fbc227e0d00 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Wolf.java +++ b/src/main/java/net/minecraft/world/entity/animal/Wolf.java @@ -103,6 +103,37 @@ public class Wolf extends TamableAnimal implements NeutralMob, VariantHolder implements +@@ -336,6 +336,7 @@ public class ChestBlock extends AbstractChestBlock implements } public static boolean isBlockedChestByBlock(BlockGetter world, BlockPos pos) { diff --git a/patches/server/0114-Implement-TPSBar.patch b/patches/server/0114-Implement-TPSBar.patch index 8666558cc..d115261b3 100644 --- a/patches/server/0114-Implement-TPSBar.patch +++ b/patches/server/0114-Implement-TPSBar.patch @@ -17,10 +17,10 @@ index 02c7b57eef9a4462af413415ff268b9daeea0b93..632fd1b7d3474889b700b153d9cb4967 if (environment.includeIntegrated) { diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 1349b2bbdc38e9f13617c78d3f1079b9e36aece4..b389d24e6f6c2cb1d0592a48bd5b41aa818aad75 100644 +index 6ab178e0541f027791406d547c38f63c1d72ef25..791fa782d5092e17f332dd6660c42d151182e854 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1158,6 +1158,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop byteAllowed) { diff --git a/patches/server/0117-Full-netherite-armor-grants-fire-resistance.patch b/patches/server/0117-Full-netherite-armor-grants-fire-resistance.patch index 9d0818491..f37c3c4f7 100644 --- a/patches/server/0117-Full-netherite-armor-grants-fire-resistance.patch +++ b/patches/server/0117-Full-netherite-armor-grants-fire-resistance.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Full netherite armor grants fire resistance diff --git a/src/main/java/net/minecraft/world/entity/player/Player.java b/src/main/java/net/minecraft/world/entity/player/Player.java -index 773be9c116a664e4d0349c58c00df34f203f8ebf..ae5f7c275003b6fb9f6c5a0277482b4fddf8e74c 100644 +index bf6c8abe3c0ba4144c37f2ee53bfb96563340e87..3dbb473655c4f115e28ce31fa647cd0cb7fbe3c6 100644 --- a/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java -@@ -353,6 +353,17 @@ public abstract class Player extends LivingEntity { +@@ -356,6 +356,17 @@ public abstract class Player extends LivingEntity { this.turtleHelmetTick(); } diff --git a/patches/server/0118-Add-mobGriefing-bypass-to-everything-affected.patch b/patches/server/0118-Add-mobGriefing-bypass-to-everything-affected.patch index e8805486c..933005b6b 100644 --- a/patches/server/0118-Add-mobGriefing-bypass-to-everything-affected.patch +++ b/patches/server/0118-Add-mobGriefing-bypass-to-everything-affected.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add mobGriefing bypass to everything affected diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index f8ec83a135feab4140ec075ee45250ebfc511993..0b9ece407fb90636d3869e85cd8c6c0a5626e8fa 100644 +index 1add518a30e1f44849aea6c805cf3cef849f1992..fe183dcfb32e915af4c58f8b40c35e349e39d189 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -1903,7 +1903,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -1914,7 +1914,7 @@ public abstract class LivingEntity extends Entity implements Attackable { boolean flag = false; if (this.dead && adversary instanceof WitherBoss) { // Paper @@ -18,10 +18,10 @@ index f8ec83a135feab4140ec075ee45250ebfc511993..0b9ece407fb90636d3869e85cd8c6c0a BlockState iblockdata = Blocks.WITHER_ROSE.defaultBlockState(); diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java -index 784bf7754c43b02d337da61d6dd7bed134465d11..01da954d982b59bca8d8b76e66021ee04138a923 100644 +index 81fb0826a1e4ec3ab36447ec0a4dcbf1196cb441..0846becd1da3b7b311c491be176a3394c258dd2e 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java -@@ -706,7 +706,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab +@@ -716,7 +716,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab Level world = this.level(); if (world instanceof ServerLevel worldserver) { @@ -92,7 +92,7 @@ index 9d245d08be61d7edee9138196ae3bf52023e3993..771bb96032149a8573d1de14fa2ab190 } else if (this.nextStartTick > 0) { --this.nextStartTick; diff --git a/src/main/java/net/minecraft/world/entity/animal/Fox.java b/src/main/java/net/minecraft/world/entity/animal/Fox.java -index 0024345d1906e6fb6bbdb189f6d4dbc631b90f9f..3870803139f162793598cef8f2700e0940aeb66e 100644 +index fe7c99a3f1450bb86a7949b9450e63c5b8f66d8f..cbbf6b8c72a1897d819ce3a448311c28eb6b1bd7 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Fox.java +++ b/src/main/java/net/minecraft/world/entity/animal/Fox.java @@ -1370,7 +1370,7 @@ public class Fox extends Animal implements VariantHolder { @@ -105,7 +105,7 @@ index 0024345d1906e6fb6bbdb189f6d4dbc631b90f9f..3870803139f162793598cef8f2700e09 if (iblockdata.is(Blocks.SWEET_BERRY_BUSH)) { diff --git a/src/main/java/net/minecraft/world/entity/animal/Rabbit.java b/src/main/java/net/minecraft/world/entity/animal/Rabbit.java -index 629a0729cae629dea89fdf491afa9eed96e7a38a..d0ab026af1642b6b3094d37a0c994deb633da577 100644 +index b92965674200836e367a0632487226ed124fbe2d..557b9bab60d7bb9d611929a524cc796cdf2d651d 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Rabbit.java +++ b/src/main/java/net/minecraft/world/entity/animal/Rabbit.java @@ -634,7 +634,7 @@ public class Rabbit extends Animal implements VariantHolder { @@ -131,7 +131,7 @@ index 3f97118c8ce4f4e9a5f2a2fc3acdc68a6828baed..6c12817e00125a3957df1a37a06a5c6a } diff --git a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java -index f356110850dd71d066243ec29853f547d94e4400..cb9f73605e5cfbbff9935340529a2daa782ed10b 100644 +index 8cfe0d5f09fa08c3606f29ce243d6ce5f84090a0..bc4a86cc4110453709dcf5a6808a6c54ed3a75d7 100644 --- a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java +++ b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java @@ -591,7 +591,7 @@ public class EnderDragon extends Mob implements Enemy { @@ -144,10 +144,10 @@ index f356110850dd71d066243ec29853f547d94e4400..cb9f73605e5cfbbff9935340529a2daa // flag1 = worldserver.removeBlock(blockposition, false) || flag1; flag1 = true; diff --git a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java -index e808cd292afc9531d5ec6025e1e83076ba487c0f..92711d5460b128310739188347f68be884635ec3 100644 +index 093dd2a5ac09767df7406e00d25985d0507957ef..0ee25a30186b3ce367853a1955640f730df17942 100644 --- a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java +++ b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java -@@ -499,7 +499,7 @@ public class WitherBoss extends Monster implements RangedAttackMob { +@@ -498,7 +498,7 @@ public class WitherBoss extends Monster implements RangedAttackMob { if (this.destroyBlocksTick > 0) { --this.destroyBlocksTick; @@ -157,10 +157,10 @@ index e808cd292afc9531d5ec6025e1e83076ba487c0f..92711d5460b128310739188347f68be8 j = Mth.floor(this.getBbWidth() / 2.0F + 1.0F); diff --git a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java -index a8e2a2096f209fcd24e7921947556691fe6c254a..b150e41077ecf23dca828a519a545f93d256eb7c 100644 +index bc17512c6077777169c9759fa445e21f9e51543b..7c738e8d5a7eaef2f8c2d04085683c3baff4640d 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java +++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java -@@ -522,7 +522,15 @@ public class EnderMan extends Monster implements NeutralMob { +@@ -521,7 +521,15 @@ public class EnderMan extends Monster implements NeutralMob { @Override public boolean canUse() { if (!enderman.level().purpurConfig.endermanAllowGriefing) return false; // Purpur @@ -177,7 +177,7 @@ index a8e2a2096f209fcd24e7921947556691fe6c254a..b150e41077ecf23dca828a519a545f93 } @Override -@@ -568,7 +576,15 @@ public class EnderMan extends Monster implements NeutralMob { +@@ -567,7 +575,15 @@ public class EnderMan extends Monster implements NeutralMob { @Override public boolean canUse() { if (!enderman.level().purpurConfig.endermanAllowGriefing) return false; // Purpur @@ -195,7 +195,7 @@ index a8e2a2096f209fcd24e7921947556691fe6c254a..b150e41077ecf23dca828a519a545f93 @Override diff --git a/src/main/java/net/minecraft/world/entity/monster/Evoker.java b/src/main/java/net/minecraft/world/entity/monster/Evoker.java -index 72d855a22e1507ad5f735df17db820c9b3fb2251..63ddac9c83d70107dace11fe1f033d7e17b1541a 100644 +index 354e3f82c26cb5dde524bea3c4bfd593fb919698..db3f7befb52ab58240ca6a8a101a955d4068768e 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Evoker.java +++ b/src/main/java/net/minecraft/world/entity/monster/Evoker.java @@ -367,7 +367,7 @@ public class Evoker extends SpellcasterIllager { @@ -208,10 +208,10 @@ index 72d855a22e1507ad5f735df17db820c9b3fb2251..63ddac9c83d70107dace11fe1f033d7e } else { List list = worldserver.getNearbyEntities(Sheep.class, this.wololoTargeting, Evoker.this, Evoker.this.getBoundingBox().inflate(16.0D, 4.0D, 16.0D)); diff --git a/src/main/java/net/minecraft/world/entity/monster/Ravager.java b/src/main/java/net/minecraft/world/entity/monster/Ravager.java -index fdf30a72c6c1bf4024592dc3071fc101256a1138..f257258473e036ae60d9463ae97d848192a61af7 100644 +index 3d49ee1c5e4dbbb76f03075ad4a5b326ab056699..265c84c778eb995d7da88fdb760fed5fb62bcda7 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Ravager.java +++ b/src/main/java/net/minecraft/world/entity/monster/Ravager.java -@@ -184,7 +184,7 @@ public class Ravager extends Raider { +@@ -181,7 +181,7 @@ public class Ravager extends Raider { if (world instanceof ServerLevel) { ServerLevel worldserver = (ServerLevel) world; @@ -249,10 +249,10 @@ index c31a72bad0b75940ea550acf47fab2220ff669ff..9c58d01fc7ba148d4e5d50731eaee71a BlockPos blockposition = BlockPos.containing(this.mob.getX(), this.mob.getY() + 0.5D, this.mob.getZ()).relative(this.selectedDirection); BlockState iblockdata = this.mob.level().getBlockState(blockposition); diff --git a/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java b/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java -index 23673d9ce87acda718d12fce9af0ef5f27983f1a..f0decc0f4421a6dcd640ad8f0bfb56249bf31944 100644 +index fd756b9f51d3ca857ea520288230afa5ab455b95..26090db2ed0cbd99e2f50368ba9f2bf6e56670da 100644 --- a/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java +++ b/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java -@@ -430,7 +430,7 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento +@@ -438,7 +438,7 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento @Override public boolean wantsToPickUp(ServerLevel world, ItemStack stack) { @@ -291,10 +291,10 @@ index 2f00676f62478897ae4931ea06e047567c407535..55ea7f82fac9a3de6d7e0725a9b6ea08 // CraftBukkit start - fire ExplosionPrimeEvent ExplosionPrimeEvent event = new ExplosionPrimeEvent((org.bukkit.entity.Explosive) this.getBukkitEntity()); diff --git a/src/main/java/net/minecraft/world/entity/projectile/Projectile.java b/src/main/java/net/minecraft/world/entity/projectile/Projectile.java -index af8dc4a57987cc84cb1002f2e5f25c28ec98173f..a7df9c2a3f210bc944cf76cdcc8d2a9484704bd1 100644 +index 0dbfa1e9ae1f0b8b9c4e9de59a7844ae96f63077..40a1514637a6a26666ba877e6dcf5bc42bd54a51 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/Projectile.java +++ b/src/main/java/net/minecraft/world/entity/projectile/Projectile.java -@@ -510,7 +510,7 @@ public abstract class Projectile extends Entity implements TraceableEntity { +@@ -498,7 +498,7 @@ public abstract class Projectile extends Entity implements TraceableEntity { public boolean mayInteract(ServerLevel world, BlockPos pos) { Entity entity = this.getOwner(); @@ -317,7 +317,7 @@ index bb159ea4baf208aab6d6fcfbbddacd5b089b55c8..588b07ec4501924a49264183b414a7fd // CraftBukkit end } diff --git a/src/main/java/net/minecraft/world/entity/raid/Raider.java b/src/main/java/net/minecraft/world/entity/raid/Raider.java -index ab132041982df2a701e4baea8195873f31b4a5fb..722c1660cf6b93d0f9c05cafe587b1834c5c3a22 100644 +index cee1e4db2312efb4843c4b6dc18f4af10b91d304..68525419f18c18931d771d66fb15c9301d611416 100644 --- a/src/main/java/net/minecraft/world/entity/raid/Raider.java +++ b/src/main/java/net/minecraft/world/entity/raid/Raider.java @@ -345,7 +345,7 @@ public abstract class Raider extends PatrollingMonster { @@ -330,7 +330,7 @@ index ab132041982df2a701e4baea8195873f31b4a5fb..722c1660cf6b93d0f9c05cafe587b183 return true; } else if (this.mob.getCurrentRaid().isOver()) { diff --git a/src/main/java/net/minecraft/world/level/block/CropBlock.java b/src/main/java/net/minecraft/world/level/block/CropBlock.java -index 1ada5ed825501666addacf527a513ab7bd4a3a58..49484773e67eb84e7dadc993406edd6da568dcd5 100644 +index 1967ff3fcb94988be85985c4754904f0077de066..8cf8aeb34cba078bc7a554f03054d580d96fe908 100644 --- a/src/main/java/net/minecraft/world/level/block/CropBlock.java +++ b/src/main/java/net/minecraft/world/level/block/CropBlock.java @@ -180,7 +180,7 @@ public class CropBlock extends BushBlock implements BonemealableBlock { diff --git a/patches/server/0120-Add-EntityTeleportHinderedEvent.patch b/patches/server/0120-Add-EntityTeleportHinderedEvent.patch index 16d595c91..d12358c54 100644 --- a/patches/server/0120-Add-EntityTeleportHinderedEvent.patch +++ b/patches/server/0120-Add-EntityTeleportHinderedEvent.patch @@ -17,7 +17,7 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . diff --git a/src/main/java/net/minecraft/world/level/block/EndGatewayBlock.java b/src/main/java/net/minecraft/world/level/block/EndGatewayBlock.java -index a7a21f071161fb7e73a046717d2462f871ab653c..abb75f9389167a1f51a2c50831664d50181749de 100644 +index af46f2885ead1e3ec1734504d8ba134c886e04fb..47ee0538c8ea94136b2416c324c8a264e54d2c09 100644 --- a/src/main/java/net/minecraft/world/level/block/EndGatewayBlock.java +++ b/src/main/java/net/minecraft/world/level/block/EndGatewayBlock.java @@ -104,6 +104,13 @@ public class EndGatewayBlock extends BaseEntityBlock implements Portal { @@ -35,7 +35,7 @@ index a7a21f071161fb7e73a046717d2462f871ab653c..abb75f9389167a1f51a2c50831664d50 TheEndGatewayBlockEntity.triggerCooldown(world, pos, state, tileentityendgateway); } diff --git a/src/main/java/net/minecraft/world/level/block/EndPortalBlock.java b/src/main/java/net/minecraft/world/level/block/EndPortalBlock.java -index 4aa14f975e1ceedf3d4a427e0daefb58b12fcafe..2dffc3990d9ae3d595d923239885e3a7d8ec04f3 100644 +index 8cb4142562db0be1f1a7d961ec5a10d4abf31692..84ecb012cb0a47e47799dc73c7fadc75f462f47a 100644 --- a/src/main/java/net/minecraft/world/level/block/EndPortalBlock.java +++ b/src/main/java/net/minecraft/world/level/block/EndPortalBlock.java @@ -70,6 +70,13 @@ public class EndPortalBlock extends BaseEntityBlock implements Portal { @@ -53,7 +53,7 @@ index 4aa14f975e1ceedf3d4a427e0daefb58b12fcafe..2dffc3990d9ae3d595d923239885e3a7 EntityPortalEnterEvent event = new EntityPortalEnterEvent(entity.getBukkitEntity(), new org.bukkit.Location(world.getWorld(), pos.getX(), pos.getY(), pos.getZ()), org.bukkit.PortalType.ENDER); // Paper - add portal type world.getCraftServer().getPluginManager().callEvent(event); diff --git a/src/main/java/net/minecraft/world/level/block/NetherPortalBlock.java b/src/main/java/net/minecraft/world/level/block/NetherPortalBlock.java -index 2b31bf586c1c0bd393d2aa8d0b6635dd9f22f21c..c00b13482ce3f603f1d85b9a5ad36b768de5a9f8 100644 +index 3e9642e5236d9a1cc8e8f3b375d76810f4bc7c6c..5169cba4c43d80ce3597c57bf7d40bd0148ec8a0 100644 --- a/src/main/java/net/minecraft/world/level/block/NetherPortalBlock.java +++ b/src/main/java/net/minecraft/world/level/block/NetherPortalBlock.java @@ -117,6 +117,13 @@ public class NetherPortalBlock extends Block implements Portal { @@ -71,7 +71,7 @@ index 2b31bf586c1c0bd393d2aa8d0b6635dd9f22f21c..c00b13482ce3f603f1d85b9a5ad36b76 EntityPortalEnterEvent event = new EntityPortalEnterEvent(entity.getBukkitEntity(), new org.bukkit.Location(world.getWorld(), pos.getX(), pos.getY(), pos.getZ()), org.bukkit.PortalType.NETHER); // Paper - add portal type world.getCraftServer().getPluginManager().callEvent(event); diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java -index 0d835621a7af64563c86c17358632aa26ac281cd..ac4064172f982a6efc25378fbd088cca1dda4a14 100644 +index 12c65755f85acce10c2d5359539d64498138127b..c0b6efefc4d4f31602f39afa76f837300c22f804 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java @@ -246,6 +246,7 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { @@ -83,10 +83,10 @@ index 0d835621a7af64563c86c17358632aa26ac281cd..ac4064172f982a6efc25378fbd088cca } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 358f42585c865efbd814787879f919f70234e5c4..6abf043faf27d1385ad45c264822a9f49974863d 100644 +index cfc85a7089de9e30ac9a703b87440475cc2e2cf0..ad477e53a2a33e47a5bac42eebe46a59ece659ee 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -1440,6 +1440,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -1441,6 +1441,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()) { diff --git a/patches/server/0122-Movement-options-for-armor-stands.patch b/patches/server/0122-Movement-options-for-armor-stands.patch index 1d4bf9307..7b8bd7604 100644 --- a/patches/server/0122-Movement-options-for-armor-stands.patch +++ b/patches/server/0122-Movement-options-for-armor-stands.patch @@ -17,10 +17,10 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index c5880e627ff48e5e176baf483c08f35a1af488f8..70581da7310da5c78e20c6257c3423168704fbc4 100644 +index 692b4afe8616dac52f687baee86cbbd2af6763ec..7d7b1e21ad22831630cb825abcb75b1d69da5e14 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -2017,7 +2017,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -2040,7 +2040,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess return this.isInWater() || flag; } diff --git a/patches/server/0123-Fix-stuck-in-portals.patch b/patches/server/0123-Fix-stuck-in-portals.patch index 0fdc5f365..1760ac679 100644 --- a/patches/server/0123-Fix-stuck-in-portals.patch +++ b/patches/server/0123-Fix-stuck-in-portals.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Fix stuck in portals diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 80426ba728016273990f00db638ea327b75c1883..70a82e80d686337cbe19365ec2d858fedc1d2b77 100644 +index 01eff7ae375b9289360336ce728155b32b8cf347..ca88e602674e85b63b9622c0f94b588448480c12 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -1687,6 +1687,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple +@@ -1678,6 +1678,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple worldserver1.removePlayerImmediately(this, Entity.RemovalReason.CHANGED_DIMENSION); this.unsetRemoved(); // CraftBukkit end @@ -17,10 +17,10 @@ index 80426ba728016273990f00db638ea327b75c1883..70a82e80d686337cbe19365ec2d858fe this.connection.internalTeleport(PositionMoveRotation.of(teleportTarget), teleportTarget.relatives()); // CraftBukkit - use internal teleport without event this.connection.resetPosition(); diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 70581da7310da5c78e20c6257c3423168704fbc4..a8884300f2b9483e74036cacd98356c818578bd4 100644 +index 7d7b1e21ad22831630cb825abcb75b1d69da5e14..114e3ce75fefef8bab339c09128601325d9084f9 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -3438,14 +3438,17 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3468,14 +3468,17 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess return Vec3.directionFromRotation(this.getRotationVector()); } diff --git a/patches/server/0124-Toggle-for-water-sensitive-mob-damage.patch b/patches/server/0124-Toggle-for-water-sensitive-mob-damage.patch index 1c309593d..2aa3dfdc2 100644 --- a/patches/server/0124-Toggle-for-water-sensitive-mob-damage.patch +++ b/patches/server/0124-Toggle-for-water-sensitive-mob-damage.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Toggle for water sensitive mob damage diff --git a/src/main/java/net/minecraft/world/entity/GlowSquid.java b/src/main/java/net/minecraft/world/entity/GlowSquid.java -index 0f5be53c6f6a66c61dc3f2bebeb18ca61d06c10d..a83187312422b0e087785d89f4a49b4c67427b95 100644 +index e282af89d635a2866a8655d1e4956f1bd2c6a85b..52223ecfbc8a66ea3f79c60ef299d2d0e1808ac2 100644 --- a/src/main/java/net/minecraft/world/entity/GlowSquid.java +++ b/src/main/java/net/minecraft/world/entity/GlowSquid.java @@ -48,6 +48,11 @@ public class GlowSquid extends Squid { @@ -37,10 +37,10 @@ index 656088e81781a5711521edec565f4e34313b7bc6..29445156f8660d84bb9840c6ac85e0e2 public void readAdditionalSaveData(CompoundTag nbt) { super.readAdditionalSaveData(nbt); diff --git a/src/main/java/net/minecraft/world/entity/animal/Bee.java b/src/main/java/net/minecraft/world/entity/animal/Bee.java -index 51b736979e43cd0e60a8ecaf2cf95511b9f4d858..d47e5f774567aa4710686430b66eb1409c2f0c97 100644 +index 235a2b732fd62bf7e8c34c14333c41a49a2418e0..e6e5954ca4366ad20b1d1413053739c767c45824 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Bee.java +++ b/src/main/java/net/minecraft/world/entity/animal/Bee.java -@@ -182,7 +182,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { +@@ -186,7 +186,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { // Paper end - Fix MC-167279 this.lookControl = new Bee.BeeLookControl(this); this.setPathfindingMalus(PathType.DANGER_FIRE, -1.0F); @@ -49,7 +49,7 @@ index 51b736979e43cd0e60a8ecaf2cf95511b9f4d858..d47e5f774567aa4710686430b66eb140 this.setPathfindingMalus(PathType.WATER_BORDER, 16.0F); this.setPathfindingMalus(PathType.COCOA, -1.0F); this.setPathfindingMalus(PathType.FENCE, -1.0F); -@@ -496,6 +496,11 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { +@@ -500,6 +500,11 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { return this.level().purpurConfig.beeBreedingTicks; } @@ -62,7 +62,7 @@ index 51b736979e43cd0e60a8ecaf2cf95511b9f4d858..d47e5f774567aa4710686430b66eb140 public int getRemainingPersistentAngerTime() { return (Integer) this.entityData.get(Bee.DATA_REMAINING_ANGER_TIME); diff --git a/src/main/java/net/minecraft/world/entity/animal/Cat.java b/src/main/java/net/minecraft/world/entity/animal/Cat.java -index 8a89ea47d79065e85bb831578c6a1ab71ca5a040..1a060021f92822a85aa45d682ee09d8ef69d7a1f 100644 +index c8e7eb5af0b7288d5ad3637ad5d1883b0cffc923..84094d19d9f3de9b474381c6b0aab1726fcdc40e 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Cat.java +++ b/src/main/java/net/minecraft/world/entity/animal/Cat.java @@ -134,6 +134,11 @@ public class Cat extends TamableAnimal implements VariantHolder { @@ -174,10 +174,10 @@ index 500109364b4741fc310eb22c151754a153db027e..6396d31a14815fbe4f9f51dc610af317 protected void registerGoals() { if (level().purpurConfig.ironGolemCanSwim) this.goalSelector.addGoal(0, new net.minecraft.world.entity.ai.goal.FloatGoal(this)); // Purpur diff --git a/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java b/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java -index 3397fa689c6e36981f3944586c2059c8eb7b1e50..9d85342439977d3ac72ef133733df4f57a68714a 100644 +index f17c30c55a75eba58fcda2407d8039f64e646e7f..951f94da000587def4832a5fae68c1f5a6c9e2ea 100644 --- a/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java +++ b/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java -@@ -92,6 +92,11 @@ public class MushroomCow extends Cow implements Shearable, VariantHolder { @@ -302,10 +302,10 @@ index d0ab026af1642b6b3094d37a0c994deb633da577..8e316da789cb7a8d4c630c71724a56d6 @Override diff --git a/src/main/java/net/minecraft/world/entity/animal/Salmon.java b/src/main/java/net/minecraft/world/entity/animal/Salmon.java -index 9ec3479b0db1f42493db127081e341fa5acc8e41..486709c9701657c7aa93586f539c18e4157f8ef3 100644 +index 1295003dfceb585ef23705c17862efb3feff3868..cd995f8ce3bfd76fa0f4ea3fda71101b09d64ce2 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Salmon.java +++ b/src/main/java/net/minecraft/world/entity/animal/Salmon.java -@@ -49,6 +49,11 @@ public class Salmon extends AbstractSchoolingFish implements VariantHolder type, Level world) { super(type, world); @@ -685,7 +685,7 @@ index b150e41077ecf23dca828a519a545f93d256eb7c..62a2249e9611bd3801b8adb880929e3b } // Purpur start -@@ -288,7 +288,7 @@ public class EnderMan extends Monster implements NeutralMob { +@@ -287,7 +287,7 @@ public class EnderMan extends Monster implements NeutralMob { @Override public boolean isSensitiveToWater() { @@ -711,7 +711,7 @@ index 89f808dd5470c9d94a0cd6b690b9711136027f8a..e8b7e291c96ff6856832fc6612f792fc protected void registerGoals() { this.goalSelector.addGoal(1, new FloatGoal(this)); diff --git a/src/main/java/net/minecraft/world/entity/monster/Evoker.java b/src/main/java/net/minecraft/world/entity/monster/Evoker.java -index 63ddac9c83d70107dace11fe1f033d7e17b1541a..2a0561d0e0cfc6e732c2342e12a1af4dfa73befe 100644 +index db3f7befb52ab58240ca6a8a101a955d4068768e..2c9c4de193ae92e8e2639b33dd8db6fa37ab1ee1 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Evoker.java +++ b/src/main/java/net/minecraft/world/entity/monster/Evoker.java @@ -76,6 +76,11 @@ public class Evoker extends SpellcasterIllager { @@ -823,7 +823,7 @@ index 3656c83ed02392f4121dab69ea7e0e5a64a984b0..0dde6fb0fbf85d1b5afe0fe25941c0c0 return Monster.createMonsterAttributes().add(Attributes.MOVEMENT_SPEED, 0.2F); } diff --git a/src/main/java/net/minecraft/world/entity/monster/Phantom.java b/src/main/java/net/minecraft/world/entity/monster/Phantom.java -index 39ae23d4942178ce95d4c06e676545aa9a1e8756..6e665d75f2c3a6cec6307a2befb07e73e48da5eb 100644 +index f6f96c1d7d43c5dee023152456b243f3590b0b37..6a180656fb53b2f2a70cf219dc9ce7918b7d88ad 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Phantom.java +++ b/src/main/java/net/minecraft/world/entity/monster/Phantom.java @@ -137,6 +137,11 @@ public class Phantom extends FlyingMob implements Enemy { @@ -839,10 +839,10 @@ index 39ae23d4942178ce95d4c06e676545aa9a1e8756..6e665d75f2c3a6cec6307a2befb07e73 public boolean isFlapping() { return (this.getUniqueFlapTickOffset() + this.tickCount) % Phantom.TICKS_PER_FLAP == 0; diff --git a/src/main/java/net/minecraft/world/entity/monster/Pillager.java b/src/main/java/net/minecraft/world/entity/monster/Pillager.java -index 3613b82bef45dddf7e356deaee6353c48455e33a..b85579065ac006589120d4d7ed83d355a517b46d 100644 +index 16a5de23d095cc1b62c76eebe3828231018a572e..d7e67efed76401afbafc19285984a1175fbf250d 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Pillager.java +++ b/src/main/java/net/minecraft/world/entity/monster/Pillager.java -@@ -87,6 +87,11 @@ public class Pillager extends AbstractIllager implements CrossbowAttackMob, Inve +@@ -90,6 +90,11 @@ public class Pillager extends AbstractIllager implements CrossbowAttackMob, Inve this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.pillagerScale); } @@ -855,10 +855,10 @@ index 3613b82bef45dddf7e356deaee6353c48455e33a..b85579065ac006589120d4d7ed83d355 protected void registerGoals() { super.registerGoals(); diff --git a/src/main/java/net/minecraft/world/entity/monster/Ravager.java b/src/main/java/net/minecraft/world/entity/monster/Ravager.java -index f257258473e036ae60d9463ae97d848192a61af7..48c66c97784f7c81029a81efb63eb6da4a2d88c2 100644 +index 265c84c778eb995d7da88fdb760fed5fb62bcda7..d5faedc263714a200ae2fd12b2f3ae1e3e18ed59 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Ravager.java +++ b/src/main/java/net/minecraft/world/entity/monster/Ravager.java -@@ -106,6 +106,11 @@ public class Ravager extends Raider { +@@ -104,6 +104,11 @@ public class Ravager extends Raider { this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.ravagerScale); } @@ -871,7 +871,7 @@ index f257258473e036ae60d9463ae97d848192a61af7..48c66c97784f7c81029a81efb63eb6da protected void registerGoals() { super.registerGoals(); diff --git a/src/main/java/net/minecraft/world/entity/monster/Shulker.java b/src/main/java/net/minecraft/world/entity/monster/Shulker.java -index ebc50e517093329dc5c76cdcd3b6d7e7e66bf55f..4a04ade0cfeac23afbac1a5ef7dfff0df2136191 100644 +index 4e7c449ed4e093e7853f91547a8447e9afd9bf64..ef44ab79cba3778111c9f27f77219b384761d9e4 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Shulker.java +++ b/src/main/java/net/minecraft/world/entity/monster/Shulker.java @@ -121,6 +121,11 @@ public class Shulker extends AbstractGolem implements VariantHolder type, ServerLevelAccessor world, EntitySpawnReason spawnReason, BlockPos pos, RandomSource random ) { diff --git a/src/main/java/net/minecraft/world/entity/monster/Strider.java b/src/main/java/net/minecraft/world/entity/monster/Strider.java -index bb2283fa9a21d7fc609f0a914cdb8b1370d90235..6c7b3b306b69c5b0526e48e4e636ed24d5c96820 100644 +index d99a621a4f7507d216c2793e9d1d9b84ea679acf..cdb8d5c625e18a2a4cf6b5d2da923f63127b6e9c 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Strider.java +++ b/src/main/java/net/minecraft/world/entity/monster/Strider.java @@ -91,7 +91,7 @@ public class Strider extends Animal implements ItemSteerable, Saddleable { @@ -1039,10 +1039,10 @@ index 790e36ae4bd1d6290e16ec579127f8017ac43335..151169d76276409d6a042945b05ae680 protected void registerGoals() { super.registerGoals(); diff --git a/src/main/java/net/minecraft/world/entity/monster/WitherSkeleton.java b/src/main/java/net/minecraft/world/entity/monster/WitherSkeleton.java -index 89ed0d044426aa0415f5cb4eb3f02342fcdddc7d..4c426f87fe2833382f48e353b27f381b48774fd9 100644 +index b0054b998e5494d64de538450daae432416c4d55..5f2e9d87c410551b9858c60fa2ca7ff66e23cb2f 100644 --- a/src/main/java/net/minecraft/world/entity/monster/WitherSkeleton.java +++ b/src/main/java/net/minecraft/world/entity/monster/WitherSkeleton.java -@@ -56,6 +56,11 @@ public class WitherSkeleton extends AbstractSkeleton { +@@ -59,6 +59,11 @@ public class WitherSkeleton extends AbstractSkeleton { this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.witherSkeletonScale); } @@ -1087,7 +1087,7 @@ index e6fb53b828c1a2e76d398e88449260f6206145c3..d79eb7bd6d38a4f1aee89cf0cf331a12 protected void registerGoals() { this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur diff --git a/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java b/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java -index eb6daba7d44542739f1c537cbeef8f87c6db61bf..7298ba35cb27269e778de6b265933baed3077b36 100644 +index 2ee91a1822584fe11b139a747d60b6fa832fa177..95315588a523439a53ac7af3db5fc23adbed6f01 100644 --- a/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java +++ b/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java @@ -112,6 +112,11 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { @@ -1135,10 +1135,10 @@ index 0ee5bdae0d8e42b3d6475bfe49bfa41ee3192769..1103274ba096b0cab3c89f0bdfeba15f public boolean canBeLeashed() { return true; diff --git a/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java b/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java -index f0decc0f4421a6dcd640ad8f0bfb56249bf31944..39cf09e03cd178471757e51334b07b4daffb43be 100644 +index 26090db2ed0cbd99e2f50368ba9f2bf6e56670da..570af47cd176dfa56c0920a8d41400aa1ade5fd0 100644 --- a/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java +++ b/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java -@@ -119,6 +119,11 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento +@@ -122,6 +122,11 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.piglinScale); } @@ -1167,7 +1167,7 @@ index 6459e588e6feb6d7bcf999e36b658bbad4069af2..9c196b0cf49cb6f69bd17748fd13ce59 return Monster.createMonsterAttributes() .add(Attributes.MAX_HEALTH, 50.0) diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java -index 280f35782e4b336465ed45373e7843dd9f697d85..22a015f46aa1bb7ef8076fe34d2b69d9870780f1 100644 +index 0ceeaef16ce0c4abcc3bd7350ed147c91bda8d64..43932be4584995bd5f4ca4d712f3d3ec4d0c743a 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java @@ -193,6 +193,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler diff --git a/patches/server/0125-Config-to-always-tame-in-Creative.patch b/patches/server/0125-Config-to-always-tame-in-Creative.patch index 26e3292f4..e00f150e7 100644 --- a/patches/server/0125-Config-to-always-tame-in-Creative.patch +++ b/patches/server/0125-Config-to-always-tame-in-Creative.patch @@ -20,10 +20,10 @@ index b0944fa1f3849dd24cd010fa0a6638f5fd7179d1..d409ae987088df3d47192128401d7491 return; } diff --git a/src/main/java/net/minecraft/world/entity/animal/Cat.java b/src/main/java/net/minecraft/world/entity/animal/Cat.java -index 1a060021f92822a85aa45d682ee09d8ef69d7a1f..8f0a31c896340907aa8017c0a56fb58db48c2c65 100644 +index 84094d19d9f3de9b474381c6b0aab1726fcdc40e..4d9b177dd640e1b569cfd5575ad795d5962ae7b8 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Cat.java +++ b/src/main/java/net/minecraft/world/entity/animal/Cat.java -@@ -522,7 +522,7 @@ public class Cat extends TamableAnimal implements VariantHolder itemImmuneToExplosion = new ArrayList<>(); public List itemImmuneToFire = new ArrayList<>(); public List itemImmuneToLightning = new ArrayList<>(); + public boolean dontRunWithScissors = false; ++ public ResourceLocation dontRunWithScissorsItemModelReference = ResourceLocation.parse("purpurmc:scissors"); + public boolean ignoreScissorsInWater = false; + public boolean ignoreScissorsInLava = false; + public double scissorsRunningDamage = 1D; private void itemSettings() { itemImmuneToCactus.clear(); getList("gameplay-mechanics.item.immune.cactus", new ArrayList<>()).forEach(key -> { -@@ -228,6 +232,10 @@ public class PurpurWorldConfig { +@@ -228,6 +233,11 @@ public class PurpurWorldConfig { Item item = BuiltInRegistries.ITEM.getValue(ResourceLocation.parse(key.toString())); if (item != Items.AIR) itemImmuneToLightning.add(item); }); + dontRunWithScissors = getBoolean("gameplay-mechanics.item.shears.damage-if-sprinting", dontRunWithScissors); ++ dontRunWithScissorsItemModelReference = ResourceLocation.parse(getString("gameplay-mechanics.item.shears.damage-if-sprinting-item-model", "purpurmc:scissors")); + ignoreScissorsInWater = getBoolean("gameplay-mechanics.item.shears.ignore-in-water", ignoreScissorsInWater); + ignoreScissorsInLava = getBoolean("gameplay-mechanics.item.shears.ignore-in-lava", ignoreScissorsInLava); + scissorsRunningDamage = getDouble("gameplay-mechanics.item.shears.sprinting-damage", scissorsRunningDamage); diff --git a/patches/server/0129-One-Punch-Man.patch b/patches/server/0129-One-Punch-Man.patch index a60be655d..9a8d1a6b2 100644 --- a/patches/server/0129-One-Punch-Man.patch +++ b/patches/server/0129-One-Punch-Man.patch @@ -6,7 +6,7 @@ Subject: [PATCH] One Punch Man! inspired by https://modrinth.com/mod/creative-one-punch diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 0b9ece407fb90636d3869e85cd8c6c0a5626e8fa..ce9988bc7209deabe36c3ad921085f52d8d39c3c 100644 +index fe183dcfb32e915af4c58f8b40c35e349e39d189..062f05f855ef50872d9b3074bf1951eabd97e0c6 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java @@ -1468,6 +1468,24 @@ public abstract class LivingEntity extends Entity implements Attackable { @@ -35,10 +35,10 @@ index 0b9ece407fb90636d3869e85cd8c6c0a5626e8fa..ce9988bc7209deabe36c3ad921085f52 if (amount < 0.0F) { amount = 0.0F; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index a980b4d3e1e4df4e2e2d7ecedafe23abe434fccb..6a4f411c723a1b0a5a05af66807f330a878377e1 100644 +index 2fd0df56e94dca5ce91d0db29b56fa4bd5a2d1f2..e6c9b43eea433abb1a01d4bf591541b754beeebf 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -338,6 +338,7 @@ public class PurpurWorldConfig { +@@ -340,6 +340,7 @@ public class PurpurWorldConfig { public boolean teleportIfOutsideBorder = false; public boolean totemOfUndyingWorksInInventory = false; public boolean playerFixStuckPortal = false; @@ -46,7 +46,7 @@ index a980b4d3e1e4df4e2e2d7ecedafe23abe434fccb..6a4f411c723a1b0a5a05af66807f330a private void playerSettings() { if (PurpurConfig.version < 19) { boolean oldVal = getBoolean("gameplay-mechanics.player.idle-timeout.mods-target", idleTimeoutTargetPlayer); -@@ -354,6 +355,7 @@ public class PurpurWorldConfig { +@@ -356,6 +357,7 @@ public class PurpurWorldConfig { teleportIfOutsideBorder = getBoolean("gameplay-mechanics.player.teleport-if-outside-border", teleportIfOutsideBorder); totemOfUndyingWorksInInventory = getBoolean("gameplay-mechanics.player.totem-of-undying-works-in-inventory", totemOfUndyingWorksInInventory); playerFixStuckPortal = getBoolean("gameplay-mechanics.player.fix-stuck-in-portal", playerFixStuckPortal); diff --git a/patches/server/0130-Configurable-Ender-Pearl-cooldown-damage-and-Endermi.patch b/patches/server/0130-Configurable-Ender-Pearl-cooldown-damage-and-Endermi.patch index 2de13bd3c..99e4ab796 100644 --- a/patches/server/0130-Configurable-Ender-Pearl-cooldown-damage-and-Endermi.patch +++ b/patches/server/0130-Configurable-Ender-Pearl-cooldown-damage-and-Endermi.patch @@ -30,10 +30,10 @@ index bd2684528157f928460f2143dd71a48e11983123..a044a5242ce1d1f6e34ecd5b45685534 this.playSound(worldserver, vec3d); diff --git a/src/main/java/net/minecraft/world/item/EnderpearlItem.java b/src/main/java/net/minecraft/world/item/EnderpearlItem.java -index b232390d8ee8e449e61c0ea7f3af60df507abb97..ad99c6fb7bcd8ccbdeb405ca7ff73ae4d1c2f2ee 100644 +index eaee34054233c8f0296b65a09f1287ba515496f2..83bd9b1eff5b7f581c3f0af6f0f15bdf4b9de201 100644 --- a/src/main/java/net/minecraft/world/item/EnderpearlItem.java +++ b/src/main/java/net/minecraft/world/item/EnderpearlItem.java -@@ -35,6 +35,7 @@ public class EnderpearlItem extends Item { +@@ -37,6 +37,7 @@ public class EnderpearlItem extends Item { world.playSound((Player) null, user.getX(), user.getY(), user.getZ(), SoundEvents.ENDER_PEARL_THROW, SoundSource.NEUTRAL, 0.5F, 0.4F / (world.getRandom().nextFloat() * 0.4F + 0.8F)); user.awardStat(Stats.ITEM_USED.get(this)); @@ -42,10 +42,10 @@ index b232390d8ee8e449e61c0ea7f3af60df507abb97..ad99c6fb7bcd8ccbdeb405ca7ff73ae4 // Paper end - PlayerLaunchProjectileEvent if (user instanceof net.minecraft.server.level.ServerPlayer) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 6a4f411c723a1b0a5a05af66807f330a878377e1..35b0f46278c2c536c1b8738aea1b900e6f7065cf 100644 +index e6c9b43eea433abb1a01d4bf591541b754beeebf..e196d391b4c1a02211f221ef10dda9df05c5ab5c 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -195,6 +195,10 @@ public class PurpurWorldConfig { +@@ -196,6 +196,10 @@ public class PurpurWorldConfig { public boolean ignoreScissorsInWater = false; public boolean ignoreScissorsInLava = false; public double scissorsRunningDamage = 1D; @@ -56,7 +56,7 @@ index 6a4f411c723a1b0a5a05af66807f330a878377e1..35b0f46278c2c536c1b8738aea1b900e private void itemSettings() { itemImmuneToCactus.clear(); getList("gameplay-mechanics.item.immune.cactus", new ArrayList<>()).forEach(key -> { -@@ -236,6 +240,10 @@ public class PurpurWorldConfig { +@@ -238,6 +242,10 @@ public class PurpurWorldConfig { ignoreScissorsInWater = getBoolean("gameplay-mechanics.item.shears.ignore-in-water", ignoreScissorsInWater); ignoreScissorsInLava = getBoolean("gameplay-mechanics.item.shears.ignore-in-lava", ignoreScissorsInLava); scissorsRunningDamage = getDouble("gameplay-mechanics.item.shears.sprinting-damage", scissorsRunningDamage); diff --git a/patches/server/0131-Config-to-ignore-nearby-mobs-when-sleeping.patch b/patches/server/0131-Config-to-ignore-nearby-mobs-when-sleeping.patch index 96a0017a1..b5655b0aa 100644 --- a/patches/server/0131-Config-to-ignore-nearby-mobs-when-sleeping.patch +++ b/patches/server/0131-Config-to-ignore-nearby-mobs-when-sleeping.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Config to ignore nearby mobs when sleeping diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 70a82e80d686337cbe19365ec2d858fedc1d2b77..5f6cab9de8a854ecbd031f9f9b4152f06b28267e 100644 +index 2bc946e62099ab3020d38a304a6b686ccf7a39af..79f4ea221b791e605a7865de111c64a86ddd11ef 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -1798,7 +1798,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple +@@ -1789,7 +1789,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple return entitymonster.isPreventingPlayerRest(this.serverLevel(), this); }); @@ -18,10 +18,10 @@ index 70a82e80d686337cbe19365ec2d858fedc1d2b77..5f6cab9de8a854ecbd031f9f9b4152f0 } } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 35b0f46278c2c536c1b8738aea1b900e6f7065cf..59134101345d765c436d42efcd7fbb78b0deec48 100644 +index e196d391b4c1a02211f221ef10dda9df05c5ab5c..aa089685179635e74cc4033b5335c1e79fab08a2 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -347,6 +347,7 @@ public class PurpurWorldConfig { +@@ -349,6 +349,7 @@ public class PurpurWorldConfig { public boolean totemOfUndyingWorksInInventory = false; public boolean playerFixStuckPortal = false; public boolean creativeOnePunch = false; @@ -29,7 +29,7 @@ index 35b0f46278c2c536c1b8738aea1b900e6f7065cf..59134101345d765c436d42efcd7fbb78 private void playerSettings() { if (PurpurConfig.version < 19) { boolean oldVal = getBoolean("gameplay-mechanics.player.idle-timeout.mods-target", idleTimeoutTargetPlayer); -@@ -364,6 +365,7 @@ public class PurpurWorldConfig { +@@ -366,6 +367,7 @@ public class PurpurWorldConfig { totemOfUndyingWorksInInventory = getBoolean("gameplay-mechanics.player.totem-of-undying-works-in-inventory", totemOfUndyingWorksInInventory); playerFixStuckPortal = getBoolean("gameplay-mechanics.player.fix-stuck-in-portal", playerFixStuckPortal); creativeOnePunch = getBoolean("gameplay-mechanics.player.one-punch-in-creative", creativeOnePunch); diff --git a/patches/server/0133-Config-Enderman-aggressiveness-towards-Endermites.patch b/patches/server/0133-Config-Enderman-aggressiveness-towards-Endermites.patch index a38423dfc..d3bd70a5f 100644 --- a/patches/server/0133-Config-Enderman-aggressiveness-towards-Endermites.patch +++ b/patches/server/0133-Config-Enderman-aggressiveness-towards-Endermites.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Config Enderman aggressiveness towards Endermites diff --git a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java -index 62a2249e9611bd3801b8adb880929e3ba9693b73..9f51fbea2399df8ccd0cc90032223db06c41e29d 100644 +index 8348c8191e6b576ac71aa5c5b5454f7ba38f7730..a5a13d9e56306f6fc53736d0c4af81fa3d972a45 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java +++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java -@@ -132,7 +132,7 @@ public class EnderMan extends Monster implements NeutralMob { +@@ -131,7 +131,7 @@ public class EnderMan extends Monster implements NeutralMob { this.targetSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur this.targetSelector.addGoal(1, new EnderMan.EndermanLookForPlayerGoal(this, this::isAngryAt)); this.targetSelector.addGoal(2, new HurtByTargetGoal(this, new Class[0])); @@ -18,10 +18,10 @@ index 62a2249e9611bd3801b8adb880929e3ba9693b73..9f51fbea2399df8ccd0cc90032223db0 } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 59134101345d765c436d42efcd7fbb78b0deec48..2a247ce59d429b7ddac845295c95a045e9fe3352 100644 +index aa089685179635e74cc4033b5335c1e79fab08a2..fe8988fc29be469af3d33fb87f0c88ee35f0b779 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1030,6 +1030,8 @@ public class PurpurWorldConfig { +@@ -1032,6 +1032,8 @@ public class PurpurWorldConfig { public boolean endermanDespawnEvenWithBlock = false; public boolean endermanBypassMobGriefing = false; public boolean endermanTakeDamageFromWater = true; @@ -30,7 +30,7 @@ index 59134101345d765c436d42efcd7fbb78b0deec48..2a247ce59d429b7ddac845295c95a045 private void endermanSettings() { endermanRidable = getBoolean("mobs.enderman.ridable", endermanRidable); endermanRidableInWater = getBoolean("mobs.enderman.ridable-in-water", endermanRidableInWater); -@@ -1039,12 +1041,18 @@ public class PurpurWorldConfig { +@@ -1041,12 +1043,18 @@ public class PurpurWorldConfig { set("mobs.enderman.attributes.max-health", null); set("mobs.enderman.attributes.max_health", oldValue); } diff --git a/patches/server/0134-Config-to-ignore-Dragon-Head-wearers-and-stare-aggro.patch b/patches/server/0134-Config-to-ignore-Dragon-Head-wearers-and-stare-aggro.patch index cbff2ae88..3dcf08ff5 100644 --- a/patches/server/0134-Config-to-ignore-Dragon-Head-wearers-and-stare-aggro.patch +++ b/patches/server/0134-Config-to-ignore-Dragon-Head-wearers-and-stare-aggro.patch @@ -7,23 +7,23 @@ Prevents Enderman from becoming aggresive towards players that are wearing a Dra Adds functionality to a useless item! diff --git a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java -index 9f51fbea2399df8ccd0cc90032223db06c41e29d..7adfc08d511efcb69f954fc1f4b4eba90b9d15df 100644 +index a5a13d9e56306f6fc53736d0c4af81fa3d972a45..dec6be6b823b00642a0066726e3cad298b7ed6a7 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java +++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java -@@ -260,7 +260,7 @@ public class EnderMan extends Monster implements NeutralMob { +@@ -259,7 +259,7 @@ public class EnderMan extends Monster implements NeutralMob { boolean isBeingStaredBy(Player player) { - // Paper start - EndermanAttackPlayerEvent -- boolean shouldAttack = isBeingStaredBy0(player); -+ boolean shouldAttack = !this.level().purpurConfig.endermanDisableStareAggro && isBeingStaredBy0(player); // Purpur - com.destroystokyo.paper.event.entity.EndermanAttackPlayerEvent event = new com.destroystokyo.paper.event.entity.EndermanAttackPlayerEvent((org.bukkit.entity.Enderman) getBukkitEntity(), (org.bukkit.entity.Player) player.getBukkitEntity()); + // Paper start - EndermanAttackPlayerEvent +- final boolean shouldAttack = isBeingStaredBy0(player); ++ final boolean shouldAttack = !this.level().purpurConfig.endermanDisableStareAggro && isBeingStaredBy0(player); // Purpur + final com.destroystokyo.paper.event.entity.EndermanAttackPlayerEvent event = new com.destroystokyo.paper.event.entity.EndermanAttackPlayerEvent((org.bukkit.entity.Enderman) getBukkitEntity(), (org.bukkit.entity.Player) player.getBukkitEntity()); event.setCancelled(!shouldAttack); return event.callEvent(); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 2a247ce59d429b7ddac845295c95a045e9fe3352..9c9afd3befebe0fef8c84f4ed38231c11260d441 100644 +index fe8988fc29be469af3d33fb87f0c88ee35f0b779..c1f1c20bfa038e66e3fc2dab1a2d5ccc1bbbd3f2 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1032,6 +1032,7 @@ public class PurpurWorldConfig { +@@ -1034,6 +1034,7 @@ public class PurpurWorldConfig { public boolean endermanTakeDamageFromWater = true; public boolean endermanAggroEndermites = true; public boolean endermanAggroEndermitesOnlyIfPlayerSpawned = false; @@ -31,7 +31,7 @@ index 2a247ce59d429b7ddac845295c95a045e9fe3352..9c9afd3befebe0fef8c84f4ed38231c1 private void endermanSettings() { endermanRidable = getBoolean("mobs.enderman.ridable", endermanRidable); endermanRidableInWater = getBoolean("mobs.enderman.ridable-in-water", endermanRidableInWater); -@@ -1053,6 +1054,7 @@ public class PurpurWorldConfig { +@@ -1055,6 +1056,7 @@ public class PurpurWorldConfig { endermanTakeDamageFromWater = getBoolean("mobs.enderman.takes-damage-from-water", endermanTakeDamageFromWater); endermanAggroEndermites = getBoolean("mobs.enderman.aggressive-towards-endermites", endermanAggroEndermites); endermanAggroEndermitesOnlyIfPlayerSpawned = getBoolean("mobs.enderman.aggressive-towards-endermites-only-spawned-by-player-thrown-ender-pearls", endermanAggroEndermitesOnlyIfPlayerSpawned); diff --git a/patches/server/0136-Config-to-disable-Llama-caravans.patch b/patches/server/0136-Config-to-disable-Llama-caravans.patch index 8c67bf022..c0d3812bb 100644 --- a/patches/server/0136-Config-to-disable-Llama-caravans.patch +++ b/patches/server/0136-Config-to-disable-Llama-caravans.patch @@ -32,10 +32,10 @@ index 0b81415233df20fe7143c87ee964a6a1f490476f..227638f369a6581f37e892fa457e2d67 this.caravanHead.caravanTail = this; } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index a3ad9d2610ba27d4dbfa22cf8e3b9f8365310d40..ba7be016f1a76c95d04254cbbb6a0a51df23b0d0 100644 +index dd33aa2d92296090d6d75d294e91f2272b57e6fc..c62a22c8c7821041d890123c61cb04fb43955108 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1386,6 +1386,7 @@ public class PurpurWorldConfig { +@@ -1388,6 +1388,7 @@ public class PurpurWorldConfig { public double llamaMovementSpeedMax = 0.175D; public int llamaBreedingTicks = 6000; public boolean llamaTakeDamageFromWater = false; @@ -43,7 +43,7 @@ index a3ad9d2610ba27d4dbfa22cf8e3b9f8365310d40..ba7be016f1a76c95d04254cbbb6a0a51 private void llamaSettings() { llamaRidable = getBoolean("mobs.llama.ridable", llamaRidable); llamaRidableInWater = getBoolean("mobs.llama.ridable-in-water", llamaRidableInWater); -@@ -1405,6 +1406,7 @@ public class PurpurWorldConfig { +@@ -1407,6 +1408,7 @@ public class PurpurWorldConfig { llamaMovementSpeedMax = getDouble("mobs.llama.attributes.movement_speed.max", llamaMovementSpeedMax); llamaBreedingTicks = getInt("mobs.llama.breeding-delay-ticks", llamaBreedingTicks); llamaTakeDamageFromWater = getBoolean("mobs.llama.takes-damage-from-water", llamaTakeDamageFromWater); diff --git a/patches/server/0137-Config-to-make-Creepers-explode-on-death.patch b/patches/server/0137-Config-to-make-Creepers-explode-on-death.patch index bb61fbe65..8f41e966e 100644 --- a/patches/server/0137-Config-to-make-Creepers-explode-on-death.patch +++ b/patches/server/0137-Config-to-make-Creepers-explode-on-death.patch @@ -51,10 +51,10 @@ index 78da4454fb6eccb1d17d1f0cb19013883437a23e..0bce10c1cbf9f1788817a2834ec0efa0 private void spawnLingeringCloud() { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index ba7be016f1a76c95d04254cbbb6a0a51df23b0d0..6c4bd9a18ecb9c3fea1d46f674dc6c8f3b9aea73 100644 +index c62a22c8c7821041d890123c61cb04fb43955108..36262ccf9c5d308230ad112078d14a78f41243bd 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -875,6 +875,7 @@ public class PurpurWorldConfig { +@@ -877,6 +877,7 @@ public class PurpurWorldConfig { public boolean creeperAllowGriefing = true; public boolean creeperBypassMobGriefing = false; public boolean creeperTakeDamageFromWater = false; @@ -62,7 +62,7 @@ index ba7be016f1a76c95d04254cbbb6a0a51df23b0d0..6c4bd9a18ecb9c3fea1d46f674dc6c8f private void creeperSettings() { creeperRidable = getBoolean("mobs.creeper.ridable", creeperRidable); creeperRidableInWater = getBoolean("mobs.creeper.ridable-in-water", creeperRidableInWater); -@@ -890,6 +891,7 @@ public class PurpurWorldConfig { +@@ -892,6 +893,7 @@ public class PurpurWorldConfig { creeperAllowGriefing = getBoolean("mobs.creeper.allow-griefing", creeperAllowGriefing); creeperBypassMobGriefing = getBoolean("mobs.creeper.bypass-mob-griefing", creeperBypassMobGriefing); creeperTakeDamageFromWater = getBoolean("mobs.creeper.takes-damage-from-water", creeperTakeDamageFromWater); diff --git a/patches/server/0138-Configurable-ravager-griefable-blocks-list.patch b/patches/server/0138-Configurable-ravager-griefable-blocks-list.patch index 22549870d..4f1c9134c 100644 --- a/patches/server/0138-Configurable-ravager-griefable-blocks-list.patch +++ b/patches/server/0138-Configurable-ravager-griefable-blocks-list.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Configurable ravager griefable blocks list diff --git a/src/main/java/net/minecraft/world/entity/monster/Ravager.java b/src/main/java/net/minecraft/world/entity/monster/Ravager.java -index 48c66c97784f7c81029a81efb63eb6da4a2d88c2..94f5b153627eca433905106a90e1bbdfb73e4e2d 100644 +index d5faedc263714a200ae2fd12b2f3ae1e3e18ed59..af91726d482156a7687355f0409eb18b3c6242a1 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Ravager.java +++ b/src/main/java/net/minecraft/world/entity/monster/Ravager.java -@@ -199,7 +199,7 @@ public class Ravager extends Raider { +@@ -196,7 +196,7 @@ public class Ravager extends Raider { BlockState iblockdata = worldserver.getBlockState(blockposition); Block block = iblockdata.getBlock(); @@ -18,7 +18,7 @@ index 48c66c97784f7c81029a81efb63eb6da4a2d88c2..94f5b153627eca433905106a90e1bbdf if (!CraftEventFactory.callEntityChangeBlockEvent(this, blockposition, iblockdata.getFluidState().createLegacyBlock())) { // Paper - fix wrong block state continue; diff --git a/src/main/java/net/minecraft/world/level/block/CropBlock.java b/src/main/java/net/minecraft/world/level/block/CropBlock.java -index 49484773e67eb84e7dadc993406edd6da568dcd5..3f7440eb164ea7593844de6c496ee1a998759347 100644 +index 8cf8aeb34cba078bc7a554f03054d580d96fe908..c1707b502911d76d0c3a706e44bfdc3a12eb8f97 100644 --- a/src/main/java/net/minecraft/world/level/block/CropBlock.java +++ b/src/main/java/net/minecraft/world/level/block/CropBlock.java @@ -180,7 +180,7 @@ public class CropBlock extends BushBlock implements BonemealableBlock { @@ -31,10 +31,10 @@ index 49484773e67eb84e7dadc993406edd6da568dcd5..3f7440eb164ea7593844de6c496ee1a9 } } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 6c4bd9a18ecb9c3fea1d46f674dc6c8f3b9aea73..e040507a861ad283d95f42b6ef08b8b2f5b83418 100644 +index 36262ccf9c5d308230ad112078d14a78f41243bd..99a1c69938be124ad6fd1ae9a96024cc9fafd62c 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1781,6 +1781,7 @@ public class PurpurWorldConfig { +@@ -1783,6 +1783,7 @@ public class PurpurWorldConfig { public double ravagerScale = 1.0D; public boolean ravagerBypassMobGriefing = false; public boolean ravagerTakeDamageFromWater = false; @@ -42,7 +42,7 @@ index 6c4bd9a18ecb9c3fea1d46f674dc6c8f3b9aea73..e040507a861ad283d95f42b6ef08b8b2 private void ravagerSettings() { ravagerRidable = getBoolean("mobs.ravager.ridable", ravagerRidable); ravagerRidableInWater = getBoolean("mobs.ravager.ridable-in-water", ravagerRidableInWater); -@@ -1794,6 +1795,23 @@ public class PurpurWorldConfig { +@@ -1796,6 +1797,23 @@ public class PurpurWorldConfig { ravagerScale = Mth.clamp(getDouble("mobs.ravager.attributes.scale", ravagerScale), 0.0625D, 16.0D); ravagerBypassMobGriefing = getBoolean("mobs.ravager.bypass-mob-griefing", ravagerBypassMobGriefing); ravagerTakeDamageFromWater = getBoolean("mobs.ravager.takes-damage-from-water", ravagerTakeDamageFromWater); diff --git a/patches/server/0139-Sneak-to-bulk-process-composter.patch b/patches/server/0139-Sneak-to-bulk-process-composter.patch index 3c6068598..09ec5a441 100644 --- a/patches/server/0139-Sneak-to-bulk-process-composter.patch +++ b/patches/server/0139-Sneak-to-bulk-process-composter.patch @@ -18,10 +18,10 @@ index a96f859a5d0c6ec692d4627a69f3c9ee49199dbc..adecb4915a0428b71e8c1e59b11f94dd if (enuminteractionresult1.consumesAction()) { diff --git a/src/main/java/net/minecraft/world/level/block/ComposterBlock.java b/src/main/java/net/minecraft/world/level/block/ComposterBlock.java -index db837b250fc35af5b528bf973b3b07f63e79bc46..ed3a310d56a0cca8c4c11c3768ac2056cd11edea 100644 +index 9264ba58188a7a682eeb8eb449b89ff8e60f91d6..809a820dd8eec3e48dd3263335c62fbea4cd4f2c 100644 --- a/src/main/java/net/minecraft/world/level/block/ComposterBlock.java +++ b/src/main/java/net/minecraft/world/level/block/ComposterBlock.java -@@ -241,18 +241,27 @@ public class ComposterBlock extends Block implements WorldlyContainerHolder { +@@ -243,18 +243,27 @@ public class ComposterBlock extends Block implements WorldlyContainerHolder { int i = (Integer) state.getValue(ComposterBlock.LEVEL); if (i < 8 && ComposterBlock.COMPOSTABLES.containsKey(stack.getItem())) { @@ -60,7 +60,7 @@ index db837b250fc35af5b528bf973b3b07f63e79bc46..ed3a310d56a0cca8c4c11c3768ac2056 return InteractionResult.SUCCESS; } else { -@@ -260,6 +269,25 @@ public class ComposterBlock extends Block implements WorldlyContainerHolder { +@@ -262,6 +271,25 @@ public class ComposterBlock extends Block implements WorldlyContainerHolder { } } @@ -87,10 +87,10 @@ index db837b250fc35af5b528bf973b3b07f63e79bc46..ed3a310d56a0cca8c4c11c3768ac2056 protected InteractionResult useWithoutItem(BlockState state, Level world, BlockPos pos, Player player, BlockHitResult hit) { int i = (Integer) state.getValue(ComposterBlock.LEVEL); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index e040507a861ad283d95f42b6ef08b8b2f5b83418..7bb429cbb41e1a7ac7e138663dec988d29d62798 100644 +index 99a1c69938be124ad6fd1ae9a96024cc9fafd62c..09fa9a18dc1bb6a3df80cb2237dc0d55affc0453 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -439,6 +439,11 @@ public class PurpurWorldConfig { +@@ -441,6 +441,11 @@ public class PurpurWorldConfig { chestOpenWithBlockOnTop = getBoolean("blocks.chest.open-with-solid-block-on-top", chestOpenWithBlockOnTop); } diff --git a/patches/server/0140-Config-for-skipping-night.patch b/patches/server/0140-Config-for-skipping-night.patch index 8e4acc87f..c828ace19 100644 --- a/patches/server/0140-Config-for-skipping-night.patch +++ b/patches/server/0140-Config-for-skipping-night.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Config for skipping night diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 104d0db6e36c724960a757266cbcf1ec069e6a28..ad4f51ed28c797cae83a80234837203ac5dd9017 100644 +index 756740b1be54631b4d25343f9a5c826b4b6288cf..e3d2c0f569c76fc9af95f28f29e24be12ab1c476 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -748,7 +748,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -749,7 +749,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe int i = this.getGameRules().getInt(GameRules.RULE_PLAYERS_SLEEPING_PERCENTAGE); long j; @@ -18,10 +18,10 @@ index 104d0db6e36c724960a757266cbcf1ec069e6a28..ad4f51ed28c797cae83a80234837203a j = this.levelData.getDayTime() + 24000L; TimeSkipEvent event = new TimeSkipEvent(this.getWorld(), TimeSkipEvent.SkipReason.NIGHT_SKIP, (j - j % 24000L) - this.getDayTime()); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 7bb429cbb41e1a7ac7e138663dec988d29d62798..ca2b020e5c82749dbf93b1f91353b845a7d1442f 100644 +index 09fa9a18dc1bb6a3df80cb2237dc0d55affc0453..59156b6d2b8107a2031bc56387f002a6ef404022 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -349,6 +349,7 @@ public class PurpurWorldConfig { +@@ -351,6 +351,7 @@ public class PurpurWorldConfig { public boolean playerFixStuckPortal = false; public boolean creativeOnePunch = false; public boolean playerSleepNearMonsters = false; @@ -29,7 +29,7 @@ index 7bb429cbb41e1a7ac7e138663dec988d29d62798..ca2b020e5c82749dbf93b1f91353b845 private void playerSettings() { if (PurpurConfig.version < 19) { boolean oldVal = getBoolean("gameplay-mechanics.player.idle-timeout.mods-target", idleTimeoutTargetPlayer); -@@ -367,6 +368,7 @@ public class PurpurWorldConfig { +@@ -369,6 +370,7 @@ public class PurpurWorldConfig { playerFixStuckPortal = getBoolean("gameplay-mechanics.player.fix-stuck-in-portal", playerFixStuckPortal); creativeOnePunch = getBoolean("gameplay-mechanics.player.one-punch-in-creative", creativeOnePunch); playerSleepNearMonsters = getBoolean("gameplay-mechanics.player.sleep-ignore-nearby-mobs", playerSleepNearMonsters); diff --git a/patches/server/0141-Add-config-for-villager-trading.patch b/patches/server/0141-Add-config-for-villager-trading.patch index 4d93dc516..69ce78d9a 100644 --- a/patches/server/0141-Add-config-for-villager-trading.patch +++ b/patches/server/0141-Add-config-for-villager-trading.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Add config for villager trading diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java -index 22a015f46aa1bb7ef8076fe34d2b69d9870780f1..fd319cf5ac1a3aa8f3562bbab4bf2a8e15b10ae2 100644 +index 43932be4584995bd5f4ca4d712f3d3ec4d0c743a..5a522d73d41f9aa3977807173d7e34c057a37c7a 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java @@ -377,6 +377,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler @@ -32,10 +32,10 @@ index 116f47c7342dade1eaf0fabc62fb0ba2edd4c578..ba7856973d22c031910df4ec2a84d101 return InteractionResult.SUCCESS; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index ca2b020e5c82749dbf93b1f91353b845a7d1442f..e6096491e26d5ad7df5f1d626a14c771662d2898 100644 +index 59156b6d2b8107a2031bc56387f002a6ef404022..913c3e0c66d005380782af7e7a3358ed5ef45afc 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2236,6 +2236,7 @@ public class PurpurWorldConfig { +@@ -2238,6 +2238,7 @@ public class PurpurWorldConfig { public boolean villagerClericFarmersThrowWarts = true; public boolean villagerBypassMobGriefing = false; public boolean villagerTakeDamageFromWater = false; @@ -43,7 +43,7 @@ index ca2b020e5c82749dbf93b1f91353b845a7d1442f..e6096491e26d5ad7df5f1d626a14c771 private void villagerSettings() { villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); -@@ -2256,6 +2257,7 @@ public class PurpurWorldConfig { +@@ -2258,6 +2259,7 @@ public class PurpurWorldConfig { villagerClericFarmersThrowWarts = getBoolean("mobs.villager.cleric-wart-farmers-throw-warts-at-villagers", villagerClericFarmersThrowWarts); villagerBypassMobGriefing = getBoolean("mobs.villager.bypass-mob-griefing", villagerBypassMobGriefing); villagerTakeDamageFromWater = getBoolean("mobs.villager.takes-damage-from-water", villagerTakeDamageFromWater); @@ -51,7 +51,7 @@ index ca2b020e5c82749dbf93b1f91353b845a7d1442f..e6096491e26d5ad7df5f1d626a14c771 } public boolean vindicatorRidable = false; -@@ -2289,6 +2291,7 @@ public class PurpurWorldConfig { +@@ -2291,6 +2293,7 @@ public class PurpurWorldConfig { public double wanderingTraderTemptRange = 10.0D; public boolean wanderingTraderCanBeLeashed = false; public boolean wanderingTraderTakeDamageFromWater = false; @@ -59,7 +59,7 @@ index ca2b020e5c82749dbf93b1f91353b845a7d1442f..e6096491e26d5ad7df5f1d626a14c771 private void wanderingTraderSettings() { wanderingTraderRidable = getBoolean("mobs.wandering_trader.ridable", wanderingTraderRidable); wanderingTraderRidableInWater = getBoolean("mobs.wandering_trader.ridable-in-water", wanderingTraderRidableInWater); -@@ -2304,6 +2307,7 @@ public class PurpurWorldConfig { +@@ -2306,6 +2309,7 @@ public class PurpurWorldConfig { wanderingTraderTemptRange = getDouble("mobs.wandering_trader.attributes.tempt_range", wanderingTraderTemptRange); wanderingTraderCanBeLeashed = getBoolean("mobs.wandering_trader.can-be-leashed", wanderingTraderCanBeLeashed); wanderingTraderTakeDamageFromWater = getBoolean("mobs.wandering_trader.takes-damage-from-water", wanderingTraderTakeDamageFromWater); diff --git a/patches/server/0142-Drowning-Settings.patch b/patches/server/0142-Drowning-Settings.patch index b248cb18a..df24f2234 100644 --- a/patches/server/0142-Drowning-Settings.patch +++ b/patches/server/0142-Drowning-Settings.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Drowning Settings diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index a8884300f2b9483e74036cacd98356c818578bd4..8d0e578c5ee54af4e9f183b2865573881a3f9062 100644 +index 114e3ce75fefef8bab339c09128601325d9084f9..60ffa728e6b8c861b0d108d1562150ccb671af33 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -3665,7 +3665,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3695,7 +3695,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } public int getMaxAirSupply() { @@ -18,10 +18,10 @@ index a8884300f2b9483e74036cacd98356c818578bd4..8d0e578c5ee54af4e9f183b286557388 public int getAirSupply() { diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index ce9988bc7209deabe36c3ad921085f52d8d39c3c..127befc7514ca36b75735b718751fb4cf3f915c4 100644 +index 062f05f855ef50872d9b3074bf1951eabd97e0c6..327ff173c3f1223d457112f094116e0eec90fcc8 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -491,7 +491,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -489,7 +489,7 @@ public abstract class LivingEntity extends Entity implements Attackable { if (flag1) { this.setAirSupply(this.decreaseAirSupply(this.getAirSupply())); @@ -30,15 +30,15 @@ index ce9988bc7209deabe36c3ad921085f52d8d39c3c..127befc7514ca36b75735b718751fb4c this.setAirSupply(0); Vec3 vec3d = this.getDeltaMovement(); -@@ -503,7 +503,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -501,7 +501,7 @@ public abstract class LivingEntity extends Entity implements Attackable { this.level().addParticle(ParticleTypes.BUBBLE, this.getX() + d0, this.getY() + d2, this.getZ() + d3, vec3d.x, vec3d.y, vec3d.z); } - this.hurt(this.damageSources().drown(), 2.0F); + this.hurt(this.damageSources().drown(), (float) this.level().purpurConfig.damageFromDrowning); // Purpur } - } - + } else if (this.getAirSupply() < this.getMaxAirSupply()) { + this.setAirSupply(this.increaseAirSupply(this.getAirSupply())); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java index e6096491e26d5ad7df5f1d626a14c771662d2898..0f8348bedaf101fa9b9d50c3288aec0953cb56f6 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java diff --git a/patches/server/0143-Break-individual-slabs-when-sneaking.patch b/patches/server/0143-Break-individual-slabs-when-sneaking.patch index 45eeb6406..dcc00de18 100644 --- a/patches/server/0143-Break-individual-slabs-when-sneaking.patch +++ b/patches/server/0143-Break-individual-slabs-when-sneaking.patch @@ -47,10 +47,10 @@ index 9274fd639c22e305dda567b303f9b01068adb52c..4433e432ea0ee8d11045b87e68dac3ed + // Purpur end } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 0f8348bedaf101fa9b9d50c3288aec0953cb56f6..cbca90e2008e0ed3736a1ad1d645ca1ee532fbba 100644 +index 693f84494c622697b4803f81ee81e21c59a7ebe6..60413ce72af16a81e97b875da85988fec8c88780 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -560,6 +560,11 @@ public class PurpurWorldConfig { +@@ -562,6 +562,11 @@ public class PurpurWorldConfig { } } diff --git a/patches/server/0144-Config-to-disable-hostile-mob-spawn-on-ice.patch b/patches/server/0144-Config-to-disable-hostile-mob-spawn-on-ice.patch index 5c4c2ef9a..580511620 100644 --- a/patches/server/0144-Config-to-disable-hostile-mob-spawn-on-ice.patch +++ b/patches/server/0144-Config-to-disable-hostile-mob-spawn-on-ice.patch @@ -24,10 +24,10 @@ index e2de074bbe7bab0e5a7aecc1fae4c5914a203dd4..c2061f575c731ecc6071384b007517c0 return false; } else { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index cbca90e2008e0ed3736a1ad1d645ca1ee532fbba..c9cc7f51b2f86b4caf25d642159be418ddd20d61 100644 +index 60413ce72af16a81e97b875da85988fec8c88780..f83e25e7586aa5b84a6a87cdd32ca7ee005e01c6 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -525,6 +525,13 @@ public class PurpurWorldConfig { +@@ -527,6 +527,13 @@ public class PurpurWorldConfig { furnaceUseLavaFromUnderneath = getBoolean("blocks.furnace.use-lava-from-underneath", furnaceUseLavaFromUnderneath); } diff --git a/patches/server/0146-Option-to-make-doors-require-redstone.patch b/patches/server/0146-Option-to-make-doors-require-redstone.patch index abf00f478..2846cd887 100644 --- a/patches/server/0146-Option-to-make-doors-require-redstone.patch +++ b/patches/server/0146-Option-to-make-doors-require-redstone.patch @@ -82,10 +82,10 @@ index 077b99caf0ec0ee098786d23194d88e1dc4481ce..daf865c20cc193a12db0d98e3c0472ee + // Purpur end } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 908953ee49fa46c1cf11a815b6c48fd0e78d251b..ef4789925eda32a0f5461bf3f8e17db524c22fdb 100644 +index 0c3438c1914d6ec828c270fecfc7cf101fcfd211..88f2cf0023540a2fed5be6f7929e46dc7144673c 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -464,6 +464,16 @@ public class PurpurWorldConfig { +@@ -466,6 +466,16 @@ public class PurpurWorldConfig { dispenserPlaceAnvils = getBoolean("blocks.dispenser.place-anvils", dispenserPlaceAnvils); } diff --git a/patches/server/0147-Config-to-allow-unsafe-enchants.patch b/patches/server/0147-Config-to-allow-unsafe-enchants.patch index 64f786330..00ef5b20a 100644 --- a/patches/server/0147-Config-to-allow-unsafe-enchants.patch +++ b/patches/server/0147-Config-to-allow-unsafe-enchants.patch @@ -78,10 +78,10 @@ index a7c3338ed6edcd26fce869ec66fdcaa4c32c0e4f..346681cf9c3c9ff5274f63236b0cc7c4 ((ServerPlayer) this.player).connection.send(new ClientboundContainerSetDataPacket(this.containerId, 0, this.cost.get())); } diff --git a/src/main/java/net/minecraft/world/item/ItemStack.java b/src/main/java/net/minecraft/world/item/ItemStack.java -index dcb656be3d37f29bdbe7d25ace05c6dd1889e252..d644d02b039ca918391a32a04549f7a34386b3f9 100644 +index 7c5770a6a576e47c8ad90c5be80df423607e06f5..095c86ea25fc4f385d96d2e92fa67a150e27c489 100644 --- a/src/main/java/net/minecraft/world/item/ItemStack.java +++ b/src/main/java/net/minecraft/world/item/ItemStack.java -@@ -1351,6 +1351,12 @@ public final class ItemStack implements DataComponentHolder { +@@ -1369,6 +1369,12 @@ public final class ItemStack implements DataComponentHolder { return !((ItemEnchantments) this.getOrDefault(DataComponents.ENCHANTMENTS, ItemEnchantments.EMPTY)).isEmpty(); } diff --git a/patches/server/0148-Configurable-sponge-absorption.patch b/patches/server/0148-Configurable-sponge-absorption.patch index bc565e41d..ad50b614f 100644 --- a/patches/server/0148-Configurable-sponge-absorption.patch +++ b/patches/server/0148-Configurable-sponge-absorption.patch @@ -8,7 +8,7 @@ Allows the total area and radius of water blocks the sponge can absorb to be cha Co-authored by: granny diff --git a/src/main/java/net/minecraft/world/level/block/SpongeBlock.java b/src/main/java/net/minecraft/world/level/block/SpongeBlock.java -index 59cf905b1b5686f6f4f2bad94730ffa69d3a2834..d82c62cdb219cee0bbc3083e38e18b7615ad09ef 100644 +index e9a77c1ae09af42d2d444ad6b5f6c8ac395044e1..9201d911cf155aab7735600073426a0d4213f38b 100644 --- a/src/main/java/net/minecraft/world/level/block/SpongeBlock.java +++ b/src/main/java/net/minecraft/world/level/block/SpongeBlock.java @@ -61,7 +61,7 @@ public class SpongeBlock extends Block { @@ -21,10 +21,10 @@ index 59cf905b1b5686f6f4f2bad94730ffa69d3a2834..d82c62cdb219cee0bbc3083e38e18b76 int i = aenumdirection.length; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index ef4789925eda32a0f5461bf3f8e17db524c22fdb..3a334078a69c1b6456ba2c1ed7249bf66c922960 100644 +index 88f2cf0023540a2fed5be6f7929e46dc7144673c..1b1c6e20acef4e2dda93cbc89ae1d527d76e81ce 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -589,6 +589,13 @@ public class PurpurWorldConfig { +@@ -591,6 +591,13 @@ public class PurpurWorldConfig { spawnerDeactivateByRedstone = getBoolean("blocks.spawner.deactivate-by-redstone", spawnerDeactivateByRedstone); } diff --git a/patches/server/0149-Projectile-offset-config.patch b/patches/server/0149-Projectile-offset-config.patch index afda6bb11..2f1e5c60b 100644 --- a/patches/server/0149-Projectile-offset-config.patch +++ b/patches/server/0149-Projectile-offset-config.patch @@ -18,10 +18,10 @@ index 1d4d0799a86b9940b5e3b614c5a188ade5133f7e..58fa528e4b2589d362eb976afd6221cd world.playSound( diff --git a/src/main/java/net/minecraft/world/item/CrossbowItem.java b/src/main/java/net/minecraft/world/item/CrossbowItem.java -index 52c40eafc77e50a6fd21b9a7a250cea501f11690..86204c2ab5bbd5d45ddb1d626f844d91ccae6b4f 100644 +index be1902a307a54434644b242b429ad47c271d2a0c..cac4de9877b91bd805a5a8f4b84d27449fc5001f 100644 --- a/src/main/java/net/minecraft/world/item/CrossbowItem.java +++ b/src/main/java/net/minecraft/world/item/CrossbowItem.java -@@ -69,7 +69,7 @@ public class CrossbowItem extends ProjectileWeaponItem { +@@ -70,7 +70,7 @@ public class CrossbowItem extends ProjectileWeaponItem { ItemStack itemStack = user.getItemInHand(hand); ChargedProjectiles chargedProjectiles = itemStack.get(DataComponents.CHARGED_PROJECTILES); if (chargedProjectiles != null && !chargedProjectiles.isEmpty()) { @@ -31,62 +31,62 @@ index 52c40eafc77e50a6fd21b9a7a250cea501f11690..86204c2ab5bbd5d45ddb1d626f844d91 } else if (!user.getProjectile(itemStack).isEmpty()) { this.startSoundPlayed = false; diff --git a/src/main/java/net/minecraft/world/item/EggItem.java b/src/main/java/net/minecraft/world/item/EggItem.java -index 3ddd34e5d05fa1355a2affd329d72dea216cd0e4..770bdb3fb2426083ff6785f1c38ffe9d11f898e5 100644 +index 6d559fef484036194e4d899b82aaa7b5d518311e..9fb04b4e5b61ea497238e042fefa9a06f7489618 100644 --- a/src/main/java/net/minecraft/world/item/EggItem.java +++ b/src/main/java/net/minecraft/world/item/EggItem.java -@@ -27,7 +27,7 @@ public class EggItem extends Item implements ProjectileItem { +@@ -29,7 +29,7 @@ public class EggItem extends Item implements ProjectileItem { if (world instanceof ServerLevel worldserver) { // CraftBukkit start // Paper start - PlayerLaunchProjectileEvent -- final Projectile.Delayed thrownEgg = Projectile.spawnProjectileFromRotationDelayed(ThrownEgg::new, worldserver, itemstack, user, 0.0F, 1.5F, 1.0F); -+ final Projectile.Delayed thrownEgg = Projectile.spawnProjectileFromRotationDelayed(ThrownEgg::new, worldserver, itemstack, user, 0.0F, 1.5F, (float) worldserver.purpurConfig.eggProjectileOffset); // Purpur +- final Projectile.Delayed thrownEgg = Projectile.spawnProjectileFromRotationDelayed(ThrownEgg::new, worldserver, itemstack, user, 0.0F, EggItem.PROJECTILE_SHOOT_POWER, 1.0F); ++ final Projectile.Delayed thrownEgg = Projectile.spawnProjectileFromRotationDelayed(ThrownEgg::new, worldserver, itemstack, user, 0.0F, EggItem.PROJECTILE_SHOOT_POWER, (float) worldserver.purpurConfig.eggProjectileOffset); // Purpur com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent event = new com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent((org.bukkit.entity.Player) user.getBukkitEntity(), org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(itemstack), (org.bukkit.entity.Projectile) thrownEgg.projectile().getBukkitEntity()); if (event.callEvent() && thrownEgg.attemptSpawn()) { if (event.shouldConsume()) { diff --git a/src/main/java/net/minecraft/world/item/EnderpearlItem.java b/src/main/java/net/minecraft/world/item/EnderpearlItem.java -index ad99c6fb7bcd8ccbdeb405ca7ff73ae4d1c2f2ee..4039d300debadf29e6c544e8b4c950b7121a02d1 100644 +index 83bd9b1eff5b7f581c3f0af6f0f15bdf4b9de201..392f2600e4fb1ff937c3ec5635156b358eb36888 100644 --- a/src/main/java/net/minecraft/world/item/EnderpearlItem.java +++ b/src/main/java/net/minecraft/world/item/EnderpearlItem.java -@@ -24,7 +24,7 @@ public class EnderpearlItem extends Item { +@@ -26,7 +26,7 @@ public class EnderpearlItem extends Item { if (world instanceof ServerLevel worldserver) { // CraftBukkit start // Paper start - PlayerLaunchProjectileEvent -- final Projectile.Delayed thrownEnderpearl = Projectile.spawnProjectileFromRotationDelayed(ThrownEnderpearl::new, worldserver, itemstack, user, 0.0F, 1.5F, 1.0F); -+ final Projectile.Delayed thrownEnderpearl = Projectile.spawnProjectileFromRotationDelayed(ThrownEnderpearl::new, worldserver, itemstack, user, 0.0F, 1.5F, (float) worldserver.purpurConfig.enderPearlProjectileOffset); // Purpur +- final Projectile.Delayed thrownEnderpearl = Projectile.spawnProjectileFromRotationDelayed(ThrownEnderpearl::new, worldserver, itemstack, user, 0.0F, EnderpearlItem.PROJECTILE_SHOOT_POWER, 1.0F); ++ final Projectile.Delayed thrownEnderpearl = Projectile.spawnProjectileFromRotationDelayed(ThrownEnderpearl::new, worldserver, itemstack, user, 0.0F, EnderpearlItem.PROJECTILE_SHOOT_POWER, (float) worldserver.purpurConfig.enderPearlProjectileOffset); // Purpur com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent event = new com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent((org.bukkit.entity.Player) user.getBukkitEntity(), org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(itemstack), (org.bukkit.entity.Projectile) thrownEnderpearl.projectile().getBukkitEntity()); if (event.callEvent() && thrownEnderpearl.attemptSpawn()) { if (event.shouldConsume()) { diff --git a/src/main/java/net/minecraft/world/item/SnowballItem.java b/src/main/java/net/minecraft/world/item/SnowballItem.java -index 57872ebef6beb8cdc03c9f8f19de94652ee19062..60a064c26de0566aaf9f8be886402e291c03ca3b 100644 +index d3bba4665ae14cc279c0f937831f909f8831b12b..27499f01ef0bc89c4c3f60eb696ca07cc5984809 100644 --- a/src/main/java/net/minecraft/world/item/SnowballItem.java +++ b/src/main/java/net/minecraft/world/item/SnowballItem.java -@@ -27,7 +27,7 @@ public class SnowballItem extends Item implements ProjectileItem { +@@ -29,7 +29,7 @@ public class SnowballItem extends Item implements ProjectileItem { // world.playSound((EntityHuman) null, entityhuman.getX(), entityhuman.getY(), entityhuman.getZ(), SoundEffects.SNOWBALL_THROW, SoundCategory.NEUTRAL, 0.5F, 0.4F / (world.getRandom().nextFloat() * 0.4F + 0.8F)); if (world instanceof ServerLevel worldserver) { // Paper start - PlayerLaunchProjectileEvent -- final Projectile.Delayed snowball = Projectile.spawnProjectileFromRotationDelayed(Snowball::new, worldserver, itemstack, user, 0.0F, 1.5F, 1.0F); -+ final Projectile.Delayed snowball = Projectile.spawnProjectileFromRotationDelayed(Snowball::new, worldserver, itemstack, user, 0.0F, 1.5F, (float) worldserver.purpurConfig.snowballProjectileOffset); // Purpur +- final Projectile.Delayed snowball = Projectile.spawnProjectileFromRotationDelayed(Snowball::new, worldserver, itemstack, user, 0.0F, SnowballItem.PROJECTILE_SHOOT_POWER, 1.0F); ++ final Projectile.Delayed snowball = Projectile.spawnProjectileFromRotationDelayed(Snowball::new, worldserver, itemstack, user, 0.0F, SnowballItem.PROJECTILE_SHOOT_POWER, (float) worldserver.purpurConfig.snowballProjectileOffset); // Purpur com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent event = new com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent((org.bukkit.entity.Player) user.getBukkitEntity(), org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(itemstack), (org.bukkit.entity.Projectile) snowball.projectile().getBukkitEntity()); if (event.callEvent() && snowball.attemptSpawn()) { user.awardStat(Stats.ITEM_USED.get(this)); diff --git a/src/main/java/net/minecraft/world/item/ThrowablePotionItem.java b/src/main/java/net/minecraft/world/item/ThrowablePotionItem.java -index fa9d2ae44fcdd06f8f33cd14ffca422b20a01451..ffbc71ca2a27800d7758e3db339bf06a39ef1f11 100644 +index e422881d1ab0f1a5bb2cb741d23089a2e35de2d4..bbd65d35d91d4f3ffabeb355b82f22ddde0f868b 100644 --- a/src/main/java/net/minecraft/world/item/ThrowablePotionItem.java +++ b/src/main/java/net/minecraft/world/item/ThrowablePotionItem.java -@@ -21,7 +21,7 @@ public class ThrowablePotionItem extends PotionItem implements ProjectileItem { +@@ -23,7 +23,7 @@ public class ThrowablePotionItem extends PotionItem implements ProjectileItem { ItemStack itemStack = user.getItemInHand(hand); if (world instanceof ServerLevel serverLevel) { // Paper start - PlayerLaunchProjectileEvent -- final Projectile.Delayed thrownPotion = Projectile.spawnProjectileFromRotationDelayed(ThrownPotion::new, serverLevel, itemStack, user, -20.0F, 0.5F, 1.0F); -+ final Projectile.Delayed thrownPotion = Projectile.spawnProjectileFromRotationDelayed(ThrownPotion::new, serverLevel, itemStack, user, -20.0F, 0.5F, (float) serverLevel.purpurConfig.throwablePotionProjectileOffset); // Purpur +- final Projectile.Delayed thrownPotion = Projectile.spawnProjectileFromRotationDelayed(ThrownPotion::new, serverLevel, itemStack, user, -20.0F, PROJECTILE_SHOOT_POWER, 1.0F); ++ final Projectile.Delayed thrownPotion = Projectile.spawnProjectileFromRotationDelayed(ThrownPotion::new, serverLevel, itemStack, user, -20.0F, PROJECTILE_SHOOT_POWER, (float) serverLevel.purpurConfig.throwablePotionProjectileOffset); // Purpur // Paper start - PlayerLaunchProjectileEvent com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent event = new com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent((org.bukkit.entity.Player) user.getBukkitEntity(), org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(itemStack), (org.bukkit.entity.Projectile) thrownPotion.projectile().getBukkitEntity()); if (event.callEvent() && thrownPotion.attemptSpawn()) { diff --git a/src/main/java/net/minecraft/world/item/TridentItem.java b/src/main/java/net/minecraft/world/item/TridentItem.java -index 5133443911f932e8f6b5d3ca8baccecfd6f81c00..9134c4aada4e0cd7b51810a59405c07d433f7c78 100644 +index aff4f33be216f62d6c6e139dcd7fd82efdbd267c..810082126567eb02bec395065b95b3c3902d4973 100644 --- a/src/main/java/net/minecraft/world/item/TridentItem.java +++ b/src/main/java/net/minecraft/world/item/TridentItem.java -@@ -88,7 +88,7 @@ public class TridentItem extends Item implements ProjectileItem { +@@ -89,7 +89,7 @@ public class TridentItem extends Item implements ProjectileItem { // itemstack.hurtWithoutBreaking(1, entityhuman); // CraftBukkit - moved down if (f == 0.0F) { // Paper start - PlayerLaunchProjectileEvent @@ -96,10 +96,10 @@ index 5133443911f932e8f6b5d3ca8baccecfd6f81c00..9134c4aada4e0cd7b51810a59405c07d com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent event = new com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent((org.bukkit.entity.Player) entityhuman.getBukkitEntity(), org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(stack), (org.bukkit.entity.Projectile) tridentDelayed.projectile().getBukkitEntity()); if (!event.callEvent() || !tridentDelayed.attemptSpawn()) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 3a334078a69c1b6456ba2c1ed7249bf66c922960..33ed5f8c42dcdf378fa5140177dbd290397d1092 100644 +index 1b1c6e20acef4e2dda93cbc89ae1d527d76e81ce..c6d39361fe5f02de3119e2d2bfc603e096c03160 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -414,6 +414,23 @@ public class PurpurWorldConfig { +@@ -416,6 +416,23 @@ public class PurpurWorldConfig { }); } diff --git a/patches/server/0150-Config-for-powered-rail-activation-distance.patch b/patches/server/0150-Config-for-powered-rail-activation-distance.patch index a95d8baa4..c5d21071c 100644 --- a/patches/server/0150-Config-for-powered-rail-activation-distance.patch +++ b/patches/server/0150-Config-for-powered-rail-activation-distance.patch @@ -18,10 +18,10 @@ index b763361a8f0f1b46093d5dd9afe8dba0cadf9c78..bd14c08defe8afc5ceca59d16a5b1dba } else { int j = pos.getX(); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 33ed5f8c42dcdf378fa5140177dbd290397d1092..bec9316c9e3408f39ab00f096b640f4d4d893b28 100644 +index c6d39361fe5f02de3119e2d2bfc603e096c03160..e85eb5d3dbf35c89295302db5431a7b3cb2d3ba1 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -575,6 +575,11 @@ public class PurpurWorldConfig { +@@ -577,6 +577,11 @@ public class PurpurWorldConfig { powderSnowBypassMobGriefing = getBoolean("blocks.powder_snow.bypass-mob-griefing", powderSnowBypassMobGriefing); } diff --git a/patches/server/0151-Piglin-portal-spawn-modifier.patch b/patches/server/0151-Piglin-portal-spawn-modifier.patch index 5ff448ad6..c7b19d358 100644 --- a/patches/server/0151-Piglin-portal-spawn-modifier.patch +++ b/patches/server/0151-Piglin-portal-spawn-modifier.patch @@ -18,7 +18,7 @@ Difficulties: 3 - hard diff --git a/src/main/java/net/minecraft/world/level/block/NetherPortalBlock.java b/src/main/java/net/minecraft/world/level/block/NetherPortalBlock.java -index c00b13482ce3f603f1d85b9a5ad36b768de5a9f8..10e747edebd6463cdfcea592cec1c232d837f21b 100644 +index 5169cba4c43d80ce3597c57bf7d40bd0148ec8a0..2d53c57c961fa8977e37931775863665381595eb 100644 --- a/src/main/java/net/minecraft/world/level/block/NetherPortalBlock.java +++ b/src/main/java/net/minecraft/world/level/block/NetherPortalBlock.java @@ -78,7 +78,7 @@ public class NetherPortalBlock extends Block implements Portal { @@ -31,10 +31,10 @@ index c00b13482ce3f603f1d85b9a5ad36b768de5a9f8..10e747edebd6463cdfcea592cec1c232 pos = pos.below(); } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index bec9316c9e3408f39ab00f096b640f4d4d893b28..a41a3957696d47c5059e96308d17e11b68bb1723 100644 +index e85eb5d3dbf35c89295302db5431a7b3cb2d3ba1..be247fe9ca24407350044b020db613ce9a70ff26 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1713,6 +1713,7 @@ public class PurpurWorldConfig { +@@ -1715,6 +1715,7 @@ public class PurpurWorldConfig { public double piglinScale = 1.0D; public boolean piglinBypassMobGriefing = false; public boolean piglinTakeDamageFromWater = false; @@ -42,7 +42,7 @@ index bec9316c9e3408f39ab00f096b640f4d4d893b28..a41a3957696d47c5059e96308d17e11b private void piglinSettings() { piglinRidable = getBoolean("mobs.piglin.ridable", piglinRidable); piglinRidableInWater = getBoolean("mobs.piglin.ridable-in-water", piglinRidableInWater); -@@ -1726,6 +1727,7 @@ public class PurpurWorldConfig { +@@ -1728,6 +1729,7 @@ public class PurpurWorldConfig { piglinScale = Mth.clamp(getDouble("mobs.piglin.attributes.scale", piglinScale), 0.0625D, 16.0D); piglinBypassMobGriefing = getBoolean("mobs.piglin.bypass-mob-griefing", piglinBypassMobGriefing); piglinTakeDamageFromWater = getBoolean("mobs.piglin.takes-damage-from-water", piglinTakeDamageFromWater); diff --git a/patches/server/0152-Config-to-change-max-number-of-bees.patch b/patches/server/0152-Config-to-change-max-number-of-bees.patch index 6942ebdc5..4d77b178d 100644 --- a/patches/server/0152-Config-to-change-max-number-of-bees.patch +++ b/patches/server/0152-Config-to-change-max-number-of-bees.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Config to change max number of bees diff --git a/src/main/java/net/minecraft/world/level/block/entity/BeehiveBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/BeehiveBlockEntity.java -index 83ad45aed0894e90825d22e078632352c3a06816..b7ad467d7d7f50bcb90e50f00f905873e89c7956 100644 +index 65a85b4a4e159cfe55e435ed342a87bcc07b21d5..7f0e37e23ff4c64355fdc822c0ac683959b8588a 100644 --- a/src/main/java/net/minecraft/world/level/block/entity/BeehiveBlockEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/BeehiveBlockEntity.java @@ -60,7 +60,7 @@ public class BeehiveBlockEntity extends BlockEntity { diff --git a/patches/server/0153-Config-for-wither-explosion-radius.patch b/patches/server/0153-Config-for-wither-explosion-radius.patch index 656e080de..b384ab056 100644 --- a/patches/server/0153-Config-for-wither-explosion-radius.patch +++ b/patches/server/0153-Config-for-wither-explosion-radius.patch @@ -18,10 +18,10 @@ index e0f25b057b7b908a10038d9e9695a500aa883c75..e63b408594b5d2673148e39c1deafc85 if (!event.isCancelled()) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index a41a3957696d47c5059e96308d17e11b68bb1723..204ab35e0ee032a5596b836141eea604b3eeb5ac 100644 +index be247fe9ca24407350044b020db613ce9a70ff26..176dc97524c6383a4c10ebd0918fd2ca209af3b0 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2414,6 +2414,7 @@ public class PurpurWorldConfig { +@@ -2416,6 +2416,7 @@ public class PurpurWorldConfig { public boolean witherBypassMobGriefing = false; public boolean witherTakeDamageFromWater = false; public boolean witherCanRideVehicles = false; @@ -29,7 +29,7 @@ index a41a3957696d47c5059e96308d17e11b68bb1723..204ab35e0ee032a5596b836141eea604 private void witherSettings() { witherRidable = getBoolean("mobs.wither.ridable", witherRidable); witherRidableInWater = getBoolean("mobs.wither.ridable-in-water", witherRidableInWater); -@@ -2435,6 +2436,7 @@ public class PurpurWorldConfig { +@@ -2437,6 +2438,7 @@ public class PurpurWorldConfig { witherBypassMobGriefing = getBoolean("mobs.wither.bypass-mob-griefing", witherBypassMobGriefing); witherTakeDamageFromWater = getBoolean("mobs.wither.takes-damage-from-water", witherTakeDamageFromWater); witherCanRideVehicles = getBoolean("mobs.wither.can-ride-vehicles", witherCanRideVehicles); diff --git a/patches/server/0155-Configurable-piston-push-limit.patch b/patches/server/0155-Configurable-piston-push-limit.patch index c9026e93a..f7a1f8a9f 100644 --- a/patches/server/0155-Configurable-piston-push-limit.patch +++ b/patches/server/0155-Configurable-piston-push-limit.patch @@ -36,10 +36,10 @@ index 205e223c356634bd6bc6bd58c6f0b7fda61a6f5f..bea05cb928d540a2f19b51bb7352d032 } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 204ab35e0ee032a5596b836141eea604b3eeb5ac..990fcb015588651fff7e720594a5d5341b3f9bba 100644 +index 176dc97524c6383a4c10ebd0918fd2ca209af3b0..19e77eadb5ece2da43eb82f7b7d196e1616348af 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -570,6 +570,11 @@ public class PurpurWorldConfig { +@@ -572,6 +572,11 @@ public class PurpurWorldConfig { lavaSpeedNotNether = getInt("blocks.lava.speed.not-nether", lavaSpeedNotNether); } diff --git a/patches/server/0156-Configurable-broadcast-settings.patch b/patches/server/0156-Configurable-broadcast-settings.patch index 975d39c2d..81970a6d5 100644 --- a/patches/server/0156-Configurable-broadcast-settings.patch +++ b/patches/server/0156-Configurable-broadcast-settings.patch @@ -17,10 +17,10 @@ index 0a16aa193ef24aa8f1716f9e089b8027fa3c0a3c..1e85c9318ede93b8e9fe548a8945324b // Paper end } diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 5f6cab9de8a854ecbd031f9f9b4152f06b28267e..76c6624ba6233b951f7ded4e0ecc1a93fc81b331 100644 +index af7d238fafa84428509563548d343005fe17d460..e15233c4b8847621d400b942b9db641b7148d578 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -1342,6 +1342,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple +@@ -1339,6 +1339,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple })); PlayerTeam scoreboardteam = this.getTeam(); diff --git a/patches/server/0157-Configurable-mob-blindness.patch b/patches/server/0157-Configurable-mob-blindness.patch index dbb40ec09..8dbf704f5 100644 --- a/patches/server/0157-Configurable-mob-blindness.patch +++ b/patches/server/0157-Configurable-mob-blindness.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Configurable mob blindness Ported from https://github.com/raltsmc/mobblindness diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 127befc7514ca36b75735b718751fb4cf3f915c4..0b99628d51df2c4df7ddf1c4c9f54e6dc3612533 100644 +index 327ff173c3f1223d457112f094116e0eec90fcc8..2a187f1b674a6e8279495921088d5a0620c4e404 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java @@ -1078,6 +1078,17 @@ public abstract class LivingEntity extends Entity implements Attackable { diff --git a/patches/server/0159-Config-for-health-to-impact-Creeper-explosion-radius.patch b/patches/server/0159-Config-for-health-to-impact-Creeper-explosion-radius.patch index 6412ab3ca..31e8db0e0 100644 --- a/patches/server/0159-Config-for-health-to-impact-Creeper-explosion-radius.patch +++ b/patches/server/0159-Config-for-health-to-impact-Creeper-explosion-radius.patch @@ -21,10 +21,10 @@ index 0bce10c1cbf9f1788817a2834ec0efa04dd17752..d2de324f024d0a83790e2b86dc765b01 // CraftBukkit end this.dead = true; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 8e86a96cfdb9b8deec4ef0de0dafb2f2635c4f2c..7571c755c49ae3b3870631e5bbdaec4c544b02cc 100644 +index 1ae95a30b6e4cf69028dc61c398651bde526418f..851d0c96350abc8d8c490d92183540b013a98d12 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -952,6 +952,7 @@ public class PurpurWorldConfig { +@@ -954,6 +954,7 @@ public class PurpurWorldConfig { public boolean creeperBypassMobGriefing = false; public boolean creeperTakeDamageFromWater = false; public boolean creeperExplodeWhenKilled = false; @@ -32,7 +32,7 @@ index 8e86a96cfdb9b8deec4ef0de0dafb2f2635c4f2c..7571c755c49ae3b3870631e5bbdaec4c private void creeperSettings() { creeperRidable = getBoolean("mobs.creeper.ridable", creeperRidable); creeperRidableInWater = getBoolean("mobs.creeper.ridable-in-water", creeperRidableInWater); -@@ -968,6 +969,7 @@ public class PurpurWorldConfig { +@@ -970,6 +971,7 @@ public class PurpurWorldConfig { creeperBypassMobGriefing = getBoolean("mobs.creeper.bypass-mob-griefing", creeperBypassMobGriefing); creeperTakeDamageFromWater = getBoolean("mobs.creeper.takes-damage-from-water", creeperTakeDamageFromWater); creeperExplodeWhenKilled = getBoolean("mobs.creeper.explode-when-killed", creeperExplodeWhenKilled); diff --git a/patches/server/0160-Iron-golem-calm-anger-options.patch b/patches/server/0160-Iron-golem-calm-anger-options.patch index b04fdf4cb..eaee52c71 100644 --- a/patches/server/0160-Iron-golem-calm-anger-options.patch +++ b/patches/server/0160-Iron-golem-calm-anger-options.patch @@ -25,10 +25,10 @@ index 6396d31a14815fbe4f9f51dc610af317566bf522..db8420f6d1356d400699bd09e67e5805 } } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 7571c755c49ae3b3870631e5bbdaec4c544b02cc..defe5b19e5595d5c18fcf1100a8b1470cbc5e670 100644 +index 851d0c96350abc8d8c490d92183540b013a98d12..5caaaa88d71f84562f8ab403062bf9ac4eb4dfb9 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1440,6 +1440,8 @@ public class PurpurWorldConfig { +@@ -1442,6 +1442,8 @@ public class PurpurWorldConfig { public double ironGolemMaxHealth = 100.0D; public double ironGolemScale = 1.0D; public boolean ironGolemTakeDamageFromWater = false; @@ -37,7 +37,7 @@ index 7571c755c49ae3b3870631e5bbdaec4c544b02cc..defe5b19e5595d5c18fcf1100a8b1470 private void ironGolemSettings() { ironGolemRidable = getBoolean("mobs.iron_golem.ridable", ironGolemRidable); ironGolemRidableInWater = getBoolean("mobs.iron_golem.ridable-in-water", ironGolemRidableInWater); -@@ -1453,6 +1455,8 @@ public class PurpurWorldConfig { +@@ -1455,6 +1457,8 @@ public class PurpurWorldConfig { ironGolemMaxHealth = getDouble("mobs.iron_golem.attributes.max_health", ironGolemMaxHealth); ironGolemScale = Mth.clamp(getDouble("mobs.iron_golem.attributes.scale", ironGolemScale), 0.0625D, 16.0D); ironGolemTakeDamageFromWater = getBoolean("mobs.iron_golem.takes-damage-from-water", ironGolemTakeDamageFromWater); diff --git a/patches/server/0161-Breedable-parrots.patch b/patches/server/0161-Breedable-parrots.patch index 60ce03748..d0de34e13 100644 --- a/patches/server/0161-Breedable-parrots.patch +++ b/patches/server/0161-Breedable-parrots.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Breedable parrots diff --git a/src/main/java/net/minecraft/world/entity/animal/Parrot.java b/src/main/java/net/minecraft/world/entity/animal/Parrot.java -index 9c7e29307b811d859a0d743b232463e18391b5f0..00759f484cab0d7c8d4e8914dd9f27061c8b7d45 100644 +index f951905a9b985cfeb3a960898724651e395b42e8..4a6137b3984a6a7c4bc0472ada4b61f948840b59 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Parrot.java +++ b/src/main/java/net/minecraft/world/entity/animal/Parrot.java -@@ -224,6 +224,7 @@ public class Parrot extends ShoulderRidingEntity implements VariantHolder type, LevelAccessor world, EntitySpawnReason spawnReason, BlockPos pos, RandomSource random) { -@@ -368,13 +370,13 @@ public class Parrot extends ShoulderRidingEntity implements VariantHolder minecartControllableBlockSpeeds = new HashMap<>(); @@ -45,7 +45,7 @@ index aaa0fe0a1cf368bc680d0a2b94fdb4e6ddee0503..31ccb7c37318a36c41703ea57df0da32 private void minecartSettings() { if (PurpurConfig.version < 12) { boolean oldBool = getBoolean("gameplay-mechanics.controllable-minecarts.place-anywhere", minecartPlaceAnywhere); -@@ -320,6 +321,7 @@ public class PurpurWorldConfig { +@@ -322,6 +323,7 @@ public class PurpurWorldConfig { set("gameplay-mechanics.minecart.controllable.block-speed.grass_block", 0.3D); set("gameplay-mechanics.minecart.controllable.block-speed.stone", 0.5D); } diff --git a/patches/server/0163-Add-config-change-multiplier-critical-damage-value.patch b/patches/server/0163-Add-config-change-multiplier-critical-damage-value.patch index ac2fa14d2..8f28971bb 100644 --- a/patches/server/0163-Add-config-change-multiplier-critical-damage-value.patch +++ b/patches/server/0163-Add-config-change-multiplier-critical-damage-value.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add config change multiplier critical damage value diff --git a/src/main/java/net/minecraft/world/entity/player/Player.java b/src/main/java/net/minecraft/world/entity/player/Player.java -index ae5f7c275003b6fb9f6c5a0277482b4fddf8e74c..4c42ad7e43ab1f19456a89f1b0e82b7a1f6e4108 100644 +index 3dbb473655c4f115e28ce31fa647cd0cb7fbe3c6..1cb8a5391e31017c0e0d958c72338904efc708cb 100644 --- a/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java -@@ -1306,7 +1306,7 @@ public abstract class Player extends LivingEntity { +@@ -1309,7 +1309,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 @@ -18,10 +18,10 @@ index ae5f7c275003b6fb9f6c5a0277482b4fddf8e74c..4c42ad7e43ab1f19456a89f1b0e82b7a float f3 = f + f1; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 31ccb7c37318a36c41703ea57df0da32acec27a9..56ca29d4cdc5007966a6f79a0e8f4cb0390c3a30 100644 +index fb10c66da40ba5e4d0eb5b567d177bbcb2c0fd4c..b5712c7aa0de07736c7e6ae0686ed36ed3629235 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -365,6 +365,7 @@ public class PurpurWorldConfig { +@@ -367,6 +367,7 @@ public class PurpurWorldConfig { public boolean creativeOnePunch = false; public boolean playerSleepNearMonsters = false; public boolean playersSkipNight = true; @@ -29,7 +29,7 @@ index 31ccb7c37318a36c41703ea57df0da32acec27a9..56ca29d4cdc5007966a6f79a0e8f4cb0 private void playerSettings() { if (PurpurConfig.version < 19) { boolean oldVal = getBoolean("gameplay-mechanics.player.idle-timeout.mods-target", idleTimeoutTargetPlayer); -@@ -384,6 +385,7 @@ public class PurpurWorldConfig { +@@ -386,6 +387,7 @@ public class PurpurWorldConfig { creativeOnePunch = getBoolean("gameplay-mechanics.player.one-punch-in-creative", creativeOnePunch); playerSleepNearMonsters = getBoolean("gameplay-mechanics.player.sleep-ignore-nearby-mobs", playerSleepNearMonsters); playersSkipNight = getBoolean("gameplay-mechanics.player.can-skip-night", playersSkipNight); diff --git a/patches/server/0164-Option-to-disable-dragon-egg-teleporting.patch b/patches/server/0164-Option-to-disable-dragon-egg-teleporting.patch index f7ad719dd..2829d6e62 100644 --- a/patches/server/0164-Option-to-disable-dragon-egg-teleporting.patch +++ b/patches/server/0164-Option-to-disable-dragon-egg-teleporting.patch @@ -19,10 +19,10 @@ index 30d15686b1a81de7ac28feb0c6188eb007c6f2fd..b6799db00e157892dd4339a01d2ca360 BlockPos blockposition1 = pos.offset(world.random.nextInt(16) - world.random.nextInt(16), world.random.nextInt(8) - world.random.nextInt(8), world.random.nextInt(16) - world.random.nextInt(16)); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 56ca29d4cdc5007966a6f79a0e8f4cb0390c3a30..db82c66338f2224ac887f3a47fe5e7fcb3ba0a57 100644 +index b5712c7aa0de07736c7e6ae0686ed36ed3629235..427e257d7e53d0dc5fbd4acbaa2c1d1f2a12fff8 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -497,6 +497,11 @@ public class PurpurWorldConfig { +@@ -499,6 +499,11 @@ public class PurpurWorldConfig { }); } diff --git a/patches/server/0167-Bee-can-work-when-raining-or-at-night.patch b/patches/server/0167-Bee-can-work-when-raining-or-at-night.patch index 7c49dc1de..5a8edfaee 100644 --- a/patches/server/0167-Bee-can-work-when-raining-or-at-night.patch +++ b/patches/server/0167-Bee-can-work-when-raining-or-at-night.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Bee can work when raining or at night diff --git a/src/main/java/net/minecraft/world/entity/animal/Bee.java b/src/main/java/net/minecraft/world/entity/animal/Bee.java -index d47e5f774567aa4710686430b66eb1409c2f0c97..8caee835f524d23d061ff73d9fb609482ed57505 100644 +index 82ddbc95370effc5aec4957486915843217c4efa..7804911f296991c15b40d75e51f27b4e30a53245 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Bee.java +++ b/src/main/java/net/minecraft/world/entity/animal/Bee.java -@@ -426,7 +426,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { +@@ -430,7 +430,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { } public static boolean isNightOrRaining(Level world) { @@ -18,10 +18,10 @@ index d47e5f774567aa4710686430b66eb1409c2f0c97..8caee835f524d23d061ff73d9fb60948 public void setStayOutOfHiveCountdown(int cannotEnterHiveTicks) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index db82c66338f2224ac887f3a47fe5e7fcb3ba0a57..1083c6cc35206e09b57ae993623bffa5eecfb1f6 100644 +index 427e257d7e53d0dc5fbd4acbaa2c1d1f2a12fff8..8eaff3384ed2fa6b4f557e82b6c0f89fa8ae7cb4 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -748,6 +748,8 @@ public class PurpurWorldConfig { +@@ -750,6 +750,8 @@ public class PurpurWorldConfig { public double beeScale = 1.0D; public int beeBreedingTicks = 6000; public boolean beeTakeDamageFromWater = true; @@ -30,7 +30,7 @@ index db82c66338f2224ac887f3a47fe5e7fcb3ba0a57..1083c6cc35206e09b57ae993623bffa5 private void beeSettings() { beeRidable = getBoolean("mobs.bee.ridable", beeRidable); beeRidableInWater = getBoolean("mobs.bee.ridable-in-water", beeRidableInWater); -@@ -762,6 +764,8 @@ public class PurpurWorldConfig { +@@ -764,6 +766,8 @@ public class PurpurWorldConfig { beeScale = Mth.clamp(getDouble("mobs.bee.attributes.scale", beeScale), 0.0625D, 16.0D); beeBreedingTicks = getInt("mobs.bee.breeding-delay-ticks", beeBreedingTicks); beeTakeDamageFromWater = getBoolean("mobs.bee.takes-damage-from-water", beeTakeDamageFromWater); diff --git a/patches/server/0168-API-for-any-mob-to-burn-daylight.patch b/patches/server/0168-API-for-any-mob-to-burn-daylight.patch index 71fde9818..7fc76361e 100644 --- a/patches/server/0168-API-for-any-mob-to-burn-daylight.patch +++ b/patches/server/0168-API-for-any-mob-to-burn-daylight.patch @@ -6,7 +6,7 @@ Subject: [PATCH] API for any mob to burn daylight Co-authored by: Encode42 diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 8d0e578c5ee54af4e9f183b2865573881a3f9062..c1ba5eab15bb4b7599c1e5e23b90dfb361af93b6 100644 +index 3bf381f766c478bdb1e645777bd79ba5e8e3949f..00714b79ed8f5bb1c1e2e27905e38683e7ee2fdb 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java @@ -578,6 +578,22 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess @@ -33,10 +33,10 @@ index 8d0e578c5ee54af4e9f183b2865573881a3f9062..c1ba5eab15bb4b7599c1e5e23b90dfb3 this.id = Entity.ENTITY_COUNTER.incrementAndGet(); this.despawnTime = type == EntityType.PLAYER ? -1 : world.paperConfig().entities.spawning.despawnTime.getOrDefault(type, io.papermc.paper.configuration.type.number.IntOr.Disabled.DISABLED).or(-1); // Paper - entity despawn time limit diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 0b99628d51df2c4df7ddf1c4c9f54e6dc3612533..3dade05c9299f339f94b8a29475dc5ba646b26c8 100644 +index 2a187f1b674a6e8279495921088d5a0620c4e404..33fe6d19b3702d8de987fd9292dfca35e08ca875 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -297,6 +297,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -295,6 +295,7 @@ public abstract class LivingEntity extends Entity implements Attackable { public org.bukkit.craftbukkit.entity.CraftLivingEntity getBukkitLivingEntity() { return (org.bukkit.craftbukkit.entity.CraftLivingEntity) super.getBukkitEntity(); } // Paper public boolean silentDeath = false; // Paper - mark entity as dying silently for cancellable death event public net.kyori.adventure.util.TriState frictionState = net.kyori.adventure.util.TriState.NOT_SET; // Paper - Friction API @@ -64,7 +64,7 @@ index 0b99628d51df2c4df7ddf1c4c9f54e6dc3612533..3dade05c9299f339f94b8a29475dc5ba } // CraftBukkit start -@@ -3804,6 +3811,34 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -3815,6 +3822,34 @@ public abstract class LivingEntity extends Entity implements Attackable { } } @@ -100,10 +100,10 @@ index 0b99628d51df2c4df7ddf1c4c9f54e6dc3612533..3dade05c9299f339f94b8a29475dc5ba public boolean isSensitiveToWater() { diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java -index 01da954d982b59bca8d8b76e66021ee04138a923..7ca12a1128661ea36e2e33cda204c7d2df55a21c 100644 +index 0846becd1da3b7b311c491be176a3394c258dd2e..0d68cd513cfed80fcbe011648cc8779beb782aaa 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java -@@ -1776,17 +1776,8 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab +@@ -1779,17 +1779,8 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab protected void playAttackSound() {} public boolean isSunBurnTick() { @@ -124,10 +124,10 @@ index 01da954d982b59bca8d8b76e66021ee04138a923..7ca12a1128661ea36e2e33cda204c7d2 @Override diff --git a/src/main/java/net/minecraft/world/entity/monster/AbstractSkeleton.java b/src/main/java/net/minecraft/world/entity/monster/AbstractSkeleton.java -index cf8422f7b9234a16f4537dfd212c55ded92cb1aa..bbe4c1cb4244ab813ef7d56c46c3ae62701c4824 100644 +index 617d06f7757ffbdd3eea14f7cbd881eaac075cc3..d41ed97feabd5b37f1ffae2a7b12c10895404591 100644 --- a/src/main/java/net/minecraft/world/entity/monster/AbstractSkeleton.java +++ b/src/main/java/net/minecraft/world/entity/monster/AbstractSkeleton.java -@@ -68,6 +68,7 @@ public abstract class AbstractSkeleton extends Monster implements RangedAttackMo +@@ -70,6 +70,7 @@ public abstract class AbstractSkeleton extends Monster implements RangedAttackMo protected AbstractSkeleton(EntityType type, Level world) { super(type, world); this.reassessWeaponGoal(); @@ -135,7 +135,7 @@ index cf8422f7b9234a16f4537dfd212c55ded92cb1aa..bbe4c1cb4244ab813ef7d56c46c3ae62 } @Override -@@ -98,37 +99,14 @@ public abstract class AbstractSkeleton extends Monster implements RangedAttackMo +@@ -100,37 +101,14 @@ public abstract class AbstractSkeleton extends Monster implements RangedAttackMo abstract SoundEvent getStepSound(); // Paper start - shouldBurnInDay API @@ -175,7 +175,7 @@ index cf8422f7b9234a16f4537dfd212c55ded92cb1aa..bbe4c1cb4244ab813ef7d56c46c3ae62 super.aiStep(); } -@@ -245,7 +223,7 @@ public abstract class AbstractSkeleton extends Monster implements RangedAttackMo +@@ -252,7 +230,7 @@ public abstract class AbstractSkeleton extends Monster implements RangedAttackMo super.readAdditionalSaveData(nbt); this.reassessWeaponGoal(); // Paper start - shouldBurnInDay API @@ -184,7 +184,7 @@ index cf8422f7b9234a16f4537dfd212c55ded92cb1aa..bbe4c1cb4244ab813ef7d56c46c3ae62 this.shouldBurnInDay = nbt.getBoolean("Paper.ShouldBurnInDay"); } // Paper end - shouldBurnInDay API -@@ -255,7 +233,7 @@ public abstract class AbstractSkeleton extends Monster implements RangedAttackMo +@@ -262,7 +240,7 @@ public abstract class AbstractSkeleton extends Monster implements RangedAttackMo @Override public void addAdditionalSaveData(CompoundTag nbt) { super.addAdditionalSaveData(nbt); @@ -215,13 +215,13 @@ index 78e95f15de02cc0b2f2c6d71bf6c10828986c6f4..324fca775bacd06dcd521ce4b33d4f7d @Override diff --git a/src/main/java/net/minecraft/world/entity/monster/Phantom.java b/src/main/java/net/minecraft/world/entity/monster/Phantom.java -index 6e665d75f2c3a6cec6307a2befb07e73e48da5eb..cc84fbab113f5633df274deb48de2484b05bb3ff 100644 +index 6a180656fb53b2f2a70cf219dc9ce7918b7d88ad..58318fcd78022eae68637e83d29498591a0387ad 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Phantom.java +++ b/src/main/java/net/minecraft/world/entity/monster/Phantom.java @@ -60,6 +60,7 @@ public class Phantom extends FlyingMob implements Enemy { this.xpReward = 5; this.moveControl = new Phantom.PhantomMoveControl(this); - this.lookControl = new Phantom.PhantomLookControl(this, this); + this.lookControl = new Phantom.PhantomLookControl(this); + this.setShouldBurnInDay(true); // Purpur - API for any mob to burn daylight } @@ -357,7 +357,7 @@ index d79eb7bd6d38a4f1aee89cf0cf331a126351e767..b34dec421adc3ce56c0720a839a43ce4 } // Paper end - Add more Zombie API diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java -index ac4064172f982a6efc25378fbd088cca1dda4a14..02b07d43364c7dec37f1d2adffe123a5b595f669 100644 +index c0b6efefc4d4f31602f39afa76f837300c22f804..d4396ece618c0fec437ed915ce07be3fb5f7dca9 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java @@ -87,6 +87,13 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { @@ -375,7 +375,7 @@ index ac4064172f982a6efc25378fbd088cca1dda4a14..02b07d43364c7dec37f1d2adffe123a5 Preconditions.checkArgument(entity != null, "Unknown entity"); diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java -index d0c409f4efad289e3e325f44b500fc72589d89d4..bf84c9664ca6d6c3d862e592c39bcc59374b63fe 100644 +index 4f98d138a275a6c34528b7a5148ef265bc38d6b5..7ccc40555964b906be6987532de1f319e38741ce 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java @@ -1211,4 +1211,16 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { diff --git a/patches/server/0169-Config-MobEffect-by-world.patch b/patches/server/0169-Config-MobEffect-by-world.patch index 367e8410c..04bd2172b 100644 --- a/patches/server/0169-Config-MobEffect-by-world.patch +++ b/patches/server/0169-Config-MobEffect-by-world.patch @@ -18,10 +18,10 @@ index 11d1ee8fae7670f02cb3f5d57f4774dbde77f48c..88cf1353892a7ead4e0f16822216b151 return true; diff --git a/src/main/java/net/minecraft/world/effect/PoisonMobEffect.java b/src/main/java/net/minecraft/world/effect/PoisonMobEffect.java -index 83c6d17f75c3f0b531bdfd5b5f9bc2a5b3eb7a2c..df43c007e7b9fee58b2cd0892b966ce88cb1f890 100644 +index 3f1e59229d6a71117700a56c87914bc9401f1da2..32c8474ffa88e997bb484caecb21e3dc98991e70 100644 --- a/src/main/java/net/minecraft/world/effect/PoisonMobEffect.java +++ b/src/main/java/net/minecraft/world/effect/PoisonMobEffect.java -@@ -11,8 +11,8 @@ class PoisonMobEffect extends MobEffect { +@@ -13,8 +13,8 @@ public class PoisonMobEffect extends MobEffect { @Override public boolean applyEffectTick(ServerLevel world, LivingEntity entity, int amplifier) { @@ -59,10 +59,10 @@ index 98b74649a667fb9b10afef0ba5383a73022d8c71..837bdc7d6bd4e05b0deded829c678c86 ((CraftPlayer) entityhuman.getBukkitEntity()).sendHealthUpdate(); diff --git a/src/main/java/net/minecraft/world/effect/WitherMobEffect.java b/src/main/java/net/minecraft/world/effect/WitherMobEffect.java -index 303cefba51e19ac43b1f6188ad64ef480715ebaf..98ec88751b3e71c2e7aad633096b7f41608c0b33 100644 +index 55132e6e064ddd15b26286eca335305ed57b2f9e..1e04947995009689315352b79989e7ce4e20073c 100644 --- a/src/main/java/net/minecraft/world/effect/WitherMobEffect.java +++ b/src/main/java/net/minecraft/world/effect/WitherMobEffect.java -@@ -10,7 +10,7 @@ class WitherMobEffect extends MobEffect { +@@ -12,7 +12,7 @@ public class WitherMobEffect extends MobEffect { @Override public boolean applyEffectTick(ServerLevel world, LivingEntity entity, int amplifier) { @@ -72,10 +72,10 @@ index 303cefba51e19ac43b1f6188ad64ef480715ebaf..98ec88751b3e71c2e7aad633096b7f41 } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 1083c6cc35206e09b57ae993623bffa5eecfb1f6..cf3480e98912271cc057d944c8e6931651e9da33 100644 +index 8eaff3384ed2fa6b4f557e82b6c0f89fa8ae7cb4..b279cd51d5661c304bff6a2638bf39df0e3cf952 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -324,6 +324,21 @@ public class PurpurWorldConfig { +@@ -326,6 +326,21 @@ public class PurpurWorldConfig { poweredRailBoostModifier = getDouble("gameplay-mechanics.minecart.powered-rail.boost-modifier", poweredRailBoostModifier); } diff --git a/patches/server/0170-Beacon-Activation-Range-Configurable.patch b/patches/server/0170-Beacon-Activation-Range-Configurable.patch index 80500d956..6ae76d210 100644 --- a/patches/server/0170-Beacon-Activation-Range-Configurable.patch +++ b/patches/server/0170-Beacon-Activation-Range-Configurable.patch @@ -26,10 +26,10 @@ index 0e0d178f2793ab014358f534c8dc53218b89f083..fbc6b0099af34b0247f6144a9cef020f } else { return effectRange; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index cf3480e98912271cc057d944c8e6931651e9da33..f6f645b2d7449fdf3e6bdc618ad2fb38c05846ae 100644 +index b279cd51d5661c304bff6a2638bf39df0e3cf952..2b5543f070925421e3b924e373a9610fd9b24f2a 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -464,6 +464,17 @@ public class PurpurWorldConfig { +@@ -466,6 +466,17 @@ public class PurpurWorldConfig { anvilColorsUseMiniMessage = getBoolean("blocks.anvil.use-mini-message", anvilColorsUseMiniMessage); } diff --git a/patches/server/0171-Make-lightning-rod-range-configurable.patch b/patches/server/0171-Make-lightning-rod-range-configurable.patch index a9dc77207..8235db415 100644 --- a/patches/server/0171-Make-lightning-rod-range-configurable.patch +++ b/patches/server/0171-Make-lightning-rod-range-configurable.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Make lightning rod range configurable diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index ad4f51ed28c797cae83a80234837203ac5dd9017..cbca8b51a38f54caa81a6265eef2cdf93205f55b 100644 +index bd4dbaee9a90909b9fd63d7c6fbac235a1d2264e..01f20a248c15bf46377a8cdb37759b43e872fb08 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -1086,7 +1086,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -1087,7 +1087,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe return holder.is(PoiTypes.LIGHTNING_ROD); }, (blockposition1) -> { return blockposition1.getY() == this.getHeight(Heightmap.Types.WORLD_SURFACE, blockposition1.getX(), blockposition1.getZ()) - 1; diff --git a/patches/server/0172-Burp-delay-burp-after-eating-food-fills-hunger-bar-c.patch b/patches/server/0172-Burp-delay-burp-after-eating-food-fills-hunger-bar-c.patch index 499ed123b..e3e8d869d 100644 --- a/patches/server/0172-Burp-delay-burp-after-eating-food-fills-hunger-bar-c.patch +++ b/patches/server/0172-Burp-delay-burp-after-eating-food-fills-hunger-bar-c.patch @@ -18,10 +18,10 @@ index 837bdc7d6bd4e05b0deded829c678c86ae3d79d5..0c7c0524e487ff32e16dd9939d92bc64 } diff --git a/src/main/java/net/minecraft/world/entity/player/Player.java b/src/main/java/net/minecraft/world/entity/player/Player.java -index 4c42ad7e43ab1f19456a89f1b0e82b7a1f6e4108..c7393d9c8cb2bc4583cd3715a154f9411cc223e1 100644 +index 1cb8a5391e31017c0e0d958c72338904efc708cb..6885f1fb87e9cb5ac5e1ddd55f8b836a711c6f0a 100644 --- a/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java -@@ -198,6 +198,7 @@ public abstract class Player extends LivingEntity { +@@ -201,6 +201,7 @@ public abstract class Player extends LivingEntity { public boolean affectsSpawning = true; // Paper - Affects Spawning API public net.kyori.adventure.util.TriState flyingFallDamage = net.kyori.adventure.util.TriState.NOT_SET; // Paper - flying fall damage public int sixRowEnderchestSlotCount = -1; // Purpur @@ -29,7 +29,7 @@ index 4c42ad7e43ab1f19456a89f1b0e82b7a1f6e4108..c7393d9c8cb2bc4583cd3715a154f941 // CraftBukkit start public boolean fauxSleeping; -@@ -273,6 +274,12 @@ public abstract class Player extends LivingEntity { +@@ -276,6 +277,12 @@ public abstract class Player extends LivingEntity { @Override public void tick() { @@ -40,7 +40,7 @@ index 4c42ad7e43ab1f19456a89f1b0e82b7a1f6e4108..c7393d9c8cb2bc4583cd3715a154f941 + // Purpur end + this.noPhysics = this.isSpectator(); - if (this.isSpectator()) { + if (this.isSpectator() || this.isPassenger()) { this.setOnGround(false); diff --git a/src/main/java/net/minecraft/world/food/FoodData.java b/src/main/java/net/minecraft/world/food/FoodData.java index 6a686be6a69ae890d519a54ca099d4ba14e5b9e1..4f8ee2e5db3352306f3c035052866d95630f4aaf 100644 @@ -80,10 +80,10 @@ index 648c2510beb162e73aed236a3169d0bbb8fc5050..3563a241c0b697dc0167cf7b1aa73fef } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index f6f645b2d7449fdf3e6bdc618ad2fb38c05846ae..8fb83dae4c835ffbdd77fb55c518e37124815743 100644 +index 2b5543f070925421e3b924e373a9610fd9b24f2a..849532c99cfad2870fd22be6e759e153e8fae10b 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -381,6 +381,8 @@ public class PurpurWorldConfig { +@@ -383,6 +383,8 @@ public class PurpurWorldConfig { public boolean playerSleepNearMonsters = false; public boolean playersSkipNight = true; public double playerCriticalDamageMultiplier = 1.5D; @@ -92,7 +92,7 @@ index f6f645b2d7449fdf3e6bdc618ad2fb38c05846ae..8fb83dae4c835ffbdd77fb55c518e371 private void playerSettings() { if (PurpurConfig.version < 19) { boolean oldVal = getBoolean("gameplay-mechanics.player.idle-timeout.mods-target", idleTimeoutTargetPlayer); -@@ -401,6 +403,8 @@ public class PurpurWorldConfig { +@@ -403,6 +405,8 @@ public class PurpurWorldConfig { playerSleepNearMonsters = getBoolean("gameplay-mechanics.player.sleep-ignore-nearby-mobs", playerSleepNearMonsters); playersSkipNight = getBoolean("gameplay-mechanics.player.can-skip-night", playersSkipNight); playerCriticalDamageMultiplier = getDouble("gameplay-mechanics.player.critical-damage-multiplier", playerCriticalDamageMultiplier); diff --git a/patches/server/0173-Allow-player-join-full-server-by-permission.patch b/patches/server/0173-Allow-player-join-full-server-by-permission.patch index 6d33d24eb..fbcdb3243 100644 --- a/patches/server/0173-Allow-player-join-full-server-by-permission.patch +++ b/patches/server/0173-Allow-player-join-full-server-by-permission.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Allow player join full server by permission diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index af6ddb3231083244455d750f91bd3e4b2b4b5a0d..d823c9dc6d898f55e677dc320c84a4d8696671b1 100644 +index db0fe267c1eeb6e2f3ac03a64431d3126d7f5d5a..e1d195ab8b005edd7fcded810ddf903b47c000a1 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java @@ -711,7 +711,7 @@ public abstract class PlayerList { diff --git a/patches/server/0174-Add-portal-permission-bypass.patch b/patches/server/0174-Add-portal-permission-bypass.patch index 917381934..766f9270f 100644 --- a/patches/server/0174-Add-portal-permission-bypass.patch +++ b/patches/server/0174-Add-portal-permission-bypass.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add portal permission bypass diff --git a/src/main/java/net/minecraft/world/entity/player/Player.java b/src/main/java/net/minecraft/world/entity/player/Player.java -index c7393d9c8cb2bc4583cd3715a154f9411cc223e1..81f88c838f35860fdb7d7f62ed1b98f5734c766e 100644 +index 6885f1fb87e9cb5ac5e1ddd55f8b836a711c6f0a..7fccb7672e41545d747de1425335df7061222e52 100644 --- a/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java -@@ -199,6 +199,7 @@ public abstract class Player extends LivingEntity { +@@ -202,6 +202,7 @@ public abstract class Player extends LivingEntity { public net.kyori.adventure.util.TriState flyingFallDamage = net.kyori.adventure.util.TriState.NOT_SET; // Paper - flying fall damage public int sixRowEnderchestSlotCount = -1; // Purpur public int burpDelay = 0; // Purpur @@ -17,7 +17,7 @@ index c7393d9c8cb2bc4583cd3715a154f9411cc223e1..81f88c838f35860fdb7d7f62ed1b98f5 // CraftBukkit start public boolean fauxSleeping; diff --git a/src/main/java/net/minecraft/world/level/block/NetherPortalBlock.java b/src/main/java/net/minecraft/world/level/block/NetherPortalBlock.java -index 10e747edebd6463cdfcea592cec1c232d837f21b..02bcba52e28f757b59e2f384d5744834962870f0 100644 +index 2d53c57c961fa8977e37931775863665381595eb..6c10860aee8b8fac4089fb7f1506c890fb3f5308 100644 --- a/src/main/java/net/minecraft/world/level/block/NetherPortalBlock.java +++ b/src/main/java/net/minecraft/world/level/block/NetherPortalBlock.java @@ -137,7 +137,7 @@ public class NetherPortalBlock extends Block implements Portal { diff --git a/patches/server/0175-Shulker-spawn-from-bullet-options.patch b/patches/server/0175-Shulker-spawn-from-bullet-options.patch index 7d010504e..b5f702948 100644 --- a/patches/server/0175-Shulker-spawn-from-bullet-options.patch +++ b/patches/server/0175-Shulker-spawn-from-bullet-options.patch @@ -13,7 +13,7 @@ Subject: [PATCH] Shulker spawn from bullet options (7 - 1) / 5.0 = 1.2 1.0 - 1.2 = -0.2 0% (6 other shulkers) diff --git a/src/main/java/net/minecraft/world/entity/monster/Shulker.java b/src/main/java/net/minecraft/world/entity/monster/Shulker.java -index 4a04ade0cfeac23afbac1a5ef7dfff0df2136191..79bf3d04fa2c7bcadfff08dc9a464e589866f7db 100644 +index ef44ab79cba3778111c9f27f77219b384761d9e4..8464a8288f7ec7ae14e44b93607ebb0617790c46 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Shulker.java +++ b/src/main/java/net/minecraft/world/entity/monster/Shulker.java @@ -512,12 +512,21 @@ public class Shulker extends AbstractGolem implements VariantHolder settings.component(DataComponents.CONTAINER, ItemContainerContents.EMPTY)); public static final Item SOUL_CAMPFIRE = registerBlock( diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 54c9a86cea5978215159c59fc882bf003143eec2..18cf2be9270623e6088e02aaeace6b9b4711fe0a 100644 +index 51609ddc3890b5a6a9106b6d2960697723651ec2..1e5bb7dc174bd43479534a9cab0b3bf05695ae51 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -213,6 +213,7 @@ public class PurpurWorldConfig { +@@ -214,6 +214,7 @@ public class PurpurWorldConfig { public int enderPearlCooldown = 20; public int enderPearlCooldownCreative = 20; public float enderPearlEndermiteChance = 0.05F; @@ -29,7 +29,7 @@ index 54c9a86cea5978215159c59fc882bf003143eec2..18cf2be9270623e6088e02aaeace6b9b private void itemSettings() { itemImmuneToCactus.clear(); getList("gameplay-mechanics.item.immune.cactus", new ArrayList<>()).forEach(key -> { -@@ -258,6 +259,7 @@ public class PurpurWorldConfig { +@@ -260,6 +261,7 @@ public class PurpurWorldConfig { enderPearlCooldown = getInt("gameplay-mechanics.item.ender-pearl.cooldown", enderPearlCooldown); enderPearlCooldownCreative = getInt("gameplay-mechanics.item.ender-pearl.creative-cooldown", enderPearlCooldownCreative); enderPearlEndermiteChance = (float) getDouble("gameplay-mechanics.item.ender-pearl.endermite-spawn-chance", enderPearlEndermiteChance); diff --git a/patches/server/0177-Option-to-make-drowned-break-doors.patch b/patches/server/0177-Option-to-make-drowned-break-doors.patch index 905476de4..b6a224d0e 100644 --- a/patches/server/0177-Option-to-make-drowned-break-doors.patch +++ b/patches/server/0177-Option-to-make-drowned-break-doors.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Option to make drowned break doors diff --git a/src/main/java/net/minecraft/world/entity/monster/Drowned.java b/src/main/java/net/minecraft/world/entity/monster/Drowned.java -index 1f41e4a88fb41347b8b1ac6b3d1c454ad35ebfc4..ec00c6b2a8b6a5e0ef030d65f86d4a7d72dbeb21 100644 +index f33fa55bd8f894389121d38eb811ff739f31c811..44f6949166cdf78e2d197ab5a5affae6eb649ec7 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Drowned.java +++ b/src/main/java/net/minecraft/world/entity/monster/Drowned.java -@@ -127,6 +127,7 @@ public class Drowned extends Zombie implements RangedAttackMob { +@@ -130,6 +130,7 @@ public class Drowned extends Zombie implements RangedAttackMob { this.goalSelector.addGoal(2, new Drowned.DrownedAttackGoal(this, 1.0, false)); this.goalSelector.addGoal(5, new Drowned.DrownedGoToBeachGoal(this, 1.0)); this.goalSelector.addGoal(6, new Drowned.DrownedSwimUpGoal(this, 1.0, this.level().getSeaLevel())); @@ -17,10 +17,10 @@ index 1f41e4a88fb41347b8b1ac6b3d1c454ad35ebfc4..ec00c6b2a8b6a5e0ef030d65f86d4a7d this.targetSelector.addGoal(1, new HurtByTargetGoal(this, Drowned.class).setAlertOthers(ZombifiedPiglin.class)); this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, 10, true, false, (target, world) -> this.okTarget(target))); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 18cf2be9270623e6088e02aaeace6b9b4711fe0a..acbe91bba0b245fcd4940ea19795babaaf438c80 100644 +index 1e5bb7dc174bd43479534a9cab0b3bf05695ae51..7d4570b6cc775e73a64e0a7ec4fa15397636a0f3 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1081,6 +1081,7 @@ public class PurpurWorldConfig { +@@ -1083,6 +1083,7 @@ public class PurpurWorldConfig { public double drownedJockeyChance = 0.05D; public boolean drownedJockeyTryExistingChickens = true; public boolean drownedTakeDamageFromWater = false; @@ -28,7 +28,7 @@ index 18cf2be9270623e6088e02aaeace6b9b4711fe0a..acbe91bba0b245fcd4940ea19795baba private void drownedSettings() { drownedRidable = getBoolean("mobs.drowned.ridable", drownedRidable); drownedRidableInWater = getBoolean("mobs.drowned.ridable-in-water", drownedRidableInWater); -@@ -1097,6 +1098,7 @@ public class PurpurWorldConfig { +@@ -1099,6 +1100,7 @@ public class PurpurWorldConfig { drownedJockeyChance = getDouble("mobs.drowned.jockey.chance", drownedJockeyChance); drownedJockeyTryExistingChickens = getBoolean("mobs.drowned.jockey.try-existing-chickens", drownedJockeyTryExistingChickens); drownedTakeDamageFromWater = getBoolean("mobs.drowned.takes-damage-from-water", drownedTakeDamageFromWater); diff --git a/patches/server/0178-Configurable-hunger-starvation-damage.patch b/patches/server/0178-Configurable-hunger-starvation-damage.patch index 5f112ab89..15c8cb9d8 100644 --- a/patches/server/0178-Configurable-hunger-starvation-damage.patch +++ b/patches/server/0178-Configurable-hunger-starvation-damage.patch @@ -18,10 +18,10 @@ index 4f8ee2e5db3352306f3c035052866d95630f4aaf..b8b0b89b7f0a21ecff4ab6286f8a114e this.tickTimer = 0; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index acbe91bba0b245fcd4940ea19795babaaf438c80..51aee36c56a8fc36c3f827ea972ed10dc7130c17 100644 +index 7d4570b6cc775e73a64e0a7ec4fa15397636a0f3..d78c39b9db77ee6948fd87c664ab5fa5b61367ea 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2703,4 +2703,9 @@ public class PurpurWorldConfig { +@@ -2705,4 +2705,9 @@ public class PurpurWorldConfig { zombifiedPiglinCountAsPlayerKillWhenAngry = getBoolean("mobs.zombified_piglin.count-as-player-kill-when-angry", zombifiedPiglinCountAsPlayerKillWhenAngry); zombifiedPiglinTakeDamageFromWater = getBoolean("mobs.zombified_piglin.takes-damage-from-water", zombifiedPiglinTakeDamageFromWater); } diff --git a/patches/server/0180-Add-uptime-command.patch b/patches/server/0180-Add-uptime-command.patch index 464266444..3774e9665 100644 --- a/patches/server/0180-Add-uptime-command.patch +++ b/patches/server/0180-Add-uptime-command.patch @@ -17,7 +17,7 @@ index 632fd1b7d3474889b700b153d9cb49676f801b07..068fa5baf5b031358a1ff71e7ac37644 } diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 3b5121bf06ea5ae528778ae643bc5e4c3bb736ae..6d843cf9b326ded0152702802e2c7bd94b0fe936 100644 +index 791fa782d5092e17f332dd6660c42d151182e854..36fb238819e529fdecd8dd904c074d7a3a937db2 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -314,6 +314,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop { // Paper if (!level.isClientSide()) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 51aee36c56a8fc36c3f827ea972ed10dc7130c17..ff9bb8f21d6da7f8d3b0a726098227d95e6e3207 100644 +index d78c39b9db77ee6948fd87c664ab5fa5b61367ea..6cb8722c1ca2c182ed24d8e7770025560898c9e1 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -463,6 +463,280 @@ public class PurpurWorldConfig { +@@ -465,6 +465,280 @@ public class PurpurWorldConfig { snowballDamage = getInt("gameplay-mechanics.projectile-damage.snowball", snowballDamage); } diff --git a/patches/server/0182-Store-placer-on-Block-when-placed.patch b/patches/server/0182-Store-placer-on-Block-when-placed.patch index 5a1cc4009..a972be7e2 100644 --- a/patches/server/0182-Store-placer-on-Block-when-placed.patch +++ b/patches/server/0182-Store-placer-on-Block-when-placed.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Store placer on Block when placed diff --git a/src/main/java/net/minecraft/world/item/ItemStack.java b/src/main/java/net/minecraft/world/item/ItemStack.java -index d644d02b039ca918391a32a04549f7a34386b3f9..42b259c3878bd34b8e7cb768887fd1456be8db35 100644 +index 095c86ea25fc4f385d96d2e92fa67a150e27c489..5964c2e77e9f21c72d9e0655e5f48d2798317779 100644 --- a/src/main/java/net/minecraft/world/item/ItemStack.java +++ b/src/main/java/net/minecraft/world/item/ItemStack.java -@@ -503,6 +503,7 @@ public final class ItemStack implements DataComponentHolder { +@@ -508,6 +508,7 @@ public final class ItemStack implements DataComponentHolder { world.isBlockPlaceCancelled = true; // Paper - prevent calling cleanup logic when undoing a block place upon a cancelled BlockPlaceEvent for (BlockState blockstate : blocks) { blockstate.update(true, false); @@ -16,7 +16,7 @@ index d644d02b039ca918391a32a04549f7a34386b3f9..42b259c3878bd34b8e7cb768887fd145 } world.isBlockPlaceCancelled = false; // Paper - prevent calling cleanup logic when undoing a block place upon a cancelled BlockPlaceEvent world.preventPoiUpdated = false; -@@ -535,6 +536,7 @@ public final class ItemStack implements DataComponentHolder { +@@ -540,6 +541,7 @@ public final class ItemStack implements DataComponentHolder { if (!(block.getBlock() instanceof BaseEntityBlock)) { // Containers get placed automatically block.onPlace(world, newblockposition, oldBlock, true, context); } @@ -25,7 +25,7 @@ index d644d02b039ca918391a32a04549f7a34386b3f9..42b259c3878bd34b8e7cb768887fd145 world.notifyAndUpdatePhysics(newblockposition, null, oldBlock, block, world.getBlockState(newblockposition), updateFlag, 512); // send null chunk as chunk.k() returns false by this point } diff --git a/src/main/java/net/minecraft/world/level/block/Block.java b/src/main/java/net/minecraft/world/level/block/Block.java -index b6d6c2cb9b227a17fb4ce42bc75f92206fbea043..c35513d05bd70e296a0e5ffe92c36016a13173b4 100644 +index c0b1f903962b25d8ff6c2b4fcd2be0e45de09b35..17a157e2dcd977c9f7d886f8867056e88962c32e 100644 --- a/src/main/java/net/minecraft/world/level/block/Block.java +++ b/src/main/java/net/minecraft/world/level/block/Block.java @@ -433,7 +433,17 @@ public class Block extends BlockBehaviour implements ItemLike { diff --git a/patches/server/0183-Summoner-API.patch b/patches/server/0183-Summoner-API.patch index 91ee02057..f19f10e9d 100644 --- a/patches/server/0183-Summoner-API.patch +++ b/patches/server/0183-Summoner-API.patch @@ -93,7 +93,7 @@ index 02cf5a92ff56ada1198e157e0f87f243ad65e488..f445a96eb3991410103225d1b9289261 } diff --git a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java -index f94bb66eb1118a2de2aa89a1b42c3ba24b769d4d..f19d9fc0a993739e34a2d55bbab9f4736f7688b8 100644 +index 8b89c5e88a14b31a807080d54f38148d5901d579..54100d5d9ed31fe292750e668f3c2ba9257f5ef3 100644 --- a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java +++ b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java @@ -86,6 +86,7 @@ public class WitherBoss extends Monster implements RangedAttackMob { @@ -120,7 +120,7 @@ index f94bb66eb1118a2de2aa89a1b42c3ba24b769d4d..f19d9fc0a993739e34a2d55bbab9f473 @Override protected PathNavigation createNavigation(Level world) { FlyingPathNavigation navigationflying = new FlyingPathNavigation(this, world); -@@ -260,6 +270,7 @@ public class WitherBoss extends Monster implements RangedAttackMob { +@@ -259,6 +269,7 @@ public class WitherBoss extends Monster implements RangedAttackMob { public void addAdditionalSaveData(CompoundTag nbt) { super.addAdditionalSaveData(nbt); nbt.putInt("Invul", this.getInvulnerableTicks()); @@ -128,7 +128,7 @@ index f94bb66eb1118a2de2aa89a1b42c3ba24b769d4d..f19d9fc0a993739e34a2d55bbab9f473 } @Override -@@ -269,6 +280,7 @@ public class WitherBoss extends Monster implements RangedAttackMob { +@@ -268,6 +279,7 @@ public class WitherBoss extends Monster implements RangedAttackMob { if (this.hasCustomName()) { this.bossEvent.setName(this.getDisplayName()); } diff --git a/patches/server/0184-Customizable-sleeping-actionbar-messages.patch b/patches/server/0184-Customizable-sleeping-actionbar-messages.patch index 477bba82c..be06ef47a 100644 --- a/patches/server/0184-Customizable-sleeping-actionbar-messages.patch +++ b/patches/server/0184-Customizable-sleeping-actionbar-messages.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Customizable sleeping actionbar messages diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index cbca8b51a38f54caa81a6265eef2cdf93205f55b..139bc93411fb8bafedf283c92161bc5905e7e982 100644 +index 01f20a248c15bf46377a8cdb37759b43e872fb08..04b2d2d917465898f919650d2346608390664bd2 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -1135,11 +1135,27 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -1136,11 +1136,27 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe if (this.canSleepThroughNights()) { if (!this.getServer().isSingleplayer() || this.getServer().isPublished()) { int i = this.getGameRules().getInt(GameRules.RULE_PLAYERS_SLEEPING_PERCENTAGE); @@ -38,10 +38,10 @@ index cbca8b51a38f54caa81a6265eef2cdf93205f55b..139bc93411fb8bafedf283c92161bc59 } diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 76c6624ba6233b951f7ded4e0ecc1a93fc81b331..6a4ced206570f8c1c609e772c0b7d1cf5a6ff9ce 100644 +index e15233c4b8847621d400b942b9db641b7148d578..1b691eafa658bbdfd87dd4a7692e0f6a96103ac2 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -1839,7 +1839,19 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple +@@ -1830,7 +1830,19 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple }); if (!this.serverLevel().canSleepThroughNights()) { diff --git a/patches/server/0185-option-to-disable-shulker-box-items-from-dropping-co.patch b/patches/server/0185-option-to-disable-shulker-box-items-from-dropping-co.patch index 3e583a17f..dcb26a21e 100644 --- a/patches/server/0185-option-to-disable-shulker-box-items-from-dropping-co.patch +++ b/patches/server/0185-option-to-disable-shulker-box-items-from-dropping-co.patch @@ -6,10 +6,10 @@ Subject: [PATCH] option to disable shulker box items from dropping contents diff --git a/src/main/java/net/minecraft/world/item/BlockItem.java b/src/main/java/net/minecraft/world/item/BlockItem.java -index b5b7f1db21a22f16f06ced775c8173f90e36a91c..33d9b5fb6897fefb0f7b9009df7339341cb42317 100644 +index ac5dc472337cd9613db5fc03f64763245129dfd9..f8928d5ac2f107a904ecc636e6bdeee7edd8da45 100644 --- a/src/main/java/net/minecraft/world/item/BlockItem.java +++ b/src/main/java/net/minecraft/world/item/BlockItem.java -@@ -249,6 +249,7 @@ public class BlockItem extends Item { +@@ -274,6 +274,7 @@ public class BlockItem extends Item { ItemContainerContents itemcontainercontents = (ItemContainerContents) entity.getItem().set(DataComponents.CONTAINER, ItemContainerContents.EMPTY); if (itemcontainercontents != null) { @@ -18,10 +18,10 @@ index b5b7f1db21a22f16f06ced775c8173f90e36a91c..33d9b5fb6897fefb0f7b9009df733934 } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index ff9bb8f21d6da7f8d3b0a726098227d95e6e3207..277c1be1ede46b50f865a2c1d1b38ab22cae9ef9 100644 +index 6cb8722c1ca2c182ed24d8e7770025560898c9e1..294153e02ea584ab5a8fc8209dc87660bddc27a7 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -214,6 +214,7 @@ public class PurpurWorldConfig { +@@ -215,6 +215,7 @@ public class PurpurWorldConfig { public int enderPearlCooldownCreative = 20; public float enderPearlEndermiteChance = 0.05F; public int glowBerriesEatGlowDuration = 0; @@ -29,7 +29,7 @@ index ff9bb8f21d6da7f8d3b0a726098227d95e6e3207..277c1be1ede46b50f865a2c1d1b38ab2 private void itemSettings() { itemImmuneToCactus.clear(); getList("gameplay-mechanics.item.immune.cactus", new ArrayList<>()).forEach(key -> { -@@ -260,6 +261,7 @@ public class PurpurWorldConfig { +@@ -262,6 +263,7 @@ public class PurpurWorldConfig { enderPearlCooldownCreative = getInt("gameplay-mechanics.item.ender-pearl.creative-cooldown", enderPearlCooldownCreative); enderPearlEndermiteChance = (float) getDouble("gameplay-mechanics.item.ender-pearl.endermite-spawn-chance", enderPearlEndermiteChance); glowBerriesEatGlowDuration = getInt("gameplay-mechanics.item.glow_berries.eat-glow-duration", glowBerriesEatGlowDuration); diff --git a/patches/server/0186-Big-dripleaf-tilt-delay.patch b/patches/server/0186-Big-dripleaf-tilt-delay.patch index 91dfbb94b..e20bfb0a8 100644 --- a/patches/server/0186-Big-dripleaf-tilt-delay.patch +++ b/patches/server/0186-Big-dripleaf-tilt-delay.patch @@ -24,10 +24,10 @@ index 9e3f1441d62128535112621bf259c24f1a90595b..2535e6d71b690f8dfde41a7d9cb76b6f if (i != -1) { world.scheduleTick(blockposition, (Block) this, i); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 277c1be1ede46b50f865a2c1d1b38ab22cae9ef9..133ffdbb1d042bca487b2fe74e66a6dad9165966 100644 +index 294153e02ea584ab5a8fc8209dc87660bddc27a7..be19290cc292e31b0dba6023168a913244ef54d4 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -778,6 +778,22 @@ public class PurpurWorldConfig { +@@ -780,6 +780,22 @@ public class PurpurWorldConfig { } } diff --git a/patches/server/0187-Player-ridable-in-water-option.patch b/patches/server/0187-Player-ridable-in-water-option.patch index cac1c9248..cea1c55f9 100644 --- a/patches/server/0187-Player-ridable-in-water-option.patch +++ b/patches/server/0187-Player-ridable-in-water-option.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Player ridable in water option diff --git a/src/main/java/net/minecraft/world/entity/player/Player.java b/src/main/java/net/minecraft/world/entity/player/Player.java -index 81f88c838f35860fdb7d7f62ed1b98f5734c766e..d7d5ce7ea223248ebda0a3e4b104baed47378ce1 100644 +index 7fccb7672e41545d747de1425335df7061222e52..2b3ec55bdc652bb432f9747d6215992fd3d710a5 100644 --- a/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java -@@ -2034,6 +2034,13 @@ public abstract class Player extends LivingEntity { +@@ -2037,6 +2037,13 @@ public abstract class Player extends LivingEntity { return slot != EquipmentSlot.BODY; } @@ -23,10 +23,10 @@ index 81f88c838f35860fdb7d7f62ed1b98f5734c766e..d7d5ce7ea223248ebda0a3e4b104baed if (!this.isPassenger() && this.onGround() && !this.isInWater() && !this.isInPowderSnow) { if (this.getShoulderEntityLeft().isEmpty()) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 133ffdbb1d042bca487b2fe74e66a6dad9165966..5ae832b108c05e8940e2dc0c7d6094742915fb1e 100644 +index be19290cc292e31b0dba6023168a913244ef54d4..1205c517d4c73a2a1718a2e3cc87b348f3026af8 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -387,6 +387,7 @@ public class PurpurWorldConfig { +@@ -389,6 +389,7 @@ public class PurpurWorldConfig { public double playerCriticalDamageMultiplier = 1.5D; public int playerBurpDelay = 10; public boolean playerBurpWhenFull = false; @@ -34,7 +34,7 @@ index 133ffdbb1d042bca487b2fe74e66a6dad9165966..5ae832b108c05e8940e2dc0c7d609474 private void playerSettings() { if (PurpurConfig.version < 19) { boolean oldVal = getBoolean("gameplay-mechanics.player.idle-timeout.mods-target", idleTimeoutTargetPlayer); -@@ -409,6 +410,7 @@ public class PurpurWorldConfig { +@@ -411,6 +412,7 @@ public class PurpurWorldConfig { playerCriticalDamageMultiplier = getDouble("gameplay-mechanics.player.critical-damage-multiplier", playerCriticalDamageMultiplier); playerBurpDelay = getInt("gameplay-mechanics.player.burp-delay", playerBurpDelay); playerBurpWhenFull = getBoolean("gameplay-mechanics.player.burp-when-full", playerBurpWhenFull); diff --git a/patches/server/0188-Config-to-disable-Enderman-teleport-on-projectile-hi.patch b/patches/server/0188-Config-to-disable-Enderman-teleport-on-projectile-hi.patch index b9516e183..5515dacda 100644 --- a/patches/server/0188-Config-to-disable-Enderman-teleport-on-projectile-hi.patch +++ b/patches/server/0188-Config-to-disable-Enderman-teleport-on-projectile-hi.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Config to disable Enderman teleport on projectile hit diff --git a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java -index 7adfc08d511efcb69f954fc1f4b4eba90b9d15df..5d2ac5334899935e032f7c882710914906ddc94d 100644 +index dec6be6b823b00642a0066726e3cad298b7ed6a7..2681153860b37d49eb8b12ae08198e56b9fd5cf6 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java +++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java -@@ -430,6 +430,7 @@ public class EnderMan extends Monster implements NeutralMob { +@@ -429,6 +429,7 @@ public class EnderMan extends Monster implements NeutralMob { } else { flag1 = flag && this.hurtWithCleanWater(world, source, (ThrownPotion) source.getDirectEntity(), amount); @@ -17,10 +17,10 @@ index 7adfc08d511efcb69f954fc1f4b4eba90b9d15df..5d2ac5334899935e032f7c8827109149 for (int i = 0; i < 64; ++i) { if (this.teleport()) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 5ae832b108c05e8940e2dc0c7d6094742915fb1e..36d6d52a83f4b5b9273661d816424025f76f4596 100644 +index 1205c517d4c73a2a1718a2e3cc87b348f3026af8..b027f35fc78373d4314a3c7c4d30065f6a2af6ed 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1455,6 +1455,7 @@ public class PurpurWorldConfig { +@@ -1457,6 +1457,7 @@ public class PurpurWorldConfig { public boolean endermanAggroEndermites = true; public boolean endermanAggroEndermitesOnlyIfPlayerSpawned = false; public boolean endermanDisableStareAggro = false; @@ -28,7 +28,7 @@ index 5ae832b108c05e8940e2dc0c7d6094742915fb1e..36d6d52a83f4b5b9273661d816424025 private void endermanSettings() { endermanRidable = getBoolean("mobs.enderman.ridable", endermanRidable); endermanRidableInWater = getBoolean("mobs.enderman.ridable-in-water", endermanRidableInWater); -@@ -1477,6 +1478,7 @@ public class PurpurWorldConfig { +@@ -1479,6 +1480,7 @@ public class PurpurWorldConfig { endermanAggroEndermites = getBoolean("mobs.enderman.aggressive-towards-endermites", endermanAggroEndermites); endermanAggroEndermitesOnlyIfPlayerSpawned = getBoolean("mobs.enderman.aggressive-towards-endermites-only-spawned-by-player-thrown-ender-pearls", endermanAggroEndermitesOnlyIfPlayerSpawned); endermanDisableStareAggro = getBoolean("mobs.enderman.disable-player-stare-aggression", endermanDisableStareAggro); diff --git a/patches/server/0189-Add-compass-command.patch b/patches/server/0189-Add-compass-command.patch index 1765a9cb9..8c5d4f0ba 100644 --- a/patches/server/0189-Add-compass-command.patch +++ b/patches/server/0189-Add-compass-command.patch @@ -17,10 +17,10 @@ index 068fa5baf5b031358a1ff71e7ac376448c0ec95c..eedb3707523b47ab79db326f6d7382cc if (environment.includeIntegrated) { diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 6a4ced206570f8c1c609e772c0b7d1cf5a6ff9ce..883317c9957c13049ff2c01ceb154fba1afe278b 100644 +index 59433ad1b3e187233e69a3a08781f61b022f5707..a8994b1edcc82d15afbe11d12a6a8a0a00c76143 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -331,6 +331,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple +@@ -329,6 +329,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple public org.bukkit.event.player.PlayerQuitEvent.QuitReason quitReason = null; // Paper - Add API for quit reason; there are a lot of changes to do if we change all methods leading to the event public boolean purpurClient = false; // Purpur private boolean tpsBar = false; // Purpur @@ -28,7 +28,7 @@ index 6a4ced206570f8c1c609e772c0b7d1cf5a6ff9ce..883317c9957c13049ff2c01ceb154fba // Paper start - rewrite chunk system private ca.spottedleaf.moonrise.patches.chunk_system.player.RegionizedPlayerChunkLoader.PlayerChunkLoaderData chunkLoader; -@@ -694,6 +695,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple +@@ -692,6 +693,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple } if (nbt.contains("Purpur.TPSBar")) { this.tpsBar = nbt.getBoolean("Purpur.TPSBar"); } // Purpur @@ -36,7 +36,7 @@ index 6a4ced206570f8c1c609e772c0b7d1cf5a6ff9ce..883317c9957c13049ff2c01ceb154fba } @Override -@@ -747,6 +749,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple +@@ -745,6 +747,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple this.saveEnderPearls(nbt); nbt.putBoolean("Purpur.TPSBar", this.tpsBar); // Purpur @@ -44,7 +44,7 @@ index 6a4ced206570f8c1c609e772c0b7d1cf5a6ff9ce..883317c9957c13049ff2c01ceb154fba } private void saveParentVehicle(CompoundTag nbt) { -@@ -3465,5 +3468,13 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple +@@ -3445,5 +3448,13 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple public void tpsBar(boolean tpsBar) { this.tpsBar = tpsBar; } @@ -89,10 +89,10 @@ index 8d41d9a8a2b5b7946c13b8c3ce961fea1a2bc728..e8dc97694f59cfce67e2fe061868a9f0 hideHiddenPlayersFromEntitySelector = getBoolean("settings.command.hide-hidden-players-from-entity-selector", hideHiddenPlayersFromEntitySelector); uptimeFormat = getString("settings.command.uptime.format", uptimeFormat); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 36d6d52a83f4b5b9273661d816424025f76f4596..74515ad36cae0e838224caee3853d2f3d8bc0b11 100644 +index b027f35fc78373d4314a3c7c4d30065f6a2af6ed..a7cecdaffb479a4eb866cd1d3128c4306641e20e 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -215,6 +215,7 @@ public class PurpurWorldConfig { +@@ -216,6 +216,7 @@ public class PurpurWorldConfig { public float enderPearlEndermiteChance = 0.05F; public int glowBerriesEatGlowDuration = 0; public boolean shulkerBoxItemDropContentsWhenDestroyed = true; @@ -100,7 +100,7 @@ index 36d6d52a83f4b5b9273661d816424025f76f4596..74515ad36cae0e838224caee3853d2f3 private void itemSettings() { itemImmuneToCactus.clear(); getList("gameplay-mechanics.item.immune.cactus", new ArrayList<>()).forEach(key -> { -@@ -262,6 +263,7 @@ public class PurpurWorldConfig { +@@ -264,6 +265,7 @@ public class PurpurWorldConfig { enderPearlEndermiteChance = (float) getDouble("gameplay-mechanics.item.ender-pearl.endermite-spawn-chance", enderPearlEndermiteChance); glowBerriesEatGlowDuration = getInt("gameplay-mechanics.item.glow_berries.eat-glow-duration", glowBerriesEatGlowDuration); shulkerBoxItemDropContentsWhenDestroyed = getBoolean("gameplay-mechanics.item.shulker_box.drop-contents-when-destroyed", shulkerBoxItemDropContentsWhenDestroyed); diff --git a/patches/server/0190-Toggle-for-kinetic-damage.patch b/patches/server/0190-Toggle-for-kinetic-damage.patch index 419982cd2..24d371cee 100644 --- a/patches/server/0190-Toggle-for-kinetic-damage.patch +++ b/patches/server/0190-Toggle-for-kinetic-damage.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Toggle for kinetic damage diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 3dade05c9299f339f94b8a29475dc5ba646b26c8..c23ca02f9adbbbf32b0bf9f8a82f55781468aade 100644 +index 33fe6d19b3702d8de987fd9292dfca35e08ca875..0af3e463971697626f847cb96f8a431857c1261e 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -3228,6 +3228,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -3239,6 +3239,7 @@ public abstract class LivingEntity extends Entity implements Attackable { if (f > 0.0F) { this.playSound(this.getFallDamageSound((int) f), 1.0F, 1.0F); diff --git a/patches/server/0191-Add-Option-for-disable-observer-clocks.patch b/patches/server/0191-Add-Option-for-disable-observer-clocks.patch index ce40ddde1..b7997cd7c 100644 --- a/patches/server/0191-Add-Option-for-disable-observer-clocks.patch +++ b/patches/server/0191-Add-Option-for-disable-observer-clocks.patch @@ -18,10 +18,10 @@ index 93ed9406c34804831b86d006dbd6087db9948f08..26cb9990b91991e0a2eadc2dcbbf229e } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 1522df03dab1e9e8e6d471f62067a15350b909d9..1dcd7031ba7f5e759b98533736218c5c0e28be23 100644 +index e4abac46f4bf2011a84acb07df424af10214588b..1f7a8f2b5196d5b15b047e6d67491a8335cbdbc3 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -362,6 +362,11 @@ public class PurpurWorldConfig { +@@ -364,6 +364,11 @@ public class PurpurWorldConfig { villageSiegeSpawning = getBoolean("gameplay-mechanics.mob-spawning.village-sieges", predicate); } diff --git a/patches/server/0192-Customizeable-Zombie-Villager-curing-times.patch b/patches/server/0192-Customizeable-Zombie-Villager-curing-times.patch index a8b06aa05..4a3468688 100644 --- a/patches/server/0192-Customizeable-Zombie-Villager-curing-times.patch +++ b/patches/server/0192-Customizeable-Zombie-Villager-curing-times.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Customizeable Zombie Villager curing times diff --git a/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java b/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java -index 7298ba35cb27269e778de6b265933baed3077b36..623e8ef53d6336b3e3c83fd37eda13244a3b4ab6 100644 +index 95315588a523439a53ac7af3db5fc23adbed6f01..811c5c4bc98401bc9314894eb5cb64bf31b03f63 100644 --- a/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java +++ b/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java @@ -227,7 +227,7 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { @@ -18,10 +18,10 @@ index 7298ba35cb27269e778de6b265933baed3077b36..623e8ef53d6336b3e3c83fd37eda1324 return InteractionResult.SUCCESS_SERVER; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 1dcd7031ba7f5e759b98533736218c5c0e28be23..2710709349c9d32b4b7e83bbb1cc9b1fde29310a 100644 +index 1f7a8f2b5196d5b15b047e6d67491a8335cbdbc3..4fa501f2d0e8f99b9b1aa112e8a4155c4a3ba652 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2961,6 +2961,8 @@ public class PurpurWorldConfig { +@@ -2963,6 +2963,8 @@ public class PurpurWorldConfig { public double zombieVillagerJockeyChance = 0.05D; public boolean zombieVillagerJockeyTryExistingChickens = true; public boolean zombieVillagerTakeDamageFromWater = false; @@ -30,7 +30,7 @@ index 1dcd7031ba7f5e759b98533736218c5c0e28be23..2710709349c9d32b4b7e83bbb1cc9b1f private void zombieVillagerSettings() { zombieVillagerRidable = getBoolean("mobs.zombie_villager.ridable", zombieVillagerRidable); zombieVillagerRidableInWater = getBoolean("mobs.zombie_villager.ridable-in-water", zombieVillagerRidableInWater); -@@ -2977,6 +2979,8 @@ public class PurpurWorldConfig { +@@ -2979,6 +2981,8 @@ public class PurpurWorldConfig { zombieVillagerJockeyChance = getDouble("mobs.zombie_villager.jockey.chance", zombieVillagerJockeyChance); zombieVillagerJockeyTryExistingChickens = getBoolean("mobs.zombie_villager.jockey.try-existing-chickens", zombieVillagerJockeyTryExistingChickens); zombieVillagerTakeDamageFromWater = getBoolean("mobs.zombie_villager.takes-damage-from-water", zombieVillagerTakeDamageFromWater); diff --git a/patches/server/0193-Option-for-sponges-to-work-on-lava-and-mud.patch b/patches/server/0193-Option-for-sponges-to-work-on-lava-and-mud.patch index 3f92a8a7a..6e606cd03 100644 --- a/patches/server/0193-Option-for-sponges-to-work-on-lava-and-mud.patch +++ b/patches/server/0193-Option-for-sponges-to-work-on-lava-and-mud.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Option for sponges to work on lava and mud Co-authored by: granny diff --git a/src/main/java/net/minecraft/world/level/block/SpongeBlock.java b/src/main/java/net/minecraft/world/level/block/SpongeBlock.java -index d82c62cdb219cee0bbc3083e38e18b7615ad09ef..4c5bc71fef307d13b640e534ace0b4411f6e97e2 100644 +index 9201d911cf155aab7735600073426a0d4213f38b..4540d3a31ed89ea3684feeffb85a391655e9cbbc 100644 --- a/src/main/java/net/minecraft/world/level/block/SpongeBlock.java +++ b/src/main/java/net/minecraft/world/level/block/SpongeBlock.java @@ -80,7 +80,7 @@ public class SpongeBlock extends Block { @@ -15,7 +15,7 @@ index d82c62cdb219cee0bbc3083e38e18b7615ad09ef..4c5bc71fef307d13b640e534ace0b441 - if (!fluid.is(FluidTags.WATER)) { + if (!fluid.is(FluidTags.WATER) && (!world.purpurConfig.spongeAbsorbsLava || !fluid.is(FluidTags.LAVA)) && (!world.purpurConfig.spongeAbsorbsWaterFromMud || !iblockdata.is(Blocks.MUD))) { // Purpur - return false; + return BlockPos.TraversalNodeStatus.SKIP; } else { Block block = iblockdata.getBlock(); @@ -95,6 +95,10 @@ public class SpongeBlock extends Block { @@ -28,12 +28,12 @@ index d82c62cdb219cee0bbc3083e38e18b7615ad09ef..4c5bc71fef307d13b640e534ace0b441 + // Purpur end } else { if (!iblockdata.is(Blocks.KELP) && !iblockdata.is(Blocks.KELP_PLANT) && !iblockdata.is(Blocks.SEAGRASS) && !iblockdata.is(Blocks.TALL_SEAGRASS)) { - return false; + return BlockPos.TraversalNodeStatus.SKIP; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 2710709349c9d32b4b7e83bbb1cc9b1fde29310a..afad9ec6ea76ba66cad2f895ce04cc704e8d3235 100644 +index 4fa501f2d0e8f99b9b1aa112e8a4155c4a3ba652..c5964b249302a386bb878d1aa3f3ce2183e52361 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -964,9 +964,13 @@ public class PurpurWorldConfig { +@@ -966,9 +966,13 @@ public class PurpurWorldConfig { public int spongeAbsorptionArea = 65; public int spongeAbsorptionRadius = 6; diff --git a/patches/server/0194-Toggle-for-Wither-s-spawn-sound.patch b/patches/server/0194-Toggle-for-Wither-s-spawn-sound.patch index 368feb102..1a91c8190 100644 --- a/patches/server/0194-Toggle-for-Wither-s-spawn-sound.patch +++ b/patches/server/0194-Toggle-for-Wither-s-spawn-sound.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Toggle for Wither's spawn sound diff --git a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java -index f19d9fc0a993739e34a2d55bbab9f4736f7688b8..a1be1d02bfd8155752e5ea66aa2aaa29361a213a 100644 +index 54100d5d9ed31fe292750e668f3c2ba9257f5ef3..6a85049919f0cdc7051d1789a951d9e36162dfb9 100644 --- a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java +++ b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java -@@ -431,7 +431,7 @@ public class WitherBoss extends Monster implements RangedAttackMob { +@@ -430,7 +430,7 @@ public class WitherBoss extends Monster implements RangedAttackMob { } // CraftBukkit end @@ -18,10 +18,10 @@ index f19d9fc0a993739e34a2d55bbab9f4736f7688b8..a1be1d02bfd8155752e5ea66aa2aaa29 // worldserver.globalLevelEvent(1023, new BlockPosition(this), 0); int viewDistance = world.getCraftServer().getViewDistance() * 16; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index afad9ec6ea76ba66cad2f895ce04cc704e8d3235..5ffcb25ea8c96c5087ece87a67802e25312cccc9 100644 +index c5964b249302a386bb878d1aa3f3ce2183e52361..810258f3c9b49e041db0349ecb8e54d589667e02 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2796,6 +2796,7 @@ public class PurpurWorldConfig { +@@ -2798,6 +2798,7 @@ public class PurpurWorldConfig { public boolean witherTakeDamageFromWater = false; public boolean witherCanRideVehicles = false; public float witherExplosionRadius = 1.0F; @@ -29,7 +29,7 @@ index afad9ec6ea76ba66cad2f895ce04cc704e8d3235..5ffcb25ea8c96c5087ece87a67802e25 private void witherSettings() { witherRidable = getBoolean("mobs.wither.ridable", witherRidable); witherRidableInWater = getBoolean("mobs.wither.ridable-in-water", witherRidableInWater); -@@ -2818,6 +2819,7 @@ public class PurpurWorldConfig { +@@ -2820,6 +2821,7 @@ public class PurpurWorldConfig { witherTakeDamageFromWater = getBoolean("mobs.wither.takes-damage-from-water", witherTakeDamageFromWater); witherCanRideVehicles = getBoolean("mobs.wither.can-ride-vehicles", witherCanRideVehicles); witherExplosionRadius = (float) getDouble("mobs.wither.explosion-radius", witherExplosionRadius); diff --git a/patches/server/0195-Cactus-breaks-from-solid-neighbors-config.patch b/patches/server/0195-Cactus-breaks-from-solid-neighbors-config.patch index bcfa418ed..51ac62c5f 100644 --- a/patches/server/0195-Cactus-breaks-from-solid-neighbors-config.patch +++ b/patches/server/0195-Cactus-breaks-from-solid-neighbors-config.patch @@ -18,10 +18,10 @@ index c045b1cccf0047dbef8c04d5a28d31d53389054f..bbfd8f5d404d0add94f0d8ac89a29646 return false; } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 5ffcb25ea8c96c5087ece87a67802e25312cccc9..081a8a388b354210f3ea04e8a4b6428fc97a9d84 100644 +index 810258f3c9b49e041db0349ecb8e54d589667e02..72d2f15839d04b588e8f43d6a1f06680e7b3d9ee 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -805,6 +805,11 @@ public class PurpurWorldConfig { +@@ -807,6 +807,11 @@ public class PurpurWorldConfig { }); } diff --git a/patches/server/0196-Config-to-remove-curse-of-binding-with-weakness.patch b/patches/server/0196-Config-to-remove-curse-of-binding-with-weakness.patch index c1b9d0408..f80ba5e24 100644 --- a/patches/server/0196-Config-to-remove-curse-of-binding-with-weakness.patch +++ b/patches/server/0196-Config-to-remove-curse-of-binding-with-weakness.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Config to remove curse of binding with weakness diff --git a/src/main/java/net/minecraft/world/inventory/ArmorSlot.java b/src/main/java/net/minecraft/world/inventory/ArmorSlot.java -index 6c0b6abb1698fac9bb902f695b725d4ab783ee90..091e3c3514fcb378b68098114106d09f04d8fb0d 100644 +index db7caaa2e77b9b98adac8add3040131c673c036b..262d9b2507d37edf0ed9c0821059e518d1baa9e9 100644 --- a/src/main/java/net/minecraft/world/inventory/ArmorSlot.java +++ b/src/main/java/net/minecraft/world/inventory/ArmorSlot.java -@@ -45,7 +45,7 @@ class ArmorSlot extends Slot { +@@ -44,7 +44,7 @@ class ArmorSlot extends Slot { @Override public boolean mayPickup(Player playerEntity) { ItemStack itemStack = this.getItem(); @@ -18,10 +18,10 @@ index 6c0b6abb1698fac9bb902f695b725d4ab783ee90..091e3c3514fcb378b68098114106d09f } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 081a8a388b354210f3ea04e8a4b6428fc97a9d84..55d2c1729f639ef2bbb41e72ddd0945dd5662aaf 100644 +index 72d2f15839d04b588e8f43d6a1f06680e7b3d9ee..bb8f71030a2da27cc66820a032ffacf667c0d42b 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -397,6 +397,7 @@ public class PurpurWorldConfig { +@@ -399,6 +399,7 @@ public class PurpurWorldConfig { public int playerBurpDelay = 10; public boolean playerBurpWhenFull = false; public boolean playerRidableInWater = false; @@ -29,7 +29,7 @@ index 081a8a388b354210f3ea04e8a4b6428fc97a9d84..55d2c1729f639ef2bbb41e72ddd0945d private void playerSettings() { if (PurpurConfig.version < 19) { boolean oldVal = getBoolean("gameplay-mechanics.player.idle-timeout.mods-target", idleTimeoutTargetPlayer); -@@ -420,6 +421,7 @@ public class PurpurWorldConfig { +@@ -422,6 +423,7 @@ public class PurpurWorldConfig { playerBurpDelay = getInt("gameplay-mechanics.player.burp-delay", playerBurpDelay); playerBurpWhenFull = getBoolean("gameplay-mechanics.player.burp-when-full", playerBurpWhenFull); playerRidableInWater = getBoolean("gameplay-mechanics.player.ridable-in-water", playerRidableInWater); diff --git a/patches/server/0197-Conduit-behavior-configuration.patch b/patches/server/0197-Conduit-behavior-configuration.patch index 3cffc1546..b38fd0fbc 100644 --- a/patches/server/0197-Conduit-behavior-configuration.patch +++ b/patches/server/0197-Conduit-behavior-configuration.patch @@ -97,10 +97,10 @@ index c1759aeb3e6ad0e4eb66cba3da1b120dd1dce812..1a91bc2e422db0eba65694ac046f1b36 @Override diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 55d2c1729f639ef2bbb41e72ddd0945dd5662aaf..d42047c0e5495a52d324eb6ec2f293bec4b6c472 100644 +index bb8f71030a2da27cc66820a032ffacf667c0d42b..69128f50386bc8a7f0b484493bc24cbc4544a9c1 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -3030,4 +3030,27 @@ public class PurpurWorldConfig { +@@ -3032,4 +3032,27 @@ public class PurpurWorldConfig { private void hungerSettings() { hungerStarvationDamage = (float) getDouble("hunger.starvation-damage", hungerStarvationDamage); } diff --git a/patches/server/0198-Cauldron-fill-chances.patch b/patches/server/0198-Cauldron-fill-chances.patch index 3daf2f1ed..efe956723 100644 --- a/patches/server/0198-Cauldron-fill-chances.patch +++ b/patches/server/0198-Cauldron-fill-chances.patch @@ -47,10 +47,10 @@ index 53cea36ec931de89e0060613acf87beb51dc16ec..fd5489993dca0f940da69e9163f78e5c if (dripChance < f1) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index d42047c0e5495a52d324eb6ec2f293bec4b6c472..7b9bf48039c457f95f23b4d0b80f095a65c55e22 100644 +index 69128f50386bc8a7f0b484493bc24cbc4544a9c1..e3130f456aa1d7e981018017cf3853bd027a41a1 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -3053,4 +3053,15 @@ public class PurpurWorldConfig { +@@ -3055,4 +3055,15 @@ public class PurpurWorldConfig { }); conduitBlocks = conduitBlockList.toArray(Block[]::new); } diff --git a/patches/server/0200-Shulker-change-color-with-dye.patch b/patches/server/0200-Shulker-change-color-with-dye.patch index 539c8d324..e22f5776f 100644 --- a/patches/server/0200-Shulker-change-color-with-dye.patch +++ b/patches/server/0200-Shulker-change-color-with-dye.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Shulker change color with dye diff --git a/src/main/java/net/minecraft/world/entity/monster/Shulker.java b/src/main/java/net/minecraft/world/entity/monster/Shulker.java -index 79bf3d04fa2c7bcadfff08dc9a464e589866f7db..131c7d7e85a3d9ac0e485fd8e56bd419a775289d 100644 +index 8464a8288f7ec7ae14e44b93607ebb0617790c46..837a251afd68b68c5f5f6ab940d62332cb80fe6f 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Shulker.java +++ b/src/main/java/net/minecraft/world/entity/monster/Shulker.java @@ -126,6 +126,19 @@ public class Shulker extends AbstractGolem implements VariantHolder ONE_HOUR) { LocalDate localdate = LocalDate.now(); diff --git a/src/main/java/net/minecraft/world/entity/monster/AbstractSkeleton.java b/src/main/java/net/minecraft/world/entity/monster/AbstractSkeleton.java -index bbe4c1cb4244ab813ef7d56c46c3ae62701c4824..2cadbc0d56908ca978e1735eff07f5e634548606 100644 +index d41ed97feabd5b37f1ffae2a7b12c10895404591..f90f3e3ad7c941e3222a8119d9b01d571eef4c1b 100644 --- a/src/main/java/net/minecraft/world/entity/monster/AbstractSkeleton.java +++ b/src/main/java/net/minecraft/world/entity/monster/AbstractSkeleton.java -@@ -138,11 +138,7 @@ public abstract class AbstractSkeleton extends Monster implements RangedAttackMo +@@ -140,11 +140,7 @@ public abstract class AbstractSkeleton extends Monster implements RangedAttackMo this.reassessWeaponGoal(); this.setCanPickUpLoot(this.level().paperConfig().entities.behavior.mobsCanAlwaysPickUpLoot.skeletons || randomsource.nextFloat() < 0.55F * difficulty.getSpecialMultiplier()); // Paper - Add world settings for mobs picking up loot if (this.getItemBySlot(EquipmentSlot.HEAD).isEmpty()) { @@ -60,10 +60,10 @@ index b34dec421adc3ce56c0720a839a43ce42faeefaf..98e7b57a45ae3cae704c65ec6db5f715 this.armorDropChances[EquipmentSlot.HEAD.getIndex()] = 0.0F; } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index efecfd2379d5e955d78c48fb9771197f52263fd6..8c2fa8ef4630f69998cb8e893a94a6470b035506 100644 +index b8e8f2dd0405f91bdda94cdb9bdae57f07486c41..a783b9cbe2f76f91fc85e514464e078e0dff23ba 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1721,6 +1721,13 @@ public class PurpurWorldConfig { +@@ -1723,6 +1723,13 @@ public class PurpurWorldConfig { guardianTakeDamageFromWater = getBoolean("mobs.guardian.takes-damage-from-water", guardianTakeDamageFromWater); } diff --git a/patches/server/0211-UPnP-Port-Forwarding.patch b/patches/server/0211-UPnP-Port-Forwarding.patch index 92ab737be..f6b112a55 100644 --- a/patches/server/0211-UPnP-Port-Forwarding.patch +++ b/patches/server/0211-UPnP-Port-Forwarding.patch @@ -5,18 +5,18 @@ Subject: [PATCH] UPnP Port Forwarding diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index f03d6ddaeda45fee69f19d765fbf1e23333b8de3..6111c300ea25e73cc8f840dfff94998d3b87dcf3 100644 +index 53cf0ea7f0b26ce0b69a02a4d10f3027b1d1530f..11a03a0865c52551b1dd95695403caf60d4700c4 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -330,6 +330,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop pluginsBlockingSleep = new java.util.HashSet<>(); // Paper - API to allow/disallow tick sleeping public boolean lagging = false; // Purpur + protected boolean upnp = false; // Purpur public volatile Thread shutdownThread; // Paper public volatile boolean abnormalExit = false; // Paper -@@ -1057,6 +1058,15 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop()).forEach(key -> { -@@ -272,6 +275,9 @@ public class PurpurWorldConfig { +@@ -274,6 +277,9 @@ public class PurpurWorldConfig { glowBerriesEatGlowDuration = getInt("gameplay-mechanics.item.glow_berries.eat-glow-duration", glowBerriesEatGlowDuration); shulkerBoxItemDropContentsWhenDestroyed = getBoolean("gameplay-mechanics.item.shulker_box.drop-contents-when-destroyed", shulkerBoxItemDropContentsWhenDestroyed); compassItemShowsBossBar = getBoolean("gameplay-mechanics.item.compass.holding-shows-bossbar", compassItemShowsBossBar); diff --git a/patches/server/0214-Add-option-to-disable-zombie-villagers-cure.patch b/patches/server/0214-Add-option-to-disable-zombie-villagers-cure.patch index fe48bd204..2df9b073d 100644 --- a/patches/server/0214-Add-option-to-disable-zombie-villagers-cure.patch +++ b/patches/server/0214-Add-option-to-disable-zombie-villagers-cure.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Add option to disable zombie villagers cure diff --git a/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java b/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java -index 623e8ef53d6336b3e3c83fd37eda13244a3b4ab6..3759f28c7f516a94ca8fe1b8f82230b9e8cfb9cb 100644 +index 811c5c4bc98401bc9314894eb5cb64bf31b03f63..624b19d415dab0c864b96edf4a7063470739a221 100644 --- a/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java +++ b/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java @@ -224,7 +224,7 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { @@ -18,10 +18,10 @@ index 623e8ef53d6336b3e3c83fd37eda13244a3b4ab6..3759f28c7f516a94ca8fe1b8f82230b9 if (!this.level().isClientSide) { this.startConverting(player.getUUID(), this.random.nextInt(level().purpurConfig.zombieVillagerCuringTimeMax - level().purpurConfig.zombieVillagerCuringTimeMin + 1) + level().purpurConfig.zombieVillagerCuringTimeMin); // Purpur diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index e3428e00f2b28bf2ec6aaed4de33905f25d0b68d..750e2e857c30b3bf9ae02bf038b26fd74246ce51 100644 +index 23c0edd4a38f47335c492742c9a9accf5feb044c..84d7034b5674fd855835bf97ac33fa3c8294f85b 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -3027,6 +3027,7 @@ public class PurpurWorldConfig { +@@ -3029,6 +3029,7 @@ public class PurpurWorldConfig { public boolean zombieVillagerTakeDamageFromWater = false; public int zombieVillagerCuringTimeMin = 3600; public int zombieVillagerCuringTimeMax = 6000; @@ -29,7 +29,7 @@ index e3428e00f2b28bf2ec6aaed4de33905f25d0b68d..750e2e857c30b3bf9ae02bf038b26fd7 private void zombieVillagerSettings() { zombieVillagerRidable = getBoolean("mobs.zombie_villager.ridable", zombieVillagerRidable); zombieVillagerRidableInWater = getBoolean("mobs.zombie_villager.ridable-in-water", zombieVillagerRidableInWater); -@@ -3045,6 +3046,7 @@ public class PurpurWorldConfig { +@@ -3047,6 +3048,7 @@ public class PurpurWorldConfig { zombieVillagerTakeDamageFromWater = getBoolean("mobs.zombie_villager.takes-damage-from-water", zombieVillagerTakeDamageFromWater); zombieVillagerCuringTimeMin = getInt("mobs.zombie_villager.curing_time.min", zombieVillagerCuringTimeMin); zombieVillagerCuringTimeMax = getInt("mobs.zombie_villager.curing_time.max", zombieVillagerCuringTimeMax); diff --git a/patches/server/0215-Persistent-BlockEntity-Lore-and-DisplayName.patch b/patches/server/0215-Persistent-BlockEntity-Lore-and-DisplayName.patch index 511aa7ad9..e07e15871 100644 --- a/patches/server/0215-Persistent-BlockEntity-Lore-and-DisplayName.patch +++ b/patches/server/0215-Persistent-BlockEntity-Lore-and-DisplayName.patch @@ -7,7 +7,7 @@ Makes it so that when a BlockEntity is placed in the world and then broken, the dropped ItemStack retains any original custom display name/lore. diff --git a/src/main/java/net/minecraft/world/item/BlockItem.java b/src/main/java/net/minecraft/world/item/BlockItem.java -index 33d9b5fb6897fefb0f7b9009df7339341cb42317..d58619d1d63a03598b8740dd789d4b6f2c93f8d0 100644 +index f8928d5ac2f107a904ecc636e6bdeee7edd8da45..3d7a09c81b10f7a34d55670b7f2cc50b80550380 100644 --- a/src/main/java/net/minecraft/world/item/BlockItem.java +++ b/src/main/java/net/minecraft/world/item/BlockItem.java @@ -151,7 +151,16 @@ public class BlockItem extends Item { @@ -29,7 +29,7 @@ index 33d9b5fb6897fefb0f7b9009df7339341cb42317..d58619d1d63a03598b8740dd789d4b6f @Nullable diff --git a/src/main/java/net/minecraft/world/level/block/Block.java b/src/main/java/net/minecraft/world/level/block/Block.java -index c35513d05bd70e296a0e5ffe92c36016a13173b4..d324eefa500c528776df698e7f9dcdeab76da167 100644 +index 17a157e2dcd977c9f7d886f8867056e88962c32e..b0fbadd0d6ec3e34e36c9f33ed89a3c315dc4289 100644 --- a/src/main/java/net/minecraft/world/level/block/Block.java +++ b/src/main/java/net/minecraft/world/level/block/Block.java @@ -303,7 +303,7 @@ public class Block extends BlockBehaviour implements ItemLike { @@ -85,10 +85,10 @@ index c35513d05bd70e296a0e5ffe92c36016a13173b4..d324eefa500c528776df698e7f9dcdea double d0 = (double) EntityType.ITEM.getHeight() / 2.0D; double d1 = (double) pos.getX() + 0.5D + Mth.nextDouble(world.random, -0.25D, 0.25D); diff --git a/src/main/java/net/minecraft/world/level/block/entity/BlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/BlockEntity.java -index 1f929b467a0ece3143af58a657cf5983c07a8d51..eaa6ece956f90632831f0558924eaf18680a252b 100644 +index 1f664c10138a6e19bdc0051fa80575516d5602e7..5c5cc77ff2e050e80dc9f6f62ede68d177a0015f 100644 --- a/src/main/java/net/minecraft/world/level/block/entity/BlockEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/BlockEntity.java -@@ -95,6 +95,12 @@ public abstract class BlockEntity { +@@ -94,6 +94,12 @@ public abstract class BlockEntity { if (persistentDataTag instanceof CompoundTag) { this.persistentDataContainer.putAll((CompoundTag) persistentDataTag); } @@ -101,7 +101,7 @@ index 1f929b467a0ece3143af58a657cf5983c07a8d51..eaa6ece956f90632831f0558924eaf18 } // CraftBukkit end -@@ -111,6 +117,15 @@ public abstract class BlockEntity { +@@ -110,6 +116,15 @@ public abstract class BlockEntity { this.loadAdditional(nbt, registries); } @@ -117,7 +117,7 @@ index 1f929b467a0ece3143af58a657cf5983c07a8d51..eaa6ece956f90632831f0558924eaf18 protected void saveAdditional(CompoundTag nbt, HolderLookup.Provider registries) {} public final CompoundTag saveWithFullMetadata(HolderLookup.Provider registries) { -@@ -419,4 +434,16 @@ public abstract class BlockEntity { +@@ -406,4 +421,16 @@ public abstract class BlockEntity { T getOrDefault(DataComponentType type, T fallback); } diff --git a/patches/server/0216-Signs-allow-color-codes.patch b/patches/server/0216-Signs-allow-color-codes.patch index b8cc5c6f2..1ff3defec 100644 --- a/patches/server/0216-Signs-allow-color-codes.patch +++ b/patches/server/0216-Signs-allow-color-codes.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Signs allow color codes diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 883317c9957c13049ff2c01ceb154fba1afe278b..323d474582cf796ae9d40f9d00f277496d3f2c0a 100644 +index a8994b1edcc82d15afbe11d12a6a8a0a00c76143..5d7e539d0baaddffe1bd4660b3552887dfacca5f 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -1976,6 +1976,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple +@@ -1959,6 +1959,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple @Override public void openTextEdit(SignBlockEntity sign, boolean front) { @@ -17,7 +17,7 @@ index 883317c9957c13049ff2c01ceb154fba1afe278b..323d474582cf796ae9d40f9d00f27749 this.connection.send(new ClientboundOpenSignEditorPacket(sign.getBlockPos(), front)); } diff --git a/src/main/java/net/minecraft/world/level/block/entity/SignBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/SignBlockEntity.java -index 8ac19e1e052e73ff3fd09089bb8e3fd687390ee4..6da1eec98c08e4909ecbd48fe90b3fd62011e284 100644 +index 7a1d9a718dc57b5f630ca8e5358120cebaeefb9c..b51b0b0f48b1da6187387d6ec025681e10ed584d 100644 --- a/src/main/java/net/minecraft/world/level/block/entity/SignBlockEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/SignBlockEntity.java @@ -201,16 +201,31 @@ public class SignBlockEntity extends BlockEntity { @@ -84,10 +84,10 @@ index 8ac19e1e052e73ff3fd09089bb8e3fd687390ee4..6da1eec98c08e4909ecbd48fe90b3fd6 public ClientboundBlockEntityDataPacket getUpdatePacket() { return ClientboundBlockEntityDataPacket.create(this); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 70807e2540ac7f7d376df9b41b0b4e5fd3092d60..b9b47cd429c73c856d6ecd9d48fe0c46cee7330d 100644 +index a61c0a67996ae71e2cfde8e8bafaa49bd18cbf22..0f02d924d8b8fd939e268923d234d50c3e406ca9 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1000,6 +1000,11 @@ public class PurpurWorldConfig { +@@ -1002,6 +1002,11 @@ public class PurpurWorldConfig { } } diff --git a/patches/server/0217-Kelp-cave-weeping-and-twisting-vines-configurable-ma.patch b/patches/server/0217-Kelp-cave-weeping-and-twisting-vines-configurable-ma.patch index ff140d74f..7719b8c86 100644 --- a/patches/server/0217-Kelp-cave-weeping-and-twisting-vines-configurable-ma.patch +++ b/patches/server/0217-Kelp-cave-weeping-and-twisting-vines-configurable-ma.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Kelp, cave, weeping, and twisting vines configurable max diff --git a/src/main/java/net/minecraft/world/level/block/CaveVinesBlock.java b/src/main/java/net/minecraft/world/level/block/CaveVinesBlock.java -index c4473c2a778116d48bc3e4796afd901f455070e6..e62217c0bfa6cc426c7d41154f3ccc34d8f242ca 100644 +index 81e572783157926383dd9baa58d30f5419c1616f..84d6ae4acf80f6ff4f418739a0228e740993f950 100644 --- a/src/main/java/net/minecraft/world/level/block/CaveVinesBlock.java +++ b/src/main/java/net/minecraft/world/level/block/CaveVinesBlock.java @@ -94,4 +94,11 @@ public class CaveVinesBlock extends GrowingPlantHeadBlock implements CaveVines { diff --git a/patches/server/0218-Mobs-always-drop-experience.patch b/patches/server/0218-Mobs-always-drop-experience.patch index 3ff375f3e..ab56b09da 100644 --- a/patches/server/0218-Mobs-always-drop-experience.patch +++ b/patches/server/0218-Mobs-always-drop-experience.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Mobs always drop experience diff --git a/src/main/java/net/minecraft/world/entity/GlowSquid.java b/src/main/java/net/minecraft/world/entity/GlowSquid.java -index a83187312422b0e087785d89f4a49b4c67427b95..3283228d7ebf98ce98780725a0a412bea4200da5 100644 +index 52223ecfbc8a66ea3f79c60ef299d2d0e1808ac2..7f75b5485ca047829415cc1ffb0ec28614633707 100644 --- a/src/main/java/net/minecraft/world/entity/GlowSquid.java +++ b/src/main/java/net/minecraft/world/entity/GlowSquid.java @@ -53,6 +53,11 @@ public class GlowSquid extends Squid { @@ -37,10 +37,10 @@ index 7b773edc6fa661e75964a80dcb6820d1b5def54d..c8ffbbccbf20ce911a3d75fa860d5a14 public void readAdditionalSaveData(CompoundTag nbt) { super.readAdditionalSaveData(nbt); diff --git a/src/main/java/net/minecraft/world/entity/animal/Bee.java b/src/main/java/net/minecraft/world/entity/animal/Bee.java -index 8caee835f524d23d061ff73d9fb609482ed57505..db382cf32d215f1b98b960e0c1a8dfaf6e19422f 100644 +index 7804911f296991c15b40d75e51f27b4e30a53245..e2c6691ecca79df5828e6136568933b41ba5e1fa 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Bee.java +++ b/src/main/java/net/minecraft/world/entity/animal/Bee.java -@@ -501,6 +501,11 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { +@@ -505,6 +505,11 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { return this.level().purpurConfig.beeTakeDamageFromWater; } @@ -53,7 +53,7 @@ index 8caee835f524d23d061ff73d9fb609482ed57505..db382cf32d215f1b98b960e0c1a8dfaf public int getRemainingPersistentAngerTime() { return (Integer) this.entityData.get(Bee.DATA_REMAINING_ANGER_TIME); diff --git a/src/main/java/net/minecraft/world/entity/animal/Cat.java b/src/main/java/net/minecraft/world/entity/animal/Cat.java -index 8f0a31c896340907aa8017c0a56fb58db48c2c65..4aad4fdc80070f4000e929fff126714fc67050b0 100644 +index 4d9b177dd640e1b569cfd5575ad795d5962ae7b8..a418ded306908ee9cb9e375104354a6e031305c9 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Cat.java +++ b/src/main/java/net/minecraft/world/entity/animal/Cat.java @@ -139,6 +139,11 @@ public class Cat extends TamableAnimal implements VariantHolder { @@ -165,10 +165,10 @@ index c6e638cf4463db972a99054cb11b07991ca9eb2e..9a6471d2f1eb1c8af006b70b6bba0b66 protected void registerGoals() { if (level().purpurConfig.ironGolemCanSwim) this.goalSelector.addGoal(0, new net.minecraft.world.entity.ai.goal.FloatGoal(this)); // Purpur diff --git a/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java b/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java -index 9d85342439977d3ac72ef133733df4f57a68714a..6cbe80e13a590817d3ecf27d89202f10e2cd83dc 100644 +index 951f94da000587def4832a5fae68c1f5a6c9e2ea..4d05c34dcebc7582fd400066809b4997b2e8a86a 100644 --- a/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java +++ b/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java -@@ -97,6 +97,11 @@ public class MushroomCow extends Cow implements Shearable, VariantHolder { @@ -293,10 +293,10 @@ index 8e316da789cb7a8d4c630c71724a56d6159cf0ac..b3a0146ccfcda9fa33b91d33458086b5 @Override diff --git a/src/main/java/net/minecraft/world/entity/animal/Salmon.java b/src/main/java/net/minecraft/world/entity/animal/Salmon.java -index 486709c9701657c7aa93586f539c18e4157f8ef3..1a0c71ed6f3bd3d961f9b30ab29a62d683195355 100644 +index cd995f8ce3bfd76fa0f4ea3fda71101b09d64ce2..3716201b0889dfb0bacd0e223a29e80ee1f84e8e 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Salmon.java +++ b/src/main/java/net/minecraft/world/entity/animal/Salmon.java -@@ -54,6 +54,11 @@ public class Salmon extends AbstractSchoolingFish implements VariantHolder type, ServerLevelAccessor world, EntitySpawnReason spawnReason, BlockPos pos, RandomSource random ) { diff --git a/src/main/java/net/minecraft/world/entity/monster/Strider.java b/src/main/java/net/minecraft/world/entity/monster/Strider.java -index 6c7b3b306b69c5b0526e48e4e636ed24d5c96820..c3b5b34a54de945071692293645b8a8865aed961 100644 +index cdb8d5c625e18a2a4cf6b5d2da923f63127b6e9c..779ae2e63202c1f189b1f5647218a07c21a84ccd 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Strider.java +++ b/src/main/java/net/minecraft/world/entity/monster/Strider.java @@ -125,6 +125,11 @@ public class Strider extends Animal implements ItemSteerable, Saddleable { @@ -997,10 +997,10 @@ index 151169d76276409d6a042945b05ae680d1f5fd1e..313228811d1eff478887511f99b49706 protected void registerGoals() { super.registerGoals(); diff --git a/src/main/java/net/minecraft/world/entity/monster/WitherSkeleton.java b/src/main/java/net/minecraft/world/entity/monster/WitherSkeleton.java -index 4c426f87fe2833382f48e353b27f381b48774fd9..23fc36780a3e15260f8cb1001c8d676464a9df3a 100644 +index 5f2e9d87c410551b9858c60fa2ca7ff66e23cb2f..80968050fa7680a8d9b379ef7a8db5e91a4b3a8f 100644 --- a/src/main/java/net/minecraft/world/entity/monster/WitherSkeleton.java +++ b/src/main/java/net/minecraft/world/entity/monster/WitherSkeleton.java -@@ -61,6 +61,11 @@ public class WitherSkeleton extends AbstractSkeleton { +@@ -64,6 +64,11 @@ public class WitherSkeleton extends AbstractSkeleton { return this.level().purpurConfig.witherSkeletonTakeDamageFromWater; } @@ -1045,7 +1045,7 @@ index 98e7b57a45ae3cae704c65ec6db5f715f9af99a4..85b03e0bf7436cb846df13c575ad78ac protected void registerGoals() { this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur diff --git a/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java b/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java -index 3759f28c7f516a94ca8fe1b8f82230b9e8cfb9cb..6f6b32bf7f68d05e4173c31f2e631a409b858a05 100644 +index 624b19d415dab0c864b96edf4a7063470739a221..cd66ef1d99f3ce4533c2423fd12b2fcadf481a66 100644 --- a/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java +++ b/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java @@ -132,6 +132,11 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { @@ -1093,10 +1093,10 @@ index 1103274ba096b0cab3c89f0bdfeba15f8954a0de..6144613e834236ec0ebb12872ef9e472 public boolean canBeLeashed() { return true; diff --git a/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java b/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java -index 39cf09e03cd178471757e51334b07b4daffb43be..20608fb46a0af85739e3c0caa843c1a9d45c9659 100644 +index 570af47cd176dfa56c0920a8d41400aa1ade5fd0..a2d29cf854be6f0bc5b5bb99e7002e07ccc4cae9 100644 --- a/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java +++ b/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java -@@ -124,6 +124,11 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento +@@ -127,6 +127,11 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento return this.level().purpurConfig.piglinTakeDamageFromWater; } @@ -1125,7 +1125,7 @@ index 9c196b0cf49cb6f69bd17748fd13ce5960094f88..bc3b0eb21200eae7e419b2571871b36f return Monster.createMonsterAttributes() .add(Attributes.MAX_HEALTH, 50.0) diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java -index b2ea56e3e2a0b7534bd9e16106402c6581057e43..32479bf58040ee980b20e99bb384bb84ef92624f 100644 +index 373d00fce9e8bcb8d9a8d3e8a05987cf243d175a..dfb1b887df63197eab5969dcc3eed2ff68d71911 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java @@ -198,6 +198,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler @@ -1157,10 +1157,10 @@ index 7d219c1bfdcdc6d06dcb91c33ef09f88dca13aa3..37ba31724fb3630c9c7d8040f47be36e protected void registerGoals() { this.goalSelector.addGoal(0, new FloatGoal(this)); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae72a9b69c 100644 +index 0f02d924d8b8fd939e268923d234d50c3e406ca9..d6f3f21751613038dae7db5ada4aa89444a82546 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1087,6 +1087,7 @@ public class PurpurWorldConfig { +@@ -1089,6 +1089,7 @@ public class PurpurWorldConfig { public double axolotlScale = 1.0D; public int axolotlBreedingTicks = 6000; public boolean axolotlTakeDamageFromWater = false; @@ -1168,7 +1168,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae private void axolotlSettings() { axolotlRidable = getBoolean("mobs.axolotl.ridable", axolotlRidable); axolotlControllable = getBoolean("mobs.axolotl.controllable", axolotlControllable); -@@ -1094,6 +1095,7 @@ public class PurpurWorldConfig { +@@ -1096,6 +1097,7 @@ public class PurpurWorldConfig { axolotlScale = Mth.clamp(getDouble("mobs.axolotl.attributes.scale", axolotlScale), 0.0625D, 16.0D); axolotlBreedingTicks = getInt("mobs.axolotl.breeding-delay-ticks", axolotlBreedingTicks); axolotlTakeDamageFromWater = getBoolean("mobs.axolotl.takes-damage-from-water", axolotlTakeDamageFromWater); @@ -1176,7 +1176,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae } public boolean batRidable = false; -@@ -1110,6 +1112,7 @@ public class PurpurWorldConfig { +@@ -1112,6 +1114,7 @@ public class PurpurWorldConfig { public double batArmorToughness = 0.0D; public double batAttackKnockback = 0.0D; public boolean batTakeDamageFromWater = false; @@ -1184,7 +1184,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae private void batSettings() { batRidable = getBoolean("mobs.bat.ridable", batRidable); batRidableInWater = getBoolean("mobs.bat.ridable-in-water", batRidableInWater); -@@ -1130,6 +1133,7 @@ public class PurpurWorldConfig { +@@ -1132,6 +1135,7 @@ public class PurpurWorldConfig { batArmorToughness = getDouble("mobs.bat.attributes.armor_toughness", batArmorToughness); batAttackKnockback = getDouble("mobs.bat.attributes.attack_knockback", batAttackKnockback); batTakeDamageFromWater = getBoolean("mobs.bat.takes-damage-from-water", batTakeDamageFromWater); @@ -1192,7 +1192,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae } public boolean beeRidable = false; -@@ -1142,6 +1146,7 @@ public class PurpurWorldConfig { +@@ -1144,6 +1148,7 @@ public class PurpurWorldConfig { public boolean beeTakeDamageFromWater = true; public boolean beeCanWorkAtNight = false; public boolean beeCanWorkInRain = false; @@ -1200,7 +1200,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae private void beeSettings() { beeRidable = getBoolean("mobs.bee.ridable", beeRidable); beeRidableInWater = getBoolean("mobs.bee.ridable-in-water", beeRidableInWater); -@@ -1158,6 +1163,7 @@ public class PurpurWorldConfig { +@@ -1160,6 +1165,7 @@ public class PurpurWorldConfig { beeTakeDamageFromWater = getBoolean("mobs.bee.takes-damage-from-water", beeTakeDamageFromWater); beeCanWorkAtNight = getBoolean("mobs.bee.can-work-at-night", beeCanWorkAtNight); beeCanWorkInRain = getBoolean("mobs.bee.can-work-in-rain", beeCanWorkInRain); @@ -1208,7 +1208,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae } public boolean blazeRidable = false; -@@ -1167,6 +1173,7 @@ public class PurpurWorldConfig { +@@ -1169,6 +1175,7 @@ public class PurpurWorldConfig { public double blazeMaxHealth = 20.0D; public double blazeScale = 1.0D; public boolean blazeTakeDamageFromWater = true; @@ -1216,7 +1216,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae private void blazeSettings() { blazeRidable = getBoolean("mobs.blaze.ridable", blazeRidable); blazeRidableInWater = getBoolean("mobs.blaze.ridable-in-water", blazeRidableInWater); -@@ -1180,6 +1187,7 @@ public class PurpurWorldConfig { +@@ -1182,6 +1189,7 @@ public class PurpurWorldConfig { blazeMaxHealth = getDouble("mobs.blaze.attributes.max_health", blazeMaxHealth); blazeScale = Mth.clamp(getDouble("mobs.blaze.attributes.scale", blazeScale), 0.0625D, 16.0D); blazeTakeDamageFromWater = getBoolean("mobs.blaze.takes-damage-from-water", blazeTakeDamageFromWater); @@ -1224,7 +1224,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae } public boolean boggedRidable = false; -@@ -1225,6 +1233,7 @@ public class PurpurWorldConfig { +@@ -1227,6 +1235,7 @@ public class PurpurWorldConfig { public int catBreedingTicks = 6000; public DyeColor catDefaultCollarColor = DyeColor.RED; public boolean catTakeDamageFromWater = false; @@ -1232,7 +1232,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae private void catSettings() { catRidable = getBoolean("mobs.cat.ridable", catRidable); catRidableInWater = getBoolean("mobs.cat.ridable-in-water", catRidableInWater); -@@ -1246,6 +1255,7 @@ public class PurpurWorldConfig { +@@ -1248,6 +1257,7 @@ public class PurpurWorldConfig { catDefaultCollarColor = DyeColor.RED; } catTakeDamageFromWater = getBoolean("mobs.cat.takes-damage-from-water", catTakeDamageFromWater); @@ -1240,7 +1240,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae } public boolean caveSpiderRidable = false; -@@ -1254,6 +1264,7 @@ public class PurpurWorldConfig { +@@ -1256,6 +1266,7 @@ public class PurpurWorldConfig { public double caveSpiderMaxHealth = 12.0D; public double caveSpiderScale = 1.0D; public boolean caveSpiderTakeDamageFromWater = false; @@ -1248,7 +1248,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae private void caveSpiderSettings() { caveSpiderRidable = getBoolean("mobs.cave_spider.ridable", caveSpiderRidable); caveSpiderRidableInWater = getBoolean("mobs.cave_spider.ridable-in-water", caveSpiderRidableInWater); -@@ -1266,6 +1277,7 @@ public class PurpurWorldConfig { +@@ -1268,6 +1279,7 @@ public class PurpurWorldConfig { caveSpiderMaxHealth = getDouble("mobs.cave_spider.attributes.max_health", caveSpiderMaxHealth); caveSpiderScale = Mth.clamp(getDouble("mobs.cave_spider.attributes.scale", caveSpiderScale), 0.0625D, 16.0D); caveSpiderTakeDamageFromWater = getBoolean("mobs.cave_spider.takes-damage-from-water", caveSpiderTakeDamageFromWater); @@ -1256,7 +1256,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae } public boolean chickenRidable = false; -@@ -1276,6 +1288,7 @@ public class PurpurWorldConfig { +@@ -1278,6 +1290,7 @@ public class PurpurWorldConfig { public boolean chickenRetaliate = false; public int chickenBreedingTicks = 6000; public boolean chickenTakeDamageFromWater = false; @@ -1264,7 +1264,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae private void chickenSettings() { chickenRidable = getBoolean("mobs.chicken.ridable", chickenRidable); chickenRidableInWater = getBoolean("mobs.chicken.ridable-in-water", chickenRidableInWater); -@@ -1290,6 +1303,7 @@ public class PurpurWorldConfig { +@@ -1292,6 +1305,7 @@ public class PurpurWorldConfig { chickenRetaliate = getBoolean("mobs.chicken.retaliate", chickenRetaliate); chickenBreedingTicks = getInt("mobs.chicken.breeding-delay-ticks", chickenBreedingTicks); chickenTakeDamageFromWater = getBoolean("mobs.chicken.takes-damage-from-water", chickenTakeDamageFromWater); @@ -1272,7 +1272,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae } public boolean codRidable = false; -@@ -1297,6 +1311,7 @@ public class PurpurWorldConfig { +@@ -1299,6 +1313,7 @@ public class PurpurWorldConfig { public double codMaxHealth = 3.0D; public double codScale = 1.0D; public boolean codTakeDamageFromWater = false; @@ -1280,7 +1280,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae private void codSettings() { codRidable = getBoolean("mobs.cod.ridable", codRidable); codControllable = getBoolean("mobs.cod.controllable", codControllable); -@@ -1308,6 +1323,7 @@ public class PurpurWorldConfig { +@@ -1310,6 +1325,7 @@ public class PurpurWorldConfig { codMaxHealth = getDouble("mobs.cod.attributes.max_health", codMaxHealth); codScale = Mth.clamp(getDouble("mobs.cod.attributes.scale", codScale), 0.0625D, 16.0D); codTakeDamageFromWater = getBoolean("mobs.cod.takes-damage-from-water", codTakeDamageFromWater); @@ -1288,7 +1288,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae } public boolean cowRidable = false; -@@ -1320,6 +1336,7 @@ public class PurpurWorldConfig { +@@ -1322,6 +1338,7 @@ public class PurpurWorldConfig { public boolean cowTakeDamageFromWater = false; public double cowNaturallyAggressiveToPlayersChance = 0.0D; public double cowNaturallyAggressiveToPlayersDamage = 2.0D; @@ -1296,7 +1296,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae private void cowSettings() { if (PurpurConfig.version < 22) { double oldValue = getDouble("mobs.cow.naturally-aggressive-to-players-chance", cowNaturallyAggressiveToPlayersChance); -@@ -1341,6 +1358,7 @@ public class PurpurWorldConfig { +@@ -1343,6 +1360,7 @@ public class PurpurWorldConfig { cowTakeDamageFromWater = getBoolean("mobs.cow.takes-damage-from-water", cowTakeDamageFromWater); cowNaturallyAggressiveToPlayersChance = getDouble("mobs.cow.naturally-aggressive-to-players.chance", cowNaturallyAggressiveToPlayersChance); cowNaturallyAggressiveToPlayersDamage = getDouble("mobs.cow.naturally-aggressive-to-players.damage", cowNaturallyAggressiveToPlayersDamage); @@ -1304,7 +1304,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae } public boolean creakingRidable = false; -@@ -1367,6 +1385,7 @@ public class PurpurWorldConfig { +@@ -1369,6 +1387,7 @@ public class PurpurWorldConfig { public boolean creeperTakeDamageFromWater = false; public boolean creeperExplodeWhenKilled = false; public boolean creeperHealthRadius = false; @@ -1312,7 +1312,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae private void creeperSettings() { creeperRidable = getBoolean("mobs.creeper.ridable", creeperRidable); creeperRidableInWater = getBoolean("mobs.creeper.ridable-in-water", creeperRidableInWater); -@@ -1384,6 +1403,7 @@ public class PurpurWorldConfig { +@@ -1386,6 +1405,7 @@ public class PurpurWorldConfig { creeperTakeDamageFromWater = getBoolean("mobs.creeper.takes-damage-from-water", creeperTakeDamageFromWater); creeperExplodeWhenKilled = getBoolean("mobs.creeper.explode-when-killed", creeperExplodeWhenKilled); creeperHealthRadius = getBoolean("mobs.creeper.health-impacts-explosion", creeperHealthRadius); @@ -1320,7 +1320,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae } public boolean dolphinRidable = false; -@@ -1396,6 +1416,7 @@ public class PurpurWorldConfig { +@@ -1398,6 +1418,7 @@ public class PurpurWorldConfig { public boolean dolphinDisableTreasureSearching = false; public boolean dolphinTakeDamageFromWater = false; public double dolphinNaturallyAggressiveToPlayersChance = 0.0D; @@ -1328,7 +1328,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae private void dolphinSettings() { dolphinRidable = getBoolean("mobs.dolphin.ridable", dolphinRidable); dolphinControllable = getBoolean("mobs.dolphin.controllable", dolphinControllable); -@@ -1412,6 +1433,7 @@ public class PurpurWorldConfig { +@@ -1414,6 +1435,7 @@ public class PurpurWorldConfig { dolphinDisableTreasureSearching = getBoolean("mobs.dolphin.disable-treasure-searching", dolphinDisableTreasureSearching); dolphinTakeDamageFromWater = getBoolean("mobs.dolphin.takes-damage-from-water", dolphinTakeDamageFromWater); dolphinNaturallyAggressiveToPlayersChance = getDouble("mobs.dolphin.naturally-aggressive-to-players-chance", dolphinNaturallyAggressiveToPlayersChance); @@ -1336,7 +1336,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae } public boolean donkeyRidableInWater = false; -@@ -1423,6 +1445,7 @@ public class PurpurWorldConfig { +@@ -1425,6 +1447,7 @@ public class PurpurWorldConfig { public double donkeyMovementSpeedMax = 0.175D; public int donkeyBreedingTicks = 6000; public boolean donkeyTakeDamageFromWater = false; @@ -1344,7 +1344,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae private void donkeySettings() { donkeyRidableInWater = getBoolean("mobs.donkey.ridable-in-water", donkeyRidableInWater); if (PurpurConfig.version < 10) { -@@ -1440,6 +1463,7 @@ public class PurpurWorldConfig { +@@ -1442,6 +1465,7 @@ public class PurpurWorldConfig { donkeyMovementSpeedMax = getDouble("mobs.donkey.attributes.movement_speed.max", donkeyMovementSpeedMax); donkeyBreedingTicks = getInt("mobs.donkey.breeding-delay-ticks", donkeyBreedingTicks); donkeyTakeDamageFromWater = getBoolean("mobs.donkey.takes-damage-from-water", donkeyTakeDamageFromWater); @@ -1352,7 +1352,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae } public boolean drownedRidable = false; -@@ -1453,6 +1477,7 @@ public class PurpurWorldConfig { +@@ -1455,6 +1479,7 @@ public class PurpurWorldConfig { public boolean drownedJockeyTryExistingChickens = true; public boolean drownedTakeDamageFromWater = false; public boolean drownedBreakDoors = false; @@ -1360,7 +1360,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae private void drownedSettings() { drownedRidable = getBoolean("mobs.drowned.ridable", drownedRidable); drownedRidableInWater = getBoolean("mobs.drowned.ridable-in-water", drownedRidableInWater); -@@ -1470,6 +1495,7 @@ public class PurpurWorldConfig { +@@ -1472,6 +1497,7 @@ public class PurpurWorldConfig { drownedJockeyTryExistingChickens = getBoolean("mobs.drowned.jockey.try-existing-chickens", drownedJockeyTryExistingChickens); drownedTakeDamageFromWater = getBoolean("mobs.drowned.takes-damage-from-water", drownedTakeDamageFromWater); drownedBreakDoors = getBoolean("mobs.drowned.can-break-doors", drownedBreakDoors); @@ -1368,7 +1368,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae } public boolean elderGuardianRidable = false; -@@ -1477,6 +1503,7 @@ public class PurpurWorldConfig { +@@ -1479,6 +1505,7 @@ public class PurpurWorldConfig { public double elderGuardianMaxHealth = 80.0D; public double elderGuardianScale = 1.0D; public boolean elderGuardianTakeDamageFromWater = false; @@ -1376,7 +1376,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae private void elderGuardianSettings() { elderGuardianRidable = getBoolean("mobs.elder_guardian.ridable", elderGuardianRidable); elderGuardianControllable = getBoolean("mobs.elder_guardian.controllable", elderGuardianControllable); -@@ -1488,6 +1515,7 @@ public class PurpurWorldConfig { +@@ -1490,6 +1517,7 @@ public class PurpurWorldConfig { elderGuardianMaxHealth = getDouble("mobs.elder_guardian.attributes.max_health", elderGuardianMaxHealth); elderGuardianScale = Mth.clamp(getDouble("mobs.elder_guardian.attributes.scale", elderGuardianScale), 0.0625D, 16.0D); elderGuardianTakeDamageFromWater = getBoolean("mobs.elder_guardian.takes-damage-from-water", elderGuardianTakeDamageFromWater); @@ -1384,7 +1384,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae } public boolean enderDragonRidable = false; -@@ -1533,6 +1561,7 @@ public class PurpurWorldConfig { +@@ -1535,6 +1563,7 @@ public class PurpurWorldConfig { public boolean endermanAggroEndermitesOnlyIfPlayerSpawned = false; public boolean endermanDisableStareAggro = false; public boolean endermanIgnoreProjectiles = false; @@ -1392,7 +1392,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae private void endermanSettings() { endermanRidable = getBoolean("mobs.enderman.ridable", endermanRidable); endermanRidableInWater = getBoolean("mobs.enderman.ridable-in-water", endermanRidableInWater); -@@ -1556,6 +1585,7 @@ public class PurpurWorldConfig { +@@ -1558,6 +1587,7 @@ public class PurpurWorldConfig { endermanAggroEndermitesOnlyIfPlayerSpawned = getBoolean("mobs.enderman.aggressive-towards-endermites-only-spawned-by-player-thrown-ender-pearls", endermanAggroEndermitesOnlyIfPlayerSpawned); endermanDisableStareAggro = getBoolean("mobs.enderman.disable-player-stare-aggression", endermanDisableStareAggro); endermanIgnoreProjectiles = getBoolean("mobs.enderman.ignore-projectiles", endermanIgnoreProjectiles); @@ -1400,7 +1400,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae } public boolean endermiteRidable = false; -@@ -1564,6 +1594,7 @@ public class PurpurWorldConfig { +@@ -1566,6 +1596,7 @@ public class PurpurWorldConfig { public double endermiteMaxHealth = 8.0D; public double endermiteScale = 1.0D; public boolean endermiteTakeDamageFromWater = false; @@ -1408,7 +1408,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae private void endermiteSettings() { endermiteRidable = getBoolean("mobs.endermite.ridable", endermiteRidable); endermiteRidableInWater = getBoolean("mobs.endermite.ridable-in-water", endermiteRidableInWater); -@@ -1576,6 +1607,7 @@ public class PurpurWorldConfig { +@@ -1578,6 +1609,7 @@ public class PurpurWorldConfig { endermiteMaxHealth = getDouble("mobs.endermite.attributes.max_health", endermiteMaxHealth); endermiteScale = Mth.clamp(getDouble("mobs.endermite.attributes.scale", endermiteScale), 0.0625D, 16.0D); endermiteTakeDamageFromWater = getBoolean("mobs.endermite.takes-damage-from-water", endermiteTakeDamageFromWater); @@ -1416,7 +1416,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae } public boolean evokerRidable = false; -@@ -1585,6 +1617,7 @@ public class PurpurWorldConfig { +@@ -1587,6 +1619,7 @@ public class PurpurWorldConfig { public double evokerScale = 1.0D; public boolean evokerBypassMobGriefing = false; public boolean evokerTakeDamageFromWater = false; @@ -1424,7 +1424,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae private void evokerSettings() { evokerRidable = getBoolean("mobs.evoker.ridable", evokerRidable); evokerRidableInWater = getBoolean("mobs.evoker.ridable-in-water", evokerRidableInWater); -@@ -1598,6 +1631,7 @@ public class PurpurWorldConfig { +@@ -1600,6 +1633,7 @@ public class PurpurWorldConfig { evokerScale = Mth.clamp(getDouble("mobs.evoker.attributes.scale", evokerScale), 0.0625D, 16.0D); evokerBypassMobGriefing = getBoolean("mobs.evoker.bypass-mob-griefing", evokerBypassMobGriefing); evokerTakeDamageFromWater = getBoolean("mobs.evoker.takes-damage-from-water", evokerTakeDamageFromWater); @@ -1432,7 +1432,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae } public boolean foxRidable = false; -@@ -1609,6 +1643,7 @@ public class PurpurWorldConfig { +@@ -1611,6 +1645,7 @@ public class PurpurWorldConfig { public int foxBreedingTicks = 6000; public boolean foxBypassMobGriefing = false; public boolean foxTakeDamageFromWater = false; @@ -1440,7 +1440,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae private void foxSettings() { foxRidable = getBoolean("mobs.fox.ridable", foxRidable); foxRidableInWater = getBoolean("mobs.fox.ridable-in-water", foxRidableInWater); -@@ -1624,6 +1659,7 @@ public class PurpurWorldConfig { +@@ -1626,6 +1661,7 @@ public class PurpurWorldConfig { foxBreedingTicks = getInt("mobs.fox.breeding-delay-ticks", foxBreedingTicks); foxBypassMobGriefing = getBoolean("mobs.fox.bypass-mob-griefing", foxBypassMobGriefing); foxTakeDamageFromWater = getBoolean("mobs.fox.takes-damage-from-water", foxTakeDamageFromWater); @@ -1448,7 +1448,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae } public boolean frogRidable = false; -@@ -1646,6 +1682,7 @@ public class PurpurWorldConfig { +@@ -1648,6 +1684,7 @@ public class PurpurWorldConfig { public double ghastMaxHealth = 10.0D; public double ghastScale = 1.0D; public boolean ghastTakeDamageFromWater = false; @@ -1456,7 +1456,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae private void ghastSettings() { ghastRidable = getBoolean("mobs.ghast.ridable", ghastRidable); ghastRidableInWater = getBoolean("mobs.ghast.ridable-in-water", ghastRidableInWater); -@@ -1659,6 +1696,7 @@ public class PurpurWorldConfig { +@@ -1661,6 +1698,7 @@ public class PurpurWorldConfig { ghastMaxHealth = getDouble("mobs.ghast.attributes.max_health", ghastMaxHealth); ghastScale = Mth.clamp(getDouble("mobs.ghast.attributes.scale", ghastScale), 0.0625D, 16.0D); ghastTakeDamageFromWater = getBoolean("mobs.ghast.takes-damage-from-water", ghastTakeDamageFromWater); @@ -1464,7 +1464,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae } public boolean giantRidable = false; -@@ -1673,6 +1711,7 @@ public class PurpurWorldConfig { +@@ -1675,6 +1713,7 @@ public class PurpurWorldConfig { public boolean giantHaveAI = false; public boolean giantHaveHostileAI = false; public boolean giantTakeDamageFromWater = false; @@ -1472,7 +1472,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae private void giantSettings() { giantRidable = getBoolean("mobs.giant.ridable", giantRidable); giantRidableInWater = getBoolean("mobs.giant.ridable-in-water", giantRidableInWater); -@@ -1695,6 +1734,7 @@ public class PurpurWorldConfig { +@@ -1697,6 +1736,7 @@ public class PurpurWorldConfig { giantHaveAI = getBoolean("mobs.giant.have-ai", giantHaveAI); giantHaveHostileAI = getBoolean("mobs.giant.have-hostile-ai", giantHaveHostileAI); giantTakeDamageFromWater = getBoolean("mobs.giant.takes-damage-from-water", giantTakeDamageFromWater); @@ -1480,7 +1480,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae } public boolean glowSquidRidable = false; -@@ -1703,6 +1743,7 @@ public class PurpurWorldConfig { +@@ -1705,6 +1745,7 @@ public class PurpurWorldConfig { public double glowSquidScale = 1.0D; public boolean glowSquidsCanFly = false; public boolean glowSquidTakeDamageFromWater = false; @@ -1488,7 +1488,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae private void glowSquidSettings() { glowSquidRidable = getBoolean("mobs.glow_squid.ridable", glowSquidRidable); glowSquidControllable = getBoolean("mobs.glow_squid.controllable", glowSquidControllable); -@@ -1710,6 +1751,7 @@ public class PurpurWorldConfig { +@@ -1712,6 +1753,7 @@ public class PurpurWorldConfig { glowSquidScale = Mth.clamp(getDouble("mobs.glow_squid.attributes.scale", glowSquidScale), 0.0625D, 16.0D); glowSquidsCanFly = getBoolean("mobs.glow_squid.can-fly", glowSquidsCanFly); glowSquidTakeDamageFromWater = getBoolean("mobs.glow_squid.takes-damage-from-water", glowSquidTakeDamageFromWater); @@ -1496,7 +1496,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae } public boolean goatRidable = false; -@@ -1719,6 +1761,7 @@ public class PurpurWorldConfig { +@@ -1721,6 +1763,7 @@ public class PurpurWorldConfig { public double goatScale = 1.0D; public int goatBreedingTicks = 6000; public boolean goatTakeDamageFromWater = false; @@ -1504,7 +1504,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae private void goatSettings() { goatRidable = getBoolean("mobs.goat.ridable", goatRidable); goatRidableInWater = getBoolean("mobs.goat.ridable-in-water", goatRidableInWater); -@@ -1727,6 +1770,7 @@ public class PurpurWorldConfig { +@@ -1729,6 +1772,7 @@ public class PurpurWorldConfig { goatScale = Mth.clamp(getDouble("mobs.goat.attributes.scale", goatScale), 0.0625D, 16.0D); goatBreedingTicks = getInt("mobs.goat.breeding-delay-ticks", goatBreedingTicks); goatTakeDamageFromWater = getBoolean("mobs.goat.takes-damage-from-water", goatTakeDamageFromWater); @@ -1512,7 +1512,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae } public boolean guardianRidable = false; -@@ -1734,6 +1778,7 @@ public class PurpurWorldConfig { +@@ -1736,6 +1780,7 @@ public class PurpurWorldConfig { public double guardianMaxHealth = 30.0D; public double guardianScale = 1.0D; public boolean guardianTakeDamageFromWater = false; @@ -1520,7 +1520,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae private void guardianSettings() { guardianRidable = getBoolean("mobs.guardian.ridable", guardianRidable); guardianControllable = getBoolean("mobs.guardian.controllable", guardianControllable); -@@ -1745,6 +1790,7 @@ public class PurpurWorldConfig { +@@ -1747,6 +1792,7 @@ public class PurpurWorldConfig { guardianMaxHealth = getDouble("mobs.guardian.attributes.max_health", guardianMaxHealth); guardianScale = Mth.clamp(getDouble("mobs.guardian.attributes.scale", guardianScale), 0.0625D, 16.0D); guardianTakeDamageFromWater = getBoolean("mobs.guardian.takes-damage-from-water", guardianTakeDamageFromWater); @@ -1528,7 +1528,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae } public boolean forceHalloweenSeason = false; -@@ -1761,6 +1807,7 @@ public class PurpurWorldConfig { +@@ -1763,6 +1809,7 @@ public class PurpurWorldConfig { public double hoglinScale = 1.0D; public int hoglinBreedingTicks = 6000; public boolean hoglinTakeDamageFromWater = false; @@ -1536,7 +1536,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae private void hoglinSettings() { hoglinRidable = getBoolean("mobs.hoglin.ridable", hoglinRidable); hoglinRidableInWater = getBoolean("mobs.hoglin.ridable-in-water", hoglinRidableInWater); -@@ -1774,6 +1821,7 @@ public class PurpurWorldConfig { +@@ -1776,6 +1823,7 @@ public class PurpurWorldConfig { hoglinScale = Mth.clamp(getDouble("mobs.hoglin.attributes.scale", hoglinScale), 0.0625D, 16.0D); hoglinBreedingTicks = getInt("mobs.hoglin.breeding-delay-ticks", hoglinBreedingTicks); hoglinTakeDamageFromWater = getBoolean("mobs.hoglin.takes-damage-from-water", hoglinTakeDamageFromWater); @@ -1544,7 +1544,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae } public boolean horseRidableInWater = false; -@@ -1785,6 +1833,7 @@ public class PurpurWorldConfig { +@@ -1787,6 +1835,7 @@ public class PurpurWorldConfig { public double horseMovementSpeedMax = 0.3375D; public int horseBreedingTicks = 6000; public boolean horseTakeDamageFromWater = false; @@ -1552,7 +1552,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae private void horseSettings() { horseRidableInWater = getBoolean("mobs.horse.ridable-in-water", horseRidableInWater); if (PurpurConfig.version < 10) { -@@ -1802,6 +1851,7 @@ public class PurpurWorldConfig { +@@ -1804,6 +1853,7 @@ public class PurpurWorldConfig { horseMovementSpeedMax = getDouble("mobs.horse.attributes.movement_speed.max", horseMovementSpeedMax); horseBreedingTicks = getInt("mobs.horse.breeding-delay-ticks", horseBreedingTicks); horseTakeDamageFromWater = getBoolean("mobs.horse.takes-damage-from-water", horseTakeDamageFromWater); @@ -1560,7 +1560,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae } public boolean huskRidable = false; -@@ -1814,6 +1864,7 @@ public class PurpurWorldConfig { +@@ -1816,6 +1866,7 @@ public class PurpurWorldConfig { public double huskJockeyChance = 0.05D; public boolean huskJockeyTryExistingChickens = true; public boolean huskTakeDamageFromWater = false; @@ -1568,7 +1568,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae private void huskSettings() { huskRidable = getBoolean("mobs.husk.ridable", huskRidable); huskRidableInWater = getBoolean("mobs.husk.ridable-in-water", huskRidableInWater); -@@ -1830,6 +1881,7 @@ public class PurpurWorldConfig { +@@ -1832,6 +1883,7 @@ public class PurpurWorldConfig { huskJockeyChance = getDouble("mobs.husk.jockey.chance", huskJockeyChance); huskJockeyTryExistingChickens = getBoolean("mobs.husk.jockey.try-existing-chickens", huskJockeyTryExistingChickens); huskTakeDamageFromWater = getBoolean("mobs.husk.takes-damage-from-water", huskTakeDamageFromWater); @@ -1576,7 +1576,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae } public boolean illusionerRidable = false; -@@ -1840,6 +1892,7 @@ public class PurpurWorldConfig { +@@ -1842,6 +1894,7 @@ public class PurpurWorldConfig { public double illusionerMaxHealth = 32.0D; public double illusionerScale = 1.0D; public boolean illusionerTakeDamageFromWater = false; @@ -1584,7 +1584,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae private void illusionerSettings() { illusionerRidable = getBoolean("mobs.illusioner.ridable", illusionerRidable); illusionerRidableInWater = getBoolean("mobs.illusioner.ridable-in-water", illusionerRidableInWater); -@@ -1858,6 +1911,7 @@ public class PurpurWorldConfig { +@@ -1860,6 +1913,7 @@ public class PurpurWorldConfig { illusionerMaxHealth = getDouble("mobs.illusioner.attributes.max_health", illusionerMaxHealth); illusionerScale = Mth.clamp(getDouble("mobs.illusioner.attributes.scale", illusionerScale), 0.0625D, 16.0D); illusionerTakeDamageFromWater = getBoolean("mobs.illusioner.takes-damage-from-water", illusionerTakeDamageFromWater); @@ -1592,7 +1592,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae } public boolean ironGolemRidable = false; -@@ -1869,6 +1923,7 @@ public class PurpurWorldConfig { +@@ -1871,6 +1925,7 @@ public class PurpurWorldConfig { public boolean ironGolemTakeDamageFromWater = false; public boolean ironGolemPoppyCalm = false; public boolean ironGolemHealCalm = false; @@ -1600,7 +1600,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae private void ironGolemSettings() { ironGolemRidable = getBoolean("mobs.iron_golem.ridable", ironGolemRidable); ironGolemRidableInWater = getBoolean("mobs.iron_golem.ridable-in-water", ironGolemRidableInWater); -@@ -1884,6 +1939,7 @@ public class PurpurWorldConfig { +@@ -1886,6 +1941,7 @@ public class PurpurWorldConfig { ironGolemTakeDamageFromWater = getBoolean("mobs.iron_golem.takes-damage-from-water", ironGolemTakeDamageFromWater); ironGolemPoppyCalm = getBoolean("mobs.iron_golem.poppy-calms-anger", ironGolemPoppyCalm); ironGolemHealCalm = getBoolean("mobs.iron_golem.healing-calms-anger", ironGolemHealCalm); @@ -1608,7 +1608,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae } public boolean llamaRidable = false; -@@ -1898,6 +1954,7 @@ public class PurpurWorldConfig { +@@ -1900,6 +1956,7 @@ public class PurpurWorldConfig { public int llamaBreedingTicks = 6000; public boolean llamaTakeDamageFromWater = false; public boolean llamaJoinCaravans = true; @@ -1616,7 +1616,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae private void llamaSettings() { llamaRidable = getBoolean("mobs.llama.ridable", llamaRidable); llamaRidableInWater = getBoolean("mobs.llama.ridable-in-water", llamaRidableInWater); -@@ -1918,6 +1975,7 @@ public class PurpurWorldConfig { +@@ -1920,6 +1977,7 @@ public class PurpurWorldConfig { llamaBreedingTicks = getInt("mobs.llama.breeding-delay-ticks", llamaBreedingTicks); llamaTakeDamageFromWater = getBoolean("mobs.llama.takes-damage-from-water", llamaTakeDamageFromWater); llamaJoinCaravans = getBoolean("mobs.llama.join-caravans", llamaJoinCaravans); @@ -1624,7 +1624,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae } public boolean magmaCubeRidable = false; -@@ -1928,6 +1986,7 @@ public class PurpurWorldConfig { +@@ -1930,6 +1988,7 @@ public class PurpurWorldConfig { public Map magmaCubeMaxHealthCache = new HashMap<>(); public Map magmaCubeAttackDamageCache = new HashMap<>(); public boolean magmaCubeTakeDamageFromWater = false; @@ -1632,7 +1632,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae private void magmaCubeSettings() { magmaCubeRidable = getBoolean("mobs.magma_cube.ridable", magmaCubeRidable); magmaCubeRidableInWater = getBoolean("mobs.magma_cube.ridable-in-water", magmaCubeRidableInWater); -@@ -1942,6 +2001,7 @@ public class PurpurWorldConfig { +@@ -1944,6 +2003,7 @@ public class PurpurWorldConfig { magmaCubeMaxHealthCache.clear(); magmaCubeAttackDamageCache.clear(); magmaCubeTakeDamageFromWater = getBoolean("mobs.magma_cube.takes-damage-from-water", magmaCubeTakeDamageFromWater); @@ -1640,7 +1640,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae } public boolean mooshroomRidable = false; -@@ -1951,6 +2011,7 @@ public class PurpurWorldConfig { +@@ -1953,6 +2013,7 @@ public class PurpurWorldConfig { public double mooshroomScale = 1.0D; public int mooshroomBreedingTicks = 6000; public boolean mooshroomTakeDamageFromWater = false; @@ -1648,7 +1648,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae private void mooshroomSettings() { mooshroomRidable = getBoolean("mobs.mooshroom.ridable", mooshroomRidable); mooshroomRidableInWater = getBoolean("mobs.mooshroom.ridable-in-water", mooshroomRidableInWater); -@@ -1964,6 +2025,7 @@ public class PurpurWorldConfig { +@@ -1966,6 +2027,7 @@ public class PurpurWorldConfig { mooshroomScale = Mth.clamp(getDouble("mobs.mooshroom.attributes.scale", mooshroomScale), 0.0625D, 16.0D); mooshroomBreedingTicks = getInt("mobs.mooshroom.breeding-delay-ticks", mooshroomBreedingTicks); mooshroomTakeDamageFromWater = getBoolean("mobs.mooshroom.takes-damage-from-water", mooshroomTakeDamageFromWater); @@ -1656,7 +1656,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae } public boolean muleRidableInWater = false; -@@ -1975,6 +2037,7 @@ public class PurpurWorldConfig { +@@ -1977,6 +2039,7 @@ public class PurpurWorldConfig { public double muleMovementSpeedMax = 0.175D; public int muleBreedingTicks = 6000; public boolean muleTakeDamageFromWater = false; @@ -1664,7 +1664,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae private void muleSettings() { muleRidableInWater = getBoolean("mobs.mule.ridable-in-water", muleRidableInWater); if (PurpurConfig.version < 10) { -@@ -1992,6 +2055,7 @@ public class PurpurWorldConfig { +@@ -1994,6 +2057,7 @@ public class PurpurWorldConfig { muleMovementSpeedMax = getDouble("mobs.mule.attributes.movement_speed.max", muleMovementSpeedMax); muleBreedingTicks = getInt("mobs.mule.breeding-delay-ticks", muleBreedingTicks); muleTakeDamageFromWater = getBoolean("mobs.mule.takes-damage-from-water", muleTakeDamageFromWater); @@ -1672,7 +1672,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae } public boolean ocelotRidable = false; -@@ -2001,6 +2065,7 @@ public class PurpurWorldConfig { +@@ -2003,6 +2067,7 @@ public class PurpurWorldConfig { public double ocelotScale = 1.0D; public int ocelotBreedingTicks = 6000; public boolean ocelotTakeDamageFromWater = false; @@ -1680,7 +1680,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae private void ocelotSettings() { ocelotRidable = getBoolean("mobs.ocelot.ridable", ocelotRidable); ocelotRidableInWater = getBoolean("mobs.ocelot.ridable-in-water", ocelotRidableInWater); -@@ -2014,6 +2079,7 @@ public class PurpurWorldConfig { +@@ -2016,6 +2081,7 @@ public class PurpurWorldConfig { ocelotScale = Mth.clamp(getDouble("mobs.ocelot.attributes.scale", ocelotScale), 0.0625D, 16.0D); ocelotBreedingTicks = getInt("mobs.ocelot.breeding-delay-ticks", ocelotBreedingTicks); ocelotTakeDamageFromWater = getBoolean("mobs.ocelot.takes-damage-from-water", ocelotTakeDamageFromWater); @@ -1688,7 +1688,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae } public boolean pandaRidable = false; -@@ -2023,6 +2089,7 @@ public class PurpurWorldConfig { +@@ -2025,6 +2091,7 @@ public class PurpurWorldConfig { public double pandaScale = 1.0D; public int pandaBreedingTicks = 6000; public boolean pandaTakeDamageFromWater = false; @@ -1696,7 +1696,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae private void pandaSettings() { pandaRidable = getBoolean("mobs.panda.ridable", pandaRidable); pandaRidableInWater = getBoolean("mobs.panda.ridable-in-water", pandaRidableInWater); -@@ -2036,6 +2103,7 @@ public class PurpurWorldConfig { +@@ -2038,6 +2105,7 @@ public class PurpurWorldConfig { pandaScale = Mth.clamp(getDouble("mobs.panda.attributes.scale", pandaScale), 0.0625D, 16.0D); pandaBreedingTicks = getInt("mobs.panda.breeding-delay-ticks", pandaBreedingTicks); pandaTakeDamageFromWater = getBoolean("mobs.panda.takes-damage-from-water", pandaTakeDamageFromWater); @@ -1704,7 +1704,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae } public boolean parrotRidable = false; -@@ -2046,6 +2114,7 @@ public class PurpurWorldConfig { +@@ -2048,6 +2116,7 @@ public class PurpurWorldConfig { public double parrotScale = 1.0D; public boolean parrotTakeDamageFromWater = false; public boolean parrotBreedable = false; @@ -1712,7 +1712,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae private void parrotSettings() { parrotRidable = getBoolean("mobs.parrot.ridable", parrotRidable); parrotRidableInWater = getBoolean("mobs.parrot.ridable-in-water", parrotRidableInWater); -@@ -2060,6 +2129,7 @@ public class PurpurWorldConfig { +@@ -2062,6 +2131,7 @@ public class PurpurWorldConfig { parrotScale = Mth.clamp(getDouble("mobs.parrot.attributes.scale", parrotScale), 0.0625D, 16.0D); parrotTakeDamageFromWater = getBoolean("mobs.parrot.takes-damage-from-water", parrotTakeDamageFromWater); parrotBreedable = getBoolean("mobs.parrot.can-breed", parrotBreedable); @@ -1720,7 +1720,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae } public boolean phantomRidable = false; -@@ -2087,6 +2157,7 @@ public class PurpurWorldConfig { +@@ -2089,6 +2159,7 @@ public class PurpurWorldConfig { public boolean phantomBurnInDaylight = true; public boolean phantomFlamesOnSwoop = false; public boolean phantomTakeDamageFromWater = false; @@ -1728,7 +1728,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae private void phantomSettings() { phantomRidable = getBoolean("mobs.phantom.ridable", phantomRidable); phantomRidableInWater = getBoolean("mobs.phantom.ridable-in-water", phantomRidableInWater); -@@ -2122,6 +2193,7 @@ public class PurpurWorldConfig { +@@ -2124,6 +2195,7 @@ public class PurpurWorldConfig { phantomIgnorePlayersWithTorch = getBoolean("mobs.phantom.ignore-players-with-torch", phantomIgnorePlayersWithTorch); phantomFlamesOnSwoop = getBoolean("mobs.phantom.flames-on-swoop", phantomFlamesOnSwoop); phantomTakeDamageFromWater = getBoolean("mobs.phantom.takes-damage-from-water", phantomTakeDamageFromWater); @@ -1736,7 +1736,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae } public boolean pigRidable = false; -@@ -2132,6 +2204,7 @@ public class PurpurWorldConfig { +@@ -2134,6 +2206,7 @@ public class PurpurWorldConfig { public boolean pigGiveSaddleBack = false; public int pigBreedingTicks = 6000; public boolean pigTakeDamageFromWater = false; @@ -1744,7 +1744,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae private void pigSettings() { pigRidable = getBoolean("mobs.pig.ridable", pigRidable); pigRidableInWater = getBoolean("mobs.pig.ridable-in-water", pigRidableInWater); -@@ -2146,6 +2219,7 @@ public class PurpurWorldConfig { +@@ -2148,6 +2221,7 @@ public class PurpurWorldConfig { pigGiveSaddleBack = getBoolean("mobs.pig.give-saddle-back", pigGiveSaddleBack); pigBreedingTicks = getInt("mobs.pig.breeding-delay-ticks", pigBreedingTicks); pigTakeDamageFromWater = getBoolean("mobs.pig.takes-damage-from-water", pigTakeDamageFromWater); @@ -1752,7 +1752,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae } public boolean piglinRidable = false; -@@ -2156,6 +2230,7 @@ public class PurpurWorldConfig { +@@ -2158,6 +2232,7 @@ public class PurpurWorldConfig { public boolean piglinBypassMobGriefing = false; public boolean piglinTakeDamageFromWater = false; public int piglinPortalSpawnModifier = 2000; @@ -1760,7 +1760,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae private void piglinSettings() { piglinRidable = getBoolean("mobs.piglin.ridable", piglinRidable); piglinRidableInWater = getBoolean("mobs.piglin.ridable-in-water", piglinRidableInWater); -@@ -2170,6 +2245,7 @@ public class PurpurWorldConfig { +@@ -2172,6 +2247,7 @@ public class PurpurWorldConfig { piglinBypassMobGriefing = getBoolean("mobs.piglin.bypass-mob-griefing", piglinBypassMobGriefing); piglinTakeDamageFromWater = getBoolean("mobs.piglin.takes-damage-from-water", piglinTakeDamageFromWater); piglinPortalSpawnModifier = getInt("mobs.piglin.portal-spawn-modifier", piglinPortalSpawnModifier); @@ -1768,7 +1768,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae } public boolean piglinBruteRidable = false; -@@ -2178,6 +2254,7 @@ public class PurpurWorldConfig { +@@ -2180,6 +2256,7 @@ public class PurpurWorldConfig { public double piglinBruteMaxHealth = 50.0D; public double piglinBruteScale = 1.0D; public boolean piglinBruteTakeDamageFromWater = false; @@ -1776,7 +1776,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae private void piglinBruteSettings() { piglinBruteRidable = getBoolean("mobs.piglin_brute.ridable", piglinBruteRidable); piglinBruteRidableInWater = getBoolean("mobs.piglin_brute.ridable-in-water", piglinBruteRidableInWater); -@@ -2190,6 +2267,7 @@ public class PurpurWorldConfig { +@@ -2192,6 +2269,7 @@ public class PurpurWorldConfig { piglinBruteMaxHealth = getDouble("mobs.piglin_brute.attributes.max_health", piglinBruteMaxHealth); piglinBruteScale = Mth.clamp(getDouble("mobs.piglin_brute.attributes.scale", piglinBruteScale), 0.0625D, 16.0D); piglinBruteTakeDamageFromWater = getBoolean("mobs.piglin_brute.takes-damage-from-water", piglinBruteTakeDamageFromWater); @@ -1784,7 +1784,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae } public boolean pillagerRidable = false; -@@ -2199,6 +2277,7 @@ public class PurpurWorldConfig { +@@ -2201,6 +2279,7 @@ public class PurpurWorldConfig { public double pillagerScale = 1.0D; public boolean pillagerBypassMobGriefing = false; public boolean pillagerTakeDamageFromWater = false; @@ -1792,7 +1792,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae private void pillagerSettings() { pillagerRidable = getBoolean("mobs.pillager.ridable", pillagerRidable); pillagerRidableInWater = getBoolean("mobs.pillager.ridable-in-water", pillagerRidableInWater); -@@ -2212,6 +2291,7 @@ public class PurpurWorldConfig { +@@ -2214,6 +2293,7 @@ public class PurpurWorldConfig { pillagerScale = Mth.clamp(getDouble("mobs.pillager.attributes.scale", pillagerScale), 0.0625D, 16.0D); pillagerBypassMobGriefing = getBoolean("mobs.pillager.bypass-mob-griefing", pillagerBypassMobGriefing); pillagerTakeDamageFromWater = getBoolean("mobs.pillager.takes-damage-from-water", pillagerTakeDamageFromWater); @@ -1800,7 +1800,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae } public boolean polarBearRidable = false; -@@ -2223,6 +2303,7 @@ public class PurpurWorldConfig { +@@ -2225,6 +2305,7 @@ public class PurpurWorldConfig { public Item polarBearBreedableItem = null; public int polarBearBreedingTicks = 6000; public boolean polarBearTakeDamageFromWater = false; @@ -1808,7 +1808,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae private void polarBearSettings() { polarBearRidable = getBoolean("mobs.polar_bear.ridable", polarBearRidable); polarBearRidableInWater = getBoolean("mobs.polar_bear.ridable-in-water", polarBearRidableInWater); -@@ -2239,6 +2320,7 @@ public class PurpurWorldConfig { +@@ -2241,6 +2322,7 @@ public class PurpurWorldConfig { if (item != Items.AIR) polarBearBreedableItem = item; polarBearBreedingTicks = getInt("mobs.polar_bear.breeding-delay-ticks", polarBearBreedingTicks); polarBearTakeDamageFromWater = getBoolean("mobs.polar_bear.takes-damage-from-water", polarBearTakeDamageFromWater); @@ -1816,7 +1816,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae } public boolean pufferfishRidable = false; -@@ -2246,6 +2328,7 @@ public class PurpurWorldConfig { +@@ -2248,6 +2330,7 @@ public class PurpurWorldConfig { public double pufferfishMaxHealth = 3.0D; public double pufferfishScale = 1.0D; public boolean pufferfishTakeDamageFromWater = false; @@ -1824,7 +1824,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae private void pufferfishSettings() { pufferfishRidable = getBoolean("mobs.pufferfish.ridable", pufferfishRidable); pufferfishControllable = getBoolean("mobs.pufferfish.controllable", pufferfishControllable); -@@ -2257,6 +2340,7 @@ public class PurpurWorldConfig { +@@ -2259,6 +2342,7 @@ public class PurpurWorldConfig { pufferfishMaxHealth = getDouble("mobs.pufferfish.attributes.max_health", pufferfishMaxHealth); pufferfishScale = Mth.clamp(getDouble("mobs.pufferfish.attributes.scale", pufferfishScale), 0.0625D, 16.0D); pufferfishTakeDamageFromWater = getBoolean("mobs.pufferfish.takes-damage-from-water", pufferfishTakeDamageFromWater); @@ -1832,7 +1832,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae } public boolean rabbitRidable = false; -@@ -2269,6 +2353,7 @@ public class PurpurWorldConfig { +@@ -2271,6 +2355,7 @@ public class PurpurWorldConfig { public int rabbitBreedingTicks = 6000; public boolean rabbitBypassMobGriefing = false; public boolean rabbitTakeDamageFromWater = false; @@ -1840,7 +1840,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae private void rabbitSettings() { rabbitRidable = getBoolean("mobs.rabbit.ridable", rabbitRidable); rabbitRidableInWater = getBoolean("mobs.rabbit.ridable-in-water", rabbitRidableInWater); -@@ -2285,6 +2370,7 @@ public class PurpurWorldConfig { +@@ -2287,6 +2372,7 @@ public class PurpurWorldConfig { rabbitBreedingTicks = getInt("mobs.rabbit.breeding-delay-ticks", rabbitBreedingTicks); rabbitBypassMobGriefing = getBoolean("mobs.rabbit.bypass-mob-griefing", rabbitBypassMobGriefing); rabbitTakeDamageFromWater = getBoolean("mobs.rabbit.takes-damage-from-water", rabbitTakeDamageFromWater); @@ -1848,7 +1848,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae } public boolean ravagerRidable = false; -@@ -2295,6 +2381,7 @@ public class PurpurWorldConfig { +@@ -2297,6 +2383,7 @@ public class PurpurWorldConfig { public boolean ravagerBypassMobGriefing = false; public boolean ravagerTakeDamageFromWater = false; public List ravagerGriefableBlocks = new ArrayList<>(); @@ -1856,7 +1856,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae private void ravagerSettings() { ravagerRidable = getBoolean("mobs.ravager.ridable", ravagerRidable); ravagerRidableInWater = getBoolean("mobs.ravager.ridable-in-water", ravagerRidableInWater); -@@ -2325,6 +2412,7 @@ public class PurpurWorldConfig { +@@ -2327,6 +2414,7 @@ public class PurpurWorldConfig { ravagerGriefableBlocks.add(block); } }); @@ -1864,7 +1864,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae } public boolean salmonRidable = false; -@@ -2332,6 +2420,7 @@ public class PurpurWorldConfig { +@@ -2334,6 +2422,7 @@ public class PurpurWorldConfig { public double salmonMaxHealth = 3.0D; public double salmonScale = 1.0D; public boolean salmonTakeDamageFromWater = false; @@ -1872,7 +1872,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae private void salmonSettings() { salmonRidable = getBoolean("mobs.salmon.ridable", salmonRidable); salmonControllable = getBoolean("mobs.salmon.controllable", salmonControllable); -@@ -2343,6 +2432,7 @@ public class PurpurWorldConfig { +@@ -2345,6 +2434,7 @@ public class PurpurWorldConfig { salmonMaxHealth = getDouble("mobs.salmon.attributes.max_health", salmonMaxHealth); salmonScale = Mth.clamp(getDouble("mobs.salmon.attributes.scale", salmonScale), 0.0625D, 16.0D); salmonTakeDamageFromWater = getBoolean("mobs.salmon.takes-damage-from-water", salmonTakeDamageFromWater); @@ -1880,7 +1880,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae } public boolean sheepRidable = false; -@@ -2353,6 +2443,7 @@ public class PurpurWorldConfig { +@@ -2355,6 +2445,7 @@ public class PurpurWorldConfig { public int sheepBreedingTicks = 6000; public boolean sheepBypassMobGriefing = false; public boolean sheepTakeDamageFromWater = false; @@ -1888,7 +1888,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae private void sheepSettings() { sheepRidable = getBoolean("mobs.sheep.ridable", sheepRidable); sheepRidableInWater = getBoolean("mobs.sheep.ridable-in-water", sheepRidableInWater); -@@ -2367,6 +2458,7 @@ public class PurpurWorldConfig { +@@ -2369,6 +2460,7 @@ public class PurpurWorldConfig { sheepBreedingTicks = getInt("mobs.sheep.breeding-delay-ticks", sheepBreedingTicks); sheepBypassMobGriefing = getBoolean("mobs.sheep.bypass-mob-griefing", sheepBypassMobGriefing); sheepTakeDamageFromWater = getBoolean("mobs.sheep.takes-damage-from-water", sheepTakeDamageFromWater); @@ -1896,7 +1896,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae } public boolean shulkerRidable = false; -@@ -2381,6 +2473,7 @@ public class PurpurWorldConfig { +@@ -2383,6 +2475,7 @@ public class PurpurWorldConfig { public String shulkerSpawnFromBulletNearbyEquation = "(nearby - 1) / 5.0"; public boolean shulkerSpawnFromBulletRandomColor = false; public boolean shulkerChangeColorWithDye = false; @@ -1904,7 +1904,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae private void shulkerSettings() { shulkerRidable = getBoolean("mobs.shulker.ridable", shulkerRidable); shulkerRidableInWater = getBoolean("mobs.shulker.ridable-in-water", shulkerRidableInWater); -@@ -2399,6 +2492,7 @@ public class PurpurWorldConfig { +@@ -2401,6 +2494,7 @@ public class PurpurWorldConfig { shulkerSpawnFromBulletNearbyEquation = getString("mobs.shulker.spawn-from-bullet.nearby-equation", shulkerSpawnFromBulletNearbyEquation); shulkerSpawnFromBulletRandomColor = getBoolean("mobs.shulker.spawn-from-bullet.random-color", shulkerSpawnFromBulletRandomColor); shulkerChangeColorWithDye = getBoolean("mobs.shulker.change-color-with-dye", shulkerChangeColorWithDye); @@ -1912,7 +1912,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae } public boolean silverfishRidable = false; -@@ -2410,6 +2504,7 @@ public class PurpurWorldConfig { +@@ -2412,6 +2506,7 @@ public class PurpurWorldConfig { public double silverfishAttackDamage = 1.0D; public boolean silverfishBypassMobGriefing = false; public boolean silverfishTakeDamageFromWater = false; @@ -1920,7 +1920,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae private void silverfishSettings() { silverfishRidable = getBoolean("mobs.silverfish.ridable", silverfishRidable); silverfishRidableInWater = getBoolean("mobs.silverfish.ridable-in-water", silverfishRidableInWater); -@@ -2425,6 +2520,7 @@ public class PurpurWorldConfig { +@@ -2427,6 +2522,7 @@ public class PurpurWorldConfig { silverfishAttackDamage = getDouble("mobs.silverfish.attributes.attack_damage", silverfishAttackDamage); silverfishBypassMobGriefing = getBoolean("mobs.silverfish.bypass-mob-griefing", silverfishBypassMobGriefing); silverfishTakeDamageFromWater = getBoolean("mobs.silverfish.takes-damage-from-water", silverfishTakeDamageFromWater); @@ -1928,7 +1928,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae } public boolean skeletonRidable = false; -@@ -2433,6 +2529,7 @@ public class PurpurWorldConfig { +@@ -2435,6 +2531,7 @@ public class PurpurWorldConfig { public double skeletonMaxHealth = 20.0D; public double skeletonScale = 1.0D; public boolean skeletonTakeDamageFromWater = false; @@ -1936,7 +1936,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae private void skeletonSettings() { skeletonRidable = getBoolean("mobs.skeleton.ridable", skeletonRidable); skeletonRidableInWater = getBoolean("mobs.skeleton.ridable-in-water", skeletonRidableInWater); -@@ -2445,6 +2542,7 @@ public class PurpurWorldConfig { +@@ -2447,6 +2544,7 @@ public class PurpurWorldConfig { skeletonMaxHealth = getDouble("mobs.skeleton.attributes.max_health", skeletonMaxHealth); skeletonScale = Mth.clamp(getDouble("mobs.skeleton.attributes.scale", skeletonScale), 0.0625D, 16.0D); skeletonTakeDamageFromWater = getBoolean("mobs.skeleton.takes-damage-from-water", skeletonTakeDamageFromWater); @@ -1944,7 +1944,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae } public boolean skeletonHorseRidable = false; -@@ -2457,6 +2555,7 @@ public class PurpurWorldConfig { +@@ -2459,6 +2557,7 @@ public class PurpurWorldConfig { public double skeletonHorseMovementSpeedMin = 0.2D; public double skeletonHorseMovementSpeedMax = 0.2D; public boolean skeletonHorseTakeDamageFromWater = false; @@ -1952,7 +1952,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae private void skeletonHorseSettings() { skeletonHorseRidable = getBoolean("mobs.skeleton_horse.ridable", skeletonHorseRidable); skeletonHorseRidableInWater = getBoolean("mobs.skeleton_horse.ridable-in-water", skeletonHorseRidableInWater); -@@ -2474,6 +2573,7 @@ public class PurpurWorldConfig { +@@ -2476,6 +2575,7 @@ public class PurpurWorldConfig { skeletonHorseMovementSpeedMin = getDouble("mobs.skeleton_horse.attributes.movement_speed.min", skeletonHorseMovementSpeedMin); skeletonHorseMovementSpeedMax = getDouble("mobs.skeleton_horse.attributes.movement_speed.max", skeletonHorseMovementSpeedMax); skeletonHorseTakeDamageFromWater = getBoolean("mobs.skeleton_horse.takes-damage-from-water", skeletonHorseTakeDamageFromWater); @@ -1960,7 +1960,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae } public boolean slimeRidable = false; -@@ -2484,6 +2584,7 @@ public class PurpurWorldConfig { +@@ -2486,6 +2586,7 @@ public class PurpurWorldConfig { public Map slimeMaxHealthCache = new HashMap<>(); public Map slimeAttackDamageCache = new HashMap<>(); public boolean slimeTakeDamageFromWater = false; @@ -1968,7 +1968,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae private void slimeSettings() { slimeRidable = getBoolean("mobs.slime.ridable", slimeRidable); slimeRidableInWater = getBoolean("mobs.slime.ridable-in-water", slimeRidableInWater); -@@ -2498,6 +2599,7 @@ public class PurpurWorldConfig { +@@ -2500,6 +2601,7 @@ public class PurpurWorldConfig { slimeMaxHealthCache.clear(); slimeAttackDamageCache.clear(); slimeTakeDamageFromWater = getBoolean("mobs.slime.takes-damage-from-water", slimeTakeDamageFromWater); @@ -1976,7 +1976,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae } public boolean snowGolemRidable = false; -@@ -2513,6 +2615,7 @@ public class PurpurWorldConfig { +@@ -2515,6 +2617,7 @@ public class PurpurWorldConfig { public double snowGolemAttackDistance = 1.25D; public boolean snowGolemBypassMobGriefing = false; public boolean snowGolemTakeDamageFromWater = true; @@ -1984,7 +1984,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae private void snowGolemSettings() { snowGolemRidable = getBoolean("mobs.snow_golem.ridable", snowGolemRidable); snowGolemRidableInWater = getBoolean("mobs.snow_golem.ridable-in-water", snowGolemRidableInWater); -@@ -2532,6 +2635,7 @@ public class PurpurWorldConfig { +@@ -2534,6 +2637,7 @@ public class PurpurWorldConfig { snowGolemAttackDistance = getDouble("mobs.snow_golem.attack-distance", snowGolemAttackDistance); snowGolemBypassMobGriefing = getBoolean("mobs.snow_golem.bypass-mob-griefing", snowGolemBypassMobGriefing); snowGolemTakeDamageFromWater = getBoolean("mobs.snow_golem.takes-damage-from-water", snowGolemTakeDamageFromWater); @@ -1992,7 +1992,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae } public boolean snifferRidable = false; -@@ -2557,6 +2661,7 @@ public class PurpurWorldConfig { +@@ -2559,6 +2663,7 @@ public class PurpurWorldConfig { public double squidOffsetWaterCheck = 0.0D; public boolean squidsCanFly = false; public boolean squidTakeDamageFromWater = false; @@ -2000,7 +2000,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae private void squidSettings() { squidRidable = getBoolean("mobs.squid.ridable", squidRidable); squidControllable = getBoolean("mobs.squid.controllable", squidControllable); -@@ -2571,6 +2676,7 @@ public class PurpurWorldConfig { +@@ -2573,6 +2678,7 @@ public class PurpurWorldConfig { squidOffsetWaterCheck = getDouble("mobs.squid.water-offset-check", squidOffsetWaterCheck); squidsCanFly = getBoolean("mobs.squid.can-fly", squidsCanFly); squidTakeDamageFromWater = getBoolean("mobs.squid.takes-damage-from-water", squidTakeDamageFromWater); @@ -2008,7 +2008,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae } public boolean spiderRidable = false; -@@ -2579,6 +2685,7 @@ public class PurpurWorldConfig { +@@ -2581,6 +2687,7 @@ public class PurpurWorldConfig { public double spiderMaxHealth = 16.0D; public double spiderScale = 1.0D; public boolean spiderTakeDamageFromWater = false; @@ -2016,7 +2016,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae private void spiderSettings() { spiderRidable = getBoolean("mobs.spider.ridable", spiderRidable); spiderRidableInWater = getBoolean("mobs.spider.ridable-in-water", spiderRidableInWater); -@@ -2591,6 +2698,7 @@ public class PurpurWorldConfig { +@@ -2593,6 +2700,7 @@ public class PurpurWorldConfig { spiderMaxHealth = getDouble("mobs.spider.attributes.max_health", spiderMaxHealth); spiderScale = Mth.clamp(getDouble("mobs.spider.attributes.scale", spiderScale), 0.0625D, 16.0D); spiderTakeDamageFromWater = getBoolean("mobs.spider.takes-damage-from-water", spiderTakeDamageFromWater); @@ -2024,7 +2024,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae } public boolean strayRidable = false; -@@ -2599,6 +2707,7 @@ public class PurpurWorldConfig { +@@ -2601,6 +2709,7 @@ public class PurpurWorldConfig { public double strayMaxHealth = 20.0D; public double strayScale = 1.0D; public boolean strayTakeDamageFromWater = false; @@ -2032,7 +2032,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae private void straySettings() { strayRidable = getBoolean("mobs.stray.ridable", strayRidable); strayRidableInWater = getBoolean("mobs.stray.ridable-in-water", strayRidableInWater); -@@ -2611,6 +2720,7 @@ public class PurpurWorldConfig { +@@ -2613,6 +2722,7 @@ public class PurpurWorldConfig { strayMaxHealth = getDouble("mobs.stray.attributes.max_health", strayMaxHealth); strayScale = Mth.clamp(getDouble("mobs.stray.attributes.scale", strayScale), 0.0625D, 16.0D); strayTakeDamageFromWater = getBoolean("mobs.stray.takes-damage-from-water", strayTakeDamageFromWater); @@ -2040,7 +2040,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae } public boolean striderRidable = false; -@@ -2621,6 +2731,7 @@ public class PurpurWorldConfig { +@@ -2623,6 +2733,7 @@ public class PurpurWorldConfig { public int striderBreedingTicks = 6000; public boolean striderGiveSaddleBack = false; public boolean striderTakeDamageFromWater = true; @@ -2048,7 +2048,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae private void striderSettings() { striderRidable = getBoolean("mobs.strider.ridable", striderRidable); striderRidableInWater = getBoolean("mobs.strider.ridable-in-water", striderRidableInWater); -@@ -2635,6 +2746,7 @@ public class PurpurWorldConfig { +@@ -2637,6 +2748,7 @@ public class PurpurWorldConfig { striderBreedingTicks = getInt("mobs.strider.breeding-delay-ticks", striderBreedingTicks); striderGiveSaddleBack = getBoolean("mobs.strider.give-saddle-back", striderGiveSaddleBack); striderTakeDamageFromWater = getBoolean("mobs.strider.takes-damage-from-water", striderTakeDamageFromWater); @@ -2056,7 +2056,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae } public boolean tadpoleRidable = false; -@@ -2657,6 +2769,7 @@ public class PurpurWorldConfig { +@@ -2659,6 +2771,7 @@ public class PurpurWorldConfig { public double traderLlamaMovementSpeedMax = 0.175D; public int traderLlamaBreedingTicks = 6000; public boolean traderLlamaTakeDamageFromWater = false; @@ -2064,7 +2064,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae private void traderLlamaSettings() { traderLlamaRidable = getBoolean("mobs.trader_llama.ridable", traderLlamaRidable); traderLlamaRidableInWater = getBoolean("mobs.trader_llama.ridable-in-water", traderLlamaRidableInWater); -@@ -2676,6 +2789,7 @@ public class PurpurWorldConfig { +@@ -2678,6 +2791,7 @@ public class PurpurWorldConfig { traderLlamaMovementSpeedMax = getDouble("mobs.trader_llama.attributes.movement_speed.max", traderLlamaMovementSpeedMax); traderLlamaBreedingTicks = getInt("mobs.trader_llama.breeding-delay-ticks", traderLlamaBreedingTicks); traderLlamaTakeDamageFromWater = getBoolean("mobs.trader_llama.takes-damage-from-water", traderLlamaTakeDamageFromWater); @@ -2072,7 +2072,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae } public boolean tropicalFishRidable = false; -@@ -2683,6 +2797,7 @@ public class PurpurWorldConfig { +@@ -2685,6 +2799,7 @@ public class PurpurWorldConfig { public double tropicalFishMaxHealth = 3.0D; public double tropicalFishScale = 1.0D; public boolean tropicalFishTakeDamageFromWater = false; @@ -2080,7 +2080,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae private void tropicalFishSettings() { tropicalFishRidable = getBoolean("mobs.tropical_fish.ridable", tropicalFishRidable); tropicalFishControllable = getBoolean("mobs.tropical_fish.controllable", tropicalFishControllable); -@@ -2694,6 +2809,7 @@ public class PurpurWorldConfig { +@@ -2696,6 +2811,7 @@ public class PurpurWorldConfig { tropicalFishMaxHealth = getDouble("mobs.tropical_fish.attributes.max_health", tropicalFishMaxHealth); tropicalFishScale = Mth.clamp(getDouble("mobs.tropical_fish.attributes.scale", tropicalFishScale), 0.0625D, 16.0D); tropicalFishTakeDamageFromWater = getBoolean("mobs.tropical_fish.takes-damage-from-water", tropicalFishTakeDamageFromWater); @@ -2088,7 +2088,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae } public boolean turtleRidable = false; -@@ -2703,6 +2819,7 @@ public class PurpurWorldConfig { +@@ -2705,6 +2821,7 @@ public class PurpurWorldConfig { public double turtleScale = 1.0D; public int turtleBreedingTicks = 6000; public boolean turtleTakeDamageFromWater = false; @@ -2096,7 +2096,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae private void turtleSettings() { turtleRidable = getBoolean("mobs.turtle.ridable", turtleRidable); turtleRidableInWater = getBoolean("mobs.turtle.ridable-in-water", turtleRidableInWater); -@@ -2716,6 +2833,7 @@ public class PurpurWorldConfig { +@@ -2718,6 +2835,7 @@ public class PurpurWorldConfig { turtleScale = Mth.clamp(getDouble("mobs.turtle.attributes.scale", turtleScale), 0.0625D, 16.0D); turtleBreedingTicks = getInt("mobs.turtle.breeding-delay-ticks", turtleBreedingTicks); turtleTakeDamageFromWater = getBoolean("mobs.turtle.takes-damage-from-water", turtleTakeDamageFromWater); @@ -2104,7 +2104,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae } public boolean vexRidable = false; -@@ -2725,6 +2843,7 @@ public class PurpurWorldConfig { +@@ -2727,6 +2845,7 @@ public class PurpurWorldConfig { public double vexMaxHealth = 14.0D; public double vexScale = 1.0D; public boolean vexTakeDamageFromWater = false; @@ -2112,7 +2112,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae private void vexSettings() { vexRidable = getBoolean("mobs.vex.ridable", vexRidable); vexRidableInWater = getBoolean("mobs.vex.ridable-in-water", vexRidableInWater); -@@ -2738,6 +2857,7 @@ public class PurpurWorldConfig { +@@ -2740,6 +2859,7 @@ public class PurpurWorldConfig { vexMaxHealth = getDouble("mobs.vex.attributes.max_health", vexMaxHealth); vexScale = Mth.clamp(getDouble("mobs.vex.attributes.scale", vexScale), 0.0625D, 16.0D); vexTakeDamageFromWater = getBoolean("mobs.vex.takes-damage-from-water", vexTakeDamageFromWater); @@ -2120,7 +2120,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae } public boolean villagerRidable = false; -@@ -2755,6 +2875,7 @@ public class PurpurWorldConfig { +@@ -2757,6 +2877,7 @@ public class PurpurWorldConfig { public boolean villagerBypassMobGriefing = false; public boolean villagerTakeDamageFromWater = false; public boolean villagerAllowTrading = true; @@ -2128,7 +2128,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae private void villagerSettings() { villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); -@@ -2776,6 +2897,7 @@ public class PurpurWorldConfig { +@@ -2778,6 +2899,7 @@ public class PurpurWorldConfig { villagerBypassMobGriefing = getBoolean("mobs.villager.bypass-mob-griefing", villagerBypassMobGriefing); villagerTakeDamageFromWater = getBoolean("mobs.villager.takes-damage-from-water", villagerTakeDamageFromWater); villagerAllowTrading = getBoolean("mobs.villager.allow-trading", villagerAllowTrading); @@ -2136,7 +2136,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae } public boolean vindicatorRidable = false; -@@ -2785,6 +2907,7 @@ public class PurpurWorldConfig { +@@ -2787,6 +2909,7 @@ public class PurpurWorldConfig { public double vindicatorScale = 1.0D; public double vindicatorJohnnySpawnChance = 0D; public boolean vindicatorTakeDamageFromWater = false; @@ -2144,7 +2144,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae private void vindicatorSettings() { vindicatorRidable = getBoolean("mobs.vindicator.ridable", vindicatorRidable); vindicatorRidableInWater = getBoolean("mobs.vindicator.ridable-in-water", vindicatorRidableInWater); -@@ -2798,6 +2921,7 @@ public class PurpurWorldConfig { +@@ -2800,6 +2923,7 @@ public class PurpurWorldConfig { vindicatorScale = Mth.clamp(getDouble("mobs.vindicator.attributes.scale", vindicatorScale), 0.0625D, 16.0D); vindicatorJohnnySpawnChance = getDouble("mobs.vindicator.johnny.spawn-chance", vindicatorJohnnySpawnChance); vindicatorTakeDamageFromWater = getBoolean("mobs.vindicator.takes-damage-from-water", vindicatorTakeDamageFromWater); @@ -2152,7 +2152,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae } public boolean wanderingTraderRidable = false; -@@ -2810,6 +2934,7 @@ public class PurpurWorldConfig { +@@ -2812,6 +2936,7 @@ public class PurpurWorldConfig { public boolean wanderingTraderCanBeLeashed = false; public boolean wanderingTraderTakeDamageFromWater = false; public boolean wanderingTraderAllowTrading = true; @@ -2160,7 +2160,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae private void wanderingTraderSettings() { wanderingTraderRidable = getBoolean("mobs.wandering_trader.ridable", wanderingTraderRidable); wanderingTraderRidableInWater = getBoolean("mobs.wandering_trader.ridable-in-water", wanderingTraderRidableInWater); -@@ -2826,6 +2951,7 @@ public class PurpurWorldConfig { +@@ -2828,6 +2953,7 @@ public class PurpurWorldConfig { wanderingTraderCanBeLeashed = getBoolean("mobs.wandering_trader.can-be-leashed", wanderingTraderCanBeLeashed); wanderingTraderTakeDamageFromWater = getBoolean("mobs.wandering_trader.takes-damage-from-water", wanderingTraderTakeDamageFromWater); wanderingTraderAllowTrading = getBoolean("mobs.wandering_trader.allow-trading", wanderingTraderAllowTrading); @@ -2168,7 +2168,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae } public boolean wardenRidable = false; -@@ -2843,6 +2969,7 @@ public class PurpurWorldConfig { +@@ -2845,6 +2971,7 @@ public class PurpurWorldConfig { public double witchMaxHealth = 26.0D; public double witchScale = 1.0D; public boolean witchTakeDamageFromWater = false; @@ -2176,7 +2176,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae private void witchSettings() { witchRidable = getBoolean("mobs.witch.ridable", witchRidable); witchRidableInWater = getBoolean("mobs.witch.ridable-in-water", witchRidableInWater); -@@ -2855,6 +2982,7 @@ public class PurpurWorldConfig { +@@ -2857,6 +2984,7 @@ public class PurpurWorldConfig { witchMaxHealth = getDouble("mobs.witch.attributes.max_health", witchMaxHealth); witchScale = Mth.clamp(getDouble("mobs.witch.attributes.scale", witchScale), 0.0625D, 16.0D); witchTakeDamageFromWater = getBoolean("mobs.witch.takes-damage-from-water", witchTakeDamageFromWater); @@ -2184,7 +2184,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae } public boolean witherRidable = false; -@@ -2870,6 +2998,7 @@ public class PurpurWorldConfig { +@@ -2872,6 +3000,7 @@ public class PurpurWorldConfig { public boolean witherCanRideVehicles = false; public float witherExplosionRadius = 1.0F; public boolean witherPlaySpawnSound = true; @@ -2192,7 +2192,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae private void witherSettings() { witherRidable = getBoolean("mobs.wither.ridable", witherRidable); witherRidableInWater = getBoolean("mobs.wither.ridable-in-water", witherRidableInWater); -@@ -2893,6 +3022,7 @@ public class PurpurWorldConfig { +@@ -2895,6 +3024,7 @@ public class PurpurWorldConfig { witherCanRideVehicles = getBoolean("mobs.wither.can-ride-vehicles", witherCanRideVehicles); witherExplosionRadius = (float) getDouble("mobs.wither.explosion-radius", witherExplosionRadius); witherPlaySpawnSound = getBoolean("mobs.wither.play-spawn-sound", witherPlaySpawnSound); @@ -2200,7 +2200,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae } public boolean witherSkeletonRidable = false; -@@ -2901,6 +3031,7 @@ public class PurpurWorldConfig { +@@ -2903,6 +3033,7 @@ public class PurpurWorldConfig { public double witherSkeletonMaxHealth = 20.0D; public double witherSkeletonScale = 1.0D; public boolean witherSkeletonTakeDamageFromWater = false; @@ -2208,7 +2208,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae private void witherSkeletonSettings() { witherSkeletonRidable = getBoolean("mobs.wither_skeleton.ridable", witherSkeletonRidable); witherSkeletonRidableInWater = getBoolean("mobs.wither_skeleton.ridable-in-water", witherSkeletonRidableInWater); -@@ -2913,6 +3044,7 @@ public class PurpurWorldConfig { +@@ -2915,6 +3046,7 @@ public class PurpurWorldConfig { witherSkeletonMaxHealth = getDouble("mobs.wither_skeleton.attributes.max_health", witherSkeletonMaxHealth); witherSkeletonScale = Mth.clamp(getDouble("mobs.wither_skeleton.attributes.scale", witherSkeletonScale), 0.0625D, 16.0D); witherSkeletonTakeDamageFromWater = getBoolean("mobs.wither_skeleton.takes-damage-from-water", witherSkeletonTakeDamageFromWater); @@ -2216,7 +2216,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae } public boolean wolfRidable = false; -@@ -2925,6 +3057,7 @@ public class PurpurWorldConfig { +@@ -2927,6 +3059,7 @@ public class PurpurWorldConfig { public double wolfNaturalRabid = 0.0D; public int wolfBreedingTicks = 6000; public boolean wolfTakeDamageFromWater = false; @@ -2224,7 +2224,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae private void wolfSettings() { wolfRidable = getBoolean("mobs.wolf.ridable", wolfRidable); wolfRidableInWater = getBoolean("mobs.wolf.ridable-in-water", wolfRidableInWater); -@@ -2945,6 +3078,7 @@ public class PurpurWorldConfig { +@@ -2947,6 +3080,7 @@ public class PurpurWorldConfig { wolfNaturalRabid = getDouble("mobs.wolf.spawn-rabid-chance", wolfNaturalRabid); wolfBreedingTicks = getInt("mobs.wolf.breeding-delay-ticks", wolfBreedingTicks); wolfTakeDamageFromWater = getBoolean("mobs.wolf.takes-damage-from-water", wolfTakeDamageFromWater); @@ -2232,7 +2232,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae } public boolean zoglinRidable = false; -@@ -2953,6 +3087,7 @@ public class PurpurWorldConfig { +@@ -2955,6 +3089,7 @@ public class PurpurWorldConfig { public double zoglinMaxHealth = 40.0D; public double zoglinScale = 1.0D; public boolean zoglinTakeDamageFromWater = false; @@ -2240,7 +2240,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae private void zoglinSettings() { zoglinRidable = getBoolean("mobs.zoglin.ridable", zoglinRidable); zoglinRidableInWater = getBoolean("mobs.zoglin.ridable-in-water", zoglinRidableInWater); -@@ -2965,6 +3100,7 @@ public class PurpurWorldConfig { +@@ -2967,6 +3102,7 @@ public class PurpurWorldConfig { zoglinMaxHealth = getDouble("mobs.zoglin.attributes.max_health", zoglinMaxHealth); zoglinScale = Mth.clamp(getDouble("mobs.zoglin.attributes.scale", zoglinScale), 0.0625D, 16.0D); zoglinTakeDamageFromWater = getBoolean("mobs.zoglin.takes-damage-from-water", zoglinTakeDamageFromWater); @@ -2248,7 +2248,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae } public boolean zombieRidable = false; -@@ -2979,6 +3115,7 @@ public class PurpurWorldConfig { +@@ -2981,6 +3117,7 @@ public class PurpurWorldConfig { public boolean zombieAggressiveTowardsVillagerWhenLagging = true; public boolean zombieBypassMobGriefing = false; public boolean zombieTakeDamageFromWater = false; @@ -2256,7 +2256,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae private void zombieSettings() { zombieRidable = getBoolean("mobs.zombie.ridable", zombieRidable); zombieRidableInWater = getBoolean("mobs.zombie.ridable-in-water", zombieRidableInWater); -@@ -2997,6 +3134,7 @@ public class PurpurWorldConfig { +@@ -2999,6 +3136,7 @@ public class PurpurWorldConfig { zombieAggressiveTowardsVillagerWhenLagging = getBoolean("mobs.zombie.aggressive-towards-villager-when-lagging", zombieAggressiveTowardsVillagerWhenLagging); zombieBypassMobGriefing = getBoolean("mobs.zombie.bypass-mob-griefing", zombieBypassMobGriefing); zombieTakeDamageFromWater = getBoolean("mobs.zombie.takes-damage-from-water", zombieTakeDamageFromWater); @@ -2264,7 +2264,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae } public boolean zombieHorseRidable = false; -@@ -3010,6 +3148,7 @@ public class PurpurWorldConfig { +@@ -3012,6 +3150,7 @@ public class PurpurWorldConfig { public double zombieHorseMovementSpeedMax = 0.2D; public double zombieHorseSpawnChance = 0.0D; public boolean zombieHorseTakeDamageFromWater = false; @@ -2272,7 +2272,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae private void zombieHorseSettings() { zombieHorseRidable = getBoolean("mobs.zombie_horse.ridable", zombieHorseRidable); zombieHorseRidableInWater = getBoolean("mobs.zombie_horse.ridable-in-water", zombieHorseRidableInWater); -@@ -3028,6 +3167,7 @@ public class PurpurWorldConfig { +@@ -3030,6 +3169,7 @@ public class PurpurWorldConfig { zombieHorseMovementSpeedMax = getDouble("mobs.zombie_horse.attributes.movement_speed.max", zombieHorseMovementSpeedMax); zombieHorseSpawnChance = getDouble("mobs.zombie_horse.spawn-chance", zombieHorseSpawnChance); zombieHorseTakeDamageFromWater = getBoolean("mobs.zombie_horse.takes-damage-from-water", zombieHorseTakeDamageFromWater); @@ -2280,7 +2280,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae } public boolean zombieVillagerRidable = false; -@@ -3043,6 +3183,7 @@ public class PurpurWorldConfig { +@@ -3045,6 +3185,7 @@ public class PurpurWorldConfig { public int zombieVillagerCuringTimeMin = 3600; public int zombieVillagerCuringTimeMax = 6000; public boolean zombieVillagerCureEnabled = true; @@ -2288,7 +2288,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae private void zombieVillagerSettings() { zombieVillagerRidable = getBoolean("mobs.zombie_villager.ridable", zombieVillagerRidable); zombieVillagerRidableInWater = getBoolean("mobs.zombie_villager.ridable-in-water", zombieVillagerRidableInWater); -@@ -3062,6 +3203,7 @@ public class PurpurWorldConfig { +@@ -3064,6 +3205,7 @@ public class PurpurWorldConfig { zombieVillagerCuringTimeMin = getInt("mobs.zombie_villager.curing_time.min", zombieVillagerCuringTimeMin); zombieVillagerCuringTimeMax = getInt("mobs.zombie_villager.curing_time.max", zombieVillagerCuringTimeMax); zombieVillagerCureEnabled = getBoolean("mobs.zombie_villager.cure.enabled", zombieVillagerCureEnabled); @@ -2296,7 +2296,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae } public boolean zombifiedPiglinRidable = false; -@@ -3075,6 +3217,7 @@ public class PurpurWorldConfig { +@@ -3077,6 +3219,7 @@ public class PurpurWorldConfig { public boolean zombifiedPiglinJockeyTryExistingChickens = true; public boolean zombifiedPiglinCountAsPlayerKillWhenAngry = true; public boolean zombifiedPiglinTakeDamageFromWater = false; @@ -2304,7 +2304,7 @@ index b9b47cd429c73c856d6ecd9d48fe0c46cee7330d..744730583ec613adc8e31565780fbcae private void zombifiedPiglinSettings() { zombifiedPiglinRidable = getBoolean("mobs.zombified_piglin.ridable", zombifiedPiglinRidable); zombifiedPiglinRidableInWater = getBoolean("mobs.zombified_piglin.ridable-in-water", zombifiedPiglinRidableInWater); -@@ -3092,6 +3235,7 @@ public class PurpurWorldConfig { +@@ -3094,6 +3237,7 @@ public class PurpurWorldConfig { zombifiedPiglinJockeyTryExistingChickens = getBoolean("mobs.zombified_piglin.jockey.try-existing-chickens", zombifiedPiglinJockeyTryExistingChickens); zombifiedPiglinCountAsPlayerKillWhenAngry = getBoolean("mobs.zombified_piglin.count-as-player-kill-when-angry", zombifiedPiglinCountAsPlayerKillWhenAngry); zombifiedPiglinTakeDamageFromWater = getBoolean("mobs.zombified_piglin.takes-damage-from-water", zombifiedPiglinTakeDamageFromWater); diff --git a/patches/server/0220-Ability-for-hoe-to-replant-crops-and-nether-warts.patch b/patches/server/0220-Ability-for-hoe-to-replant-crops-and-nether-warts.patch index eebdee1ee..659d942ef 100644 --- a/patches/server/0220-Ability-for-hoe-to-replant-crops-and-nether-warts.patch +++ b/patches/server/0220-Ability-for-hoe-to-replant-crops-and-nether-warts.patch @@ -34,7 +34,7 @@ index eb324fda54ada3ed7941713a784ed2d686ec8c4b..09cc76f3fee4a767c9ec3fa592f2c3c6 + // Purpur end } diff --git a/src/main/java/net/minecraft/world/level/block/CropBlock.java b/src/main/java/net/minecraft/world/level/block/CropBlock.java -index 3f7440eb164ea7593844de6c496ee1a998759347..33c27909290ff3ab483226cf65b1a1bc2e983cbc 100644 +index c1707b502911d76d0c3a706e44bfdc3a12eb8f97..7f6f7a114e9930e7655c9695a5737739503999de 100644 --- a/src/main/java/net/minecraft/world/level/block/CropBlock.java +++ b/src/main/java/net/minecraft/world/level/block/CropBlock.java @@ -216,4 +216,15 @@ public class CropBlock extends BushBlock implements BonemealableBlock { @@ -54,7 +54,7 @@ index 3f7440eb164ea7593844de6c496ee1a998759347..33c27909290ff3ab483226cf65b1a1bc + // Purpur end } diff --git a/src/main/java/net/minecraft/world/level/block/NetherWartBlock.java b/src/main/java/net/minecraft/world/level/block/NetherWartBlock.java -index acbd60a2f162fe0e254e36d0e8e7face3fc8a7b3..da1c7999ca64199387054de46489d3ff4a299289 100644 +index 7bb4994d6474c8ea59c102009253552020691b8f..b571bca4375ca7caf9b75dbf84009cb0604b66ad 100644 --- a/src/main/java/net/minecraft/world/level/block/NetherWartBlock.java +++ b/src/main/java/net/minecraft/world/level/block/NetherWartBlock.java @@ -68,4 +68,15 @@ public class NetherWartBlock extends BushBlock { @@ -74,10 +74,10 @@ index acbd60a2f162fe0e254e36d0e8e7face3fc8a7b3..da1c7999ca64199387054de46489d3ff + // Purpur end } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 744730583ec613adc8e31565780fbcae72a9b69c..931e2a3d04e2ec43b5389144c675914cb595b04d 100644 +index d6f3f21751613038dae7db5ada4aa89444a82546..ef835aa6568bad1a20cc7ebb8775a538234b7915 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -507,6 +507,8 @@ public class PurpurWorldConfig { +@@ -509,6 +509,8 @@ public class PurpurWorldConfig { public Map axeWeatherables = new HashMap<>(); public Map hoeTillables = new HashMap<>(); public Map shovelFlattenables = new HashMap<>(); @@ -86,7 +86,7 @@ index 744730583ec613adc8e31565780fbcae72a9b69c..931e2a3d04e2ec43b5389144c675914c private void toolSettings() { axeStrippables.clear(); axeWaxables.clear(); -@@ -774,6 +776,8 @@ public class PurpurWorldConfig { +@@ -776,6 +778,8 @@ public class PurpurWorldConfig { }); shovelFlattenables.put(block, new Flattenable(into, drops)); }); diff --git a/patches/server/0221-Turtle-eggs-random-tick-crack-chance.patch b/patches/server/0221-Turtle-eggs-random-tick-crack-chance.patch index 2f552ce6f..336041369 100644 --- a/patches/server/0221-Turtle-eggs-random-tick-crack-chance.patch +++ b/patches/server/0221-Turtle-eggs-random-tick-crack-chance.patch @@ -18,10 +18,10 @@ index a265c5bf1a4d6f3c84cad20f9b3c285dcebd0372..72c89f14977844e1460e9a914f39e896 @Override diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 931e2a3d04e2ec43b5389144c675914cb595b04d..0e3c1b37d386a7115cdfa027a5afb235ec4d363f 100644 +index ef835aa6568bad1a20cc7ebb8775a538234b7915..957e6d3570a4ad7472afb5dc83da70f4c88ba541 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1034,11 +1034,13 @@ public class PurpurWorldConfig { +@@ -1036,11 +1036,13 @@ public class PurpurWorldConfig { public boolean turtleEggsBreakFromItems = false; public boolean turtleEggsBreakFromMinecarts = false; public boolean turtleEggsBypassMobGriefing = false; diff --git a/patches/server/0222-Mob-head-visibility-percent.patch b/patches/server/0222-Mob-head-visibility-percent.patch index 0949000c0..88eec79cf 100644 --- a/patches/server/0222-Mob-head-visibility-percent.patch +++ b/patches/server/0222-Mob-head-visibility-percent.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Mob head visibility percent diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index c23ca02f9adbbbf32b0bf9f8a82f55781468aade..19cc0ba32472384bf10662d41fecf23ebfc9876c 100644 +index 0af3e463971697626f847cb96f8a431857c1261e..8c2c14769ae32c9a92bc043f9e753abf7e32e1c3 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java @@ -1082,9 +1082,20 @@ public abstract class LivingEntity extends Entity implements Attackable { @@ -32,10 +32,10 @@ index c23ca02f9adbbbf32b0bf9f8a82f55781468aade..19cc0ba32472384bf10662d41fecf23e // Purpur start if (entity instanceof LivingEntity entityliving) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 0e3c1b37d386a7115cdfa027a5afb235ec4d363f..b49d8ef5fe4a3b4bd99124cca2e5e661762552ff 100644 +index 957e6d3570a4ad7472afb5dc83da70f4c88ba541..db707841e9d7f2840ff00c2e32933634045315df 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1392,6 +1392,7 @@ public class PurpurWorldConfig { +@@ -1394,6 +1394,7 @@ public class PurpurWorldConfig { public boolean creeperExplodeWhenKilled = false; public boolean creeperHealthRadius = false; public boolean creeperAlwaysDropExp = false; @@ -43,7 +43,7 @@ index 0e3c1b37d386a7115cdfa027a5afb235ec4d363f..b49d8ef5fe4a3b4bd99124cca2e5e661 private void creeperSettings() { creeperRidable = getBoolean("mobs.creeper.ridable", creeperRidable); creeperRidableInWater = getBoolean("mobs.creeper.ridable-in-water", creeperRidableInWater); -@@ -1410,6 +1411,7 @@ public class PurpurWorldConfig { +@@ -1412,6 +1413,7 @@ public class PurpurWorldConfig { creeperExplodeWhenKilled = getBoolean("mobs.creeper.explode-when-killed", creeperExplodeWhenKilled); creeperHealthRadius = getBoolean("mobs.creeper.health-impacts-explosion", creeperHealthRadius); creeperAlwaysDropExp = getBoolean("mobs.creeper.always-drop-exp", creeperAlwaysDropExp); @@ -51,7 +51,7 @@ index 0e3c1b37d386a7115cdfa027a5afb235ec4d363f..b49d8ef5fe4a3b4bd99124cca2e5e661 } public boolean dolphinRidable = false; -@@ -2237,6 +2239,7 @@ public class PurpurWorldConfig { +@@ -2239,6 +2241,7 @@ public class PurpurWorldConfig { public boolean piglinTakeDamageFromWater = false; public int piglinPortalSpawnModifier = 2000; public boolean piglinAlwaysDropExp = false; @@ -59,7 +59,7 @@ index 0e3c1b37d386a7115cdfa027a5afb235ec4d363f..b49d8ef5fe4a3b4bd99124cca2e5e661 private void piglinSettings() { piglinRidable = getBoolean("mobs.piglin.ridable", piglinRidable); piglinRidableInWater = getBoolean("mobs.piglin.ridable-in-water", piglinRidableInWater); -@@ -2252,6 +2255,7 @@ public class PurpurWorldConfig { +@@ -2254,6 +2257,7 @@ public class PurpurWorldConfig { piglinTakeDamageFromWater = getBoolean("mobs.piglin.takes-damage-from-water", piglinTakeDamageFromWater); piglinPortalSpawnModifier = getInt("mobs.piglin.portal-spawn-modifier", piglinPortalSpawnModifier); piglinAlwaysDropExp = getBoolean("mobs.piglin.always-drop-exp", piglinAlwaysDropExp); @@ -67,7 +67,7 @@ index 0e3c1b37d386a7115cdfa027a5afb235ec4d363f..b49d8ef5fe4a3b4bd99124cca2e5e661 } public boolean piglinBruteRidable = false; -@@ -2536,6 +2540,7 @@ public class PurpurWorldConfig { +@@ -2538,6 +2542,7 @@ public class PurpurWorldConfig { public double skeletonScale = 1.0D; public boolean skeletonTakeDamageFromWater = false; public boolean skeletonAlwaysDropExp = false; @@ -75,7 +75,7 @@ index 0e3c1b37d386a7115cdfa027a5afb235ec4d363f..b49d8ef5fe4a3b4bd99124cca2e5e661 private void skeletonSettings() { skeletonRidable = getBoolean("mobs.skeleton.ridable", skeletonRidable); skeletonRidableInWater = getBoolean("mobs.skeleton.ridable-in-water", skeletonRidableInWater); -@@ -2549,6 +2554,7 @@ public class PurpurWorldConfig { +@@ -2551,6 +2556,7 @@ public class PurpurWorldConfig { skeletonScale = Mth.clamp(getDouble("mobs.skeleton.attributes.scale", skeletonScale), 0.0625D, 16.0D); skeletonTakeDamageFromWater = getBoolean("mobs.skeleton.takes-damage-from-water", skeletonTakeDamageFromWater); skeletonAlwaysDropExp = getBoolean("mobs.skeleton.always-drop-exp", skeletonAlwaysDropExp); @@ -83,7 +83,7 @@ index 0e3c1b37d386a7115cdfa027a5afb235ec4d363f..b49d8ef5fe4a3b4bd99124cca2e5e661 } public boolean skeletonHorseRidable = false; -@@ -3122,6 +3128,7 @@ public class PurpurWorldConfig { +@@ -3124,6 +3130,7 @@ public class PurpurWorldConfig { public boolean zombieBypassMobGriefing = false; public boolean zombieTakeDamageFromWater = false; public boolean zombieAlwaysDropExp = false; @@ -91,7 +91,7 @@ index 0e3c1b37d386a7115cdfa027a5afb235ec4d363f..b49d8ef5fe4a3b4bd99124cca2e5e661 private void zombieSettings() { zombieRidable = getBoolean("mobs.zombie.ridable", zombieRidable); zombieRidableInWater = getBoolean("mobs.zombie.ridable-in-water", zombieRidableInWater); -@@ -3141,6 +3148,7 @@ public class PurpurWorldConfig { +@@ -3143,6 +3150,7 @@ public class PurpurWorldConfig { zombieBypassMobGriefing = getBoolean("mobs.zombie.bypass-mob-griefing", zombieBypassMobGriefing); zombieTakeDamageFromWater = getBoolean("mobs.zombie.takes-damage-from-water", zombieTakeDamageFromWater); zombieAlwaysDropExp = getBoolean("mobs.zombie.always-drop-exp", zombieAlwaysDropExp); diff --git a/patches/server/0224-Stop-bees-from-dying-after-stinging.patch b/patches/server/0224-Stop-bees-from-dying-after-stinging.patch index e69c912c4..edd44e9dc 100644 --- a/patches/server/0224-Stop-bees-from-dying-after-stinging.patch +++ b/patches/server/0224-Stop-bees-from-dying-after-stinging.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Stop bees from dying after stinging diff --git a/src/main/java/net/minecraft/world/entity/animal/Bee.java b/src/main/java/net/minecraft/world/entity/animal/Bee.java -index db382cf32d215f1b98b960e0c1a8dfaf6e19422f..4b32a783cabf05f5bae0dba22eea8ac7ba2cd285 100644 +index e2c6691ecca79df5828e6136568933b41ba5e1fa..c533e8c98411ea857df56a98581e903a871b98e2 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Bee.java +++ b/src/main/java/net/minecraft/world/entity/animal/Bee.java -@@ -461,6 +461,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { +@@ -465,6 +465,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { this.hurtServer(world, this.damageSources().drown(), 1.0F); } @@ -17,10 +17,10 @@ index db382cf32d215f1b98b960e0c1a8dfaf6e19422f..4b32a783cabf05f5bae0dba22eea8ac7 ++this.timeSinceSting; if (this.timeSinceSting % 5 == 0 && this.random.nextInt(Mth.clamp(1200 - this.timeSinceSting, 1, 1200)) == 0) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index b49d8ef5fe4a3b4bd99124cca2e5e661762552ff..01306ed51e4ca205bc58c171e6df5594c96aa22e 100644 +index db707841e9d7f2840ff00c2e32933634045315df..ecef27cf83b1c77d33ffd1cb96e0d72f91427b75 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1153,6 +1153,7 @@ public class PurpurWorldConfig { +@@ -1155,6 +1155,7 @@ public class PurpurWorldConfig { public boolean beeCanWorkAtNight = false; public boolean beeCanWorkInRain = false; public boolean beeAlwaysDropExp = false; @@ -28,7 +28,7 @@ index b49d8ef5fe4a3b4bd99124cca2e5e661762552ff..01306ed51e4ca205bc58c171e6df5594 private void beeSettings() { beeRidable = getBoolean("mobs.bee.ridable", beeRidable); beeRidableInWater = getBoolean("mobs.bee.ridable-in-water", beeRidableInWater); -@@ -1170,6 +1171,7 @@ public class PurpurWorldConfig { +@@ -1172,6 +1173,7 @@ public class PurpurWorldConfig { beeCanWorkAtNight = getBoolean("mobs.bee.can-work-at-night", beeCanWorkAtNight); beeCanWorkInRain = getBoolean("mobs.bee.can-work-in-rain", beeCanWorkInRain); beeAlwaysDropExp = getBoolean("mobs.bee.always-drop-exp", beeAlwaysDropExp); diff --git a/patches/server/0225-Give-bee-counts-in-beehives-to-Purpur-clients.patch b/patches/server/0225-Give-bee-counts-in-beehives-to-Purpur-clients.patch index cc2f462c1..df4e89c14 100644 --- a/patches/server/0225-Give-bee-counts-in-beehives-to-Purpur-clients.patch +++ b/patches/server/0225-Give-bee-counts-in-beehives-to-Purpur-clients.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Give bee counts in beehives to Purpur clients diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 6111c300ea25e73cc8f840dfff94998d3b87dcf3..284b96cd1e9eaad4600c820a504c12d953961019 100644 +index 757cedd57b89a452832f2c9d9e5ed9fb495ca933..74d4bb12d70cbfd8365337c8fbcdbdfe6d70e970 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1170,6 +1170,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop> { diff --git a/patches/server/0231-Configurable-minimum-demand-for-trades.patch b/patches/server/0231-Configurable-minimum-demand-for-trades.patch index 699196ea1..0f2e63375 100644 --- a/patches/server/0231-Configurable-minimum-demand-for-trades.patch +++ b/patches/server/0231-Configurable-minimum-demand-for-trades.patch @@ -9,7 +9,7 @@ This patch adds a config option to allow the minimum demand to instead be configurable. diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java -index 32479bf58040ee980b20e99bb384bb84ef92624f..5943b0c059b41ab84d7841a764ff2ace6e6ca89b 100644 +index dfb1b887df63197eab5969dcc3eed2ff68d71911..c5e67489ba4a60ead3490f8c9468833f913af1a0 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java @@ -547,7 +547,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler @@ -40,10 +40,10 @@ index 0efc8d997b34302c3e0a5d7ec73a11a940dbeefe..af157881d440b34cfe79fbc9b03cc9ef public ItemStack assemble() { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index af9e6ee31e0ad8436a0a43b6d914445ca7737d9d..70258ae10d19f0aac01e3a550ec0d538f598d077 100644 +index aa8ea52c7e9a4c60864328a30a86530e73385563..73510c194f9c15611f5776f60cc9bee07aa816ab 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2905,6 +2905,7 @@ public class PurpurWorldConfig { +@@ -2907,6 +2907,7 @@ public class PurpurWorldConfig { public boolean villagerTakeDamageFromWater = false; public boolean villagerAllowTrading = true; public boolean villagerAlwaysDropExp = false; @@ -51,7 +51,7 @@ index af9e6ee31e0ad8436a0a43b6d914445ca7737d9d..70258ae10d19f0aac01e3a550ec0d538 private void villagerSettings() { villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); -@@ -2927,6 +2928,7 @@ public class PurpurWorldConfig { +@@ -2929,6 +2930,7 @@ public class PurpurWorldConfig { villagerTakeDamageFromWater = getBoolean("mobs.villager.takes-damage-from-water", villagerTakeDamageFromWater); villagerAllowTrading = getBoolean("mobs.villager.allow-trading", villagerAllowTrading); villagerAlwaysDropExp = getBoolean("mobs.villager.always-drop-exp", villagerAlwaysDropExp); diff --git a/patches/server/0232-Lobotomize-stuck-villagers.patch b/patches/server/0232-Lobotomize-stuck-villagers.patch index 54e859285..c1f389de2 100644 --- a/patches/server/0232-Lobotomize-stuck-villagers.patch +++ b/patches/server/0232-Lobotomize-stuck-villagers.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Lobotomize stuck villagers diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java -index 5943b0c059b41ab84d7841a764ff2ace6e6ca89b..ca5504ba8a10a3ed384cb9f5a3c550466c2688f1 100644 +index c5e67489ba4a60ead3490f8c9468833f913af1a0..a191fb8563c01413dc4119e3adf81e23aacb824b 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java @@ -141,6 +141,8 @@ public class Villager extends AbstractVillager implements ReputationEventHandler @@ -104,10 +104,10 @@ index 8e895d6f84f7d84b219f2424909dd42e5f08dec4..53dcce0701d713c5dd097340a91b8be4 + // Purpur end } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 70258ae10d19f0aac01e3a550ec0d538f598d077..f23ac725c57006176564c97b30d348551dd9444f 100644 +index 73510c194f9c15611f5776f60cc9bee07aa816ab..5f3bbb6adabaefaf54d4a313c5e7c99eaf3f1391 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2906,6 +2906,9 @@ public class PurpurWorldConfig { +@@ -2908,6 +2908,9 @@ public class PurpurWorldConfig { public boolean villagerAllowTrading = true; public boolean villagerAlwaysDropExp = false; public int villagerMinimumDemand = 0; @@ -117,7 +117,7 @@ index 70258ae10d19f0aac01e3a550ec0d538f598d077..f23ac725c57006176564c97b30d34855 private void villagerSettings() { villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); -@@ -2929,6 +2932,18 @@ public class PurpurWorldConfig { +@@ -2931,6 +2934,18 @@ public class PurpurWorldConfig { villagerAllowTrading = getBoolean("mobs.villager.allow-trading", villagerAllowTrading); villagerAlwaysDropExp = getBoolean("mobs.villager.always-drop-exp", villagerAlwaysDropExp); villagerMinimumDemand = getInt("mobs.villager.minimum-demand", villagerMinimumDemand); diff --git a/patches/server/0233-Option-for-villager-display-trade-item.patch b/patches/server/0233-Option-for-villager-display-trade-item.patch index 49e1c4a79..1fa73b8ea 100644 --- a/patches/server/0233-Option-for-villager-display-trade-item.patch +++ b/patches/server/0233-Option-for-villager-display-trade-item.patch @@ -17,10 +17,10 @@ index 18dad0825616c4167a0a7555689ee64910a87e09..6945992491027d43eca4f1ca697ad45c && this.lookTime > 0 && entity.getBrain().getMemory(MemoryModuleType.INTERACTION_TARGET).isPresent(); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index f23ac725c57006176564c97b30d348551dd9444f..fc357473f30258a54a2ee36dc0d63c2a52f2eaea 100644 +index 5f3bbb6adabaefaf54d4a313c5e7c99eaf3f1391..8edb79160b90f9caaa58233608621078ad31cb47 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2909,6 +2909,7 @@ public class PurpurWorldConfig { +@@ -2911,6 +2911,7 @@ public class PurpurWorldConfig { public boolean villagerLobotomizeEnabled = false; public int villagerLobotomizeCheckInterval = 100; public boolean villagerLobotomizeWaitUntilTradeLocked = false; @@ -28,7 +28,7 @@ index f23ac725c57006176564c97b30d348551dd9444f..fc357473f30258a54a2ee36dc0d63c2a private void villagerSettings() { villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); -@@ -2944,6 +2945,7 @@ public class PurpurWorldConfig { +@@ -2946,6 +2947,7 @@ public class PurpurWorldConfig { villagerLobotomizeEnabled = getBoolean("mobs.villager.lobotomize.enabled", villagerLobotomizeEnabled); villagerLobotomizeCheckInterval = getInt("mobs.villager.lobotomize.check-interval", villagerLobotomizeCheckInterval); villagerLobotomizeWaitUntilTradeLocked = getBoolean("mobs.villager.lobotomize.wait-until-trade-locked", villagerLobotomizeWaitUntilTradeLocked); diff --git a/patches/server/0234-MC-238526-Fix-spawner-not-spawning-water-animals-cor.patch b/patches/server/0234-MC-238526-Fix-spawner-not-spawning-water-animals-cor.patch index ac1de5cf8..e65314871 100644 --- a/patches/server/0234-MC-238526-Fix-spawner-not-spawning-water-animals-cor.patch +++ b/patches/server/0234-MC-238526-Fix-spawner-not-spawning-water-animals-cor.patch @@ -17,10 +17,10 @@ index 8c4532a250f8679d729a35c17e9b5bd339264450..2b8336bd88641cfb29e94c8f01abfbdb } } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index fc357473f30258a54a2ee36dc0d63c2a52f2eaea..f4584785ce8b16d3acc27c848eb79cc55bf08a18 100644 +index 8edb79160b90f9caaa58233608621078ad31cb47..5a9073ceeac3f41ed8ee9659dd7a33769f4e2f04 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1021,8 +1021,10 @@ public class PurpurWorldConfig { +@@ -1023,8 +1023,10 @@ public class PurpurWorldConfig { } public boolean spawnerDeactivateByRedstone = false; diff --git a/patches/server/0235-Config-for-mob-last-hurt-by-player-time.patch b/patches/server/0235-Config-for-mob-last-hurt-by-player-time.patch index e9dbed438..b30d8ae84 100644 --- a/patches/server/0235-Config-for-mob-last-hurt-by-player-time.patch +++ b/patches/server/0235-Config-for-mob-last-hurt-by-player-time.patch @@ -5,27 +5,27 @@ Subject: [PATCH] Config for mob last hurt by player time diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 19cc0ba32472384bf10662d41fecf23ebfc9876c..71f735d2c91d08ab652ddc8f3fe37bbb3b425ba4 100644 +index 8c2c14769ae32c9a92bc043f9e753abf7e32e1c3..239046ab467f499107d1e30ca183d79661a380f0 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -1614,13 +1614,13 @@ public abstract class LivingEntity extends Entity implements Attackable { - if (entity1 instanceof net.minecraft.world.entity.player.Player) { - net.minecraft.world.entity.player.Player entityhuman = (net.minecraft.world.entity.player.Player) entity1; +@@ -1708,13 +1708,13 @@ public abstract class LivingEntity extends Entity implements Attackable { + Entity entity = damageSource.getEntity(); + if (entity instanceof net.minecraft.world.entity.player.Player entityhuman) { +- this.lastHurtByPlayerTime = 100; ++ this.lastHurtByPlayerTime = this.level().purpurConfig.mobLastHurtByPlayerTime; // Purpur + this.lastHurtByPlayer = entityhuman; + return entityhuman; + } else { + if (entity instanceof Wolf entitywolf) { + if (entitywolf.isTame()) { - this.lastHurtByPlayerTime = 100; + this.lastHurtByPlayerTime = this.level().purpurConfig.mobLastHurtByPlayerTime; // Purpur - this.lastHurtByPlayer = entityhuman; - } else if (entity1 instanceof Wolf) { - Wolf entitywolf = (Wolf) entity1; + LivingEntity entityliving = entitywolf.getOwner(); - if (entitywolf.isTame()) { -- this.lastHurtByPlayerTime = 100; -+ this.lastHurtByPlayerTime = this.level().purpurConfig.mobLastHurtByPlayerTime; // Purpur - LivingEntity entityliving2 = entitywolf.getOwner(); - - if (entityliving2 instanceof net.minecraft.world.entity.player.Player) { + if (entityliving instanceof net.minecraft.world.entity.player.Player) { diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java -index bf84c9664ca6d6c3d862e592c39bcc59374b63fe..051ffc663317fe5a4fafe0750c89fafdece4d316 100644 +index 7ccc40555964b906be6987532de1f319e38741ce..72498e233ece886941cca268e729336d66042402 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java @@ -523,7 +523,7 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { diff --git a/patches/server/0236-Anvil-repair-damage-options.patch b/patches/server/0236-Anvil-repair-damage-options.patch index c6788bfe3..0002d6896 100644 --- a/patches/server/0236-Anvil-repair-damage-options.patch +++ b/patches/server/0236-Anvil-repair-damage-options.patch @@ -63,10 +63,10 @@ index 50c907c962f936d2035bb7550750cdbd220b29c2..f9a2d2d4f798efa0d691996ec5ff7fe0 protected InteractionResult useWithoutItem(BlockState state, Level world, BlockPos pos, Player player, BlockHitResult hit) { if (!world.isClientSide) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 74373b7875906bd79595ca02b86add222d9645e0..f34de537ab3bd3727572313f7e8004703c73f641 100644 +index 1a37f10b480c9d63b912543afbc80913095aaa7b..3d545e57066270d1d39e9ca45c559a707966f815 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -788,9 +788,13 @@ public class PurpurWorldConfig { +@@ -790,9 +790,13 @@ public class PurpurWorldConfig { public boolean anvilAllowColors = false; public boolean anvilColorsUseMiniMessage; diff --git a/patches/server/0237-Option-to-disable-turtle-egg-trampling-with-feather-.patch b/patches/server/0237-Option-to-disable-turtle-egg-trampling-with-feather-.patch index 4827bbbd0..544695a87 100644 --- a/patches/server/0237-Option-to-disable-turtle-egg-trampling-with-feather-.patch +++ b/patches/server/0237-Option-to-disable-turtle-egg-trampling-with-feather-.patch @@ -24,10 +24,10 @@ index 72c89f14977844e1460e9a914f39e896c9d498fd..f1dfb23160ff70e0da4dd2af2d83e879 return world.purpurConfig.turtleEggsBypassMobGriefing ^ world.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING); // Purpur end diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index f34de537ab3bd3727572313f7e8004703c73f641..a50e634a83234a3396a5e1471706f77dcfbb5d7c 100644 +index 3d545e57066270d1d39e9ca45c559a707966f815..f7ef17c90205e129d776c0faa9aaf6a2607a31ba 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1049,12 +1049,14 @@ public class PurpurWorldConfig { +@@ -1051,12 +1051,14 @@ public class PurpurWorldConfig { public boolean turtleEggsBreakFromMinecarts = false; public boolean turtleEggsBypassMobGriefing = false; public int turtleEggsRandomTickCrackChance = 500; diff --git a/patches/server/0238-Add-toggle-for-enchant-level-clamping.patch b/patches/server/0238-Add-toggle-for-enchant-level-clamping.patch index 29e6aba57..792b82d66 100644 --- a/patches/server/0238-Add-toggle-for-enchant-level-clamping.patch +++ b/patches/server/0238-Add-toggle-for-enchant-level-clamping.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add toggle for enchant level clamping diff --git a/src/main/java/net/minecraft/server/Main.java b/src/main/java/net/minecraft/server/Main.java -index 90ca25c4aaf92a5639839a7cdaee2ffcdb75efa7..463eb4844e467c5c7018087e4f21d7d41e1c9063 100644 +index 300a044bb0f0e377133f24469cea1a9669de6e58..978c0d7296f400fe2ebda89e4f61386e6e87fe0c 100644 --- a/src/main/java/net/minecraft/server/Main.java +++ b/src/main/java/net/minecraft/server/Main.java -@@ -120,6 +120,11 @@ public class Main { +@@ -122,6 +122,11 @@ public class Main { JvmProfiler.INSTANCE.start(Environment.SERVER); } diff --git a/patches/server/0240-Implement-configurable-search-radius-for-villagers-t.patch b/patches/server/0240-Implement-configurable-search-radius-for-villagers-t.patch index ff77f240d..0e9a78929 100644 --- a/patches/server/0240-Implement-configurable-search-radius-for-villagers-t.patch +++ b/patches/server/0240-Implement-configurable-search-radius-for-villagers-t.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Implement configurable search radius for villagers to spawn diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java -index ca5504ba8a10a3ed384cb9f5a3c550466c2688f1..0ee456972923e90905732ffc5d77bb027cf6c0fc 100644 +index a191fb8563c01413dc4119e3adf81e23aacb824b..15ddc44bb266b4cdb1036c92dd60f1379832b501 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java @@ -1073,6 +1073,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler @@ -18,10 +18,10 @@ index ca5504ba8a10a3ed384cb9f5a3c550466c2688f1..0ee456972923e90905732ffc5d77bb02 AABB axisalignedbb = this.getBoundingBox().inflate(10.0D, 10.0D, 10.0D); List list = world.getEntitiesOfClass(Villager.class, axisalignedbb); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index a50e634a83234a3396a5e1471706f77dcfbb5d7c..011ac10466da8720800f2764a316a9cc9bb50fd9 100644 +index f7ef17c90205e129d776c0faa9aaf6a2607a31ba..26f90270a8b6f1eccf0ddf9babfc6d8026f1d509 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2920,6 +2920,8 @@ public class PurpurWorldConfig { +@@ -2922,6 +2922,8 @@ public class PurpurWorldConfig { public int villagerLobotomizeCheckInterval = 100; public boolean villagerLobotomizeWaitUntilTradeLocked = false; public boolean villagerDisplayTradeItem = true; @@ -30,7 +30,7 @@ index a50e634a83234a3396a5e1471706f77dcfbb5d7c..011ac10466da8720800f2764a316a9cc private void villagerSettings() { villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); -@@ -2956,6 +2958,8 @@ public class PurpurWorldConfig { +@@ -2958,6 +2960,8 @@ public class PurpurWorldConfig { villagerLobotomizeCheckInterval = getInt("mobs.villager.lobotomize.check-interval", villagerLobotomizeCheckInterval); villagerLobotomizeWaitUntilTradeLocked = getBoolean("mobs.villager.lobotomize.wait-until-trade-locked", villagerLobotomizeWaitUntilTradeLocked); villagerDisplayTradeItem = getBoolean("mobs.villager.display-trade-item", villagerDisplayTradeItem); diff --git a/patches/server/0241-Stonecutter-damage.patch b/patches/server/0241-Stonecutter-damage.patch index bb9114b57..69dd13a4d 100644 --- a/patches/server/0241-Stonecutter-damage.patch +++ b/patches/server/0241-Stonecutter-damage.patch @@ -83,10 +83,10 @@ index 61e906fb47b242e86789dca1a210473c76863166..d343fd5c9f31073f1b3a0f91b8ea61a6 public DamageSource inFire() { diff --git a/src/main/java/net/minecraft/world/level/block/StonecutterBlock.java b/src/main/java/net/minecraft/world/level/block/StonecutterBlock.java -index e61644241f24b42bb4f702d3eef5b590b4d107c8..0bf6503819b02e5ba2c346d9d563a93f2946d89b 100644 +index f1366aea49206afcd64bf058ee673d6a562315c5..ff655401c7aecba5acd8d241e844d77364f09f35 100644 --- a/src/main/java/net/minecraft/world/level/block/StonecutterBlock.java +++ b/src/main/java/net/minecraft/world/level/block/StonecutterBlock.java -@@ -98,4 +98,14 @@ public class StonecutterBlock extends Block { +@@ -93,4 +93,14 @@ public class StonecutterBlock extends Block { protected boolean isPathfindable(BlockState state, PathComputationType type) { return false; } @@ -143,10 +143,10 @@ index 2090ecfebe8bc164239d198c1c50b134c7bc60c5..dba6a69891f50ba057187a8138ff227a public static boolean advancementOnlyBroadcastToAffectedPlayer = false; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 011ac10466da8720800f2764a316a9cc9bb50fd9..30b11ecbf75e5a4752d6d117f738828273b63b2f 100644 +index 26f90270a8b6f1eccf0ddf9babfc6d8026f1d509..22ae60309fa0b19ba3d2b58c919a6e262eb1903d 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1044,6 +1044,11 @@ public class PurpurWorldConfig { +@@ -1046,6 +1046,11 @@ public class PurpurWorldConfig { spongeAbsorbsWaterFromMud = getBoolean("blocks.sponge.absorbs-water-from-mud", spongeAbsorbsWaterFromMud); } diff --git a/patches/server/0242-Configurable-damage-settings-for-magma-blocks.patch b/patches/server/0242-Configurable-damage-settings-for-magma-blocks.patch index f6ee0cdc9..fd37174a9 100644 --- a/patches/server/0242-Configurable-damage-settings-for-magma-blocks.patch +++ b/patches/server/0242-Configurable-damage-settings-for-magma-blocks.patch @@ -18,10 +18,10 @@ index 7ffdcf18bf4bd8b5325c76945b2d80ca3fe52958..dfa931316fde0b2e80068a0edd1427ff } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 30b11ecbf75e5a4752d6d117f738828273b63b2f..8893ce54385e8b6d9de6b87ebf203efde140fff4 100644 +index 22ae60309fa0b19ba3d2b58c919a6e262eb1903d..4eb94ba260c76984f78a96e0ceb721a857be6e75 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -985,6 +985,11 @@ public class PurpurWorldConfig { +@@ -987,6 +987,11 @@ public class PurpurWorldConfig { pistonBlockPushLimit = getInt("blocks.piston.block-push-limit", pistonBlockPushLimit); } diff --git a/patches/server/0243-Add-config-for-snow-on-blue-ice.patch b/patches/server/0243-Add-config-for-snow-on-blue-ice.patch index 31a57db21..ade77f277 100644 --- a/patches/server/0243-Add-config-for-snow-on-blue-ice.patch +++ b/patches/server/0243-Add-config-for-snow-on-blue-ice.patch @@ -22,10 +22,10 @@ index 9908a0b5b1fec5f9de518a733f7abbbff7e1a9f9..0ad444cf7f798f63e9140a42c5d5d8ca } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 8893ce54385e8b6d9de6b87ebf203efde140fff4..4a6646711c1aa32a7123396126933d74d2cb5173 100644 +index 4eb94ba260c76984f78a96e0ceb721a857be6e75..eb84c63b029a39ac352d1b0cf5a264c0c14d2f8e 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -966,9 +966,11 @@ public class PurpurWorldConfig { +@@ -968,9 +968,11 @@ public class PurpurWorldConfig { public boolean mobsSpawnOnPackedIce = true; public boolean mobsSpawnOnBlueIce = true; diff --git a/patches/server/0244-Skeletons-eat-wither-roses.patch b/patches/server/0244-Skeletons-eat-wither-roses.patch index d061e8efc..bb1d0adae 100644 --- a/patches/server/0244-Skeletons-eat-wither-roses.patch +++ b/patches/server/0244-Skeletons-eat-wither-roses.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Skeletons eat wither roses diff --git a/src/main/java/net/minecraft/world/entity/monster/Skeleton.java b/src/main/java/net/minecraft/world/entity/monster/Skeleton.java -index 61b5f27c1125ed1b183dd3b86b44a10b7098f91c..3cbe4c1ed514936a00e0181cb1e647fbb58032bb 100644 +index 61b5f27c1125ed1b183dd3b86b44a10b7098f91c..84bd180ce29d4560675b029a1fa01b03ac698249 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Skeleton.java +++ b/src/main/java/net/minecraft/world/entity/monster/Skeleton.java @@ -17,6 +17,16 @@ import net.minecraft.world.item.Items; @@ -25,7 +25,7 @@ index 61b5f27c1125ed1b183dd3b86b44a10b7098f91c..3cbe4c1ed514936a00e0181cb1e647fb public class Skeleton extends AbstractSkeleton { private static final int TOTAL_CONVERSION_TIME = 300; -@@ -181,4 +191,63 @@ public class Skeleton extends AbstractSkeleton { +@@ -181,4 +191,64 @@ public class Skeleton extends AbstractSkeleton { } } @@ -81,19 +81,20 @@ index 61b5f27c1125ed1b183dd3b86b44a10b7098f91c..3cbe4c1ed514936a00e0181cb1e647fb + } + + for (int i = 0; i < 15; ++i) { -+ ((ServerLevel) level()).sendParticles(((ServerLevel) level()).players(), null, ParticleTypes.HAPPY_VILLAGER, ++ ((ServerLevel) level()).sendParticlesSource(((ServerLevel) level()).players(), null, ParticleTypes.HAPPY_VILLAGER, ++ false, true, + getX() + random.nextFloat(), getY() + (random.nextFloat() * 2), getZ() + random.nextFloat(), 1, -+ random.nextGaussian() * 0.05D, random.nextGaussian() * 0.05D, random.nextGaussian() * 0.05D, 0, true); ++ random.nextGaussian() * 0.05D, random.nextGaussian() * 0.05D, random.nextGaussian() * 0.05D, 0); + } + return InteractionResult.SUCCESS; + } + // Purpur end } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 4a6646711c1aa32a7123396126933d74d2cb5173..647852226244c862735c113e16fcf4410d39698d 100644 +index eb84c63b029a39ac352d1b0cf5a264c0c14d2f8e..c4d13f49beeaf2e0a5059a7e916d59502e6c36c1 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2580,6 +2580,7 @@ public class PurpurWorldConfig { +@@ -2582,6 +2582,7 @@ public class PurpurWorldConfig { public boolean skeletonTakeDamageFromWater = false; public boolean skeletonAlwaysDropExp = false; public double skeletonHeadVisibilityPercent = 0.5D; @@ -101,7 +102,7 @@ index 4a6646711c1aa32a7123396126933d74d2cb5173..647852226244c862735c113e16fcf441 private void skeletonSettings() { skeletonRidable = getBoolean("mobs.skeleton.ridable", skeletonRidable); skeletonRidableInWater = getBoolean("mobs.skeleton.ridable-in-water", skeletonRidableInWater); -@@ -2594,6 +2595,7 @@ public class PurpurWorldConfig { +@@ -2596,6 +2597,7 @@ public class PurpurWorldConfig { skeletonTakeDamageFromWater = getBoolean("mobs.skeleton.takes-damage-from-water", skeletonTakeDamageFromWater); skeletonAlwaysDropExp = getBoolean("mobs.skeleton.always-drop-exp", skeletonAlwaysDropExp); skeletonHeadVisibilityPercent = getDouble("mobs.skeleton.head-visibility-percent", skeletonHeadVisibilityPercent); diff --git a/patches/server/0245-Enchantment-Table-Persists-Lapis.patch b/patches/server/0245-Enchantment-Table-Persists-Lapis.patch index 7cc5ca196..92ae74363 100644 --- a/patches/server/0245-Enchantment-Table-Persists-Lapis.patch +++ b/patches/server/0245-Enchantment-Table-Persists-Lapis.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Enchantment Table Persists Lapis diff --git a/src/main/java/net/minecraft/world/inventory/EnchantmentMenu.java b/src/main/java/net/minecraft/world/inventory/EnchantmentMenu.java -index 50a735dd97daab4fb9579f922a4c63de60204f29..5b8ad051347f73553acb65c5ddc690d2b7eaa754 100644 +index bb9b17a058273ee1519b2abbefba97cad7feb51b..29996864b35711b29629e9071d28493ac27fbde6 100644 --- a/src/main/java/net/minecraft/world/inventory/EnchantmentMenu.java +++ b/src/main/java/net/minecraft/world/inventory/EnchantmentMenu.java -@@ -42,6 +42,12 @@ import org.bukkit.event.enchantment.PrepareItemEnchantEvent; +@@ -41,6 +41,12 @@ import org.bukkit.event.enchantment.PrepareItemEnchantEvent; import org.bukkit.entity.Player; // CraftBukkit end @@ -20,8 +20,8 @@ index 50a735dd97daab4fb9579f922a4c63de60204f29..5b8ad051347f73553acb65c5ddc690d2 + public class EnchantmentMenu extends AbstractContainerMenu { - static final ResourceLocation EMPTY_SLOT_LAPIS_LAZULI = ResourceLocation.withDefaultNamespace("item/empty_slot_lapis_lazuli"); -@@ -76,6 +82,22 @@ public class EnchantmentMenu extends AbstractContainerMenu { + static final ResourceLocation EMPTY_SLOT_LAPIS_LAZULI = ResourceLocation.withDefaultNamespace("container/slot/lapis_lazuli"); +@@ -75,6 +81,22 @@ public class EnchantmentMenu extends AbstractContainerMenu { return context.getLocation(); } // CraftBukkit end @@ -44,8 +44,8 @@ index 50a735dd97daab4fb9579f922a4c63de60204f29..5b8ad051347f73553acb65c5ddc690d2 }; this.random = RandomSource.create(); this.enchantmentSeed = DataSlot.standalone(); -@@ -100,6 +122,16 @@ public class EnchantmentMenu extends AbstractContainerMenu { - return Pair.of(InventoryMenu.BLOCK_ATLAS, EnchantmentMenu.EMPTY_SLOT_LAPIS_LAZULI); +@@ -99,6 +121,16 @@ public class EnchantmentMenu extends AbstractContainerMenu { + return EnchantmentMenu.EMPTY_SLOT_LAPIS_LAZULI; } }); + // Purpur start @@ -61,7 +61,7 @@ index 50a735dd97daab4fb9579f922a4c63de60204f29..5b8ad051347f73553acb65c5ddc690d2 this.addStandardInventorySlots(playerInventory, 8, 84); this.addDataSlot(DataSlot.shared(this.costs, 0)); this.addDataSlot(DataSlot.shared(this.costs, 1)); -@@ -329,6 +361,7 @@ public class EnchantmentMenu extends AbstractContainerMenu { +@@ -328,6 +360,7 @@ public class EnchantmentMenu extends AbstractContainerMenu { public void removed(net.minecraft.world.entity.player.Player player) { super.removed(player); this.access.execute((world, blockposition) -> { @@ -70,10 +70,10 @@ index 50a735dd97daab4fb9579f922a4c63de60204f29..5b8ad051347f73553acb65c5ddc690d2 }); } diff --git a/src/main/java/net/minecraft/world/level/block/EnchantingTableBlock.java b/src/main/java/net/minecraft/world/level/block/EnchantingTableBlock.java -index a7fb500d950687743d1fc0b3ad3e6d10dcc6e31a..ce6a9e15ae0114623e79b5d8c244c2c490a3f74e 100644 +index 4c4e6290035710480cd5c1d7399f2443df01a5a6..248039ac7eab85b29ae3c525a986d91aa8d177fe 100644 --- a/src/main/java/net/minecraft/world/level/block/EnchantingTableBlock.java +++ b/src/main/java/net/minecraft/world/level/block/EnchantingTableBlock.java -@@ -123,4 +123,18 @@ public class EnchantingTableBlock extends BaseEntityBlock { +@@ -118,4 +118,18 @@ public class EnchantingTableBlock extends BaseEntityBlock { protected boolean isPathfindable(BlockState state, PathComputationType type) { return false; } @@ -136,10 +136,10 @@ index 39aac959775afeaeea211f21d498cb0ddf0a3fcb..6349a342c023f378af431a73a62fb017 + // Purpur } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 647852226244c862735c113e16fcf4410d39698d..37dc3ba688e546f3feb64927134b6ef926929a5f 100644 +index c4d13f49beeaf2e0a5059a7e916d59502e6c36c1..716ec5b0afcd4e3818d5d749eb5d12d3917e0e86 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1556,6 +1556,11 @@ public class PurpurWorldConfig { +@@ -1558,6 +1558,11 @@ public class PurpurWorldConfig { elderGuardianAlwaysDropExp = getBoolean("mobs.elder_guardian.always-drop-exp", elderGuardianAlwaysDropExp); } diff --git a/patches/server/0247-Config-for-sculk-shrieker-can_summon-state.patch b/patches/server/0247-Config-for-sculk-shrieker-can_summon-state.patch index cadf9a2bb..380631b15 100644 --- a/patches/server/0247-Config-for-sculk-shrieker-can_summon-state.patch +++ b/patches/server/0247-Config-for-sculk-shrieker-can_summon-state.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Config for sculk shrieker can_summon state diff --git a/src/main/java/net/minecraft/world/level/block/SculkShriekerBlock.java b/src/main/java/net/minecraft/world/level/block/SculkShriekerBlock.java -index 0e05bfef55dcacb50766bba8328ffeb8a5394c31..e00fcea07e74de647c26ff9eb32bc682738c15b7 100644 +index 7990a6c225c27845ccada0df91cf5ed7e4315a88..db2b21d5842fafa48dbde25a461505d03aa9b955 100644 --- a/src/main/java/net/minecraft/world/level/block/SculkShriekerBlock.java +++ b/src/main/java/net/minecraft/world/level/block/SculkShriekerBlock.java -@@ -135,7 +135,7 @@ public class SculkShriekerBlock extends BaseEntityBlock implements SimpleWaterlo +@@ -130,7 +130,7 @@ public class SculkShriekerBlock extends BaseEntityBlock implements SimpleWaterlo @Nullable @Override public BlockState getStateForPlacement(BlockPlaceContext ctx) { @@ -18,10 +18,10 @@ index 0e05bfef55dcacb50766bba8328ffeb8a5394c31..e00fcea07e74de647c26ff9eb32bc682 @Override diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 37dc3ba688e546f3feb64927134b6ef926929a5f..1b55aacef555565308b9182a7664bed4d98ac18c 100644 +index 716ec5b0afcd4e3818d5d749eb5d12d3917e0e86..3ad962a28cd4471f2d7593f6053008871a78e50c 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1023,6 +1023,11 @@ public class PurpurWorldConfig { +@@ -1025,6 +1025,11 @@ public class PurpurWorldConfig { } } diff --git a/patches/server/0248-Config-to-not-let-coral-die.patch b/patches/server/0248-Config-to-not-let-coral-die.patch index 0231549f0..70f003e34 100644 --- a/patches/server/0248-Config-to-not-let-coral-die.patch +++ b/patches/server/0248-Config-to-not-let-coral-die.patch @@ -29,10 +29,10 @@ index a59b23f4062fa896836dec72cbd5097411774ad1..c526ea13a726624adaa654f09ff84c89 int i = aenumdirection.length; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 1b55aacef555565308b9182a7664bed4d98ac18c..e13d1e6d15cdfc58f4655ff288d9393e4c134a51 100644 +index 3ad962a28cd4471f2d7593f6053008871a78e50c..ffd131b4ff8d0c49c76829ec202c955509f9ae96 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -872,6 +872,11 @@ public class PurpurWorldConfig { +@@ -874,6 +874,11 @@ public class PurpurWorldConfig { composterBulkProcess = getBoolean("blocks.composter.sneak-to-bulk-process", composterBulkProcess); } diff --git a/patches/server/0249-Add-local-difficulty-api.patch b/patches/server/0249-Add-local-difficulty-api.patch index e8862aba8..6081fadd1 100644 --- a/patches/server/0249-Add-local-difficulty-api.patch +++ b/patches/server/0249-Add-local-difficulty-api.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add local difficulty api diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -index 57da11c0da7322e74810e7108e9c8000b0c36520..868bf852a9ed6ea2a48a238608f47405da1296f4 100644 +index 92d9f0ea8f7810ae20d3996f49aefa539b4bcb69..4f3da35084d1c69d1b697196a17f932fedee9b88 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -@@ -2384,6 +2384,12 @@ public class CraftWorld extends CraftRegionAccessor implements World { +@@ -2374,6 +2374,12 @@ public class CraftWorld extends CraftRegionAccessor implements World { return (this.getHandle().getDragonFight() == null) ? null : new CraftDragonBattle(this.getHandle().getDragonFight()); } diff --git a/patches/server/0250-Add-toggle-for-RNG-manipulation.patch b/patches/server/0250-Add-toggle-for-RNG-manipulation.patch index df00ac4b4..595ee9b9c 100644 --- a/patches/server/0250-Add-toggle-for-RNG-manipulation.patch +++ b/patches/server/0250-Add-toggle-for-RNG-manipulation.patch @@ -7,7 +7,7 @@ Paper patches RNG maniplulation by using a shared (and locked) random source. This comes with a performance gain, but technical players may prefer the ability to manipulate RNG. diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index c1ba5eab15bb4b7599c1e5e23b90dfb361af93b6..2b612bfe6da7cc6d6447c60aa6f4b72b2616b72d 100644 +index 433dbe3c9350cd55ff22d490e077bf1a31ae83be..7435ff1996e0a6db2f98f1218bf7d2b73a3e2b1d 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java @@ -602,7 +602,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess @@ -20,7 +20,7 @@ index c1ba5eab15bb4b7599c1e5e23b90dfb361af93b6..2b612bfe6da7cc6d6447c60aa6f4b72b this.fluidHeight = new Object2DoubleArrayMap(2); this.fluidOnEyes = new HashSet(); diff --git a/src/main/java/net/minecraft/world/entity/animal/Squid.java b/src/main/java/net/minecraft/world/entity/animal/Squid.java -index 7cfd9e4e29b8f3cf277679f785bae3cb12d2bd20..36a56553702fa6e4a2ac92b3639c210c94faee73 100644 +index da04ee901ad77637ee2c28a9a96f481affcce808..32d694b61e56431baeeb3feb32f57062bb6c5765 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Squid.java +++ b/src/main/java/net/minecraft/world/entity/animal/Squid.java @@ -46,7 +46,7 @@ public class Squid extends AgeableWaterCreature { diff --git a/patches/server/0251-Add-more-logger-output-for-invalid-movement-kicks.patch b/patches/server/0251-Add-more-logger-output-for-invalid-movement-kicks.patch index eeec00f5d..a10328804 100644 --- a/patches/server/0251-Add-more-logger-output-for-invalid-movement-kicks.patch +++ b/patches/server/0251-Add-more-logger-output-for-invalid-movement-kicks.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add more logger output for invalid movement kicks diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 1e1b42f60679c8b8b27b3255feda4c6cf77d5536..9ae16e24013ea5664d4ea6d52ed7dd188404890f 100644 +index 8d52446ddd452a62fa727469f2e191acba1b7d24..70d314a8d5ff077c337d468482b0f1e130ffdd28 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -761,6 +761,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -756,6 +756,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl PacketUtils.ensureRunningOnSameThread(packet, this, this.player.serverLevel()); if (packet.getId() == this.awaitingTeleport) { if (this.awaitingPositionFromClient == null) { @@ -16,7 +16,7 @@ index 1e1b42f60679c8b8b27b3255feda4c6cf77d5536..9ae16e24013ea5664d4ea6d52ed7dd18 this.disconnect((Component) Component.translatable("multiplayer.disconnect.invalid_player_movement"), org.bukkit.event.player.PlayerKickEvent.Cause.INVALID_PLAYER_MOVEMENT); // Paper - kick event cause return; } -@@ -1372,7 +1373,15 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -1426,7 +1427,15 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl @Override public void handleMovePlayer(ServerboundMovePlayerPacket packet) { PacketUtils.ensureRunningOnSameThread(packet, this, this.player.serverLevel()); diff --git a/patches/server/0252-Add-Bee-API.patch b/patches/server/0252-Add-Bee-API.patch index e4abbb113..6a1940d10 100644 --- a/patches/server/0252-Add-Bee-API.patch +++ b/patches/server/0252-Add-Bee-API.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add Bee API diff --git a/src/main/java/net/minecraft/world/entity/animal/Bee.java b/src/main/java/net/minecraft/world/entity/animal/Bee.java -index 4b32a783cabf05f5bae0dba22eea8ac7ba2cd285..dc8df0912c1d18176e18a8f4dc43c4f60f81b659 100644 +index 5ca5f128e5614146e76935e6d674e0699c65dfdb..884527c8326c6df3656a4d3a2f5f2847f95b0f63 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Bee.java +++ b/src/main/java/net/minecraft/world/entity/animal/Bee.java -@@ -954,6 +954,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { +@@ -988,6 +988,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { if (optional.isPresent()) { Bee.this.savedFlowerPos = (BlockPos) optional.get(); Bee.this.navigation.moveTo((double) Bee.this.savedFlowerPos.getX() + 0.5D, (double) Bee.this.savedFlowerPos.getY() + 0.5D, (double) Bee.this.savedFlowerPos.getZ() + 0.5D, 1.2000000476837158D); @@ -16,7 +16,7 @@ index 4b32a783cabf05f5bae0dba22eea8ac7ba2cd285..dc8df0912c1d18176e18a8f4dc43c4f6 return true; } else { Bee.this.remainingCooldownBeforeLocatingNewFlower = Mth.nextInt(Bee.this.random, 20, 60); -@@ -997,6 +998,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { +@@ -1031,6 +1032,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { this.pollinating = false; Bee.this.navigation.stop(); Bee.this.remainingCooldownBeforeLocatingNewFlower = 200; @@ -24,7 +24,7 @@ index 4b32a783cabf05f5bae0dba22eea8ac7ba2cd285..dc8df0912c1d18176e18a8f4dc43c4f6 } @Override -@@ -1046,6 +1048,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { +@@ -1080,6 +1082,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { this.setWantedPos(); } diff --git a/patches/server/0253-Debug-Marker-API.patch b/patches/server/0253-Debug-Marker-API.patch index e6141684a..e8910df55 100644 --- a/patches/server/0253-Debug-Marker-API.patch +++ b/patches/server/0253-Debug-Marker-API.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Debug Marker API diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 268ab3f175ece52e7da6dfa50573089f49685d68..6b0308d081af880a79c369306e8ad69757bcd6de 100644 +index 82c8dc67fc40e253a4765a215864d40c007de3c2..efb81eec2680fc9ae2b92edead07d1d78fbe2b00 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -1643,6 +1643,42 @@ public final class CraftServer implements Server { @@ -52,10 +52,10 @@ index 268ab3f175ece52e7da6dfa50573089f49685d68..6b0308d081af880a79c369306e8ad697 @Override diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -index 868bf852a9ed6ea2a48a238608f47405da1296f4..907fe00ab752ad124020755f211567af771b9d70 100644 +index 4f3da35084d1c69d1b697196a17f932fedee9b88..eb9bb689a52a7e9c95d6f2e07bb16799286e9057 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -@@ -2388,6 +2388,42 @@ public class CraftWorld extends CraftRegionAccessor implements World { +@@ -2378,6 +2378,42 @@ public class CraftWorld extends CraftRegionAccessor implements World { public float getLocalDifficultyAt(Location location) { return getHandle().getCurrentDifficultyAt(io.papermc.paper.util.MCUtil.toBlockPosition(location)).getEffectiveDifficulty(); } @@ -99,10 +99,10 @@ index 868bf852a9ed6ea2a48a238608f47405da1296f4..907fe00ab752ad124020755f211567af @Override diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index fa0cc92b6c66cbed3ab895278b4bf3f80b0af69d..5bb5b1eaf7f50983bce3e9f515115eced685527a 100644 +index 02ef1446ed3ef1bc15949a2bc9dacc842cf2f02d..2a2f19d9fe756b9e017cb5640343d2a7852e7ece 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -3629,5 +3629,43 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -3606,5 +3606,43 @@ public class CraftPlayer extends CraftHumanEntity implements Player { public void resetIdleTimer() { getHandle().resetLastActionTime(); } diff --git a/patches/server/0254-mob-spawning-option-to-ignore-creative-players.patch b/patches/server/0254-mob-spawning-option-to-ignore-creative-players.patch index e818a14f2..41bb440a0 100644 --- a/patches/server/0254-mob-spawning-option-to-ignore-creative-players.patch +++ b/patches/server/0254-mob-spawning-option-to-ignore-creative-players.patch @@ -18,10 +18,10 @@ index c1b76a1ebc1eea7ab70cf61d8175a31794dd122a..dc15c15951e4ca30b8341d24f813259a if (entityhuman != null) { double d2 = entityhuman.distanceToSqr(d0, (double) i, d1); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 47b29febec2af1f3a8ef7b9afc6a4982df08eb47..e94c9fb93191d880b7cbd1b293a8da5c1074aba4 100644 +index a0c49166a93ee18abc24dd40e95bdf4ece7e90b3..bff614ae120300622b803187bcfdf7e6f88fa7a8 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -378,6 +378,7 @@ public class PurpurWorldConfig { +@@ -380,6 +380,7 @@ public class PurpurWorldConfig { public boolean phantomSpawning; public boolean villagerTraderSpawning; public boolean villageSiegeSpawning; @@ -29,7 +29,7 @@ index 47b29febec2af1f3a8ef7b9afc6a4982df08eb47..e94c9fb93191d880b7cbd1b293a8da5c private void mobSpawnerSettings() { // values of "default" or null will default to true only if the world environment is normal (aka overworld) Predicate predicate = (bool) -> (bool != null && bool) || (bool == null && environment == World.Environment.NORMAL); -@@ -386,6 +387,7 @@ public class PurpurWorldConfig { +@@ -388,6 +389,7 @@ public class PurpurWorldConfig { phantomSpawning = getBoolean("gameplay-mechanics.mob-spawning.phantoms", predicate); villagerTraderSpawning = getBoolean("gameplay-mechanics.mob-spawning.wandering-traders", predicate); villageSiegeSpawning = getBoolean("gameplay-mechanics.mob-spawning.village-sieges", predicate); diff --git a/patches/server/0255-Add-skeleton-bow-accuracy-option.patch b/patches/server/0255-Add-skeleton-bow-accuracy-option.patch index bc59e9a17..dcd7828ff 100644 --- a/patches/server/0255-Add-skeleton-bow-accuracy-option.patch +++ b/patches/server/0255-Add-skeleton-bow-accuracy-option.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add skeleton bow accuracy option diff --git a/src/main/java/net/minecraft/world/entity/monster/AbstractSkeleton.java b/src/main/java/net/minecraft/world/entity/monster/AbstractSkeleton.java -index 2cadbc0d56908ca978e1735eff07f5e634548606..39d02cf0e31832e30c4f034b0b5385e3e0057e60 100644 +index f90f3e3ad7c941e3222a8119d9b01d571eef4c1b..0235488faee8078186fbb78038789da0846aca29 100644 --- a/src/main/java/net/minecraft/world/entity/monster/AbstractSkeleton.java +++ b/src/main/java/net/minecraft/world/entity/monster/AbstractSkeleton.java -@@ -197,7 +197,7 @@ public abstract class AbstractSkeleton extends Monster implements RangedAttackMo +@@ -199,7 +199,7 @@ public abstract class AbstractSkeleton extends Monster implements RangedAttackMo } if (event.getProjectile() == entityarrow.getBukkitEntity()) { @@ -18,10 +18,10 @@ index 2cadbc0d56908ca978e1735eff07f5e634548606..39d02cf0e31832e30c4f034b0b5385e3 // CraftBukkit end } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index e94c9fb93191d880b7cbd1b293a8da5c1074aba4..b38c114e063c3f49cdf19f9c489ee92bcb7006ed 100644 +index bff614ae120300622b803187bcfdf7e6f88fa7a8..1fda4d542e3395612b2550aa32bfb3f882b797e9 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2600,6 +2600,8 @@ public class PurpurWorldConfig { +@@ -2602,6 +2602,8 @@ public class PurpurWorldConfig { public boolean skeletonAlwaysDropExp = false; public double skeletonHeadVisibilityPercent = 0.5D; public int skeletonFeedWitherRoses = 0; @@ -30,7 +30,7 @@ index e94c9fb93191d880b7cbd1b293a8da5c1074aba4..b38c114e063c3f49cdf19f9c489ee92b private void skeletonSettings() { skeletonRidable = getBoolean("mobs.skeleton.ridable", skeletonRidable); skeletonRidableInWater = getBoolean("mobs.skeleton.ridable-in-water", skeletonRidableInWater); -@@ -2615,6 +2617,18 @@ public class PurpurWorldConfig { +@@ -2617,6 +2619,18 @@ public class PurpurWorldConfig { skeletonAlwaysDropExp = getBoolean("mobs.skeleton.always-drop-exp", skeletonAlwaysDropExp); skeletonHeadVisibilityPercent = getDouble("mobs.skeleton.head-visibility-percent", skeletonHeadVisibilityPercent); skeletonFeedWitherRoses = getInt("mobs.skeleton.feed-wither-roses", skeletonFeedWitherRoses); diff --git a/patches/server/0256-Add-death-screen-API.patch b/patches/server/0256-Add-death-screen-API.patch index 22e53757c..6b62b3193 100644 --- a/patches/server/0256-Add-death-screen-API.patch +++ b/patches/server/0256-Add-death-screen-API.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add death screen API diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 674df8d09988b2509adf93d75b2b37009a709410..02339cdd1e8cd6496cb466eb4b1c7ce2d9b6f064 100644 +index 2a2f19d9fe756b9e017cb5640343d2a7852e7ece..c7e6c7b4a094cd4a2d68332a81409db84bf4ccf5 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -3667,5 +3667,11 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -3644,5 +3644,11 @@ public class CraftPlayer extends CraftHumanEntity implements Player { if (this.getHandle().connection == null) return; this.getHandle().connection.send(new net.minecraft.network.protocol.common.ClientboundCustomPayloadPacket(new net.minecraft.network.protocol.common.custom.GameTestClearMarkersDebugPayload())); } diff --git a/patches/server/0257-Make-pufferfish-config-relocatable.patch b/patches/server/0257-Make-pufferfish-config-relocatable.patch index 4b22dded7..f89e6e654 100644 --- a/patches/server/0257-Make-pufferfish-config-relocatable.patch +++ b/patches/server/0257-Make-pufferfish-config-relocatable.patch @@ -38,7 +38,7 @@ index 8eb51119d60979f85bc98a9413d318522c732693..08a81a45371fd273fb35956bef3bb794 gg.pufferfish.pufferfish.PufferfishCommand.init(); // Pufferfish diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java -index 5bce26e9671aab15ac4bac9a0d00b5184bef74ea..430407b0cf06ba337c59cd576c7e40a8e5fe8229 100644 +index 628f7f784c830189c5718a20ce43a9352e400c33..c471a8c81ba067abcb22956ad1a30b5a9b64fc87 100644 --- a/src/main/java/org/bukkit/craftbukkit/Main.java +++ b/src/main/java/org/bukkit/craftbukkit/Main.java @@ -182,6 +182,12 @@ public class Main { diff --git a/patches/server/0258-Implement-ram-and-rambar-commands.patch b/patches/server/0258-Implement-ram-and-rambar-commands.patch index bd842583a..1fde2f28a 100644 --- a/patches/server/0258-Implement-ram-and-rambar-commands.patch +++ b/patches/server/0258-Implement-ram-and-rambar-commands.patch @@ -18,10 +18,10 @@ index eedb3707523b47ab79db326f6d7382cca60c5393..db455a0fc7e1fc004215b718ff470bd2 if (environment.includeIntegrated) { diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 323d474582cf796ae9d40f9d00f277496d3f2c0a..e6001fadc04b63b82e20652bbb16cb1db5cf44bd 100644 +index 7e785394de3db56e5d0fd8bea5edf5df9fa129fa..8264adc43edfebc2c260c2b915186c20ec3637cc 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -332,6 +332,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple +@@ -330,6 +330,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple public boolean purpurClient = false; // Purpur private boolean tpsBar = false; // Purpur private boolean compassBar = false; // Purpur @@ -29,7 +29,7 @@ index 323d474582cf796ae9d40f9d00f277496d3f2c0a..e6001fadc04b63b82e20652bbb16cb1d // Paper start - rewrite chunk system private ca.spottedleaf.moonrise.patches.chunk_system.player.RegionizedPlayerChunkLoader.PlayerChunkLoaderData chunkLoader; -@@ -696,6 +697,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple +@@ -694,6 +695,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple if (nbt.contains("Purpur.TPSBar")) { this.tpsBar = nbt.getBoolean("Purpur.TPSBar"); } // Purpur if (nbt.contains("Purpur.CompassBar")) { this.compassBar = nbt.getBoolean("Purpur.CompassBar"); } // Purpur @@ -37,7 +37,7 @@ index 323d474582cf796ae9d40f9d00f277496d3f2c0a..e6001fadc04b63b82e20652bbb16cb1d } @Override -@@ -748,6 +750,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple +@@ -746,6 +748,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple } this.saveEnderPearls(nbt); @@ -45,7 +45,7 @@ index 323d474582cf796ae9d40f9d00f277496d3f2c0a..e6001fadc04b63b82e20652bbb16cb1d nbt.putBoolean("Purpur.TPSBar", this.tpsBar); // Purpur nbt.putBoolean("Purpur.CompassBar", this.compassBar); // Purpur } -@@ -3477,5 +3480,13 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple +@@ -3457,5 +3460,13 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple public void compassBar(boolean compassBar) { this.compassBar = compassBar; } diff --git a/patches/server/0259-Configurable-block-blast-resistance.patch b/patches/server/0259-Configurable-block-blast-resistance.patch index 632aa1f53..96209afe8 100644 --- a/patches/server/0259-Configurable-block-blast-resistance.patch +++ b/patches/server/0259-Configurable-block-blast-resistance.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Configurable block blast resistance diff --git a/src/main/java/net/minecraft/world/level/block/state/BlockBehaviour.java b/src/main/java/net/minecraft/world/level/block/state/BlockBehaviour.java -index 6b987ee220d94b482d2aeb4ff6bf271853605dc1..852bfe68ab722a5cbdd90dbd70501b751fe81a78 100644 +index 6376b8b3ff444f4cab93e2bb5d2becc77c33c118..c8ae6e4cd74549f753ec04def5d882de1ab72308 100644 --- a/src/main/java/net/minecraft/world/level/block/state/BlockBehaviour.java +++ b/src/main/java/net/minecraft/world/level/block/state/BlockBehaviour.java @@ -91,7 +91,7 @@ public abstract class BlockBehaviour implements FeatureElement { diff --git a/patches/server/0260-Configurable-block-fall-damage-modifiers.patch b/patches/server/0260-Configurable-block-fall-damage-modifiers.patch index fc1e59e3e..6a92ca4e0 100644 --- a/patches/server/0260-Configurable-block-fall-damage-modifiers.patch +++ b/patches/server/0260-Configurable-block-fall-damage-modifiers.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Configurable block fall damage modifiers diff --git a/src/main/java/net/minecraft/world/level/block/BedBlock.java b/src/main/java/net/minecraft/world/level/block/BedBlock.java -index 3b19395f2ddee654a77df5738a1942a08c20c179..c130d316e87f1f896d33ab43831063a89e3bef2b 100644 +index db79ef24ea01db5f619ab29700d3d391438fb742..54836f2a1e4cc9046ba29fb71ea237b358c9cb7d 100644 --- a/src/main/java/net/minecraft/world/level/block/BedBlock.java +++ b/src/main/java/net/minecraft/world/level/block/BedBlock.java @@ -183,7 +183,7 @@ public class BedBlock extends HorizontalDirectionalBlock implements EntityBlock @@ -18,7 +18,7 @@ index 3b19395f2ddee654a77df5738a1942a08c20c179..c130d316e87f1f896d33ab43831063a8 @Override diff --git a/src/main/java/net/minecraft/world/level/block/Block.java b/src/main/java/net/minecraft/world/level/block/Block.java -index d324eefa500c528776df698e7f9dcdeab76da167..1748aea6613e0c8081f70092c9431e7e04907383 100644 +index b0fbadd0d6ec3e34e36c9f33ed89a3c315dc4289..91e68335d7007e3c1fe13eec0060db01c5f659ac 100644 --- a/src/main/java/net/minecraft/world/level/block/Block.java +++ b/src/main/java/net/minecraft/world/level/block/Block.java @@ -88,6 +88,10 @@ public class Block extends BlockBehaviour implements ItemLike { diff --git a/patches/server/0262-Milk-Keeps-Beneficial-Effects.patch b/patches/server/0262-Milk-Keeps-Beneficial-Effects.patch index 854e0a880..2bc2f25ed 100644 --- a/patches/server/0262-Milk-Keeps-Beneficial-Effects.patch +++ b/patches/server/0262-Milk-Keeps-Beneficial-Effects.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Milk Keeps Beneficial Effects diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 71f735d2c91d08ab652ddc8f3fe37bbb3b425ba4..f4604e543a980d6aeb485252da5a4e755aa12bfa 100644 +index 239046ab467f499107d1e30ca183d79661a380f0..33fbe0f7a356dd847e546feffb468b2803c6744b 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java @@ -1162,6 +1162,7 @@ public abstract class LivingEntity extends Entity implements Attackable { diff --git a/patches/server/0265-Add-an-option-to-fix-MC-3304-projectile-looting.patch b/patches/server/0265-Add-an-option-to-fix-MC-3304-projectile-looting.patch index 62b9e1c03..5370b128d 100644 --- a/patches/server/0265-Add-an-option-to-fix-MC-3304-projectile-looting.patch +++ b/patches/server/0265-Add-an-option-to-fix-MC-3304-projectile-looting.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add an option to fix MC-3304 (projectile looting) diff --git a/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java b/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java -index b7dccbf33feb978b3937522bb0d62d154699ae9f..d8b69ed256c18e264cffc0097936029e5bd33dd8 100644 +index f4f2581faba3f8686592f3f8ebbcdba3e5d30f7b..2f56d25fe4dce613f078455bd0150c6140df7fff 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java +++ b/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java -@@ -80,6 +80,7 @@ public abstract class AbstractArrow extends Projectile { +@@ -82,6 +82,7 @@ public abstract class AbstractArrow extends Projectile { public ItemStack pickupItemStack; @Nullable public ItemStack firedFromWeapon; @@ -16,7 +16,7 @@ index b7dccbf33feb978b3937522bb0d62d154699ae9f..d8b69ed256c18e264cffc0097936029e // Spigot Start @Override -@@ -623,6 +624,12 @@ public abstract class AbstractArrow extends Projectile { +@@ -638,6 +639,12 @@ public abstract class AbstractArrow extends Projectile { return this.firedFromWeapon; } @@ -43,10 +43,10 @@ index 78ba170a83f8c026bd110eae494c52577182ed61..c2ae50872cead7202246b9cce4db6e0a } diff --git a/src/main/java/net/minecraft/world/item/TridentItem.java b/src/main/java/net/minecraft/world/item/TridentItem.java -index 9134c4aada4e0cd7b51810a59405c07d433f7c78..23e04d0d68ffa0e07ab295e7121f8a4963f4914a 100644 +index 810082126567eb02bec395065b95b3c3902d4973..be32255c9bd90f7de3f8f5a62d84c7dcf59fa722 100644 --- a/src/main/java/net/minecraft/world/item/TridentItem.java +++ b/src/main/java/net/minecraft/world/item/TridentItem.java -@@ -100,6 +100,9 @@ public class TridentItem extends Item implements ProjectileItem { +@@ -101,6 +101,9 @@ public class TridentItem extends Item implements ProjectileItem { return false; } ThrownTrident entitythrowntrident = tridentDelayed.projectile(); // Paper - PlayerLaunchProjectileEvent diff --git a/patches/server/0266-Add-option-to-allow-creeper-to-encircle-target-when-.patch b/patches/server/0266-Add-option-to-allow-creeper-to-encircle-target-when-.patch index e9f26f096..c5baf038f 100644 --- a/patches/server/0266-Add-option-to-allow-creeper-to-encircle-target-when-.patch +++ b/patches/server/0266-Add-option-to-allow-creeper-to-encircle-target-when-.patch @@ -24,10 +24,10 @@ index 137ec75ee803789deb7b1ca93dd9369c9af362b9..ca95d25af3e9a0536868b0c7fd8e7d2f } } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 446cdd50d4b5d5ed2e58f4bc4fbb13810399754d..342d5111bd3d4b434071f7499467a860a278ee08 100644 +index 2cc357dea94572362f7c67c051031352c4781e3e..6528d3c3e0d817e8e903ff99f8b71dc78d4f58c8 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1439,6 +1439,7 @@ public class PurpurWorldConfig { +@@ -1441,6 +1441,7 @@ public class PurpurWorldConfig { public boolean creeperHealthRadius = false; public boolean creeperAlwaysDropExp = false; public double creeperHeadVisibilityPercent = 0.5D; @@ -35,7 +35,7 @@ index 446cdd50d4b5d5ed2e58f4bc4fbb13810399754d..342d5111bd3d4b434071f7499467a860 private void creeperSettings() { creeperRidable = getBoolean("mobs.creeper.ridable", creeperRidable); creeperRidableInWater = getBoolean("mobs.creeper.ridable-in-water", creeperRidableInWater); -@@ -1458,6 +1459,7 @@ public class PurpurWorldConfig { +@@ -1460,6 +1461,7 @@ public class PurpurWorldConfig { creeperHealthRadius = getBoolean("mobs.creeper.health-impacts-explosion", creeperHealthRadius); creeperAlwaysDropExp = getBoolean("mobs.creeper.always-drop-exp", creeperAlwaysDropExp); creeperHeadVisibilityPercent = getDouble("mobs.creeper.head-visibility-percent", creeperHeadVisibilityPercent); diff --git a/patches/server/0267-Fire-Immunity-API.patch b/patches/server/0267-Fire-Immunity-API.patch index cff36eb81..3f639b2ea 100644 --- a/patches/server/0267-Fire-Immunity-API.patch +++ b/patches/server/0267-Fire-Immunity-API.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Fire Immunity API diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 2b612bfe6da7cc6d6447c60aa6f4b72b2616b72d..193c888d0ff2a8c2ef1a7fc8fd8af5d26e701092 100644 +index 7435ff1996e0a6db2f98f1218bf7d2b73a3e2b1d..1832f7ef8a14fb60e004cb7b99a0cd0155332349 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java @@ -393,6 +393,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess @@ -16,7 +16,7 @@ index 2b612bfe6da7cc6d6447c60aa6f4b72b2616b72d..193c888d0ff2a8c2ef1a7fc8fd8af5d2 public void setOrigin(@javax.annotation.Nonnull Location location) { this.origin = location.toVector(); -@@ -1960,7 +1961,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -1983,7 +1984,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } public boolean fireImmune() { @@ -25,7 +25,7 @@ index 2b612bfe6da7cc6d6447c60aa6f4b72b2616b72d..193c888d0ff2a8c2ef1a7fc8fd8af5d2 } public boolean causeFallDamage(float fallDistance, float damageMultiplier, DamageSource damageSource) { -@@ -2715,6 +2716,11 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -2738,6 +2739,11 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess nbttagcompound.putBoolean("Paper.FreezeLock", true); } // Paper end @@ -37,7 +37,7 @@ index 2b612bfe6da7cc6d6447c60aa6f4b72b2616b72d..193c888d0ff2a8c2ef1a7fc8fd8af5d2 return nbttagcompound; } catch (Throwable throwable) { CrashReport crashreport = CrashReport.forThrowable(throwable, "Saving entity NBT"); -@@ -2863,6 +2869,11 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -2888,6 +2894,11 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess freezeLocked = nbt.getBoolean("Paper.FreezeLock"); } // Paper end @@ -50,7 +50,7 @@ index 2b612bfe6da7cc6d6447c60aa6f4b72b2616b72d..193c888d0ff2a8c2ef1a7fc8fd8af5d2 } catch (Throwable throwable) { CrashReport crashreport = CrashReport.forThrowable(throwable, "Loading entity NBT"); diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java -index 02b07d43364c7dec37f1d2adffe123a5b595f669..51aee9a468f4ebfa9672fd9ce84883cf080859e3 100644 +index d4396ece618c0fec437ed915ce07be3fb5f7dca9..1290c1587fe9e39d9350c1079ab27f3be0c6084f 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java @@ -88,6 +88,16 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { diff --git a/patches/server/0268-Add-option-to-teleport-to-spawn-on-nether-ceiling-da.patch b/patches/server/0268-Add-option-to-teleport-to-spawn-on-nether-ceiling-da.patch index 0cee4abec..7a3556bbb 100644 --- a/patches/server/0268-Add-option-to-teleport-to-spawn-on-nether-ceiling-da.patch +++ b/patches/server/0268-Add-option-to-teleport-to-spawn-on-nether-ceiling-da.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add option to teleport to spawn on nether ceiling damage diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 193c888d0ff2a8c2ef1a7fc8fd8af5d26e701092..aa171a1afb9800e6ec84f6b4f1b28e44177752f7 100644 +index d19c284986d7fdbb7a2685fcc4a4879db4269403..904805ada13164ec6989e2451583fcc8d290e51f 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -1000,6 +1000,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -1004,6 +1004,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 @@ -17,10 +17,10 @@ index 193c888d0ff2a8c2ef1a7fc8fd8af5d26e701092..aa171a1afb9800e6ec84f6b4f1b28e44 } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 342d5111bd3d4b434071f7499467a860a278ee08..89e80073eb911e72d0bac5b50119421a91cd3a16 100644 +index 6528d3c3e0d817e8e903ff99f8b71dc78d4f58c8..114d8082fe8d5a0cb8bbf48dbbf8d315e6a039d5 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -418,6 +418,7 @@ public class PurpurWorldConfig { +@@ -420,6 +420,7 @@ public class PurpurWorldConfig { public String playerDeathExpDropEquation = "expLevel * 7"; public int playerDeathExpDropMax = 100; public boolean teleportIfOutsideBorder = false; @@ -28,7 +28,7 @@ index 342d5111bd3d4b434071f7499467a860a278ee08..89e80073eb911e72d0bac5b50119421a public boolean totemOfUndyingWorksInInventory = false; public boolean playerFixStuckPortal = false; public boolean creativeOnePunch = false; -@@ -445,6 +446,7 @@ public class PurpurWorldConfig { +@@ -447,6 +448,7 @@ public class PurpurWorldConfig { playerDeathExpDropEquation = getString("gameplay-mechanics.player.exp-dropped-on-death.equation", playerDeathExpDropEquation); playerDeathExpDropMax = getInt("gameplay-mechanics.player.exp-dropped-on-death.maximum", playerDeathExpDropMax); teleportIfOutsideBorder = getBoolean("gameplay-mechanics.player.teleport-if-outside-border", teleportIfOutsideBorder); diff --git a/patches/server/0270-Log-skipped-entity-s-position.patch b/patches/server/0270-Log-skipped-entity-s-position.patch index a18c62cbf..c2cfa2ac9 100644 --- a/patches/server/0270-Log-skipped-entity-s-position.patch +++ b/patches/server/0270-Log-skipped-entity-s-position.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Log skipped entity's position diff --git a/src/main/java/net/minecraft/world/entity/EntityType.java b/src/main/java/net/minecraft/world/entity/EntityType.java -index 40ae00146381a9a1ec70ffae5c683b46c72c56ff..1d50b03246d114c6583815205eeacb7ac8549aec 100644 +index 2f08747612bd238f12c8d3dccb996118e7c34e33..a3ae5e663a0334eaa8ca6ce89c3088620a849bb9 100644 --- a/src/main/java/net/minecraft/world/entity/EntityType.java +++ b/src/main/java/net/minecraft/world/entity/EntityType.java -@@ -683,6 +683,12 @@ public class EntityType implements FeatureElement, EntityTypeT +@@ -693,6 +693,12 @@ public class EntityType implements FeatureElement, EntityTypeT entity.load(nbt); }, () -> { EntityType.LOGGER.warn("Skipping Entity with id {}", nbt.getString("id")); diff --git a/patches/server/0271-End-Crystal-Cramming.patch b/patches/server/0271-End-Crystal-Cramming.patch index 9b1469291..eaa01301d 100644 --- a/patches/server/0271-End-Crystal-Cramming.patch +++ b/patches/server/0271-End-Crystal-Cramming.patch @@ -17,10 +17,10 @@ index 305c3350116f656c3d0e6134e4d8023eac50f3ad..b1db1e92de3a88a0f0e0fdb42b0bf973 // Purpur start diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 89e80073eb911e72d0bac5b50119421a91cd3a16..991d13948d90039a4a344b51317b52f882b34e5f 100644 +index 114d8082fe8d5a0cb8bbf48dbbf8d315e6a039d5..6e634c6997c98a8242a6a8b3056c6bb2efed1c2f 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -915,6 +915,7 @@ public class PurpurWorldConfig { +@@ -917,6 +917,7 @@ public class PurpurWorldConfig { public double basedEndCrystalExplosionPower = 6.0D; public boolean basedEndCrystalExplosionFire = false; public net.minecraft.world.level.Level.ExplosionInteraction basedEndCrystalExplosionEffect = net.minecraft.world.level.Level.ExplosionInteraction.BLOCK; @@ -28,7 +28,7 @@ index 89e80073eb911e72d0bac5b50119421a91cd3a16..991d13948d90039a4a344b51317b52f8 private void endCrystalSettings() { if (PurpurConfig.version < 31) { if ("DESTROY".equals(getString("blocks.end-crystal.baseless.explosion-effect", baselessEndCrystalExplosionEffect.name()))) { -@@ -942,6 +943,7 @@ public class PurpurWorldConfig { +@@ -944,6 +945,7 @@ public class PurpurWorldConfig { log(Level.SEVERE, "Unknown value for `blocks.end-crystal.base.explosion-effect`! Using default of `BLOCK`"); basedEndCrystalExplosionEffect = net.minecraft.world.level.Level.ExplosionInteraction.BLOCK; } diff --git a/patches/server/0272-Option-to-allow-beacon-effects-when-covered-by-tinte.patch b/patches/server/0272-Option-to-allow-beacon-effects-when-covered-by-tinte.patch index 65e8b4064..56f783a26 100644 --- a/patches/server/0272-Option-to-allow-beacon-effects-when-covered-by-tinte.patch +++ b/patches/server/0272-Option-to-allow-beacon-effects-when-covered-by-tinte.patch @@ -36,10 +36,10 @@ index fbc6b0099af34b0247f6144a9cef020f9ccddeef..2d190b3a6378b8cbadfa65510df1ccfb BeaconBlockEntity.playSound(world, pos, SoundEvents.BEACON_AMBIENT); } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 991d13948d90039a4a344b51317b52f882b34e5f..5fb1b4ca45faaf9d172adb8f3a7879322ae29117 100644 +index 6e634c6997c98a8242a6a8b3056c6bb2efed1c2f..2cb1a54fd54504ef5ac2ac284df0e7a3052edb4a 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -814,11 +814,13 @@ public class PurpurWorldConfig { +@@ -816,11 +816,13 @@ public class PurpurWorldConfig { public int beaconLevelTwo = 30; public int beaconLevelThree = 40; public int beaconLevelFour = 50; diff --git a/patches/server/0274-Config-to-remove-explosion-radius-clamp.patch b/patches/server/0274-Config-to-remove-explosion-radius-clamp.patch index cb419f62f..e78060dac 100644 --- a/patches/server/0274-Config-to-remove-explosion-radius-clamp.patch +++ b/patches/server/0274-Config-to-remove-explosion-radius-clamp.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Config to remove explosion radius clamp diff --git a/src/main/java/net/minecraft/world/level/ServerExplosion.java b/src/main/java/net/minecraft/world/level/ServerExplosion.java -index bbbd451ff184be8fa13bd93d53c89a9502f9951a..913f7d5fd9823eea9fad2d4e6689511f8d0cfda6 100644 +index 685ccfb73bf7125585ef90b6a0f51b2f81daa428..15a3849922664b85fa6bc9101c2af380d57ea0f3 100644 --- a/src/main/java/net/minecraft/world/level/ServerExplosion.java +++ b/src/main/java/net/minecraft/world/level/ServerExplosion.java @@ -311,7 +311,7 @@ public class ServerExplosion implements Explosion { diff --git a/patches/server/0275-bonemealable-sugarcane-cactus-and-netherwart.patch b/patches/server/0275-bonemealable-sugarcane-cactus-and-netherwart.patch index fa46c7cbb..2083540a4 100644 --- a/patches/server/0275-bonemealable-sugarcane-cactus-and-netherwart.patch +++ b/patches/server/0275-bonemealable-sugarcane-cactus-and-netherwart.patch @@ -53,7 +53,7 @@ index bbfd8f5d404d0add94f0d8ac89a2964692b37e44..9f163ed07f8e6a5370c4c355b4e910f7 + // Purpur end } diff --git a/src/main/java/net/minecraft/world/level/block/NetherWartBlock.java b/src/main/java/net/minecraft/world/level/block/NetherWartBlock.java -index da1c7999ca64199387054de46489d3ff4a299289..b8355ea1de26c4b6905f477fb4e110f1762447b4 100644 +index b571bca4375ca7caf9b75dbf84009cb0604b66ad..264692baa4a20b66910d8ff379fa72acb99e27f8 100644 --- a/src/main/java/net/minecraft/world/level/block/NetherWartBlock.java +++ b/src/main/java/net/minecraft/world/level/block/NetherWartBlock.java @@ -16,7 +16,7 @@ import net.minecraft.world.level.block.state.properties.IntegerProperty; @@ -137,10 +137,10 @@ index 547ea09ed84595286c97c128b3b96f6d387ae25f..d0f8a13f27132257ece6dadf736c2dc6 + // Purpur end } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 12ccac3893097d428c3c7f9cfdfc67e78dd9d691..4ef5aaa033f6ba5a4260345df12426954b8d6fbe 100644 +index e5a855b5dfc0e23a00c9e44c2c0ee5f701fe696e..f6c59ba4c36382c522c009e78a5c96d702a49fe4 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -868,8 +868,20 @@ public class PurpurWorldConfig { +@@ -870,8 +870,20 @@ public class PurpurWorldConfig { } public boolean cactusBreaksFromSolidNeighbors = true; diff --git a/patches/server/0276-Add-PreExplodeEvents.patch b/patches/server/0276-Add-PreExplodeEvents.patch index e0195de0c..b73e69bc0 100644 --- a/patches/server/0276-Add-PreExplodeEvents.patch +++ b/patches/server/0276-Add-PreExplodeEvents.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Add PreExplodeEvents diff --git a/src/main/java/net/minecraft/world/level/ServerExplosion.java b/src/main/java/net/minecraft/world/level/ServerExplosion.java -index 913f7d5fd9823eea9fad2d4e6689511f8d0cfda6..3c3d219c9339f64c23ec0b31783bf68a4423636c 100644 +index 15a3849922664b85fa6bc9101c2af380d57ea0f3..e2763ee67530074d8ec78fbff694eb84f5373de0 100644 --- a/src/main/java/net/minecraft/world/level/ServerExplosion.java +++ b/src/main/java/net/minecraft/world/level/ServerExplosion.java @@ -670,6 +670,23 @@ public class ServerExplosion implements Explosion { diff --git a/patches/server/0279-Stored-Bee-API.patch b/patches/server/0279-Stored-Bee-API.patch index 02dbe502a..7da39c613 100644 --- a/patches/server/0279-Stored-Bee-API.patch +++ b/patches/server/0279-Stored-Bee-API.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Stored Bee API diff --git a/src/main/java/net/minecraft/world/level/block/entity/BeehiveBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/BeehiveBlockEntity.java -index b7ad467d7d7f50bcb90e50f00f905873e89c7956..def408384cbd571b7bee23f5cecf430a5d690c4b 100644 +index 7f0e37e23ff4c64355fdc822c0ac683959b8588a..6fa25cac9d88808a590281bf90f619fa2f167d4a 100644 --- a/src/main/java/net/minecraft/world/level/block/entity/BeehiveBlockEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/BeehiveBlockEntity.java @@ -147,11 +147,33 @@ public class BeehiveBlockEntity extends BlockEntity { @@ -42,7 +42,7 @@ index b7ad467d7d7f50bcb90e50f00f905873e89c7956..def408384cbd571b7bee23f5cecf430a // Paper start - Add EntityBlockStorage clearEntities public void clearBees() { this.stored.clear(); -@@ -472,9 +494,9 @@ public class BeehiveBlockEntity extends BlockEntity { +@@ -467,9 +489,9 @@ public class BeehiveBlockEntity extends BlockEntity { } } diff --git a/patches/server/0280-Shears-can-defuse-TNT.patch b/patches/server/0280-Shears-can-defuse-TNT.patch index f3c819cc2..86295e75b 100644 --- a/patches/server/0280-Shears-can-defuse-TNT.patch +++ b/patches/server/0280-Shears-can-defuse-TNT.patch @@ -8,7 +8,7 @@ Shears can now defuse TNT. Each world can have a configured chance for the TNT t By default the option is disabled to avoid breaking any possible vanilla mechanics. diff --git a/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java b/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java -index de87483600e55d88176fe25db621bbd3e464729f..287ba483614e79e78022e703ef891f59f41ac455 100644 +index 809f5e847e2f5bb594c130cebd2cb897ea768d82..6f1e21d6c104d71fe4fc3376ed2f2273a5f3d3cc 100644 --- a/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java +++ b/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java @@ -249,4 +249,31 @@ public class PrimedTnt extends Entity implements TraceableEntity { @@ -44,10 +44,10 @@ index de87483600e55d88176fe25db621bbd3e464729f..287ba483614e79e78022e703ef891f59 + // Purpur end - Shears can defuse TNT } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 4ef5aaa033f6ba5a4260345df12426954b8d6fbe..f8c49f69297fac41f65c3d37ba0e1020fa3f0736 100644 +index f6c59ba4c36382c522c009e78a5c96d702a49fe4..640a7380fe1d3091eed8ca6c95dc8ddb4faf8edc 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -3414,4 +3414,11 @@ public class PurpurWorldConfig { +@@ -3416,4 +3416,11 @@ public class PurpurWorldConfig { cauldronDripstoneWaterFillChance = (float) getDouble("blocks.cauldron.fill-chances.dripstone-water", cauldronDripstoneWaterFillChance); cauldronDripstoneLavaFillChance = (float) getDouble("blocks.cauldron.fill-chances.dripstone-lava", cauldronDripstoneLavaFillChance); } diff --git a/patches/server/0281-Explorer-Map-API.patch b/patches/server/0281-Explorer-Map-API.patch index 27089456b..411627d30 100644 --- a/patches/server/0281-Explorer-Map-API.patch +++ b/patches/server/0281-Explorer-Map-API.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Explorer Map API diff --git a/src/main/java/net/minecraft/world/item/MapItem.java b/src/main/java/net/minecraft/world/item/MapItem.java -index 571f2540a1e9422025efe651167e26b44b437daa..c2f3c8b3d8eeb609b6d6067c4fb404aefbf94ec5 100644 +index 8ff50a4c7461bbd9f469d503f6b5ee482d2463d7..5c0a46c11003b6e154195a8ef299416cc73eae33 100644 --- a/src/main/java/net/minecraft/world/item/MapItem.java +++ b/src/main/java/net/minecraft/world/item/MapItem.java @@ -194,6 +194,7 @@ public class MapItem extends Item { diff --git a/patches/server/0282-Option-Ocelot-Spawn-Under-Sea-Level.patch b/patches/server/0282-Option-Ocelot-Spawn-Under-Sea-Level.patch index 671fa61b4..73b11e793 100644 --- a/patches/server/0282-Option-Ocelot-Spawn-Under-Sea-Level.patch +++ b/patches/server/0282-Option-Ocelot-Spawn-Under-Sea-Level.patch @@ -18,10 +18,10 @@ index 14634de26c218a3d26afd3e7e6ca89c1a0595178..dee59cb4b87845c940ee089aa932aa69 } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index f8c49f69297fac41f65c3d37ba0e1020fa3f0736..29c934fa57da481730d80601bf86a90d5b8def09 100644 +index 640a7380fe1d3091eed8ca6c95dc8ddb4faf8edc..ad1c62c92a0fa2ff49f14108c69370cb73e7f4e6 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2150,6 +2150,7 @@ public class PurpurWorldConfig { +@@ -2152,6 +2152,7 @@ public class PurpurWorldConfig { public int ocelotBreedingTicks = 6000; public boolean ocelotTakeDamageFromWater = false; public boolean ocelotAlwaysDropExp = false; @@ -29,7 +29,7 @@ index f8c49f69297fac41f65c3d37ba0e1020fa3f0736..29c934fa57da481730d80601bf86a90d private void ocelotSettings() { ocelotRidable = getBoolean("mobs.ocelot.ridable", ocelotRidable); ocelotRidableInWater = getBoolean("mobs.ocelot.ridable-in-water", ocelotRidableInWater); -@@ -2164,6 +2165,7 @@ public class PurpurWorldConfig { +@@ -2166,6 +2167,7 @@ public class PurpurWorldConfig { ocelotBreedingTicks = getInt("mobs.ocelot.breeding-delay-ticks", ocelotBreedingTicks); ocelotTakeDamageFromWater = getBoolean("mobs.ocelot.takes-damage-from-water", ocelotTakeDamageFromWater); ocelotAlwaysDropExp = getBoolean("mobs.ocelot.always-drop-exp", ocelotAlwaysDropExp); diff --git a/patches/server/0283-add-an-option-for-piglins-to-ignore-gold-trimmed-arm.patch b/patches/server/0283-add-an-option-for-piglins-to-ignore-gold-trimmed-arm.patch index 5a27bad09..d4bfc001e 100644 --- a/patches/server/0283-add-an-option-for-piglins-to-ignore-gold-trimmed-arm.patch +++ b/patches/server/0283-add-an-option-for-piglins-to-ignore-gold-trimmed-arm.patch @@ -29,10 +29,10 @@ index e283b1296c1e831376bfe9491cbf02ed4b3fffe4..27a6de70530c2a1cbe2f77a7fb493038 piglin.getBrain().eraseMemory(MemoryModuleType.WALK_TARGET); piglin.getNavigation().stop(); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 29c934fa57da481730d80601bf86a90d5b8def09..a040f13bd39bd9e0b24ac9be4a95a093930977d1 100644 +index ad1c62c92a0fa2ff49f14108c69370cb73e7f4e6..35db58344e79bd3c83099626a425ea8d75a95ae5 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2327,6 +2327,7 @@ public class PurpurWorldConfig { +@@ -2329,6 +2329,7 @@ public class PurpurWorldConfig { public int piglinPortalSpawnModifier = 2000; public boolean piglinAlwaysDropExp = false; public double piglinHeadVisibilityPercent = 0.5D; @@ -40,7 +40,7 @@ index 29c934fa57da481730d80601bf86a90d5b8def09..a040f13bd39bd9e0b24ac9be4a95a093 private void piglinSettings() { piglinRidable = getBoolean("mobs.piglin.ridable", piglinRidable); piglinRidableInWater = getBoolean("mobs.piglin.ridable-in-water", piglinRidableInWater); -@@ -2343,6 +2344,7 @@ public class PurpurWorldConfig { +@@ -2345,6 +2346,7 @@ public class PurpurWorldConfig { piglinPortalSpawnModifier = getInt("mobs.piglin.portal-spawn-modifier", piglinPortalSpawnModifier); piglinAlwaysDropExp = getBoolean("mobs.piglin.always-drop-exp", piglinAlwaysDropExp); piglinHeadVisibilityPercent = getDouble("mobs.piglin.head-visibility-percent", piglinHeadVisibilityPercent); diff --git a/patches/server/0285-place-end-crystal-on-any-block.patch b/patches/server/0285-place-end-crystal-on-any-block.patch index 75ce23242..d09aae1fb 100644 --- a/patches/server/0285-place-end-crystal-on-any-block.patch +++ b/patches/server/0285-place-end-crystal-on-any-block.patch @@ -18,10 +18,10 @@ index 2bee342e59e600426c8681a3ce641a12f22790be..e75930f26604b772a141a93c6f4b7782 } else { BlockPos blockposition1 = blockposition.above(); final BlockPos aboveBlockPosition = blockposition1; // Paper - OBFHELPER diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index a040f13bd39bd9e0b24ac9be4a95a093930977d1..c9ad3129146f5f29f1a1d0afbbc911d92bb4e8fb 100644 +index 35db58344e79bd3c83099626a425ea8d75a95ae5..b966d7cbdc8f62e0d5df93e84e2829b6c4818e7c 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -935,6 +935,7 @@ public class PurpurWorldConfig { +@@ -937,6 +937,7 @@ public class PurpurWorldConfig { public boolean basedEndCrystalExplosionFire = false; public net.minecraft.world.level.Level.ExplosionInteraction basedEndCrystalExplosionEffect = net.minecraft.world.level.Level.ExplosionInteraction.BLOCK; public int endCrystalCramming = 0; @@ -29,7 +29,7 @@ index a040f13bd39bd9e0b24ac9be4a95a093930977d1..c9ad3129146f5f29f1a1d0afbbc911d9 private void endCrystalSettings() { if (PurpurConfig.version < 31) { if ("DESTROY".equals(getString("blocks.end-crystal.baseless.explosion-effect", baselessEndCrystalExplosionEffect.name()))) { -@@ -963,6 +964,7 @@ public class PurpurWorldConfig { +@@ -965,6 +966,7 @@ public class PurpurWorldConfig { basedEndCrystalExplosionEffect = net.minecraft.world.level.Level.ExplosionInteraction.BLOCK; } endCrystalCramming = getInt("blocks.end-crystal.cramming-amount", endCrystalCramming); diff --git a/patches/server/0287-register-minecraft-debug-commands.patch b/patches/server/0287-register-minecraft-debug-commands.patch index 21200a889..99c770e20 100644 --- a/patches/server/0287-register-minecraft-debug-commands.patch +++ b/patches/server/0287-register-minecraft-debug-commands.patch @@ -20,10 +20,10 @@ index db455a0fc7e1fc004215b718ff470bd2f74eae1b..8d82425ccbc30b3f4a59767ca72bf373 DebugPathCommand.register(this.dispatcher); DebugMobSpawningCommand.register(this.dispatcher); diff --git a/src/main/java/net/minecraft/server/Main.java b/src/main/java/net/minecraft/server/Main.java -index 463eb4844e467c5c7018087e4f21d7d41e1c9063..ecaec3c7b5768771b00c4c33d48a76ba22653a79 100644 +index 978c0d7296f400fe2ebda89e4f61386e6e87fe0c..a880f4e5cf712654649ad043e58e073e9a87c0fe 100644 --- a/src/main/java/net/minecraft/server/Main.java +++ b/src/main/java/net/minecraft/server/Main.java -@@ -123,6 +123,7 @@ public class Main { +@@ -125,6 +125,7 @@ public class Main { // Purpur start - load config files early org.bukkit.configuration.file.YamlConfiguration purpurConfiguration = io.papermc.paper.configuration.PaperConfigurations.loadLegacyConfigFile((File) optionset.valueOf("purpur-settings")); org.purpurmc.purpur.PurpurConfig.clampEnchantLevels = purpurConfiguration.getBoolean("settings.enchantment.clamp-levels", true); diff --git a/patches/server/0288-Configurable-villager-search-radius.patch b/patches/server/0288-Configurable-villager-search-radius.patch index 4fc65ed59..07e4e3b48 100644 --- a/patches/server/0288-Configurable-villager-search-radius.patch +++ b/patches/server/0288-Configurable-villager-search-radius.patch @@ -5,18 +5,18 @@ Subject: [PATCH] Configurable-villager-search-radius diff --git a/src/main/java/net/minecraft/world/entity/ai/behavior/AcquirePoi.java b/src/main/java/net/minecraft/world/entity/ai/behavior/AcquirePoi.java -index e1b6fe9ecda25f86431baf414f1bfd3a26a8b2bd..3d7578605812021bc84b99d4db1672a682d897ad 100644 +index 0d177e828c2b338ce93c58aaef04df326e1eb0b2..273ba657926ce72a7c82861e880a82bf7f322a0b 100644 --- a/src/main/java/net/minecraft/world/entity/ai/behavior/AcquirePoi.java +++ b/src/main/java/net/minecraft/world/entity/ai/behavior/AcquirePoi.java -@@ -73,7 +73,7 @@ public class AcquirePoi { +@@ -86,7 +86,7 @@ public class AcquirePoi { }; // Paper start - optimise POI access - java.util.List, BlockPos>> poiposes = new java.util.ArrayList<>(); + final java.util.List, BlockPos>> poiposes = new java.util.ArrayList<>(); - io.papermc.paper.util.PoiAccess.findNearestPoiPositions(poiManager, poiPredicate, predicate2, entity.blockPosition(), 48, 48*48, PoiManager.Occupancy.HAS_SPACE, false, 5, poiposes); + io.papermc.paper.util.PoiAccess.findNearestPoiPositions(poiManager, poiPredicate, predicate2, entity.blockPosition(), world.purpurConfig.villagerAcquirePoiSearchRadius, world.purpurConfig.villagerAcquirePoiSearchRadius*world.purpurConfig.villagerAcquirePoiSearchRadius, PoiManager.Occupancy.HAS_SPACE, false, 5, poiposes); - Set, BlockPos>> set = new java.util.HashSet<>(poiposes); - // Paper end - optimise POI access - Path path = findPathToPois(entity, set); + final Set, BlockPos>> set = new java.util.HashSet<>(poiposes.size()); + for (final Pair, BlockPos> poiPose : poiposes) { + if (worldPosBiPredicate.test(world, poiPose.getSecond())) { diff --git a/src/main/java/net/minecraft/world/entity/ai/sensing/NearestBedSensor.java b/src/main/java/net/minecraft/world/entity/ai/sensing/NearestBedSensor.java index 92731b6b593289e9f583c9b705b219e81fcd8e73..9104d7010bda6f9f73b478c11490ef9c53f76da2 100644 --- a/src/main/java/net/minecraft/world/entity/ai/sensing/NearestBedSensor.java @@ -31,10 +31,10 @@ index 92731b6b593289e9f583c9b705b219e81fcd8e73..9104d7010bda6f9f73b478c11490ef9c // Paper end - optimise POI access if (path != null && path.canReach()) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 9b3e2d1ab8ad0b388a0bd3947feea43e602b8781..d396a9fee2326620a0222ff91dba63f187907525 100644 +index a1798851f0aad048a6242c9c57c4fd63687c9f48..07caef996ac0ff36afe14c098ccccffb6dc3e16a 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -3004,6 +3004,8 @@ public class PurpurWorldConfig { +@@ -3006,6 +3006,8 @@ public class PurpurWorldConfig { public boolean villagerDisplayTradeItem = true; public int villagerSpawnIronGolemRadius = 0; public int villagerSpawnIronGolemLimit = 0; @@ -43,7 +43,7 @@ index 9b3e2d1ab8ad0b388a0bd3947feea43e602b8781..d396a9fee2326620a0222ff91dba63f1 private void villagerSettings() { villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); -@@ -3042,6 +3044,8 @@ public class PurpurWorldConfig { +@@ -3044,6 +3046,8 @@ public class PurpurWorldConfig { villagerDisplayTradeItem = getBoolean("mobs.villager.display-trade-item", villagerDisplayTradeItem); villagerSpawnIronGolemRadius = getInt("mobs.villager.spawn-iron-golem.radius", villagerSpawnIronGolemRadius); villagerSpawnIronGolemLimit = getInt("mobs.villager.spawn-iron-golem.limit", villagerSpawnIronGolemLimit); diff --git a/patches/server/0289-option-to-make-ravagers-afraid-of-rabbits.patch b/patches/server/0289-option-to-make-ravagers-afraid-of-rabbits.patch index ae28a292c..0004bf74a 100644 --- a/patches/server/0289-option-to-make-ravagers-afraid-of-rabbits.patch +++ b/patches/server/0289-option-to-make-ravagers-afraid-of-rabbits.patch @@ -6,22 +6,22 @@ Subject: [PATCH] option to make ravagers afraid of rabbits https://github.com/PurpurMC/Purpur/discussions/713 diff --git a/src/main/java/net/minecraft/world/entity/monster/Ravager.java b/src/main/java/net/minecraft/world/entity/monster/Ravager.java -index 1c8cb19a8b25593d16518006247bdf0e71e16ab1..98c1934b4895a86cd8748edf906aaa721a87a123 100644 +index 5688f6ff0c1d9d1fbca548dcff8d8dfa5b42b8fd..17aaa3f376ce6183911739536206f9f701e452b5 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Ravager.java +++ b/src/main/java/net/minecraft/world/entity/monster/Ravager.java -@@ -122,6 +122,7 @@ public class Ravager extends Raider { +@@ -119,6 +119,7 @@ public class Ravager extends Raider { + super.registerGoals(); this.goalSelector.addGoal(0, new FloatGoal(this)); this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur - this.goalSelector.addGoal(3, new AvoidEntityGoal<>(this, Creaking.class, 8.0F, 1.0D, 1.2D)); + if (level().purpurConfig.ravagerAvoidRabbits) this.goalSelector.addGoal(3, new net.minecraft.world.entity.ai.goal.AvoidEntityGoal<>(this, net.minecraft.world.entity.animal.Rabbit.class, 6.0F, 1.0D, 1.2D)); // Purpur this.goalSelector.addGoal(4, new MeleeAttackGoal(this, 1.0D, true)); this.goalSelector.addGoal(5, new WaterAvoidingRandomStrollGoal(this, 0.4D)); this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 6.0F)); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index d396a9fee2326620a0222ff91dba63f187907525..57ddb4e6a464567cc67e09ce06218cc25af4ddf9 100644 +index 07caef996ac0ff36afe14c098ccccffb6dc3e16a..9f01bef0abbc059629fbc38304d5d5df79589b70 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2485,6 +2485,7 @@ public class PurpurWorldConfig { +@@ -2487,6 +2487,7 @@ public class PurpurWorldConfig { public boolean ravagerTakeDamageFromWater = false; public List ravagerGriefableBlocks = new ArrayList<>(); public boolean ravagerAlwaysDropExp = false; @@ -29,7 +29,7 @@ index d396a9fee2326620a0222ff91dba63f187907525..57ddb4e6a464567cc67e09ce06218cc2 private void ravagerSettings() { ravagerRidable = getBoolean("mobs.ravager.ridable", ravagerRidable); ravagerRidableInWater = getBoolean("mobs.ravager.ridable-in-water", ravagerRidableInWater); -@@ -2516,6 +2517,7 @@ public class PurpurWorldConfig { +@@ -2518,6 +2519,7 @@ public class PurpurWorldConfig { } }); ravagerAlwaysDropExp = getBoolean("mobs.ravager.always-drop-exp", ravagerAlwaysDropExp); diff --git a/patches/server/0290-config-for-startup-commands.patch b/patches/server/0290-config-for-startup-commands.patch index 74f1ec8bd..ba7680bc4 100644 --- a/patches/server/0290-config-for-startup-commands.patch +++ b/patches/server/0290-config-for-startup-commands.patch @@ -5,10 +5,10 @@ Subject: [PATCH] config for startup commands diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 284b96cd1e9eaad4600c820a504c12d953961019..23505b0f80d643d9ef569b49192f44e0373dfb5f 100644 +index 74d4bb12d70cbfd8365337c8fbcdbdfe6d70e970..0819adb34541e5a774f07616957c785b3d6cd8ea 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1293,6 +1293,17 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop