diff --git a/README.md b/README.md
index af9ed877c..1a0961c19 100644
--- a/README.md
+++ b/README.md
@@ -7,7 +7,7 @@
## Purpur
[](LICENSE)
-[](https://purpurmc.org/downloads/)
+[](https://purpurmc.org/downloads/)
[](https://www.codefactor.io/repository/github/PurpurMC/Purpur)
[](https://purpurmc.org/discord)
@@ -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).
-[](https://purpurmc.org/downloads/)
+[](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.20.2-R0.1-SNAPSHOT
+ 1.20.4-R0.1-SNAPSHOT
provided
```
@@ -80,7 +80,7 @@ repositories {
```
```kotlin
dependencies {
- compileOnly("org.purpurmc.purpur:purpur-api:1.20.2-R0.1-SNAPSHOT")
+ compileOnly("org.purpurmc.purpur:purpur-api:1.20.4-R0.1-SNAPSHOT")
}
```
diff --git a/build.gradle.kts b/build.gradle.kts
index 62e42d678..beb63f29a 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -14,7 +14,7 @@ allprojects {
java {
toolchain {
- languageVersion.set(JavaLanguageVersion.of(17))
+ languageVersion = JavaLanguageVersion.of(17)
}
}
}
@@ -24,7 +24,7 @@ val paperMavenPublicUrl = "https://repo.papermc.io/repository/maven-public/"
subprojects {
tasks.withType().configureEach {
options.encoding = Charsets.UTF_8.name()
- options.release.set(17)
+ options.release = 17
}
tasks.withType {
options.encoding = Charsets.UTF_8.name()
@@ -63,25 +63,25 @@ dependencies {
}
paperweight {
- serverProject.set(project(":purpur-server"))
+ serverProject = project(":purpur-server")
- remapRepo.set(paperMavenPublicUrl)
- decompileRepo.set(paperMavenPublicUrl)
+ remapRepo = paperMavenPublicUrl
+ decompileRepo = paperMavenPublicUrl
usePaperUpstream(providers.gradleProperty("paperCommit")) {
withPaperPatcher {
- apiPatchDir.set(layout.projectDirectory.dir("patches/api"))
- apiOutputDir.set(layout.projectDirectory.dir("Purpur-API"))
+ apiPatchDir = layout.projectDirectory.dir("patches/api")
+ apiOutputDir = layout.projectDirectory.dir("Purpur-API")
- serverPatchDir.set(layout.projectDirectory.dir("patches/server"))
- serverOutputDir.set(layout.projectDirectory.dir("Purpur-Server"))
+ serverPatchDir = layout.projectDirectory.dir("patches/server")
+ serverOutputDir = layout.projectDirectory.dir("Purpur-Server")
}
}
}
tasks.generateDevelopmentBundle {
- apiCoordinates.set("org.purpurmc.purpur:purpur-api")
- mojangApiCoordinates.set("io.papermc.paper:paper-mojangapi")
+ apiCoordinates = "org.purpurmc.purpur:purpur-api"
+ mojangApiCoordinates = "io.papermc.paper:paper-mojangapi"
libraryRepositories.set(
listOf(
"https://repo.maven.apache.org/maven2/",
diff --git a/gradle.properties b/gradle.properties
index f42a24799..10f4f2b8b 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -1,8 +1,8 @@
group = org.purpurmc.purpur
-version = 1.20.2-R0.1-SNAPSHOT
+version = 1.20.4-R0.1-SNAPSHOT
-mcVersion = 1.20.2
-paperCommit = 931781c220b98dde0159c9a3c8dce06c3b2b1e13
+mcVersion = 1.20.4
+paperCommit = 930a24f965d02250fa58436c019a4d5eb7e5f607
org.gradle.caching = true
org.gradle.parallel = true
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 3fa8f862f..1af9e0930 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.4-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
diff --git a/patches/api/0003-Purpur-config-files.patch b/patches/api/0001-Purpur-config-files.patch
similarity index 91%
rename from patches/api/0003-Purpur-config-files.patch
rename to patches/api/0001-Purpur-config-files.patch
index e50903e1e..50cfd6bc9 100644
--- a/patches/api/0003-Purpur-config-files.patch
+++ b/patches/api/0001-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 d0c634629aa0b6bac0da93655dd86ad3aea0ce30..b599ed409f483379fae75938d27187b63b34225b 100644
+index f1fa97d12f97baf97beb92ca0719cf3cf906b225..f57711635146fd8e36f4bd2284522723a10be531 100644
--- a/src/main/java/org/bukkit/Server.java
+++ b/src/main/java/org/bukkit/Server.java
@@ -2190,6 +2190,18 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
diff --git a/patches/api/0004-Build-System-Changes.patch b/patches/api/0002-Build-System-Changes.patch
similarity index 85%
rename from patches/api/0004-Build-System-Changes.patch
rename to patches/api/0002-Build-System-Changes.patch
index 3dcba3489..0b1f27bb1 100644
--- a/patches/api/0004-Build-System-Changes.patch
+++ b/patches/api/0002-Build-System-Changes.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Build System Changes
diff --git a/build.gradle.kts b/build.gradle.kts
-index b9c75a190dbd7a90ac5ef0fbc6e6fe34806acc4e..41d7b75e904b94073dfcd12b776a7759a963b66f 100644
+index e827ee211e3c65dc68ac5867fd8476639df63645..70907ac4e8d74080c525631aac57d0633d1c6089 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
-@@ -126,6 +126,8 @@ tasks.jar {
+@@ -118,6 +118,8 @@ tasks.jar {
}
tasks.withType {
diff --git a/patches/api/0005-Purpur-client-support.patch b/patches/api/0003-Purpur-client-support.patch
similarity index 82%
rename from patches/api/0005-Purpur-client-support.patch
rename to patches/api/0003-Purpur-client-support.patch
index bec915f24..cfbee023b 100644
--- a/patches/api/0005-Purpur-client-support.patch
+++ b/patches/api/0003-Purpur-client-support.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Purpur client support
diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
-index 47fcfa2a3358766dfda2efc9bbcf5b50e3f2f7c1..ede6f747953350f1d7eae36319d82f01095e17b3 100644
+index 962283d336e6d53941cebbc3a995d403ff989f66..f866628e5d9e8edccab657f86f60f911c2e3fb06 100644
--- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java
-@@ -3366,4 +3366,13 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+@@ -3414,4 +3414,13 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
@Override
Spigot spigot();
// Spigot end
diff --git a/patches/api/0006-Default-permissions.patch b/patches/api/0004-Default-permissions.patch
similarity index 100%
rename from patches/api/0006-Default-permissions.patch
rename to patches/api/0004-Default-permissions.patch
diff --git a/patches/api/0007-Ridables.patch b/patches/api/0005-Ridables.patch
similarity index 97%
rename from patches/api/0007-Ridables.patch
rename to patches/api/0005-Ridables.patch
index cc01603de..180b3302d 100644
--- a/patches/api/0007-Ridables.patch
+++ b/patches/api/0005-Ridables.patch
@@ -22,10 +22,10 @@ index 0c4dbb9ef63fa8575b5546239443cb2bd91ba847..4160e968e7d7e8e2a953534a981a7330
* @deprecated removed in 1.20.2
*/
diff --git a/src/main/java/org/bukkit/entity/Entity.java b/src/main/java/org/bukkit/entity/Entity.java
-index 9e3cb75536ae260dc898ab9dafbc1d98398782bc..d72ba9d6aa6f7e55d4fdf273c3b6f1c863e86fbd 100644
+index 1d0fd7ff8449f815a7d980af0b378181ea8bf8d8..566c74756c66db859a4f738a7716a61d012c6df1 100644
--- a/src/main/java/org/bukkit/entity/Entity.java
+++ b/src/main/java/org/bukkit/entity/Entity.java
-@@ -1063,4 +1063,35 @@ public interface Entity extends Metadatable, CommandSender, Nameable, Persistent
+@@ -1107,4 +1107,35 @@ public interface Entity extends Metadatable, CommandSender, Nameable, Persistent
*/
@NotNull String getScoreboardEntryName();
// Paper end - entity scoreboard name
diff --git a/patches/api/0008-Allow-inventory-resizing.patch b/patches/api/0006-Allow-inventory-resizing.patch
similarity index 83%
rename from patches/api/0008-Allow-inventory-resizing.patch
rename to patches/api/0006-Allow-inventory-resizing.patch
index a93bb8a10..d61613396 100644
--- a/patches/api/0008-Allow-inventory-resizing.patch
+++ b/patches/api/0006-Allow-inventory-resizing.patch
@@ -5,10 +5,10 @@ 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 cbce826add9dc2b3187c7bea00c27b785d7517df..3a98de6407d9a6307f89c207be1f09e639385ebe 100644
+index 64e59fe706b0bb37fc2439fa88fd40c3167c9fb5..333ba8a730d01b6baa980f34aa03f3db90c8f255 100644
--- a/src/main/java/org/bukkit/event/inventory/InventoryType.java
+++ b/src/main/java/org/bukkit/event/inventory/InventoryType.java
-@@ -151,7 +151,7 @@ public enum InventoryType {
+@@ -159,7 +159,7 @@ public enum InventoryType {
SMITHING_NEW(4, "Upgrade Gear"),
;
diff --git a/patches/api/0009-Llama-API.patch b/patches/api/0007-Llama-API.patch
similarity index 100%
rename from patches/api/0009-Llama-API.patch
rename to patches/api/0007-Llama-API.patch
diff --git a/patches/api/0010-AFK-API.patch b/patches/api/0008-AFK-API.patch
similarity index 95%
rename from patches/api/0010-AFK-API.patch
rename to patches/api/0008-AFK-API.patch
index 9bff8f609..c661ab8ac 100644
--- a/patches/api/0010-AFK-API.patch
+++ b/patches/api/0008-AFK-API.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] AFK API
diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
-index ede6f747953350f1d7eae36319d82f01095e17b3..187bd4933d7a2bf0469ffc73e71841648cc8a5bc 100644
+index f866628e5d9e8edccab657f86f60f911c2e3fb06..e3a6289547ff378fecf97b20ab08c8b36fe9cfa6 100644
--- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java
-@@ -3374,5 +3374,25 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+@@ -3422,5 +3422,25 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
* @return True if Player uses Purpur Client
*/
public boolean usesPurpurClient();
diff --git a/patches/api/0011-Bring-back-server-name.patch b/patches/api/0009-Bring-back-server-name.patch
similarity index 87%
rename from patches/api/0011-Bring-back-server-name.patch
rename to patches/api/0009-Bring-back-server-name.patch
index f1c2fb81f..d06ac9735 100644
--- a/patches/api/0011-Bring-back-server-name.patch
+++ b/patches/api/0009-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 884902cb7f86c0b56594ccafc7d05c6c7a23ab53..7e125817c68d5549be1eaa35c563e44e4c2c5239 100644
+index 4863d9f21f0a0f11974be85360edc587ffd7eab3..0e528e26a94338b2cee9556c87b7ff071fce58f9 100644
--- a/src/main/java/org/bukkit/Bukkit.java
+++ b/src/main/java/org/bukkit/Bukkit.java
@@ -2832,4 +2832,15 @@ public final class Bukkit {
@@ -25,7 +25,7 @@ index 884902cb7f86c0b56594ccafc7d05c6c7a23ab53..7e125817c68d5549be1eaa35c563e44e
+ // Purpur end
}
diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java
-index b599ed409f483379fae75938d27187b63b34225b..a7afd08014f0c571e01d26e809f2c1a6f6f5ce2d 100644
+index f57711635146fd8e36f4bd2284522723a10be531..2b3ec780e02b90f463ec251b46566dffc3b2cda2 100644
--- a/src/main/java/org/bukkit/Server.java
+++ b/src/main/java/org/bukkit/Server.java
@@ -2485,4 +2485,13 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
diff --git a/patches/api/0012-ExecuteCommandEvent.patch b/patches/api/0010-ExecuteCommandEvent.patch
similarity index 100%
rename from patches/api/0012-ExecuteCommandEvent.patch
rename to patches/api/0010-ExecuteCommandEvent.patch
diff --git a/patches/api/0013-LivingEntity-safeFallDistance.patch b/patches/api/0011-LivingEntity-safeFallDistance.patch
similarity index 100%
rename from patches/api/0013-LivingEntity-safeFallDistance.patch
rename to patches/api/0011-LivingEntity-safeFallDistance.patch
diff --git a/patches/api/0014-Lagging-threshold.patch b/patches/api/0012-Lagging-threshold.patch
similarity index 86%
rename from patches/api/0014-Lagging-threshold.patch
rename to patches/api/0012-Lagging-threshold.patch
index a37ea53da..e31dc8e3e 100644
--- a/patches/api/0014-Lagging-threshold.patch
+++ b/patches/api/0012-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 7e125817c68d5549be1eaa35c563e44e4c2c5239..b948c38f32f94afa1708820dbbda9c7f4f9c685c 100644
+index 0e528e26a94338b2cee9556c87b7ff071fce58f9..e008983503a4ae45e9dd7f7858291dc4d3746520 100644
--- a/src/main/java/org/bukkit/Bukkit.java
+++ b/src/main/java/org/bukkit/Bukkit.java
@@ -2842,5 +2842,14 @@ public final class Bukkit {
@@ -24,7 +24,7 @@ index 7e125817c68d5549be1eaa35c563e44e4c2c5239..b948c38f32f94afa1708820dbbda9c7f
// Purpur end
}
diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java
-index a7afd08014f0c571e01d26e809f2c1a6f6f5ce2d..f87583244ba9ea07ffd2a438ea32f0328782dbf3 100644
+index 2b3ec780e02b90f463ec251b46566dffc3b2cda2..410aa885770c3f8be73277e90c4de6409b926f77 100644
--- a/src/main/java/org/bukkit/Server.java
+++ b/src/main/java/org/bukkit/Server.java
@@ -2493,5 +2493,12 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
diff --git a/patches/api/0015-PlayerSetSpawnerTypeWithEggEvent.patch b/patches/api/0013-PlayerSetSpawnerTypeWithEggEvent.patch
similarity index 100%
rename from patches/api/0015-PlayerSetSpawnerTypeWithEggEvent.patch
rename to patches/api/0013-PlayerSetSpawnerTypeWithEggEvent.patch
diff --git a/patches/api/0016-Anvil-API.patch b/patches/api/0014-Anvil-API.patch
similarity index 100%
rename from patches/api/0016-Anvil-API.patch
rename to patches/api/0014-Anvil-API.patch
diff --git a/patches/api/0017-ItemStack-convenience-methods.patch b/patches/api/0015-ItemStack-convenience-methods.patch
similarity index 98%
rename from patches/api/0017-ItemStack-convenience-methods.patch
rename to patches/api/0015-ItemStack-convenience-methods.patch
index ae3c65b3c..f510e8647 100644
--- a/patches/api/0017-ItemStack-convenience-methods.patch
+++ b/patches/api/0015-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 8c4ba0028f5c350a2906add58d9bf3d127a16f58..8ef4fa47e6721f5154316e81c2173cc4a42f4901 100644
+index 9f86ad25a57b3f6e6bda1ce657833837cb3b2292..7a8a2387d8ae5aae44325da9277e8284b4caa8c0 100644
--- a/src/main/java/org/bukkit/Material.java
+++ b/src/main/java/org/bukkit/Material.java
-@@ -11054,4 +11054,40 @@ public enum Material implements Keyed, Translatable, net.kyori.adventure.transla
+@@ -11500,4 +11500,40 @@ public enum Material implements Keyed, Translatable, net.kyori.adventure.transla
public boolean isEnabledByFeature(@NotNull World world) {
return Bukkit.getDataPackManager().isEnabledByFeature(this, world);
}
@@ -50,7 +50,7 @@ index 8c4ba0028f5c350a2906add58d9bf3d127a16f58..8ef4fa47e6721f5154316e81c2173cc4
+ // Purpur end
}
diff --git a/src/main/java/org/bukkit/inventory/ItemStack.java b/src/main/java/org/bukkit/inventory/ItemStack.java
-index 0af73cc04edb93b9772136d4d808f657ea40e733..c733206b769d7a55076d863757fcac1a129033b7 100644
+index 36e3fbc727cd748aa138f52976154ba32954cd87..eb78ddfa5a83a45cb6103415aa679e73b3d6a13f 100644
--- a/src/main/java/org/bukkit/inventory/ItemStack.java
+++ b/src/main/java/org/bukkit/inventory/ItemStack.java
@@ -17,6 +17,18 @@ import org.bukkit.inventory.meta.ItemMeta;
diff --git a/patches/api/0018-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch b/patches/api/0016-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch
similarity index 100%
rename from patches/api/0018-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch
rename to patches/api/0016-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch
diff --git a/patches/api/0019-ChatColor-conveniences.patch b/patches/api/0017-ChatColor-conveniences.patch
similarity index 100%
rename from patches/api/0019-ChatColor-conveniences.patch
rename to patches/api/0017-ChatColor-conveniences.patch
diff --git a/patches/api/0020-LivingEntity-broadcastItemBreak.patch b/patches/api/0018-LivingEntity-broadcastItemBreak.patch
similarity index 100%
rename from patches/api/0020-LivingEntity-broadcastItemBreak.patch
rename to patches/api/0018-LivingEntity-broadcastItemBreak.patch
diff --git a/patches/api/0021-Item-entity-immunities.patch b/patches/api/0019-Item-entity-immunities.patch
similarity index 100%
rename from patches/api/0021-Item-entity-immunities.patch
rename to patches/api/0019-Item-entity-immunities.patch
diff --git a/patches/api/0022-Add-option-to-disable-zombie-aggressiveness-towards-.patch b/patches/api/0020-Add-option-to-disable-zombie-aggressiveness-towards-.patch
similarity index 100%
rename from patches/api/0022-Add-option-to-disable-zombie-aggressiveness-towards-.patch
rename to patches/api/0020-Add-option-to-disable-zombie-aggressiveness-towards-.patch
diff --git a/patches/api/0023-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch b/patches/api/0021-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch
similarity index 100%
rename from patches/api/0023-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch
rename to patches/api/0021-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch
diff --git a/patches/api/0024-Rabid-Wolf-API.patch b/patches/api/0022-Rabid-Wolf-API.patch
similarity index 100%
rename from patches/api/0024-Rabid-Wolf-API.patch
rename to patches/api/0022-Rabid-Wolf-API.patch
diff --git a/patches/api/0025-PlayerBookTooLargeEvent.patch b/patches/api/0023-PlayerBookTooLargeEvent.patch
similarity index 100%
rename from patches/api/0025-PlayerBookTooLargeEvent.patch
rename to patches/api/0023-PlayerBookTooLargeEvent.patch
diff --git a/patches/api/0026-Full-netherite-armor-grants-fire-resistance.patch b/patches/api/0024-Full-netherite-armor-grants-fire-resistance.patch
similarity index 100%
rename from patches/api/0026-Full-netherite-armor-grants-fire-resistance.patch
rename to patches/api/0024-Full-netherite-armor-grants-fire-resistance.patch
diff --git a/patches/api/0027-Add-EntityTeleportHinderedEvent.patch b/patches/api/0025-Add-EntityTeleportHinderedEvent.patch
similarity index 100%
rename from patches/api/0027-Add-EntityTeleportHinderedEvent.patch
rename to patches/api/0025-Add-EntityTeleportHinderedEvent.patch
diff --git a/patches/api/0028-Add-enchantment-target-for-bows-and-crossbows.patch b/patches/api/0026-Add-enchantment-target-for-bows-and-crossbows.patch
similarity index 100%
rename from patches/api/0028-Add-enchantment-target-for-bows-and-crossbows.patch
rename to patches/api/0026-Add-enchantment-target-for-bows-and-crossbows.patch
diff --git a/patches/api/0029-Iron-golem-poppy-calms-anger.patch b/patches/api/0027-Iron-golem-poppy-calms-anger.patch
similarity index 100%
rename from patches/api/0029-Iron-golem-poppy-calms-anger.patch
rename to patches/api/0027-Iron-golem-poppy-calms-anger.patch
diff --git a/patches/api/0030-API-for-any-mob-to-burn-daylight.patch b/patches/api/0028-API-for-any-mob-to-burn-daylight.patch
similarity index 91%
rename from patches/api/0030-API-for-any-mob-to-burn-daylight.patch
rename to patches/api/0028-API-for-any-mob-to-burn-daylight.patch
index 6abf8aacb..a6ccec6fb 100644
--- a/patches/api/0030-API-for-any-mob-to-burn-daylight.patch
+++ b/patches/api/0028-API-for-any-mob-to-burn-daylight.patch
@@ -6,10 +6,10 @@ Subject: [PATCH] API for any mob to burn daylight
Co-authored by: Encode42
diff --git a/src/main/java/org/bukkit/entity/Entity.java b/src/main/java/org/bukkit/entity/Entity.java
-index d72ba9d6aa6f7e55d4fdf273c3b6f1c863e86fbd..752690574e1d3f47a3cf80fe5da2ba4107386ffd 100644
+index 566c74756c66db859a4f738a7716a61d012c6df1..c20f29e1ddfd1d73df19f6d6f730fa23dc23dc7a 100644
--- a/src/main/java/org/bukkit/entity/Entity.java
+++ b/src/main/java/org/bukkit/entity/Entity.java
-@@ -1093,5 +1093,12 @@ public interface Entity extends Metadatable, CommandSender, Nameable, Persistent
+@@ -1137,5 +1137,12 @@ public interface Entity extends Metadatable, CommandSender, Nameable, Persistent
* @return True if ridable in water
*/
boolean isRidableInWater();
diff --git a/patches/api/0031-Add-back-player-spawned-endermite-API.patch b/patches/api/0029-Add-back-player-spawned-endermite-API.patch
similarity index 100%
rename from patches/api/0031-Add-back-player-spawned-endermite-API.patch
rename to patches/api/0029-Add-back-player-spawned-endermite-API.patch
diff --git a/patches/api/0032-Fix-default-permission-system.patch b/patches/api/0030-Fix-default-permission-system.patch
similarity index 100%
rename from patches/api/0032-Fix-default-permission-system.patch
rename to patches/api/0030-Fix-default-permission-system.patch
diff --git a/patches/api/0033-Summoner-API.patch b/patches/api/0031-Summoner-API.patch
similarity index 100%
rename from patches/api/0033-Summoner-API.patch
rename to patches/api/0031-Summoner-API.patch
diff --git a/patches/api/0034-Clean-up-version-command-output.patch b/patches/api/0032-Clean-up-version-command-output.patch
similarity index 100%
rename from patches/api/0034-Clean-up-version-command-output.patch
rename to patches/api/0032-Clean-up-version-command-output.patch
diff --git a/patches/api/0035-Extended-OfflinePlayer-API.patch b/patches/api/0033-Extended-OfflinePlayer-API.patch
similarity index 100%
rename from patches/api/0035-Extended-OfflinePlayer-API.patch
rename to patches/api/0033-Extended-OfflinePlayer-API.patch
diff --git a/patches/api/0036-Added-the-ability-to-add-combustible-items.patch b/patches/api/0034-Added-the-ability-to-add-combustible-items.patch
similarity index 91%
rename from patches/api/0036-Added-the-ability-to-add-combustible-items.patch
rename to patches/api/0034-Added-the-ability-to-add-combustible-items.patch
index 080f2a0cd..9fc989cc6 100644
--- a/patches/api/0036-Added-the-ability-to-add-combustible-items.patch
+++ b/patches/api/0034-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 b948c38f32f94afa1708820dbbda9c7f4f9c685c..4127ae56afb05196ff46a5313e9d141adc27802b 100644
+index e008983503a4ae45e9dd7f7858291dc4d3746520..4d375b95459698284f1c27eefe8adc29fc0e7871 100644
--- a/src/main/java/org/bukkit/Bukkit.java
+++ b/src/main/java/org/bukkit/Bukkit.java
@@ -2851,5 +2851,24 @@ public final class Bukkit {
@@ -34,7 +34,7 @@ index b948c38f32f94afa1708820dbbda9c7f4f9c685c..4127ae56afb05196ff46a5313e9d141a
// Purpur end
}
diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java
-index f87583244ba9ea07ffd2a438ea32f0328782dbf3..6795f2c0c1e974c4fe3181cd6838a68f7437c846 100644
+index 410aa885770c3f8be73277e90c4de6409b926f77..9217a021cd6e54fda334f637a0bfbbdbc7ad14b0 100644
--- a/src/main/java/org/bukkit/Server.java
+++ b/src/main/java/org/bukkit/Server.java
@@ -2500,5 +2500,20 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
diff --git a/patches/api/0037-Potion-NamespacedKey.patch b/patches/api/0035-Potion-NamespacedKey.patch
similarity index 100%
rename from patches/api/0037-Potion-NamespacedKey.patch
rename to patches/api/0035-Potion-NamespacedKey.patch
diff --git a/patches/api/0038-Grindstone-API.patch b/patches/api/0036-Grindstone-API.patch
similarity index 100%
rename from patches/api/0038-Grindstone-API.patch
rename to patches/api/0036-Grindstone-API.patch
diff --git a/patches/api/0039-Shears-can-have-looting-enchantment.patch b/patches/api/0037-Shears-can-have-looting-enchantment.patch
similarity index 100%
rename from patches/api/0039-Shears-can-have-looting-enchantment.patch
rename to patches/api/0037-Shears-can-have-looting-enchantment.patch
diff --git a/patches/api/0040-Lobotomize-stuck-villagers.patch b/patches/api/0038-Lobotomize-stuck-villagers.patch
similarity index 100%
rename from patches/api/0040-Lobotomize-stuck-villagers.patch
rename to patches/api/0038-Lobotomize-stuck-villagers.patch
diff --git a/patches/api/0041-Add-local-difficulty-api.patch b/patches/api/0039-Add-local-difficulty-api.patch
similarity index 100%
rename from patches/api/0041-Add-local-difficulty-api.patch
rename to patches/api/0039-Add-local-difficulty-api.patch
diff --git a/patches/api/0042-Remove-Timings.patch b/patches/api/0040-Remove-Timings.patch
similarity index 100%
rename from patches/api/0042-Remove-Timings.patch
rename to patches/api/0040-Remove-Timings.patch
diff --git a/patches/api/0043-Add-Bee-API.patch b/patches/api/0041-Add-Bee-API.patch
similarity index 100%
rename from patches/api/0043-Add-Bee-API.patch
rename to patches/api/0041-Add-Bee-API.patch
diff --git a/patches/api/0044-Debug-Marker-API.patch b/patches/api/0042-Debug-Marker-API.patch
similarity index 99%
rename from patches/api/0044-Debug-Marker-API.patch
rename to patches/api/0042-Debug-Marker-API.patch
index 1ff69f141..c2f5e66f9 100644
--- a/patches/api/0044-Debug-Marker-API.patch
+++ b/patches/api/0042-Debug-Marker-API.patch
@@ -260,10 +260,10 @@ index 26fe07a4429e40da1ce4a0433ae184f594ddb473..405d60bd2c99ba741d2614b16f4bda5d
/**
diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
-index 187bd4933d7a2bf0469ffc73e71841648cc8a5bc..3527cd8eb9e76aed7ba2226f784e9143ba2a8f6f 100644
+index e3a6289547ff378fecf97b20ab08c8b36fe9cfa6..617d1ff6cfe1113668f4f91b5ed83016ad48c3f7 100644
--- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java
-@@ -3394,5 +3394,75 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+@@ -3442,5 +3442,75 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
* @deprecated Use {@link #resetIdleDuration()} instead
*/
void resetIdleTimer();
diff --git a/patches/api/0045-Add-death-screen-API.patch b/patches/api/0043-Add-death-screen-API.patch
similarity index 89%
rename from patches/api/0045-Add-death-screen-API.patch
rename to patches/api/0043-Add-death-screen-API.patch
index cf240977a..97bd3725e 100644
--- a/patches/api/0045-Add-death-screen-API.patch
+++ b/patches/api/0043-Add-death-screen-API.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Add death screen API
diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
-index 3527cd8eb9e76aed7ba2226f784e9143ba2a8f6f..eea83040ff15ea7c9bf97a45f5557294b309b4c8 100644
+index 617d1ff6cfe1113668f4f91b5ed83016ad48c3f7..498f9d8bbda8ab248ec520d850c9169da4b00327 100644
--- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java
-@@ -3464,5 +3464,25 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
+@@ -3512,5 +3512,25 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
* Clears all debug block highlights
*/
void clearBlockHighlights();
diff --git a/patches/api/0046-Add-item-packet-serialize-event.patch b/patches/api/0044-Add-item-packet-serialize-event.patch
similarity index 100%
rename from patches/api/0046-Add-item-packet-serialize-event.patch
rename to patches/api/0044-Add-item-packet-serialize-event.patch
diff --git a/patches/api/0047-Language-API.patch b/patches/api/0045-Language-API.patch
similarity index 100%
rename from patches/api/0047-Language-API.patch
rename to patches/api/0045-Language-API.patch
diff --git a/patches/api/0048-Add-log-suppression-for-LibraryLoader.patch b/patches/api/0046-Add-log-suppression-for-LibraryLoader.patch
similarity index 96%
rename from patches/api/0048-Add-log-suppression-for-LibraryLoader.patch
rename to patches/api/0046-Add-log-suppression-for-LibraryLoader.patch
index 95e4cd2ac..4948f9b89 100644
--- a/patches/api/0048-Add-log-suppression-for-LibraryLoader.patch
+++ b/patches/api/0046-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 eaefbb00e9993d54906cc8cf35cf753c0d6c7707..f1e58639213be0c43cd2ff090b625e7d0a67e8be 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/0049-Fire-Immunity-API.patch b/patches/api/0047-Fire-Immunity-API.patch
similarity index 84%
rename from patches/api/0049-Fire-Immunity-API.patch
rename to patches/api/0047-Fire-Immunity-API.patch
index 44dfcb936..837db4fbd 100644
--- a/patches/api/0049-Fire-Immunity-API.patch
+++ b/patches/api/0047-Fire-Immunity-API.patch
@@ -5,10 +5,10 @@ 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 752690574e1d3f47a3cf80fe5da2ba4107386ffd..ed9627dff9a33524da546c46e1d1be71ae1d1e0c 100644
+index c20f29e1ddfd1d73df19f6d6f730fa23dc23dc7a..42b8de355855baecd0a435314909116c210d002d 100644
--- a/src/main/java/org/bukkit/entity/Entity.java
+++ b/src/main/java/org/bukkit/entity/Entity.java
-@@ -1100,5 +1100,18 @@ public interface Entity extends Metadatable, CommandSender, Nameable, Persistent
+@@ -1144,5 +1144,18 @@ public interface Entity extends Metadatable, CommandSender, Nameable, Persistent
* @return True if in daylight
*/
boolean isInDaylight();
diff --git a/patches/api/0050-Added-goat-ram-event.patch b/patches/api/0048-Added-goat-ram-event.patch
similarity index 100%
rename from patches/api/0050-Added-goat-ram-event.patch
rename to patches/api/0048-Added-goat-ram-event.patch
diff --git a/patches/api/0051-Add-PreExplodeEvents.patch b/patches/api/0049-Add-PreExplodeEvents.patch
similarity index 100%
rename from patches/api/0051-Add-PreExplodeEvents.patch
rename to patches/api/0049-Add-PreExplodeEvents.patch
diff --git a/patches/api/0052-Stored-Bee-API.patch b/patches/api/0050-Stored-Bee-API.patch
similarity index 100%
rename from patches/api/0052-Stored-Bee-API.patch
rename to patches/api/0050-Stored-Bee-API.patch
diff --git a/patches/api/0053-Explorer-Map-API.patch b/patches/api/0051-Explorer-Map-API.patch
similarity index 100%
rename from patches/api/0053-Explorer-Map-API.patch
rename to patches/api/0051-Explorer-Map-API.patch
diff --git a/patches/api/0054-Add-hover-lines-API.patch b/patches/api/0052-Add-hover-lines-API.patch
similarity index 95%
rename from patches/api/0054-Add-hover-lines-API.patch
rename to patches/api/0052-Add-hover-lines-API.patch
index 3ed8a7703..f800a2e9e 100644
--- a/patches/api/0054-Add-hover-lines-API.patch
+++ b/patches/api/0052-Add-hover-lines-API.patch
@@ -24,7 +24,7 @@ index 0217f98a74140bbae454d467de27c12b6060ca75..fba5b867ea9de36b45ef25c2a93fc436
+ // Purpur end
}
diff --git a/src/main/java/org/bukkit/inventory/ItemStack.java b/src/main/java/org/bukkit/inventory/ItemStack.java
-index c733206b769d7a55076d863757fcac1a129033b7..ed168cba3692f55ac976c6ef31525e83ae36f5f9 100644
+index eb78ddfa5a83a45cb6103415aa679e73b3d6a13f..9ecfc504df089a74add168cd5a8376d7d6b8ea0e 100644
--- a/src/main/java/org/bukkit/inventory/ItemStack.java
+++ b/src/main/java/org/bukkit/inventory/ItemStack.java
@@ -1638,5 +1638,14 @@ public class ItemStack implements Cloneable, ConfigurationSerializable, Translat
diff --git a/patches/server/0003-Rebrand.patch b/patches/server/0001-Rebrand.patch
similarity index 95%
rename from patches/server/0003-Rebrand.patch
rename to patches/server/0001-Rebrand.patch
index 13c65af11..9c749f332 100644
--- a/patches/server/0003-Rebrand.patch
+++ b/patches/server/0001-Rebrand.patch
@@ -5,29 +5,27 @@ Subject: [PATCH] Rebrand
diff --git a/build.gradle.kts b/build.gradle.kts
-index 6dd0015c4a8afb9cd36e79f5745f0afd63c6e524..0eeca0c0dfbb62b7551cda95576932d3f14e6de2 100644
+index 170a915098f09ace226648da342a04c5c7583d11..fb1837bd5d0cb1970a6c236e72654a1c09502c48 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
-@@ -13,12 +13,12 @@ configurations.named(log4jPlugins.compileClasspathConfigurationName) {
- val alsoShade: Configuration by configurations.creating
+@@ -27,8 +27,12 @@ repositories {
dependencies {
-- implementation(project(":pufferfish-api")) // Pufferfish // Paper
-- // Pufferfish start
-- implementation("io.papermc.paper:paper-mojangapi:1.19.2-R0.1-SNAPSHOT") {
+ extraRuntime(platform("net.kyori:adventure-bom:4.15.0-SNAPSHOT"))
+- implementation(project(":paper-api"))
+- implementation(project(":paper-mojangapi"))
+ // Purpur start
+ implementation(project(":purpur-api"))
+ implementation("io.papermc.paper:paper-mojangapi:${project.version}") {
- exclude("io.papermc.paper", "paper-api")
- }
-- // Pufferfish end
++ exclude("io.papermc.paper", "paper-api")
++ }
+ // Purpur end
// Paper start
implementation("org.jline:jline-terminal-jansi:3.21.0")
implementation("net.minecrell:terminalconsoleappender:1.3.0")
-@@ -62,6 +62,10 @@ dependencies {
- }
- // Pufferfish end
+@@ -65,6 +69,10 @@ dependencies {
+ runtimeOnly("org.apache.maven.resolver:maven-resolver-connector-basic:1.7.3")
+ runtimeOnly("org.apache.maven.resolver:maven-resolver-transport-http:1.7.3")
+ implementation("org.mozilla:rhino-runtime:1.7.14") // Purpur
+ implementation("org.mozilla:rhino-engine:1.7.14") // Purpur
@@ -36,16 +34,16 @@ index 6dd0015c4a8afb9cd36e79f5745f0afd63c6e524..0eeca0c0dfbb62b7551cda95576932d3
testImplementation("io.github.classgraph:classgraph:4.8.47") // Paper - mob goal test
testImplementation("org.junit.jupiter:junit-jupiter:5.10.0")
testImplementation("org.hamcrest:hamcrest:2.2")
-@@ -89,7 +93,7 @@ tasks.jar {
+@@ -84,7 +92,7 @@ tasks.jar {
attributes(
"Main-Class" to "org.bukkit.craftbukkit.Main",
"Implementation-Title" to "CraftBukkit",
-- "Implementation-Version" to "git-Pufferfish-$implementationVersion", // Pufferfish
-+ "Implementation-Version" to "git-Purpur-$implementationVersion", // Pufferfish // Purpur
+- "Implementation-Version" to "git-Paper-$implementationVersion",
++ "Implementation-Version" to "git-Purpur-$implementationVersion", // Purpur
"Implementation-Vendor" to date, // Paper
"Specification-Title" to "Bukkit",
"Specification-Version" to project.version,
-@@ -173,7 +177,7 @@ fun TaskContainer.registerRunTask(
+@@ -168,7 +176,7 @@ fun TaskContainer.registerRunTask(
name: String,
block: JavaExec.() -> Unit
): TaskProvider = register(name) {
@@ -162,10 +160,10 @@ index c5d5648f4ca603ef2b1df723b58f9caf4dd3c722..3cb56595822799926a8141e60a42f5d1
.completer(new ConsoleCommandCompleter(this.server))
.option(LineReader.Option.COMPLETE_IN_WORD, true);
diff --git a/src/main/java/net/minecraft/CrashReport.java b/src/main/java/net/minecraft/CrashReport.java
-index 1d714d3eff11ed14f218656008190017494d4830..ed3527612315e6e0649182ce4e1ae2834b0918a9 100644
+index e047dee632022abfe05865d1e71838be8d5d053a..888e31a0454888c36cb27602a28619f1f6dbf2c0 100644
--- a/src/main/java/net/minecraft/CrashReport.java
+++ b/src/main/java/net/minecraft/CrashReport.java
-@@ -123,6 +123,10 @@ public class CrashReport {
+@@ -125,6 +125,10 @@ public class CrashReport {
StringBuilder stringbuilder = new StringBuilder();
stringbuilder.append("---- Minecraft Crash Report ----\n");
@@ -177,10 +175,10 @@ index 1d714d3eff11ed14f218656008190017494d4830..ed3527612315e6e0649182ce4e1ae283
stringbuilder.append(CrashReport.getErrorComment());
stringbuilder.append("\n\n");
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
-index 58d076e2a8fa1cf56c4c8d15a502e85fcf48aa90..ef14f47cec00ffaf1ac683964d3d1831dae9bcdb 100644
+index 34f19ac897a30c0c4e3ab406013fcca1c8b7db93..88b79cd90e936e1c48b84d7f762f425e1ae09259 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
-@@ -910,7 +910,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop // Paper - Paper > // Spigot - Spigot > // CraftBukkit - cb > vanilla!
-+ return "Purpur"; // Purpur - Purpur > Pufferfish - Pufferfish > // Paper - Paper > // Spigot - Spigot > // CraftBukkit - cb > vanilla!
+- return "Paper"; // Paper - Paper > // Spigot - Spigot > // CraftBukkit - cb > vanilla!
++ return "Purpur"; // Purpur - Purpur > // Paper - Paper > // Spigot - Spigot > // CraftBukkit - cb > vanilla!
}
public SystemReport fillSystemReport(SystemReport details) {
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
-index 697e74b4d966f7472f0cb3dcaca928cdde4714d7..41375e6fcf209f653bded0da27e1b3a993d2ef8e 100644
+index 782bb8ca67517dde5dba8f0a133eb8699353dd01..faeed34e37be45e9d18ab0293535cade59fda440 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
-@@ -269,7 +269,7 @@ import javax.annotation.Nullable; // Paper
+@@ -270,7 +270,7 @@ import javax.annotation.Nullable; // Paper
import javax.annotation.Nonnull; // Paper
public final class CraftServer implements Server {
-- private final String serverName = "Pufferfish"; // Paper // Pufferfish
-+ private final String serverName = "Purpur"; // Paper // Pufferfish // Purpur
+- private final String serverName = "Paper"; // Paper
++ private final String serverName = "Purpur"; // Paper // Purpur
private final String serverVersion;
private final String bukkitVersion = Versioning.getBukkitVersion();
private final Logger logger = Logger.getLogger("Minecraft");
@@ -239,10 +237,10 @@ index 4e56018b64d11f76c8da43fd8f85c6de72204e36..9607675e6c5bff2183c4420d11fc63ee
@Override
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
-index 1992bd985d1beae77b88d71c5fa551a277943fdb..831e71479ed0636ae8fd96adc732c23edf7d0e88 100644
+index ba2cd9c4cdbd5ddab1300320d7e0ede4d4b7a31a..3373df9e09bd29096c4b9c039c06256e4ecf4154 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
-@@ -912,7 +912,7 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity {
+@@ -917,7 +917,7 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity {
return EntityCategory.WATER;
}
@@ -252,7 +250,7 @@ index 1992bd985d1beae77b88d71c5fa551a277943fdb..831e71479ed0636ae8fd96adc732c23e
@Override
diff --git a/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java b/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java
-index 3ceb5d83be20183da907915f70ba9e64369373a9..e5b8466fb2f8c98bdc81839d9c01cece42c39081 100644
+index 700932b65e4fda560d684b0aa079bcee3923f73e..d1b1bc4845fc9519fc892e962c3e7d89da3f14de 100644
--- a/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java
+++ b/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java
@@ -501,7 +501,7 @@ public class CraftScheduler implements BukkitScheduler {
@@ -265,31 +263,32 @@ index 3ceb5d83be20183da907915f70ba9e64369373a9..e5b8466fb2f8c98bdc81839d9c01cece
// (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 397c10f64db3a4d7296fe18585b56851bc3a1f01..1e81801e5701b08feedd840c1e1663ae26507c16 100644
+index ec2396f0e5d62b10450eaa7239a8c5479638b3c3..72bb60535d2f35435ae8b96faced60a1b8d70db6 100644
--- a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java
+++ b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java
-@@ -485,7 +485,7 @@ public final class CraftMagicNumbers implements UnsafeValues {
+@@ -482,7 +482,7 @@ public final class CraftMagicNumbers implements UnsafeValues {
@Override
public com.destroystokyo.paper.util.VersionFetcher getVersionFetcher() {
-- return new gg.pufferfish.pufferfish.PufferfishVersionFetcher(); // Pufferfish
-+ return new com.destroystokyo.paper.PaperVersionFetcher(); // Pufferfish // Purpur
+- return new com.destroystokyo.paper.PaperVersionFetcher();
++ return new com.destroystokyo.paper.PaperVersionFetcher(); // Purpur - TODO: Pufferfish
}
@Override
diff --git a/src/main/java/org/bukkit/craftbukkit/util/Versioning.java b/src/main/java/org/bukkit/craftbukkit/util/Versioning.java
-index 80553face9c70c2a3d897681e7761df85b22d464..99597258e8e88cd9e2c901c4ac3ff7faeeabee2b 100644
+index 774556a62eb240da42e84db4502e2ed43495be17..50e78e5220bd8cb48e585866b2cb25f6688ed9e0 100644
--- a/src/main/java/org/bukkit/craftbukkit/util/Versioning.java
+++ b/src/main/java/org/bukkit/craftbukkit/util/Versioning.java
-@@ -11,7 +11,7 @@ public final class Versioning {
+@@ -11,8 +11,7 @@ public final class Versioning {
public static String getBukkitVersion() {
String result = "Unknown-Version";
-- InputStream stream = Bukkit.class.getClassLoader().getResourceAsStream("META-INF/maven/gg.pufferfish.pufferfish/pufferfish-api/pom.properties"); // Pufferfish
-+ InputStream stream = Bukkit.class.getClassLoader().getResourceAsStream("META-INF/maven/org.purpurmc.purpur/purpur-api/pom.properties"); // Pufferfish // Purpur
- Properties properties = new Properties();
+- InputStream stream = Bukkit.class.getClassLoader().getResourceAsStream("META-INF/maven/io.papermc.paper/paper-api/pom.properties");
+- Properties properties = new Properties();
++ InputStream stream = Bukkit.class.getClassLoader().getResourceAsStream("META-INF/maven/org.purpurmc.purpur/purpur-api/pom.properties"); // Purpur
if (stream != null) {
+ try {
diff --git a/src/main/java/org/spigotmc/WatchdogThread.java b/src/main/java/org/spigotmc/WatchdogThread.java
index 40dcdf6885e99b26283a9ea2bd4d4bf6ec358e71..5fc8cc40ab627eba0b2110c73d31af213a935733 100644
--- a/src/main/java/org/spigotmc/WatchdogThread.java
diff --git a/patches/server/0004-Purpur-config-files.patch b/patches/server/0002-Purpur-config-files.patch
similarity index 94%
rename from patches/server/0004-Purpur-config-files.patch
rename to patches/server/0002-Purpur-config-files.patch
index 1cfef9db4..a8b1c2158 100644
--- a/patches/server/0004-Purpur-config-files.patch
+++ b/patches/server/0002-Purpur-config-files.patch
@@ -5,15 +5,15 @@ 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 4b002e8b75d117b726b0de274a76d3596fce015b..9713263c3bd34ab8a3bfc0a8797ba0b1b88ed733 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 {
boolean logFailedRequests = config.getBoolean("logFailedRequests", false);
// Only start Metrics, if it's enabled in the config
if (config.getBoolean("enabled", true)) {
-- Metrics metrics = new Metrics("Pufferfish", serverUUID, logFailedRequests, Bukkit.getLogger()); // Pufferfish
-+ Metrics metrics = new Metrics("Purpur", serverUUID, logFailedRequests, Bukkit.getLogger()); // Pufferfish // Purpur
+- Metrics metrics = new Metrics("Paper", serverUUID, logFailedRequests, Bukkit.getLogger());
++ Metrics metrics = new Metrics("Purpur", serverUUID, logFailedRequests, Bukkit.getLogger()); // Purpur
metrics.addCustomChart(new Metrics.SimplePie("minecraft_version", () -> {
String minecraftVersion = Bukkit.getVersion();
@@ -26,21 +26,21 @@ index 692c962193cf9fcc6801fc93f3220bdc673d527b..8cde30544e14f8fc2dac32966ae3c21f
- final String implVersion = org.bukkit.craftbukkit.Main.class.getPackage().getImplementationVersion();
- if (implVersion != null) {
- final String buildOrHash = implVersion.substring(implVersion.lastIndexOf('-') + 1);
-- paperVersion = "git-Pufferfish-%s-%s".formatted(Bukkit.getServer().getMinecraftVersion(), buildOrHash); // Pufferfish
+- paperVersion = "git-Paper-%s-%s".formatted(Bukkit.getServer().getMinecraftVersion(), buildOrHash);
- } else {
- paperVersion = "unknown";
- }
-- metrics.addCustomChart(new Metrics.SimplePie("pufferfish_version", () -> paperVersion)); // Pufferfish
+- metrics.addCustomChart(new Metrics.SimplePie("paper_version", () -> paperVersion));
+ metrics.addCustomChart(new Metrics.SimplePie("online_mode", () -> Bukkit.getOnlineMode() ? "online" : (io.papermc.paper.configuration.GlobalConfiguration.get().proxies.isProxyOnlineMode() ? "bungee" : "offline"))); // Purpur
+ metrics.addCustomChart(new Metrics.SimplePie("purpur_version", () -> (org.bukkit.craftbukkit.Main.class.getPackage().getImplementationVersion() != null) ? org.bukkit.craftbukkit.Main.class.getPackage().getImplementationVersion() : "unknown")); // Purpur
metrics.addCustomChart(new Metrics.DrilldownPie("java_version", () -> {
Map> map = new HashMap<>();
diff --git a/src/main/java/net/minecraft/commands/CommandSourceStack.java b/src/main/java/net/minecraft/commands/CommandSourceStack.java
-index 56ae02aab93b9a698e9d2f07a0448aa4767169d9..756651db912068c837197a972e95bc66ab9d4a70 100644
+index 14f4c0a93372a58cf36dc95265b5e210ea1605e5..ff27787313a3337e29eac6f623b08f1f333f293c 100644
--- a/src/main/java/net/minecraft/commands/CommandSourceStack.java
+++ b/src/main/java/net/minecraft/commands/CommandSourceStack.java
-@@ -332,6 +332,30 @@ public class CommandSourceStack implements SharedSuggestionProvider, com.destroy
+@@ -322,6 +322,30 @@ public class CommandSourceStack implements ExecutionCommandSource resourcekey, RegistryAccess iregistrycustom, Holder holder, Supplier supplier, boolean flag, boolean flag1, long i, int j, org.bukkit.generator.ChunkGenerator gen, org.bukkit.generator.BiomeProvider biomeProvider, org.bukkit.World.Environment env, java.util.function.Function paperWorldConfigCreator, java.util.concurrent.Executor executor) { // Paper - Async-Anti-Xray - Pass executor
this.spigotConfig = new org.spigotmc.SpigotWorldConfig(((net.minecraft.world.level.storage.PrimaryLevelData) worlddatamutable).getLevelName()); // Spigot
this.paperConfig = paperWorldConfigCreator.apply(this.spigotConfig); // Paper
@@ -112,10 +112,10 @@ index 28fd04794e2a624c5d0a1322b1d6d851f443e3b1..b60ab6c545296c67304019759ab04aa6
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 b06b8137a337a189662601aef4cd57d406f58c36..9637832f475630f07912230e37e04c480343a842 100644
+index faeed34e37be45e9d18ab0293535cade59fda440..05259057c12ab087dfc64fa32bd7a7bd62bfd8a2 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
-@@ -1041,6 +1041,7 @@ public final class CraftServer implements Server {
+@@ -1036,6 +1036,7 @@ public final class CraftServer implements Server {
org.spigotmc.SpigotConfig.init((File) this.console.options.valueOf("spigot-settings")); // Spigot
this.console.paperConfigurations.reloadConfigs(this.console);
@@ -123,7 +123,7 @@ index b06b8137a337a189662601aef4cd57d406f58c36..9637832f475630f07912230e37e04c48
for (ServerLevel world : this.console.getAllLevels()) {
// world.serverLevelData.setDifficulty(config.difficulty); // Paper - per level difficulty
world.setSpawnSettings(world.serverLevelData.getDifficulty() != Difficulty.PEACEFUL && config.spawnMonsters, config.spawnAnimals); // Paper - per level difficulty (from MinecraftServer#setDifficulty(ServerLevel, Difficulty, boolean))
-@@ -1056,6 +1057,7 @@ public final class CraftServer implements Server {
+@@ -1051,6 +1052,7 @@ public final class CraftServer implements Server {
}
}
world.spigotConfig.init(); // Spigot
@@ -131,7 +131,7 @@ index b06b8137a337a189662601aef4cd57d406f58c36..9637832f475630f07912230e37e04c48
}
Plugin[] pluginClone = pluginManager.getPlugins().clone(); // Paper
-@@ -1071,6 +1073,7 @@ public final class CraftServer implements Server {
+@@ -1066,6 +1068,7 @@ public final class CraftServer implements Server {
this.reloadData();
org.spigotmc.SpigotConfig.registerCommands(); // Spigot
io.papermc.paper.command.PaperCommands.registerCommands(this.console); // Paper
@@ -139,7 +139,7 @@ index b06b8137a337a189662601aef4cd57d406f58c36..9637832f475630f07912230e37e04c48
this.overrideAllCommandBlockCommands = this.commandsConfiguration.getStringList("command-block-overrides").contains("*");
this.ignoreVanillaPermissions = this.commandsConfiguration.getBoolean("ignore-vanilla-permissions");
-@@ -2983,6 +2986,18 @@ public final class CraftServer implements Server {
+@@ -3010,6 +3013,18 @@ public final class CraftServer implements Server {
return CraftServer.this.console.paperConfigurations.createLegacyObject(CraftServer.this.console);
}
@@ -159,7 +159,7 @@ index b06b8137a337a189662601aef4cd57d406f58c36..9637832f475630f07912230e37e04c48
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 c737c5d62407337d3db2899cfc01713a058a6467..ed8e01918c7aab189ac9a8e37dbe9ff2b06aaa4d 100644
+index 4b457cbfc56e55e0ae0fee5b69e2e75349702aab..fa38d6dd3a7439de3b2503a90637eabb3e6dd8ec 100644
--- a/src/main/java/org/bukkit/craftbukkit/Main.java
+++ b/src/main/java/org/bukkit/craftbukkit/Main.java
@@ -174,6 +174,14 @@ public class Main {
diff --git a/patches/server/0005-Purpur-client-support.patch b/patches/server/0003-Purpur-client-support.patch
similarity index 86%
rename from patches/server/0005-Purpur-client-support.patch
rename to patches/server/0003-Purpur-client-support.patch
index 9fc93169b..8600c66b6 100644
--- a/patches/server/0005-Purpur-client-support.patch
+++ b/patches/server/0003-Purpur-client-support.patch
@@ -5,11 +5,11 @@ 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 08980763020a13ab49dc7d637625a4fba56da8c9..c4cef829be6333143ed4af4025ade34a307926f6 100644
+index 8efbbd379244e3ed54d4aba199037cc20ccd096a..86cf69de7a35f1ac8e2c56f988e74832332470d2 100644
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
-@@ -274,6 +274,7 @@ public class ServerPlayer extends Player {
- public PlayerNaturallySpawnCreaturesEvent playerNaturallySpawnedEvent; // Paper
+@@ -281,6 +281,7 @@ public class ServerPlayer extends Player {
+ public com.destroystokyo.paper.event.entity.PlayerNaturallySpawnCreaturesEvent playerNaturallySpawnedEvent; // Paper
public @Nullable String clientBrandName = null; // Paper - Brand name
public org.bukkit.event.player.PlayerQuitEvent.QuitReason quitReason = null; // Paper - there are a lot of changes to do if we change all methods leading to the event
+ public boolean purpurClient = false; // Purpur
@@ -17,7 +17,7 @@ index 08980763020a13ab49dc7d637625a4fba56da8c9..c4cef829be6333143ed4af4025ade34a
// Paper start - replace player chunk loader
private final java.util.concurrent.atomic.AtomicReference viewDistances = new java.util.concurrent.atomic.AtomicReference<>(new io.papermc.paper.chunk.system.RegionizedPlayerChunkLoader.ViewDistances(-1, -1, -1));
diff --git a/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java
-index 598f807f0d0caac98b81e0e2991f1bd497c4534e..e9824deab810738e0df8b8e6932048b601ba6662 100644
+index 77cd2b73e4d499beca16962a6b3d1fefe279cd87..13e064451c4d48e873061b6dea431a6b101de2ee 100644
--- a/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java
@@ -55,6 +55,7 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack
@@ -43,10 +43,10 @@ index 598f807f0d0caac98b81e0e2991f1bd497c4534e..e9824deab810738e0df8b8e6932048b6
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 3a792ddc31e76038b84e8f87088c4cd94c349138..df5b588309f181c84336060d3668880b74ea7490 100644
+index ed41decbf0522c516b3608569d5719687105e25b..67bb2541fff19f0a48c7b1289e34749ece632d56 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-@@ -3303,4 +3303,11 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+@@ -3315,4 +3315,11 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
return this.spigot;
}
// Spigot end
diff --git a/patches/server/0006-Fix-decompile-errors.patch b/patches/server/0004-Fix-decompile-errors.patch
similarity index 94%
rename from patches/server/0006-Fix-decompile-errors.patch
rename to patches/server/0004-Fix-decompile-errors.patch
index 828fc95cc..3157b4565 100644
--- a/patches/server/0006-Fix-decompile-errors.patch
+++ b/patches/server/0004-Fix-decompile-errors.patch
@@ -44,10 +44,10 @@ index d02ee11066fc4f07ccb110b09b86d895ff90d4f2..e1be4a77fae0b9120781f460079269b8
@Override
diff --git a/src/main/java/net/minecraft/world/level/block/Blocks.java b/src/main/java/net/minecraft/world/level/block/Blocks.java
-index d5654cfe37bd82f1290b280990a8502432491ae1..b49e02ac7b3db9a5b79ce3f106ead19af4e7cfa6 100644
+index 9a2de546dc2af2ad4bf5d32ca6583f0e1f3f70d8..1c7bb504a576568bd275b4f1373208d37d1419e5 100644
--- a/src/main/java/net/minecraft/world/level/block/Blocks.java
+++ b/src/main/java/net/minecraft/world/level/block/Blocks.java
-@@ -1160,7 +1160,7 @@ public class Blocks {
+@@ -1215,7 +1215,7 @@ public class Blocks {
}
private static Boolean ocelotOrParrot(BlockState state, BlockGetter world, BlockPos pos, EntityType> type) {
@@ -55,4 +55,4 @@ index d5654cfe37bd82f1290b280990a8502432491ae1..b49e02ac7b3db9a5b79ce3f106ead19a
+ return type == EntityType.OCELOT || type == EntityType.PARROT; // Purpur - decompile error
}
- private static BedBlock bed(DyeColor color) {
+ private static Block bed(DyeColor color) {
diff --git a/patches/server/0007-Component-related-conveniences.patch b/patches/server/0005-Component-related-conveniences.patch
similarity index 89%
rename from patches/server/0007-Component-related-conveniences.patch
rename to patches/server/0005-Component-related-conveniences.patch
index 073d79e02..e89c2bdd2 100644
--- a/patches/server/0007-Component-related-conveniences.patch
+++ b/patches/server/0005-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 a21b49af3134848f60d03058590505f7a5caaa11..dd84c17cee6c1ac5071fa2fefe70f91a16124b48 100644
+index 86cf69de7a35f1ac8e2c56f988e74832332470d2..b0e698b2532ed6af84ca2dd0d8b1c795921c5823 100644
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
-@@ -1782,6 +1782,26 @@ public class ServerPlayer extends Player {
+@@ -1883,6 +1883,26 @@ public class ServerPlayer extends Player {
this.lastSentExp = -1; // CraftBukkit - Added to reset
}
@@ -36,10 +36,10 @@ index a21b49af3134848f60d03058590505f7a5caaa11..dd84c17cee6c1ac5071fa2fefe70f91a
public void displayClientMessage(Component message, boolean overlay) {
this.sendSystemMessage(message, overlay);
diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java
-index 33abcf12b4426572b74ca4c813e4392c823494bc..cd6bfaa8dc06c05ab25cbded645a1dbca725838c 100644
+index a35638a92479b90afa89cf201fc45b49c9e767f3..9a7b5c2bae8e3c1788068462d2f60665a8064a77 100644
--- a/src/main/java/net/minecraft/server/players/PlayerList.java
+++ b/src/main/java/net/minecraft/server/players/PlayerList.java
-@@ -1060,6 +1060,20 @@ public abstract class PlayerList {
+@@ -1058,6 +1058,20 @@ public abstract class PlayerList {
}
// CraftBukkit end
@@ -81,10 +81,10 @@ index 25a5a3b949a0eb632611355e74ccd4865be108ca..14fcfd7c1d3a62833978e163f4e0d6f9
return this.type().msgId();
}
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
-index 80c9a523e94704f73e833e2255af6b0bf55da454..62cbb7837d38a815e76b78451f1e8cafab990177 100644
+index 9abe817ae202edaa2d88cd59ae5c7db0b1c634be..37632d0c41149e6269fead808903765f0e59dbcc 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
-@@ -4104,6 +4104,20 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {
+@@ -4130,6 +4130,20 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S
return SlotAccess.NULL;
}
diff --git a/patches/server/0008-Ridables.patch b/patches/server/0006-Ridables.patch
similarity index 92%
rename from patches/server/0008-Ridables.patch
rename to patches/server/0006-Ridables.patch
index 9a8c62897..02948550b 100644
--- a/patches/server/0008-Ridables.patch
+++ b/patches/server/0006-Ridables.patch
@@ -22,10 +22,10 @@ index 83cab746d1d6fe25c043c8aee28c39412b90c127..ec6b58dae525c81bbb1c0e2d96fbded6
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 ef14f47cec00ffaf1ac683964d3d1831dae9bcdb..be7508a527a55ada0f769588db024f999d0b95f5 100644
+index 88b79cd90e936e1c48b84d7f762f425e1ae09259..81e4b7254e1c3cb714a9c37d941ff1b5d9e758ed 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
-@@ -1531,6 +1531,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 0; // Paper
net.minecraft.world.level.block.entity.HopperBlockEntity.skipHopperEvents = worldserver.paperConfig().hopper.disableMoveEvent || org.bukkit.event.inventory.InventoryMoveItemEvent.getHandlerList().getRegisteredListeners().length == 0; // Paper
worldserver.hasEntityMoveEvent = io.papermc.paper.event.entity.EntityMoveEvent.getHandlerList().getRegisteredListeners().length > 0; // Paper
@@ -34,10 +34,10 @@ index ef14f47cec00ffaf1ac683964d3d1831dae9bcdb..be7508a527a55ada0f769588db024f99
this.profiler.push(() -> {
return worldserver + " " + worldserver.dimension().location();
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
-index 8aab01170fb512d98103935a19e468a145a6bb16..5d20509fd92969ed05f1044290650880fd4a663e 100644
+index f4d53d9bfe5b060158f69b5d9e4533a5b9869eed..35cc427755cccb123a866220bd2a72cdbd723465 100644
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
-@@ -223,6 +223,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
+@@ -225,6 +225,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
public boolean hasPhysicsEvent = true; // Paper
public boolean hasEntityMoveEvent = false; // Paper
private final alternate.current.wire.WireHandler wireHandler = new alternate.current.wire.WireHandler(this); // Paper - optimize redstone (Alternate Current)
@@ -46,10 +46,10 @@ index 8aab01170fb512d98103935a19e468a145a6bb16..5d20509fd92969ed05f1044290650880
final Throwable thr = new Throwable(entity + " Added to world at " + new java.util.Date());
io.papermc.paper.util.StacktraceDeobfuscator.INSTANCE.deobfuscateThrowable(thr);
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java
-index dd84c17cee6c1ac5071fa2fefe70f91a16124b48..7d29ba00128b2c079406eef13c373c4ebf66e2fa 100644
+index b0e698b2532ed6af84ca2dd0d8b1c795921c5823..d5940e560ea890f7f017ff9c37939a485be94540 100644
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
-@@ -756,6 +756,15 @@ public class ServerPlayer extends Player {
+@@ -763,6 +763,15 @@ public class ServerPlayer extends Player {
this.trackStartFallingPosition();
this.trackEnteredOrExitedLavaOnVehicle();
this.advancements.flushDirty(this);
@@ -66,10 +66,10 @@ index dd84c17cee6c1ac5071fa2fefe70f91a16124b48..7d29ba00128b2c079406eef13c373c4e
public void doTick() {
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
-index 6cc9271ba058f4af759eae34e2f6e9f892b4f6da..925ecb3d737f2e0e58bfdf17e2e48334188dce28 100644
+index 9a94249834f8b0b8d3f6aeaf0c859ba875079250..0ade0256c3a227ea6a2971b2c5889b9935d52259 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
-@@ -2714,6 +2714,8 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
+@@ -2720,6 +2720,8 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
ServerGamePacketListenerImpl.this.cserver.getPluginManager().callEvent(event);
@@ -79,10 +79,10 @@ index 6cc9271ba058f4af759eae34e2f6e9f892b4f6da..925ecb3d737f2e0e58bfdf17e2e48334
if ((entity instanceof Bucketable && entity instanceof LivingEntity && origItem != null && origItem.asItem() == Items.WATER_BUCKET) && (event.isCancelled() || ServerGamePacketListenerImpl.this.player.getInventory().getSelected() == null || ServerGamePacketListenerImpl.this.player.getInventory().getSelected().getItem() != origItem)) {
entity.getEntityData().resendPossiblyDesyncedEntity(player); // Paper - The entire mob gets deleted, so resend it.
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
-index 62cbb7837d38a815e76b78451f1e8cafab990177..29773f20569cfc9a9ba999617ea2875d3cb96e9a 100644
+index 37632d0c41149e6269fead808903765f0e59dbcc..856803084d30cc4cbdb53bd6db15e7db5ea16154 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
-@@ -376,7 +376,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {
+@@ -377,7 +377,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S
private final Set tags;
private final double[] pistonDeltas;
private long pistonDeltasGameTime;
@@ -91,7 +91,7 @@ index 62cbb7837d38a815e76b78451f1e8cafab990177..29773f20569cfc9a9ba999617ea2875d
private float eyeHeight;
public boolean isInPowderSnow;
public boolean wasInPowderSnow;
-@@ -2984,6 +2984,13 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {
+@@ -3001,6 +3001,13 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S
this.passengers = ImmutableList.copyOf(list);
}
@@ -105,7 +105,7 @@ index 62cbb7837d38a815e76b78451f1e8cafab990177..29773f20569cfc9a9ba999617ea2875d
this.gameEvent(GameEvent.ENTITY_MOUNT, passenger);
}
}
-@@ -3024,6 +3031,14 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {
+@@ -3041,6 +3048,14 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S
return false;
}
// Spigot end
@@ -120,12 +120,11 @@ index 62cbb7837d38a815e76b78451f1e8cafab990177..29773f20569cfc9a9ba999617ea2875d
if (this.passengers.size() == 1 && this.passengers.get(0) == entity) {
this.passengers = ImmutableList.of();
} else {
-@@ -4952,4 +4967,45 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {
+@@ -4930,4 +4945,44 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S
return ((net.minecraft.server.level.ServerChunkCache) level.getChunkSource()).isPositionTicking(this);
}
// Paper end
-+
-+ // Purpur start
++ urpur start
+ @Nullable
+ private Player rider = null;
+
@@ -191,7 +190,7 @@ index 1bb8b6e91c44cd13411d96d749fa64835c75a267..75c278b67ad2b78766efd8f89c4c2ca7
protected ParticleOptions getInkParticle() {
return ParticleTypes.GLOW_SQUID_INK;
diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
-index 3b9ee3324a084271862ed790e8fc0d469e877ec1..4b7b9737e9ebc0785116d46dafafda525c77b846 100644
+index 45b1a182acf6b2aef40b714d31ca125d8f74619a..629cfd889ebfbf79b06fc42d81d7e0839a927915 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
@@ -218,9 +218,9 @@ public abstract class LivingEntity extends Entity implements Attackable {
@@ -224,7 +223,7 @@ index 3b9ee3324a084271862ed790e8fc0d469e877ec1..4b7b9737e9ebc0785116d46dafafda52
@Override
protected void checkFallDamage(double heightDifference, boolean onGround, BlockState state, BlockPos landedPosition) {
-@@ -2730,7 +2731,7 @@ public abstract class LivingEntity extends Entity implements Attackable {
+@@ -2701,7 +2702,7 @@ public abstract class LivingEntity extends Entity implements Attackable {
}
protected long lastJumpTime = 0L; // Paper
@@ -233,7 +232,7 @@ index 3b9ee3324a084271862ed790e8fc0d469e877ec1..4b7b9737e9ebc0785116d46dafafda52
Vec3 vec3d = this.getDeltaMovement();
// Paper start
long time = System.nanoTime();
-@@ -3503,8 +3504,10 @@ public abstract class LivingEntity extends Entity implements Attackable {
+@@ -3479,8 +3480,10 @@ public abstract class LivingEntity extends Entity implements Attackable {
this.pushEntities();
this.level().getProfiler().pop();
// Paper start
@@ -246,7 +245,7 @@ index 3b9ee3324a084271862ed790e8fc0d469e877ec1..4b7b9737e9ebc0785116d46dafafda52
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());
-@@ -3514,6 +3517,21 @@ public abstract class LivingEntity extends Entity implements Attackable {
+@@ -3490,6 +3493,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());
}
}
@@ -269,10 +268,10 @@ index 3b9ee3324a084271862ed790e8fc0d469e877ec1..4b7b9737e9ebc0785116d46dafafda52
// Paper end
if (!this.level().isClientSide && this.isSensitiveToWater() && this.isInWaterRainOrBubble()) {
diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java
-index 944c22ea172796492a683d2f2bddfb0938d7a8c9..050bb38f212fd2ec9b82ac5955496415474beb3b 100644
+index 5af48151159135b869ec4753bbcf79dd257c1570..1fc2b2cee28db5abb8ab33df6fd76de035aef688 100644
--- a/src/main/java/net/minecraft/world/entity/Mob.java
+++ b/src/main/java/net/minecraft/world/entity/Mob.java
-@@ -147,8 +147,8 @@ public abstract class Mob extends LivingEntity implements Targeting {
+@@ -148,8 +148,8 @@ public abstract class Mob extends LivingEntity implements Targeting {
this.restrictRadius = -1.0F;
this.goalSelector = new GoalSelector(world.getProfilerSupplier());
this.targetSelector = new GoalSelector(world.getProfilerSupplier());
@@ -283,7 +282,7 @@ index 944c22ea172796492a683d2f2bddfb0938d7a8c9..050bb38f212fd2ec9b82ac5955496415
this.jumpControl = new JumpControl(this);
this.bodyRotationControl = this.createBodyControl();
this.navigation = this.createNavigation(world);
-@@ -1389,7 +1389,7 @@ public abstract class Mob extends LivingEntity implements Targeting {
+@@ -1384,7 +1384,7 @@ public abstract class Mob extends LivingEntity implements Targeting {
protected void onOffspringSpawnedFromEgg(Player player, Mob child) {}
protected InteractionResult mobInteract(Player player, InteractionHand hand) {
@@ -292,7 +291,7 @@ index 944c22ea172796492a683d2f2bddfb0938d7a8c9..050bb38f212fd2ec9b82ac5955496415
}
public boolean isWithinRestriction() {
-@@ -1773,4 +1773,56 @@ public abstract class Mob extends LivingEntity implements Targeting {
+@@ -1769,4 +1769,56 @@ public abstract class Mob extends LivingEntity implements Targeting {
return itemmonsteregg == null ? null : new ItemStack(itemmonsteregg);
}
@@ -350,13 +349,13 @@ index 944c22ea172796492a683d2f2bddfb0938d7a8c9..050bb38f212fd2ec9b82ac5955496415
+ // 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 3087f8359b098682a345399c85395de8a15b6eed..6b0855cffb901dbc7dcc5fd44506275206bc9a2d 100644
+index 7204b973c3ad9239e82355513f6d538107102e48..ffd1ae235e6602e73c6585f60c6ef5dd21844a12 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,14 +24,21 @@ public class AttributeMap {
+@@ -23,13 +23,20 @@ public class AttributeMap {
+ private final Map attributes = Maps.newHashMap();
private final Set dirtyAttributes = Sets.newHashSet();
private final AttributeSupplier supplier;
- private final java.util.function.Function createInstance; // Pufferfish
+ private final net.minecraft.world.entity.LivingEntity entity; // Purpur
public AttributeMap(AttributeSupplier defaultAttributes) {
@@ -367,7 +366,6 @@ index 3087f8359b098682a345399c85395de8a15b6eed..6b0855cffb901dbc7dcc5fd445062752
+ this.entity = entity;
+ // Purpur end
this.supplier = defaultAttributes;
- this.createInstance = attribute -> this.supplier.createInstance(this::onAttributeModified, attribute); // Pufferfish
}
private void onAttributeModified(AttributeInstance instance) {
@@ -376,7 +374,7 @@ index 3087f8359b098682a345399c85395de8a15b6eed..6b0855cffb901dbc7dcc5fd445062752
this.dirtyAttributes.add(instance);
}
-@@ -43,7 +50,7 @@ public class AttributeMap {
+@@ -41,7 +48,7 @@ public class AttributeMap {
public Collection getSyncableAttributes() {
return this.attributes.values().stream().filter((attribute) -> {
@@ -386,96 +384,97 @@ index 3087f8359b098682a345399c85395de8a15b6eed..6b0855cffb901dbc7dcc5fd445062752
}
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 8a720f9ae81d7ea856e28cb27a66adcf04bcb0eb..e0b70d9732a2b7d96999b7e4a497ffa1d8cf86a7 100644
+index 0a13e076b42bc8c0e7d4962379c207dea89f0435..2d7afaa67c762107717486cb9dbbf6f8f967396c 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
-@@ -80,7 +80,88 @@ import org.slf4j.Logger;
+@@ -81,7 +81,89 @@ import org.slf4j.Logger;
public class DefaultAttributes {
private static final Logger LOGGER = LogUtils.getLogger();
-- private static final Map, AttributeSupplier> SUPPLIERS = ImmutableMap., AttributeSupplier>builder().put(EntityType.ALLAY, Allay.createAttributes().build()).put(EntityType.ARMOR_STAND, LivingEntity.createLivingAttributes().build()).put(EntityType.AXOLOTL, Axolotl.createAttributes().build()).put(EntityType.BAT, Bat.createAttributes().build()).put(EntityType.BEE, Bee.createAttributes().build()).put(EntityType.BLAZE, Blaze.createAttributes().build()).put(EntityType.CAT, Cat.createAttributes().build()).put(EntityType.CAMEL, Camel.createAttributes().build()).put(EntityType.CAVE_SPIDER, CaveSpider.createCaveSpider().build()).put(EntityType.CHICKEN, Chicken.createAttributes().build()).put(EntityType.COD, AbstractFish.createAttributes().build()).put(EntityType.COW, Cow.createAttributes().build()).put(EntityType.CREEPER, Creeper.createAttributes().build()).put(EntityType.DOLPHIN, Dolphin.createAttributes().build()).put(EntityType.DONKEY, AbstractChestedHorse.createBaseChestedHorseAttributes().build()).put(EntityType.DROWNED, Zombie.createAttributes().build()).put(EntityType.ELDER_GUARDIAN, ElderGuardian.createAttributes().build()).put(EntityType.ENDERMAN, EnderMan.createAttributes().build()).put(EntityType.ENDERMITE, Endermite.createAttributes().build()).put(EntityType.ENDER_DRAGON, EnderDragon.createAttributes().build()).put(EntityType.EVOKER, Evoker.createAttributes().build()).put(EntityType.FOX, Fox.createAttributes().build()).put(EntityType.FROG, Frog.createAttributes().build()).put(EntityType.GHAST, Ghast.createAttributes().build()).put(EntityType.GIANT, Giant.createAttributes().build()).put(EntityType.GLOW_SQUID, GlowSquid.createAttributes().build()).put(EntityType.GOAT, Goat.createAttributes().build()).put(EntityType.GUARDIAN, Guardian.createAttributes().build()).put(EntityType.HOGLIN, Hoglin.createAttributes().build()).put(EntityType.HORSE, AbstractHorse.createBaseHorseAttributes().build()).put(EntityType.HUSK, Zombie.createAttributes().build()).put(EntityType.ILLUSIONER, Illusioner.createAttributes().build()).put(EntityType.IRON_GOLEM, IronGolem.createAttributes().build()).put(EntityType.LLAMA, Llama.createAttributes().build()).put(EntityType.MAGMA_CUBE, MagmaCube.createAttributes().build()).put(EntityType.MOOSHROOM, Cow.createAttributes().build()).put(EntityType.MULE, AbstractChestedHorse.createBaseChestedHorseAttributes().build()).put(EntityType.OCELOT, Ocelot.createAttributes().build()).put(EntityType.PANDA, Panda.createAttributes().build()).put(EntityType.PARROT, Parrot.createAttributes().build()).put(EntityType.PHANTOM, Monster.createMonsterAttributes().build()).put(EntityType.PIG, Pig.createAttributes().build()).put(EntityType.PIGLIN, Piglin.createAttributes().build()).put(EntityType.PIGLIN_BRUTE, PiglinBrute.createAttributes().build()).put(EntityType.PILLAGER, Pillager.createAttributes().build()).put(EntityType.PLAYER, Player.createAttributes().build()).put(EntityType.POLAR_BEAR, PolarBear.createAttributes().build()).put(EntityType.PUFFERFISH, AbstractFish.createAttributes().build()).put(EntityType.RABBIT, Rabbit.createAttributes().build()).put(EntityType.RAVAGER, Ravager.createAttributes().build()).put(EntityType.SALMON, AbstractFish.createAttributes().build()).put(EntityType.SHEEP, Sheep.createAttributes().build()).put(EntityType.SHULKER, Shulker.createAttributes().build()).put(EntityType.SILVERFISH, Silverfish.createAttributes().build()).put(EntityType.SKELETON, AbstractSkeleton.createAttributes().build()).put(EntityType.SKELETON_HORSE, SkeletonHorse.createAttributes().build()).put(EntityType.SLIME, Monster.createMonsterAttributes().build()).put(EntityType.SNIFFER, Sniffer.createAttributes().build()).put(EntityType.SNOW_GOLEM, SnowGolem.createAttributes().build()).put(EntityType.SPIDER, Spider.createAttributes().build()).put(EntityType.SQUID, Squid.createAttributes().build()).put(EntityType.STRAY, AbstractSkeleton.createAttributes().build()).put(EntityType.STRIDER, Strider.createAttributes().build()).put(EntityType.TADPOLE, Tadpole.createAttributes().build()).put(EntityType.TRADER_LLAMA, Llama.createAttributes().build()).put(EntityType.TROPICAL_FISH, AbstractFish.createAttributes().build()).put(EntityType.TURTLE, Turtle.createAttributes().build()).put(EntityType.VEX, Vex.createAttributes().build()).put(EntityType.VILLAGER, Villager.createAttributes().build()).put(EntityType.VINDICATOR, Vindicator.createAttributes().build()).put(EntityType.WARDEN, Warden.createAttributes().build()).put(EntityType.WANDERING_TRADER, Mob.createMobAttributes().build()).put(EntityType.WITCH, Witch.createAttributes().build()).put(EntityType.WITHER, WitherBoss.createAttributes().build()).put(EntityType.WITHER_SKELETON, AbstractSkeleton.createAttributes().build()).put(EntityType.WOLF, Wolf.createAttributes().build()).put(EntityType.ZOGLIN, Zoglin.createAttributes().build()).put(EntityType.ZOMBIE, Zombie.createAttributes().build()).put(EntityType.ZOMBIE_HORSE, ZombieHorse.createAttributes().build()).put(EntityType.ZOMBIE_VILLAGER, Zombie.createAttributes().build()).put(EntityType.ZOMBIFIED_PIGLIN, ZombifiedPiglin.createAttributes().build()).build();
+- private static final Map, AttributeSupplier> SUPPLIERS = ImmutableMap., AttributeSupplier>builder().put(EntityType.ALLAY, Allay.createAttributes().build()).put(EntityType.ARMOR_STAND, LivingEntity.createLivingAttributes().build()).put(EntityType.AXOLOTL, Axolotl.createAttributes().build()).put(EntityType.BAT, Bat.createAttributes().build()).put(EntityType.BEE, Bee.createAttributes().build()).put(EntityType.BLAZE, Blaze.createAttributes().build()).put(EntityType.CAT, Cat.createAttributes().build()).put(EntityType.CAMEL, Camel.createAttributes().build()).put(EntityType.CAVE_SPIDER, CaveSpider.createCaveSpider().build()).put(EntityType.CHICKEN, Chicken.createAttributes().build()).put(EntityType.COD, AbstractFish.createAttributes().build()).put(EntityType.COW, Cow.createAttributes().build()).put(EntityType.CREEPER, Creeper.createAttributes().build()).put(EntityType.DOLPHIN, Dolphin.createAttributes().build()).put(EntityType.DONKEY, AbstractChestedHorse.createBaseChestedHorseAttributes().build()).put(EntityType.DROWNED, Zombie.createAttributes().build()).put(EntityType.ELDER_GUARDIAN, ElderGuardian.createAttributes().build()).put(EntityType.ENDERMAN, EnderMan.createAttributes().build()).put(EntityType.ENDERMITE, Endermite.createAttributes().build()).put(EntityType.ENDER_DRAGON, EnderDragon.createAttributes().build()).put(EntityType.EVOKER, Evoker.createAttributes().build()).put(EntityType.BREEZE, Breeze.createAttributes().build()).put(EntityType.FOX, Fox.createAttributes().build()).put(EntityType.FROG, Frog.createAttributes().build()).put(EntityType.GHAST, Ghast.createAttributes().build()).put(EntityType.GIANT, Giant.createAttributes().build()).put(EntityType.GLOW_SQUID, GlowSquid.createAttributes().build()).put(EntityType.GOAT, Goat.createAttributes().build()).put(EntityType.GUARDIAN, Guardian.createAttributes().build()).put(EntityType.HOGLIN, Hoglin.createAttributes().build()).put(EntityType.HORSE, AbstractHorse.createBaseHorseAttributes().build()).put(EntityType.HUSK, Zombie.createAttributes().build()).put(EntityType.ILLUSIONER, Illusioner.createAttributes().build()).put(EntityType.IRON_GOLEM, IronGolem.createAttributes().build()).put(EntityType.LLAMA, Llama.createAttributes().build()).put(EntityType.MAGMA_CUBE, MagmaCube.createAttributes().build()).put(EntityType.MOOSHROOM, Cow.createAttributes().build()).put(EntityType.MULE, AbstractChestedHorse.createBaseChestedHorseAttributes().build()).put(EntityType.OCELOT, Ocelot.createAttributes().build()).put(EntityType.PANDA, Panda.createAttributes().build()).put(EntityType.PARROT, Parrot.createAttributes().build()).put(EntityType.PHANTOM, Monster.createMonsterAttributes().build()).put(EntityType.PIG, Pig.createAttributes().build()).put(EntityType.PIGLIN, Piglin.createAttributes().build()).put(EntityType.PIGLIN_BRUTE, PiglinBrute.createAttributes().build()).put(EntityType.PILLAGER, Pillager.createAttributes().build()).put(EntityType.PLAYER, Player.createAttributes().build()).put(EntityType.POLAR_BEAR, PolarBear.createAttributes().build()).put(EntityType.PUFFERFISH, AbstractFish.createAttributes().build()).put(EntityType.RABBIT, Rabbit.createAttributes().build()).put(EntityType.RAVAGER, Ravager.createAttributes().build()).put(EntityType.SALMON, AbstractFish.createAttributes().build()).put(EntityType.SHEEP, Sheep.createAttributes().build()).put(EntityType.SHULKER, Shulker.createAttributes().build()).put(EntityType.SILVERFISH, Silverfish.createAttributes().build()).put(EntityType.SKELETON, AbstractSkeleton.createAttributes().build()).put(EntityType.SKELETON_HORSE, SkeletonHorse.createAttributes().build()).put(EntityType.SLIME, Monster.createMonsterAttributes().build()).put(EntityType.SNIFFER, Sniffer.createAttributes().build()).put(EntityType.SNOW_GOLEM, SnowGolem.createAttributes().build()).put(EntityType.SPIDER, Spider.createAttributes().build()).put(EntityType.SQUID, Squid.createAttributes().build()).put(EntityType.STRAY, AbstractSkeleton.createAttributes().build()).put(EntityType.STRIDER, Strider.createAttributes().build()).put(EntityType.TADPOLE, Tadpole.createAttributes().build()).put(EntityType.TRADER_LLAMA, Llama.createAttributes().build()).put(EntityType.TROPICAL_FISH, AbstractFish.createAttributes().build()).put(EntityType.TURTLE, Turtle.createAttributes().build()).put(EntityType.VEX, Vex.createAttributes().build()).put(EntityType.VILLAGER, Villager.createAttributes().build()).put(EntityType.VINDICATOR, Vindicator.createAttributes().build()).put(EntityType.WARDEN, Warden.createAttributes().build()).put(EntityType.WANDERING_TRADER, Mob.createMobAttributes().build()).put(EntityType.WITCH, Witch.createAttributes().build()).put(EntityType.WITHER, WitherBoss.createAttributes().build()).put(EntityType.WITHER_SKELETON, AbstractSkeleton.createAttributes().build()).put(EntityType.WOLF, Wolf.createAttributes().build()).put(EntityType.ZOGLIN, Zoglin.createAttributes().build()).put(EntityType.ZOMBIE, Zombie.createAttributes().build()).put(EntityType.ZOMBIE_HORSE, ZombieHorse.createAttributes().build()).put(EntityType.ZOMBIE_VILLAGER, Zombie.createAttributes().build()).put(EntityType.ZOMBIFIED_PIGLIN, ZombifiedPiglin.createAttributes().build()).build();
+ private static final Map, AttributeSupplier> SUPPLIERS = ImmutableMap., AttributeSupplier>builder()
-+ .put(EntityType.ALLAY, Allay.createAttributes().build())
-+ .put(EntityType.ARMOR_STAND, LivingEntity.createLivingAttributes().build())
-+ .put(EntityType.AXOLOTL, Axolotl.createAttributes().build())
-+ .put(EntityType.BAT, Bat.createAttributes().build())
-+ .put(EntityType.BEE, Bee.createAttributes().build())
-+ .put(EntityType.BLAZE, Blaze.createAttributes().build())
-+ .put(EntityType.CAT, Cat.createAttributes().build())
-+ .put(EntityType.CAMEL, Camel.createAttributes().build())
-+ .put(EntityType.CAVE_SPIDER, CaveSpider.createCaveSpider().build())
-+ .put(EntityType.CHICKEN, Chicken.createAttributes().build())
-+ .put(EntityType.COD, AbstractFish.createAttributes().build())
-+ .put(EntityType.COW, Cow.createAttributes().build())
-+ .put(EntityType.CREEPER, Creeper.createAttributes().build())
-+ .put(EntityType.DOLPHIN, Dolphin.createAttributes().build())
-+ .put(EntityType.DONKEY, AbstractChestedHorse.createBaseChestedHorseAttributes().build())
-+ .put(EntityType.DROWNED, Zombie.createAttributes().build())
-+ .put(EntityType.ELDER_GUARDIAN, ElderGuardian.createAttributes().build())
-+ .put(EntityType.ENDERMAN, EnderMan.createAttributes().build())
-+ .put(EntityType.ENDERMITE, Endermite.createAttributes().build())
-+ .put(EntityType.ENDER_DRAGON, EnderDragon.createAttributes().build())
-+ .put(EntityType.EVOKER, Evoker.createAttributes().build())
-+ .put(EntityType.FOX, Fox.createAttributes().build())
-+ .put(EntityType.FROG, Frog.createAttributes().build())
-+ .put(EntityType.GHAST, Ghast.createAttributes().build())
-+ .put(EntityType.GIANT, Giant.createAttributes().build())
-+ .put(EntityType.GLOW_SQUID, GlowSquid.createAttributes().build())
-+ .put(EntityType.GOAT, Goat.createAttributes().build())
-+ .put(EntityType.GUARDIAN, Guardian.createAttributes().build())
-+ .put(EntityType.HOGLIN, Hoglin.createAttributes().build())
-+ .put(EntityType.HORSE, AbstractHorse.createBaseHorseAttributes().build())
-+ .put(EntityType.HUSK, Zombie.createAttributes().build())
-+ .put(EntityType.ILLUSIONER, Illusioner.createAttributes().build())
-+ .put(EntityType.IRON_GOLEM, IronGolem.createAttributes().build())
-+ .put(EntityType.LLAMA, Llama.createAttributes().build())
-+ .put(EntityType.MAGMA_CUBE, MagmaCube.createAttributes().build())
-+ .put(EntityType.MOOSHROOM, Cow.createAttributes().build())
-+ .put(EntityType.MULE, AbstractChestedHorse.createBaseChestedHorseAttributes().build())
-+ .put(EntityType.OCELOT, Ocelot.createAttributes().build())
-+ .put(EntityType.PANDA, Panda.createAttributes().build())
-+ .put(EntityType.PARROT, Parrot.createAttributes().build())
-+ .put(EntityType.PHANTOM, net.minecraft.world.entity.monster.Phantom.createAttributes().build()) // Purpur
-+ .put(EntityType.PIG, Pig.createAttributes().build())
-+ .put(EntityType.PIGLIN, Piglin.createAttributes().build())
-+ .put(EntityType.PIGLIN_BRUTE, PiglinBrute.createAttributes().build())
-+ .put(EntityType.PILLAGER, Pillager.createAttributes().build())
-+ .put(EntityType.PLAYER, Player.createAttributes().build())
-+ .put(EntityType.POLAR_BEAR, PolarBear.createAttributes().build())
-+ .put(EntityType.PUFFERFISH, AbstractFish.createAttributes().build())
-+ .put(EntityType.RABBIT, Rabbit.createAttributes().build())
-+ .put(EntityType.RAVAGER, Ravager.createAttributes().build())
-+ .put(EntityType.SALMON, AbstractFish.createAttributes().build())
-+ .put(EntityType.SHEEP, Sheep.createAttributes().build())
-+ .put(EntityType.SHULKER, Shulker.createAttributes().build())
-+ .put(EntityType.SILVERFISH, Silverfish.createAttributes().build())
-+ .put(EntityType.SKELETON, AbstractSkeleton.createAttributes().build())
-+ .put(EntityType.SKELETON_HORSE, SkeletonHorse.createAttributes().build())
-+ .put(EntityType.SLIME, Monster.createMonsterAttributes().build())
-+ .put(EntityType.SNIFFER, Sniffer.createAttributes().build())
-+ .put(EntityType.SNOW_GOLEM, SnowGolem.createAttributes().build())
-+ .put(EntityType.SPIDER, Spider.createAttributes().build())
-+ .put(EntityType.SQUID, Squid.createAttributes().build())
-+ .put(EntityType.STRAY, AbstractSkeleton.createAttributes().build())
-+ .put(EntityType.STRIDER, Strider.createAttributes().build())
-+ .put(EntityType.TADPOLE, Tadpole.createAttributes().build())
-+ .put(EntityType.TRADER_LLAMA, Llama.createAttributes().build())
-+ .put(EntityType.TROPICAL_FISH, AbstractFish.createAttributes().build())
-+ .put(EntityType.TURTLE, Turtle.createAttributes().build())
-+ .put(EntityType.VEX, Vex.createAttributes().build())
-+ .put(EntityType.VILLAGER, Villager.createAttributes().build())
-+ .put(EntityType.VINDICATOR, Vindicator.createAttributes().build())
-+ .put(EntityType.WARDEN, Warden.createAttributes().build())
-+ .put(EntityType.WANDERING_TRADER, Mob.createMobAttributes().build())
-+ .put(EntityType.WITCH, Witch.createAttributes().build())
-+ .put(EntityType.WITHER, WitherBoss.createAttributes().build())
-+ .put(EntityType.WITHER_SKELETON, AbstractSkeleton.createAttributes().build())
-+ .put(EntityType.WOLF, Wolf.createAttributes().build())
-+ .put(EntityType.ZOGLIN, Zoglin.createAttributes().build())
-+ .put(EntityType.ZOMBIE, Zombie.createAttributes().build())
-+ .put(EntityType.ZOMBIE_HORSE, ZombieHorse.createAttributes().build())
-+ .put(EntityType.ZOMBIE_VILLAGER, Zombie.createAttributes().build())
-+ .put(EntityType.ZOMBIFIED_PIGLIN, ZombifiedPiglin.createAttributes().build()).build();
++ .put(EntityType.ALLAY, Allay.createAttributes().build())
++ .put(EntityType.ARMOR_STAND, LivingEntity.createLivingAttributes().build())
++ .put(EntityType.AXOLOTL, Axolotl.createAttributes().build())
++ .put(EntityType.BAT, Bat.createAttributes().build())
++ .put(EntityType.BEE, Bee.createAttributes().build())
++ .put(EntityType.BLAZE, Blaze.createAttributes().build())
++ .put(EntityType.CAT, Cat.createAttributes().build())
++ .put(EntityType.CAMEL, Camel.createAttributes().build())
++ .put(EntityType.CAVE_SPIDER, CaveSpider.createCaveSpider().build())
++ .put(EntityType.CHICKEN, Chicken.createAttributes().build())
++ .put(EntityType.COD, AbstractFish.createAttributes().build())
++ .put(EntityType.COW, Cow.createAttributes().build())
++ .put(EntityType.CREEPER, Creeper.createAttributes().build())
++ .put(EntityType.DOLPHIN, Dolphin.createAttributes().build())
++ .put(EntityType.DONKEY, AbstractChestedHorse.createBaseChestedHorseAttributes().build())
++ .put(EntityType.DROWNED, Zombie.createAttributes().build())
++ .put(EntityType.ELDER_GUARDIAN, ElderGuardian.createAttributes().build())
++ .put(EntityType.ENDERMAN, EnderMan.createAttributes().build())
++ .put(EntityType.ENDERMITE, Endermite.createAttributes().build())
++ .put(EntityType.ENDER_DRAGON, EnderDragon.createAttributes().build())
++ .put(EntityType.EVOKER, Evoker.createAttributes().build())
++ .put(EntityType.BREEZE, Breeze.createAttributes().build())
++ .put(EntityType.FOX, Fox.createAttributes().build())
++ .put(EntityType.FROG, Frog.createAttributes().build())
++ .put(EntityType.GHAST, Ghast.createAttributes().build())
++ .put(EntityType.GIANT, Giant.createAttributes().build())
++ .put(EntityType.GLOW_SQUID, GlowSquid.createAttributes().build())
++ .put(EntityType.GOAT, Goat.createAttributes().build())
++ .put(EntityType.GUARDIAN, Guardian.createAttributes().build())
++ .put(EntityType.HOGLIN, Hoglin.createAttributes().build())
++ .put(EntityType.HORSE, AbstractHorse.createBaseHorseAttributes().build())
++ .put(EntityType.HUSK, Zombie.createAttributes().build())
++ .put(EntityType.ILLUSIONER, Illusioner.createAttributes().build())
++ .put(EntityType.IRON_GOLEM, IronGolem.createAttributes().build())
++ .put(EntityType.LLAMA, Llama.createAttributes().build())
++ .put(EntityType.MAGMA_CUBE, MagmaCube.createAttributes().build())
++ .put(EntityType.MOOSHROOM, Cow.createAttributes().build())
++ .put(EntityType.MULE, AbstractChestedHorse.createBaseChestedHorseAttributes().build())
++ .put(EntityType.OCELOT, Ocelot.createAttributes().build())
++ .put(EntityType.PANDA, Panda.createAttributes().build())
++ .put(EntityType.PARROT, Parrot.createAttributes().build())
++ .put(EntityType.PHANTOM, net.minecraft.world.entity.monster.Phantom.createAttributes().build()) // Purpur
++ .put(EntityType.PIG, Pig.createAttributes().build())
++ .put(EntityType.PIGLIN, Piglin.createAttributes().build())
++ .put(EntityType.PIGLIN_BRUTE, PiglinBrute.createAttributes().build())
++ .put(EntityType.PILLAGER, Pillager.createAttributes().build())
++ .put(EntityType.PLAYER, Player.createAttributes().build())
++ .put(EntityType.POLAR_BEAR, PolarBear.createAttributes().build())
++ .put(EntityType.PUFFERFISH, AbstractFish.createAttributes().build())
++ .put(EntityType.RABBIT, Rabbit.createAttributes().build())
++ .put(EntityType.RAVAGER, Ravager.createAttributes().build())
++ .put(EntityType.SALMON, AbstractFish.createAttributes().build())
++ .put(EntityType.SHEEP, Sheep.createAttributes().build())
++ .put(EntityType.SHULKER, Shulker.createAttributes().build())
++ .put(EntityType.SILVERFISH, Silverfish.createAttributes().build())
++ .put(EntityType.SKELETON, AbstractSkeleton.createAttributes().build())
++ .put(EntityType.SKELETON_HORSE, SkeletonHorse.createAttributes().build())
++ .put(EntityType.SLIME, Monster.createMonsterAttributes().build())
++ .put(EntityType.SNIFFER, Sniffer.createAttributes().build())
++ .put(EntityType.SNOW_GOLEM, SnowGolem.createAttributes().build())
++ .put(EntityType.SPIDER, Spider.createAttributes().build())
++ .put(EntityType.SQUID, Squid.createAttributes().build())
++ .put(EntityType.STRAY, AbstractSkeleton.createAttributes().build())
++ .put(EntityType.STRIDER, Strider.createAttributes().build())
++ .put(EntityType.TADPOLE, Tadpole.createAttributes().build())
++ .put(EntityType.TRADER_LLAMA, Llama.createAttributes().build())
++ .put(EntityType.TROPICAL_FISH, AbstractFish.createAttributes().build())
++ .put(EntityType.TURTLE, Turtle.createAttributes().build())
++ .put(EntityType.VEX, Vex.createAttributes().build())
++ .put(EntityType.VILLAGER, Villager.createAttributes().build())
++ .put(EntityType.VINDICATOR, Vindicator.createAttributes().build())
++ .put(EntityType.WARDEN, Warden.createAttributes().build())
++ .put(EntityType.WANDERING_TRADER, Mob.createMobAttributes().build())
++ .put(EntityType.WITCH, Witch.createAttributes().build())
++ .put(EntityType.WITHER, WitherBoss.createAttributes().build())
++ .put(EntityType.WITHER_SKELETON, AbstractSkeleton.createAttributes().build())
++ .put(EntityType.WOLF, Wolf.createAttributes().build())
++ .put(EntityType.ZOGLIN, Zoglin.createAttributes().build())
++ .put(EntityType.ZOMBIE, Zombie.createAttributes().build())
++ .put(EntityType.ZOMBIE_HORSE, ZombieHorse.createAttributes().build())
++ .put(EntityType.ZOMBIE_VILLAGER, Zombie.createAttributes().build())
++ .put(EntityType.ZOMBIFIED_PIGLIN, ZombifiedPiglin.createAttributes().build()).build();
public static AttributeSupplier getSupplier(EntityType extends LivingEntity> type) {
return SUPPLIERS.get(type);
@@ -527,10 +526,10 @@ index 7df56705a4a0de2dc4ff7ab133fc26612c219162..384bed4505b6cabb1ae151cd2c4eb5e5
--this.lookAtCooldown;
this.getYRotD().ifPresent((yaw) -> {
diff --git a/src/main/java/net/minecraft/world/entity/ambient/Bat.java b/src/main/java/net/minecraft/world/entity/ambient/Bat.java
-index 2c91fe46355c9a201507de5577f693ed4f5fb974..e184d2a89a89d4bf77a32a2d610175c5bbd38a03 100644
+index 6b614818b14ecfc8fc82b523eeb7e21fdf9bf1ba..74b28d8a27b702896906603e7a39b91c79561ac5 100644
--- a/src/main/java/net/minecraft/world/entity/ambient/Bat.java
+++ b/src/main/java/net/minecraft/world/entity/ambient/Bat.java
-@@ -18,6 +18,7 @@ import net.minecraft.world.entity.EntityDimensions;
+@@ -19,6 +19,7 @@ import net.minecraft.world.entity.EntityDimensions;
import net.minecraft.world.entity.EntityType;
import net.minecraft.world.entity.Mob;
import net.minecraft.world.entity.MobSpawnType;
@@ -538,7 +537,7 @@ index 2c91fe46355c9a201507de5577f693ed4f5fb974..e184d2a89a89d4bf77a32a2d610175c5
import net.minecraft.world.entity.Pose;
import net.minecraft.world.entity.ai.attributes.AttributeSupplier;
import net.minecraft.world.entity.ai.attributes.Attributes;
-@@ -43,12 +44,59 @@ public class Bat extends AmbientCreature {
+@@ -46,12 +47,59 @@ public class Bat extends AmbientCreature {
public Bat(EntityType extends Bat> type, Level world) {
super(type, world);
@@ -597,8 +596,8 @@ index 2c91fe46355c9a201507de5577f693ed4f5fb974..e184d2a89a89d4bf77a32a2d610175c5
+
@Override
public boolean isFlapping() {
- return !this.isResting() && this.tickCount % Bat.TICKS_PER_FLAP == 0;
-@@ -98,7 +146,7 @@ public class Bat extends AmbientCreature {
+ return !this.isResting() && (float) this.tickCount % 10.0F == 0.0F;
+@@ -101,7 +149,7 @@ public class Bat extends AmbientCreature {
protected void pushEntities() {}
public static AttributeSupplier.Builder createAttributes() {
@@ -607,7 +606,7 @@ index 2c91fe46355c9a201507de5577f693ed4f5fb974..e184d2a89a89d4bf77a32a2d610175c5
}
public boolean isResting() {
-@@ -130,6 +178,14 @@ public class Bat extends AmbientCreature {
+@@ -134,6 +182,14 @@ public class Bat extends AmbientCreature {
@Override
protected void customServerAiStep() {
@@ -679,7 +678,7 @@ index 2249fc6dd98afb8d52623b5864955fdd3b3fc042..2ccfaab0a02cf5ff9779e250fb79a75a
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 9a7956befc346e1b58f064213800fd099a052fc6..ef056d4431388a49b24f63524ee246e506d80540 100644
+index a87a34b0c4c8e5d0cf079025c230b1434c919b54..8f906101afa436b891f4a751b184d6eb89668948 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Bee.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Bee.java
@@ -43,6 +43,7 @@ import net.minecraft.world.entity.EntityType;
@@ -780,7 +779,7 @@ index 9a7956befc346e1b58f064213800fd099a052fc6..ef056d4431388a49b24f63524ee246e5
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));
-@@ -881,16 +932,16 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal {
+@@ -888,16 +939,16 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal {
}
}
@@ -965,7 +964,7 @@ index 3cdd9f379c7e2d46ea47c9ef55b121c93ec0bb4a..b0cff23aa6f841ad291437964ea5bebb
// CraftBukkit end
diff --git a/src/main/java/net/minecraft/world/entity/animal/Dolphin.java b/src/main/java/net/minecraft/world/entity/animal/Dolphin.java
-index c528cb7c18650863eaf8e2c6c0d9276c02712cc9..3f81b9d3c0758d20b3f9421a6bf41599e107b5e1 100644
+index e555fd8ca61e1ce7a52ecd475cc3ea11dedcab08..e818cf94d0a7def1f0abc8519e3b8ff4e7918aef 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Dolphin.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Dolphin.java
@@ -82,14 +82,82 @@ public class Dolphin extends WaterAnimal {
@@ -1052,7 +1051,7 @@ index c528cb7c18650863eaf8e2c6c0d9276c02712cc9..3f81b9d3c0758d20b3f9421a6bf41599
@Nullable
@Override
public SpawnGroupData finalizeSpawn(ServerLevelAccessor world, DifficultyInstance difficulty, MobSpawnType spawnReason, @Nullable SpawnGroupData entityData, @Nullable CompoundTag entityNbt) {
-@@ -164,6 +232,7 @@ public class Dolphin extends WaterAnimal {
+@@ -159,6 +227,7 @@ public class Dolphin extends WaterAnimal {
protected void registerGoals() {
this.goalSelector.addGoal(0, new BreathAirGoal(this));
this.goalSelector.addGoal(0, new TryFindWaterGoal(this));
@@ -1060,7 +1059,7 @@ index c528cb7c18650863eaf8e2c6c0d9276c02712cc9..3f81b9d3c0758d20b3f9421a6bf41599
this.goalSelector.addGoal(1, new Dolphin.DolphinSwimToTreasureGoal(this));
this.goalSelector.addGoal(2, new Dolphin.DolphinSwimWithPlayerGoal(this, 4.0D));
this.goalSelector.addGoal(4, new RandomSwimmingGoal(this, 1.0D, 10));
-@@ -174,6 +243,7 @@ public class Dolphin extends WaterAnimal {
+@@ -169,6 +238,7 @@ public class Dolphin extends WaterAnimal {
this.goalSelector.addGoal(8, new Dolphin.PlayWithItemsGoal());
this.goalSelector.addGoal(8, new FollowBoatGoal(this));
this.goalSelector.addGoal(9, new AvoidEntityGoal<>(this, Guardian.class, 8.0F, 1.0D, 1.0D));
@@ -1068,7 +1067,7 @@ index c528cb7c18650863eaf8e2c6c0d9276c02712cc9..3f81b9d3c0758d20b3f9421a6bf41599
this.targetSelector.addGoal(1, (new HurtByTargetGoal(this, new Class[]{Guardian.class})).setAlertOthers());
}
-@@ -225,7 +295,7 @@ public class Dolphin extends WaterAnimal {
+@@ -220,7 +290,7 @@ public class Dolphin extends WaterAnimal {
@Override
protected boolean canRide(Entity entity) {
@@ -1077,7 +1076,7 @@ index c528cb7c18650863eaf8e2c6c0d9276c02712cc9..3f81b9d3c0758d20b3f9421a6bf41599
}
@Override
-@@ -260,6 +330,11 @@ public class Dolphin extends WaterAnimal {
+@@ -255,6 +325,11 @@ public class Dolphin extends WaterAnimal {
@Override
public void tick() {
super.tick();
@@ -1090,7 +1089,7 @@ index c528cb7c18650863eaf8e2c6c0d9276c02712cc9..3f81b9d3c0758d20b3f9421a6bf41599
this.setAirSupply(this.getMaxAirSupply());
} else {
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 9e2af80c6a87f5849710266149cbca8cabfad4f8..b5f1d79787a7dbc8fddaa47fdeec1b224b409d19 100644
+index d17c69a857f083350cc9e9ec2b5dbe0a1482c85f..86c7b7d3c340372a5c33f8a848a274240c0e8554 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Fox.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Fox.java
@@ -144,6 +144,44 @@ public class Fox extends Animal implements VariantHolder {
@@ -1441,10 +1440,10 @@ index 17e42c49fe6f1696a0b0b4b2537cabfe565692e5..61af090813936bac334a487c21e9e67f
}
}
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 397264d31992fd43bd57736c25693ae001330b6d..a3cb82e65ea344de1889762f638e72fcf0a44714 100644
+index 4c34edc55fa0e136ccf49a3aef001f413274dfac..521ce86afafe329de97c0ef8e95fb503c999edda 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Parrot.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Parrot.java
-@@ -130,12 +130,68 @@ public class Parrot extends ShoulderRidingEntity implements VariantHolder type, Level world) {
super(type, world);
@@ -1514,7 +1513,7 @@ index 397264d31992fd43bd57736c25693ae001330b6d..a3cb82e65ea344de1889762f638e72fc
@Nullable
@Override
public SpawnGroupData finalizeSpawn(ServerLevelAccessor world, DifficultyInstance difficulty, MobSpawnType spawnReason, @Nullable SpawnGroupData entityData, @Nullable CompoundTag entityNbt) {
-@@ -154,8 +210,10 @@ public class Parrot extends ShoulderRidingEntity implements VariantHolder brainProvider() {
return Brain.provider(Allay.MEMORY_TYPES, Allay.SENSOR_TYPES);
-@@ -225,7 +260,7 @@ public class Allay extends PathfinderMob implements InventoryCarrier, VibrationS
+@@ -224,6 +259,7 @@ public class Allay extends PathfinderMob implements InventoryCarrier, VibrationS
@Override
protected void customServerAiStep() {
this.level().getProfiler().push("allayBrain");
-- if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish
-+ if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider
++ //if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider // Purpur - TODO: Pufferfish
this.getBrain().tick((ServerLevel) this.level(), this);
this.level().getProfiler().pop();
this.level().getProfiler().push("allayActivityUpdate");
diff --git a/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java b/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java
-index b4793b88688bd568a428aa520e880f0038de45a7..d1dd2cda473bb2294dc10c66c13eac8591ea4d5b 100644
+index 387006271c246362b0df1bfcadca7b7096660003..12fc57798dae50ffdd6118202309c872ab6b332d 100644
--- a/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java
+++ b/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java
@@ -98,6 +98,23 @@ public class Axolotl extends Animal implements LerpingModel, VariantHolder getModelRotationValues() {
return this.modelRotationValues;
-@@ -283,8 +300,7 @@ public class Axolotl extends Animal implements LerpingModel, VariantHolder {
@@ -2365,16 +2367,15 @@ index c8e3d47b3f2dc919cca8ad397095437f1da6c762..3098f90ef97f69dbaf482ce0acd0c0c7
@Override
protected Brain.Provider brainProvider() {
return Brain.provider(MEMORY_TYPES, SENSOR_TYPES);
-@@ -168,7 +217,7 @@ public class Frog extends Animal implements VariantHolder {
+@@ -162,6 +211,7 @@ public class Frog extends Animal implements VariantHolder {
@Override
protected void customServerAiStep() {
this.level().getProfiler().push("frogBrain");
-- if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish
-+ if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider
++ // if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider // Purpur - TODO: Pufferfish
this.getBrain().tick((ServerLevel)this.level(), this);
this.level().getProfiler().pop();
this.level().getProfiler().push("frogActivityUpdate");
-@@ -354,7 +403,7 @@ public class Frog extends Animal implements VariantHolder {
+@@ -347,7 +397,7 @@ public class Frog extends Animal implements VariantHolder {
return world.getBlockState(pos.below()).is(BlockTags.FROGS_SPAWNABLE_ON) && isBrightEnoughToSpawn(world, pos);
}
@@ -2384,7 +2385,7 @@ index c8e3d47b3f2dc919cca8ad397095437f1da6c762..3098f90ef97f69dbaf482ce0acd0c0c7
super(entity);
}
diff --git a/src/main/java/net/minecraft/world/entity/animal/frog/Tadpole.java b/src/main/java/net/minecraft/world/entity/animal/frog/Tadpole.java
-index 6ed4ac06c76b8d0d6e8db778cade15dbd1e3e5f5..af8438ae8c805d3276ef2d82eb39b08880fcc8a1 100644
+index 4aeab90e778629c355189dfe79c39c4b21f5f5ac..e46475c2d44923167da7c654cb8af6b6278c7149 100644
--- a/src/main/java/net/minecraft/world/entity/animal/frog/Tadpole.java
+++ b/src/main/java/net/minecraft/world/entity/animal/frog/Tadpole.java
@@ -45,13 +45,50 @@ public class Tadpole extends AbstractFish {
@@ -2439,17 +2440,17 @@ index 6ed4ac06c76b8d0d6e8db778cade15dbd1e3e5f5..af8438ae8c805d3276ef2d82eb39b088
@Override
protected PathNavigation createNavigation(Level world) {
return new WaterBoundPathNavigation(this, world);
-@@ -81,7 +118,7 @@ public class Tadpole extends AbstractFish {
+@@ -80,7 +117,7 @@ public class Tadpole extends AbstractFish {
@Override
protected void customServerAiStep() {
this.level().getProfiler().push("tadpoleBrain");
-- if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish
-+ if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider
- this.getBrain().tick((ServerLevel) this.level(), this);
+- this.getBrain().tick((ServerLevel) this.level(), this);
++ // if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider // Purpur - TODO: Pufferfish
this.level().getProfiler().pop();
this.level().getProfiler().push("tadpoleActivityUpdate");
+ TadpoleAi.updateActivity(this);
diff --git a/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java b/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java
-index ff12ba2b79cb2e7e0bfd0e3b58ff6cb9e770092b..fef3b7d193d20c4fdd50b38c6a0371f05165a49d 100644
+index 111a244087e24f25ba8524a46a228da10cd9498a..e48ff5d0592f0d91974a49fd7ed1d0ee97172abe 100644
--- a/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java
+++ b/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java
@@ -92,6 +92,23 @@ public class Goat extends Animal {
@@ -2476,17 +2477,16 @@ index ff12ba2b79cb2e7e0bfd0e3b58ff6cb9e770092b..fef3b7d193d20c4fdd50b38c6a0371f0
@Override
protected Brain.Provider brainProvider() {
return Brain.provider(Goat.MEMORY_TYPES, Goat.SENSOR_TYPES);
-@@ -195,7 +212,7 @@ public class Goat extends Animal {
+@@ -194,6 +211,7 @@ public class Goat extends Animal {
@Override
protected void customServerAiStep() {
this.level().getProfiler().push("goatBrain");
-- if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish
-+ if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider
++ // if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider // Purpur - TODO: Pufferfish
this.getBrain().tick((ServerLevel) this.level(), this);
this.level().getProfiler().pop();
this.level().getProfiler().push("goatActivityUpdate");
diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/AbstractHorse.java b/src/main/java/net/minecraft/world/entity/animal/horse/AbstractHorse.java
-index a0628b9d74c29d02bfba583edf7ee6f2cde2cff6..73db73bb5b47f586ce32249458268e4b7cda2003 100644
+index 63bbb5723f587788a65cc1cdac4cea94d96f254b..a96deee06d209dfe86a66b14166671d1dc924e11 100644
--- a/src/main/java/net/minecraft/world/entity/animal/horse/AbstractHorse.java
+++ b/src/main/java/net/minecraft/world/entity/animal/horse/AbstractHorse.java
@@ -149,12 +149,22 @@ public abstract class AbstractHorse extends Animal implements ContainerListener,
@@ -2647,10 +2647,10 @@ index a6601f70890f90691923c0e6a9f10ea597ccabc2..ae7bcfa608d8bdd2a2320618225294de
protected SoundEvent getAmbientSound() {
return SoundEvents.MULE_AMBIENT;
diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/SkeletonHorse.java b/src/main/java/net/minecraft/world/entity/animal/horse/SkeletonHorse.java
-index 92d170dd0155a7a5879de4a320cdc03bb66d8887..0318297ed96a640932728d704fa273c4d126e034 100644
+index 41596d9c2e8e6c91f77b1bbe3ccf828708b6b970..6e7b7d2e9ccf67f9df458dc30cfea7242dc212ac 100644
--- a/src/main/java/net/minecraft/world/entity/animal/horse/SkeletonHorse.java
+++ b/src/main/java/net/minecraft/world/entity/animal/horse/SkeletonHorse.java
-@@ -31,6 +31,13 @@ public class SkeletonHorse extends AbstractHorse {
+@@ -35,6 +35,13 @@ public class SkeletonHorse extends AbstractHorse {
super(type, world);
}
@@ -2664,7 +2664,7 @@ index 92d170dd0155a7a5879de4a320cdc03bb66d8887..0318297ed96a640932728d704fa273c4
public static AttributeSupplier.Builder createAttributes() {
return createBaseHorseAttributes().add(Attributes.MAX_HEALTH, 15.0D).add(Attributes.MOVEMENT_SPEED, (double)0.2F);
}
-@@ -42,6 +49,7 @@ public class SkeletonHorse extends AbstractHorse {
+@@ -54,6 +61,7 @@ public class SkeletonHorse extends AbstractHorse {
@Override
protected void addBehaviourGoals() {
@@ -2706,10 +2706,10 @@ index b016f53c6644c6411b3a91e09049892131187179..5fc37e2322188e0db12f7679e40b1a3d
public boolean isTraderLlama() {
return true;
diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/ZombieHorse.java b/src/main/java/net/minecraft/world/entity/animal/horse/ZombieHorse.java
-index 7f8bbacf00498a2ed6a13760266df993a289c2dd..8c5a083f3db046709a38355343ad7e5ab45779b5 100644
+index 2f7f1f01c5e99266e66f7b8324fc94d2130ea9a4..cc19e9cc90789a5170d1cf3e004a3a452aad8b20 100644
--- a/src/main/java/net/minecraft/world/entity/animal/horse/ZombieHorse.java
+++ b/src/main/java/net/minecraft/world/entity/animal/horse/ZombieHorse.java
-@@ -22,6 +22,18 @@ public class ZombieHorse extends AbstractHorse {
+@@ -26,6 +26,18 @@ public class ZombieHorse extends AbstractHorse {
super(type, world);
}
@@ -2728,7 +2728,7 @@ index 7f8bbacf00498a2ed6a13760266df993a289c2dd..8c5a083f3db046709a38355343ad7e5a
public static AttributeSupplier.Builder createAttributes() {
return createBaseHorseAttributes().add(Attributes.MAX_HEALTH, 15.0D).add(Attributes.MOVEMENT_SPEED, (double)0.2F);
}
-@@ -64,6 +76,7 @@ public class ZombieHorse extends AbstractHorse {
+@@ -76,6 +88,7 @@ public class ZombieHorse extends AbstractHorse {
@Override
protected void addBehaviourGoals() {
@@ -2792,7 +2792,7 @@ index a6f3fba3b02b0b4d2a4e9e5205301c6f52d0188a..4eebfc27ded55e4d764d04f35d3e9c9e
protected void defineSynchedData() {
}
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 a288180da1996103eb7dc3bb87b4615f86630bb8..5568e97b604925c4e5a57067b032077f8507533e 100644
+index f56bb431be7d5f1a1b8edec41af1f3a28289316d..a6feb1cf892050068ea2f30a0c785818afb47d20 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
@@ -107,6 +107,7 @@ public class EnderDragon extends Mob implements Enemy {
@@ -2803,11 +2803,10 @@ index a288180da1996103eb7dc3bb87b4615f86630bb8..5568e97b604925c4e5a57067b032077f
public EnderDragon(EntityType extends EnderDragon> entitytypes, Level world) {
super(EntityType.ENDER_DRAGON, world);
-@@ -128,7 +129,37 @@ public class EnderDragon extends Mob implements Enemy {
- this.noPhysics = true;
+@@ -129,6 +130,38 @@ public class EnderDragon extends Mob implements Enemy {
this.noCulling = true;
this.phaseManager = new EnderDragonPhaseManager(this);
-- this.explosionSource = new Explosion(world, this, null, null, Double.NaN, Double.NaN, Double.NaN, Float.NaN, true, Explosion.BlockInteraction.DESTROY); // CraftBukkit
+ this.explosionSource = new Explosion(world, this, null, null, Double.NaN, Double.NaN, Double.NaN, Float.NaN, true, Explosion.BlockInteraction.DESTROY, ParticleTypes.EXPLOSION, ParticleTypes.EXPLOSION_EMITTER, SoundEvents.GENERIC_EXPLODE); // CraftBukkit
+
+ // Purpur start
+ this.moveControl = new org.purpurmc.purpur.controller.FlyingMoveControllerWASD(this) {
@@ -2839,10 +2838,11 @@ index a288180da1996103eb7dc3bb87b4615f86630bb8..5568e97b604925c4e5a57067b032077f
+ @Override
+ public boolean dismountsUnderwater() {
+ return level().purpurConfig.useDismountsUnderwaterTag ? super.dismountsUnderwater() : !level().purpurConfig.enderDragonRidableInWater;
++ }
}
public void setDragonFight(EndDragonFight fight) {
-@@ -143,6 +174,17 @@ public class EnderDragon extends Mob implements Enemy {
+@@ -143,6 +176,17 @@ public class EnderDragon extends Mob implements Enemy {
return this.fightOrigin;
}
@@ -2860,7 +2860,7 @@ index a288180da1996103eb7dc3bb87b4615f86630bb8..5568e97b604925c4e5a57067b032077f
public static AttributeSupplier.Builder createAttributes() {
return Mob.createMobAttributes().add(Attributes.MAX_HEALTH, 200.0D);
}
-@@ -204,6 +246,37 @@ public class EnderDragon extends Mob implements Enemy {
+@@ -204,6 +248,37 @@ public class EnderDragon extends Mob implements Enemy {
@Override
public void aiStep() {
@@ -2898,7 +2898,7 @@ index a288180da1996103eb7dc3bb87b4615f86630bb8..5568e97b604925c4e5a57067b032077f
this.processFlappingMovement();
if (this.level().isClientSide) {
this.setHealth(this.getHealth());
-@@ -230,6 +303,8 @@ public class EnderDragon extends Mob implements Enemy {
+@@ -230,6 +305,8 @@ public class EnderDragon extends Mob implements Enemy {
float f;
if (this.isDeadOrDying()) {
@@ -2907,7 +2907,7 @@ index a288180da1996103eb7dc3bb87b4615f86630bb8..5568e97b604925c4e5a57067b032077f
float f1 = (this.random.nextFloat() - 0.5F) * 8.0F;
f = (this.random.nextFloat() - 0.5F) * 4.0F;
-@@ -242,9 +317,9 @@ public class EnderDragon extends Mob implements Enemy {
+@@ -242,9 +319,9 @@ public class EnderDragon extends Mob implements Enemy {
f = 0.2F / ((float) vec3d.horizontalDistance() * 10.0F + 1.0F);
f *= (float) Math.pow(2.0D, vec3d.y);
@@ -2919,7 +2919,7 @@ index a288180da1996103eb7dc3bb87b4615f86630bb8..5568e97b604925c4e5a57067b032077f
this.flapTime += f * 0.5F;
} else {
this.flapTime += f;
-@@ -278,7 +353,7 @@ public class EnderDragon extends Mob implements Enemy {
+@@ -278,7 +355,7 @@ public class EnderDragon extends Mob implements Enemy {
}
this.phaseManager.getCurrentPhase().doClientTick();
@@ -2928,7 +2928,7 @@ index a288180da1996103eb7dc3bb87b4615f86630bb8..5568e97b604925c4e5a57067b032077f
DragonPhaseInstance idragoncontroller = this.phaseManager.getCurrentPhase();
idragoncontroller.doServerTick();
-@@ -347,7 +422,7 @@ public class EnderDragon extends Mob implements Enemy {
+@@ -347,7 +424,7 @@ public class EnderDragon extends Mob implements Enemy {
this.tickPart(this.body, (double) (f11 * 0.5F), 0.0D, (double) (-f12 * 0.5F));
this.tickPart(this.wing1, (double) (f12 * 4.5F), 2.0D, (double) (f11 * 4.5F));
this.tickPart(this.wing2, (double) (f12 * -4.5F), 2.0D, (double) (f11 * -4.5F));
@@ -2937,7 +2937,7 @@ index a288180da1996103eb7dc3bb87b4615f86630bb8..5568e97b604925c4e5a57067b032077f
this.knockBack(this.level().getEntities((Entity) this, this.wing1.getBoundingBox().inflate(4.0D, 2.0D, 4.0D).move(0.0D, -2.0D, 0.0D), EntitySelector.NO_CREATIVE_OR_SPECTATOR));
this.knockBack(this.level().getEntities((Entity) this, this.wing2.getBoundingBox().inflate(4.0D, 2.0D, 4.0D).move(0.0D, -2.0D, 0.0D), EntitySelector.NO_CREATIVE_OR_SPECTATOR));
this.hurt(this.level().getEntities((Entity) this, this.head.getBoundingBox().inflate(1.0D), EntitySelector.NO_CREATIVE_OR_SPECTATOR));
-@@ -391,7 +466,7 @@ public class EnderDragon extends Mob implements Enemy {
+@@ -391,7 +468,7 @@ public class EnderDragon extends Mob implements Enemy {
}
if (!this.level().isClientSide) {
@@ -2947,7 +2947,7 @@ index a288180da1996103eb7dc3bb87b4615f86630bb8..5568e97b604925c4e5a57067b032077f
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 256598e058db1fd34d36390e45ab9903768343cb..e03a01940eb5a5d7a3924a5ad1214258ce0f4b46 100644
+index c9a4feb4a52c0eb621b120e5b8c18d0a74dae0cd..f0fa5f69985dde27d0e7dd1ed2c96d31137be647 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
@@ -84,16 +84,30 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob
@@ -3096,7 +3096,7 @@ index 256598e058db1fd34d36390e45ab9903768343cb..e03a01940eb5a5d7a3924a5ad1214258
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));
}
-@@ -263,6 +377,16 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob
+@@ -256,6 +370,16 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob
@Override
protected void customServerAiStep() {
@@ -3113,7 +3113,7 @@ index 256598e058db1fd34d36390e45ab9903768343cb..e03a01940eb5a5d7a3924a5ad1214258
int i;
if (this.getInvulnerableTicks() > 0) {
-@@ -583,11 +707,11 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob
+@@ -576,11 +700,11 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob
}
public int getAlternativeTarget(int headIndex) {
@@ -3370,7 +3370,7 @@ index fd1b5a1beea7594fa65decfdcccfa15781fc005b..66b2fdcda53fdfd278994dc16be3e120
}
// Paper end
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 991d728db2a3b64316fc2102cf3aee470327a62e..c64c88ddd929d49fcfc6ebc2d0030bc86c8ac337 100644
+index 485d14d71fb26e6e0d00a43da040bf63d696b66a..a72609b6b98ae730aa765b57275d2e32dbbb0eb6 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Drowned.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Drowned.java
@@ -68,6 +68,23 @@ public class Drowned extends Zombie implements RangedAttackMob {
@@ -3458,7 +3458,7 @@ index efc1d49c5bfea7d1674b8a9de2c8b617657eda0f..37afe706c5c453003ea96e62f376f45d
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 0d51f435f18f3f9d59a3241a0b7fa1c4af841b72..21e5102761876ceafce87fc824bf8392c354341a 100644
+index bd5996eef2d946e9d7765b6b315bc5951158810e..14c614dfdffd27756298b0105f0dbe139047e251 100644
--- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
+++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
@@ -98,9 +98,27 @@ public class EnderMan extends Monster implements NeutralMob {
@@ -3506,7 +3506,7 @@ index 0d51f435f18f3f9d59a3241a0b7fa1c4af841b72..21e5102761876ceafce87fc824bf8392
float f = this.getLightLevelDependentMagicValue();
if (f > 0.5F && this.level().canSeeSky(this.blockPosition()) && this.random.nextFloat() * 30.0F < (f - 0.4F) * 2.0F && this.tryEscape(com.destroystokyo.paper.event.entity.EndermanEscapeEvent.Reason.RUNAWAY)) { // Paper
-@@ -415,6 +434,7 @@ public class EnderMan extends Monster implements NeutralMob {
+@@ -409,6 +428,7 @@ public class EnderMan extends Monster implements NeutralMob {
public boolean hurt(DamageSource source, float amount) {
if (this.isInvulnerableTo(source)) {
return false;
@@ -3553,10 +3553,10 @@ index 66b6c55f72aec7e4e9dfa5417a46ba68dbb16a83..7fb02aab225a45e951ab1e7c6ba1c53f
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 7f0fbca7638bf89465bafed9d106813b86f0149b..a566824074850724023830f6b6fa3728d0b2aa99 100644
+index e67cb165a0d706d38e4970fb3d63f59a29808a76..937e5d59743f1e45e426ac34f301884f1ba6e197 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Evoker.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Evoker.java
-@@ -50,10 +50,28 @@ public class Evoker extends SpellcasterIllager {
+@@ -51,10 +51,28 @@ public class Evoker extends SpellcasterIllager {
this.xpReward = 10;
}
@@ -3585,7 +3585,7 @@ index 7f0fbca7638bf89465bafed9d106813b86f0149b..a566824074850724023830f6b6fa3728
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(4, new Evoker.EvokerSummonSpellGoal());
-@@ -62,6 +80,7 @@ public class Evoker extends SpellcasterIllager {
+@@ -63,6 +81,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));
this.goalSelector.addGoal(10, new LookAtPlayerGoal(this, Mob.class, 8.0F));
@@ -3707,7 +3707,7 @@ index 793c72bb7b86e404926085629121d6cad19a2740..198e3219e8f44eaea8ff1914c6c20efd
protected float getStandingEyeHeight(Pose pose, EntityDimensions dimensions) {
return 10.440001F;
diff --git a/src/main/java/net/minecraft/world/entity/monster/Guardian.java b/src/main/java/net/minecraft/world/entity/monster/Guardian.java
-index 45300f79cba6133d2a2eca706eae03ee3cd973c3..3a2ed35542c775a0712b3bec94b7292215e4fba5 100644
+index fd41ef66e2e12ec3a888bb376ef4363343914fcd..159821730981b78a973e58e7a69e5d3ae9abd44f 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Guardian.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Guardian.java
@@ -70,15 +70,36 @@ public class Guardian extends Monster {
@@ -3755,7 +3755,7 @@ index 45300f79cba6133d2a2eca706eae03ee3cd973c3..3a2ed35542c775a0712b3bec94b72922
this.targetSelector.addGoal(1, new NearestAttackableTargetGoal<>(this, LivingEntity.class, 10, true, false, new Guardian.GuardianAttackSelector(this)));
}
-@@ -352,7 +374,7 @@ public class Guardian extends Monster {
+@@ -347,7 +369,7 @@ public class Guardian extends Monster {
@Override
public void travel(Vec3 movementInput) {
if (this.isControlledByLocalInstance() && this.isInWater()) {
@@ -3764,7 +3764,7 @@ index 45300f79cba6133d2a2eca706eae03ee3cd973c3..3a2ed35542c775a0712b3bec94b72922
this.move(MoverType.SELF, this.getDeltaMovement());
this.setDeltaMovement(this.getDeltaMovement().scale(0.9D));
if (!this.isMoving() && this.getTarget() == null) {
-@@ -369,7 +391,7 @@ public class Guardian extends Monster {
+@@ -364,7 +386,7 @@ public class Guardian extends Monster {
return new Vector3f(0.0F, dimensions.height + 0.125F * scaleFactor, 0.0F);
}
@@ -3773,7 +3773,7 @@ index 45300f79cba6133d2a2eca706eae03ee3cd973c3..3a2ed35542c775a0712b3bec94b72922
private final Guardian guardian;
-@@ -378,8 +400,17 @@ public class Guardian extends Monster {
+@@ -373,8 +395,17 @@ public class Guardian extends Monster {
this.guardian = guardian;
}
@@ -3792,7 +3792,7 @@ index 45300f79cba6133d2a2eca706eae03ee3cd973c3..3a2ed35542c775a0712b3bec94b72922
if (this.operation == MoveControl.Operation.MOVE_TO && !this.guardian.getNavigation().isDone()) {
Vec3 vec3d = new Vec3(this.wantedX - this.guardian.getX(), this.wantedY - this.guardian.getY(), this.wantedZ - this.guardian.getZ());
double d0 = vec3d.length();
-@@ -390,7 +421,7 @@ public class Guardian extends Monster {
+@@ -385,7 +416,7 @@ public class Guardian extends Monster {
this.guardian.setYRot(this.rotlerp(this.guardian.getYRot(), f, 90.0F));
this.guardian.yBodyRot = this.guardian.getYRot();
@@ -3802,7 +3802,7 @@ index 45300f79cba6133d2a2eca706eae03ee3cd973c3..3a2ed35542c775a0712b3bec94b72922
this.guardian.setSpeed(f2);
diff --git a/src/main/java/net/minecraft/world/entity/monster/Husk.java b/src/main/java/net/minecraft/world/entity/monster/Husk.java
-index 8ef1e325d722ca36fc0fc36f1e5287d7002b9fb2..774c15a91b0e988364acc33b8516ef132bcc9464 100644
+index 72b8290bebe8ed9bc3c464b30cfe5d2d664310f5..bfc6dcafe79fa3bb6e450a23e91a772b41488561 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Husk.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Husk.java
@@ -24,6 +24,23 @@ public class Husk extends Zombie {
@@ -3827,7 +3827,7 @@ index 8ef1e325d722ca36fc0fc36f1e5287d7002b9fb2..774c15a91b0e988364acc33b8516ef13
+ // Purpur end
+
public static boolean checkHuskSpawnRules(EntityType type, ServerLevelAccessor world, MobSpawnType spawnReason, BlockPos pos, RandomSource random) {
- return checkMonsterSpawnRules(type, world, spawnReason, pos, random) && (spawnReason == MobSpawnType.SPAWNER || world.canSeeSky(pos));
+ return checkMonsterSpawnRules(type, world, spawnReason, pos, random) && (MobSpawnType.isSpawner(spawnReason) || world.canSeeSky(pos));
}
diff --git a/src/main/java/net/minecraft/world/entity/monster/Illusioner.java b/src/main/java/net/minecraft/world/entity/monster/Illusioner.java
index 63fce7e3d9f59f36e29bc827a46396d73143bb8b..f83f09f7568c44a1165aac73f7127c5d1af0478f 100644
@@ -4152,7 +4152,7 @@ index 0c11d9bef8f0129c541e30ad057612e881703b24..cfa324c6a75ac83cff4ba87034677d4e
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 8cb6f2d32c4b7a62ec1bdfeb8b661a1387cafe4b..eea85643a2cedb5fd1a08892aea82b96b935e408 100644
+index 06ab07fb5d8d0e2f97325890218a11fef551a0ba..7112789a74f90297277fc6175c912cac60c2ca01 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Shulker.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Shulker.java
@@ -97,12 +97,31 @@ public class Shulker extends AbstractGolem implements VariantHolder(this, Player.class, 10, true, false, (entityliving) -> {
return Math.abs(entityliving.getY() - this.getY()) <= 4.0D;
}));
-@@ -375,11 +412,12 @@ public class Slime extends Mob implements Enemy {
+@@ -378,11 +415,12 @@ public class Slime extends Mob implements Enemy {
}
@Override
@@ -4337,7 +4337,7 @@ index b14979ab7bed34a37fceff5589ecb789bab31318..cf81e9ade3200251ca3a25eb0e5ce7dc
}
@Nullable
-@@ -413,7 +451,7 @@ public class Slime extends Mob implements Enemy {
+@@ -416,7 +454,7 @@ public class Slime extends Mob implements Enemy {
return super.getDimensions(pose).scale(0.255F * (float) this.getSize());
}
@@ -4346,7 +4346,7 @@ index b14979ab7bed34a37fceff5589ecb789bab31318..cf81e9ade3200251ca3a25eb0e5ce7dc
private float yRot;
private int jumpDelay;
-@@ -432,21 +470,33 @@ public class Slime extends Mob implements Enemy {
+@@ -435,21 +473,33 @@ public class Slime extends Mob implements Enemy {
}
public void setWantedMovement(double speed) {
@@ -4383,7 +4383,7 @@ index b14979ab7bed34a37fceff5589ecb789bab31318..cf81e9ade3200251ca3a25eb0e5ce7dc
if (this.jumpDelay-- <= 0) {
this.jumpDelay = this.slime.getJumpDelay();
if (this.isAggressive) {
-@@ -463,7 +513,7 @@ public class Slime extends Mob implements Enemy {
+@@ -466,7 +516,7 @@ public class Slime extends Mob implements Enemy {
this.mob.setSpeed(0.0F);
}
} else {
@@ -4431,7 +4431,7 @@ index 6f12e342adf1a008709fd9a4fbbbe1da8ec31b83..5a578ab80853f8961afeec2aae76ed52
this.targetSelector.addGoal(2, new Spider.SpiderTargetGoal<>(this, Player.class));
this.targetSelector.addGoal(3, new Spider.SpiderTargetGoal<>(this, IronGolem.class));
diff --git a/src/main/java/net/minecraft/world/entity/monster/Stray.java b/src/main/java/net/minecraft/world/entity/monster/Stray.java
-index 118b636a44e4b062e812e433f603b039276337da..137ee6d1aa8ec334009b6fab21b9f30303ace45f 100644
+index 8185cef34b9300561a00f9e62b98f1aa818a3f5a..abd2c1accaa9b03fefab2d8c7f9132540ea9065e 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Stray.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Stray.java
@@ -21,6 +21,23 @@ public class Stray extends AbstractSkeleton {
@@ -4504,7 +4504,7 @@ index 61162ecd43dc5e6f7898daecdec49f444e6d869b..bfd69abf24d788b5e539498d56ade57f
if (flag && !this.isSilent()) {
this.level().playSound((Player) null, this.getX(), this.getY(), this.getZ(), SoundEvents.STRIDER_EAT, this.getSoundSource(), 1.0F, 1.0F + (this.random.nextFloat() - this.random.nextFloat()) * 0.2F);
diff --git a/src/main/java/net/minecraft/world/entity/monster/Vex.java b/src/main/java/net/minecraft/world/entity/monster/Vex.java
-index 90e577b1a89b02c38daff2845a63dafe5ed929e1..566fa6f2f26139e457584b6e73fd8609efbf67d7 100644
+index 30ea3f64234fd1fda8dada3c7fb12be0730322a8..841fba3edf697647f59d0485b751c83625cccc83 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Vex.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Vex.java
@@ -63,6 +63,50 @@ public class Vex extends Monster implements TraceableEntity {
@@ -4588,7 +4588,7 @@ index 90e577b1a89b02c38daff2845a63dafe5ed929e1..566fa6f2f26139e457584b6e73fd8609
}
@Override
-@@ -240,14 +286,14 @@ public class Vex extends Monster implements TraceableEntity {
+@@ -251,14 +297,14 @@ public class Vex extends Monster implements TraceableEntity {
return new Vector3f(0.0F, dimensions.height - 0.0625F * scaleFactor, 0.0F);
}
@@ -4605,7 +4605,7 @@ index 90e577b1a89b02c38daff2845a63dafe5ed929e1..566fa6f2f26139e457584b6e73fd8609
if (this.operation == MoveControl.Operation.MOVE_TO) {
Vec3 vec3d = new Vec3(this.wantedX - Vex.this.getX(), this.wantedY - Vex.this.getY(), this.wantedZ - Vex.this.getZ());
double d0 = vec3d.length();
-@@ -256,7 +302,7 @@ public class Vex extends Monster implements TraceableEntity {
+@@ -267,7 +313,7 @@ public class Vex extends Monster implements TraceableEntity {
this.operation = MoveControl.Operation.WAIT;
Vex.this.setDeltaMovement(Vex.this.getDeltaMovement().scale(0.5D));
} else {
@@ -4758,7 +4758,7 @@ index 11275a9ec6faa69c9f054683cb47312e443ba883..dc29e875c1e184c1c4553c127bb8c86d
this.level().getProfiler().pop();
this.updateActivity();
diff --git a/src/main/java/net/minecraft/world/entity/monster/Zombie.java b/src/main/java/net/minecraft/world/entity/monster/Zombie.java
-index 5fdad1600cc7a7c22d1d9a58b6b2dda605521b97..9f58059800ea9fa5e62bf801c60ec8255ab9fc87 100644
+index 753defa8f8b48d004a2a53b2fc322fd9c083d95e..1d5c60c08354bb64a6d671032c2e8b885ec4ca73 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Zombie.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Zombie.java
@@ -107,11 +107,30 @@ public class Zombie extends Monster {
@@ -4849,7 +4849,7 @@ index 1afe8a8694c1fd0bf43ce3c0c36a83fda9aec141..252d2994fac423ea1fef36bdc7c09778
public void setPersistentAngerTarget(@Nullable UUID angryAt) {
this.persistentAngerTarget = angryAt;
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 e703320717ff620a19ff76d1c10066117c9895d5..d040198ce528293ed95adcdb17ddf0acbc5a93e0 100644
+index 4257f2282152aee09533c9a2e53018d3e49effa4..e2ff79328877e417193849a81ae5342a5d0701e2 100644
--- a/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java
+++ b/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java
@@ -69,6 +69,23 @@ public class Hoglin extends Animal implements Enemy, HoglinBase {
@@ -4876,17 +4876,16 @@ index e703320717ff620a19ff76d1c10066117c9895d5..d040198ce528293ed95adcdb17ddf0ac
@Override
public boolean canBeLeashed(Player player) {
return !this.isLeashed();
-@@ -132,7 +149,7 @@ public class Hoglin extends Animal implements Enemy, HoglinBase {
+@@ -131,6 +148,7 @@ public class Hoglin extends Animal implements Enemy, HoglinBase {
@Override
protected void customServerAiStep() {
this.level().getProfiler().push("hoglinBrain");
-- if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish
-+ if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider
++ // if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider // Purpur - TODO: Pufferfish
this.getBrain().tick((ServerLevel)this.level(), this);
this.level().getProfiler().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 cfdc1650783d6855e0d4f33ec68aab48dbee09f0..f57d7fee1ece00aba9bc7b07dda8398e7acc73c3 100644
+index 6407ddef8442fce4f310ac4babf3e3de0dd5fc9a..89d2a5b17b7f948fff041d8aec51424b54d3ea49 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
@@ -4913,12 +4912,11 @@ index cfdc1650783d6855e0d4f33ec68aab48dbee09f0..f57d7fee1ece00aba9bc7b07dda8398e
@Override
public void addAdditionalSaveData(CompoundTag nbt) {
super.addAdditionalSaveData(nbt);
-@@ -304,7 +321,7 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento
+@@ -303,6 +320,7 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento
@Override
protected void customServerAiStep() {
this.level().getProfiler().push("piglinBrain");
-- if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish
-+ if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider
++ // if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider // Purpur - TODO: Pufferfish
this.getBrain().tick((ServerLevel) this.level(), this);
this.level().getProfiler().pop();
PiglinAi.updateActivity(this);
@@ -4959,10 +4957,10 @@ index e1be4a77fae0b9120781f460079269b85c993930..2d842c0dfce1c7e7229bd42b2a92c024
this.level().getProfiler().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 5e43912708f9074dee1bb351efa737a7e6796fc3..250af1ce7a93c2d2897f35c68fae319c9ba7d55d 100644
+index 9f1b7c629644931074293151ed58a523ca6d488c..53035057b715401381b4f5438c82a61fe6012a7e 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
-@@ -122,8 +122,32 @@ public class Warden extends Monster implements VibrationSystem {
+@@ -123,8 +123,32 @@ public class Warden extends Monster implements VibrationSystem {
this.setPathfindingMalus(BlockPathTypes.LAVA, 8.0F);
this.setPathfindingMalus(BlockPathTypes.DAMAGE_FIRE, 0.0F);
this.setPathfindingMalus(BlockPathTypes.DANGER_FIRE, 0.0F);
@@ -4995,7 +4993,7 @@ index 5e43912708f9074dee1bb351efa737a7e6796fc3..250af1ce7a93c2d2897f35c68fae319c
@Override
public Packet getAddEntityPacket() {
return new ClientboundAddEntityPacket(this, this.hasPose(Pose.EMERGING) ? 1 : 0);
-@@ -397,19 +421,16 @@ public class Warden extends Monster implements VibrationSystem {
+@@ -396,19 +420,16 @@ public class Warden extends Monster implements VibrationSystem {
@Contract("null->false")
public boolean canTargetEntity(@Nullable Entity entity) {
@@ -5019,10 +5017,10 @@ index 5e43912708f9074dee1bb351efa737a7e6796fc3..250af1ce7a93c2d2897f35c68fae319c
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 2460768aaa7b8e6d183c03c1f0f2ccd6cb61a16f..b6665acd9d9c799eedfb246354d2a74ba65391f3 100644
+index 11935e5b16324af572b07c5b173708f5a91f8289..42cfa847b29d8f265c7059bf4f93319ce938ee05 100644
--- a/src/main/java/net/minecraft/world/entity/npc/Villager.java
+++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java
-@@ -157,6 +157,28 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
+@@ -155,6 +155,28 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
this.setVillagerData(this.getVillagerData().setType(type).setProfession(VillagerProfession.NONE));
}
@@ -5051,16 +5049,21 @@ index 2460768aaa7b8e6d183c03c1f0f2ccd6cb61a16f..b6665acd9d9c799eedfb246354d2a74b
@Override
public Brain getBrain() {
return (Brain) super.getBrain(); // CraftBukkit - decompile error
-@@ -258,7 +280,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
+@@ -254,7 +276,12 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
+ protected void customServerAiStep(final boolean inactive) {
// Paper end
this.level().getProfiler().push("villagerBrain");
- // Pufferfish start
-- if (!inactive && this.behaviorTick++ % this.activatedPriority == 0) {
-+ if (!inactive && (getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) { // Purpur - only use brain if no rider
- this.getBrain().tick((ServerLevel) this.level(), this); // Paper
- }
- // Pufferfish end
-@@ -318,7 +340,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
+- if (!inactive) this.getBrain().tick((ServerLevel) this.level(), this); // Paper
++ // Purpur start
++ // if (!inactive && (getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) { // Purpur - only use brain if no rider // Purpur - TODO: Pufferfish
++ if (!inactive && (getRider() == null || !this.isControllable())) { // Purpur - only use brain if no rider
++ this.getBrain().tick((ServerLevel) this.level(), this); // Paper
++ }
++ // Purpur end
+ this.level().getProfiler().pop();
+ if (this.assignProfessionWhenSpawned) {
+ this.assignProfessionWhenSpawned = false;
+@@ -311,7 +338,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
if (!itemstack.is(Items.VILLAGER_SPAWN_EGG) && this.isAlive() && !this.isTrading() && !this.isSleeping()) {
if (this.isBaby()) {
this.setUnhappy();
@@ -5069,7 +5072,7 @@ index 2460768aaa7b8e6d183c03c1f0f2ccd6cb61a16f..b6665acd9d9c799eedfb246354d2a74b
} else {
boolean flag = this.getOffers().isEmpty();
-@@ -331,8 +353,9 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
+@@ -324,8 +351,9 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
}
if (flag) {
@@ -5120,10 +5123,10 @@ index 833563e237462ccfc1b730b8f5fb35340d0db854..2bed7b373813660139d2322dcd6b83f3
this.setTradingPlayer(player);
this.openTradingScreen(player, this.getDisplayName(), 1);
diff --git a/src/main/java/net/minecraft/world/entity/player/Player.java b/src/main/java/net/minecraft/world/entity/player/Player.java
-index 481c3e321cfc0f20bb1c4c6942b8bdbd23c06339..911a44ab096bf835709632921797a749ee0bc638 100644
+index 7f3466340891b4409d1399ebeb2ca865d77841cd..6e37874dc437285b26bd8e4ad3d3af8c39c38aa5 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,19 @@ public abstract class Player extends LivingEntity {
+@@ -194,6 +194,19 @@ public abstract class Player extends LivingEntity {
}
// CraftBukkit end
@@ -5160,24 +5163,11 @@ index 0bbe853f7df93f9dcd2b21d762939f8b6be069aa..7db9844083703944f59e112c6dc5e1a5
@Override
public void tick() {
super.tick();
-diff --git a/src/main/java/net/minecraft/world/entity/projectile/ProjectileUtil.java b/src/main/java/net/minecraft/world/entity/projectile/ProjectileUtil.java
-index cc0a3d9794d05b6bc6ab05f4f2ab8d83134b181d..e1f918d0bd2a70db1aba8bda8717149f58766825 100644
---- a/src/main/java/net/minecraft/world/entity/projectile/ProjectileUtil.java
-+++ b/src/main/java/net/minecraft/world/entity/projectile/ProjectileUtil.java
-@@ -33,7 +33,7 @@ public final class ProjectileUtil {
- return getHitResult(vec32, entity, predicate, vec3, level);
- }
-
-- private static HitResult getHitResult(Vec3 pos, Entity entity, Predicate predicate, Vec3 velocity, Level world) {
-+ public static HitResult getHitResult(Vec3 pos, Entity entity, Predicate predicate, Vec3 velocity, Level world) { // Purpur - private -> public
- Vec3 vec3 = pos.add(velocity);
- HitResult hitResult = world.clip(new ClipContext(pos, vec3, ClipContext.Block.COLLIDER, ClipContext.Fluid.NONE, entity));
- if (hitResult.getType() != HitResult.Type.MISS) {
diff --git a/src/main/java/net/minecraft/world/entity/projectile/WitherSkull.java b/src/main/java/net/minecraft/world/entity/projectile/WitherSkull.java
-index 06d1bdb9bd124b201c36d284c50d22bf50d3735a..937f57d8af629c4e913d7ccabf6adab15f91d3d0 100644
+index 78dd3365dc4d1265fc2102f740d75a384f5df5c5..4a2331c22a022881d66bcfd4134b0ffe421a0633 100644
--- a/src/main/java/net/minecraft/world/entity/projectile/WitherSkull.java
+++ b/src/main/java/net/minecraft/world/entity/projectile/WitherSkull.java
-@@ -109,6 +109,12 @@ public class WitherSkull extends AbstractHurtingProjectile {
+@@ -110,6 +110,12 @@ public class WitherSkull extends AbstractHurtingProjectile {
}
@@ -5191,10 +5181,10 @@ index 06d1bdb9bd124b201c36d284c50d22bf50d3735a..937f57d8af629c4e913d7ccabf6adab1
public boolean isPickable() {
return false;
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
-index 9f843b89dc20b91bf7243facee8486d525e4a1b3..4c5d6e37f7d56436119278bbfad503867d9ccddb 100644
+index aa4dbf91cf6da329fdcacbde98bb870eb48e8f5c..fed6671e518b2f1601bbf4154195a844fc3b0fd1 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
-@@ -1538,4 +1538,27 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
+@@ -1582,4 +1582,27 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
return this.getHandle().getScoreboardName();
}
// Paper end - entity scoreboard name
@@ -5223,7 +5213,7 @@ index 9f843b89dc20b91bf7243facee8486d525e4a1b3..4c5d6e37f7d56436119278bbfad50386
+ // Purpur end
}
diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
-index 64ae7cfe765ebe697a2cce1b71751e628d6f1662..1920c154b43711473cdf29aeb881a773b8ce45df 100644
+index e0f80414e01852b6f48c173dc2343ec928147e2f..2d3d10c8cbf8e88f2c897a476041a094b91fa0e2 100644
--- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
+++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
@@ -594,6 +594,15 @@ public class CraftEventFactory {
@@ -6392,7 +6382,7 @@ 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..af057c1d7fd74f3dd806c5ce7f8b0ad06cab7b8e
+index 0000000000000000000000000000000000000000..83dd3f982d5869e26748e6e0d0b38a3c7a08fe02
--- /dev/null
+++ b/src/main/java/org/purpurmc/purpur/entity/DolphinSpit.java
@@ -0,0 +1,99 @@
@@ -6437,7 +6427,7 @@ index 0000000000000000000000000000000000000000..af057c1d7fd74f3dd806c5ce7f8b0ad0
+ super_tick();
+
+ Vec3 mot = this.getDeltaMovement();
-+ HitResult hitResult = ProjectileUtil.getHitResult(this.position(), this, this::canHitEntity, mot, level());
++ HitResult hitResult = ProjectileUtil.getHitResultOnMoveVector(this, this::canHitEntity);
+
+ this.preOnHit(hitResult);
+
@@ -6497,7 +6487,7 @@ index 0000000000000000000000000000000000000000..af057c1d7fd74f3dd806c5ce7f8b0ad0
+}
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..1fd6412e332ea8ee82b19c108e113624e51d764b
+index 0000000000000000000000000000000000000000..8fa9b376682d9e8b1971a9f72b918c6dc6872d04
--- /dev/null
+++ b/src/main/java/org/purpurmc/purpur/entity/PhantomFlames.java
@@ -0,0 +1,114 @@
@@ -6545,7 +6535,7 @@ index 0000000000000000000000000000000000000000..1fd6412e332ea8ee82b19c108e113624
+ super_tick();
+
+ Vec3 mot = this.getDeltaMovement();
-+ HitResult hitResult = ProjectileUtil.getHitResult(this.position(), this, this::canHitEntity, mot, level());
++ HitResult hitResult = ProjectileUtil.getHitResultOnMoveVector(this, this::canHitEntity);
+
+ this.preOnHit(hitResult);
+
diff --git a/patches/server/0009-Configurable-entity-base-attributes.patch b/patches/server/0007-Configurable-entity-base-attributes.patch
similarity index 97%
rename from patches/server/0009-Configurable-entity-base-attributes.patch
rename to patches/server/0007-Configurable-entity-base-attributes.patch
index 6ec0ea05b..a0f1db9c2 100644
--- a/patches/server/0009-Configurable-entity-base-attributes.patch
+++ b/patches/server/0007-Configurable-entity-base-attributes.patch
@@ -5,13 +5,13 @@ 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 9501683d6a6239e7a053f9a40a377783232bbe8e..8b9efc0477f1d97414d12282bd9d10a7d2ec83a8 100644
+index 856803084d30cc4cbdb53bd6db15e7db5ea16154..4e21ff640261d95f7db1134793fb5e2e91015fd6 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
-@@ -156,7 +156,7 @@ import org.bukkit.plugin.PluginManager;
+@@ -157,7 +157,7 @@ import org.bukkit.plugin.PluginManager;
// CraftBukkit end
- public abstract class Entity implements Nameable, EntityAccess, CommandSource {
+ public abstract class Entity implements Nameable, EntityAccess, CommandSource, ScoreHolder {
-
+ public static javax.script.ScriptEngine scriptEngine = new javax.script.ScriptEngineManager().getEngineByName("rhino"); // Purpur
// CraftBukkit start
@@ -34,7 +34,7 @@ index 75c278b67ad2b78766efd8f89c4c2ca7eb7cdcb2..dc99e7f0e6f173c1313c0d5e9ea5dd6b
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 797ef036c3fb7a21fb3a2fbc6a7e307594ea1e11..c23bea8c82c3f4670ce736cb1375e1adb8aa7a05 100644
+index 629cfd889ebfbf79b06fc42d81d7e0839a927915..23a59cf45f89f3d4d9ac98aada26a9027c2485f0 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
@@ -287,6 +287,7 @@ public abstract class LivingEntity extends Entity implements Attackable {
@@ -55,10 +55,10 @@ index 797ef036c3fb7a21fb3a2fbc6a7e307594ea1e11..c23bea8c82c3f4670ce736cb1375e1ad
return this.brain;
}
diff --git a/src/main/java/net/minecraft/world/entity/ambient/Bat.java b/src/main/java/net/minecraft/world/entity/ambient/Bat.java
-index e184d2a89a89d4bf77a32a2d610175c5bbd38a03..c283900e6c43fda62428a6e6d8b70e512458e779 100644
+index 74b28d8a27b702896906603e7a39b91c79561ac5..6aec149f450e0559c613dcc272ba48634d0083c0 100644
--- a/src/main/java/net/minecraft/world/entity/ambient/Bat.java
+++ b/src/main/java/net/minecraft/world/entity/ambient/Bat.java
-@@ -264,6 +264,18 @@ public class Bat extends AmbientCreature {
+@@ -268,6 +268,18 @@ public class Bat extends AmbientCreature {
}
}
@@ -78,10 +78,10 @@ index e184d2a89a89d4bf77a32a2d610175c5bbd38a03..c283900e6c43fda62428a6e6d8b70e51
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 ef056d4431388a49b24f63524ee246e506d80540..ee9a12a0285f43535b377e5aea2c3e9e5f64b496 100644
+index 8f906101afa436b891f4a751b184d6eb89668948..9496bf72eb4cda6c2675daabe5ad82e90d12e173 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Bee.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Bee.java
-@@ -471,6 +471,11 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal {
+@@ -478,6 +478,11 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal {
}
}
@@ -158,7 +158,7 @@ index b0cff23aa6f841ad291437964ea5bebb6395de84..f440eabffb1abe4c7370bf7badf6137a
protected void registerGoals() {
this.goalSelector.addGoal(0, new FloatGoal(this));
diff --git a/src/main/java/net/minecraft/world/entity/animal/Dolphin.java b/src/main/java/net/minecraft/world/entity/animal/Dolphin.java
-index 3f81b9d3c0758d20b3f9421a6bf41599e107b5e1..3db4ded84b8219262b24152f8d29576cdc660c76 100644
+index e818cf94d0a7def1f0abc8519e3b8ff4e7918aef..519e52b303cb9a2d4b1cae84d8436f2057003fcb 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Dolphin.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Dolphin.java
@@ -158,6 +158,11 @@ public class Dolphin extends WaterAnimal {
@@ -174,7 +174,7 @@ index 3f81b9d3c0758d20b3f9421a6bf41599e107b5e1..3db4ded84b8219262b24152f8d29576c
@Override
public SpawnGroupData finalizeSpawn(ServerLevelAccessor world, DifficultyInstance difficulty, MobSpawnType spawnReason, @Nullable SpawnGroupData entityData, @Nullable CompoundTag entityNbt) {
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 b5f1d79787a7dbc8fddaa47fdeec1b224b409d19..f24434f577d44cef0816ebbdc88de37f449b8e13 100644
+index 86c7b7d3c340372a5c33f8a848a274240c0e8554..21c0431dd8abc06773b6a8ae76908a4227225326 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Fox.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Fox.java
@@ -182,6 +182,11 @@ public class Fox extends Animal implements VariantHolder {
@@ -206,7 +206,7 @@ index 6815d7350a82c6d32f60aa6116466ebd06a920f9..95ff109511c97d603aeaf9e73c49397a
@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 9a84599457bbd14314e0c4f3fa8bf30bec8da347..e3fe62285ced917de6817916e99483e117008670 100644
+index fdd99d6a9db230f9f68b0a78f41a16e7658c4c16..a2f77d030856056409f2d888e80818eeb6a46ee6 100644
--- a/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java
+++ b/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java
@@ -80,6 +80,11 @@ public class MushroomCow extends Cow implements Shearable, VariantHolder type, ServerLevelAccessor world, MobSpawnType spawnReason, BlockPos pos, RandomSource random) {
- return checkMonsterSpawnRules(type, world, spawnReason, pos, random) && (spawnReason == MobSpawnType.SPAWNER || world.canSeeSky(pos));
+ return checkMonsterSpawnRules(type, world, spawnReason, pos, random) && (MobSpawnType.isSpawner(spawnReason) || world.canSeeSky(pos));
}
diff --git a/src/main/java/net/minecraft/world/entity/monster/Illusioner.java b/src/main/java/net/minecraft/world/entity/monster/Illusioner.java
index f83f09f7568c44a1165aac73f7127c5d1af0478f..0f3e6c19e55a18cde71f3cb84c1e92b433ebcb7f 100644
@@ -1123,7 +1123,7 @@ index cfa324c6a75ac83cff4ba87034677d4e9415189e..28795558000d76fd255faabc79cc4560
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 eea85643a2cedb5fd1a08892aea82b96b935e408..fde2a69f489e12d9c1ccee4522258d2746dcb2e0 100644
+index 7112789a74f90297277fc6175c912cac60c2ca01..5bdeac3ed1bbc70d0620a548f03792e5df212629 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Shulker.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Shulker.java
@@ -114,6 +114,11 @@ public class Shulker extends AbstractGolem implements VariantHolder brainProvider() {
return Brain.provider(MEMORY_TYPES, SENSOR_TYPES);
diff --git a/src/main/java/net/minecraft/world/entity/monster/Zombie.java b/src/main/java/net/minecraft/world/entity/monster/Zombie.java
-index 9f58059800ea9fa5e62bf801c60ec8255ab9fc87..3948e9e56a260ee831fa17b0a4d4240a0bc8d26d 100644
+index 1d5c60c08354bb64a6d671032c2e8b885ec4ca73..f75900e33a08bd6eb13fd480fe62b49346f47bac 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Zombie.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Zombie.java
@@ -124,6 +124,11 @@ public class Zombie extends Monster {
@@ -1424,7 +1424,7 @@ index 252d2994fac423ea1fef36bdc7c09778203049cb..fa5fa58ee03243054a38475634a6aa67
@Nullable
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 d040198ce528293ed95adcdb17ddf0acbc5a93e0..22788892f7286f3fa6b40059b2bedaf0c6ec5ef3 100644
+index e2ff79328877e417193849a81ae5342a5d0701e2..3a98f2fab709cd83f853f59a5678fdd4b7bd70d3 100644
--- a/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java
+++ b/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java
@@ -86,6 +86,11 @@ public class Hoglin extends Animal implements Enemy, HoglinBase {
@@ -1440,7 +1440,7 @@ index d040198ce528293ed95adcdb17ddf0acbc5a93e0..22788892f7286f3fa6b40059b2bedaf0
public boolean canBeLeashed(Player player) {
return !this.isLeashed();
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 f57d7fee1ece00aba9bc7b07dda8398e7acc73c3..d9b1bde3ce458b7e50f7645d07ee578d13006a0a 100644
+index 89d2a5b17b7f948fff041d8aec51424b54d3ea49..7c1e3bdd68433319681c67251c82c6810e69dbcb 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,11 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento
@@ -1472,10 +1472,10 @@ index 2d842c0dfce1c7e7229bd42b2a92c024a4162b68..04e54c241078e6cd6419a21ba1bf913f
return Monster.createMonsterAttributes().add(Attributes.MAX_HEALTH, 50.0D).add(Attributes.MOVEMENT_SPEED, (double)0.35F).add(Attributes.ATTACK_DAMAGE, 7.0D);
}
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 b6665acd9d9c799eedfb246354d2a74ba65391f3..75738c810990a544225ef5eb5b94779c746899eb 100644
+index 42cfa847b29d8f265c7059bf4f93319ce938ee05..9351ab40c4bef3febcbb8b2c2b7a4391f56a25ef 100644
--- a/src/main/java/net/minecraft/world/entity/npc/Villager.java
+++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java
-@@ -179,6 +179,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
+@@ -177,6 +177,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
}
// Purpur end
diff --git a/patches/server/0010-Barrels-and-enderchests-6-rows.patch b/patches/server/0008-Barrels-and-enderchests-6-rows.patch
similarity index 95%
rename from patches/server/0010-Barrels-and-enderchests-6-rows.patch
rename to patches/server/0008-Barrels-and-enderchests-6-rows.patch
index bb6e8dc94..cee086bb8 100644
--- a/patches/server/0010-Barrels-and-enderchests-6-rows.patch
+++ b/patches/server/0008-Barrels-and-enderchests-6-rows.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Barrels and enderchests 6 rows
diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java
-index cd6bfaa8dc06c05ab25cbded645a1dbca725838c..837ef9a66921f881c5c94aa5f28746d9494d4a98 100644
+index 9a7b5c2bae8e3c1788068462d2f60665a8064a77..accce07f973962899696336c541403b6e5afb18a 100644
--- a/src/main/java/net/minecraft/server/players/PlayerList.java
+++ b/src/main/java/net/minecraft/server/players/PlayerList.java
-@@ -1185,6 +1185,27 @@ public abstract class PlayerList {
+@@ -1183,6 +1183,27 @@ public abstract class PlayerList {
player.getBukkitEntity().recalculatePermissions(); // CraftBukkit
this.server.getCommands().sendCommands(player);
} // Paper
@@ -37,10 +37,10 @@ index cd6bfaa8dc06c05ab25cbded645a1dbca725838c..837ef9a66921f881c5c94aa5f28746d9
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 911a44ab096bf835709632921797a749ee0bc638..3b4d9069ce877eba1adc330154eec5c178d82256 100644
+index 6e37874dc437285b26bd8e4ad3d3af8c39c38aa5..4495a3e7ea8f307cade39e42ac2aebf85a832537 100644
--- a/src/main/java/net/minecraft/world/entity/player/Player.java
+++ b/src/main/java/net/minecraft/world/entity/player/Player.java
-@@ -188,6 +188,7 @@ public abstract class Player extends LivingEntity {
+@@ -183,6 +183,7 @@ public abstract class Player extends LivingEntity {
public boolean affectsSpawning = true;
public net.kyori.adventure.util.TriState flyingFallDamage = net.kyori.adventure.util.TriState.NOT_SET;
// Paper end
@@ -108,10 +108,10 @@ index 4703f23316f82a1a942907b46d2d6dcb7d70ec37..162798f57a05b78121fa6c4fadf5adee
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 7385e91f32f070e86a4e0fd3d214f55d832c7979..7b73de87236a60ce7343c29ec147e1866b448ba3 100644
+index ddca14f1224327a738415fb8b37398d8df0aa9c8..fe3236295790b9e250486835176cae810160c33a 100644
--- a/src/main/java/net/minecraft/world/level/block/EnderChestBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/EnderChestBlock.java
-@@ -85,6 +85,34 @@ public class EnderChestBlock extends AbstractChestBlock i
+@@ -92,6 +92,34 @@ public class EnderChestBlock extends AbstractChestBlock i
EnderChestBlockEntity enderChestBlockEntity = (EnderChestBlockEntity)blockEntity;
playerEnderChestContainer.setActiveChest(enderChestBlockEntity);
player.openMenu(new SimpleMenuProvider((syncId, inventory, playerx) -> {
@@ -205,10 +205,10 @@ index 416aa989ebb18a8741cc9d605a1180ab830f6643..e38a0adf5463c48311ad08b8d2e5b5c2
@Override
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftContainer.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftContainer.java
-index b4bd318d61834d70d666577073f18e4c49ded113..a35f60b01b371673023bd23f47a8ddafd38787f2 100644
+index 977b77547f7ba62cef3640cf8d4f1c8e7cded53a..beae43e9b6fe447e7515d878ac175f461968768a 100644
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftContainer.java
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftContainer.java
-@@ -181,8 +181,19 @@ public class CraftContainer extends AbstractContainerMenu {
+@@ -184,8 +184,19 @@ public class CraftContainer extends AbstractContainerMenu {
case PLAYER:
case CHEST:
case ENDER_CHEST:
@@ -230,10 +230,10 @@ index b4bd318d61834d70d666577073f18e4c49ded113..a35f60b01b371673023bd23f47a8ddaf
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 471ae4458e7ea7c29d7551b32cec98180fbccd4e..23db63c78e9fcf86cd498b3ed36ca50253c2fe97 100644
+index 3b0d3e9a067fccb10122c273aaf658ba240aa716..9b7fd460d3393e07970c66fec7f35a918675cd58 100644
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventory.java
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventory.java
-@@ -83,7 +83,7 @@ public class CraftInventory implements Inventory {
+@@ -84,7 +84,7 @@ public class CraftInventory implements Inventory {
@Override
public void setContents(ItemStack[] items) {
diff --git a/patches/server/0011-Llama-API.patch b/patches/server/0009-Llama-API.patch
similarity index 97%
rename from patches/server/0011-Llama-API.patch
rename to patches/server/0009-Llama-API.patch
index 45f03e0d6..7039475bf 100644
--- a/patches/server/0011-Llama-API.patch
+++ b/patches/server/0009-Llama-API.patch
@@ -25,7 +25,7 @@ index 21725aee29e9120d1c7e1e19f91c21a73a28844f..849f0c7c6d13df00d90211a48d8b56ab
double d = this.llama.distanceToSqr(this.llama.getCaravanHead());
if (d > 676.0D) {
diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java b/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java
-index 278c33b7de4472a746cdbc1faaa68e05592777bc..15a08abe94cb97de1450ff42cfb924a537b9eb5c 100644
+index 8c8c135e9bc707ae8e2aad249302109023f6fea3..7b329fa3af99742d83eca7825e2da3b6e55431ee 100644
--- a/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java
+++ b/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java
@@ -75,6 +75,7 @@ public class Llama extends AbstractChestedHorse implements VariantHolder -1) {
-@@ -390,6 +404,12 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
+@@ -393,6 +407,12 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
}
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 925ecb3d737f2e0e58bfdf17e2e48334188dce28..3fa2997cefdff8957dd71aa87b4c2ee9
this.player.resetLastActionTime(); // CraftBukkit - SPIGOT-854
this.disconnect(Component.translatable("multiplayer.disconnect.idling"), org.bukkit.event.player.PlayerKickEvent.Cause.IDLING); // Paper - kick event cause
}
-@@ -638,6 +658,8 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
+@@ -641,6 +661,8 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
this.lastYaw = to.getYaw();
this.lastPitch = to.getPitch();
@@ -124,7 +124,7 @@ index 925ecb3d737f2e0e58bfdf17e2e48334188dce28..3fa2997cefdff8957dd71aa87b4c2ee9
// Skip the first time we do this
if (true) { // Spigot - don't skip any move events
Location oldTo = to.clone();
-@@ -1468,7 +1490,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
+@@ -1494,7 +1516,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
if (!event.isAllowed()) {
flag2 = true; // Paper - diff on change, this should be moved wrongly
if (event.getLogWarning())
@@ -133,7 +133,7 @@ index 925ecb3d737f2e0e58bfdf17e2e48334188dce28..3fa2997cefdff8957dd71aa87b4c2ee9
}
// Paper end
}
-@@ -1530,6 +1552,8 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
+@@ -1556,6 +1578,8 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
this.lastYaw = to.getYaw();
this.lastPitch = to.getPitch();
@@ -165,10 +165,10 @@ index 823efad652d8ff9e96b99375b102fef6f017716e..caa8a69bde0c212c36dd990a67836ac2
}
// CraftBukkit start
diff --git a/src/main/java/net/minecraft/world/entity/EntitySelector.java b/src/main/java/net/minecraft/world/entity/EntitySelector.java
-index 3ff999734d14e2b6e7828e117f5ee32a60c26bc1..cfa9607241c3e69777ffc317206996c2f783437a 100644
+index 2986c3b1c9dd7f3a00ed7f25b25bfc2b513b35eb..8d199ed2f0b2f50a57f9854cc14005489ecb2976 100644
--- a/src/main/java/net/minecraft/world/entity/EntitySelector.java
+++ b/src/main/java/net/minecraft/world/entity/EntitySelector.java
-@@ -39,6 +39,7 @@ public final class EntitySelector {
+@@ -40,6 +40,7 @@ public final class EntitySelector {
return net.minecraft.util.Mth.clamp(serverPlayer.getStats().getValue(net.minecraft.stats.Stats.CUSTOM.get(net.minecraft.stats.Stats.TIME_SINCE_REST)), 1, Integer.MAX_VALUE) >= playerInsomniaTicks;
};
// Paper end
@@ -177,7 +177,7 @@ index 3ff999734d14e2b6e7828e117f5ee32a60c26bc1..cfa9607241c3e69777ffc317206996c2
private EntitySelector() {}
// Paper start
diff --git a/src/main/java/net/minecraft/world/entity/ai/targeting/TargetingConditions.java b/src/main/java/net/minecraft/world/entity/ai/targeting/TargetingConditions.java
-index ac5e5676b194a2a99e5cf53eb89c1152cac963b8..872454743f6dedc27519a13566559195c47cc9f8 100644
+index c157309ac78e7af084d3acb6e8b2bcd469a39d5e..631b6f26c96e7de65c8ab5377f1b82c7f56df96c 100644
--- a/src/main/java/net/minecraft/world/entity/ai/targeting/TargetingConditions.java
+++ b/src/main/java/net/minecraft/world/entity/ai/targeting/TargetingConditions.java
@@ -64,6 +64,10 @@ public class TargetingConditions {
@@ -192,10 +192,10 @@ index ac5e5676b194a2a99e5cf53eb89c1152cac963b8..872454743f6dedc27519a13566559195
if (baseEntity == null) {
if (this.isCombat && (!targetEntity.canBeSeenAsEnemy() || targetEntity.level().getDifficulty() == Difficulty.PEACEFUL)) {
diff --git a/src/main/java/net/minecraft/world/entity/player/Player.java b/src/main/java/net/minecraft/world/entity/player/Player.java
-index 3b4d9069ce877eba1adc330154eec5c178d82256..524689a3e487e303d04e32ac43487fb96c43ca7b 100644
+index 4495a3e7ea8f307cade39e42ac2aebf85a832537..0e69d0f1599d3b0e704b654dc296465b56cde2fb 100644
--- a/src/main/java/net/minecraft/world/entity/player/Player.java
+++ b/src/main/java/net/minecraft/world/entity/player/Player.java
-@@ -194,6 +194,13 @@ public abstract class Player extends LivingEntity {
+@@ -189,6 +189,13 @@ public abstract class Player extends LivingEntity {
public boolean fauxSleeping;
public int oldLevel = -1;
@@ -223,10 +223,10 @@ index aaa07fcd4b32fe0de88142ab30378327a01f1729..bc8555d21d418f9da37cc089904f7cb0
if (range < 0.0D || d < range * range) {
return true;
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-index df5b588309f181c84336060d3668880b74ea7490..e1efdda967847af492f069861ef19dd307bc76a1 100644
+index 67bb2541fff19f0a48c7b1289e34749ece632d56..62e5bdd889392f6e2da73d093ff77ac355a4ea3c 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-@@ -519,10 +519,15 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+@@ -531,10 +531,15 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
@Override
public void setPlayerListName(String name) {
@@ -243,7 +243,7 @@ index df5b588309f181c84336060d3668880b74ea7490..e1efdda967847af492f069861ef19dd3
for (ServerPlayer player : (List) this.server.getHandle().players) {
if (player.getBukkitEntity().canSee(this)) {
player.connection.send(new ClientboundPlayerInfoUpdatePacket(ClientboundPlayerInfoUpdatePacket.Action.UPDATE_DISPLAY_NAME, this.getHandle()));
-@@ -3309,5 +3314,20 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+@@ -3321,5 +3326,20 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
public boolean usesPurpurClient() {
return getHandle().purpurClient;
}
@@ -317,10 +317,10 @@ index e248395ad5f5f012aeefecf367d54f90cade0996..70f53ccb22de2c05c9ead68f8bd29d0b
public boolean untamedTamablesAreRidable = true;
public boolean useNightVisionWhenRiding = false;
diff --git a/src/main/java/org/spigotmc/ActivationRange.java b/src/main/java/org/spigotmc/ActivationRange.java
-index c0333ba8e57cd284bb8ab15181da6b39d55872f9..282a57df4e2e5708e9cfd9c76b1d7de2a8a23900 100644
+index 59103744ac6beeb12719fdefcda54eeff498229e..30050800118a474dfd0a23cb66fd55de4c65ca1e 100644
--- a/src/main/java/org/spigotmc/ActivationRange.java
+++ b/src/main/java/org/spigotmc/ActivationRange.java
-@@ -203,6 +203,7 @@ public class ActivationRange
+@@ -199,6 +199,7 @@ public class ActivationRange
continue;
}
diff --git a/patches/server/0013-Bring-back-server-name.patch b/patches/server/0011-Bring-back-server-name.patch
similarity index 82%
rename from patches/server/0013-Bring-back-server-name.patch
rename to patches/server/0011-Bring-back-server-name.patch
index d2a28231e..03f7f1f2f 100644
--- a/patches/server/0013-Bring-back-server-name.patch
+++ b/patches/server/0011-Bring-back-server-name.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Bring back server name
diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServerProperties.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServerProperties.java
-index c5598adb8cbcbcf7277c2fd4dd72c243d44d9700..cda4544ae96a4fcb5c6c4483df67a59f1b53fd27 100644
+index 1643186bcb2caf5d29fd551afd35830726dbb80a..d53e0b67d847dfec2f4b118b5ca3f0ed1dc29ad6 100644
--- a/src/main/java/net/minecraft/server/dedicated/DedicatedServerProperties.java
+++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServerProperties.java
-@@ -58,6 +58,7 @@ public class DedicatedServerProperties extends Settings Pufferfish - Pufferfish > // Paper - Paper > // Spigot - Spigot > // CraftBukkit - cb > vanilla!
-+ return org.purpurmc.purpur.PurpurConfig.serverModName; // Purpur - Purpur > Pufferfish - Pufferfish > // Paper - Paper > // Spigot - Spigot > // CraftBukkit - cb > vanilla!
+- return "Purpur"; // Purpur - Purpur > // Paper - Paper > // Spigot - Spigot > // CraftBukkit - cb > vanilla!
++ return org.purpurmc.purpur.PurpurConfig.serverModName; // Purpur - Purpur > // Paper - Paper > // Spigot - Spigot > // CraftBukkit - cb > vanilla!
}
public SystemReport fillSystemReport(SystemReport details) {
diff --git a/patches/server/0015-LivingEntity-safeFallDistance.patch b/patches/server/0013-LivingEntity-safeFallDistance.patch
similarity index 91%
rename from patches/server/0015-LivingEntity-safeFallDistance.patch
rename to patches/server/0013-LivingEntity-safeFallDistance.patch
index 4e7917ba7..674fec03c 100644
--- a/patches/server/0015-LivingEntity-safeFallDistance.patch
+++ b/patches/server/0013-LivingEntity-safeFallDistance.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] LivingEntity safeFallDistance
diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
-index 2c3d968c457ae23ec0d0eebe9c70b492b0960bfb..54037ad72135c120b1260b32380d2aabdde34ef4 100644
+index 23a59cf45f89f3d4d9ac98aada26a9027c2485f0..a8d09f76361cc3146aaeba72b7338049b30eb2cb 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
@@ -253,6 +253,7 @@ public abstract class LivingEntity extends Entity implements Attackable {
@@ -34,7 +34,7 @@ index 2c3d968c457ae23ec0d0eebe9c70b492b0960bfb..54037ad72135c120b1260b32380d2aab
double d7 = Math.min((double) (0.2F + f / 15.0F), 2.5D);
int i = (int) (150.0D * d7);
-@@ -2097,7 +2098,7 @@ public abstract class LivingEntity extends Entity implements Attackable {
+@@ -2068,7 +2069,7 @@ public abstract class LivingEntity extends Entity implements Attackable {
MobEffectInstance mobeffect = this.getEffect(MobEffects.JUMP);
float f2 = mobeffect == null ? 0.0F : (float) (mobeffect.getAmplifier() + 1);
@@ -44,7 +44,7 @@ index 2c3d968c457ae23ec0d0eebe9c70b492b0960bfb..54037ad72135c120b1260b32380d2aab
}
diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/AbstractHorse.java b/src/main/java/net/minecraft/world/entity/animal/horse/AbstractHorse.java
-index a27e99ee6d8d2406d141dc1537c7098f43a29318..bab9e413bd55d48e3e54bee66a6cd5be19a8f415 100644
+index c4adf0222cd43e86c1791c3ff84e2e7ac8327e7b..27c86c474af331510b07eedc5aae430136235acc 100644
--- a/src/main/java/net/minecraft/world/entity/animal/horse/AbstractHorse.java
+++ b/src/main/java/net/minecraft/world/entity/animal/horse/AbstractHorse.java
@@ -386,7 +386,7 @@ public abstract class AbstractHorse extends Animal implements ContainerListener,
@@ -69,10 +69,10 @@ index 2a30499fd6f4a1340f6911f0f7f079bcbe8576a3..c3c0fbe71c9af1125c80698865cb9eaf
// Purpur start
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
-index 8add75d7652ac489183f8f8cb513081272f8bc7f..bebece47fc2064118ca39d0e511f71ba70a68e45 100644
+index 3373df9e09bd29096c4b9c039c06256e4ecf4154..a8f5f8f05973523945941e55c0c28e1e546a6a1f 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
-@@ -1115,4 +1115,16 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity {
+@@ -1120,4 +1120,16 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity {
getHandle().knockback(strength, directionX, directionZ);
};
// Paper end
diff --git a/patches/server/0016-Lagging-threshold.patch b/patches/server/0014-Lagging-threshold.patch
similarity index 84%
rename from patches/server/0016-Lagging-threshold.patch
rename to patches/server/0014-Lagging-threshold.patch
index bf092656c..33a5340c1 100644
--- a/patches/server/0016-Lagging-threshold.patch
+++ b/patches/server/0014-Lagging-threshold.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Lagging threshold
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
-index 393cf73f3897f32f4a17bdc36b0d8881605817ed..89adc016610c13fee02b7dba35fcc37679afcec9 100644
+index 6339131c21398928e771a3172603da3a9c02561b..c442cf9a6856715ab7c404eb8e287bd67e20ae06 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
-@@ -301,6 +301,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop implements FeatureElement, EntityTypeT
+@@ -318,6 +318,16 @@ public class EntityType implements FeatureElement, EntityTypeT
return (EntityType) Registry.register(BuiltInRegistries.ENTITY_TYPE, id, (EntityType) type.build(id)); // CraftBukkit - decompile error
}
@@ -25,7 +25,7 @@ index 2561e74ffdf595a9b6ae13dcd738662c772db442..518b927dac087000b5049bc61d43a46a
public static ResourceLocation getKey(EntityType> type) {
return BuiltInRegistries.ENTITY_TYPE.getKey(type);
}
-@@ -531,6 +541,16 @@ public class EntityType implements FeatureElement, EntityTypeT
+@@ -533,6 +543,16 @@ public class EntityType implements FeatureElement, EntityTypeT
return this.category;
}
@@ -43,22 +43,23 @@ index 2561e74ffdf595a9b6ae13dcd738662c772db442..518b927dac087000b5049bc61d43a46a
if (this.descriptionId == null) {
this.descriptionId = Util.makeDescriptionId("entity", BuiltInRegistries.ENTITY_TYPE.getKey(this));
diff --git a/src/main/java/net/minecraft/world/item/SpawnEggItem.java b/src/main/java/net/minecraft/world/item/SpawnEggItem.java
-index 741719301e6fc91a598e74342810c4185e6fde26..6fbff9c02fbabf03c9c649a9ea6128021081f9cd 100644
+index 4f10f801dc126e9135432939b6663770c0e7a0bc..8f89a1c7e6214f549490ecf75afbdd72b897b120 100644
--- a/src/main/java/net/minecraft/world/item/SpawnEggItem.java
+++ b/src/main/java/net/minecraft/world/item/SpawnEggItem.java
-@@ -68,6 +68,15 @@ public class SpawnEggItem extends Item {
- SpawnerBlockEntity tileentitymobspawner = (SpawnerBlockEntity) tileentity;
- EntityType> entitytypes = this.getType(itemstack.getTag());
+@@ -68,6 +68,16 @@ public class SpawnEggItem extends Item {
+ Spawner spawner = (Spawner) tileentity;
-+ // Purpur start
-+ org.bukkit.block.Block bukkitBlock = world.getWorld().getBlockAt(blockposition.getX(), blockposition.getY(), blockposition.getZ());
-+ org.purpurmc.purpur.event.PlayerSetSpawnerTypeWithEggEvent event = new org.purpurmc.purpur.event.PlayerSetSpawnerTypeWithEggEvent((org.bukkit.entity.Player) context.getPlayer().getBukkitEntity(), bukkitBlock, (org.bukkit.block.CreatureSpawner) bukkitBlock.getState(), org.bukkit.entity.EntityType.fromName(entitytypes.getName()));
-+ if (!event.callEvent()) {
-+ return InteractionResult.FAIL;
-+ }
-+ entitytypes = EntityType.getFromBukkitType(event.getEntityType());
-+ // Purpur end
+ entitytypes = this.getType(itemstack.getTag());
+
- tileentitymobspawner.setEntityId(entitytypes, world.getRandom());
- tileentity.setChanged();
- world.sendBlockUpdated(blockposition, iblockdata, iblockdata, 3);
++ // Purpur start
++ org.bukkit.block.Block bukkitBlock = world.getWorld().getBlockAt(blockposition.getX(), blockposition.getY(), blockposition.getZ());
++ org.purpurmc.purpur.event.PlayerSetSpawnerTypeWithEggEvent event = new org.purpurmc.purpur.event.PlayerSetSpawnerTypeWithEggEvent((org.bukkit.entity.Player) context.getPlayer().getBukkitEntity(), bukkitBlock, (org.bukkit.block.CreatureSpawner) bukkitBlock.getState(), org.bukkit.entity.EntityType.fromName(entitytypes.getName()));
++ if (!event.callEvent()) {
++ return InteractionResult.FAIL;
++ }
++ entitytypes = EntityType.getFromBukkitType(event.getEntityType());
++ // Purpur end
++
+ spawner.setEntityId(entitytypes, world.getRandom());
+ world.sendBlockUpdated(blockposition, iblockdata, iblockdata, 3);
+ world.gameEvent((Entity) context.getPlayer(), GameEvent.BLOCK_CHANGE, blockposition);
diff --git a/patches/server/0018-Anvil-API.patch b/patches/server/0016-Anvil-API.patch
similarity index 98%
rename from patches/server/0018-Anvil-API.patch
rename to patches/server/0016-Anvil-API.patch
index 9e7c48f8f..59cd81495 100644
--- a/patches/server/0018-Anvil-API.patch
+++ b/patches/server/0016-Anvil-API.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Anvil API
diff --git a/src/main/java/net/minecraft/world/inventory/AbstractContainerMenu.java b/src/main/java/net/minecraft/world/inventory/AbstractContainerMenu.java
-index ffd349c1b80df0f1e8c02bda23700184825170fd..29f301bde378bd320d5c44f2c1b6bf9dc185e286 100644
+index 8fd82051bba33b4703e4d99fff886b63a319a5ba..1af23da6b3ccb4759e46e37cfa2ca85cf78f3ec2 100644
--- a/src/main/java/net/minecraft/world/inventory/AbstractContainerMenu.java
+++ b/src/main/java/net/minecraft/world/inventory/AbstractContainerMenu.java
@@ -76,6 +76,7 @@ public abstract class AbstractContainerMenu {
diff --git a/patches/server/0019-Alternative-Keepalive-Handling.patch b/patches/server/0017-Alternative-Keepalive-Handling.patch
similarity index 97%
rename from patches/server/0019-Alternative-Keepalive-Handling.patch
rename to patches/server/0017-Alternative-Keepalive-Handling.patch
index e388e60aa..5b9f3072c 100644
--- a/patches/server/0019-Alternative-Keepalive-Handling.patch
+++ b/patches/server/0017-Alternative-Keepalive-Handling.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Alternative Keepalive Handling
diff --git a/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java
-index 9226fadcf53da5f7d55f4434a660d3e091c0775f..0166107f8b48393a93ac046e6af70f0ff24fbb85 100644
+index 13e064451c4d48e873061b6dea431a6b101de2ee..04b9f56134a24385468c16c61cf84327263dcb88 100644
--- a/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java
@@ -51,6 +51,7 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack
diff --git a/patches/server/0020-Silk-touch-spawners.patch b/patches/server/0018-Silk-touch-spawners.patch
similarity index 95%
rename from patches/server/0020-Silk-touch-spawners.patch
rename to patches/server/0018-Silk-touch-spawners.patch
index a0dd9db8f..b99569b6e 100644
--- a/patches/server/0020-Silk-touch-spawners.patch
+++ b/patches/server/0018-Silk-touch-spawners.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Silk touch spawners
diff --git a/src/main/java/net/minecraft/world/item/Items.java b/src/main/java/net/minecraft/world/item/Items.java
-index 5f20e075c532f0f1d413242949d1738c0c152bf7..e6f8cb165f7e3da5f0edfc952d14059516de8acf 100644
+index f692149d91b525bda6dc79d489d7496ea24037e8..7fbd4bf29bcc0795aa4b0e6d5d4bc3745bf7a1c0 100644
--- a/src/main/java/net/minecraft/world/item/Items.java
+++ b/src/main/java/net/minecraft/world/item/Items.java
-@@ -294,7 +294,7 @@ public class Items {
+@@ -316,7 +316,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);
@@ -18,10 +18,10 @@ index 5f20e075c532f0f1d413242949d1738c0c152bf7..e6f8cb165f7e3da5f0edfc952d140595
public static final Item CRAFTING_TABLE = registerBlock(Blocks.CRAFTING_TABLE);
public static final Item FARMLAND = registerBlock(Blocks.FARMLAND);
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 936d844a5a246138c9f9ae4ae6e318242b8f1420..93f5f226cf6fd6110e4daa02b3f5d9ad253814a0 100644
+index e8b1c44da90f60cde20cda65aba2aa1e30f89d25..72fe95069f449544ff8a17643e4bd654b698822e 100644
--- a/src/main/java/net/minecraft/world/level/block/SpawnerBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/SpawnerBlock.java
-@@ -40,6 +40,58 @@ public class SpawnerBlock extends BaseEntityBlock {
+@@ -42,6 +42,58 @@ public class SpawnerBlock extends BaseEntityBlock {
return createTickerHelper(type, BlockEntityType.MOB_SPAWNER, world.isClientSide ? SpawnerBlockEntity::clientTick : SpawnerBlockEntity::serverTick);
}
@@ -80,7 +80,7 @@ index 936d844a5a246138c9f9ae4ae6e318242b8f1420..93f5f226cf6fd6110e4daa02b3f5d9ad
@Override
public void spawnAfterBreak(BlockState state, ServerLevel world, BlockPos pos, ItemStack tool, boolean dropExperience) {
super.spawnAfterBreak(state, world, pos, tool, dropExperience);
-@@ -48,6 +100,7 @@ public class SpawnerBlock extends BaseEntityBlock {
+@@ -50,6 +102,7 @@ public class SpawnerBlock extends BaseEntityBlock {
@Override
public int getExpDrop(BlockState iblockdata, ServerLevel worldserver, BlockPos blockposition, ItemStack itemstack, boolean flag) {
@@ -89,7 +89,7 @@ index 936d844a5a246138c9f9ae4ae6e318242b8f1420..93f5f226cf6fd6110e4daa02b3f5d9ad
int i = 15 + worldserver.random.nextInt(15) + worldserver.random.nextInt(15);
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 3ed1a91c93f659306acaf8bad6820f49208554c8..570abbb70cfb523917de473bd91640719c40a611 100644
+index 70f53ccb22de2c05c9ead68f8bd29d0b69d0993f..d4bca5b5f3d10c3a04befd8c365f46433491f299 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -108,6 +108,38 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0021-Add-turtle-egg-block-options.patch b/patches/server/0019-Add-turtle-egg-block-options.patch
similarity index 91%
rename from patches/server/0021-Add-turtle-egg-block-options.patch
rename to patches/server/0019-Add-turtle-egg-block-options.patch
index 8666b8216..467dcb0eb 100644
--- a/patches/server/0021-Add-turtle-egg-block-options.patch
+++ b/patches/server/0019-Add-turtle-egg-block-options.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Add turtle egg block options
diff --git a/src/main/java/net/minecraft/world/level/block/TurtleEggBlock.java b/src/main/java/net/minecraft/world/level/block/TurtleEggBlock.java
-index 07157822659288e76b2fba34db8d5d566506f33b..18feb559f9fd157dd4a01faf2b2bb18df2a64675 100644
+index b0199e071cba4c7ad51799132d00b22b616953fc..f5eb45df4f2c9914e1780bb10fb085713c411a4d 100644
--- a/src/main/java/net/minecraft/world/level/block/TurtleEggBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/TurtleEggBlock.java
-@@ -195,6 +195,25 @@ public class TurtleEggBlock extends Block {
+@@ -202,6 +202,25 @@ public class TurtleEggBlock extends Block {
}
private boolean canDestroyEgg(Level world, Entity entity) {
@@ -36,7 +36,7 @@ index 07157822659288e76b2fba34db8d5d566506f33b..18feb559f9fd157dd4a01faf2b2bb18d
}
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 570abbb70cfb523917de473bd91640719c40a611..7a4c1c04b7e3c558ac19b72693d5abe6c14acdfe 100644
+index d4bca5b5f3d10c3a04befd8c365f46433491f299..8142559d9d4eccd9d105acb1ff3aa131d8ea67b0 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -140,6 +140,15 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0022-Logger-settings-suppressing-pointless-logs.patch b/patches/server/0020-Logger-settings-suppressing-pointless-logs.patch
similarity index 95%
rename from patches/server/0022-Logger-settings-suppressing-pointless-logs.patch
rename to patches/server/0020-Logger-settings-suppressing-pointless-logs.patch
index de53218b8..810a3a38a 100644
--- a/patches/server/0022-Logger-settings-suppressing-pointless-logs.patch
+++ b/patches/server/0020-Logger-settings-suppressing-pointless-logs.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Logger settings (suppressing pointless logs)
diff --git a/src/main/java/net/minecraft/server/PlayerAdvancements.java b/src/main/java/net/minecraft/server/PlayerAdvancements.java
-index e38e2e5a7ddba9c140f362021b6be0b0974f7cd1..0b3a06027f2c600960cd88159803be187c4d0317 100644
+index f655e0ae4a287886d0291cd0089bad2000249d0f..fcb5965ff0a9623a8e63a4b7413ad55416d269d9 100644
--- a/src/main/java/net/minecraft/server/PlayerAdvancements.java
+++ b/src/main/java/net/minecraft/server/PlayerAdvancements.java
-@@ -200,6 +200,7 @@ public class PlayerAdvancements {
+@@ -199,6 +199,7 @@ public class PlayerAdvancements {
if (advancementholder == null) {
if (!minecraftkey.getNamespace().equals("minecraft")) return; // CraftBukkit
@@ -17,7 +17,7 @@ index e38e2e5a7ddba9c140f362021b6be0b0974f7cd1..0b3a06027f2c600960cd88159803be18
} else {
this.startProgress(advancementholder, advancementprogress);
diff --git a/src/main/java/net/minecraft/server/level/WorldGenRegion.java b/src/main/java/net/minecraft/server/level/WorldGenRegion.java
-index 50ed7cfe1ecef6d075ba484804827cec83ba2bf2..54f9cd80ac925aa95ff4fdb4d52cbcc2b04263a5 100644
+index 14a5492428eac823a295ef3746d0aca6fbdab4ec..9bb669fd71cf412a090f340b3053b7cee87710f3 100644
--- a/src/main/java/net/minecraft/server/level/WorldGenRegion.java
+++ b/src/main/java/net/minecraft/server/level/WorldGenRegion.java
@@ -318,6 +318,7 @@ public class WorldGenRegion implements WorldGenLevel {
diff --git a/patches/server/0023-Disable-outdated-build-check.patch b/patches/server/0021-Disable-outdated-build-check.patch
similarity index 92%
rename from patches/server/0023-Disable-outdated-build-check.patch
rename to patches/server/0021-Disable-outdated-build-check.patch
index ac53f1d73..18c82283b 100644
--- a/patches/server/0023-Disable-outdated-build-check.patch
+++ b/patches/server/0021-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 ed8e01918c7aab189ac9a8e37dbe9ff2b06aaa4d..b214e8030b47ec2b14a8dc17894b8f89c95ab9bb 100644
+index fa38d6dd3a7439de3b2503a90637eabb3e6dd8ec..f93c8a4ca38e7d892b6941d3669445789c2fc227 100644
--- a/src/main/java/org/bukkit/craftbukkit/Main.java
+++ b/src/main/java/org/bukkit/craftbukkit/Main.java
@@ -301,7 +301,7 @@ public class Main {
diff --git a/patches/server/0024-Giants-AI-settings.patch b/patches/server/0022-Giants-AI-settings.patch
similarity index 98%
rename from patches/server/0024-Giants-AI-settings.patch
rename to patches/server/0022-Giants-AI-settings.patch
index a9b0ffe4c..fdf5dfe27 100644
--- a/patches/server/0024-Giants-AI-settings.patch
+++ b/patches/server/0022-Giants-AI-settings.patch
@@ -114,7 +114,7 @@ index c3c0fbe71c9af1125c80698865cb9eaf42d4a1c5..d014731fe352246299253bf005e23673
}
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 7a4c1c04b7e3c558ac19b72693d5abe6c14acdfe..b18c498b6fd17ef298cc6ee7b2386188f0b75b36 100644
+index 8142559d9d4eccd9d105acb1ff3aa131d8ea67b0..6d94dc88a470b7e51aafad6c912ff516d114f179 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -554,6 +554,10 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0025-Zombie-horse-naturally-spawn.patch b/patches/server/0023-Zombie-horse-naturally-spawn.patch
similarity index 95%
rename from patches/server/0025-Zombie-horse-naturally-spawn.patch
rename to patches/server/0023-Zombie-horse-naturally-spawn.patch
index d7e7a169e..e84f9f734 100644
--- a/patches/server/0025-Zombie-horse-naturally-spawn.patch
+++ b/patches/server/0023-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 f7a19cdc38feb0dcee3e3cf42610a0604f9f4672..58e0d1a9dedf03029aaedb5d902827f58eaf853e 100644
+index 35cc427755cccb123a866220bd2a72cdbd723465..231d4065b1129815d443e76269eefba45857b59a 100644
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
-@@ -1000,10 +1000,18 @@ public class ServerLevel extends Level implements WorldGenLevel {
+@@ -1001,10 +1001,18 @@ public class ServerLevel extends Level implements WorldGenLevel {
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
if (flag1) {
diff --git a/patches/server/0026-Charged-creeper-naturally-spawn.patch b/patches/server/0024-Charged-creeper-naturally-spawn.patch
similarity index 96%
rename from patches/server/0026-Charged-creeper-naturally-spawn.patch
rename to patches/server/0024-Charged-creeper-naturally-spawn.patch
index 53a7034e1..17b39e014 100644
--- a/patches/server/0026-Charged-creeper-naturally-spawn.patch
+++ b/patches/server/0024-Charged-creeper-naturally-spawn.patch
@@ -24,7 +24,7 @@ index e31094f270117dec3053620c06e409953fb6d710..a1e3f29ce49dc41ad70f74ee224250fe
protected SoundEvent getHurtSound(DamageSource source) {
return SoundEvents.CREEPER_HURT;
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index bae186807d44745942faf8919831f82e475a4f63..8503f57e3b07318331045aa25aa0fd07b8ca17ed 100644
+index 06ea43ddbbaf3165b74303a713f55512b9701765..c7956dfe6ef01868106d7c0989d5c6a612e07b7d 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -345,6 +345,7 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0027-Rabbit-naturally-spawn-toast-and-killer.patch b/patches/server/0025-Rabbit-naturally-spawn-toast-and-killer.patch
similarity index 96%
rename from patches/server/0027-Rabbit-naturally-spawn-toast-and-killer.patch
rename to patches/server/0025-Rabbit-naturally-spawn-toast-and-killer.patch
index 6640c1049..6809dd89e 100644
--- a/patches/server/0027-Rabbit-naturally-spawn-toast-and-killer.patch
+++ b/patches/server/0025-Rabbit-naturally-spawn-toast-and-killer.patch
@@ -33,7 +33,7 @@ index 23ede55b9b1198c72fe93b086129d4725d9352fe..106600ad9712d9a4fdf6770e81b40606
int i = world.getRandom().nextInt(100);
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 8503f57e3b07318331045aa25aa0fd07b8ca17ed..86232e49f12cae623dbe235fd0fac5fbf0255a2b 100644
+index c7956dfe6ef01868106d7c0989d5c6a612e07b7d..6087141b308c1998a6be13dbf6e1ef75d6ddc6a8 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -988,6 +988,8 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0028-Fix-outdated-server-showing-in-ping-before-server-fu.patch b/patches/server/0026-Fix-outdated-server-showing-in-ping-before-server-fu.patch
similarity index 92%
rename from patches/server/0028-Fix-outdated-server-showing-in-ping-before-server-fu.patch
rename to patches/server/0026-Fix-outdated-server-showing-in-ping-before-server-fu.patch
index ac019e68c..f840a5a9f 100644
--- a/patches/server/0028-Fix-outdated-server-showing-in-ping-before-server-fu.patch
+++ b/patches/server/0026-Fix-outdated-server-showing-in-ping-before-server-fu.patch
@@ -6,7 +6,7 @@ Subject: [PATCH] Fix 'outdated server' showing in ping before server fully
diff --git a/src/main/java/net/minecraft/server/network/ServerStatusPacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerStatusPacketListenerImpl.java
-index 2c13147bc063a09bb7907d6f90c3a1e811a09eb1..3edb0c392cec7fdabebad81da1a8b06a700fbfca 100644
+index e5006e7672ba79ed4bcf2c4173c5a9ed4c68395b..6338c52e0082d36d3b80038fdb44abf2772adb30 100644
--- a/src/main/java/net/minecraft/server/network/ServerStatusPacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerStatusPacketListenerImpl.java
@@ -153,6 +153,7 @@ public class ServerStatusPacketListenerImpl implements ServerStatusPacketListene
diff --git a/patches/server/0029-Tulips-change-fox-type.patch b/patches/server/0027-Tulips-change-fox-type.patch
similarity index 95%
rename from patches/server/0029-Tulips-change-fox-type.patch
rename to patches/server/0027-Tulips-change-fox-type.patch
index ae12cdfc3..959f9a174 100644
--- a/patches/server/0029-Tulips-change-fox-type.patch
+++ b/patches/server/0027-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 5a7f4c0565b2d8f95930b39e1aacd9904e382736..f26fa004e1372f8711e76bc7fa4cdb383b989755 100644
+index 21c0431dd8abc06773b6a8ae76908a4227225326..88e26b2653eac1898f266b7c8f9f6e0fba422a52 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Fox.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Fox.java
@@ -36,6 +36,7 @@ import net.minecraft.util.RandomSource;
@@ -67,7 +67,7 @@ index 5a7f4c0565b2d8f95930b39e1aacd9904e382736..f26fa004e1372f8711e76bc7fa4cdb38
// Paper start - Cancellable death event
protected org.bukkit.event.entity.EntityDeathEvent dropAllDeathLoot(DamageSource source) {
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 86232e49f12cae623dbe235fd0fac5fbf0255a2b..de3fe605c4cc477007d15468338a7de5dfc87c4c 100644
+index 6087141b308c1998a6be13dbf6e1ef75d6ddc6a8..532e25d00128c62c6eae4d0076dc0a3bd16c5b4e 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -509,6 +509,7 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0030-Breedable-Polar-Bears.patch b/patches/server/0028-Breedable-Polar-Bears.patch
similarity index 97%
rename from patches/server/0030-Breedable-Polar-Bears.patch
rename to patches/server/0028-Breedable-Polar-Bears.patch
index b0871157c..657774acf 100644
--- a/patches/server/0030-Breedable-Polar-Bears.patch
+++ b/patches/server/0028-Breedable-Polar-Bears.patch
@@ -59,7 +59,7 @@ index 70b45c622a459ace397d4d54cd99e8ae7fc1ce65..0377d40198b88512b1f204a31367c2db
this.goalSelector.addGoal(5, new RandomStrollGoal(this, 1.0D));
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 de3fe605c4cc477007d15468338a7de5dfc87c4c..4b97350dd6968125d91e02441b6a573ce7000943 100644
+index 532e25d00128c62c6eae4d0076dc0a3bd16c5b4e..0d6f0e69093594fffcdb616d319be1b416909a64 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -960,6 +960,8 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0031-Chickens-can-retaliate.patch b/patches/server/0029-Chickens-can-retaliate.patch
similarity index 97%
rename from patches/server/0031-Chickens-can-retaliate.patch
rename to patches/server/0029-Chickens-can-retaliate.patch
index e320a51e1..a18d7b4bb 100644
--- a/patches/server/0031-Chickens-can-retaliate.patch
+++ b/patches/server/0029-Chickens-can-retaliate.patch
@@ -50,7 +50,7 @@ index 3c06fe81e2e1d7bd546ead0d13d87cbe7e2e7b5b..bc3094493d7d25eaf50da8fdd74eacae
@Override
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 4b97350dd6968125d91e02441b6a573ce7000943..c208253d9afcdaa18fdb1f020d3d385556190203 100644
+index 0d6f0e69093594fffcdb616d319be1b416909a64..c76957ae7e9f2aa6b34d0a1098cfbc036b723237 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -299,6 +299,7 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0032-Add-option-to-set-armorstand-step-height.patch b/patches/server/0030-Add-option-to-set-armorstand-step-height.patch
similarity index 81%
rename from patches/server/0032-Add-option-to-set-armorstand-step-height.patch
rename to patches/server/0030-Add-option-to-set-armorstand-step-height.patch
index 949d02bec..811dd9eab 100644
--- a/patches/server/0032-Add-option-to-set-armorstand-step-height.patch
+++ b/patches/server/0030-Add-option-to-set-armorstand-step-height.patch
@@ -5,10 +5,10 @@ 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 8b9efc0477f1d97414d12282bd9d10a7d2ec83a8..51e612378e837d3c30d50c870b565b30a772d5a0 100644
+index 4e21ff640261d95f7db1134793fb5e2e91015fd6..e664ca676c21b1c7fdc9df00797060053901e1f7 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
-@@ -334,7 +334,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {
+@@ -335,7 +335,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S
public double xOld;
public double yOld;
public double zOld;
@@ -18,10 +18,10 @@ index 8b9efc0477f1d97414d12282bd9d10a7d2ec83a8..51e612378e837d3c30d50c870b565b30
public final RandomSource random;
public int tickCount;
diff --git a/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java b/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java
-index 9dcf28bdcb5770a191e62353a60c953731671283..43e562d740b628d5abf961312ea5ce7a23e8ac56 100644
+index 1e86e86b0a100a5d14aee10b60e70c32d2733660..b9bb4745cf540b5720259b009e973633647c36c6 100644
--- a/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java
+++ b/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java
-@@ -690,6 +690,7 @@ public class ArmorStand extends LivingEntity {
+@@ -677,6 +677,7 @@ public class ArmorStand extends LivingEntity {
@Override
public void tick() {
@@ -30,7 +30,7 @@ index 9dcf28bdcb5770a191e62353a60c953731671283..43e562d740b628d5abf961312ea5ce7a
if (!this.canTick) {
if (this.noTickPoseDirty) {
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index c208253d9afcdaa18fdb1f020d3d385556190203..5875b0e956a91ddb89adfdcb97418cc1d72a1ddf 100644
+index c76957ae7e9f2aa6b34d0a1098cfbc036b723237..ba7f378b9b0c791dd77862439f310a6653cccf30 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -90,6 +90,11 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0033-Cat-spawning-options.patch b/patches/server/0031-Cat-spawning-options.patch
similarity index 97%
rename from patches/server/0033-Cat-spawning-options.patch
rename to patches/server/0031-Cat-spawning-options.patch
index de9b7978f..3ca10d95e 100644
--- a/patches/server/0033-Cat-spawning-options.patch
+++ b/patches/server/0031-Cat-spawning-options.patch
@@ -51,7 +51,7 @@ index 5f407535298a31a34cfe114dd863fd6a9b977707..29c7e33fe961020e5a0007287fe9b663
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 5875b0e956a91ddb89adfdcb97418cc1d72a1ddf..8f75164e9d877a61cc91886c1e1a7dd4026628c3 100644
+index ba7f378b9b0c791dd77862439f310a6653cccf30..6102535823eab8862c23919f20a8062f9f750eb6 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -272,6 +272,9 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0034-Cows-eat-mushrooms.patch b/patches/server/0032-Cows-eat-mushrooms.patch
similarity index 98%
rename from patches/server/0034-Cows-eat-mushrooms.patch
rename to patches/server/0032-Cows-eat-mushrooms.patch
index 5fe654b66..a6cca9377 100644
--- a/patches/server/0034-Cows-eat-mushrooms.patch
+++ b/patches/server/0032-Cows-eat-mushrooms.patch
@@ -114,7 +114,7 @@ index f440eabffb1abe4c7370bf7badf6137a22f99071..d42c8bcd85ffb1e00d2883485bf22981
+ // Purpur end
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 8f75164e9d877a61cc91886c1e1a7dd4026628c3..3d222e3cdb95409d9d35ef8a9224814e94c4b333 100644
+index 6102535823eab8862c23919f20a8062f9f750eb6..0db470bab81016af906dda69c9ff487e88bb63a9 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -342,6 +342,7 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0035-Fix-cow-rotation-when-shearing-mooshroom.patch b/patches/server/0033-Fix-cow-rotation-when-shearing-mooshroom.patch
similarity index 93%
rename from patches/server/0035-Fix-cow-rotation-when-shearing-mooshroom.patch
rename to patches/server/0033-Fix-cow-rotation-when-shearing-mooshroom.patch
index aec0f2158..be9d94125 100644
--- a/patches/server/0035-Fix-cow-rotation-when-shearing-mooshroom.patch
+++ b/patches/server/0033-Fix-cow-rotation-when-shearing-mooshroom.patch
@@ -5,7 +5,7 @@ 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 e3fe62285ced917de6817916e99483e117008670..c83e5d58ca5db1e63e099f36006043f7e78ea56f 100644
+index a2f77d030856056409f2d888e80818eeb6a46ee6..f27ca76b153dc33d20dc46a57f1dda4e91e82883 100644
--- a/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java
+++ b/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java
@@ -198,7 +198,13 @@ public class MushroomCow extends Cow implements Shearable, VariantHolder 0 && !source.is(DamageTypeTags.BYPASSES_INVULNERABILITY)) {
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 44a6118d3bd67a95180f750c17967561946e2e87..9d9d9cf2366441b453b66f91c53e7a0fe0c01e8f 100644
+index 48b1cddfca671ac8bcb93a1b60518a4ee9e977e2..a52f8b583b84128b7d68bfced6c41e2c7554469c 100644
--- a/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecart.java
+++ b/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecart.java
-@@ -112,12 +112,14 @@ public abstract class AbstractMinecart extends Entity {
+@@ -105,12 +105,14 @@ public abstract class AbstractMinecart extends VehicleEntity {
private double flyingY = 0.949999988079071D; // Paper - restore vanilla precision
private double flyingZ = 0.949999988079071D; // Paper - restore vanilla precision
public double maxSpeed = 0.4D;
@@ -35,7 +35,7 @@ index 44a6118d3bd67a95180f750c17967561946e2e87..9d9d9cf2366441b453b66f91c53e7a0f
}
protected AbstractMinecart(EntityType> type, Level world, double x, double y, double z) {
-@@ -342,6 +344,12 @@ public abstract class AbstractMinecart extends Entity {
+@@ -294,6 +296,12 @@ public abstract class AbstractMinecart extends VehicleEntity {
@Override
public void tick() {
@@ -48,7 +48,7 @@ index 44a6118d3bd67a95180f750c17967561946e2e87..9d9d9cf2366441b453b66f91c53e7a0f
// CraftBukkit start
double prevX = this.getX();
double prevY = this.getY();
-@@ -499,16 +507,62 @@ public abstract class AbstractMinecart extends Entity {
+@@ -451,16 +459,62 @@ public abstract class AbstractMinecart extends VehicleEntity {
public void activateMinecart(int x, int y, int z, boolean powered) {}
@@ -112,10 +112,10 @@ index 44a6118d3bd67a95180f750c17967561946e2e87..9d9d9cf2366441b453b66f91c53e7a0f
this.move(MoverType.SELF, this.getDeltaMovement());
if (!this.onGround()) {
diff --git a/src/main/java/net/minecraft/world/item/MinecartItem.java b/src/main/java/net/minecraft/world/item/MinecartItem.java
-index a33395dc5a94d89b5ab273c7832813b6ff9ea3b7..2b2218e2de535ebc8f529f5b5bf98fa1ef819a5e 100644
+index 3aa73cd44aa8c86b78c35bc1788e4f83018c49ed..66a8b28275619079e3bcbcc460146976d533d54e 100644
--- a/src/main/java/net/minecraft/world/item/MinecartItem.java
+++ b/src/main/java/net/minecraft/world/item/MinecartItem.java
-@@ -122,8 +122,9 @@ public class MinecartItem extends Item {
+@@ -119,8 +119,9 @@ public class MinecartItem extends Item {
BlockState iblockdata = world.getBlockState(blockposition);
if (!iblockdata.is(BlockTags.RAILS)) {
@@ -126,8 +126,8 @@ index a33395dc5a94d89b5ab273c7832813b6ff9ea3b7..2b2218e2de535ebc8f529f5b5bf98fa1
+ } // else { // Purpur - place minecarts anywhere
ItemStack itemstack = context.getItemInHand();
- if (!world.isClientSide) {
-@@ -151,6 +152,6 @@ public class MinecartItem extends Item {
+ if (world instanceof ServerLevel) {
+@@ -145,6 +146,6 @@ public class MinecartItem extends Item {
itemstack.shrink(1);
return InteractionResult.sidedSuccess(world.isClientSide);
@@ -136,10 +136,10 @@ index a33395dc5a94d89b5ab273c7832813b6ff9ea3b7..2b2218e2de535ebc8f529f5b5bf98fa1
}
}
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 e6a4a5898ffdcb2aa2bc01371a6d7dbc06d610ce..443bed339884f78ecda8abdbcdc9b57ea9768cc9 100644
+index 3ab8b99837b1d1faea722c598b0228b2780be8b1..06b07927aba82084bd2996be92b9e340a9bf2ad2 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
-@@ -89,7 +89,7 @@ public abstract class BlockBehaviour implements FeatureElement {
+@@ -93,7 +93,7 @@ public abstract class BlockBehaviour implements FeatureElement {
protected final float jumpFactor;
protected final boolean dynamicShape;
protected final FeatureFlagSet requiredFeatures;
diff --git a/patches/server/0041-Disable-loot-drops-on-death-by-cramming.patch b/patches/server/0039-Disable-loot-drops-on-death-by-cramming.patch
similarity index 91%
rename from patches/server/0041-Disable-loot-drops-on-death-by-cramming.patch
rename to patches/server/0039-Disable-loot-drops-on-death-by-cramming.patch
index 9e1ff6dd4..9de211d4e 100644
--- a/patches/server/0041-Disable-loot-drops-on-death-by-cramming.patch
+++ b/patches/server/0039-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 094d60d125063cb6c83b09fb206aec91e40ef80e..561b9774a9932227ec56c528e49cc6227792da13 100644
+index a8d09f76361cc3146aaeba72b7338049b30eb2cb..ade6fcdf6f6fd80bc91ffc313226a41ba0c4e18d 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
-@@ -1843,6 +1843,7 @@ public abstract class LivingEntity extends Entity implements Attackable {
+@@ -1828,6 +1828,7 @@ public abstract class LivingEntity extends Entity implements Attackable {
this.dropEquipment(); // CraftBukkit - from below
if (this.shouldDropLoot() && this.level().getGameRules().getBoolean(GameRules.RULE_DOMOBLOOT)) {
@@ -16,7 +16,7 @@ index 094d60d125063cb6c83b09fb206aec91e40ef80e..561b9774a9932227ec56c528e49cc622
this.dropFromLootTable(source, flag);
// Paper start
final boolean prev = this.clearEquipmentSlots;
-@@ -1851,6 +1852,7 @@ public abstract class LivingEntity extends Entity implements Attackable {
+@@ -1836,6 +1837,7 @@ public abstract class LivingEntity extends Entity implements Attackable {
// Paper end
this.dropCustomDeathLoot(source, i, flag);
this.clearEquipmentSlots = prev; // Paper
diff --git a/patches/server/0042-Option-to-toggle-milk-curing-bad-omen.patch b/patches/server/0040-Option-to-toggle-milk-curing-bad-omen.patch
similarity index 95%
rename from patches/server/0042-Option-to-toggle-milk-curing-bad-omen.patch
rename to patches/server/0040-Option-to-toggle-milk-curing-bad-omen.patch
index 13d4d83f7..cc5f3aa2f 100644
--- a/patches/server/0042-Option-to-toggle-milk-curing-bad-omen.patch
+++ b/patches/server/0040-Option-to-toggle-milk-curing-bad-omen.patch
@@ -28,7 +28,7 @@ index f33977d95b6db473be4f95075ba99caf90ad0220..56dc04d8875971ee9a5d077a695509af
return stack.isEmpty() ? new ItemStack(Items.BUCKET) : stack;
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 807b1b1de4019f279618c6e02ab90bf230ed5e66..e943bd03ea9010f7d7f877380c38a38aab396d9f 100644
+index 9832d71949025eed99a3e9e8b09f9bee9991e36a..297dfcc634cbe6993e7844209ee564ad530866ac 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -96,8 +96,10 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0043-End-gateway-should-check-if-entity-can-use-portal.patch b/patches/server/0041-End-gateway-should-check-if-entity-can-use-portal.patch
similarity index 100%
rename from patches/server/0043-End-gateway-should-check-if-entity-can-use-portal.patch
rename to patches/server/0041-End-gateway-should-check-if-entity-can-use-portal.patch
diff --git a/patches/server/0044-Skip-events-if-there-s-no-listeners.patch b/patches/server/0042-Skip-events-if-there-s-no-listeners.patch
similarity index 88%
rename from patches/server/0044-Skip-events-if-there-s-no-listeners.patch
rename to patches/server/0042-Skip-events-if-there-s-no-listeners.patch
index 768487bbd..4dc73ab51 100644
--- a/patches/server/0044-Skip-events-if-there-s-no-listeners.patch
+++ b/patches/server/0042-Skip-events-if-there-s-no-listeners.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Skip events if there's no listeners
diff --git a/src/main/java/net/minecraft/commands/Commands.java b/src/main/java/net/minecraft/commands/Commands.java
-index 3eec879bf3975636739b2491cc05b8177032d16d..a5829f0726fd92faae04f978c82b2f0736bcd50b 100644
+index 55f3f5396dac2b0bb0cc37b537547e9245042100..471270f302cbfaf81500976fcc5a02eaed4120f3 100644
--- a/src/main/java/net/minecraft/commands/Commands.java
+++ b/src/main/java/net/minecraft/commands/Commands.java
-@@ -462,6 +462,7 @@ public class Commands {
+@@ -516,6 +516,7 @@ public class Commands {
private void runSync(ServerPlayer player, Collection bukkit, RootCommandNode rootcommandnode) {
// Paper end - Async command map building
new com.destroystokyo.paper.event.brigadier.AsyncPlayerSendCommandsEvent(player.getBukkitEntity(), (RootCommandNode) rootcommandnode, false).callEvent(); // Paper
@@ -16,7 +16,7 @@ index 3eec879bf3975636739b2491cc05b8177032d16d..a5829f0726fd92faae04f978c82b2f07
PlayerCommandSendEvent event = new PlayerCommandSendEvent(player.getBukkitEntity(), new LinkedHashSet<>(bukkit));
event.getPlayer().getServer().getPluginManager().callEvent(event);
-@@ -472,6 +473,7 @@ public class Commands {
+@@ -526,6 +527,7 @@ public class Commands {
}
}
// CraftBukkit end
diff --git a/patches/server/0045-Add-permission-for-F3-N-debug.patch b/patches/server/0043-Add-permission-for-F3-N-debug.patch
similarity index 83%
rename from patches/server/0045-Add-permission-for-F3-N-debug.patch
rename to patches/server/0043-Add-permission-for-F3-N-debug.patch
index d2c6881a2..7c16f3361 100644
--- a/patches/server/0045-Add-permission-for-F3-N-debug.patch
+++ b/patches/server/0043-Add-permission-for-F3-N-debug.patch
@@ -5,10 +5,10 @@ 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 837ef9a66921f881c5c94aa5f28746d9494d4a98..d4d7493569ecf3eb9456b4005f269b94fe08941e 100644
+index accce07f973962899696336c541403b6e5afb18a..e46fcb5c8bf1047e3f330fd525166aee5f0b646b 100644
--- a/src/main/java/net/minecraft/server/players/PlayerList.java
+++ b/src/main/java/net/minecraft/server/players/PlayerList.java
-@@ -1177,6 +1177,7 @@ public abstract class PlayerList {
+@@ -1175,6 +1175,7 @@ public abstract class PlayerList {
} else {
b0 = (byte) (24 + permissionLevel);
}
diff --git a/patches/server/0046-Configurable-TPS-Catchup.patch b/patches/server/0044-Configurable-TPS-Catchup.patch
similarity index 64%
rename from patches/server/0046-Configurable-TPS-Catchup.patch
rename to patches/server/0044-Configurable-TPS-Catchup.patch
index d380a71f6..f2f87875a 100644
--- a/patches/server/0046-Configurable-TPS-Catchup.patch
+++ b/patches/server/0044-Configurable-TPS-Catchup.patch
@@ -5,24 +5,24 @@ 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 4eeb7a43c8cdcd81fd9f8da4792ab27f54595d14..57f2b54ad36d33e76e538895df691987c869a043 100644
+index c442cf9a6856715ab7c404eb8e287bd67e20ae06..0d4d62757e7b15767ec62f59e287ab3a94be8c03 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
-@@ -1160,7 +1160,13 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop entityType = entity.getType();
final int saveLimit = level.paperConfig().chunks.entityPerChunkSaveLimit.getOrDefault(entityType, -1);
diff --git a/src/main/java/org/purpurmc/purpur/entity/DolphinSpit.java b/src/main/java/org/purpurmc/purpur/entity/DolphinSpit.java
-index af057c1d7fd74f3dd806c5ce7f8b0ad06cab7b8e..ce614ae6b1fa0b31c1ee8dacb69134bb20c949f4 100644
+index 83dd3f982d5869e26748e6e0d0b38a3c7a08fe02..92d562fa11f69bb6b841299aef257ea0c674ca1c 100644
--- a/src/main/java/org/purpurmc/purpur/entity/DolphinSpit.java
+++ b/src/main/java/org/purpurmc/purpur/entity/DolphinSpit.java
@@ -35,6 +35,13 @@ public class DolphinSpit extends LlamaSpit {
@@ -66,7 +66,7 @@ index af057c1d7fd74f3dd806c5ce7f8b0ad06cab7b8e..ce614ae6b1fa0b31c1ee8dacb69134bb
super_tick();
diff --git a/src/main/java/org/purpurmc/purpur/entity/PhantomFlames.java b/src/main/java/org/purpurmc/purpur/entity/PhantomFlames.java
-index 1fd6412e332ea8ee82b19c108e113624e51d764b..ea8b928b6d82689e71bbcc39ab497491072dfba6 100644
+index 8fa9b376682d9e8b1971a9f72b918c6dc6872d04..d0d951f867390fa12cae2ba2a49212354b10d7b0 100644
--- a/src/main/java/org/purpurmc/purpur/entity/PhantomFlames.java
+++ b/src/main/java/org/purpurmc/purpur/entity/PhantomFlames.java
@@ -38,6 +38,13 @@ public class PhantomFlames extends LlamaSpit {
diff --git a/patches/server/0056-Dispenser-curse-of-binding-protection.patch b/patches/server/0054-Dispenser-curse-of-binding-protection.patch
similarity index 90%
rename from patches/server/0056-Dispenser-curse-of-binding-protection.patch
rename to patches/server/0054-Dispenser-curse-of-binding-protection.patch
index d3ed9cb49..e4b47a91b 100644
--- a/patches/server/0056-Dispenser-curse-of-binding-protection.patch
+++ b/patches/server/0054-Dispenser-curse-of-binding-protection.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Dispenser curse of binding protection
diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java
-index 67820c9a971d9c0c24b6d7e6d10dd0b761f24345..de635f425a69ac4f21a80a2c723adf0362501d1f 100644
+index 84a41eaaa3e2bc2be1706dc436dea21195f7d81c..ed72f020394f4dd0f1fb21953e69b1aa9716b262 100644
--- a/src/main/java/net/minecraft/world/entity/Mob.java
+++ b/src/main/java/net/minecraft/world/entity/Mob.java
-@@ -65,6 +65,7 @@ import net.minecraft.world.item.ProjectileWeaponItem;
+@@ -66,6 +66,7 @@ import net.minecraft.world.item.ProjectileWeaponItem;
import net.minecraft.world.item.SpawnEggItem;
import net.minecraft.world.item.SwordItem;
import net.minecraft.world.item.enchantment.EnchantmentHelper;
@@ -16,7 +16,7 @@ index 67820c9a971d9c0c24b6d7e6d10dd0b761f24345..de635f425a69ac4f21a80a2c723adf03
import net.minecraft.world.level.GameRules;
import net.minecraft.world.level.ItemLike;
import net.minecraft.world.level.Level;
-@@ -1174,6 +1175,12 @@ public abstract class Mob extends LivingEntity implements Targeting {
+@@ -1169,6 +1170,12 @@ public abstract class Mob extends LivingEntity implements Targeting {
}
@@ -43,7 +43,7 @@ index 42d87800a328f71c5127ce5599ca4c71cc9bb1cd..7868c2f7b563792f8902d9a77dca46e0
// CraftBukkit start
Level world = pointer.level();
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 9311e620a821bbd46d962dd01ef9b0c1ec99555f..2e2a347d341ef831aaf1a6b01fa2aeb82e76b810 100644
+index e39048f5dd6b54bd2488ac450fa2260a6c2754dd..4240c9ce3fec8ae6883fa5762e01349136fe4067 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -224,6 +224,11 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0057-Add-option-for-boats-to-eject-players-on-land.patch b/patches/server/0055-Add-option-for-boats-to-eject-players-on-land.patch
similarity index 87%
rename from patches/server/0057-Add-option-for-boats-to-eject-players-on-land.patch
rename to patches/server/0055-Add-option-for-boats-to-eject-players-on-land.patch
index c21f83b02..150a08f9c 100644
--- a/patches/server/0057-Add-option-for-boats-to-eject-players-on-land.patch
+++ b/patches/server/0055-Add-option-for-boats-to-eject-players-on-land.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Add option for boats to eject players on land
diff --git a/src/main/java/net/minecraft/world/entity/vehicle/Boat.java b/src/main/java/net/minecraft/world/entity/vehicle/Boat.java
-index 5c07da62c82bc70138f6cb5007629d6974be69ac..96f4ef06d16483bd4bb88cc36207d5bdc4bd1280 100644
+index c041c0b81be41cfd128c2f5ba56a5329d50b2efc..960bada23cb89a7f270d1ee24d62f2bc108522af 100644
--- a/src/main/java/net/minecraft/world/entity/vehicle/Boat.java
+++ b/src/main/java/net/minecraft/world/entity/vehicle/Boat.java
-@@ -578,6 +578,7 @@ public class Boat extends Entity implements VariantHolder {
+@@ -521,6 +521,7 @@ public class Boat extends VehicleEntity implements VariantHolder {
if (f > 0.0F) {
this.landFriction = f;
@@ -17,7 +17,7 @@ index 5c07da62c82bc70138f6cb5007629d6974be69ac..96f4ef06d16483bd4bb88cc36207d5bd
} else {
return Boat.Status.IN_AIR;
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 2e2a347d341ef831aaf1a6b01fa2aeb82e76b810..e2e95793c02521df51d9dbf76a22e11f96778f49 100644
+index 4240c9ce3fec8ae6883fa5762e01349136fe4067..cc373c386ca72c3c6cfd69dc26be6ccdfaae1738 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -95,12 +95,14 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0058-Mending-mends-most-damages-equipment-first.patch b/patches/server/0056-Mending-mends-most-damages-equipment-first.patch
similarity index 95%
rename from patches/server/0058-Mending-mends-most-damages-equipment-first.patch
rename to patches/server/0056-Mending-mends-most-damages-equipment-first.patch
index c2d7fb609..6ed077ae9 100644
--- a/patches/server/0058-Mending-mends-most-damages-equipment-first.patch
+++ b/patches/server/0056-Mending-mends-most-damages-equipment-first.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Mending mends most damages equipment first
diff --git a/src/main/java/net/minecraft/world/entity/ExperienceOrb.java b/src/main/java/net/minecraft/world/entity/ExperienceOrb.java
-index 6dac7cd4c9abfbde299f5d279acc2739195fc312..77ba83d02530b26ef66dcfe8b4c5e8a6109a3b28 100644
+index fb74f13ab2a977224e843a468ea8c72d923a75eb..5450058d23f1ab20689183bd284b01fc93628db5 100644
--- a/src/main/java/net/minecraft/world/entity/ExperienceOrb.java
+++ b/src/main/java/net/minecraft/world/entity/ExperienceOrb.java
@@ -331,7 +331,7 @@ public class ExperienceOrb extends Entity {
@@ -18,10 +18,10 @@ index 6dac7cd4c9abfbde299f5d279acc2739195fc312..77ba83d02530b26ef66dcfe8b4c5e8a6
if (entry != null) {
ItemStack itemstack = (ItemStack) entry.getValue();
diff --git a/src/main/java/net/minecraft/world/item/ItemStack.java b/src/main/java/net/minecraft/world/item/ItemStack.java
-index d0f7baa80cb7d0883304abe2ed990c258a0d92b6..6b2a5e901584714b50eadfa1224b0c97e8a23e5f 100644
+index de277d61b718fe07a87d75a2547bb1c7f8553aa1..22451858d7a27f9e701b22e923be752ef5dfcafe 100644
--- a/src/main/java/net/minecraft/world/item/ItemStack.java
+++ b/src/main/java/net/minecraft/world/item/ItemStack.java
-@@ -591,6 +591,16 @@ public final class ItemStack {
+@@ -612,6 +612,16 @@ public final class ItemStack {
return this.isDamageableItem() && this.getDamageValue() > 0;
}
diff --git a/patches/server/0059-Add-5-second-tps-average-in-tps.patch b/patches/server/0057-Add-5-second-tps-average-in-tps.patch
similarity index 89%
rename from patches/server/0059-Add-5-second-tps-average-in-tps.patch
rename to patches/server/0057-Add-5-second-tps-average-in-tps.patch
index de4d47047..dfa861ceb 100644
--- a/patches/server/0059-Add-5-second-tps-average-in-tps.patch
+++ b/patches/server/0057-Add-5-second-tps-average-in-tps.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Add 5 second tps average in /tps
diff --git a/src/main/java/com/destroystokyo/paper/gui/RAMDetails.java b/src/main/java/com/destroystokyo/paper/gui/RAMDetails.java
-index fa56cd09102a89692b42f1d14257990508c5c720..f9251183df72ddc56662fd3f02acf21641a2200c 100644
+index 066b9e4c4f0e7773548eda045cdd1ca8445221d2..92eaba96135ccddb7d682dab7e82cde9318a48ef 100644
--- a/src/main/java/com/destroystokyo/paper/gui/RAMDetails.java
+++ b/src/main/java/com/destroystokyo/paper/gui/RAMDetails.java
@@ -58,7 +58,7 @@ public class RAMDetails extends JList {
@@ -20,17 +20,17 @@ index fa56cd09102a89692b42f1d14257990508c5c720..f9251183df72ddc56662fd3f02acf216
@@ -67,7 +67,7 @@ public class RAMDetails extends JList {
vector.add("Memory use: " + (data.getUsedMem() / 1024L / 1024L) + " mb (" + (data.getFree() * 100L / data.getMax()) + "% free)");
vector.add("Heap: " + (data.getTotal() / 1024L / 1024L) + " / " + (data.getMax() / 1024L / 1024L) + " mb");
- vector.add("Avg tick: " + DECIMAL_FORMAT.format(getAverage(server.tickTimes)) + " ms");
+ vector.add("Avg tick: " + DECIMAL_FORMAT.format(this.getAverage(server.getTickTimesNanos())) + " ms");
- vector.add("TPS from last 1m, 5m, 15m: " + String.join(", ", tpsAvg));
+ vector.add("TPS from last 5s, 1m, 5m, 15m: " + String.join(", ", tpsAvg)); // Purpur
setListData(vector);
}
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
-index f99658c42e69ded4c61ccaf4ac5e9e645ee5bc7c..c5a93bb3f0ae907d3abb63f97567ab0e54a25b42 100644
+index 0d4d62757e7b15767ec62f59e287ab3a94be8c03..6206d19c2861996699ced5eccfff8ee8ab3a7727 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
-@@ -297,7 +297,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 0) {
@@ -66,7 +66,7 @@ index 6b2a5e901584714b50eadfa1224b0c97e8a23e5f..191bcb10f9976b815038d73ac60c0ddd
int k = 0;
for (int l = 0; j > 0 && l < amount; ++l) {
-@@ -675,6 +675,12 @@ public final class ItemStack {
+@@ -696,6 +696,12 @@ public final class ItemStack {
if (this.hurt(amount, entity.getRandom(), entity /*instanceof ServerPlayer ? (ServerPlayer) entity : null*/)) { // Paper - pass LivingEntity for EntityItemDamageEvent
breakCallback.accept(entity);
Item item = this.getItem();
@@ -80,10 +80,10 @@ index 6b2a5e901584714b50eadfa1224b0c97e8a23e5f..191bcb10f9976b815038d73ac60c0ddd
if (this.count == 1 && entity instanceof net.minecraft.world.entity.player.Player) {
org.bukkit.craftbukkit.event.CraftEventFactory.callPlayerItemBreakEvent((net.minecraft.world.entity.player.Player) entity, this);
diff --git a/src/main/java/net/minecraft/world/item/TridentItem.java b/src/main/java/net/minecraft/world/item/TridentItem.java
-index 8078f127ff4b6e0aafb5804b9c02e237f79445b5..06c2f30b77a2c8aecc65e0c305f643d53798f364 100644
+index 5fab851b319847035fb1eefd0ab999de3ccc2cd8..f1d6db9382bec49f61657168fe56b06784d02cf5 100644
--- a/src/main/java/net/minecraft/world/item/TridentItem.java
+++ b/src/main/java/net/minecraft/world/item/TridentItem.java
-@@ -130,6 +130,14 @@ public class TridentItem extends Item implements Vanishable {
+@@ -131,6 +131,14 @@ public class TridentItem extends Item implements Vanishable {
f2 *= f6 / f5;
f3 *= f6 / f5;
f4 *= f6 / f5;
diff --git a/patches/server/0061-Item-entity-immunities.patch b/patches/server/0059-Item-entity-immunities.patch
similarity index 93%
rename from patches/server/0061-Item-entity-immunities.patch
rename to patches/server/0059-Item-entity-immunities.patch
index dbd94c3fe..4036ad828 100644
--- a/patches/server/0061-Item-entity-immunities.patch
+++ b/patches/server/0059-Item-entity-immunities.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Item entity immunities
diff --git a/src/main/java/net/minecraft/server/level/ServerEntity.java b/src/main/java/net/minecraft/server/level/ServerEntity.java
-index d46e61640b241d32df05240dedd2c23f138725e6..c6ef510d335b8baea58c4491853414a52a06b66b 100644
+index 35674f92a67f93382103c2766df4b678ba5c862f..ed520d535cd8e7507f45f69de393795bd90edd3c 100644
--- a/src/main/java/net/minecraft/server/level/ServerEntity.java
+++ b/src/main/java/net/minecraft/server/level/ServerEntity.java
@@ -73,7 +73,7 @@ public class ServerEntity {
@@ -18,10 +18,10 @@ index d46e61640b241d32df05240dedd2c23f138725e6..c6ef510d335b8baea58c4491853414a5
public ServerEntity(ServerLevel worldserver, Entity entity, int i, boolean flag, Consumer> consumer, Set trackedPlayers) {
this.trackedPlayers = trackedPlayers;
diff --git a/src/main/java/net/minecraft/world/entity/item/ItemEntity.java b/src/main/java/net/minecraft/world/entity/item/ItemEntity.java
-index eb0351aa12eebcefab1d1d14641fc3c60cbbcab8..4f01fede54a3150798812d6e5116631bf897a29b 100644
+index a39db702063887cf530f272deaf4f334047cc7d4..22d40d754624d2832e215c2774b591a0082cd240 100644
--- a/src/main/java/net/minecraft/world/entity/item/ItemEntity.java
+++ b/src/main/java/net/minecraft/world/entity/item/ItemEntity.java
-@@ -56,6 +56,12 @@ public class ItemEntity extends Entity implements TraceableEntity {
+@@ -58,6 +58,12 @@ public class ItemEntity extends Entity implements TraceableEntity {
public boolean canMobPickup = true; // Paper
private int despawnRate = -1; // Paper
public net.kyori.adventure.util.TriState frictionState = net.kyori.adventure.util.TriState.NOT_SET; // Paper
@@ -34,7 +34,7 @@ index eb0351aa12eebcefab1d1d14641fc3c60cbbcab8..4f01fede54a3150798812d6e5116631b
public ItemEntity(EntityType extends ItemEntity> type, Level world) {
super(type, world);
-@@ -346,7 +352,16 @@ public class ItemEntity extends Entity implements TraceableEntity {
+@@ -364,7 +370,16 @@ public class ItemEntity extends Entity implements TraceableEntity {
@Override
public boolean hurt(DamageSource source, float amount) {
@@ -52,7 +52,7 @@ index eb0351aa12eebcefab1d1d14641fc3c60cbbcab8..4f01fede54a3150798812d6e5116631b
return false;
} else if (!this.getItem().isEmpty() && this.getItem().is(Items.NETHER_STAR) && source.is(DamageTypeTags.IS_EXPLOSION)) {
return false;
-@@ -548,6 +563,12 @@ public class ItemEntity extends Entity implements TraceableEntity {
+@@ -567,6 +582,12 @@ public class ItemEntity extends Entity implements TraceableEntity {
public void setItem(ItemStack stack) {
this.getEntityData().set(ItemEntity.DATA_ITEM, stack);
this.despawnRate = this.level().paperConfig().entities.spawning.altItemDespawnRate.enabled ? this.level().paperConfig().entities.spawning.altItemDespawnRate.items.getOrDefault(stack.getItem(), this.level().spigotConfig.itemDespawnRate) : this.level().spigotConfig.itemDespawnRate; // Paper
@@ -66,7 +66,7 @@ index eb0351aa12eebcefab1d1d14641fc3c60cbbcab8..4f01fede54a3150798812d6e5116631b
@Override
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftItem.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftItem.java
-index 9c0f83ff8113696309265fb9e8f6006296de86a6..c57f0ae102f1c9833ed7f93af4682caf490ec70c 100644
+index 81498941748d646ebe6495f4a7ce6953532144c6..14d6ff11c8b8b047ada5d308515e9d214cf77b69 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftItem.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftItem.java
@@ -151,4 +151,46 @@ public class CraftItem extends CraftEntity implements Item {
@@ -117,7 +117,7 @@ index 9c0f83ff8113696309265fb9e8f6006296de86a6..c57f0ae102f1c9833ed7f93af4682caf
+ // Purpur end
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index b34f95b6104b1aebd8c07cf279e168cdb074efb9..fb6d7e6917e0b8648b5192d83f7aa6a3e3742eae 100644
+index 685553ad958249f2ec00ea1139e8bab58abf7bcb..6d46b1682a7c0b8c638a047177ff99ee8c47de9c 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -125,6 +125,49 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0062-Add-ping-command.patch b/patches/server/0060-Add-ping-command.patch
similarity index 96%
rename from patches/server/0062-Add-ping-command.patch
rename to patches/server/0060-Add-ping-command.patch
index 1b786366d..7873bddf6 100644
--- a/patches/server/0062-Add-ping-command.patch
+++ b/patches/server/0060-Add-ping-command.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Add ping command
diff --git a/src/main/java/net/minecraft/commands/Commands.java b/src/main/java/net/minecraft/commands/Commands.java
-index a5829f0726fd92faae04f978c82b2f0736bcd50b..32fbe67a2dceda1a165edc7397a64beffc537488 100644
+index 471270f302cbfaf81500976fcc5a02eaed4120f3..0aeee502c60a81e6a9ca765e57ab27f5c588ac1d 100644
--- a/src/main/java/net/minecraft/commands/Commands.java
+++ b/src/main/java/net/minecraft/commands/Commands.java
-@@ -230,6 +230,7 @@ public class Commands {
+@@ -250,6 +250,7 @@ public class Commands {
SetPlayerIdleTimeoutCommand.register(this.dispatcher);
StopCommand.register(this.dispatcher);
WhitelistCommand.register(this.dispatcher);
diff --git a/patches/server/0063-Add-demo-command.patch b/patches/server/0061-Add-demo-command.patch
similarity index 96%
rename from patches/server/0063-Add-demo-command.patch
rename to patches/server/0061-Add-demo-command.patch
index 6a34ca340..a323a3155 100644
--- a/patches/server/0063-Add-demo-command.patch
+++ b/patches/server/0061-Add-demo-command.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Add demo command
diff --git a/src/main/java/net/minecraft/commands/Commands.java b/src/main/java/net/minecraft/commands/Commands.java
-index 32fbe67a2dceda1a165edc7397a64beffc537488..4794bb7f80d3419c6da12ee0f608ba05080a409a 100644
+index 0aeee502c60a81e6a9ca765e57ab27f5c588ac1d..2bfcd4222daa7c5b5cc8cfa0545241afd3cb8d15 100644
--- a/src/main/java/net/minecraft/commands/Commands.java
+++ b/src/main/java/net/minecraft/commands/Commands.java
-@@ -230,6 +230,7 @@ public class Commands {
+@@ -250,6 +250,7 @@ public class Commands {
SetPlayerIdleTimeoutCommand.register(this.dispatcher);
StopCommand.register(this.dispatcher);
WhitelistCommand.register(this.dispatcher);
diff --git a/patches/server/0064-Add-credits-command.patch b/patches/server/0062-Add-credits-command.patch
similarity index 97%
rename from patches/server/0064-Add-credits-command.patch
rename to patches/server/0062-Add-credits-command.patch
index 5c0c78156..31293554e 100644
--- a/patches/server/0064-Add-credits-command.patch
+++ b/patches/server/0062-Add-credits-command.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Add credits command
diff --git a/src/main/java/net/minecraft/commands/Commands.java b/src/main/java/net/minecraft/commands/Commands.java
-index 4794bb7f80d3419c6da12ee0f608ba05080a409a..637648e03985868c1fe420f84fa778b06deb23ee 100644
+index 2bfcd4222daa7c5b5cc8cfa0545241afd3cb8d15..575f026c086e24663b5d38222915460923937723 100644
--- a/src/main/java/net/minecraft/commands/Commands.java
+++ b/src/main/java/net/minecraft/commands/Commands.java
-@@ -230,6 +230,7 @@ public class Commands {
+@@ -250,6 +250,7 @@ public class Commands {
SetPlayerIdleTimeoutCommand.register(this.dispatcher);
StopCommand.register(this.dispatcher);
WhitelistCommand.register(this.dispatcher);
diff --git a/patches/server/0065-Configurable-jockey-options.patch b/patches/server/0063-Configurable-jockey-options.patch
similarity index 97%
rename from patches/server/0065-Configurable-jockey-options.patch
rename to patches/server/0063-Configurable-jockey-options.patch
index 4e7a31167..91a153816 100644
--- a/patches/server/0065-Configurable-jockey-options.patch
+++ b/patches/server/0063-Configurable-jockey-options.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Configurable jockey options
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 3cde608a222ab2ef2b5fc7f543e97ba71e440ea9..6ec7d0f5e525f9e04b6fa0fb6d4da5fcc22fe653 100644
+index e9f14e8d207c99a60a4802b3412048cd1481b9f7..ebfbf67d65dc5a54e9235f44ab391147c23ddd0f 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Drowned.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Drowned.java
@@ -95,6 +95,21 @@ public class Drowned extends Zombie implements RangedAttackMob {
@@ -31,7 +31,7 @@ index 3cde608a222ab2ef2b5fc7f543e97ba71e440ea9..6ec7d0f5e525f9e04b6fa0fb6d4da5fc
protected void addBehaviourGoals() {
this.goalSelector.addGoal(1, new Drowned.DrownedGoToWaterGoal(this, 1.0D));
diff --git a/src/main/java/net/minecraft/world/entity/monster/Husk.java b/src/main/java/net/minecraft/world/entity/monster/Husk.java
-index 469ad6f0d73add7b005217b2ae39b201c7679a27..ede13fe38fb97b94180ea8557d8a45d2ae5954d3 100644
+index 4ba01ebfc93d10cd0077e32c30349afda2093fb2..a6d827b39ce9ca13103fb2f9940974e8aaaea037 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Husk.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Husk.java
@@ -51,6 +51,21 @@ public class Husk extends Zombie {
@@ -54,10 +54,10 @@ index 469ad6f0d73add7b005217b2ae39b201c7679a27..ede13fe38fb97b94180ea8557d8a45d2
+ }
+
public static boolean checkHuskSpawnRules(EntityType type, ServerLevelAccessor world, MobSpawnType spawnReason, BlockPos pos, RandomSource random) {
- return checkMonsterSpawnRules(type, world, spawnReason, pos, random) && (spawnReason == MobSpawnType.SPAWNER || world.canSeeSky(pos));
+ return checkMonsterSpawnRules(type, world, spawnReason, pos, random) && (MobSpawnType.isSpawner(spawnReason) || world.canSeeSky(pos));
}
diff --git a/src/main/java/net/minecraft/world/entity/monster/Zombie.java b/src/main/java/net/minecraft/world/entity/monster/Zombie.java
-index 3948e9e56a260ee831fa17b0a4d4240a0bc8d26d..8a30b101fd2cc78b867ae703f6a4e8805d1c841d 100644
+index f75900e33a08bd6eb13fd480fe62b49346f47bac..52f2d2df03314c8ddf70b240dca82cafa44c6b07 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Zombie.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Zombie.java
@@ -129,6 +129,18 @@ public class Zombie extends Monster {
diff --git a/patches/server/0066-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch b/patches/server/0064-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch
similarity index 99%
rename from patches/server/0066-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch
rename to patches/server/0064-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch
index 62da4293e..797c7a03d 100644
--- a/patches/server/0066-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch
+++ b/patches/server/0064-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch
@@ -257,7 +257,7 @@ index 8446ce22139fa2473c789cab67f4031a23f0d31d..ef41a462b102981d30207299d0279fd5
private float speed = 0.1F;
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 6da08454de6f0932971a230471d3558578a4b2a3..fdb2d2f67d6356c010e430fc4aee5593811cbf17 100644
+index 5fd4129889b3006018612204bc527738a78a0d35..262c6a2b63316fda5fa98fa4fcfbc0985951f6ee 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -1065,6 +1065,9 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0067-Add-phantom-spawning-options.patch b/patches/server/0065-Add-phantom-spawning-options.patch
similarity index 98%
rename from patches/server/0067-Add-phantom-spawning-options.patch
rename to patches/server/0065-Add-phantom-spawning-options.patch
index ea5475409..b1ca074b1 100644
--- a/patches/server/0067-Add-phantom-spawning-options.patch
+++ b/patches/server/0065-Add-phantom-spawning-options.patch
@@ -40,7 +40,7 @@ index dfeb3e336e06ef01f5401a362755030db942bb07..f74c5eda91a3d521763ec7bc33f23e0c
for (int l = 0; l < k; ++l) {
// Paper start
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index fdb2d2f67d6356c010e430fc4aee5593811cbf17..efd10d6f2b3d342e2cb817b1e7fa7f5f86075b8c 100644
+index 262c6a2b63316fda5fa98fa4fcfbc0985951f6ee..bf39a299c9876ab8385de7d00ce6fdf427e73a9e 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -1068,6 +1068,12 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0068-Implement-bed-explosion-options.patch b/patches/server/0066-Implement-bed-explosion-options.patch
similarity index 91%
rename from patches/server/0068-Implement-bed-explosion-options.patch
rename to patches/server/0066-Implement-bed-explosion-options.patch
index b9b420b80..29d8302ee 100644
--- a/patches/server/0068-Implement-bed-explosion-options.patch
+++ b/patches/server/0066-Implement-bed-explosion-options.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Implement bed explosion options
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 d40500f9a807cab0b2fb6fa9032f33f4fb74c895..e8405a57fb88e63b63baaf00645c417633bdc0f2 100644
+index 04b1aa22ac1df39d274f27d9c93e0492a8a673f8..ab11b017f0795f5ec8161a4831c463c780307eaa 100644
--- a/src/main/java/net/minecraft/world/level/block/BedBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/BedBlock.java
-@@ -96,7 +96,7 @@ public class BedBlock extends HorizontalDirectionalBlock implements EntityBlock
+@@ -106,7 +106,7 @@ public class BedBlock extends HorizontalDirectionalBlock implements EntityBlock
Vec3 vec3d = pos.getCenter();
@@ -17,7 +17,7 @@ index d40500f9a807cab0b2fb6fa9032f33f4fb74c895..e8405a57fb88e63b63baaf00645c4176
return InteractionResult.SUCCESS;
} else if ((Boolean) state.getValue(BedBlock.OCCUPIED)) {
if (!BedBlock.canSetSpawn(world)) return this.explodeBed(state, world, pos); // Paper - check explode first
-@@ -149,7 +149,7 @@ public class BedBlock extends HorizontalDirectionalBlock implements EntityBlock
+@@ -159,7 +159,7 @@ public class BedBlock extends HorizontalDirectionalBlock implements EntityBlock
Vec3 vec3d = blockposition.getCenter();
@@ -27,7 +27,7 @@ index d40500f9a807cab0b2fb6fa9032f33f4fb74c895..e8405a57fb88e63b63baaf00645c4176
}
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index efd10d6f2b3d342e2cb817b1e7fa7f5f86075b8c..461627c87d514b8a936ad5675abb849aa49c569d 100644
+index bf39a299c9876ab8385de7d00ce6fdf427e73a9e..41f6e686da7068f51a32c2baca643d73072e2e86 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -284,6 +284,27 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0069-Implement-respawn-anchor-explosion-options.patch b/patches/server/0067-Implement-respawn-anchor-explosion-options.patch
similarity index 92%
rename from patches/server/0069-Implement-respawn-anchor-explosion-options.patch
rename to patches/server/0067-Implement-respawn-anchor-explosion-options.patch
index db3f81e2c..e5ae3a7e4 100644
--- a/patches/server/0069-Implement-respawn-anchor-explosion-options.patch
+++ b/patches/server/0067-Implement-respawn-anchor-explosion-options.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Implement respawn anchor explosion options
diff --git a/src/main/java/net/minecraft/world/level/block/RespawnAnchorBlock.java b/src/main/java/net/minecraft/world/level/block/RespawnAnchorBlock.java
-index 2ed78cf83c0ae66a6ddba1ff307da89a24b0d0a8..ae17d6a54fad0bd2d71d306f418b5ced2f11b863 100644
+index 797ece59c10bdb60a86f71ca3b7bb95dbe0f1078..ff315a10bcc605dc4e02a8de6b7d4f10db543a6c 100644
--- a/src/main/java/net/minecraft/world/level/block/RespawnAnchorBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/RespawnAnchorBlock.java
-@@ -141,7 +141,7 @@ public class RespawnAnchorBlock extends Block {
+@@ -148,7 +148,7 @@ public class RespawnAnchorBlock extends Block {
};
Vec3 vec3d = explodedPos.getCenter();
@@ -18,7 +18,7 @@ index 2ed78cf83c0ae66a6ddba1ff307da89a24b0d0a8..ae17d6a54fad0bd2d71d306f418b5ced
public static boolean canSetSpawn(Level world) {
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 461627c87d514b8a936ad5675abb849aa49c569d..3bfdc7ba270762ec114450d30e94457405d8bc19 100644
+index 41f6e686da7068f51a32c2baca643d73072e2e86..2950033152a4309ee21bb80b70f207bb1a175738 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -324,6 +324,27 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0070-Add-allow-water-in-end-world-option.patch b/patches/server/0068-Add-allow-water-in-end-world-option.patch
similarity index 90%
rename from patches/server/0070-Add-allow-water-in-end-world-option.patch
rename to patches/server/0068-Add-allow-water-in-end-world-option.patch
index 643655e11..0d7f7fd1d 100644
--- a/patches/server/0070-Add-allow-water-in-end-world-option.patch
+++ b/patches/server/0068-Add-allow-water-in-end-world-option.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Add allow water in end world option
diff --git a/src/main/java/net/minecraft/world/item/BucketItem.java b/src/main/java/net/minecraft/world/item/BucketItem.java
-index 277555a26e8281dd1a626e572794b08cf51d00c5..48e4fecf5ae5538004e3f53093b8be7c4be1cbee 100644
+index aa0f09a18ea781e027ea70928b30d3e93061120f..5cb8f1e13f4889792395d6b498c0ade22a33b446 100644
--- a/src/main/java/net/minecraft/world/item/BucketItem.java
+++ b/src/main/java/net/minecraft/world/item/BucketItem.java
@@ -195,7 +195,7 @@ public class BucketItem extends Item implements DispensibleContainerItem {
@@ -27,10 +27,10 @@ index 277555a26e8281dd1a626e572794b08cf51d00c5..48e4fecf5ae5538004e3f53093b8be7c
return true;
diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java
-index eccc55372a7a52a92dd9418a47ece0fd2adcd6ed..4f950128114b8fb6ad145a7302ce6be327c8b6c1 100644
+index d89e36f90c7d84eaa627ef1dd9002ea0a03d8a79..4fc9331cda9063d6f3f13572efd7182327c7a9e4 100644
--- a/src/main/java/net/minecraft/world/level/Level.java
+++ b/src/main/java/net/minecraft/world/level/Level.java
-@@ -1883,4 +1883,14 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
+@@ -1900,4 +1900,14 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
}
}
// Paper end - notify observers even if grow failed
@@ -46,10 +46,10 @@ index eccc55372a7a52a92dd9418a47ece0fd2adcd6ed..4f950128114b8fb6ad145a7302ce6be3
+ // Purpur end
}
diff --git a/src/main/java/net/minecraft/world/level/block/IceBlock.java b/src/main/java/net/minecraft/world/level/block/IceBlock.java
-index 04089e6f7d6e3d532b00585870283922b6be5246..61e6d14abd54ecd5e43a5459f8daa7d86adedf44 100644
+index 4ab6997dad5b112f5105f786a6cee78c6c5667e8..bbf19716d84a0d7e71a11559ef4f62590f2f367c 100644
--- a/src/main/java/net/minecraft/world/level/block/IceBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/IceBlock.java
-@@ -33,7 +33,7 @@ public class IceBlock extends HalfTransparentBlock {
+@@ -41,7 +41,7 @@ public class IceBlock extends HalfTransparentBlock {
public void afterDestroy(Level world, BlockPos pos, ItemStack tool) {
// Paper end
if (EnchantmentHelper.getItemEnchantmentLevel(Enchantments.SILK_TOUCH, tool) == 0) {
@@ -58,7 +58,7 @@ index 04089e6f7d6e3d532b00585870283922b6be5246..61e6d14abd54ecd5e43a5459f8daa7d8
world.removeBlock(pos, false);
return;
}
-@@ -61,7 +61,7 @@ public class IceBlock extends HalfTransparentBlock {
+@@ -69,7 +69,7 @@ public class IceBlock extends HalfTransparentBlock {
return;
}
// CraftBukkit end
diff --git a/patches/server/0071-Allow-color-codes-in-books.patch b/patches/server/0069-Allow-color-codes-in-books.patch
similarity index 92%
rename from patches/server/0071-Allow-color-codes-in-books.patch
rename to patches/server/0069-Allow-color-codes-in-books.patch
index 5b312dbc9..6772989aa 100644
--- a/patches/server/0071-Allow-color-codes-in-books.patch
+++ b/patches/server/0069-Allow-color-codes-in-books.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Allow color codes in books
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
-index 3fa2997cefdff8957dd71aa87b4c2ee924b7e80a..8ffd6f79a055a56943521c6e1802eace318dc929 100644
+index 34a369dd615c4701d1bfb66a51623eab8e0b3080..2d29caa16c754b06cbfe91038b673668a1b61d02 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
-@@ -1229,13 +1229,16 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
+@@ -1233,13 +1233,16 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
itemstack1.setTag(nbttagcompound.copy());
}
@@ -28,7 +28,7 @@ index 3fa2997cefdff8957dd71aa87b4c2ee924b7e80a..8ffd6f79a055a56943521c6e1802eace
this.updateBookPages(pages, (s) -> {
return Component.Serializer.toJson(Component.literal(s));
-@@ -1247,10 +1250,13 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
+@@ -1251,10 +1254,13 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
private void updateBookPages(List list, UnaryOperator unaryoperator, ItemStack itemstack, int slot, ItemStack handItem) { // CraftBukkit
ListTag nbttaglist = new ListTag();
@@ -44,7 +44,7 @@ index 3fa2997cefdff8957dd71aa87b4c2ee924b7e80a..8ffd6f79a055a56943521c6e1802eace
Objects.requireNonNull(nbttaglist);
stream.forEach(nbttaglist::add);
-@@ -1260,11 +1266,11 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
+@@ -1264,11 +1270,11 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
for (int j = list.size(); i < j; ++i) {
FilteredText filteredtext = (FilteredText) list.get(i);
@@ -58,7 +58,7 @@ index 3fa2997cefdff8957dd71aa87b4c2ee924b7e80a..8ffd6f79a055a56943521c6e1802eace
}
}
-@@ -1277,6 +1283,16 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
+@@ -1281,6 +1287,16 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
this.player.getInventory().setItem(slot, CraftEventFactory.handleEditBookEvent(this.player, slot, handItem, itemstack)); // CraftBukkit // Paper - Don't ignore result (see other callsite for handleEditBookEvent)
}
diff --git a/patches/server/0072-Entity-lifespan.patch b/patches/server/0070-Entity-lifespan.patch
similarity index 86%
rename from patches/server/0072-Entity-lifespan.patch
rename to patches/server/0070-Entity-lifespan.patch
index 9549c0c6b..527592431 100644
--- a/patches/server/0072-Entity-lifespan.patch
+++ b/patches/server/0070-Entity-lifespan.patch
@@ -5,10 +5,10 @@ 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 8ffd6f79a055a56943521c6e1802eace318dc929..93b81303c6f5a009af7c282435671fd05ca68499 100644
+index 2d29caa16c754b06cbfe91038b673668a1b61d02..c58ede27583fa14fffcc8554d58bb47a94886e40 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
-@@ -2741,6 +2741,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
+@@ -2747,6 +2747,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
AABB axisalignedbb = entity.getBoundingBox();
if (axisalignedbb.distanceToSqr(this.player.getEyePosition()) < ServerGamePacketListenerImpl.MAX_INTERACTION_DISTANCE) {
@@ -17,10 +17,10 @@ index 8ffd6f79a055a56943521c6e1802eace318dc929..93b81303c6f5a009af7c282435671fd0
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 de635f425a69ac4f21a80a2c723adf0362501d1f..19688acdd615068b37b928c3608074c5607919ec 100644
+index ed72f020394f4dd0f1fb21953e69b1aa9716b262..b98bf8243e8014f8ef4aa0cfaddf301b997397cc 100644
--- a/src/main/java/net/minecraft/world/entity/Mob.java
+++ b/src/main/java/net/minecraft/world/entity/Mob.java
-@@ -135,6 +135,7 @@ public abstract class Mob extends LivingEntity implements Targeting {
+@@ -136,6 +136,7 @@ public abstract class Mob extends LivingEntity implements Targeting {
private BlockPos restrictCenter;
private float restrictRadius;
@@ -28,7 +28,7 @@ index de635f425a69ac4f21a80a2c723adf0362501d1f..19688acdd615068b37b928c3608074c5
public boolean aware = true; // CraftBukkit
protected Mob(EntityType extends Mob> type, Level world) {
-@@ -324,6 +325,7 @@ public abstract class Mob extends LivingEntity implements Targeting {
+@@ -323,6 +324,7 @@ public abstract class Mob extends LivingEntity implements Targeting {
entityliving = null;
}
}
@@ -36,7 +36,7 @@ index de635f425a69ac4f21a80a2c723adf0362501d1f..19688acdd615068b37b928c3608074c5
this.target = entityliving;
return true;
// CraftBukkit end
-@@ -371,8 +373,28 @@ public abstract class Mob extends LivingEntity implements Targeting {
+@@ -370,8 +372,28 @@ public abstract class Mob extends LivingEntity implements Targeting {
}
this.level().getProfiler().pop();
@@ -65,7 +65,7 @@ index de635f425a69ac4f21a80a2c723adf0362501d1f..19688acdd615068b37b928c3608074c5
@Override
protected void playHurtSound(DamageSource source) {
this.resetAmbientSoundTime();
-@@ -562,6 +584,7 @@ public abstract class Mob extends LivingEntity implements Targeting {
+@@ -561,6 +583,7 @@ public abstract class Mob extends LivingEntity implements Targeting {
}
nbt.putBoolean("Bukkit.Aware", this.aware); // CraftBukkit
@@ -73,7 +73,7 @@ index de635f425a69ac4f21a80a2c723adf0362501d1f..19688acdd615068b37b928c3608074c5
}
@Override
-@@ -632,6 +655,11 @@ public abstract class Mob extends LivingEntity implements Targeting {
+@@ -631,6 +654,11 @@ public abstract class Mob extends LivingEntity implements Targeting {
this.aware = nbt.getBoolean("Bukkit.Aware");
}
// CraftBukkit end
@@ -85,7 +85,7 @@ index de635f425a69ac4f21a80a2c723adf0362501d1f..19688acdd615068b37b928c3608074c5
}
@Override
-@@ -1708,6 +1736,7 @@ public abstract class Mob extends LivingEntity implements Targeting {
+@@ -1703,6 +1731,7 @@ public abstract class Mob extends LivingEntity implements Targeting {
this.setLastHurtMob(target);
}
@@ -94,7 +94,7 @@ index de635f425a69ac4f21a80a2c723adf0362501d1f..19688acdd615068b37b928c3608074c5
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 3bfdc7ba270762ec114450d30e94457405d8bc19..5afe1d5977f1bbc2b2c2aa5982c4eb23d82e7644 100644
+index 2950033152a4309ee21bb80b70f207bb1a175738..9df1e909f4dc21d5c3d11fa67adc15efd5d82eca 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -125,6 +125,11 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0073-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch b/patches/server/0071-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch
similarity index 93%
rename from patches/server/0073-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch
rename to patches/server/0071-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch
index 8fff655c0..b2fd0dc4e 100644
--- a/patches/server/0073-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch
+++ b/patches/server/0071-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 d8c87e4b8ca7b4872d5210e0f1e6da7a9648a122..e919fdda8b3f4012a3b48f75210513188a00cbcf 100644
+index 092808399b4450e2485d4cc3390a237ba809618a..f1260f9d4bd386c1bfddf977dc47a41082bce4f2 100644
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
-@@ -2745,4 +2745,26 @@ public class ServerPlayer extends Player {
+@@ -2846,4 +2846,26 @@ public class ServerPlayer extends Player {
return (CraftPlayer) super.getBukkitEntity();
}
// CraftBukkit end
@@ -36,7 +36,7 @@ index d8c87e4b8ca7b4872d5210e0f1e6da7a9648a122..e919fdda8b3f4012a3b48f7521051318
+ // 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 961d37c7b690369ac5b94755faef1872b705187f..76ea2ee6f0dc370125dfedb852c90b54ecd3d831 100644
+index 411d204edd6ea805c0566c6d7ac76dbdd4428309..8148c9596a17396d37b820cac40f50c2073a0c00 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
@@ -427,6 +427,7 @@ public abstract class LivingEntity extends Entity implements Attackable {
diff --git a/patches/server/0074-Squid-EAR-immunity.patch b/patches/server/0072-Squid-EAR-immunity.patch
similarity index 94%
rename from patches/server/0074-Squid-EAR-immunity.patch
rename to patches/server/0072-Squid-EAR-immunity.patch
index 6b0852511..e308ba494 100644
--- a/patches/server/0074-Squid-EAR-immunity.patch
+++ b/patches/server/0072-Squid-EAR-immunity.patch
@@ -25,7 +25,7 @@ index 3d7726bd54781e922f9d2b5b1fea510d6295919e..3557d668d5117aaaef2fde0792b58c7e
public boolean spiderRidable = false;
diff --git a/src/main/java/org/spigotmc/ActivationRange.java b/src/main/java/org/spigotmc/ActivationRange.java
-index 282a57df4e2e5708e9cfd9c76b1d7de2a8a23900..a7ecbd77d0017a298b94cceeddc049eff713f60f 100644
+index 30050800118a474dfd0a23cb66fd55de4c65ca1e..3fb2ae23bcbf0c397e91a958796f13a2dfedd152 100644
--- a/src/main/java/org/spigotmc/ActivationRange.java
+++ b/src/main/java/org/spigotmc/ActivationRange.java
@@ -15,6 +15,7 @@ import net.minecraft.world.entity.ambient.AmbientCreature;
@@ -36,7 +36,7 @@ index 282a57df4e2e5708e9cfd9c76b1d7de2a8a23900..a7ecbd77d0017a298b94cceeddc049ef
import net.minecraft.world.entity.animal.WaterAnimal;
import net.minecraft.world.entity.animal.horse.Llama;
import net.minecraft.world.entity.boss.EnderDragonPart;
-@@ -402,6 +403,7 @@ public class ActivationRange
+@@ -379,6 +380,7 @@ public class ActivationRange
*/
public static boolean checkIfActive(Entity entity)
{
diff --git a/patches/server/0075-Phantoms-burn-in-light.patch b/patches/server/0073-Phantoms-burn-in-light.patch
similarity index 98%
rename from patches/server/0075-Phantoms-burn-in-light.patch
rename to patches/server/0073-Phantoms-burn-in-light.patch
index 71c92c188..87039d62b 100644
--- a/patches/server/0075-Phantoms-burn-in-light.patch
+++ b/patches/server/0073-Phantoms-burn-in-light.patch
@@ -52,7 +52,7 @@ index ef41a462b102981d30207299d0279fd51b433a22..6849b2ad3b2db840a1af35ef06949050
list.sort(Comparator.comparing((Entity e) -> { return e.getY(); }).reversed()); // CraftBukkit - decompile error
Iterator iterator = list.iterator();
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index b9ba53461de687070dda3c0bcccbee240017033a..35be76739cda5aa4a075dc665e7702a9269d4333 100644
+index 3557d668d5117aaaef2fde0792b58c7e58546c22..81dd8666fd997f92972da2c6980c6ce515582fbc 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -1123,6 +1123,9 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0076-Configurable-villager-breeding.patch b/patches/server/0074-Configurable-villager-breeding.patch
similarity index 93%
rename from patches/server/0076-Configurable-villager-breeding.patch
rename to patches/server/0074-Configurable-villager-breeding.patch
index efadce03e..db9640681 100644
--- a/patches/server/0076-Configurable-villager-breeding.patch
+++ b/patches/server/0074-Configurable-villager-breeding.patch
@@ -5,10 +5,10 @@ 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 4dac757aec546c2128506ee899ee9517441595d1..cf4950ae95e18f64856e4bce8e70772268f3fa3a 100644
+index 0df7acbdf1c8d0546eb57291bfa952943a5f6520..ee8661840ddfbdf4a4726f96da61253a96878dfc 100644
--- a/src/main/java/net/minecraft/world/entity/npc/Villager.java
+++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java
-@@ -786,7 +786,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
+@@ -784,7 +784,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
@Override
public boolean canBreed() {
diff --git a/patches/server/0077-Redstone-deactivates-spawners.patch b/patches/server/0075-Redstone-deactivates-spawners.patch
similarity index 91%
rename from patches/server/0077-Redstone-deactivates-spawners.patch
rename to patches/server/0075-Redstone-deactivates-spawners.patch
index ce03b99d6..9d6fd1f10 100644
--- a/patches/server/0077-Redstone-deactivates-spawners.patch
+++ b/patches/server/0075-Redstone-deactivates-spawners.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Redstone deactivates spawners
diff --git a/src/main/java/net/minecraft/world/level/BaseSpawner.java b/src/main/java/net/minecraft/world/level/BaseSpawner.java
-index 1279132e2fb3e8f64f062df0ac8b8197f9d8f343..fb933cc388acf26cebe1da692b9c5dd165f797ee 100644
+index d88a23984dcea9c2119bdc245013af8b25448da3..075b4ac21707bd0b3ad2197c59359f8d33bae486 100644
--- a/src/main/java/net/minecraft/world/level/BaseSpawner.java
+++ b/src/main/java/net/minecraft/world/level/BaseSpawner.java
-@@ -71,6 +71,7 @@ public abstract class BaseSpawner {
+@@ -57,6 +57,7 @@ public abstract class BaseSpawner {
}
public boolean isNearPlayer(Level world, BlockPos pos) {
diff --git a/patches/server/0078-Totems-work-in-inventory.patch b/patches/server/0076-Totems-work-in-inventory.patch
similarity index 94%
rename from patches/server/0078-Totems-work-in-inventory.patch
rename to patches/server/0076-Totems-work-in-inventory.patch
index 55b1e58ba..5bb581d07 100644
--- a/patches/server/0078-Totems-work-in-inventory.patch
+++ b/patches/server/0076-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 642ffbd2632c9cb0438447ca83f598b1df37bd9b..5e701bd6ce6db9ef3cebbc24ce80e00aa1e558d7 100644
+index 8148c9596a17396d37b820cac40f50c2073a0c00..d512d16abc1dff33e9b430d9ba5b960f1460f9ab 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
-@@ -1631,6 +1631,18 @@ public abstract class LivingEntity extends Entity implements Attackable {
+@@ -1618,6 +1618,18 @@ public abstract class LivingEntity extends Entity implements Attackable {
}
}
diff --git a/patches/server/0079-Add-vindicator-johnny-spawn-chance.patch b/patches/server/0077-Add-vindicator-johnny-spawn-chance.patch
similarity index 100%
rename from patches/server/0079-Add-vindicator-johnny-spawn-chance.patch
rename to patches/server/0077-Add-vindicator-johnny-spawn-chance.patch
diff --git a/patches/server/0080-Dispensers-place-anvils-option.patch b/patches/server/0078-Dispensers-place-anvils-option.patch
similarity index 90%
rename from patches/server/0080-Dispensers-place-anvils-option.patch
rename to patches/server/0078-Dispensers-place-anvils-option.patch
index def613771..297118303 100644
--- a/patches/server/0080-Dispensers-place-anvils-option.patch
+++ b/patches/server/0078-Dispensers-place-anvils-option.patch
@@ -5,10 +5,10 @@ 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 a0c7c6208314d981e8577ad69ef1c5193290a085..603eac94296c32d87dccf2c6b5fd7183864346f2 100644
+index e6ac20a38f31bb0cd6b8840b2518f6992ef7f518..5e3a3565ac71cd8b1ea95b1732e5a1ec26ef6adb 100644
--- a/src/main/java/net/minecraft/core/dispenser/DispenseItemBehavior.java
+++ b/src/main/java/net/minecraft/core/dispenser/DispenseItemBehavior.java
-@@ -1188,6 +1188,23 @@ public interface DispenseItemBehavior {
+@@ -1196,6 +1196,23 @@ public interface DispenseItemBehavior {
}
}
});
@@ -33,7 +33,7 @@ index a0c7c6208314d981e8577ad69ef1c5193290a085..603eac94296c32d87dccf2c6b5fd7183
static Vec3 getEntityPokingOutOfBlockPos(BlockSource pointer, EntityType> entityType, Direction direction) {
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 008ae05e639b38a28d27a6dacbb6ef25a5c9ecbf..8ee713af7d57bbf52a9aacf11385c0a325a24aa8 100644
+index 7bcba65dfaa0076c5ce9271a5f54d01a99025242..d943ae4f0a3d6deda1596ed4c5b8c01e3653f8a1 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -315,8 +315,10 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0081-Allow-anvil-colors.patch b/patches/server/0079-Allow-anvil-colors.patch
similarity index 96%
rename from patches/server/0081-Allow-anvil-colors.patch
rename to patches/server/0079-Allow-anvil-colors.patch
index 20da3beeb..37d7e9d06 100644
--- a/patches/server/0081-Allow-anvil-colors.patch
+++ b/patches/server/0079-Allow-anvil-colors.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Allow anvil colors
diff --git a/src/main/java/net/minecraft/world/inventory/AnvilMenu.java b/src/main/java/net/minecraft/world/inventory/AnvilMenu.java
-index b500a04b8135604f0159a741b3d228c9e87b2a46..8a7c30e316db4960b0b62ca0e366c19febead214 100644
+index 9cc9925cd43c4b1b742acde9cf4fb5fe46619d24..cccd34370d76d96eddeba3de1cfc41d47f9d1f60 100644
--- a/src/main/java/net/minecraft/world/inventory/AnvilMenu.java
+++ b/src/main/java/net/minecraft/world/inventory/AnvilMenu.java
@@ -294,6 +294,54 @@ public class AnvilMenu extends ItemCombinerMenu {
@@ -64,7 +64,7 @@ index b500a04b8135604f0159a741b3d228c9e87b2a46..8a7c30e316db4960b0b62ca0e366c19f
}
} else if (itemstack.hasCustomHoverName()) {
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 8ee713af7d57bbf52a9aacf11385c0a325a24aa8..4ac9e1c076d73e3964be68f4a550e3f8e2c96a7d 100644
+index d943ae4f0a3d6deda1596ed4c5b8c01e3653f8a1..1f22aae24973fc8f6464c0de0188d01c8171546f 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -293,6 +293,13 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0082-Add-option-to-disable-dolphin-treasure-searching.patch b/patches/server/0080-Add-option-to-disable-dolphin-treasure-searching.patch
similarity index 88%
rename from patches/server/0082-Add-option-to-disable-dolphin-treasure-searching.patch
rename to patches/server/0080-Add-option-to-disable-dolphin-treasure-searching.patch
index f5d2bb8a1..950b4604f 100644
--- a/patches/server/0082-Add-option-to-disable-dolphin-treasure-searching.patch
+++ b/patches/server/0080-Add-option-to-disable-dolphin-treasure-searching.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Add option to disable dolphin treasure searching
diff --git a/src/main/java/net/minecraft/world/entity/animal/Dolphin.java b/src/main/java/net/minecraft/world/entity/animal/Dolphin.java
-index 89e3dbfddc739f97fdb6ec9a5714530f03cc7092..079fd78528377ee4236fb2e7189a5f0fc5ec4fb3 100644
+index 519e52b303cb9a2d4b1cae84d8436f2057003fcb..ff11643193495f0646de4bcf13b7f1e57731e4fb 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Dolphin.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Dolphin.java
-@@ -485,6 +485,7 @@ public class Dolphin extends WaterAnimal {
+@@ -480,6 +480,7 @@ public class Dolphin extends WaterAnimal {
@Override
public boolean canUse() {
@@ -17,7 +17,7 @@ index 89e3dbfddc739f97fdb6ec9a5714530f03cc7092..079fd78528377ee4236fb2e7189a5f0f
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 4ac9e1c076d73e3964be68f4a550e3f8e2c96a7d..f20c2daa8dabb5f6131eb6e6b8dba66cf5ad812b 100644
+index 1f22aae24973fc8f6464c0de0188d01c8171546f..afc67803bf71d26e84f9130c30ac2b1b3d1114bf 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -610,6 +610,7 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0083-Short-enderman-height.patch b/patches/server/0081-Short-enderman-height.patch
similarity index 90%
rename from patches/server/0083-Short-enderman-height.patch
rename to patches/server/0081-Short-enderman-height.patch
index 4088fc200..b9b018f25 100644
--- a/patches/server/0083-Short-enderman-height.patch
+++ b/patches/server/0081-Short-enderman-height.patch
@@ -5,10 +5,10 @@ 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 518b927dac087000b5049bc61d43a46a7379e256..5d703e322bd220665c3ce3a41e40129b238ae150 100644
+index b04f03d422a9ed4c6bf090e895a2d9a74f48ea61..ef01a87a77954f19f017129ab186afea9e6389a2 100644
--- a/src/main/java/net/minecraft/world/entity/EntityType.java
+++ b/src/main/java/net/minecraft/world/entity/EntityType.java
-@@ -309,7 +309,8 @@ public class EntityType implements FeatureElement, EntityTypeT
+@@ -311,7 +311,8 @@ public class EntityType implements FeatureElement, EntityTypeT
private Component description;
@Nullable
private ResourceLocation lootTable;
@@ -19,10 +19,10 @@ index 518b927dac087000b5049bc61d43a46a7379e256..5d703e322bd220665c3ce3a41e40129b
private static EntityType register(String id, EntityType.Builder type) { // CraftBukkit - decompile error
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 86581579aed4d8bd18c7b7ea58e2dc4fee5315ba..ebef4f39af4928ed5bd206a82aa0e3992e67db78 100644
+index 4530193e6b5d67cc6a1783b6ea537764bb5725cd..6f7f4dd703a6a2cf2d90102b23538bb2104fb464 100644
--- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
+++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
-@@ -440,6 +440,7 @@ public class EnderMan extends Monster implements NeutralMob {
+@@ -434,6 +434,7 @@ public class EnderMan extends Monster implements NeutralMob {
if (this.isInvulnerableTo(source)) {
return false;
} else if (getRider() != null && this.isControllable()) { return super.hurt(source, amount); // Purpur - no teleporting on damage
diff --git a/patches/server/0084-Stop-squids-floating-on-top-of-water.patch b/patches/server/0082-Stop-squids-floating-on-top-of-water.patch
similarity index 89%
rename from patches/server/0084-Stop-squids-floating-on-top-of-water.patch
rename to patches/server/0082-Stop-squids-floating-on-top-of-water.patch
index b1af9007a..72926b934 100644
--- a/patches/server/0084-Stop-squids-floating-on-top-of-water.patch
+++ b/patches/server/0082-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 8add0fa430b193a9a8267dd53bdf416aedbc495b..6c90cbbb93231b265b24fe45816d54e93c7cfc76 100644
+index 39bf307e3fd3c5333192e132b4cb56355444eacc..d39d3980235a022ee79b20eb5ed63fd63cd27522 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
-@@ -4406,6 +4406,12 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {
+@@ -4436,6 +4436,12 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S
this.yRotO = this.getYRot();
}
@@ -19,7 +19,7 @@ index 8add0fa430b193a9a8267dd53bdf416aedbc495b..6c90cbbb93231b265b24fe45816d54e9
+ // Purpur end
+
public boolean updateFluidHeightAndDoFluidPushing(TagKey tag, double speed) {
- if (false && this.touchingUnloadedChunk()) { // Pufferfish - cost of a lookup here is the same cost as below, so skip
+ if (this.touchingUnloadedChunk()) {
return false;
diff --git a/src/main/java/net/minecraft/world/entity/animal/Squid.java b/src/main/java/net/minecraft/world/entity/animal/Squid.java
index 913b66be2111da862e706d4978825c64cfe8b00b..f68c18b6645981126329b58379946308bbb8ccf8 100644
@@ -39,7 +39,7 @@ index 913b66be2111da862e706d4978825c64cfe8b00b..f68c18b6645981126329b58379946308
protected void registerGoals() {
this.goalSelector.addGoal(0, new Squid.SquidRandomMovementGoal(this));
diff --git a/src/main/java/net/minecraft/world/phys/AABB.java b/src/main/java/net/minecraft/world/phys/AABB.java
-index e3dbf3066337a482460238f8a94d854cf88adfa2..5c70aa2ce1a9e89c8c271201b6755ea1325058ac 100644
+index 67d595f75e0c3bffdb27b85b25ccd1f0bf1427d5..4d0c524af87d05dbd4a923ad6c40e1f26149e921 100644
--- a/src/main/java/net/minecraft/world/phys/AABB.java
+++ b/src/main/java/net/minecraft/world/phys/AABB.java
@@ -374,4 +374,10 @@ public class AABB {
diff --git a/patches/server/0085-Crying-obsidian-valid-for-portal-frames.patch b/patches/server/0083-Crying-obsidian-valid-for-portal-frames.patch
similarity index 96%
rename from patches/server/0085-Crying-obsidian-valid-for-portal-frames.patch
rename to patches/server/0083-Crying-obsidian-valid-for-portal-frames.patch
index 1ecc6916a..0263d28ae 100644
--- a/patches/server/0085-Crying-obsidian-valid-for-portal-frames.patch
+++ b/patches/server/0083-Crying-obsidian-valid-for-portal-frames.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Crying obsidian valid for portal frames
diff --git a/src/main/java/net/minecraft/world/level/portal/PortalShape.java b/src/main/java/net/minecraft/world/level/portal/PortalShape.java
-index c461e0d04047db9c0c5ecc04063cebd38bf96ec2..e7554ec800f321e4e34c926c53f2375a8c3aa979 100644
+index 590cd053a1b1c2a489772a2879998725fe0d783c..ba3f79cc1f7e672f0a9d32d262122ec6eba22b97 100644
--- a/src/main/java/net/minecraft/world/level/portal/PortalShape.java
+++ b/src/main/java/net/minecraft/world/level/portal/PortalShape.java
@@ -34,7 +34,7 @@ public class PortalShape {
diff --git a/patches/server/0086-Entities-can-use-portals-configuration.patch b/patches/server/0084-Entities-can-use-portals-configuration.patch
similarity index 90%
rename from patches/server/0086-Entities-can-use-portals-configuration.patch
rename to patches/server/0084-Entities-can-use-portals-configuration.patch
index 0ed47ca60..647dbbb6e 100644
--- a/patches/server/0086-Entities-can-use-portals-configuration.patch
+++ b/patches/server/0084-Entities-can-use-portals-configuration.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Entities can use portals configuration
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
-index 6c90cbbb93231b265b24fe45816d54e93c7cfc76..725f7d22c67f571f9794cef6d2bc856d6f88ecb5 100644
+index d39d3980235a022ee79b20eb5ed63fd63cd27522..9907c10091b0f02c43cfd2d4b0d0953b91cbb070 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
-@@ -3125,7 +3125,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {
+@@ -3142,7 +3142,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S
public void handleInsidePortal(BlockPos pos) {
if (this.isOnPortalCooldown()) {
this.setPortalCooldown();
@@ -17,7 +17,7 @@ index 6c90cbbb93231b265b24fe45816d54e93c7cfc76..725f7d22c67f571f9794cef6d2bc856d
if (!this.level().isClientSide && !pos.equals(this.portalEntrancePos)) {
this.portalEntrancePos = pos.immutable();
}
-@@ -3830,7 +3830,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {
+@@ -3851,7 +3851,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S
}
public boolean canChangeDimensions() {
diff --git a/patches/server/0087-LivingEntity-broadcastItemBreak.patch b/patches/server/0085-LivingEntity-broadcastItemBreak.patch
similarity index 85%
rename from patches/server/0087-LivingEntity-broadcastItemBreak.patch
rename to patches/server/0085-LivingEntity-broadcastItemBreak.patch
index cdd11f165..9ff14ab17 100644
--- a/patches/server/0087-LivingEntity-broadcastItemBreak.patch
+++ b/patches/server/0085-LivingEntity-broadcastItemBreak.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] LivingEntity#broadcastItemBreak
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
-index 841426fd4ea86c2f44309682a5fcbe3a39102b59..06c4647593334842217549e3266d4d6c9da81365 100644
+index a8f5f8f05973523945941e55c0c28e1e546a6a1f..93d8f8495a043efdbc763e1a35fd0ed86da5120e 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
-@@ -1126,5 +1126,11 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity {
+@@ -1131,5 +1131,11 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity {
public void setSafeFallDistance(float safeFallDistance) {
getHandle().safeFallDistance = safeFallDistance;
}
diff --git a/patches/server/0088-Customizable-wither-health-and-healing.patch b/patches/server/0086-Customizable-wither-health-and-healing.patch
similarity index 94%
rename from patches/server/0088-Customizable-wither-health-and-healing.patch
rename to patches/server/0086-Customizable-wither-health-and-healing.patch
index 3d5d57598..f1c6b7254 100644
--- a/patches/server/0088-Customizable-wither-health-and-healing.patch
+++ b/patches/server/0086-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 e6d6341f895c763fee05db3a7a7e05a68b9d36e9..8796b779ac0550e32c7313b1280278de48070baf 100644
+index 8dc320e1b5bdb042d87d4d0f6380ca19bf50a1f3..61abb5ac7de7a71d7d652b134e3b75551a14961d 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
-@@ -525,8 +525,10 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob
+@@ -518,8 +518,10 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob
}
}
diff --git a/patches/server/0089-Allow-toggling-special-MobSpawners-per-world.patch b/patches/server/0087-Allow-toggling-special-MobSpawners-per-world.patch
similarity index 95%
rename from patches/server/0089-Allow-toggling-special-MobSpawners-per-world.patch
rename to patches/server/0087-Allow-toggling-special-MobSpawners-per-world.patch
index 98a341d23..43620fb3b 100644
--- a/patches/server/0089-Allow-toggling-special-MobSpawners-per-world.patch
+++ b/patches/server/0087-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 c0f11d06e077c41d65b25396a14a4d81a39993e2..8824d5e4b6d0ab504dd80b0cceef743b456d7e2e 100644
+index 231d4065b1129815d443e76269eefba45857b59a..361037daa20a2b262b68d9b717ee35dbc8a5c41b 100644
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
-@@ -707,7 +707,24 @@ public class ServerLevel extends Level implements WorldGenLevel {
+@@ -709,7 +709,24 @@ public class ServerLevel extends Level implements WorldGenLevel {
this.dragonParts = new Int2ObjectOpenHashMap();
this.tickTime = flag1;
this.server = minecraftserver;
@@ -59,7 +59,7 @@ index 8385eb1d60f377da94e3178ab506feefb43563fd..a5443f92786427c42092aec8350e7ab3
if (NaturalSpawner.isSpawnPositionOk(SpawnPlacements.Type.ON_GROUND, world, blockposition2, EntityType.WANDERING_TRADER)) {
blockposition1 = blockposition2;
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 2495cf8d28a2f11ddd1efefd6d772fccf1e488ba..8b1b424a61397f7e3c002611de961718046f0149 100644
+index 7eb0e5512a2aa78e7dca727384656781760d57c0..320c04ee1423b5964f8ee023fc1bf76913c745e4 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -69,6 +69,12 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0090-Raid-cooldown-setting.patch b/patches/server/0088-Raid-cooldown-setting.patch
similarity index 97%
rename from patches/server/0090-Raid-cooldown-setting.patch
rename to patches/server/0088-Raid-cooldown-setting.patch
index 15742d765..160b701ef 100644
--- a/patches/server/0090-Raid-cooldown-setting.patch
+++ b/patches/server/0088-Raid-cooldown-setting.patch
@@ -49,7 +49,7 @@ index 31831811ce16265e9828fa34d9e67d8ac195d723..a1f74718240da3dfb0fc53f337ec3bf1
if (!this.raidMap.containsKey(raid.getId())) {
this.raidMap.put(raid.getId(), raid);
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 8b1b424a61397f7e3c002611de961718046f0149..bcee031a53e24a6c3731c2e0555f53ad2c5d81e8 100644
+index 320c04ee1423b5964f8ee023fc1bf76913c745e4..4bc033a3ce290b9bb64412042c642eabce2a0a5d 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -109,6 +109,7 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0091-Despawn-rate-config-options-per-projectile-type.patch b/patches/server/0089-Despawn-rate-config-options-per-projectile-type.patch
similarity index 96%
rename from patches/server/0091-Despawn-rate-config-options-per-projectile-type.patch
rename to patches/server/0089-Despawn-rate-config-options-per-projectile-type.patch
index 4f958f567..2fa3f7291 100644
--- a/patches/server/0091-Despawn-rate-config-options-per-projectile-type.patch
+++ b/patches/server/0089-Despawn-rate-config-options-per-projectile-type.patch
@@ -7,7 +7,7 @@ This patch's implementation has been removed in favor of Pufferfish's entity-tim
The config remains for migration purposes.
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index bcee031a53e24a6c3731c2e0555f53ad2c5d81e8..472f3cb5775aed6d902928b9dafe99a139d475d5 100644
+index 4bc033a3ce290b9bb64412042c642eabce2a0a5d..ba055361b27c83fd27e5347c26752e8f88d35793 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -286,6 +286,39 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0092-Add-option-to-disable-zombie-aggressiveness-towards-.patch b/patches/server/0090-Add-option-to-disable-zombie-aggressiveness-towards-.patch
similarity index 97%
rename from patches/server/0092-Add-option-to-disable-zombie-aggressiveness-towards-.patch
rename to patches/server/0090-Add-option-to-disable-zombie-aggressiveness-towards-.patch
index 6aaa898e0..7f6e878c5 100644
--- a/patches/server/0092-Add-option-to-disable-zombie-aggressiveness-towards-.patch
+++ b/patches/server/0090-Add-option-to-disable-zombie-aggressiveness-towards-.patch
@@ -20,7 +20,7 @@ index a08c00b8c0488d18be5e182f7892e5ab71d12247..338f693d098b6ab507c30f6411c9a952
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 6ec7d0f5e525f9e04b6fa0fb6d4da5fcc22fe653..64acb2e81ef65acb0d41db8b5f7c924c2e2a5e00 100644
+index ebfbf67d65dc5a54e9235f44ab391147c23ddd0f..162ecea875d99115cdd742524ce65ee74cc0d47e 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Drowned.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Drowned.java
@@ -120,7 +120,19 @@ public class Drowned extends Zombie implements RangedAttackMob {
@@ -45,7 +45,7 @@ index 6ec7d0f5e525f9e04b6fa0fb6d4da5fcc22fe653..64acb2e81ef65acb0d41db8b5f7c924c
this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, Axolotl.class, true, false));
this.targetSelector.addGoal(5, new NearestAttackableTargetGoal<>(this, Turtle.class, 10, true, false, Turtle.BABY_ON_LAND_SELECTOR));
diff --git a/src/main/java/net/minecraft/world/entity/monster/Zombie.java b/src/main/java/net/minecraft/world/entity/monster/Zombie.java
-index 8a30b101fd2cc78b867ae703f6a4e8805d1c841d..6d7b5cf3db81c4e42dda17757125d4a1c83c8c59 100644
+index 52f2d2df03314c8ddf70b240dca82cafa44c6b07..624e4007f031b5781e34f4cb6614e8c767999ee2 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Zombie.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Zombie.java
@@ -157,7 +157,19 @@ public class Zombie extends Monster {
diff --git a/patches/server/0093-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch b/patches/server/0091-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch
similarity index 90%
rename from patches/server/0093-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch
rename to patches/server/0091-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch
index c0c6e71ef..f843e3cab 100644
--- a/patches/server/0093-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch
+++ b/patches/server/0091-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch
@@ -5,10 +5,10 @@ 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 06fe5b056d78d42cdf78437eeabe1786d596b7f8..3532db21cee82c18f95c540d24b2071585d71c4e 100644
+index 7c29750e534eae4266bf7a63c50e3827401d6569..e8e9a3370ba07dc0ca47c8352f6f04a449f2268f 100644
--- a/src/main/java/net/minecraft/world/item/crafting/Ingredient.java
+++ b/src/main/java/net/minecraft/world/item/crafting/Ingredient.java
-@@ -39,6 +39,7 @@ public final class Ingredient implements Predicate {
+@@ -36,6 +36,7 @@ public final class Ingredient implements Predicate {
@Nullable
private IntList stackingIds;
public boolean exact; // CraftBukkit
@@ -16,7 +16,7 @@ index 06fe5b056d78d42cdf78437eeabe1786d596b7f8..3532db21cee82c18f95c540d24b20715
public static final Codec CODEC = Ingredient.codec(true);
public static final Codec CODEC_NONEMPTY = Ingredient.codec(false);
-@@ -70,6 +71,12 @@ public final class Ingredient implements Predicate {
+@@ -67,6 +68,12 @@ public final class Ingredient implements Predicate {
} else if (this.isEmpty()) {
return itemstack.isEmpty();
} else {
diff --git a/patches/server/0094-Flying-squids-Oh-my.patch b/patches/server/0092-Flying-squids-Oh-my.patch
similarity index 100%
rename from patches/server/0094-Flying-squids-Oh-my.patch
rename to patches/server/0092-Flying-squids-Oh-my.patch
diff --git a/patches/server/0095-Infinity-bow-settings.patch b/patches/server/0093-Infinity-bow-settings.patch
similarity index 97%
rename from patches/server/0095-Infinity-bow-settings.patch
rename to patches/server/0093-Infinity-bow-settings.patch
index 3ce820a59..e4d138d9d 100644
--- a/patches/server/0095-Infinity-bow-settings.patch
+++ b/patches/server/0093-Infinity-bow-settings.patch
@@ -27,7 +27,7 @@ index 08d597db1a5345a343777a01427655e6bf2c926b..33df0ca406dc8321b76b393f317bbd1c
} else {
user.startUsingItem(hand);
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index a85d4a9c2583f8233032b680c89b147a230bca41..598a9f2dae899513cf10e33c8baad5991597b55c 100644
+index 8af34a04370ebb0b62137387c7eb082443f68c5b..2122658e5f5b6d0d9019f79f6c53717f7094abc0 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -140,6 +140,17 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0096-Configurable-daylight-cycle.patch b/patches/server/0094-Configurable-daylight-cycle.patch
similarity index 89%
rename from patches/server/0096-Configurable-daylight-cycle.patch
rename to patches/server/0094-Configurable-daylight-cycle.patch
index 18b7454d5..e6ecc1728 100644
--- a/patches/server/0096-Configurable-daylight-cycle.patch
+++ b/patches/server/0094-Configurable-daylight-cycle.patch
@@ -18,10 +18,10 @@ index 9ec6145fe04ec64bbee8ec6a837719caebdbc6f5..358d610ad020cada1bb83e393deeeaae
public ClientboundSetTimePacket(long time, long timeOfDay, boolean doDaylightCycle) {
this.gameTime = time;
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
-index c29f8291b43a2e92e3444ab72dd23065a006f11f..cdf770adf641844caf0290a8354046aeb8e00cb3 100644
+index 6206d19c2861996699ced5eccfff8ee8ab3a7727..de211102edf78f645d3129e690e9214b47935003 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
-@@ -1523,7 +1523,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop recipe, NonNullList slots, int count) {
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 7e8816a3bd9c60844ca0fbb8674abf6c53b4d81c..02aa54fbd0605b92de9263ba852ac04e24b2fdef 100644
+index efc2accce3eada889e919c19724206eab52dd627..e1701bd63540f1672ceb821f0e37d29587847da9 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -409,6 +409,17 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0099-Arrows-should-not-reset-despawn-counter.patch b/patches/server/0097-Arrows-should-not-reset-despawn-counter.patch
similarity index 88%
rename from patches/server/0099-Arrows-should-not-reset-despawn-counter.patch
rename to patches/server/0097-Arrows-should-not-reset-despawn-counter.patch
index 0b60a6696..3a71241de 100644
--- a/patches/server/0099-Arrows-should-not-reset-despawn-counter.patch
+++ b/patches/server/0097-Arrows-should-not-reset-despawn-counter.patch
@@ -7,10 +7,10 @@ This prevents keeping arrows alive indefinitely (such as when the block
the arrow is stuck in gets removed, like a piston head going up/down)
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 8affdd74769aed9aa92a76ba539cd9d27208827c..9710d1cd31d263b29c80923c56134b1f8f6702b0 100644
+index 42ebd91196ae420eee57f4380abc558555457163..49b55db16c8c2f389fb6990b3b3ad7dc29eb10c3 100644
--- a/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java
+++ b/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java
-@@ -312,7 +312,7 @@ public abstract class AbstractArrow extends Projectile {
+@@ -319,7 +319,7 @@ public abstract class AbstractArrow extends Projectile {
Vec3 vec3d = this.getDeltaMovement();
this.setDeltaMovement(vec3d.multiply((double) (this.random.nextFloat() * 0.2F), (double) (this.random.nextFloat() * 0.2F), (double) (this.random.nextFloat() * 0.2F)));
@@ -20,7 +20,7 @@ index 8affdd74769aed9aa92a76ba539cd9d27208827c..9710d1cd31d263b29c80923c56134b1f
@Override
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 02aa54fbd0605b92de9263ba852ac04e24b2fdef..41d694ec386530f97044ff6aa98f4e436cadddd7 100644
+index e1701bd63540f1672ceb821f0e37d29587847da9..c0f3f52068d147ca06dbb87da51d628b56cf51e4 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -101,6 +101,11 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0100-Ability-to-re-add-farmland-mechanics-from-Alpha.patch b/patches/server/0098-Ability-to-re-add-farmland-mechanics-from-Alpha.patch
similarity index 92%
rename from patches/server/0100-Ability-to-re-add-farmland-mechanics-from-Alpha.patch
rename to patches/server/0098-Ability-to-re-add-farmland-mechanics-from-Alpha.patch
index 8833cf4fd..d809b89c6 100644
--- a/patches/server/0100-Ability-to-re-add-farmland-mechanics-from-Alpha.patch
+++ b/patches/server/0098-Ability-to-re-add-farmland-mechanics-from-Alpha.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Ability to re-add farmland mechanics from Alpha
diff --git a/src/main/java/net/minecraft/world/level/block/FarmBlock.java b/src/main/java/net/minecraft/world/level/block/FarmBlock.java
-index 348f7861eebd02774717fe8668102e2586f3f771..81e22b950e5f09e0e545d44e8979437c2accc29b 100644
+index bcc864cbfb9f24ad654da1fcbf7d7c76ed494ce3..73310204ed1fa4d72d2ec6239bb6e29319bb97cd 100644
--- a/src/main/java/net/minecraft/world/level/block/FarmBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/FarmBlock.java
-@@ -117,6 +117,14 @@ public class FarmBlock extends Block {
+@@ -124,6 +124,14 @@ public class FarmBlock extends Block {
return;
}
diff --git a/patches/server/0101-Add-adjustable-breeding-cooldown-to-config.patch b/patches/server/0099-Add-adjustable-breeding-cooldown-to-config.patch
similarity index 93%
rename from patches/server/0101-Add-adjustable-breeding-cooldown-to-config.patch
rename to patches/server/0099-Add-adjustable-breeding-cooldown-to-config.patch
index a8262cfeb..c635e5147 100644
--- a/patches/server/0101-Add-adjustable-breeding-cooldown-to-config.patch
+++ b/patches/server/0099-Add-adjustable-breeding-cooldown-to-config.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Add adjustable breeding cooldown to config
diff --git a/src/main/java/net/minecraft/world/entity/animal/Animal.java b/src/main/java/net/minecraft/world/entity/animal/Animal.java
-index a836bfd2ea8af8098a20fb37ca25a5a613226f67..70d3dcfdc9cd21bd347fc71db3f9446c94fdb381 100644
+index f6e0eefe068fe1a9fe159b382cf94de488521728..0116f6057f7db02f9971698871bf893f2dee0939 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Animal.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Animal.java
-@@ -149,7 +149,7 @@ public abstract class Animal extends AgeableMob {
+@@ -151,7 +151,7 @@ public abstract class Animal extends AgeableMob {
if (this.isFood(itemstack)) {
int i = this.getAge();
@@ -17,7 +17,7 @@ index a836bfd2ea8af8098a20fb37ca25a5a613226f67..70d3dcfdc9cd21bd347fc71db3f9446c
final ItemStack breedCopy = itemstack.copy(); // Paper
this.usePlayerItem(player, hand, itemstack);
this.setInLove(player, breedCopy); // Paper
-@@ -240,12 +240,20 @@ public abstract class Animal extends AgeableMob {
+@@ -242,12 +242,20 @@ public abstract class Animal extends AgeableMob {
AgeableMob entityageable = this.getBreedOffspring(world, other);
if (entityageable != null) {
@@ -42,10 +42,10 @@ index a836bfd2ea8af8098a20fb37ca25a5a613226f67..70d3dcfdc9cd21bd347fc71db3f9446c
EntityBreedEvent entityBreedEvent = org.bukkit.craftbukkit.event.CraftEventFactory.callEntityBreedEvent(entityageable, this, other, breeder, this.breedItem, experience);
if (entityBreedEvent.isCancelled()) {
diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java
-index a8a494df6019230f7a301176580db9eb2d552030..80b4d8d1283c03681106853fd83bf6df0392c230 100644
+index 4fc9331cda9063d6f3f13572efd7182327c7a9e4..aec194669dbb13563a83abb64df2f0b64cc64cc7 100644
--- a/src/main/java/net/minecraft/world/level/Level.java
+++ b/src/main/java/net/minecraft/world/level/Level.java
-@@ -194,6 +194,49 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
+@@ -197,6 +197,49 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
}
// Paper end - fix and optimise world upgrading
@@ -95,7 +95,7 @@ index a8a494df6019230f7a301176580db9eb2d552030..80b4d8d1283c03681106853fd83bf6df
public CraftWorld getWorld() {
return this.world;
}
-@@ -217,6 +260,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
+@@ -218,6 +261,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
this.spigotConfig = new org.spigotmc.SpigotWorldConfig(((net.minecraft.world.level.storage.PrimaryLevelData) worlddatamutable).getLevelName()); // Spigot
this.paperConfig = paperWorldConfigCreator.apply(this.spigotConfig); // Paper
this.purpurConfig = new org.purpurmc.purpur.PurpurWorldConfig(((net.minecraft.world.level.storage.PrimaryLevelData) worlddatamutable).getLevelName(), env); // Purpur
@@ -104,7 +104,7 @@ index a8a494df6019230f7a301176580db9eb2d552030..80b4d8d1283c03681106853fd83bf6df
this.world = new CraftWorld((ServerLevel) this, gen, biomeProvider, env);
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 957fb2554554be7912f434b999a9ddd31681b92a..ff50c24f3a6e2dd0eb5d4e23cc9a38647e2c1194 100644
+index 30cc6cf6911fef48454a213370e4759f6f71e357..7ebc466f72e61e11e73ab20a98f72d16cea7c077 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -115,6 +115,7 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0102-Make-entity-breeding-times-configurable.patch b/patches/server/0100-Make-entity-breeding-times-configurable.patch
similarity index 97%
rename from patches/server/0102-Make-entity-breeding-times-configurable.patch
rename to patches/server/0100-Make-entity-breeding-times-configurable.patch
index 8f7fa72e9..0ddcdf597 100644
--- a/patches/server/0102-Make-entity-breeding-times-configurable.patch
+++ b/patches/server/0100-Make-entity-breeding-times-configurable.patch
@@ -22,7 +22,7 @@ index 0cc411dd39d981187c9e9a3c5eb8043b19a09b98..f7032f4ea55f5aca293c2640686238b7
// CraftBukkit end
world.broadcastEntityEvent(entityvillager2, (byte) 12);
diff --git a/src/main/java/net/minecraft/world/entity/animal/Animal.java b/src/main/java/net/minecraft/world/entity/animal/Animal.java
-index 70d3dcfdc9cd21bd347fc71db3f9446c94fdb381..a434d91b8dfff30cff81df964ea8149caa8cb604 100644
+index 0116f6057f7db02f9971698871bf893f2dee0939..8df8a48bd1dbbb4a6835f68bd700eac2b5acf91b 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Animal.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Animal.java
@@ -42,6 +42,7 @@ public abstract class Animal extends AgeableMob {
@@ -33,7 +33,7 @@ index 70d3dcfdc9cd21bd347fc71db3f9446c94fdb381..a434d91b8dfff30cff81df964ea8149c
protected Animal(EntityType extends Animal> type, Level world) {
super(type, world);
-@@ -281,8 +282,10 @@ public abstract class Animal extends AgeableMob {
+@@ -283,8 +284,10 @@ public abstract class Animal extends AgeableMob {
entityplayer.awardStat(Stats.ANIMALS_BRED);
CriteriaTriggers.BRED_ANIMALS.trigger(entityplayer, this, entityanimal, entityageable);
} // Paper
@@ -47,10 +47,10 @@ index 70d3dcfdc9cd21bd347fc71db3f9446c94fdb381..a434d91b8dfff30cff81df964ea8149c
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 ee9a12a0285f43535b377e5aea2c3e9e5f64b496..cd53ac9806f80409082f394e978295fd414d745d 100644
+index 9496bf72eb4cda6c2675daabe5ad82e90d12e173..6d3e16e9fb043d538b9c093fb79d092fce90d75a 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Bee.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Bee.java
-@@ -476,6 +476,11 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal {
+@@ -483,6 +483,11 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal {
this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.beeMaxHealth);
}
@@ -111,7 +111,7 @@ index d42c8bcd85ffb1e00d2883485bf22981611b0bc3..c501704251e5b23f697efc307ebdc906
protected void registerGoals() {
this.goalSelector.addGoal(0, new FloatGoal(this));
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 72bdeff4cacac8669e2608ef9353318cb5fb16f0..fc4b66e0a0561fc6705a50dc65b1120301f02f77 100644
+index 88e26b2653eac1898f266b7c8f9f6e0fba422a52..fdab9a9ad76a0ad8f83ddbff278096637fd34a50 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Fox.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Fox.java
@@ -188,6 +188,11 @@ public class Fox extends Animal implements VariantHolder {
@@ -140,7 +140,7 @@ index 72bdeff4cacac8669e2608ef9353318cb5fb16f0..fc4b66e0a0561fc6705a50dc65b11203
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 c83e5d58ca5db1e63e099f36006043f7e78ea56f..cdf2bd4b2aa43b1d45fb0f0e8c4a14057ca39525 100644
+index f27ca76b153dc33d20dc46a57f1dda4e91e82883..09fc3c6ddf99854d43b6577b4d2d74665f32dfa3 100644
--- a/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java
+++ b/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java
@@ -85,6 +85,11 @@ public class MushroomCow extends Cow implements Shearable, VariantHolder {
@@ -346,7 +346,7 @@ index 3098f90ef97f69dbaf482ce0acd0c0c7ba3572b9..3cef040c0e8869ca2ca2cb83c8f60a0f
protected Brain.Provider brainProvider() {
return Brain.provider(MEMORY_TYPES, SENSOR_TYPES);
diff --git a/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java b/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java
-index fef3b7d193d20c4fdd50b38c6a0371f05165a49d..93295d9683293121f2267350194f18e97b2421c2 100644
+index e48ff5d0592f0d91974a49fd7ed1d0ee97172abe..599a980c1b66215c4430a5b11acfbc4e451f724f 100644
--- a/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java
+++ b/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java
@@ -109,6 +109,11 @@ public class Goat extends Animal {
@@ -426,10 +426,10 @@ index abbeb305b2d09e9c4c02ade603adac5ceb34bdd0..1de48560ac5a1db8845c98c812b2e9f9
protected SoundEvent getAmbientSound() {
return SoundEvents.MULE_AMBIENT;
diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/SkeletonHorse.java b/src/main/java/net/minecraft/world/entity/animal/horse/SkeletonHorse.java
-index cc8813c572618700981403d513f30b8a06e4c49e..e618d3b77cafeaee22b4140449703ca80bdd4c92 100644
+index 68981762e3b71cfdf12180c9a711f22b33c471b7..76de20b86b6b99c10379adeb303fac4371891923 100644
--- a/src/main/java/net/minecraft/world/entity/animal/horse/SkeletonHorse.java
+++ b/src/main/java/net/minecraft/world/entity/animal/horse/SkeletonHorse.java
-@@ -53,6 +53,11 @@ public class SkeletonHorse extends AbstractHorse {
+@@ -57,6 +57,11 @@ public class SkeletonHorse extends AbstractHorse {
return generateSpeed(this.level().purpurConfig.skeletonHorseMovementSpeedMin, this.level().purpurConfig.skeletonHorseMovementSpeedMax);
}
@@ -458,10 +458,10 @@ index 4abb9d5fedf63eba9dc3f716d44ea11806607af0..3632fcb124be8cf77d9bebf7b861a481
public boolean isTraderLlama() {
return true;
diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/ZombieHorse.java b/src/main/java/net/minecraft/world/entity/animal/horse/ZombieHorse.java
-index ebfd54d835cdac3f95c926b3e2e10db6170b4dd7..93c44b8cc86ca4fe0c70855d4eb71411c5a42846 100644
+index 4835950272c2a95cbcbfe3423bb83997ec6ee2c1..aaec706b7eaa6afdf7959e6dd53cc39344bb97df 100644
--- a/src/main/java/net/minecraft/world/entity/animal/horse/ZombieHorse.java
+++ b/src/main/java/net/minecraft/world/entity/animal/horse/ZombieHorse.java
-@@ -49,6 +49,11 @@ public class ZombieHorse extends AbstractHorse {
+@@ -53,6 +53,11 @@ public class ZombieHorse extends AbstractHorse {
return generateSpeed(this.level().purpurConfig.zombieHorseMovementSpeedMin, this.level().purpurConfig.zombieHorseMovementSpeedMax);
}
@@ -506,7 +506,7 @@ index 9b853fd05a3a851cb08d7f849b51f2b220780982..10136a5062d154456c962e7d1a99c2de
BlockPos.MutableBlockPos blockposition_mutableblockposition = pos.mutable();
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 22788892f7286f3fa6b40059b2bedaf0c6ec5ef3..80f91a11c04763c1c9ed2bd242b88b5a473560d7 100644
+index 3a98f2fab709cd83f853f59a5678fdd4b7bd70d3..e2c26768fe87ee6a8e4dada7280c09a6e5210503 100644
--- a/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java
+++ b/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java
@@ -91,6 +91,11 @@ public class Hoglin extends Animal implements Enemy, HoglinBase {
diff --git a/patches/server/0103-Apply-display-names-from-item-forms-of-entities-to-e.patch b/patches/server/0101-Apply-display-names-from-item-forms-of-entities-to-e.patch
similarity index 90%
rename from patches/server/0103-Apply-display-names-from-item-forms-of-entities-to-e.patch
rename to patches/server/0101-Apply-display-names-from-item-forms-of-entities-to-e.patch
index 08750963b..7afe94dbe 100644
--- a/patches/server/0103-Apply-display-names-from-item-forms-of-entities-to-e.patch
+++ b/patches/server/0101-Apply-display-names-from-item-forms-of-entities-to-e.patch
@@ -6,10 +6,10 @@ Subject: [PATCH] Apply display names from item forms of entities to entities
diff --git a/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java b/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java
-index 14424afdb708df7f93caf6df45412ec721b5e1dd..a164e13ddfe64b212fc5937b455096287d3151d8 100644
+index b9bb4745cf540b5720259b009e973633647c36c6..1bb58a662f885670e3104e30c7ff0160198ceeed 100644
--- a/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java
+++ b/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java
-@@ -619,7 +619,7 @@ public class ArmorStand extends LivingEntity {
+@@ -606,7 +606,7 @@ public class ArmorStand extends LivingEntity {
private org.bukkit.event.entity.EntityDeathEvent brokenByPlayer(DamageSource damageSource) { // Paper
ItemStack itemstack = new ItemStack(Items.ARMOR_STAND);
@@ -19,10 +19,10 @@ index 14424afdb708df7f93caf6df45412ec721b5e1dd..a164e13ddfe64b212fc5937b45509628
}
diff --git a/src/main/java/net/minecraft/world/entity/decoration/ItemFrame.java b/src/main/java/net/minecraft/world/entity/decoration/ItemFrame.java
-index 759ecd79534a7706f7d4a63eb9dacbefcfe54674..182faba889dc15a3500c5919cad8a5483a53033a 100644
+index 69912c5b300b67394dce3876d2d96872033cf156..d728dc8a9b5fa2de0a824aaf132ee15db090b02e 100644
--- a/src/main/java/net/minecraft/world/entity/decoration/ItemFrame.java
+++ b/src/main/java/net/minecraft/world/entity/decoration/ItemFrame.java
-@@ -273,7 +273,13 @@ public class ItemFrame extends HangingEntity {
+@@ -268,7 +268,13 @@ public class ItemFrame extends HangingEntity {
}
if (alwaysDrop) {
@@ -57,24 +57,24 @@ index 03c065d0ad97d29f3586ba2bf3cd207b867ed634..62cdc36a21c0203ed98d2946a1efdf54
}
diff --git a/src/main/java/net/minecraft/world/entity/vehicle/Boat.java b/src/main/java/net/minecraft/world/entity/vehicle/Boat.java
-index 96f4ef06d16483bd4bb88cc36207d5bdc4bd1280..c314febb75a85ef12051bde392c5b57e9c5d85ac 100644
+index 960bada23cb89a7f270d1ee24d62f2bc108522af..7e9c88efd2a1edea673d1ef81635c2891a04d30e 100644
--- a/src/main/java/net/minecraft/world/entity/vehicle/Boat.java
+++ b/src/main/java/net/minecraft/world/entity/vehicle/Boat.java
-@@ -242,7 +242,13 @@ public class Boat extends Entity implements VariantHolder {
- }
+@@ -968,7 +968,13 @@ public class Boat extends VehicleEntity implements VariantHolder {
- protected void destroy(DamageSource source) {
-- this.spawnAtLocation((ItemLike) this.getDropItem());
+ @Override
+ public ItemStack getPickResult() {
+- return new ItemStack(this.getDropItem());
+ // Purpur start
+ final ItemStack boat = new ItemStack(this.getDropItem());
+ if (this.level().purpurConfig.persistentDroppableEntityDisplayNames && this.hasCustomName()) {
+ boat.setHoverName(this.getCustomName());
+ }
-+ this.spawnAtLocation(boat);
++ return boat;
+ // Purpur end
}
- @Override
+ public static enum Type implements StringRepresentable {
diff --git a/src/main/java/net/minecraft/world/item/ArmorStandItem.java b/src/main/java/net/minecraft/world/item/ArmorStandItem.java
index 7cffc64573008502bdd14ae4906fe51166b12fb3..1feafdbb48cf760cb6ebf95d5be2c32bdb1ad44f 100644
--- a/src/main/java/net/minecraft/world/item/ArmorStandItem.java
@@ -95,10 +95,10 @@ index 7cffc64573008502bdd14ae4906fe51166b12fb3..1feafdbb48cf760cb6ebf95d5be2c32b
world.playSound((Player) null, entityarmorstand.getX(), entityarmorstand.getY(), entityarmorstand.getZ(), SoundEvents.ARMOR_STAND_PLACE, SoundSource.BLOCKS, 0.75F, 0.8F);
entityarmorstand.gameEvent(GameEvent.ENTITY_PLACE, context.getPlayer());
diff --git a/src/main/java/net/minecraft/world/item/BoatItem.java b/src/main/java/net/minecraft/world/item/BoatItem.java
-index aec7ac31a35b1cc81f40b3fbeb5cf95c0f2c8a6c..cbcd35e60a2c344c83978abf0b94c2120ff53dee 100644
+index 67a5a201d0b26ca7b27e6d0c3ffb9f8b6e16bce0..ec3d60b561de45349b705b7f14592be930af4b91 100644
--- a/src/main/java/net/minecraft/world/item/BoatItem.java
+++ b/src/main/java/net/minecraft/world/item/BoatItem.java
-@@ -69,6 +69,11 @@ public class BoatItem extends Item {
+@@ -71,6 +71,11 @@ public class BoatItem extends Item {
entityboat.setVariant(this.type);
entityboat.setYRot(user.getYRot());
@@ -136,7 +136,7 @@ index b2ad6d230de2c29f371178bccde1111c7532ee70..6667926519a0f1c151e53f59cce36e74
if (((HangingEntity) object).survives()) {
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 48de43f61f90e2610e04d04803b374cead07f655..6f08b0556b0c8e4d4547ee7982c083972a8e1043 100644
+index 569a09a73c9d800e78a77c430494292457453ab1..82d7028c1fc2ddfbb8bbcee9205375f4807c8e25 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -97,8 +97,10 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0104-Set-name-visible-when-using-a-Name-Tag-on-an-Armor-S.patch b/patches/server/0102-Set-name-visible-when-using-a-Name-Tag-on-an-Armor-S.patch
similarity index 96%
rename from patches/server/0104-Set-name-visible-when-using-a-Name-Tag-on-an-Armor-S.patch
rename to patches/server/0102-Set-name-visible-when-using-a-Name-Tag-on-an-Armor-S.patch
index 05866acfb..5874d723d 100644
--- a/patches/server/0104-Set-name-visible-when-using-a-Name-Tag-on-an-Armor-S.patch
+++ b/patches/server/0102-Set-name-visible-when-using-a-Name-Tag-on-an-Armor-S.patch
@@ -17,7 +17,7 @@ index 2941c16ef486345b57ab2dfcd26f0272285d3b5a..7cc6812bf6f2ba015f65fd1fc1eaac02
((Mob) newEntityLiving).setPersistenceRequired();
// Paper end
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 6f08b0556b0c8e4d4547ee7982c083972a8e1043..28584fe38e7eebf6c4a4e5e84ff064db18067d63 100644
+index 82d7028c1fc2ddfbb8bbcee9205375f4807c8e25..725c942c6c9b26c9fa0b3aeb65f51a34996f72d3 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -98,9 +98,11 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0105-Add-config-for-allowing-Endermen-to-despawn-even-whi.patch b/patches/server/0103-Add-config-for-allowing-Endermen-to-despawn-even-whi.patch
similarity index 89%
rename from patches/server/0105-Add-config-for-allowing-Endermen-to-despawn-even-whi.patch
rename to patches/server/0103-Add-config-for-allowing-Endermen-to-despawn-even-whi.patch
index fb4ad129e..805305067 100644
--- a/patches/server/0105-Add-config-for-allowing-Endermen-to-despawn-even-whi.patch
+++ b/patches/server/0103-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 ebef4f39af4928ed5bd206a82aa0e3992e67db78..aecccc96a1ea7fbd774a4ccbd45c11be1da1b43b 100644
+index 6f7f4dd703a6a2cf2d90102b23538bb2104fb464..2566cabec8ede95d2b7ea7c063ae9cb8a1a0bdf1 100644
--- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
+++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
-@@ -501,7 +501,7 @@ public class EnderMan extends Monster implements NeutralMob {
+@@ -495,7 +495,7 @@ public class EnderMan extends Monster implements NeutralMob {
@Override
public boolean requiresCustomPersistence() {
@@ -21,7 +21,7 @@ index ebef4f39af4928ed5bd206a82aa0e3992e67db78..aecccc96a1ea7fbd774a4ccbd45c11be
private static class EndermanFreezeWhenLookedAt extends Goal {
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 28584fe38e7eebf6c4a4e5e84ff064db18067d63..da8485add57441b426a526cde2a83fd7d0cd8d22 100644
+index 725c942c6c9b26c9fa0b3aeb65f51a34996f72d3..b2c8ec43768c1a3243bca0998350400d8ea51b89 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -833,6 +833,7 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0106-Add-configurable-snowball-damage.patch b/patches/server/0104-Add-configurable-snowball-damage.patch
similarity index 95%
rename from patches/server/0106-Add-configurable-snowball-damage.patch
rename to patches/server/0104-Add-configurable-snowball-damage.patch
index fc62adeca..6a739bed7 100644
--- a/patches/server/0106-Add-configurable-snowball-damage.patch
+++ b/patches/server/0104-Add-configurable-snowball-damage.patch
@@ -18,7 +18,7 @@ index 718e120c9768cf716b32d3d652f53f1dda925168..b90cedad282e95a067aca176fafa9f72
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index da8485add57441b426a526cde2a83fd7d0cd8d22..d6c4a63fad4bf17ea2aa2f0e364ccd99478e5c70 100644
+index b2c8ec43768c1a3243bca0998350400d8ea51b89..06558480c2f3b9b1e81ba48fe7c7a80ea5652599 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -350,6 +350,11 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0107-Changeable-Mob-Left-Handed-Chance.patch b/patches/server/0105-Changeable-Mob-Left-Handed-Chance.patch
similarity index 86%
rename from patches/server/0107-Changeable-Mob-Left-Handed-Chance.patch
rename to patches/server/0105-Changeable-Mob-Left-Handed-Chance.patch
index a78775c65..9e3c2f351 100644
--- a/patches/server/0107-Changeable-Mob-Left-Handed-Chance.patch
+++ b/patches/server/0105-Changeable-Mob-Left-Handed-Chance.patch
@@ -5,10 +5,10 @@ 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 19688acdd615068b37b928c3608074c5607919ec..dd75a1115d02506f1e99688817cb724b22b3e696 100644
+index b98bf8243e8014f8ef4aa0cfaddf301b997397cc..9794b8262028db136e7282c5451e18b7f5d70f88 100644
--- a/src/main/java/net/minecraft/world/entity/Mob.java
+++ b/src/main/java/net/minecraft/world/entity/Mob.java
-@@ -1303,7 +1303,7 @@ public abstract class Mob extends LivingEntity implements Targeting {
+@@ -1298,7 +1298,7 @@ public abstract class Mob extends LivingEntity implements Targeting {
RandomSource randomsource = world.getRandom();
this.getAttribute(Attributes.FOLLOW_RANGE).addPermanentModifier(new AttributeModifier("Random spawn bonus", randomsource.triangle(0.0D, 0.11485000000000001D), AttributeModifier.Operation.MULTIPLY_BASE));
@@ -18,7 +18,7 @@ index 19688acdd615068b37b928c3608074c5607919ec..dd75a1115d02506f1e99688817cb724b
} else {
this.setLeftHanded(false);
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index d6c4a63fad4bf17ea2aa2f0e364ccd99478e5c70..ed11a1ca61ef0401936cd612e463a2ad4111585f 100644
+index 06558480c2f3b9b1e81ba48fe7c7a80ea5652599..d1792d16fe745c22a2408ca7b6446348563e5b63 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -156,8 +156,10 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0108-Add-boat-fall-damage-config.patch b/patches/server/0106-Add-boat-fall-damage-config.patch
similarity index 95%
rename from patches/server/0108-Add-boat-fall-damage-config.patch
rename to patches/server/0106-Add-boat-fall-damage-config.patch
index 3159d85b8..01f2bb01b 100644
--- a/patches/server/0108-Add-boat-fall-damage-config.patch
+++ b/patches/server/0106-Add-boat-fall-damage-config.patch
@@ -5,10 +5,10 @@ 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 e919fdda8b3f4012a3b48f75210513188a00cbcf..ccde38369c07f4f1760ca2a6d76c54c148521643 100644
+index f1260f9d4bd386c1bfddf977dc47a41082bce4f2..16058e98dbe426791637682316cf0b11160d30f1 100644
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
-@@ -1107,7 +1107,16 @@ public class ServerPlayer extends Player {
+@@ -1111,7 +1111,16 @@ public class ServerPlayer extends Player {
if (this.isInvulnerableTo(source)) {
return false;
} else {
diff --git a/patches/server/0109-Snow-Golem-rate-of-fire-config.patch b/patches/server/0107-Snow-Golem-rate-of-fire-config.patch
similarity index 100%
rename from patches/server/0109-Snow-Golem-rate-of-fire-config.patch
rename to patches/server/0107-Snow-Golem-rate-of-fire-config.patch
diff --git a/patches/server/0110-EMC-Configurable-disable-give-dropping.patch b/patches/server/0108-EMC-Configurable-disable-give-dropping.patch
similarity index 100%
rename from patches/server/0110-EMC-Configurable-disable-give-dropping.patch
rename to patches/server/0108-EMC-Configurable-disable-give-dropping.patch
diff --git a/patches/server/0111-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch b/patches/server/0109-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch
similarity index 98%
rename from patches/server/0111-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch
rename to patches/server/0109-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch
index 1649f9496..59acbaf7b 100644
--- a/patches/server/0111-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch
+++ b/patches/server/0109-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch
@@ -136,10 +136,10 @@ index cb1d91f9fe98f21c2afbe3894dfd9bca3bdd3ba6..d2703432af207c74ea8d298a784329c3
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 cf4950ae95e18f64856e4bce8e70772268f3fa3a..339918b33e825f20a174981c9d5fbda95f4706e7 100644
+index ee8661840ddfbdf4a4726f96da61253a96878dfc..192e6af840ce939fd8e008a80ee0c6ad43cb51e6 100644
--- a/src/main/java/net/minecraft/world/entity/npc/Villager.java
+++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java
-@@ -224,7 +224,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
+@@ -222,7 +222,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
brain.addActivity(Activity.PLAY, VillagerGoalPackages.getPlayPackage(0.5F));
} else {
brain.setSchedule(Schedule.VILLAGER_DEFAULT);
@@ -148,7 +148,7 @@ index cf4950ae95e18f64856e4bce8e70772268f3fa3a..339918b33e825f20a174981c9d5fbda9
}
brain.addActivity(Activity.CORE, VillagerGoalPackages.getCorePackage(villagerprofession, 0.5F));
-@@ -979,6 +979,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
+@@ -977,6 +977,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
public boolean hasFarmSeeds() {
return this.getInventory().hasAnyMatching((itemstack) -> {
diff --git a/patches/server/0112-Toggle-for-Zombified-Piglin-death-always-counting-as.patch b/patches/server/0110-Toggle-for-Zombified-Piglin-death-always-counting-as.patch
similarity index 100%
rename from patches/server/0112-Toggle-for-Zombified-Piglin-death-always-counting-as.patch
rename to patches/server/0110-Toggle-for-Zombified-Piglin-death-always-counting-as.patch
diff --git a/patches/server/0113-Configurable-chance-for-wolves-to-spawn-rabid.patch b/patches/server/0111-Configurable-chance-for-wolves-to-spawn-rabid.patch
similarity index 100%
rename from patches/server/0113-Configurable-chance-for-wolves-to-spawn-rabid.patch
rename to patches/server/0111-Configurable-chance-for-wolves-to-spawn-rabid.patch
diff --git a/patches/server/0114-Configurable-default-collar-color.patch b/patches/server/0112-Configurable-default-collar-color.patch
similarity index 100%
rename from patches/server/0114-Configurable-default-collar-color.patch
rename to patches/server/0112-Configurable-default-collar-color.patch
diff --git a/patches/server/0115-Phantom-flames-on-swoop.patch b/patches/server/0113-Phantom-flames-on-swoop.patch
similarity index 95%
rename from patches/server/0115-Phantom-flames-on-swoop.patch
rename to patches/server/0113-Phantom-flames-on-swoop.patch
index 74e54c201..b9427eaa1 100644
--- a/patches/server/0115-Phantom-flames-on-swoop.patch
+++ b/patches/server/0113-Phantom-flames-on-swoop.patch
@@ -17,7 +17,7 @@ index 6849b2ad3b2db840a1af35ef069490506449c861..0f13a3f38760f1117bd545702db7a5b1
@Override
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 96d21c69da492eb6646e3cc71029cbe6208c6406..e7a9a9c1a5261076f810d58a7be137354ac14d1a 100644
+index 9df131e8e3c14aedfafa491b4765dc05f468d01f..6bd5bcebc0d5a080ebc5d711fb7a942576a26f9c 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -1299,6 +1299,7 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0116-Option-for-chests-to-open-even-with-a-solid-block-on.patch b/patches/server/0114-Option-for-chests-to-open-even-with-a-solid-block-on.patch
similarity index 86%
rename from patches/server/0116-Option-for-chests-to-open-even-with-a-solid-block-on.patch
rename to patches/server/0114-Option-for-chests-to-open-even-with-a-solid-block-on.patch
index b843cf0e6..162131e17 100644
--- a/patches/server/0116-Option-for-chests-to-open-even-with-a-solid-block-on.patch
+++ b/patches/server/0114-Option-for-chests-to-open-even-with-a-solid-block-on.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Option for chests to open even with a solid block on top
diff --git a/src/main/java/net/minecraft/world/level/block/ChestBlock.java b/src/main/java/net/minecraft/world/level/block/ChestBlock.java
-index 5e22d175b1048a58802cdf64ac70a8b56329e915..d81946b400f208c39941128ce823ff7709741c10 100644
+index 9804ee2020e5cef23d3f5174d153fc149e611503..3a5e5cf88c5592e1bc3e6dc9eced2d1dd47bd145 100644
--- a/src/main/java/net/minecraft/world/level/block/ChestBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/ChestBlock.java
-@@ -355,6 +355,7 @@ public class ChestBlock extends AbstractChestBlock implements
+@@ -358,6 +358,7 @@ public class ChestBlock extends AbstractChestBlock implements
}
private static boolean isBlockedChestByBlock(BlockGetter world, BlockPos pos) {
@@ -17,7 +17,7 @@ index 5e22d175b1048a58802cdf64ac70a8b56329e915..d81946b400f208c39941128ce823ff77
return world.getBlockState(blockposition1).isRedstoneConductor(world, blockposition1);
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index e7a9a9c1a5261076f810d58a7be137354ac14d1a..74a210a911211d38be77a6d00a0c032c14f48aad 100644
+index 6bd5bcebc0d5a080ebc5d711fb7a942576a26f9c..ef40f177856981c16c667c202480591ad1334109 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -419,6 +419,11 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0117-Implement-TPSBar.patch b/patches/server/0115-Implement-TPSBar.patch
similarity index 94%
rename from patches/server/0117-Implement-TPSBar.patch
rename to patches/server/0115-Implement-TPSBar.patch
index fdef05c8b..a502d3603 100644
--- a/patches/server/0117-Implement-TPSBar.patch
+++ b/patches/server/0115-Implement-TPSBar.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Implement TPSBar
diff --git a/src/main/java/net/minecraft/commands/Commands.java b/src/main/java/net/minecraft/commands/Commands.java
-index 637648e03985868c1fe420f84fa778b06deb23ee..e1887523b0b6a0479544385932f54ab1de0295ae 100644
+index 575f026c086e24663b5d38222915460923937723..77cced190bd287ff3f5bc8697f16b333da0bc786 100644
--- a/src/main/java/net/minecraft/commands/Commands.java
+++ b/src/main/java/net/minecraft/commands/Commands.java
-@@ -233,6 +233,7 @@ public class Commands {
+@@ -253,6 +253,7 @@ public class Commands {
org.purpurmc.purpur.command.CreditsCommand.register(this.dispatcher); // Purpur
org.purpurmc.purpur.command.DemoCommand.register(this.dispatcher); // Purpur
org.purpurmc.purpur.command.PingCommand.register(this.dispatcher); // Purpur
@@ -17,10 +17,10 @@ index 637648e03985868c1fe420f84fa778b06deb23ee..e1887523b0b6a0479544385932f54ab1
if (environment.includeIntegrated) {
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
-index cef1f7169880560a9c79667320e63d552fa4aa03..13b57942eb63b2a9460f96ec59bb9ba36fe65e04 100644
+index de211102edf78f645d3129e690e9214b47935003..e7f3034fbb3cb6c606724bb6e2a8e0102b06b56f 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
-@@ -1008,6 +1008,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop viewDistances = new java.util.concurrent.atomic.AtomicReference<>(new io.papermc.paper.chunk.system.RegionizedPlayerChunkLoader.ViewDistances(-1, -1, -1));
-@@ -562,6 +563,7 @@ public class ServerPlayer extends Player {
+@@ -569,6 +570,7 @@ public class ServerPlayer extends Player {
}
}
@@ -60,7 +60,7 @@ index ccde38369c07f4f1760ca2a6d76c54c148521643..0070c97ef46dff0bc8ccea4ce3815180
}
@Override
-@@ -628,6 +630,7 @@ public class ServerPlayer extends Player {
+@@ -635,6 +637,7 @@ public class ServerPlayer extends Player {
}
this.getBukkitEntity().setExtraData(nbt); // CraftBukkit
@@ -68,7 +68,7 @@ index ccde38369c07f4f1760ca2a6d76c54c148521643..0070c97ef46dff0bc8ccea4ce3815180
}
// CraftBukkit start - World fallback code, either respawn location or global spawn
-@@ -2775,5 +2778,13 @@ public class ServerPlayer extends Player {
+@@ -2876,5 +2879,13 @@ public class ServerPlayer extends Player {
this.server.getPlayerList().respawn(this, toLevel, true, to, !toLevel.paperConfig().environment.disableTeleportationSuffocationCheck, org.bukkit.event.player.PlayerRespawnEvent.RespawnReason.DEATH);
}
}
@@ -83,10 +83,10 @@ index ccde38369c07f4f1760ca2a6d76c54c148521643..0070c97ef46dff0bc8ccea4ce3815180
// Purpur end
}
diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java
-index d4d7493569ecf3eb9456b4005f269b94fe08941e..1774b424620863d2fd1f6353b3ce7e9b0fc0e132 100644
+index e46fcb5c8bf1047e3f330fd525166aee5f0b646b..61a34f3e49b21254984011bc470d72c86d55dba1 100644
--- a/src/main/java/net/minecraft/server/players/PlayerList.java
+++ b/src/main/java/net/minecraft/server/players/PlayerList.java
-@@ -488,6 +488,7 @@ public abstract class PlayerList {
+@@ -486,6 +486,7 @@ public abstract class PlayerList {
scoreboard.addPlayerToTeam(player.getScoreboardName(), collideRuleTeam);
}
// Paper end
@@ -94,7 +94,7 @@ index d4d7493569ecf3eb9456b4005f269b94fe08941e..1774b424620863d2fd1f6353b3ce7e9b
// CraftBukkit - Moved from above, added world
PlayerList.LOGGER.info("{}[{}] logged in with entity id {} at ([{}]{}, {}, {})", player.getName().getString(), s1, player.getId(), worldserver1.serverLevelData.getLevelName(), player.getX(), player.getY(), player.getZ());
}
-@@ -601,6 +602,7 @@ public abstract class PlayerList {
+@@ -599,6 +600,7 @@ public abstract class PlayerList {
}
public net.kyori.adventure.text.Component remove(ServerPlayer entityplayer, net.kyori.adventure.text.Component leaveMessage) {
// Paper end
diff --git a/patches/server/0118-Striders-give-saddle-back.patch b/patches/server/0116-Striders-give-saddle-back.patch
similarity index 100%
rename from patches/server/0118-Striders-give-saddle-back.patch
rename to patches/server/0116-Striders-give-saddle-back.patch
diff --git a/patches/server/0119-PlayerBookTooLargeEvent.patch b/patches/server/0117-PlayerBookTooLargeEvent.patch
similarity index 92%
rename from patches/server/0119-PlayerBookTooLargeEvent.patch
rename to patches/server/0117-PlayerBookTooLargeEvent.patch
index ecf70b9c5..74393e412 100644
--- a/patches/server/0119-PlayerBookTooLargeEvent.patch
+++ b/patches/server/0117-PlayerBookTooLargeEvent.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] PlayerBookTooLargeEvent
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
-index 93b81303c6f5a009af7c282435671fd05ca68499..8ed7699d2f8b636cce023c1afe0e196c8361725c 100644
+index c58ede27583fa14fffcc8554d58bb47a94886e40..5ab5c85a4c3d03dba2a3943462ccff0a3e725555 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
-@@ -1149,10 +1149,15 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
+@@ -1153,10 +1153,15 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
int maxBookPageSize = io.papermc.paper.configuration.GlobalConfiguration.get().itemValidation.bookSize.pageMax;
double multiplier = Math.max(0.3D, Math.min(1D, io.papermc.paper.configuration.GlobalConfiguration.get().itemValidation.bookSize.totalMultiplier));
long byteAllowed = maxBookPageSize;
@@ -24,7 +24,7 @@ index 93b81303c6f5a009af7c282435671fd05ca68499..8ed7699d2f8b636cce023c1afe0e196c
server.scheduleOnMain(() -> this.disconnect("Book too large!", org.bukkit.event.player.PlayerKickEvent.Cause.ILLEGAL_ACTION)); // Paper - kick event cause
return;
}
-@@ -1176,6 +1181,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
+@@ -1180,6 +1185,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
if (byteTotal > byteAllowed) {
ServerGamePacketListenerImpl.LOGGER.warn(this.player.getScoreboardName() + " tried to send too large of a book. Book Size: " + byteTotal + " - Allowed: "+ byteAllowed + " - Pages: " + pageList.size());
diff --git a/patches/server/0120-Full-netherite-armor-grants-fire-resistance.patch b/patches/server/0118-Full-netherite-armor-grants-fire-resistance.patch
similarity index 94%
rename from patches/server/0120-Full-netherite-armor-grants-fire-resistance.patch
rename to patches/server/0118-Full-netherite-armor-grants-fire-resistance.patch
index 05957c47a..934747f2b 100644
--- a/patches/server/0120-Full-netherite-armor-grants-fire-resistance.patch
+++ b/patches/server/0118-Full-netherite-armor-grants-fire-resistance.patch
@@ -5,7 +5,7 @@ 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 dd7e47ddde00e0b4f3b9833c1793246547ba0cf2..a21feaa31c6aa3c7f2198b3b4a84af101aa16988 100644
+index fad32d590828fe2f9acec80c76a452c1fd7f4005..2cd998414287b3bc2412c0bbd2f6244e7fedb331 100644
--- a/src/main/java/net/minecraft/world/entity/player/Player.java
+++ b/src/main/java/net/minecraft/world/entity/player/Player.java
@@ -367,6 +367,16 @@ public abstract class Player extends LivingEntity {
@@ -26,7 +26,7 @@ index dd7e47ddde00e0b4f3b9833c1793246547ba0cf2..a21feaa31c6aa3c7f2198b3b4a84af10
protected ItemCooldowns createItemCooldowns() {
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index a877974c3b3336ae49da1bcf56b66427d1748c35..be24ad68043d014d23879dfe4730c582a7b81689 100644
+index 810745ee8b2f3dedf50533e31000ed29c2929718..88609510c379d0e7d94f3d821f828ed0313a9fe3 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -295,6 +295,19 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0121-Fix-rotating-UP-DOWN-CW-and-CCW.patch b/patches/server/0119-Fix-rotating-UP-DOWN-CW-and-CCW.patch
similarity index 100%
rename from patches/server/0121-Fix-rotating-UP-DOWN-CW-and-CCW.patch
rename to patches/server/0119-Fix-rotating-UP-DOWN-CW-and-CCW.patch
diff --git a/patches/server/0122-Add-mobGriefing-bypass-to-everything-affected.patch b/patches/server/0120-Add-mobGriefing-bypass-to-everything-affected.patch
similarity index 95%
rename from patches/server/0122-Add-mobGriefing-bypass-to-everything-affected.patch
rename to patches/server/0120-Add-mobGriefing-bypass-to-everything-affected.patch
index 5fead2498..9712c8f0f 100644
--- a/patches/server/0122-Add-mobGriefing-bypass-to-everything-affected.patch
+++ b/patches/server/0120-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 8f12325c79d16d2bdce2e6f07909f9f200d708e5..98e395f13a327967fe6ed8b7044a48903cf34eaa 100644
+index d512d16abc1dff33e9b430d9ba5b960f1460f9ab..ae3be8f490a245a76a76a85d12ba26906c499981 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
-@@ -1810,7 +1810,7 @@ public abstract class LivingEntity extends Entity implements Attackable {
+@@ -1795,7 +1795,7 @@ public abstract class LivingEntity extends Entity implements Attackable {
boolean flag = false;
if (this.dead && adversary instanceof WitherBoss) { // Paper
@@ -18,10 +18,10 @@ index 8f12325c79d16d2bdce2e6f07909f9f200d708e5..98e395f13a327967fe6ed8b7044a4890
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 dd75a1115d02506f1e99688817cb724b22b3e696..54d1e9c9d98bbf8f408c3c9906d76c662ab2c90e 100644
+index 9794b8262028db136e7282c5451e18b7f5d70f88..ab459c32467e67b1a813ecdc56a12e2372e03faa 100644
--- a/src/main/java/net/minecraft/world/entity/Mob.java
+++ b/src/main/java/net/minecraft/world/entity/Mob.java
-@@ -704,7 +704,7 @@ public abstract class Mob extends LivingEntity implements Targeting {
+@@ -703,7 +703,7 @@ public abstract class Mob extends LivingEntity implements Targeting {
public void aiStep() {
super.aiStep();
this.level().getProfiler().push("looting");
@@ -57,7 +57,7 @@ index a85885ee51df585fa11ae9f8fcd67ff2a71c5a18..d81509e08e70ec5b2f837c9dc66b1254
@Override
diff --git a/src/main/java/net/minecraft/world/entity/ai/goal/EatBlockGoal.java b/src/main/java/net/minecraft/world/entity/ai/goal/EatBlockGoal.java
-index 93bbda61f0eb2dd52573602b1f9cc7b031d1fc5a..63f9e5e2490e5b2fec6f2395077e21e601804ca5 100644
+index 4e2c23ccdf4e4a4d65b291dbe20952bae1838bff..0da884a833f6c707fea512e826658c3bb73f7a77 100644
--- a/src/main/java/net/minecraft/world/entity/ai/goal/EatBlockGoal.java
+++ b/src/main/java/net/minecraft/world/entity/ai/goal/EatBlockGoal.java
@@ -74,7 +74,7 @@ public class EatBlockGoal extends Goal {
@@ -92,7 +92,7 @@ index 509317a26c79f453335df1c19dc4c9ec570046af..8e4d673e4f2d7f50ea5ed13794da08b1
} 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 fc4b66e0a0561fc6705a50dc65b1120301f02f77..cf58894de9804770ba1722e2c0b727d3a637bf9f 100644
+index fdab9a9ad76a0ad8f83ddbff278096637fd34a50..fc3ec667aa2b8c3fe537cda0aeddd2192c0bbedf 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Fox.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Fox.java
@@ -1385,7 +1385,7 @@ public class Fox extends Animal implements VariantHolder {
@@ -131,10 +131,10 @@ index d3da7487f911ff791dca5f7b546dccda751fe44c..84e0a41620fd52af0cd22dc92fd13ee4
}
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 a5b2af9d56e4efece7161d25dbc88f343ef233cc..39d7fe20ef5b3ca34a72a50bb8d9c35aa3b2ed23 100644
+index e28e25b0563bb6022ad1fb49f1c46fe619b65602..2a0e45b9580b73c453aba02f822f10bd3a1f7c9d 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
-@@ -603,7 +603,7 @@ public class EnderDragon extends Mob implements Enemy {
+@@ -605,7 +605,7 @@ public class EnderDragon extends Mob implements Enemy {
BlockState iblockdata = this.level().getBlockState(blockposition);
if (!iblockdata.isAir() && !iblockdata.is(BlockTags.DRAGON_TRANSPARENT)) {
@@ -144,10 +144,10 @@ index a5b2af9d56e4efece7161d25dbc88f343ef233cc..39d7fe20ef5b3ca34a72a50bb8d9c35a
// flag1 = this.level().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 84bd2cf1797f68eadbd0a21f2cfb6ce85710d928..bd4658651ba8bccdc5b8a7d59e70e527942615dd 100644
+index 61abb5ac7de7a71d7d652b134e3b75551a14961d..16c88fc3c865652496f0ecf6b7e92a97d20eeb00 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
-@@ -492,7 +492,7 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob
+@@ -485,7 +485,7 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob
if (this.destroyBlocksTick > 0) {
--this.destroyBlocksTick;
@@ -157,10 +157,10 @@ index 84bd2cf1797f68eadbd0a21f2cfb6ce85710d928..bd4658651ba8bccdc5b8a7d59e70e527
j = Mth.floor(this.getX());
int i1 = Mth.floor(this.getZ());
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 c8f1d2de8682761ef8d4d50302c211f32b086783..51524661a62cbfe5ff7a3b7d640260e911902b23 100644
+index 2566cabec8ede95d2b7ea7c063ae9cb8a1a0bdf1..c17a01a995eb3fe46403f241effec86694ad0eaf 100644
--- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
+++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
-@@ -549,7 +549,15 @@ public class EnderMan extends Monster implements NeutralMob {
+@@ -543,7 +543,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 c8f1d2de8682761ef8d4d50302c211f32b086783..51524661a62cbfe5ff7a3b7d640260e9
}
@Override
-@@ -595,7 +603,15 @@ public class EnderMan extends Monster implements NeutralMob {
+@@ -589,7 +597,15 @@ public class EnderMan extends Monster implements NeutralMob {
@Override
public boolean canUse() {
if (!enderman.level().purpurConfig.endermanAllowGriefing) return false; // Purpur
@@ -195,10 +195,10 @@ index c8f1d2de8682761ef8d4d50302c211f32b086783..51524661a62cbfe5ff7a3b7d640260e9
@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 86999c7932216871b4b6e06d68168e3b48038a18..fbcb6b4cf4234d6eba989210012ab360c1b323a4 100644
+index 30a04ea1f66fe5dbbae27a48764e4bd0f66bf0b1..a7e77eae357e0fd146f340f8c3981f1a0d705b32 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Evoker.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Evoker.java
-@@ -345,7 +345,7 @@ public class Evoker extends SpellcasterIllager {
+@@ -351,7 +351,7 @@ public class Evoker extends SpellcasterIllager {
return false;
} else if (Evoker.this.tickCount < this.nextAttackTickCount) {
return false;
@@ -243,10 +243,10 @@ index 1738f0a251e4cab2eb3f122e83366afb02201765..49a37d294bac8205ac0a795daa300ccc
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 d9b1bde3ce458b7e50f7645d07ee578d13006a0a..d133820c47ecda733aa8242acdb2cd3ba0f0b677 100644
+index 7c1e3bdd68433319681c67251c82c6810e69dbcb..92d90700cf06ac06b6c13abc78f6dc771e11bd7a 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
-@@ -424,7 +424,7 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento
+@@ -423,7 +423,7 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento
@Override
public boolean wantsToPickUp(ItemStack stack) {
@@ -284,17 +284,18 @@ index 6b67eec90cd0dc1b20762514eac97f75fdbdf182..2dec28091d1816e9d4c749a5155e8303
// 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 cd0629581bae5f805842157af36c2d838e01bee3..b0a559dfefac693bda8692a30fbaa5ac8062ef27 100644
+index 2f058cec80c6ef7a5a5ca065dc6c9fe353c521de..e8036e3b124b9357a54a0f30e8610cbd885f5644 100644
--- a/src/main/java/net/minecraft/world/entity/projectile/Projectile.java
+++ b/src/main/java/net/minecraft/world/entity/projectile/Projectile.java
-@@ -326,6 +326,6 @@ public abstract class Projectile extends Entity implements TraceableEntity {
+@@ -304,7 +304,7 @@ public abstract class Projectile extends Entity implements TraceableEntity {
public boolean mayInteract(Level world, BlockPos pos) {
Entity entity = this.getOwner();
- return entity instanceof Player ? entity.mayInteract(world, pos) : entity == null || world.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING);
+ return entity instanceof Player ? entity.mayInteract(world, pos) : entity == null || world.purpurConfig.projectilesBypassMobGriefing || world.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING);
}
- }
+
+ public boolean mayBreak(Level world) {
diff --git a/src/main/java/net/minecraft/world/entity/projectile/SmallFireball.java b/src/main/java/net/minecraft/world/entity/projectile/SmallFireball.java
index 9d43c8520953d6fe0d0948f9dbe14e0650ee01c2..deee9fffe6981d7e728621cc799a812d78000592 100644
--- a/src/main/java/net/minecraft/world/entity/projectile/SmallFireball.java
@@ -322,10 +323,10 @@ index cdbc925ef61b8b439415f0a89368227890bcecb2..300411e88cdaef7e0ce280edbd5f18fa
if (this.mob.hasActiveRaid() && !this.mob.getCurrentRaid().isOver() && this.mob.canBeLeader() && !ItemStack.matches(this.mob.getItemBySlot(EquipmentSlot.HEAD), Raid.getLeaderBannerInstance())) {
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 6365ddea0c23bc5d4009d98915f2b39aed2a0328..c7ba8503b2722e5d9ce0699b959cd6be01128055 100644
+index 9550ce8588c6aa3ba4cbbbb86912eae2b452eb01..059582e872f9f3c47187e12dbe174541aa934787 100644
--- a/src/main/java/net/minecraft/world/level/block/CropBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/CropBlock.java
-@@ -172,7 +172,7 @@ public class CropBlock extends BushBlock implements BonemealableBlock {
+@@ -179,7 +179,7 @@ public class CropBlock extends BushBlock implements BonemealableBlock {
@Override
public void entityInside(BlockState state, Level world, BlockPos pos, Entity entity) {
if (!new io.papermc.paper.event.entity.EntityInsideBlockEvent(entity.getBukkitEntity(), org.bukkit.craftbukkit.block.CraftBlock.at(world, pos)).callEvent()) { return; } // Paper
@@ -335,10 +336,10 @@ index 6365ddea0c23bc5d4009d98915f2b39aed2a0328..c7ba8503b2722e5d9ce0699b959cd6be
}
diff --git a/src/main/java/net/minecraft/world/level/block/FarmBlock.java b/src/main/java/net/minecraft/world/level/block/FarmBlock.java
-index 81e22b950e5f09e0e545d44e8979437c2accc29b..84daad72bfd5f2bf29c5f2b75b6699a27ff43b5a 100644
+index 73310204ed1fa4d72d2ec6239bb6e29319bb97cd..bcef88bf7e9d4fa09c4ebec26464b5bfb96d865d 100644
--- a/src/main/java/net/minecraft/world/level/block/FarmBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/FarmBlock.java
-@@ -103,7 +103,7 @@ public class FarmBlock extends Block {
+@@ -110,7 +110,7 @@ public class FarmBlock extends Block {
@Override
public void fallOn(Level world, BlockState state, BlockPos pos, Entity entity, float fallDistance) {
super.fallOn(world, state, pos, entity, fallDistance); // CraftBukkit - moved here as game rules / events shouldn't affect fall damage.
@@ -348,10 +349,10 @@ index 81e22b950e5f09e0e545d44e8979437c2accc29b..84daad72bfd5f2bf29c5f2b75b6699a2
org.bukkit.event.Cancellable cancellable;
if (entity instanceof Player) {
diff --git a/src/main/java/net/minecraft/world/level/block/PowderSnowBlock.java b/src/main/java/net/minecraft/world/level/block/PowderSnowBlock.java
-index e6fcea4482d5d87ed78beefad4c57bc86089460f..1626eb90a6b348ad9735b82452f52d4560075a03 100644
+index f579911b06b66e94e6311d970e93cca33fa089c6..2c63579226409a1823d2e8990e7ffc4250b83afb 100644
--- a/src/main/java/net/minecraft/world/level/block/PowderSnowBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/PowderSnowBlock.java
-@@ -73,7 +73,7 @@ public class PowderSnowBlock extends Block implements BucketPickup {
+@@ -80,7 +80,7 @@ public class PowderSnowBlock extends Block implements BucketPickup {
if (!world.isClientSide) {
// CraftBukkit start
if (entity.isOnFire() && entity.mayInteract(world, pos)) {
@@ -361,10 +362,10 @@ index e6fcea4482d5d87ed78beefad4c57bc86089460f..1626eb90a6b348ad9735b82452f52d45
}
// CraftBukkit end
diff --git a/src/main/java/net/minecraft/world/level/block/TurtleEggBlock.java b/src/main/java/net/minecraft/world/level/block/TurtleEggBlock.java
-index 18feb559f9fd157dd4a01faf2b2bb18df2a64675..9c834e3deed07eb70e6a57df2db732c1e2334737 100644
+index f5eb45df4f2c9914e1780bb10fb085713c411a4d..44bb9930313cae9d150cc08cbdcced10a35bd07d 100644
--- a/src/main/java/net/minecraft/world/level/block/TurtleEggBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/TurtleEggBlock.java
-@@ -213,7 +213,7 @@ public class TurtleEggBlock extends Block {
+@@ -220,7 +220,7 @@ public class TurtleEggBlock extends Block {
}
if (entity instanceof Player) return true;
diff --git a/patches/server/0123-Config-to-allow-Note-Block-sounds-when-blocked.patch b/patches/server/0121-Config-to-allow-Note-Block-sounds-when-blocked.patch
similarity index 92%
rename from patches/server/0123-Config-to-allow-Note-Block-sounds-when-blocked.patch
rename to patches/server/0121-Config-to-allow-Note-Block-sounds-when-blocked.patch
index 7d3285485..aec5797be 100644
--- a/patches/server/0123-Config-to-allow-Note-Block-sounds-when-blocked.patch
+++ b/patches/server/0121-Config-to-allow-Note-Block-sounds-when-blocked.patch
@@ -9,10 +9,10 @@ Normally, the sounds will only play when the block directly above is air.
With this patch enabled, players can place any block above the Note Block and it will still work.
diff --git a/src/main/java/net/minecraft/world/level/block/NoteBlock.java b/src/main/java/net/minecraft/world/level/block/NoteBlock.java
-index e46d84750bdd7c940f400efda226e12a3fdc3848..6343cd0c33cafb30225cfae17ea1cf15859073b1 100644
+index ff16075fbfe664c73a46bc4b002450867974114e..604053c7b5b2b7f2f1666baa3e0ce5acf3b37e46 100644
--- a/src/main/java/net/minecraft/world/level/block/NoteBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/NoteBlock.java
-@@ -87,7 +87,7 @@ public class NoteBlock extends Block {
+@@ -94,7 +94,7 @@ public class NoteBlock extends Block {
}
private void playNote(@Nullable Entity entity, BlockState state, Level world, BlockPos pos) {
@@ -22,7 +22,7 @@ index e46d84750bdd7c940f400efda226e12a3fdc3848..6343cd0c33cafb30225cfae17ea1cf15
// org.bukkit.event.block.NotePlayEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callNotePlayEvent(world, pos, state.getValue(NoteBlock.INSTRUMENT), state.getValue(NoteBlock.NOTE));
// if (event.isCancelled()) {
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 499595ee7ab97559f562ecfbf4479a6b75506d9d..8c624ac93c3a24bb472217ae89dc8c9c82192407 100644
+index 1ee8dfb7d6efea66293cfd8059b8a84a77999fb2..647b58652a87d1d1b4b022853052ea19afa80152 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -118,6 +118,7 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0124-Add-EntityTeleportHinderedEvent.patch b/patches/server/0122-Add-EntityTeleportHinderedEvent.patch
similarity index 93%
rename from patches/server/0124-Add-EntityTeleportHinderedEvent.patch
rename to patches/server/0122-Add-EntityTeleportHinderedEvent.patch
index 2c26ee871..4d0909fc1 100644
--- a/patches/server/0124-Add-EntityTeleportHinderedEvent.patch
+++ b/patches/server/0122-Add-EntityTeleportHinderedEvent.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/level/block/EndPortalBlock.java b/src/main/java/net/minecraft/world/level/block/EndPortalBlock.java
-index 41d7cff39fc37955877668337689b4b26cd8c7cf..f80f6da484f4144e743079e5104bf503419074b2 100644
+index c82ebcac07033d887af499f81520982fbe5ed4f1..bc73d1051749339b44ff6765162ab6a76663a628 100644
--- a/src/main/java/net/minecraft/world/level/block/EndPortalBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/EndPortalBlock.java
-@@ -46,6 +46,14 @@ public class EndPortalBlock extends BaseEntityBlock {
+@@ -54,6 +54,14 @@ public class EndPortalBlock extends BaseEntityBlock {
public void entityInside(BlockState state, Level world, BlockPos pos, Entity entity) {
if (!new io.papermc.paper.event.entity.EntityInsideBlockEvent(entity.getBukkitEntity(), org.bukkit.craftbukkit.block.CraftBlock.at(world, pos)).callEvent()) { return; } // Paper
if (world instanceof ServerLevel && entity.canChangeDimensions() && Shapes.joinIsNotEmpty(Shapes.create(entity.getBoundingBox().move((double) (-pos.getX()), (double) (-pos.getY()), (double) (-pos.getZ()))), state.getShape(world, pos), BooleanOp.AND)) {
@@ -36,10 +36,10 @@ index 41d7cff39fc37955877668337689b4b26cd8c7cf..f80f6da484f4144e743079e5104bf503
ServerLevel worldserver = ((ServerLevel) world).getServer().getLevel(resourcekey);
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 a6ab0d0defc05e56a91084c49897059670a1324b..2c085c4a154cb0f8a1d38453f43474a764398784 100644
+index ee998d06804e344ea9d5b84ef0074b84aaba04c2..c51ac562d642061ce60db66ae9a86eecd9d85ecb 100644
--- a/src/main/java/net/minecraft/world/level/block/NetherPortalBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/NetherPortalBlock.java
-@@ -84,6 +84,14 @@ public class NetherPortalBlock extends Block {
+@@ -92,6 +92,14 @@ public class NetherPortalBlock extends Block {
public void entityInside(BlockState state, Level world, BlockPos pos, Entity entity) {
if (!new io.papermc.paper.event.entity.EntityInsideBlockEvent(entity.getBukkitEntity(), org.bukkit.craftbukkit.block.CraftBlock.at(world, pos)).callEvent()) { return; } // Paper
if (entity.canChangeDimensions()) {
@@ -74,10 +74,10 @@ index 9717b37aef9f487502e696c209ae209ab3b8f000..7291e4056b8e46ab59b71818388ac55f
blockEntity.teleportCooldown = 100;
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
-index 4c5d6e37f7d56436119278bbfad503867d9ccddb..b636553c33b8a09c9d92ff8f355affe05e1579cf 100644
+index fed6671e518b2f1601bbf4154195a844fc3b0fd1..669405e0a38adc5336aa004011544346c44bc5bc 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
-@@ -600,6 +600,10 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
+@@ -607,6 +607,10 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
// Paper end
if ((!ignorePassengers && this.entity.isVehicle()) || this.entity.isRemoved()) { // Paper - Teleport passenger API
@@ -89,10 +89,10 @@ index 4c5d6e37f7d56436119278bbfad503867d9ccddb..b636553c33b8a09c9d92ff8f355affe0
}
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-index e1efdda967847af492f069861ef19dd307bc76a1..a4aed376b8c66dc251cdbaa98a067c26694c4b8d 100644
+index 62e5bdd889392f6e2da73d093ff77ac355a4ea3c..6413d01dbdabb2f9d9507403dca92391e9dc08bc 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-@@ -1363,6 +1363,10 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+@@ -1375,6 +1375,10 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
}
if (entity.isVehicle() && !ignorePassengers) { // Paper - Teleport API
diff --git a/patches/server/0125-Farmland-trampling-changes.patch b/patches/server/0123-Farmland-trampling-changes.patch
similarity index 95%
rename from patches/server/0125-Farmland-trampling-changes.patch
rename to patches/server/0123-Farmland-trampling-changes.patch
index e8a8d4cca..66bbf3c24 100644
--- a/patches/server/0125-Farmland-trampling-changes.patch
+++ b/patches/server/0123-Farmland-trampling-changes.patch
@@ -12,10 +12,10 @@ necessary to trample in the first place. Feather Falling 1 requires
you to fall over 3+ blocks to trample. FF 2 requires 4+, etc.
diff --git a/src/main/java/net/minecraft/world/level/block/FarmBlock.java b/src/main/java/net/minecraft/world/level/block/FarmBlock.java
-index 84daad72bfd5f2bf29c5f2b75b6699a27ff43b5a..84107011175b6e58b463d5d1b716a3262be0db77 100644
+index bcef88bf7e9d4fa09c4ebec26464b5bfb96d865d..5c93cf7f97ecf4fba2c905b293ca7d21d1424f30 100644
--- a/src/main/java/net/minecraft/world/level/block/FarmBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/FarmBlock.java
-@@ -118,12 +118,20 @@ public class FarmBlock extends Block {
+@@ -125,12 +125,20 @@ public class FarmBlock extends Block {
}
// Purpur start
diff --git a/patches/server/0126-Movement-options-for-armor-stands.patch b/patches/server/0124-Movement-options-for-armor-stands.patch
similarity index 86%
rename from patches/server/0126-Movement-options-for-armor-stands.patch
rename to patches/server/0124-Movement-options-for-armor-stands.patch
index 7d43f24db..85f9bf338 100644
--- a/patches/server/0126-Movement-options-for-armor-stands.patch
+++ b/patches/server/0124-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 95fecfaaffe6c7b6a46490518917285ea8551c05..bfd8eb90479bdb1cad6343c04995788b31b3e05c 100644
+index 9907c10091b0f02c43cfd2d4b0d0953b91cbb070..da036cb4be83301a22c9f5af9c7f1439a9347799 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
-@@ -1870,7 +1870,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {
+@@ -1863,7 +1863,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S
return this.isInWater() || flag;
}
@@ -30,7 +30,7 @@ index 95fecfaaffe6c7b6a46490518917285ea8551c05..bfd8eb90479bdb1cad6343c04995788b
if (entity instanceof Boat) {
diff --git a/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java b/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java
-index 3238e9e8bfff4dc33247d8bf29d408f262e4172e..aa2b21c2f96b096499cf9d8e077a0aed1ea6f654 100644
+index 1bb58a662f885670e3104e30c7ff0160198ceeed..5332e072e3c278a1d9769feb783b9419020a36d1 100644
--- a/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java
+++ b/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java
@@ -99,10 +99,12 @@ public class ArmorStand extends LivingEntity {
@@ -46,16 +46,16 @@ index 3238e9e8bfff4dc33247d8bf29d408f262e4172e..aa2b21c2f96b096499cf9d8e077a0aed
this.handItems = NonNullList.withSize(2, ItemStack.EMPTY);
this.armorItems = NonNullList.withSize(4, ItemStack.EMPTY);
this.headPose = ArmorStand.DEFAULT_HEAD_POSE;
-@@ -1025,4 +1027,18 @@ public class ArmorStand extends LivingEntity {
+@@ -1005,4 +1007,18 @@ public class ArmorStand extends LivingEntity {
+ }
}
// Paper end
- // Paper end
+
+ // Purpur start
+ @Override
+ public void updateInWaterStateAndDoWaterCurrentPushing() {
+ if (this.level().purpurConfig.armorstandWaterMovement &&
-+ (this.level().purpurConfig.armorstandWaterFence || !(level().getBlockState(blockPosition().below()).getBlock() instanceof net.minecraft.world.level.block.FenceBlock)))
++ (this.level().purpurConfig.armorstandWaterFence || !(level().getBlockState(blockPosition().below()).getBlock() instanceof net.minecraft.world.level.block.FenceBlock)))
+ super.updateInWaterStateAndDoWaterCurrentPushing();
+ }
+
@@ -66,7 +66,7 @@ index 3238e9e8bfff4dc33247d8bf29d408f262e4172e..aa2b21c2f96b096499cf9d8e077a0aed
+ // Purpur end
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index a27a2fb4d9643ed0d2cb4bbad8c09052978e123c..4352f37b8568c7e9ce8cce66c2a1b36d6d9f8520 100644
+index 87daca07c8f22475921fb8ee968e3d5bfbb0a41c..08136dfa12437d4d4bf7b5d3d9404db671e6925c 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -99,10 +99,16 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0127-Fix-stuck-in-portals.patch b/patches/server/0125-Fix-stuck-in-portals.patch
similarity index 90%
rename from patches/server/0127-Fix-stuck-in-portals.patch
rename to patches/server/0125-Fix-stuck-in-portals.patch
index 78760201e..b67ed1e11 100644
--- a/patches/server/0127-Fix-stuck-in-portals.patch
+++ b/patches/server/0125-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 0070c97ef46dff0bc8ccea4ce3815180916d974e..0b8a6290f7a7efbeb4433a066a0f8878adcd4467 100644
+index 3349082af08600894fbca04533f9ab4a9bf2dfd9..c63502c452c3804fafe31fe4daf2aed8f16427a0 100644
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
-@@ -1266,6 +1266,7 @@ public class ServerPlayer extends Player {
+@@ -1270,6 +1270,7 @@ public class ServerPlayer extends Player {
playerlist.sendPlayerPermissionLevel(this);
worldserver1.removePlayerImmediately(this, Entity.RemovalReason.CHANGED_DIMENSION);
this.unsetRemoved();
@@ -17,10 +17,10 @@ index 0070c97ef46dff0bc8ccea4ce3815180916d974e..0b8a6290f7a7efbeb4433a066a0f8878
// CraftBukkit end
this.setServerLevel(worldserver);
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
-index 8084b3b135257441c919a627e70849b9f2199e37..3c3f919a468435ee327e3569849f4194ef214b57 100644
+index da036cb4be83301a22c9f5af9c7f1439a9347799..93c4f2ccf556a52e5bc951291f847f53d056c2b0 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
-@@ -3122,12 +3122,15 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {
+@@ -3139,12 +3139,15 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S
return Vec3.directionFromRotation(this.getRotationVector());
}
diff --git a/patches/server/0128-Toggle-for-water-sensitive-mob-damage.patch b/patches/server/0126-Toggle-for-water-sensitive-mob-damage.patch
similarity index 97%
rename from patches/server/0128-Toggle-for-water-sensitive-mob-damage.patch
rename to patches/server/0126-Toggle-for-water-sensitive-mob-damage.patch
index f66339a28..543dbfda2 100644
--- a/patches/server/0128-Toggle-for-water-sensitive-mob-damage.patch
+++ b/patches/server/0126-Toggle-for-water-sensitive-mob-damage.patch
@@ -21,10 +21,10 @@ index 19f95ddb2fa9dd264947a8b0033dd7437ee66c7f..d04e48d6a0a6dc7825a3e3d4cf854e29
protected ParticleOptions getInkParticle() {
return ParticleTypes.GLOW_SQUID_INK;
diff --git a/src/main/java/net/minecraft/world/entity/ambient/Bat.java b/src/main/java/net/minecraft/world/entity/ambient/Bat.java
-index c283900e6c43fda62428a6e6d8b70e512458e779..c3d1d77a5703db4e1e3eb38fdd0b8903f691bf25 100644
+index 6aec149f450e0559c613dcc272ba48634d0083c0..0ed3d4f4cb9e2d11391c39633267becfd457102d 100644
--- a/src/main/java/net/minecraft/world/entity/ambient/Bat.java
+++ b/src/main/java/net/minecraft/world/entity/ambient/Bat.java
-@@ -276,6 +276,11 @@ public class Bat extends AmbientCreature {
+@@ -280,6 +280,11 @@ public class Bat extends AmbientCreature {
this.getAttribute(Attributes.ATTACK_KNOCKBACK).setBaseValue(this.level().purpurConfig.batAttackKnockback);
}
@@ -37,7 +37,7 @@ index c283900e6c43fda62428a6e6d8b70e512458e779..c3d1d77a5703db4e1e3eb38fdd0b8903
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 cd53ac9806f80409082f394e978295fd414d745d..baeea251e8f6a23bbd41987fffeb60bac157c363 100644
+index 6d3e16e9fb043d538b9c093fb79d092fce90d75a..0db5e35b8e4a186c8ef150a1b0f072e10573136e 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Bee.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Bee.java
@@ -180,7 +180,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal {
@@ -49,7 +49,7 @@ index cd53ac9806f80409082f394e978295fd414d745d..baeea251e8f6a23bbd41987fffeb60ba
this.setPathfindingMalus(BlockPathTypes.WATER_BORDER, 16.0F);
this.setPathfindingMalus(BlockPathTypes.COCOA, -1.0F);
this.setPathfindingMalus(BlockPathTypes.FENCE, -1.0F);
-@@ -481,6 +481,11 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal {
+@@ -488,6 +488,11 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal {
return this.level().purpurConfig.beeBreedingTicks;
}
@@ -126,7 +126,7 @@ index c501704251e5b23f697efc307ebdc906cd2e5acd..f76b0d92150fd985a8fc699f6f884527
protected void registerGoals() {
this.goalSelector.addGoal(0, new FloatGoal(this));
diff --git a/src/main/java/net/minecraft/world/entity/animal/Dolphin.java b/src/main/java/net/minecraft/world/entity/animal/Dolphin.java
-index 3f41698deb5b1d837832285e087aa0f82f16cd59..5533b667b983fe6f2375ca8f21c8580dc373628a 100644
+index ff11643193495f0646de4bcf13b7f1e57731e4fb..75585a6b275fafbc5ef112d9de4926b77fcb3781 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Dolphin.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Dolphin.java
@@ -163,6 +163,11 @@ public class Dolphin extends WaterAnimal {
@@ -142,7 +142,7 @@ index 3f41698deb5b1d837832285e087aa0f82f16cd59..5533b667b983fe6f2375ca8f21c8580d
@Override
public SpawnGroupData finalizeSpawn(ServerLevelAccessor world, DifficultyInstance difficulty, MobSpawnType spawnReason, @Nullable SpawnGroupData entityData, @Nullable CompoundTag entityNbt) {
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 cf58894de9804770ba1722e2c0b727d3a637bf9f..a1f13c54b7ded4b10fb4e6bd82a384d13446b62f 100644
+index fc3ec667aa2b8c3fe537cda0aeddd2192c0bbedf..c8efa4029136d0cd54a5f73f003e022511cc7c8b 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Fox.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Fox.java
@@ -193,6 +193,11 @@ public class Fox extends Animal implements VariantHolder {
@@ -174,7 +174,7 @@ index 95ff109511c97d603aeaf9e73c49397a841fcbce..58539d29b8e2a8c0676cc574f64e7d61
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 cdf2bd4b2aa43b1d45fb0f0e8c4a14057ca39525..6b635c997a8052f6ea9b6dc39bef70000edbd782 100644
+index 09fc3c6ddf99854d43b6577b4d2d74665f32dfa3..1e51eee2c4e425c7ac0152b55a1d1376a5a5708e 100644
--- a/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java
+++ b/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java
@@ -90,6 +90,11 @@ public class MushroomCow extends Cow implements Shearable, VariantHolder getModelRotationValues() {
return this.modelRotationValues;
diff --git a/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java b/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java
-index 93295d9683293121f2267350194f18e97b2421c2..26062173d137e26abdc452f7b2e0be0ee6dddfa3 100644
+index 599a980c1b66215c4430a5b11acfbc4e451f724f..b41509e26808a025bc247fa209d3b9df10368013 100644
--- a/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java
+++ b/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java
@@ -114,6 +114,11 @@ public class Goat extends Animal {
@@ -507,10 +507,10 @@ index 1de48560ac5a1db8845c98c812b2e9f9eb972123..53546e904948d03882e5f5b0a8d4256c
protected SoundEvent getAmbientSound() {
return SoundEvents.MULE_AMBIENT;
diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/SkeletonHorse.java b/src/main/java/net/minecraft/world/entity/animal/horse/SkeletonHorse.java
-index e618d3b77cafeaee22b4140449703ca80bdd4c92..1a988e2abb7c5f7dafa325f2a9d92a99be06681f 100644
+index 76de20b86b6b99c10379adeb303fac4371891923..688c87743446bdf5a9e2b830b8a47655d80f3284 100644
--- a/src/main/java/net/minecraft/world/entity/animal/horse/SkeletonHorse.java
+++ b/src/main/java/net/minecraft/world/entity/animal/horse/SkeletonHorse.java
-@@ -58,6 +58,11 @@ public class SkeletonHorse extends AbstractHorse {
+@@ -62,6 +62,11 @@ public class SkeletonHorse extends AbstractHorse {
return 6000;
}
@@ -539,10 +539,10 @@ index 3632fcb124be8cf77d9bebf7b861a48196252ed0..17648925f97110f2439890388f4bfbbf
public boolean isTraderLlama() {
return true;
diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/ZombieHorse.java b/src/main/java/net/minecraft/world/entity/animal/horse/ZombieHorse.java
-index 93c44b8cc86ca4fe0c70855d4eb71411c5a42846..9dcc47b0680227d1ada06366ca2a334535d18425 100644
+index aaec706b7eaa6afdf7959e6dd53cc39344bb97df..dcc1d71c2eeea48669651165868899ba4a797d48 100644
--- a/src/main/java/net/minecraft/world/entity/animal/horse/ZombieHorse.java
+++ b/src/main/java/net/minecraft/world/entity/animal/horse/ZombieHorse.java
-@@ -54,6 +54,11 @@ public class ZombieHorse extends AbstractHorse {
+@@ -58,6 +58,11 @@ public class ZombieHorse extends AbstractHorse {
return 6000;
}
@@ -555,10 +555,10 @@ index 93c44b8cc86ca4fe0c70855d4eb71411c5a42846..9dcc47b0680227d1ada06366ca2a3345
return createBaseHorseAttributes().add(Attributes.MAX_HEALTH, 15.0D).add(Attributes.MOVEMENT_SPEED, (double)0.2F);
}
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 39d7fe20ef5b3ca34a72a50bb8d9c35aa3b2ed23..20aa7cdf10284c14a2d623aefb061b6197d66d27 100644
+index 2a0e45b9580b73c453aba02f822f10bd3a1f7c9d..f3ef0116537c660d46c17e1ccb0dcb62bc552b91 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
-@@ -190,6 +190,11 @@ public class EnderDragon extends Mob implements Enemy {
+@@ -192,6 +192,11 @@ public class EnderDragon extends Mob implements Enemy {
this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.enderDragonMaxHealth);
}
@@ -571,7 +571,7 @@ index 39d7fe20ef5b3ca34a72a50bb8d9c35aa3b2ed23..20aa7cdf10284c14a2d623aefb061b61
return Mob.createMobAttributes().add(Attributes.MAX_HEALTH, 200.0D);
}
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 97be7061d3cccac7b64f4b1a234ccbd83e2b7407..76f88b96e4965e61a620d8e8809411a0711bf02e 100644
+index 16c88fc3c865652496f0ecf6b7e92a97d20eeb00..138e38945fdfff919b1afabcfdf3424267027161 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
@@ -117,6 +117,11 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob
@@ -641,7 +641,7 @@ index 5bfeb39a23a72f57523a3c2db1d79c7aef70eb02..e8191f0df3420d5a531cf226547a1777
protected SoundEvent getHurtSound(DamageSource source) {
return SoundEvents.CREEPER_HURT;
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 64acb2e81ef65acb0d41db8b5f7c924c2e2a5e00..902f831ea001145f73691b96f2fca8245a4fc05a 100644
+index 162ecea875d99115cdd742524ce65ee74cc0d47e..a315e2fc10b9d404a92971dea6a0a5fae16d8133 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Drowned.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Drowned.java
@@ -95,6 +95,11 @@ public class Drowned extends Zombie implements RangedAttackMob {
@@ -673,7 +673,7 @@ index 971210c1199ec48f28446e75d8d796a1f3f9a734..cd1f830bf28b1c68e2b9cc7daa77f696
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 51524661a62cbfe5ff7a3b7d640260e911902b23..013fd016d384f1bf94b875bc71139e0ea4e12d21 100644
+index c17a01a995eb3fe46403f241effec86694ad0eaf..145726402118057161982f5f1cf712177c81d4de 100644
--- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
+++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
@@ -95,7 +95,7 @@ public class EnderMan extends Monster implements NeutralMob {
@@ -711,10 +711,10 @@ index 336a22876bcf1cdfcd9d17d22f615d45c2863589..936add0eb7204af7dc507c786cb82e0d
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 fbcb6b4cf4234d6eba989210012ab360c1b323a4..1ef547285cfb8e74404e4108a1403c8fda43cb1f 100644
+index a7e77eae357e0fd146f340f8c3981f1a0d705b32..db3a49a979a9d84f29228ae975133c46216bfb75 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Evoker.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Evoker.java
-@@ -72,6 +72,11 @@ public class Evoker extends SpellcasterIllager {
+@@ -73,6 +73,11 @@ public class Evoker extends SpellcasterIllager {
this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.evokerMaxHealth);
}
@@ -759,7 +759,7 @@ index d014731fe352246299253bf005e23673abe091bc..ecaccb4697bf2acaa6dc9034486fcf97
@Override
diff --git a/src/main/java/net/minecraft/world/entity/monster/Guardian.java b/src/main/java/net/minecraft/world/entity/monster/Guardian.java
-index 74c4bcccb12b25eac50d061edbc2d2cb46ccb8df..93cd1129003b360ca40ad50fe849bd834a5f2a9b 100644
+index 52e2900f57979d25a62fbd23e08f5378cb6c0611..c696ffd7f4454ca79933cef04bf2b89e2a65b8cf 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Guardian.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Guardian.java
@@ -99,6 +99,11 @@ public class Guardian extends Monster {
@@ -775,7 +775,7 @@ index 74c4bcccb12b25eac50d061edbc2d2cb46ccb8df..93cd1129003b360ca40ad50fe849bd83
protected void registerGoals() {
MoveTowardsRestrictionGoal pathfindergoalmovetowardsrestriction = new MoveTowardsRestrictionGoal(this, 1.0D);
diff --git a/src/main/java/net/minecraft/world/entity/monster/Husk.java b/src/main/java/net/minecraft/world/entity/monster/Husk.java
-index ede13fe38fb97b94180ea8557d8a45d2ae5954d3..b361078339f01881ee6806049ecc2490fd5cf6bf 100644
+index a6d827b39ce9ca13103fb2f9940974e8aaaea037..f6d6df27c2ca7a33ed3ca8e299725b6a5c4aafc3 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Husk.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Husk.java
@@ -66,6 +66,11 @@ public class Husk extends Zombie {
@@ -788,7 +788,7 @@ index ede13fe38fb97b94180ea8557d8a45d2ae5954d3..b361078339f01881ee6806049ecc2490
+ }
+
public static boolean checkHuskSpawnRules(EntityType type, ServerLevelAccessor world, MobSpawnType spawnReason, BlockPos pos, RandomSource random) {
- return checkMonsterSpawnRules(type, world, spawnReason, pos, random) && (spawnReason == MobSpawnType.SPAWNER || world.canSeeSky(pos));
+ return checkMonsterSpawnRules(type, world, spawnReason, pos, random) && (MobSpawnType.isSpawner(spawnReason) || world.canSeeSky(pos));
}
diff --git a/src/main/java/net/minecraft/world/entity/monster/Illusioner.java b/src/main/java/net/minecraft/world/entity/monster/Illusioner.java
index 0f3e6c19e55a18cde71f3cb84c1e92b433ebcb7f..91294d87521c884c402485b923691f9fd8985353 100644
@@ -871,7 +871,7 @@ index 5aa00878c4c7be4a38137a93b1a2cf1c468422ea..0992e3729fdfa945660affb7eb7efcff
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 fde2a69f489e12d9c1ccee4522258d2746dcb2e0..69e1f7d1737a8410ff36d4226c15090e72529658 100644
+index 5bdeac3ed1bbc70d0620a548f03792e5df212629..ea09f65e89b2c683c1549146948ff4f5b5073500 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Shulker.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Shulker.java
@@ -119,6 +119,11 @@ public class Shulker extends AbstractGolem implements VariantHolder brainProvider() {
return Brain.provider(MEMORY_TYPES, SENSOR_TYPES);
diff --git a/src/main/java/net/minecraft/world/entity/monster/Zombie.java b/src/main/java/net/minecraft/world/entity/monster/Zombie.java
-index 6d7b5cf3db81c4e42dda17757125d4a1c83c8c59..e118cfc34b05f6d4921a0903eca70be6b68bff4f 100644
+index 624e4007f031b5781e34f4cb6614e8c767999ee2..52a576a16bfeb7dc6ec97280f9a5e0f408d71e46 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Zombie.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Zombie.java
@@ -141,6 +141,11 @@ public class Zombie extends Monster {
@@ -1117,7 +1117,7 @@ index b2d77117309e81db60e7e50911247793fa829755..3574a1e641d8af34a0ff7ea8dcfb0864
public boolean jockeyOnlyBaby() {
return level().purpurConfig.zombifiedPiglinJockeyOnlyBaby;
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 80f91a11c04763c1c9ed2bd242b88b5a473560d7..d0144c99cf5c755c81fc0f9457b462c98ff3e804 100644
+index e2c26768fe87ee6a8e4dada7280c09a6e5210503..d1501c1048417defdf1766366b572f2c98989cc9 100644
--- a/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java
+++ b/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java
@@ -96,6 +96,11 @@ public class Hoglin extends Animal implements Enemy, HoglinBase {
@@ -1133,7 +1133,7 @@ index 80f91a11c04763c1c9ed2bd242b88b5a473560d7..d0144c99cf5c755c81fc0f9457b462c9
public boolean canBeLeashed(Player player) {
return !this.isLeashed();
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 d133820c47ecda733aa8242acdb2cd3ba0f0b677..e506dcf390ecb5cce8ae6993df7ec91b3ebc125e 100644
+index 92d90700cf06ac06b6c13abc78f6dc771e11bd7a..f9e03dc7178c76ea70e45f265d9b42f9d2fe960d 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
@@ -118,6 +118,11 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento
@@ -1165,10 +1165,10 @@ index 04e54c241078e6cd6419a21ba1bf913fd3b413d1..b63d87df0f48dd63c89118f91b31dc4e
return Monster.createMonsterAttributes().add(Attributes.MAX_HEALTH, 50.0D).add(Attributes.MOVEMENT_SPEED, (double)0.35F).add(Attributes.ATTACK_DAMAGE, 7.0D);
}
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 339918b33e825f20a174981c9d5fbda95f4706e7..54897b889d053b8752fb4a4f5664e39c6a8954d3 100644
+index 192e6af840ce939fd8e008a80ee0c6ad43cb51e6..375192fbc04bd4dd5fa178bd26eaa1b00c9b58db 100644
--- a/src/main/java/net/minecraft/world/entity/npc/Villager.java
+++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java
-@@ -190,6 +190,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
+@@ -188,6 +188,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
return level().purpurConfig.villagerCanBeLeashed && !this.isLeashed();
}
diff --git a/patches/server/0129-Config-to-always-tame-in-Creative.patch b/patches/server/0127-Config-to-always-tame-in-Creative.patch
similarity index 95%
rename from patches/server/0129-Config-to-always-tame-in-Creative.patch
rename to patches/server/0127-Config-to-always-tame-in-Creative.patch
index e3736e49f..922b23c8c 100644
--- a/patches/server/0129-Config-to-always-tame-in-Creative.patch
+++ b/patches/server/0127-Config-to-always-tame-in-Creative.patch
@@ -33,10 +33,10 @@ index 9279eb3c7a8affbecba1a8b27ca0685021676f39..9a40cd8d7d4789a8b43f5194bdc67dc6
this.setOrderedToSit(true);
this.level().broadcastEntityEvent(this, (byte) 7);
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 a2c2c453c83bcc99ffebe8566f04288f01fa120a..5c7400bab81b87e908010bab6684b072c51a8adc 100644
+index 1fd962ef8bd53cd29c58509952e9d47a9d7e2020..a23d9adec5ef24f11129dff2d0da3544037898fb 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Parrot.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Parrot.java
-@@ -335,7 +335,7 @@ public class Parrot extends ShoulderRidingEntity implements VariantHolder list = this.llama.level().getEntities(this.llama, this.llama.getBoundingBox().inflate(9.0D, 4.0D, 9.0D), (entity) -> {
EntityType> entityType = entity.getType();
diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java b/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java
-index d0717a81ae7b3c55fb47917508b456408484658b..fb6bca763fcbb249c86c1e360274d4458df19bfc 100644
+index 58175824dc315134b03b9dabfcae04e192af0b86..8d57bf9bbd1f61e6f1509c8b5cf01756ef145571 100644
--- a/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java
+++ b/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java
@@ -519,7 +519,7 @@ public class Llama extends AbstractChestedHorse implements VariantHolder EnchantmentTarget.TRIDENT;
+ case CROSSBOW -> EnchantmentTarget.CROSSBOW;
+ case VANISHABLE -> EnchantmentTarget.VANISHABLE;
++ case BOW_AND_CROSSBOW -> EnchantmentTarget.BOW_AND_CROSSBOW; // Purpur
+ };
+ }
+
diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
index ea9d99990b718beaef4bee3ff75340656f3c76c5..55963ed03a2e552636035b498cf7441bd4c3ee59 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java
diff --git a/patches/server/0147-Drowning-Settings.patch b/patches/server/0145-Drowning-Settings.patch
similarity index 91%
rename from patches/server/0147-Drowning-Settings.patch
rename to patches/server/0145-Drowning-Settings.patch
index cfd96dfe0..1af0a0ffd 100644
--- a/patches/server/0147-Drowning-Settings.patch
+++ b/patches/server/0145-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 3c3f919a468435ee327e3569849f4194ef214b57..9304dda9563cb3b5e9a8f386cc2d479ecd048f05 100644
+index 93c4f2ccf556a52e5bc951291f847f53d056c2b0..f12ad902b6add41ffd9aff19081ce4abf998effb 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
-@@ -3371,7 +3371,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {
+@@ -3388,7 +3388,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S
}
public int getMaxAirSupply() {
@@ -18,7 +18,7 @@ index 3c3f919a468435ee327e3569849f4194ef214b57..9304dda9563cb3b5e9a8f386cc2d479e
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 b4834e26c297b0440f07fa38e97f928cc820fcc7..b7b936deddfbb07768befd49ccc14c5d86c06508 100644
+index e8d6b832ae9a04e4505eaf9e693454cc6e85962e..6efffa178d2f051c2d50672d861aee854f1ff874 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
@@ -439,7 +439,7 @@ public abstract class LivingEntity extends Entity implements Attackable {
diff --git a/patches/server/0148-Break-individual-slabs-when-sneaking.patch b/patches/server/0146-Break-individual-slabs-when-sneaking.patch
similarity index 92%
rename from patches/server/0148-Break-individual-slabs-when-sneaking.patch
rename to patches/server/0146-Break-individual-slabs-when-sneaking.patch
index 268b5974e..01da86043 100644
--- a/patches/server/0148-Break-individual-slabs-when-sneaking.patch
+++ b/patches/server/0146-Break-individual-slabs-when-sneaking.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Break individual slabs when sneaking
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java
-index 3b557c41fc21591fa06ead5d7d1eae871172ffa4..ea28ac7cc590aea0e3ac778e597d807412708756 100644
+index ecf0b6f30d5791f6c7097d352eafa8ecbcdf4aa8..5de06447de2ab2c45debf314aecd39722d4a7af6 100644
--- a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java
+++ b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java
@@ -397,6 +397,7 @@ public class ServerPlayerGameMode {
@@ -17,10 +17,10 @@ index 3b557c41fc21591fa06ead5d7d1eae871172ffa4..ea28ac7cc590aea0e3ac778e597d8074
// CraftBukkit end
diff --git a/src/main/java/net/minecraft/world/level/block/SlabBlock.java b/src/main/java/net/minecraft/world/level/block/SlabBlock.java
-index ea8c78af35b0ddc0d08adfccfc78770b867e5df6..88cfa41f90d4ad395b96fd0b69ac0bdefe06ed2d 100644
+index adc7eba4bb5e8f7c507a16cdbd7497338a7658cf..512c528e0f2f3aa0da0253698a0189415329265a 100644
--- a/src/main/java/net/minecraft/world/level/block/SlabBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/SlabBlock.java
-@@ -131,4 +131,25 @@ public class SlabBlock extends Block implements SimpleWaterloggedBlock {
+@@ -138,4 +138,25 @@ public class SlabBlock extends Block implements SimpleWaterloggedBlock {
return false;
}
}
diff --git a/patches/server/0149-Config-to-disable-hostile-mob-spawn-on-ice.patch b/patches/server/0147-Config-to-disable-hostile-mob-spawn-on-ice.patch
similarity index 92%
rename from patches/server/0149-Config-to-disable-hostile-mob-spawn-on-ice.patch
rename to patches/server/0147-Config-to-disable-hostile-mob-spawn-on-ice.patch
index 5ca467a70..dff5bd628 100644
--- a/patches/server/0149-Config-to-disable-hostile-mob-spawn-on-ice.patch
+++ b/patches/server/0147-Config-to-disable-hostile-mob-spawn-on-ice.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Config to disable hostile mob spawn on ice
diff --git a/src/main/java/net/minecraft/world/entity/monster/Monster.java b/src/main/java/net/minecraft/world/entity/monster/Monster.java
-index e4218acaaf7d3aef0fb31f5597fb1af32aa2c8b5..01977550309451cda795583ba4122143b140b9b7 100644
+index 127a344f35e194fc7b1a0783c75291fab929fe19..d90d8539815d92143c994108efdfcc18bcb3b158 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Monster.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Monster.java
@@ -89,6 +89,14 @@ public abstract class Monster extends PathfinderMob implements Enemy {
@@ -24,7 +24,7 @@ index e4218acaaf7d3aef0fb31f5597fb1af32aa2c8b5..01977550309451cda795583ba4122143
return false;
} else {
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 1c9cba09dc987651f8533b0324578472ca2d5b02..cf044d358a2f1fe4bdb9240502ab889dd7156cb2 100644
+index 0f13f4727ee854fa66df7ec9f49d33622a05e252..40afefd48f10068c48f2db6524c1c24cb5348c28 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -565,6 +565,13 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0150-Config-to-show-Armor-Stand-arms-on-spawn.patch b/patches/server/0148-Config-to-show-Armor-Stand-arms-on-spawn.patch
similarity index 92%
rename from patches/server/0150-Config-to-show-Armor-Stand-arms-on-spawn.patch
rename to patches/server/0148-Config-to-show-Armor-Stand-arms-on-spawn.patch
index 2f0e537c3..c92cf9a43 100644
--- a/patches/server/0150-Config-to-show-Armor-Stand-arms-on-spawn.patch
+++ b/patches/server/0148-Config-to-show-Armor-Stand-arms-on-spawn.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Config to show Armor Stand arms on spawn
diff --git a/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java b/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java
-index ba2fe129aaf25c54b624f282f8994c6a884abad8..2f64267d780fdbba1248398094bed39ed619740c 100644
+index 5332e072e3c278a1d9769feb783b9419020a36d1..1ea348b6007d8aebf1e0f29018a03eb10c445369 100644
--- a/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java
+++ b/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java
@@ -114,6 +114,7 @@ public class ArmorStand extends LivingEntity {
@@ -17,7 +17,7 @@ index ba2fe129aaf25c54b624f282f8994c6a884abad8..2f64267d780fdbba1248398094bed39e
public ArmorStand(Level world, double x, double y, double z) {
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index cf044d358a2f1fe4bdb9240502ab889dd7156cb2..be0d58ead54c70b5aa94732a90e15a49fe28f6a6 100644
+index 40afefd48f10068c48f2db6524c1c24cb5348c28..f023b83b2e7084ee661673080c4573c4bce9f355 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -102,6 +102,7 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0151-Option-to-make-doors-require-redstone.patch b/patches/server/0149-Option-to-make-doors-require-redstone.patch
similarity index 93%
rename from patches/server/0151-Option-to-make-doors-require-redstone.patch
rename to patches/server/0149-Option-to-make-doors-require-redstone.patch
index e063760b9..ef3d16b84 100644
--- a/patches/server/0151-Option-to-make-doors-require-redstone.patch
+++ b/patches/server/0149-Option-to-make-doors-require-redstone.patch
@@ -36,10 +36,10 @@ index 42ae4d293a420f0b8eb476df6389b2e7a693895f..97c20c5b89e6d7e4ed844eff39ee55df
} else {
DoorBlock blockdoor = (DoorBlock) iblockdata.getBlock();
diff --git a/src/main/java/net/minecraft/world/level/block/DoorBlock.java b/src/main/java/net/minecraft/world/level/block/DoorBlock.java
-index c028a7158e41a0754abb8e24dcd647633fbf3fe8..cd65d32f4af016d4937e598c71386a3072f4c490 100644
+index ed57fbcfcff29a71026b0600b02daf4178d78429..31a5d3a5642123983b8c7df49be04f25141d15a2 100644
--- a/src/main/java/net/minecraft/world/level/block/DoorBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/DoorBlock.java
-@@ -167,6 +167,7 @@ public class DoorBlock extends Block {
+@@ -198,6 +198,7 @@ public class DoorBlock extends Block {
public InteractionResult use(BlockState state, Level world, BlockPos pos, Player player, InteractionHand hand, BlockHitResult hit) {
if (!this.type.canOpenByHand()) {
return InteractionResult.PASS;
@@ -47,7 +47,7 @@ index c028a7158e41a0754abb8e24dcd647633fbf3fe8..cd65d32f4af016d4937e598c71386a30
} else {
state = (BlockState) state.cycle(DoorBlock.OPEN);
world.setBlock(pos, state, 10);
-@@ -270,4 +271,18 @@ public class DoorBlock extends Block {
+@@ -301,4 +302,18 @@ public class DoorBlock extends Block {
flag = false;
return flag;
}
@@ -67,7 +67,7 @@ index c028a7158e41a0754abb8e24dcd647633fbf3fe8..cd65d32f4af016d4937e598c71386a30
+ // Purpur end
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index be0d58ead54c70b5aa94732a90e15a49fe28f6a6..13d2d69181ceb9c211e675c58930649bd67005ed 100644
+index f023b83b2e7084ee661673080c4573c4bce9f355..4957adad4022b244ad04c04ad87563239bcc0469 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -504,6 +504,16 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0152-Config-to-allow-for-unsafe-enchants.patch b/patches/server/0150-Config-to-allow-for-unsafe-enchants.patch
similarity index 97%
rename from patches/server/0152-Config-to-allow-for-unsafe-enchants.patch
rename to patches/server/0150-Config-to-allow-for-unsafe-enchants.patch
index 663a31152..df1cf6ba5 100644
--- a/patches/server/0152-Config-to-allow-for-unsafe-enchants.patch
+++ b/patches/server/0150-Config-to-allow-for-unsafe-enchants.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Config to allow for unsafe enchants
diff --git a/src/main/java/net/minecraft/server/commands/EnchantCommand.java b/src/main/java/net/minecraft/server/commands/EnchantCommand.java
-index 664cbce2e06fcb95d3d3d6c5302fc9119f938925..bc9778c705d23acd84fa1cdeff6b403b4cda3686 100644
+index 37d9c354af887c474094b1a364782007a5f2035d..ec86231077f6a1e03068507555539c5b550ddf31 100644
--- a/src/main/java/net/minecraft/server/commands/EnchantCommand.java
+++ b/src/main/java/net/minecraft/server/commands/EnchantCommand.java
@@ -48,7 +48,7 @@ public class EnchantCommand {
@@ -74,10 +74,10 @@ index cccd34370d76d96eddeba3de1cfc41d47f9d1f60..ceac7d74f6fbe6519535357a03a0e4d1
((ServerPlayer) player).connection.send(new ClientboundContainerSetDataPacket(containerId, 0, 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 191bcb10f9976b815038d73ac60c0ddd6f7ee24a..43366430f1219dc364f1bf7b8112a232f85c275f 100644
+index f6274690538d55becb9afe0d5a87213cb2e396a0..05f4670df6b45d7d9cd4ff78a0e10587f8be6f12 100644
--- a/src/main/java/net/minecraft/world/item/ItemStack.java
+++ b/src/main/java/net/minecraft/world/item/ItemStack.java
-@@ -1215,6 +1215,12 @@ public final class ItemStack {
+@@ -1240,6 +1240,12 @@ public final class ItemStack {
return this.tag != null && this.tag.contains("Enchantments", 9) ? !this.tag.getList("Enchantments", 10).isEmpty() : false;
}
diff --git a/patches/server/0153-Configurable-sponge-absorption.patch b/patches/server/0151-Configurable-sponge-absorption.patch
similarity index 89%
rename from patches/server/0153-Configurable-sponge-absorption.patch
rename to patches/server/0151-Configurable-sponge-absorption.patch
index bffe9c97b..e93171c54 100644
--- a/patches/server/0153-Configurable-sponge-absorption.patch
+++ b/patches/server/0151-Configurable-sponge-absorption.patch
@@ -8,10 +8,10 @@ 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 d810f6bf9a8a354e5b8994e51ec3672428277dde..e7b19fa84d9dce28dd88a3b4adcb83576dcb98a8 100644
+index c4667bea0708d12e228ec2a4c84fcee7e48ca08c..6469f5e25673b4e20cf0b520b28b14b2eda9130c 100644
--- a/src/main/java/net/minecraft/world/level/block/SpongeBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/SpongeBlock.java
-@@ -51,7 +51,7 @@ public class SpongeBlock extends Block {
+@@ -58,7 +58,7 @@ public class SpongeBlock extends Block {
private boolean removeWaterBreadthFirstSearch(Level world, BlockPos pos) {
BlockStateListPopulator blockList = new BlockStateListPopulator(world); // CraftBukkit - Use BlockStateListPopulator
@@ -21,7 +21,7 @@ index d810f6bf9a8a354e5b8994e51ec3672428277dde..e7b19fa84d9dce28dd88a3b4adcb8357
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 13d2d69181ceb9c211e675c58930649bd67005ed..2b6817d593f1f501055d57cb08be873917823b05 100644
+index 4957adad4022b244ad04c04ad87563239bcc0469..ff6c402f69072ffa781593a28fc7fa0637e7e612 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -629,6 +629,13 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0154-Projectile-offset-config.patch b/patches/server/0152-Projectile-offset-config.patch
similarity index 98%
rename from patches/server/0154-Projectile-offset-config.patch
rename to patches/server/0152-Projectile-offset-config.patch
index f554306cf..b6de9f1d4 100644
--- a/patches/server/0154-Projectile-offset-config.patch
+++ b/patches/server/0152-Projectile-offset-config.patch
@@ -83,7 +83,7 @@ index de5bdceb4c8578fb972a2fd5ee0dfdae509e46dc..bcf63ccb6e679cb97d658780b2663aaf
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.getBukkitEntity());
if (event.callEvent() && world.addFreshEntity(thrownPotion)) {
diff --git a/src/main/java/net/minecraft/world/item/TridentItem.java b/src/main/java/net/minecraft/world/item/TridentItem.java
-index 06c2f30b77a2c8aecc65e0c305f643d53798f364..6d1573161f0d8c7999f84925ba7bbf536ee9583a 100644
+index f1d6db9382bec49f61657168fe56b06784d02cf5..07695068fafd170ca88ad109d83dea93c387d794 100644
--- a/src/main/java/net/minecraft/world/item/TridentItem.java
+++ b/src/main/java/net/minecraft/world/item/TridentItem.java
@@ -77,7 +77,7 @@ public class TridentItem extends Item implements Vanishable {
@@ -96,7 +96,7 @@ index 06c2f30b77a2c8aecc65e0c305f643d53798f364..6d1573161f0d8c7999f84925ba7bbf53
entitythrowntrident.pickup = AbstractArrow.Pickup.CREATIVE_ONLY;
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 2b6817d593f1f501055d57cb08be873917823b05..82dfee00977a201b14cd13a2b88a8d76e5955fca 100644
+index ff6c402f69072ffa781593a28fc7fa0637e7e612..bdac4ecd881b9469a319275f9c0f074ccffe48c2 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -422,6 +422,23 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0155-Config-for-powered-rail-activation-distance.patch b/patches/server/0153-Config-for-powered-rail-activation-distance.patch
similarity index 86%
rename from patches/server/0155-Config-for-powered-rail-activation-distance.patch
rename to patches/server/0153-Config-for-powered-rail-activation-distance.patch
index 9f5118180..f1bd34c95 100644
--- a/patches/server/0155-Config-for-powered-rail-activation-distance.patch
+++ b/patches/server/0153-Config-for-powered-rail-activation-distance.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Config for powered rail activation distance
diff --git a/src/main/java/net/minecraft/world/level/block/PoweredRailBlock.java b/src/main/java/net/minecraft/world/level/block/PoweredRailBlock.java
-index 7fddb6fa8fd30ef88346a59f7867aae792f13772..40893e71fe8447b695350273bef9623bd5accdcd 100644
+index b84c48902ef24fdae17578a304e6c93dc20c5dce..e03125281767845564c48c98c3e6b6bbd269ade1 100644
--- a/src/main/java/net/minecraft/world/level/block/PoweredRailBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/PoweredRailBlock.java
-@@ -23,7 +23,7 @@ public class PoweredRailBlock extends BaseRailBlock {
+@@ -30,7 +30,7 @@ public class PoweredRailBlock extends BaseRailBlock {
}
protected boolean findPoweredRailSignal(Level world, BlockPos pos, BlockState state, boolean flag, int distance) {
@@ -18,7 +18,7 @@ index 7fddb6fa8fd30ef88346a59f7867aae792f13772..40893e71fe8447b695350273bef9623b
} 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 82dfee00977a201b14cd13a2b88a8d76e5955fca..4bd01834faafc8bbfb29818063c9acd42d44a8fa 100644
+index bdac4ecd881b9469a319275f9c0f074ccffe48c2..70f29c7adf3118c63bec2d12c01a6d59c6fffa82 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -615,6 +615,11 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0156-Piglin-portal-spawn-modifier.patch b/patches/server/0154-Piglin-portal-spawn-modifier.patch
similarity index 91%
rename from patches/server/0156-Piglin-portal-spawn-modifier.patch
rename to patches/server/0154-Piglin-portal-spawn-modifier.patch
index 3d7246463..813648a27 100644
--- a/patches/server/0156-Piglin-portal-spawn-modifier.patch
+++ b/patches/server/0154-Piglin-portal-spawn-modifier.patch
@@ -18,10 +18,10 @@ 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 2c085c4a154cb0f8a1d38453f43474a764398784..589b437e7c97c846410f293e2f014bdcd7cb333e 100644
+index c51ac562d642061ce60db66ae9a86eecd9d85ecb..673dd5cc5c83eb606aa5684b8ae14b82e0346a35 100644
--- a/src/main/java/net/minecraft/world/level/block/NetherPortalBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/NetherPortalBlock.java
-@@ -52,7 +52,7 @@ public class NetherPortalBlock extends Block {
+@@ -60,7 +60,7 @@ public class NetherPortalBlock extends Block {
@Override
public void randomTick(BlockState state, ServerLevel world, BlockPos pos, RandomSource random) {
@@ -31,7 +31,7 @@ index 2c085c4a154cb0f8a1d38453f43474a764398784..589b437e7c97c846410f293e2f014bdc
pos = pos.below();
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 4bd01834faafc8bbfb29818063c9acd42d44a8fa..b71f78d71d88e051cb12bf1cf09abb909a4d0465 100644
+index 70f29c7adf3118c63bec2d12c01a6d59c6fffa82..18143874afd0fb7b6fdc7f1471368bced0dc39d5 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -1647,6 +1647,7 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0157-Config-to-change-max-number-of-bees.patch b/patches/server/0155-Config-to-change-max-number-of-bees.patch
similarity index 96%
rename from patches/server/0157-Config-to-change-max-number-of-bees.patch
rename to patches/server/0155-Config-to-change-max-number-of-bees.patch
index fad4fde19..3d9b8cb1a 100644
--- a/patches/server/0157-Config-to-change-max-number-of-bees.patch
+++ b/patches/server/0155-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 41c9f074203915c31c1ae7a160ce509c13383f84..a16a1df28258d605cf5908dbe19bda5d71ad4f45 100644
+index dfd364ac4b7551a13c4c6c100b5e62c0dfb10595..312ee43ad1a35918fc359f7ebb5742004212b931 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
@@ -43,7 +43,7 @@ public class BeehiveBlockEntity extends BlockEntity {
diff --git a/patches/server/0158-Config-for-wither-explosion-radius.patch b/patches/server/0156-Config-for-wither-explosion-radius.patch
similarity index 93%
rename from patches/server/0158-Config-for-wither-explosion-radius.patch
rename to patches/server/0156-Config-for-wither-explosion-radius.patch
index 95b9c519a..daf8166a4 100644
--- a/patches/server/0158-Config-for-wither-explosion-radius.patch
+++ b/patches/server/0156-Config-for-wither-explosion-radius.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Config for wither explosion radius
diff --git a/src/main/java/net/minecraft/world/entity/projectile/WitherSkull.java b/src/main/java/net/minecraft/world/entity/projectile/WitherSkull.java
-index f40ab9d5b18c189ba9b572e49243640bd44362d1..b4687453256ead43cf5288994316c7bf946b86df 100644
+index d57ef27df0a3597416564f8723b4b986413ad314..aa5ce9625bf23885a55521cbb4d994b684a5cf61 100644
--- a/src/main/java/net/minecraft/world/entity/projectile/WitherSkull.java
+++ b/src/main/java/net/minecraft/world/entity/projectile/WitherSkull.java
-@@ -97,7 +97,7 @@ public class WitherSkull extends AbstractHurtingProjectile {
+@@ -98,7 +98,7 @@ public class WitherSkull extends AbstractHurtingProjectile {
if (!this.level().isClientSide) {
// CraftBukkit start
// this.level().explode(this, this.getX(), this.getY(), this.getZ(), 1.0F, false, World.a.MOB);
diff --git a/patches/server/0159-Gamemode-extra-permissions.patch b/patches/server/0157-Gamemode-extra-permissions.patch
similarity index 95%
rename from patches/server/0159-Gamemode-extra-permissions.patch
rename to patches/server/0157-Gamemode-extra-permissions.patch
index 8ae9938b5..43f6d91a1 100644
--- a/patches/server/0159-Gamemode-extra-permissions.patch
+++ b/patches/server/0157-Gamemode-extra-permissions.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Gamemode extra permissions
diff --git a/src/main/java/net/minecraft/commands/CommandSourceStack.java b/src/main/java/net/minecraft/commands/CommandSourceStack.java
-index 756651db912068c837197a972e95bc66ab9d4a70..106b27d507b16297a0a88b3b5beaaf3d0ef7e2c6 100644
+index ff27787313a3337e29eac6f623b08f1f333f293c..e75a5caa06a1a92a7ab4c70b1d4ab512f645022d 100644
--- a/src/main/java/net/minecraft/commands/CommandSourceStack.java
+++ b/src/main/java/net/minecraft/commands/CommandSourceStack.java
-@@ -223,6 +223,19 @@ public class CommandSourceStack implements SharedSuggestionProvider, com.destroy
+@@ -217,6 +217,19 @@ public class CommandSourceStack implements ExecutionCommandSource {
// Paper start - Add Adventure message to PlayerAdvancementDoneEvent
if (event.message() != null && this.player.level().getGameRules().getBoolean(GameRules.RULE_ANNOUNCE_ADVANCEMENTS)) {
@@ -17,16 +17,16 @@ index 0b3a06027f2c600960cd88159803be187c4d0317..533a348acb53c8e7590f3d81c19e53a6
// 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 a81b3001842971e12c98311d3cb3347f1b284fe9..934838dc695b708d0672d787887726587dc5762c 100644
+index ab259fb1e247ae53a3af57f297ebaa4ce8959ba6..3c6331f703acc59f1764f7ef474b242cfeeb63aa 100644
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
-@@ -1004,6 +1004,7 @@ public class ServerPlayer extends Player {
+@@ -1011,6 +1011,7 @@ public class ServerPlayer extends Player {
}));
- Team scoreboardteambase = this.getTeam();
+ PlayerTeam scoreboardteam = this.getTeam();
+ if (org.purpurmc.purpur.PurpurConfig.deathMessageOnlyBroadcastToAffectedPlayer) this.sendSystemMessage(ichatbasecomponent); else // Purpur
- if (scoreboardteambase != null && scoreboardteambase.getDeathMessageVisibility() != Team.Visibility.ALWAYS) {
- if (scoreboardteambase.getDeathMessageVisibility() == Team.Visibility.HIDE_FOR_OTHER_TEAMS) {
+ if (scoreboardteam != null && scoreboardteam.getDeathMessageVisibility() != Team.Visibility.ALWAYS) {
+ if (scoreboardteam.getDeathMessageVisibility() == Team.Visibility.HIDE_FOR_OTHER_TEAMS) {
this.server.getPlayerList().broadcastSystemToTeam(this, ichatbasecomponent);
diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
index a66c35ce86437311b38d1787c766bbe179cc5dfa..a0f45333ef049ac950295504bb7526f949dcbede 100644
diff --git a/patches/server/0162-Configurable-mob-blindness.patch b/patches/server/0160-Configurable-mob-blindness.patch
similarity index 94%
rename from patches/server/0162-Configurable-mob-blindness.patch
rename to patches/server/0160-Configurable-mob-blindness.patch
index 3ad49a35b..fde80cd3b 100644
--- a/patches/server/0162-Configurable-mob-blindness.patch
+++ b/patches/server/0160-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 6f6f6610c27c738db440d7be747f0be2296f2815..f7bd53e548ea2f57f697b143b58b6d2e21371366 100644
+index 6efffa178d2f051c2d50672d861aee854f1ff874..f1f225615dd4a325ea29552f58fb9a6ff982a943 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
@@ -1036,6 +1036,17 @@ public abstract class LivingEntity extends Entity implements Attackable {
@@ -28,7 +28,7 @@ index 6f6f6610c27c738db440d7be747f0be2296f2815..f7bd53e548ea2f57f697b143b58b6d2e
return d0;
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 99c7e2ff1dfdb7e9bb755c6081232c1c64c96396..01b3d8263d24f6b58da087c751c001a6bd5c723c 100644
+index eeba42faac3cf16be92054bd3f04eb761e257656..1af16bbaab355022d183e71828a866686347ec0f 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -132,6 +132,7 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0163-Hide-hidden-players-from-entity-selector.patch b/patches/server/0161-Hide-hidden-players-from-entity-selector.patch
similarity index 100%
rename from patches/server/0163-Hide-hidden-players-from-entity-selector.patch
rename to patches/server/0161-Hide-hidden-players-from-entity-selector.patch
diff --git a/patches/server/0164-Config-for-health-to-impact-Creeper-explosion-radius.patch b/patches/server/0162-Config-for-health-to-impact-Creeper-explosion-radius.patch
similarity index 96%
rename from patches/server/0164-Config-for-health-to-impact-Creeper-explosion-radius.patch
rename to patches/server/0162-Config-for-health-to-impact-Creeper-explosion-radius.patch
index 5f5bf13a6..331ee36e5 100644
--- a/patches/server/0164-Config-for-health-to-impact-Creeper-explosion-radius.patch
+++ b/patches/server/0162-Config-for-health-to-impact-Creeper-explosion-radius.patch
@@ -21,7 +21,7 @@ index fd3b1e92a626402112bbd371a0ac1264a2c19c32..a8bc27c858c6ddec2ff2f84b5c1dc51c
// 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 01b3d8263d24f6b58da087c751c001a6bd5c723c..ae367a21e60425f5720a3532e2a6d99cafa9e33f 100644
+index 1af16bbaab355022d183e71828a866686347ec0f..59cb375fce3f2917d86617854a18dfa55766daf4 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -928,6 +928,7 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0165-Iron-golem-calm-anger-options.patch b/patches/server/0163-Iron-golem-calm-anger-options.patch
similarity index 98%
rename from patches/server/0165-Iron-golem-calm-anger-options.patch
rename to patches/server/0163-Iron-golem-calm-anger-options.patch
index 7c2030848..371e6b3e2 100644
--- a/patches/server/0165-Iron-golem-calm-anger-options.patch
+++ b/patches/server/0163-Iron-golem-calm-anger-options.patch
@@ -25,7 +25,7 @@ index 58539d29b8e2a8c0676cc574f64e7d61613e1451..1ffb8e1c386fc85796432281ac407a93
}
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index ae367a21e60425f5720a3532e2a6d99cafa9e33f..db9c2ac59a8a1a1659ab44420d9583d224be2c05 100644
+index 59cb375fce3f2917d86617854a18dfa55766daf4..9d03449e5d939e8dfa0ce57d89688da8bc36ee4d 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -1386,6 +1386,8 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0166-Breedable-parrots.patch b/patches/server/0164-Breedable-parrots.patch
similarity index 88%
rename from patches/server/0166-Breedable-parrots.patch
rename to patches/server/0164-Breedable-parrots.patch
index eb8ed2241..831eba192 100644
--- a/patches/server/0166-Breedable-parrots.patch
+++ b/patches/server/0164-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 5c7400bab81b87e908010bab6684b072c51a8adc..364a2d9f7a77e10862c84398d5fade7e9a401dbb 100644
+index a23d9adec5ef24f11129dff2d0da3544037898fb..a3304ce24c08e4250df81a2d09098b8cbbc604bd 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Parrot.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Parrot.java
-@@ -227,6 +227,7 @@ public class Parrot extends ShoulderRidingEntity implements VariantHolder type, LevelAccessor world, MobSpawnType spawnReason, BlockPos pos, RandomSource random) {
-@@ -380,13 +382,13 @@ public class Parrot extends ShoulderRidingEntity implements VariantHolder 0.01D) {
double d20 = 0.06D;
@@ -18,7 +18,7 @@ index 9d9d9cf2366441b453b66f91c53e7a0fe0c01e8f..faf449dfb4f95a300796db46833f3b6a
Vec3 vec3d5 = this.getDeltaMovement();
double d21 = vec3d5.x;
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 0e3f1a9a9518ba0942c8ef148d965dbcfc070258..09ca13ad75c972cbf92a1dfc9b3835ccc1cd11d1 100644
+index d37804b18bcb413e465a31d4dfdae8725a0b0237..69b27f8dc9b813022dc2c92f43f6f1ef6d986c99 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -275,6 +275,7 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0168-Add-config-change-multiplier-critical-damage-value.patch b/patches/server/0166-Add-config-change-multiplier-critical-damage-value.patch
similarity index 89%
rename from patches/server/0168-Add-config-change-multiplier-critical-damage-value.patch
rename to patches/server/0166-Add-config-change-multiplier-critical-damage-value.patch
index 4f5da2768..f9d00e31d 100644
--- a/patches/server/0168-Add-config-change-multiplier-critical-damage-value.patch
+++ b/patches/server/0166-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 a21feaa31c6aa3c7f2198b3b4a84af101aa16988..65c92a2feffd878c12082239b0c41444a0f21d57 100644
+index 2cd998414287b3bc2412c0bbd2f6244e7fedb331..1380a9962d1a9706b5137af8843f0e3fa082b533 100644
--- a/src/main/java/net/minecraft/world/entity/player/Player.java
+++ b/src/main/java/net/minecraft/world/entity/player/Player.java
-@@ -1319,7 +1319,7 @@ public abstract class Player extends LivingEntity {
+@@ -1314,7 +1314,7 @@ public abstract class Player extends LivingEntity {
flag2 = flag2 && !this.level().paperConfig().entities.behavior.disablePlayerCrits; // Paper
flag2 = flag2 && !this.isSprinting();
if (flag2) {
@@ -18,7 +18,7 @@ index a21feaa31c6aa3c7f2198b3b4a84af101aa16988..65c92a2feffd878c12082239b0c41444
f += f1;
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 09ca13ad75c972cbf92a1dfc9b3835ccc1cd11d1..3aedf02206c4581b201e4dd0cefe0b6524e6f38b 100644
+index 69b27f8dc9b813022dc2c92f43f6f1ef6d986c99..e10690939e782e0a5cab3d5816d87906cf9898f4 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -372,6 +372,7 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0169-Option-to-disable-dragon-egg-teleporting.patch b/patches/server/0167-Option-to-disable-dragon-egg-teleporting.patch
similarity index 86%
rename from patches/server/0169-Option-to-disable-dragon-egg-teleporting.patch
rename to patches/server/0167-Option-to-disable-dragon-egg-teleporting.patch
index b187288a2..32520bfca 100644
--- a/patches/server/0169-Option-to-disable-dragon-egg-teleporting.patch
+++ b/patches/server/0167-Option-to-disable-dragon-egg-teleporting.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Option to disable dragon egg teleporting
diff --git a/src/main/java/net/minecraft/world/level/block/DragonEggBlock.java b/src/main/java/net/minecraft/world/level/block/DragonEggBlock.java
-index 7e1edcc7b9f170b7c649437c2f0dd78c0bab9be4..5f8ac1fdac2c334951261f2b9702f5e711743c88 100644
+index 7f365143ce5c62e734eceb855ba0a02ab3a99b27..bbb266cbe23da2573d3dfb3a6edd57461988d3c5 100644
--- a/src/main/java/net/minecraft/world/level/block/DragonEggBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/DragonEggBlock.java
-@@ -42,8 +42,8 @@ public class DragonEggBlock extends FallingBlock {
+@@ -49,8 +49,8 @@ public class DragonEggBlock extends FallingBlock {
}
private void teleport(BlockState state, Level world, BlockPos pos) {
@@ -19,7 +19,7 @@ index 7e1edcc7b9f170b7c649437c2f0dd78c0bab9be4..5f8ac1fdac2c334951261f2b9702f5e7
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 3aedf02206c4581b201e4dd0cefe0b6524e6f38b..2abe6192ab9caac24aae3c8488cf0ee3cb3173d7 100644
+index e10690939e782e0a5cab3d5816d87906cf9898f4..e50d8cb072acd403c285fee9a0df80e4d5946846 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -537,6 +537,11 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0170-Config-for-unverified-username-message.patch b/patches/server/0168-Config-for-unverified-username-message.patch
similarity index 95%
rename from patches/server/0170-Config-for-unverified-username-message.patch
rename to patches/server/0168-Config-for-unverified-username-message.patch
index fa7758c60..f340dc05a 100644
--- a/patches/server/0170-Config-for-unverified-username-message.patch
+++ b/patches/server/0168-Config-for-unverified-username-message.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Config for unverified username message
diff --git a/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java
-index ff2dd53e9e943aa929188fd9d4c35498b78c497a..e615e417627840d645db259bc9640a0471a52b05 100644
+index 89b3184be952fd0803520dd0f717f3acfc3cb496..8acb4ab02e57f63f4b0f3c1420d9880d9085dd33 100644
--- a/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java
-@@ -296,7 +296,7 @@ public class ServerLoginPacketListenerImpl implements ServerLoginPacketListener,
+@@ -263,7 +263,7 @@ public class ServerLoginPacketListenerImpl implements ServerLoginPacketListener,
ServerLoginPacketListenerImpl.LOGGER.warn("Failed to verify username but will let them in anyway!");
ServerLoginPacketListenerImpl.this.startClientVerification(ServerLoginPacketListenerImpl.this.createOfflineProfile(s1)); // Spigot
} else {
diff --git a/patches/server/0171-Make-anvil-cumulative-cost-configurable.patch b/patches/server/0169-Make-anvil-cumulative-cost-configurable.patch
similarity index 95%
rename from patches/server/0171-Make-anvil-cumulative-cost-configurable.patch
rename to patches/server/0169-Make-anvil-cumulative-cost-configurable.patch
index e48a72e76..c00fd38cc 100644
--- a/patches/server/0171-Make-anvil-cumulative-cost-configurable.patch
+++ b/patches/server/0169-Make-anvil-cumulative-cost-configurable.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Make anvil cumulative cost configurable
diff --git a/src/main/java/net/minecraft/world/inventory/AnvilMenu.java b/src/main/java/net/minecraft/world/inventory/AnvilMenu.java
-index fdf2bf10a533c3d4ee145880e6949dadf6ce5410..531b911c1bcdd3735529ee18f2bb0ccdf4ad6089 100644
+index ceac7d74f6fbe6519535357a03a0e4d1214d6a1d..27d76e0c4809d333c548379bf78ec2db083b027e 100644
--- a/src/main/java/net/minecraft/world/inventory/AnvilMenu.java
+++ b/src/main/java/net/minecraft/world/inventory/AnvilMenu.java
@@ -403,7 +403,7 @@ public class AnvilMenu extends ItemCombinerMenu {
diff --git a/patches/server/0173-Bee-can-work-when-raining-or-at-night.patch b/patches/server/0170-Bee-can-work-when-raining-or-at-night.patch
similarity index 88%
rename from patches/server/0173-Bee-can-work-when-raining-or-at-night.patch
rename to patches/server/0170-Bee-can-work-when-raining-or-at-night.patch
index 51a004388..f3846f5b8 100644
--- a/patches/server/0173-Bee-can-work-when-raining-or-at-night.patch
+++ b/patches/server/0170-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 baeea251e8f6a23bbd41987fffeb60bac157c363..d969a4bb3522faa5f88cae92fcd0bad375b7b0f2 100644
+index 0db5e35b8e4a186c8ef150a1b0f072e10573136e..a4c6ea94be1c1a610c6141328192a29052b9f157 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Bee.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Bee.java
-@@ -399,7 +399,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal {
+@@ -406,7 +406,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal {
boolean wantsToEnterHive() {
if (this.stayOutOfHiveCountdown <= 0 && !this.beePollinateGoal.isPollinating() && !this.hasStung() && this.getTarget() == null) {
@@ -18,7 +18,7 @@ index baeea251e8f6a23bbd41987fffeb60bac157c363..d969a4bb3522faa5f88cae92fcd0bad3
return flag && !this.isHiveNearFire();
} else {
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 a16a1df28258d605cf5908dbe19bda5d71ad4f45..7b82842b97ce795745cf6ee6399f618c55acbbf3 100644
+index 312ee43ad1a35918fc359f7ebb5742004212b931..8a163b5d3c7759abe4fe84bfec788a15fddc1e44 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
@@ -203,7 +203,7 @@ public class BeehiveBlockEntity extends BlockEntity {
@@ -31,10 +31,10 @@ index a16a1df28258d605cf5908dbe19bda5d71ad4f45..7b82842b97ce795745cf6ee6399f618c
return false;
} else {
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index bb01e0a0e92d9c6fad33129fe61a2a53779f44ff..f398039b41bc014c61dec0e932af4a93400bd252 100644
+index e50d8cb072acd403c285fee9a0df80e4d5946846..3973c8fb88ed33264e21d94b56425389c95b54a1 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -769,6 +769,8 @@ public class PurpurWorldConfig {
+@@ -764,6 +764,8 @@ public class PurpurWorldConfig {
public double beeMaxHealth = 10.0D;
public int beeBreedingTicks = 6000;
public boolean beeTakeDamageFromWater = false;
@@ -43,7 +43,7 @@ index bb01e0a0e92d9c6fad33129fe61a2a53779f44ff..f398039b41bc014c61dec0e932af4a93
private void beeSettings() {
beeRidable = getBoolean("mobs.bee.ridable", beeRidable);
beeRidableInWater = getBoolean("mobs.bee.ridable-in-water", beeRidableInWater);
-@@ -782,6 +784,8 @@ public class PurpurWorldConfig {
+@@ -777,6 +779,8 @@ public class PurpurWorldConfig {
beeMaxHealth = getDouble("mobs.bee.attributes.max_health", beeMaxHealth);
beeBreedingTicks = getInt("mobs.bee.breeding-delay-ticks", beeBreedingTicks);
beeTakeDamageFromWater = getBoolean("mobs.bee.takes-damage-from-water", beeTakeDamageFromWater);
diff --git a/patches/server/0174-API-for-any-mob-to-burn-daylight.patch b/patches/server/0171-API-for-any-mob-to-burn-daylight.patch
similarity index 94%
rename from patches/server/0174-API-for-any-mob-to-burn-daylight.patch
rename to patches/server/0171-API-for-any-mob-to-burn-daylight.patch
index 3316ea193..14906e4b5 100644
--- a/patches/server/0174-API-for-any-mob-to-burn-daylight.patch
+++ b/patches/server/0171-API-for-any-mob-to-burn-daylight.patch
@@ -6,10 +6,10 @@ Subject: [PATCH] API for any mob to burn daylight
Co-authored by: Encode42
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
-index d16d15c92456ce2d8bb287a0c668b7bc459c5066..0aa3c178d0bca9332702589b5f0781019368b3e5 100644
+index f12ad902b6add41ffd9aff19081ce4abf998effb..1ed6072672d0585fa7609b9709b7c4b876a0f7fe 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
-@@ -497,6 +497,21 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {
+@@ -496,6 +496,21 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S
return true;
}
@@ -32,7 +32,7 @@ index d16d15c92456ce2d8bb287a0c668b7bc459c5066..0aa3c178d0bca9332702589b5f078101
return this.hardCollides;
}
diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
-index 0ea17c4f6ad4753b6ed02b2387c1d3762c8d67d0..a75f8b72632cab7b9f2c5c6e0cacebe8fe572691 100644
+index f1f225615dd4a325ea29552f58fb9a6ff982a943..36d4d360c1f60d884f067391b7790e001010b45d 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
@@ -263,6 +263,7 @@ public abstract class LivingEntity extends Entity implements Attackable {
@@ -63,7 +63,7 @@ index 0ea17c4f6ad4753b6ed02b2387c1d3762c8d67d0..a75f8b72632cab7b9f2c5c6e0cacebe8
}
// CraftBukkit start
-@@ -3582,6 +3589,27 @@ public abstract class LivingEntity extends Entity implements Attackable {
+@@ -3558,6 +3565,27 @@ public abstract class LivingEntity extends Entity implements Attackable {
this.hurt(this.damageSources().drown(), 1.0F);
}
@@ -92,10 +92,10 @@ index 0ea17c4f6ad4753b6ed02b2387c1d3762c8d67d0..a75f8b72632cab7b9f2c5c6e0cacebe8
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 54d1e9c9d98bbf8f408c3c9906d76c662ab2c90e..3a86686789ca77301e43bb9810f9b2b311d7763d 100644
+index ab459c32467e67b1a813ecdc56a12e2372e03faa..7c8bdf0ec5c61d8a79fcaa68f1f79b7f56705dce 100644
--- a/src/main/java/net/minecraft/world/entity/Mob.java
+++ b/src/main/java/net/minecraft/world/entity/Mob.java
-@@ -1753,17 +1753,7 @@ public abstract class Mob extends LivingEntity implements Targeting {
+@@ -1748,17 +1748,7 @@ public abstract class Mob extends LivingEntity implements Targeting {
}
public boolean isSunBurnTick() {
@@ -191,7 +191,7 @@ index 2dbcfd847dd5b6db587b291a8a7a6e278949c3a9..f35637a105d5aa12fb57c2456f2b2a7d
// Paper end
diff --git a/src/main/java/net/minecraft/world/entity/monster/Husk.java b/src/main/java/net/minecraft/world/entity/monster/Husk.java
-index b361078339f01881ee6806049ecc2490fd5cf6bf..481a6cf3dfc2948d80071920b905b488de8737e5 100644
+index f6d6df27c2ca7a33ed3ca8e299725b6a5c4aafc3..5ac87650e357f3ac48e37713b9b0b18ad4d6feb6 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Husk.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Husk.java
@@ -22,6 +22,7 @@ public class Husk extends Zombie {
@@ -277,7 +277,7 @@ index 030b81dd8c52ddb300e73d792f9c4cea4e8a8d46..1d4a292a37069408420ca90b1c278422
// Paper end
private static enum AttackPhase {
diff --git a/src/main/java/net/minecraft/world/entity/monster/Zombie.java b/src/main/java/net/minecraft/world/entity/monster/Zombie.java
-index e118cfc34b05f6d4921a0903eca70be6b68bff4f..fab8e4ffa083e3d436fd4d6d19cf8ea8a7b5a6a6 100644
+index 52a576a16bfeb7dc6ec97280f9a5e0f408d71e46..9b1ae2fa1681f1212b6a09d5b10b16634ce65470 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Zombie.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Zombie.java
@@ -96,11 +96,12 @@ public class Zombie extends Monster {
@@ -353,10 +353,10 @@ index e118cfc34b05f6d4921a0903eca70be6b68bff4f..fab8e4ffa083e3d436fd4d6d19cf8ea8
// Paper end
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
-index b636553c33b8a09c9d92ff8f355affe05e1579cf..7ca35289068dbece3f9f19384fe202fc844eceea 100644
+index 669405e0a38adc5336aa004011544346c44bc5bc..03b38dd69cd6932c17b9b2d832e67c14628a4918 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
-@@ -223,6 +223,11 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
+@@ -228,6 +228,11 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
this.entityType = CraftEntityType.minecraftToBukkit(entity.getType());
}
@@ -369,10 +369,10 @@ index b636553c33b8a09c9d92ff8f355affe05e1579cf..7ca35289068dbece3f9f19384fe202fc
/*
* Order is *EXTREMELY* important -- keep it right! =D
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
-index 4ab5cbdbdb78215f738380873dc710467ac2e52b..a7c81e76b0e6cd50c3900f7aa07807a74b13f606 100644
+index 93d8f8495a043efdbc763e1a35fd0ed86da5120e..ea91da46779b177d3457e4683a76cedea8bc684d 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
-@@ -1132,5 +1132,15 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity {
+@@ -1137,5 +1137,15 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity {
if (slot == null) return;
getHandle().broadcastBreakEvent(org.bukkit.craftbukkit.CraftEquipmentSlot.getNMS(slot));
}
diff --git a/patches/server/0175-Config-MobEffect-by-world.patch b/patches/server/0172-Config-MobEffect-by-world.patch
similarity index 98%
rename from patches/server/0175-Config-MobEffect-by-world.patch
rename to patches/server/0172-Config-MobEffect-by-world.patch
index 78001e61e..07a1df1c6 100644
--- a/patches/server/0175-Config-MobEffect-by-world.patch
+++ b/patches/server/0172-Config-MobEffect-by-world.patch
@@ -72,7 +72,7 @@ index 1f9e0c139988c4c44a26552881647d36965aa4fa..b8d612d22aca74a08b53393c0723a2ae
@Override
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index f398039b41bc014c61dec0e932af4a93400bd252..bef591a3392c4fe94bd91d38071381c09f8293a4 100644
+index 3973c8fb88ed33264e21d94b56425389c95b54a1..1d9ed4a7d89e259beb6bf05dc624a15588adc099 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -331,6 +331,21 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0172-ShulkerBox-allow-oversized-stacks.patch b/patches/server/0172-ShulkerBox-allow-oversized-stacks.patch
deleted file mode 100644
index 3738a72dd..000000000
--- a/patches/server/0172-ShulkerBox-allow-oversized-stacks.patch
+++ /dev/null
@@ -1,52 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: William Blake Galbreath
-Date: Thu, 27 May 2021 04:04:23 -0500
-Subject: [PATCH] ShulkerBox allow oversized stacks
-
-This fixes PaperMC/Paper#4748 where breaking a shulkerbox in survival mode
-with oversized itemstacks would cause a "chunk ban". This fixes it by always
-creating an itemstack using the TileEntity's NBT data (how it handles it for
-creative players) instead of routing it through the LootableBuilder.
-
-diff --git a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java
-index ea28ac7cc590aea0e3ac778e597d807412708756..dce9f57806052337c9256d45e95b4b84a88bf852 100644
---- a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java
-+++ b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java
-@@ -428,7 +428,7 @@ public class ServerPlayerGameMode {
-
- ItemStack mainHandStack = null; // Paper
- boolean isCorrectTool = false; // Paper
-- if (this.isCreative()) {
-+ if (this.isCreative() || (this.level.purpurConfig.shulkerBoxAllowOversizedStacks && block instanceof net.minecraft.world.level.block.ShulkerBoxBlock)) { // Purpur
- // return true; // CraftBukkit
- } else {
- ItemStack itemstack = this.player.getMainHandItem();
-diff --git a/src/main/java/net/minecraft/world/level/block/ShulkerBoxBlock.java b/src/main/java/net/minecraft/world/level/block/ShulkerBoxBlock.java
-index d5fe3b8e2f5a8899f6afeb0600764284a617f261..2b513fc2f6c33963e43093cb08594bff946d72fa 100644
---- a/src/main/java/net/minecraft/world/level/block/ShulkerBoxBlock.java
-+++ b/src/main/java/net/minecraft/world/level/block/ShulkerBoxBlock.java
-@@ -135,7 +135,7 @@ public class ShulkerBoxBlock extends BaseEntityBlock {
- public void playerWillDestroy(Level world, BlockPos pos, BlockState state, Player player) {
- BlockEntity blockEntity = world.getBlockEntity(pos);
- if (blockEntity instanceof ShulkerBoxBlockEntity shulkerBoxBlockEntity) {
-- if (!world.isClientSide && player.isCreative() && !shulkerBoxBlockEntity.isEmpty()) {
-+ if (world.purpurConfig.shulkerBoxAllowOversizedStacks || (!world.isClientSide && player.isCreative() && !shulkerBoxBlockEntity.isEmpty())) { // Purpur
- ItemStack itemStack = getColoredItemStack(this.getColor());
- blockEntity.saveToItem(itemStack);
- if (shulkerBoxBlockEntity.hasCustomName()) {
-diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index e50d8cb072acd403c285fee9a0df80e4d5946846..49416c3d1c8a8d3cb3882ea9394898ff4eb73118 100644
---- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -657,6 +657,11 @@ public class PurpurWorldConfig {
- }
- }
-
-+ public boolean shulkerBoxAllowOversizedStacks = false;
-+ private void shulkerBoxSettings() {
-+ shulkerBoxAllowOversizedStacks = getBoolean("blocks.shulker_box.allow-oversized-stacks", shulkerBoxAllowOversizedStacks);
-+ }
-+
- public boolean slabHalfBreak = false;
- private void slabSettings() {
- slabHalfBreak = getBoolean("blocks.slab.break-individual-slabs-when-sneaking", slabHalfBreak);
diff --git a/patches/server/0176-Beacon-Activation-Range-Configurable.patch b/patches/server/0173-Beacon-Activation-Range-Configurable.patch
similarity index 96%
rename from patches/server/0176-Beacon-Activation-Range-Configurable.patch
rename to patches/server/0173-Beacon-Activation-Range-Configurable.patch
index ef0327b88..1f4bd453d 100644
--- a/patches/server/0176-Beacon-Activation-Range-Configurable.patch
+++ b/patches/server/0173-Beacon-Activation-Range-Configurable.patch
@@ -26,7 +26,7 @@ index f13943db6f2fb923c52dcf9e8bf7000041d0a362..a5f9747be5503dd24abd98f11cfa8229
} else {
return effectRange;
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index bef591a3392c4fe94bd91d38071381c09f8293a4..456a3cbadb5dbce0dfdafe4320c5006205a032bd 100644
+index 1d9ed4a7d89e259beb6bf05dc624a15588adc099..fca69da24c29c9215529e5a203d7ab282ec4b7f7 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -504,6 +504,17 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0177-Add-toggle-for-sand-duping-fix.patch b/patches/server/0174-Add-toggle-for-sand-duping-fix.patch
similarity index 80%
rename from patches/server/0177-Add-toggle-for-sand-duping-fix.patch
rename to patches/server/0174-Add-toggle-for-sand-duping-fix.patch
index 915276d71..5304718df 100644
--- a/patches/server/0177-Add-toggle-for-sand-duping-fix.patch
+++ b/patches/server/0174-Add-toggle-for-sand-duping-fix.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Add toggle for sand duping fix
diff --git a/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java b/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java
-index e6f75a9cac46c8e3ddba664a9d5b27b665a94cb4..958e7684440fcc209fe33e882bf259d92a6814b1 100644
+index 45c07733f03b5c11f6d8e820f65dc950c70d9a67..8e9ab1335626493b8d74f71f643565c0e65af94c 100644
--- a/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java
+++ b/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java
@@ -133,7 +133,7 @@ public class FallingBlockEntity extends Entity {
@@ -27,7 +27,7 @@ index e6f75a9cac46c8e3ddba664a9d5b27b665a94cb4..958e7684440fcc209fe33e882bf259d9
}
// Paper end - fix sand duping
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 456a3cbadb5dbce0dfdafe4320c5006205a032bd..ce9a971ce1b9657823988395cb37b109a7b3410e 100644
+index fca69da24c29c9215529e5a203d7ab282ec4b7f7..7f69260fc1286c243ecc46311e1188a465f9d481 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -683,6 +683,11 @@ public class PurpurWorldConfig {
@@ -39,6 +39,6 @@ index 456a3cbadb5dbce0dfdafe4320c5006205a032bd..ce9a971ce1b9657823988395cb37b109
+ fixSandDuping = getBoolean("blocks.sand.fix-duping", fixSandDuping);
+ }
+
- public boolean shulkerBoxAllowOversizedStacks = false;
- private void shulkerBoxSettings() {
- shulkerBoxAllowOversizedStacks = getBoolean("blocks.shulker_box.allow-oversized-stacks", shulkerBoxAllowOversizedStacks);
+ public boolean slabHalfBreak = false;
+ private void slabSettings() {
+ slabHalfBreak = getBoolean("blocks.slab.break-individual-slabs-when-sneaking", slabHalfBreak);
diff --git a/patches/server/0178-Add-toggle-for-end-portal-safe-teleporting.patch b/patches/server/0175-Add-toggle-for-end-portal-safe-teleporting.patch
similarity index 86%
rename from patches/server/0178-Add-toggle-for-end-portal-safe-teleporting.patch
rename to patches/server/0175-Add-toggle-for-end-portal-safe-teleporting.patch
index f8d11df58..fb89df9b6 100644
--- a/patches/server/0178-Add-toggle-for-end-portal-safe-teleporting.patch
+++ b/patches/server/0175-Add-toggle-for-end-portal-safe-teleporting.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Add toggle for end portal safe teleporting
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
-index 3cbed62b617cf3147030b185f6ae6d829aee9476..a275702357c21187225710858c10a7b184e73879 100644
+index 1ed6072672d0585fa7609b9709b7c4b876a0f7fe..c9dafb8ca9267bea2449bb92ab5808af453ad2b1 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
-@@ -3196,7 +3196,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {
+@@ -3213,7 +3213,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S
}
this.processPortalCooldown();
@@ -18,10 +18,10 @@ index 3cbed62b617cf3147030b185f6ae6d829aee9476..a275702357c21187225710858c10a7b1
}
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 f80f6da484f4144e743079e5104bf503419074b2..2deddc746e43896584bd65ba8e7971a80acb4a4d 100644
+index bc73d1051749339b44ff6765162ab6a76663a628..0b45bc1db5f57a4381c470a563aa81ac0d3a1be7 100644
--- a/src/main/java/net/minecraft/world/level/block/EndPortalBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/EndPortalBlock.java
-@@ -61,6 +61,22 @@ public class EndPortalBlock extends BaseEntityBlock {
+@@ -69,6 +69,22 @@ public class EndPortalBlock extends BaseEntityBlock {
// return; // CraftBukkit - always fire event in case plugins wish to change it
}
@@ -45,7 +45,7 @@ index f80f6da484f4144e743079e5104bf503419074b2..2deddc746e43896584bd65ba8e7971a8
entity.portalWorld = ((ServerLevel)world);
entity.portalBlock = pos.immutable();
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 36010960bd8511c17cb00bf4eda4cb0cfb89cf58..36fe53481de6b72841ac7b7a771bba355726941b 100644
+index 7f69260fc1286c243ecc46311e1188a465f9d481..1e82dea915cdbf09cca47c753dc181c3e51a6fc1 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -631,6 +631,11 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0179-Make-lightning-rod-range-configurable.patch b/patches/server/0176-Make-lightning-rod-range-configurable.patch
similarity index 93%
rename from patches/server/0179-Make-lightning-rod-range-configurable.patch
rename to patches/server/0176-Make-lightning-rod-range-configurable.patch
index cf76027bf..640bbf2f1 100644
--- a/patches/server/0179-Make-lightning-rod-range-configurable.patch
+++ b/patches/server/0176-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 02bd86d25223e0c53d0515f91d0b7677011e9f24..4edea5ea0964bc054b76b1c6635c5b719721e202 100644
+index 2d8cb768429a77547ae2904b11614d66459332fd..67d343ddfd665164219f5645e8a912134170d386 100644
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
-@@ -1170,7 +1170,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
+@@ -1177,7 +1177,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
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/0180-Burp-delay-burp-after-eating-food-fills-hunger-bar-c.patch b/patches/server/0177-Burp-delay-burp-after-eating-food-fills-hunger-bar-c.patch
similarity index 89%
rename from patches/server/0180-Burp-delay-burp-after-eating-food-fills-hunger-bar-c.patch
rename to patches/server/0177-Burp-delay-burp-after-eating-food-fills-hunger-bar-c.patch
index 6ecd8c1b8..1c17ff019 100644
--- a/patches/server/0180-Burp-delay-burp-after-eating-food-fills-hunger-bar-c.patch
+++ b/patches/server/0177-Burp-delay-burp-after-eating-food-fills-hunger-bar-c.patch
@@ -6,10 +6,10 @@ Subject: [PATCH] Burp delay, burp after eating food fills hunger bar
diff --git a/src/main/java/net/minecraft/world/entity/player/Player.java b/src/main/java/net/minecraft/world/entity/player/Player.java
-index 65c92a2feffd878c12082239b0c41444a0f21d57..e46327725cbdae34b769c8d125594618099cb8b4 100644
+index 1380a9962d1a9706b5137af8843f0e3fa082b533..5631240aed1c032faeb291358e40180f8aa40e49 100644
--- a/src/main/java/net/minecraft/world/entity/player/Player.java
+++ b/src/main/java/net/minecraft/world/entity/player/Player.java
-@@ -189,6 +189,7 @@ public abstract class Player extends LivingEntity {
+@@ -184,6 +184,7 @@ public abstract class Player extends LivingEntity {
public net.kyori.adventure.util.TriState flyingFallDamage = net.kyori.adventure.util.TriState.NOT_SET;
// Paper end
public int sixRowEnderchestSlotCount = -1; // Purpur
@@ -17,7 +17,7 @@ index 65c92a2feffd878c12082239b0c41444a0f21d57..e46327725cbdae34b769c8d125594618
// CraftBukkit start
public boolean fauxSleeping;
-@@ -264,6 +265,12 @@ public abstract class Player extends LivingEntity {
+@@ -259,6 +260,12 @@ public abstract class Player extends LivingEntity {
@Override
public void tick() {
@@ -30,7 +30,7 @@ index 65c92a2feffd878c12082239b0c41444a0f21d57..e46327725cbdae34b769c8d125594618
this.noPhysics = this.isSpectator();
if (this.isSpectator()) {
this.setOnGround(false);
-@@ -2382,7 +2389,7 @@ public abstract class Player extends LivingEntity {
+@@ -2297,7 +2304,7 @@ public abstract class Player extends LivingEntity {
public ItemStack eat(Level world, ItemStack stack) {
this.getFoodData().eat(stack.getItem(), stack);
this.awardStat(Stats.ITEM_USED.get(stack.getItem()));
@@ -40,7 +40,7 @@ index 65c92a2feffd878c12082239b0c41444a0f21d57..e46327725cbdae34b769c8d125594618
CriteriaTriggers.CONSUME_ITEM.trigger((ServerPlayer) this, stack);
}
diff --git a/src/main/java/net/minecraft/world/food/FoodData.java b/src/main/java/net/minecraft/world/food/FoodData.java
-index 2038df72f8d7d33d4105de8129628daf21de6f0f..31ec6022b305df0ae02364c916ecf18425a0bc36 100644
+index c3448707fd8a632b457cc97b35d08a9c6933d5ee..2840c0b16d9b8147703f34bac5a8aa21f82e6e44 100644
--- a/src/main/java/net/minecraft/world/food/FoodData.java
+++ b/src/main/java/net/minecraft/world/food/FoodData.java
@@ -33,8 +33,10 @@ public class FoodData {
@@ -55,7 +55,7 @@ index 2038df72f8d7d33d4105de8129628daf21de6f0f..31ec6022b305df0ae02364c916ecf184
public void eat(Item item, ItemStack stack) {
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index db5156b0781cedc56929f73d3183b853b26ff4f7..01463f9279fd69b4afc42d9161a4da0473dc3ed8 100644
+index 1e82dea915cdbf09cca47c753dc181c3e51a6fc1..d1d7e18bde867b53d61350d8503f1f15b7913527 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -388,6 +388,8 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0181-Allow-player-join-full-server-by-permission.patch b/patches/server/0178-Allow-player-join-full-server-by-permission.patch
similarity index 90%
rename from patches/server/0181-Allow-player-join-full-server-by-permission.patch
rename to patches/server/0178-Allow-player-join-full-server-by-permission.patch
index 0ebff586b..341773752 100644
--- a/patches/server/0181-Allow-player-join-full-server-by-permission.patch
+++ b/patches/server/0178-Allow-player-join-full-server-by-permission.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Allow player join full server by permission
diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java
-index 1774b424620863d2fd1f6353b3ce7e9b0fc0e132..cdb5ebf7ed24cdf0ab8e06a92bc2dd21f85008d9 100644
+index 61a34f3e49b21254984011bc470d72c86d55dba1..0d75ccbf6c5cacd9ce2355d4dca2b1290a8da39f 100644
--- a/src/main/java/net/minecraft/server/players/PlayerList.java
+++ b/src/main/java/net/minecraft/server/players/PlayerList.java
-@@ -757,7 +757,7 @@ public abstract class PlayerList {
+@@ -755,7 +755,7 @@ public abstract class PlayerList {
event.disallow(PlayerLoginEvent.Result.KICK_BANNED, io.papermc.paper.adventure.PaperAdventure.asAdventure(ichatmutablecomponent)); // Paper - Adventure
} else {
// return this.players.size() >= this.maxPlayers && !this.canBypassPlayerLimit(gameprofile) ? IChatBaseComponent.translatable("multiplayer.disconnect.server_full") : null;
diff --git a/patches/server/0179-Add-portal-permission-bypass.patch b/patches/server/0179-Add-portal-permission-bypass.patch
new file mode 100644
index 000000000..3667722c7
--- /dev/null
+++ b/patches/server/0179-Add-portal-permission-bypass.patch
@@ -0,0 +1,39 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: William Blake Galbreath
+Date: Thu, 7 Dec 2023 14:53:48 -0800
+Subject: [PATCH] Add portal permission bypass
+
+
+diff --git a/src/main/java/net/minecraft/world/entity/player/Player.java b/src/main/java/net/minecraft/world/entity/player/Player.java
+index 5631240aed1c032faeb291358e40180f8aa40e49..952bf54a96f3ee84059f13c5821af2cfafa05c60 100644
+--- a/src/main/java/net/minecraft/world/entity/player/Player.java
++++ b/src/main/java/net/minecraft/world/entity/player/Player.java
+@@ -185,6 +185,7 @@ public abstract class Player extends LivingEntity {
+ // Paper end
+ public int sixRowEnderchestSlotCount = -1; // Purpur
+ public int burpDelay = 0; // Purpur
++ public boolean canPortalInstant = false; // Purpur
+
+ // CraftBukkit start
+ public boolean fauxSleeping;
+@@ -474,7 +475,7 @@ public abstract class Player extends LivingEntity {
+
+ @Override
+ public int getPortalWaitTime() {
+- return Math.max(1, this.level().getGameRules().getInt(this.abilities.invulnerable ? GameRules.RULE_PLAYERS_NETHER_PORTAL_CREATIVE_DELAY : GameRules.RULE_PLAYERS_NETHER_PORTAL_DEFAULT_DELAY));
++ return Math.max(1, canPortalInstant ? 1 : this.level().getGameRules().getInt(this.abilities.invulnerable ? GameRules.RULE_PLAYERS_NETHER_PORTAL_CREATIVE_DELAY : GameRules.RULE_PLAYERS_NETHER_PORTAL_DEFAULT_DELAY));
+ }
+
+ @Override
+diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java
+index 8a1e765363aeb61078fd23980d3856dc680cb05e..aac60c61fc631c8ecac161eae513a305610a3dfb 100644
+--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java
++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java
+@@ -267,6 +267,7 @@ public class CraftHumanEntity extends CraftLivingEntity implements HumanEntity {
+ @Override
+ public void recalculatePermissions() {
+ this.perm.recalculatePermissions();
++ getHandle().canPortalInstant = hasPermission("purpur.portal.instant"); // Purpur
+ }
+
+ @Override
diff --git a/patches/server/0183-Shulker-spawn-from-bullet-options.patch b/patches/server/0180-Shulker-spawn-from-bullet-options.patch
similarity index 93%
rename from patches/server/0183-Shulker-spawn-from-bullet-options.patch
rename to patches/server/0180-Shulker-spawn-from-bullet-options.patch
index 96f17fabf..19399ff6d 100644
--- a/patches/server/0183-Shulker-spawn-from-bullet-options.patch
+++ b/patches/server/0180-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 69e1f7d1737a8410ff36d4226c15090e72529658..786fe41cc743817f2ed613969c7eeec9fc001b4b 100644
+index ea09f65e89b2c683c1549146948ff4f5b5073500..bf3c02e78df66ca57773d667350197220df5d2d1 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Shulker.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Shulker.java
@@ -503,12 +503,21 @@ public class Shulker extends AbstractGolem implements VariantHolder getVariant() {
@@ -68,10 +68,10 @@ index 88e1c2431d51d8cdc3d555b711e506648225d289..ac8735cc9d127fc1f867b40d4000c033
+ // Purpur end
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 3f39347665b1b88a3068b258ec7a6923890961f5..60f15c3cebdcfde4938d0088b7d5b053af7ecc8e 100644
+index d1d7e18bde867b53d61350d8503f1f15b7913527..3cdd1f0fa067160f879fb617b81f42678270cde6 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -1926,6 +1926,11 @@ public class PurpurWorldConfig {
+@@ -1917,6 +1917,11 @@ public class PurpurWorldConfig {
public boolean shulkerControllable = true;
public double shulkerMaxHealth = 30.0D;
public boolean shulkerTakeDamageFromWater = false;
@@ -83,7 +83,7 @@ index 3f39347665b1b88a3068b258ec7a6923890961f5..60f15c3cebdcfde4938d0088b7d5b053
private void shulkerSettings() {
shulkerRidable = getBoolean("mobs.shulker.ridable", shulkerRidable);
shulkerRidableInWater = getBoolean("mobs.shulker.ridable-in-water", shulkerRidableInWater);
-@@ -1937,6 +1942,11 @@ public class PurpurWorldConfig {
+@@ -1928,6 +1933,11 @@ public class PurpurWorldConfig {
}
shulkerMaxHealth = getDouble("mobs.shulker.attributes.max_health", shulkerMaxHealth);
shulkerTakeDamageFromWater = getBoolean("mobs.shulker.takes-damage-from-water", shulkerTakeDamageFromWater);
diff --git a/patches/server/0184-Eating-glow-berries-adds-glow-effect.patch b/patches/server/0181-Eating-glow-berries-adds-glow-effect.patch
similarity index 94%
rename from patches/server/0184-Eating-glow-berries-adds-glow-effect.patch
rename to patches/server/0181-Eating-glow-berries-adds-glow-effect.patch
index 843e97c7d..732b5b88d 100644
--- a/patches/server/0184-Eating-glow-berries-adds-glow-effect.patch
+++ b/patches/server/0181-Eating-glow-berries-adds-glow-effect.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Eating glow berries adds glow effect
diff --git a/src/main/java/net/minecraft/world/item/Items.java b/src/main/java/net/minecraft/world/item/Items.java
-index e6f8cb165f7e3da5f0edfc952d14059516de8acf..31f5ed9dd1727eee24804a384817d2b76a45676b 100644
+index 7fbd4bf29bcc0795aa4b0e6d5d4bc3745bf7a1c0..e83ea53da012f3dcaa1f53bf6082a17a69e6ee13 100644
--- a/src/main/java/net/minecraft/world/item/Items.java
+++ b/src/main/java/net/minecraft/world/item/Items.java
-@@ -1184,7 +1184,7 @@ public class Items {
+@@ -1224,7 +1224,7 @@ public class Items {
public static final Item LANTERN = registerBlock(Blocks.LANTERN);
public static final Item SOUL_LANTERN = registerBlock(Blocks.SOUL_LANTERN);
public static final Item SWEET_BERRIES = registerItem("sweet_berries", new ItemNameBlockItem(Blocks.SWEET_BERRY_BUSH, (new Item.Properties()).food(Foods.SWEET_BERRIES)));
@@ -18,7 +18,7 @@ index e6f8cb165f7e3da5f0edfc952d14059516de8acf..31f5ed9dd1727eee24804a384817d2b7
public static final Item SOUL_CAMPFIRE = registerBlock(Blocks.SOUL_CAMPFIRE);
public static final Item SHROOMLIGHT = registerBlock(Blocks.SHROOMLIGHT);
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 60f15c3cebdcfde4938d0088b7d5b053af7ecc8e..2e810dafa23b92ba844a53d970c6e2206f8b3819 100644
+index 3cdd1f0fa067160f879fb617b81f42678270cde6..1275e2a3799d064244f22894a03cc2dd53477f04 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -220,6 +220,7 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0182-Add-portal-waiting-option-permission-bypass.patch b/patches/server/0182-Add-portal-waiting-option-permission-bypass.patch
deleted file mode 100644
index 969c8887d..000000000
--- a/patches/server/0182-Add-portal-waiting-option-permission-bypass.patch
+++ /dev/null
@@ -1,61 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: William Blake Galbreath
-Date: Sat, 26 Jun 2021 23:05:12 -0500
-Subject: [PATCH] Add portal waiting option & 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 e46327725cbdae34b769c8d125594618099cb8b4..05c089d6e89cf017998bfab88aa9b2d124bf7f86 100644
---- a/src/main/java/net/minecraft/world/entity/player/Player.java
-+++ b/src/main/java/net/minecraft/world/entity/player/Player.java
-@@ -190,6 +190,7 @@ public abstract class Player extends LivingEntity {
- // Paper end
- public int sixRowEnderchestSlotCount = -1; // Purpur
- public int burpDelay = 0; // Purpur
-+ public boolean canPortalInstant = false; // Purpur
-
- // CraftBukkit start
- public boolean fauxSleeping;
-@@ -474,7 +475,7 @@ public abstract class Player extends LivingEntity {
-
- @Override
- public int getPortalWaitTime() {
-- return this.abilities.invulnerable ? 1 : 80;
-+ return canPortalInstant ? 1 : this.abilities.invulnerable ? this.level().purpurConfig.playerCreativePortalWaitTime : this.level().purpurConfig.playerPortalWaitTime; // Purpur
- }
-
- @Override
-diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java
-index 017e97c1618b8ee4640b36a0ec1b07026047bfc3..cf124ad445fd5e8adb1114aca5113e274d950a4a 100644
---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java
-+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java
-@@ -266,6 +266,7 @@ public class CraftHumanEntity extends CraftLivingEntity implements HumanEntity {
- @Override
- public void recalculatePermissions() {
- this.perm.recalculatePermissions();
-+ getHandle().canPortalInstant = hasPermission("purpur.portal.instant"); // Purpur
- }
-
- @Override
-diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 01463f9279fd69b4afc42d9161a4da0473dc3ed8..3f39347665b1b88a3068b258ec7a6923890961f5 100644
---- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -390,6 +390,8 @@ public class PurpurWorldConfig {
- public double playerCriticalDamageMultiplier = 1.5D;
- public int playerBurpDelay = 10;
- public boolean playerBurpWhenFull = false;
-+ public int playerPortalWaitTime = 80;
-+ public int playerCreativePortalWaitTime = 1;
- private void playerSettings() {
- if (PurpurConfig.version < 19) {
- boolean oldVal = getBoolean("gameplay-mechanics.player.idle-timeout.mods-target", idleTimeoutTargetPlayer);
-@@ -412,6 +414,8 @@ 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);
-+ playerPortalWaitTime = getInt("gameplay-mechanics.player.portal-wait-time", playerPortalWaitTime);
-+ playerCreativePortalWaitTime = getInt("gameplay-mechanics.player.creative-portal-wait-time", playerCreativePortalWaitTime);
- }
-
- private static boolean projectileDespawnRateSettingsMigrated = false;
diff --git a/patches/server/0185-Option-to-make-drowned-break-doors.patch b/patches/server/0182-Option-to-make-drowned-break-doors.patch
similarity index 91%
rename from patches/server/0185-Option-to-make-drowned-break-doors.patch
rename to patches/server/0182-Option-to-make-drowned-break-doors.patch
index f35fab407..9a73ed99e 100644
--- a/patches/server/0185-Option-to-make-drowned-break-doors.patch
+++ b/patches/server/0182-Option-to-make-drowned-break-doors.patch
@@ -5,7 +5,7 @@ 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 902f831ea001145f73691b96f2fca8245a4fc05a..9346d634dd2b8cb3d89aa7ccf12fec6ff79bbe2f 100644
+index a315e2fc10b9d404a92971dea6a0a5fae16d8133..6e6d7f68cf1c1c224b67a9d674fdcaa67ea00359 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Drowned.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Drowned.java
@@ -29,6 +29,7 @@ import net.minecraft.world.entity.ai.goal.MoveToBlockGoal;
@@ -34,10 +34,10 @@ index 902f831ea001145f73691b96f2fca8245a4fc05a..9346d634dd2b8cb3d89aa7ccf12fec6f
@Override
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 2e810dafa23b92ba844a53d970c6e2206f8b3819..e49cd59e4fc687c9365d722f12948378e29b9327 100644
+index 1275e2a3799d064244f22894a03cc2dd53477f04..d9409fa6d82b6f512e8b482f319b139489675828 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -1072,6 +1072,7 @@ public class PurpurWorldConfig {
+@@ -1063,6 +1063,7 @@ public class PurpurWorldConfig {
public double drownedJockeyChance = 0.05D;
public boolean drownedJockeyTryExistingChickens = true;
public boolean drownedTakeDamageFromWater = false;
@@ -45,7 +45,7 @@ index 2e810dafa23b92ba844a53d970c6e2206f8b3819..e49cd59e4fc687c9365d722f12948378
private void drownedSettings() {
drownedRidable = getBoolean("mobs.drowned.ridable", drownedRidable);
drownedRidableInWater = getBoolean("mobs.drowned.ridable-in-water", drownedRidableInWater);
-@@ -1087,6 +1088,7 @@ public class PurpurWorldConfig {
+@@ -1078,6 +1079,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/0186-Configurable-hunger-starvation-damage.patch b/patches/server/0183-Configurable-hunger-starvation-damage.patch
similarity index 92%
rename from patches/server/0186-Configurable-hunger-starvation-damage.patch
rename to patches/server/0183-Configurable-hunger-starvation-damage.patch
index 2f1327761..3bc9e501b 100644
--- a/patches/server/0186-Configurable-hunger-starvation-damage.patch
+++ b/patches/server/0183-Configurable-hunger-starvation-damage.patch
@@ -18,10 +18,10 @@ index 2840c0b16d9b8147703f34bac5a8aa21f82e6e44..e8079d126e6c0cf0b15c01afb6498922
this.tickTimer = 0;
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 111cba29dfd34d3953f65846bb0c453033e80113..0152466a72847518a4b76616aa98694378c24104 100644
+index d9409fa6d82b6f512e8b482f319b139489675828..97295817c15bfaab80241ae89134bde1bb129462 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -2587,4 +2587,9 @@ public class PurpurWorldConfig {
+@@ -2578,4 +2578,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/0187-Enhance-SysoutCatcher.patch b/patches/server/0184-Enhance-SysoutCatcher.patch
similarity index 100%
rename from patches/server/0187-Enhance-SysoutCatcher.patch
rename to patches/server/0184-Enhance-SysoutCatcher.patch
diff --git a/patches/server/0188-Add-uptime-command.patch b/patches/server/0185-Add-uptime-command.patch
similarity index 96%
rename from patches/server/0188-Add-uptime-command.patch
rename to patches/server/0185-Add-uptime-command.patch
index 127da6da0..b990e82cb 100644
--- a/patches/server/0188-Add-uptime-command.patch
+++ b/patches/server/0185-Add-uptime-command.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Add uptime command
diff --git a/src/main/java/net/minecraft/commands/Commands.java b/src/main/java/net/minecraft/commands/Commands.java
-index e1887523b0b6a0479544385932f54ab1de0295ae..e254f7c498c5a1608afe130b2dd4d3d037069f25 100644
+index 77cced190bd287ff3f5bc8697f16b333da0bc786..bf51f5e414ab45e33efa4057ab251120290b43e1 100644
--- a/src/main/java/net/minecraft/commands/Commands.java
+++ b/src/main/java/net/minecraft/commands/Commands.java
-@@ -233,6 +233,7 @@ public class Commands {
+@@ -253,6 +253,7 @@ public class Commands {
org.purpurmc.purpur.command.CreditsCommand.register(this.dispatcher); // Purpur
org.purpurmc.purpur.command.DemoCommand.register(this.dispatcher); // Purpur
org.purpurmc.purpur.command.PingCommand.register(this.dispatcher); // Purpur
@@ -17,10 +17,10 @@ index e1887523b0b6a0479544385932f54ab1de0295ae..e254f7c498c5a1608afe130b2dd4d3d0
}
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
-index a3675f1ef2317c1a0e9addd9280fe928a45b2736..615de0c4baf7797d03c43e5e164b198ebb70b341 100644
+index e7f3034fbb3cb6c606724bb6e2a8e0102b06b56f..b2690db071a9ae26218406de09e37150a9d3eb66 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
-@@ -288,6 +288,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop optional = this.getStripped(blockState);
-- Optional optional2 = WeatheringCopper.getPrevious(blockState);
-- Optional optional3 = Optional.ofNullable(HoneycombItem.WAX_OFF_BY_BLOCK.get().get(blockState.getBlock())).map((block) -> {
-- return block.withPropertiesOf(blockState);
-- });
-+ // Purpur start
-+ Block clickedBlock = level.getBlockState(blockPos).getBlock();
-+ Optional optional = Optional.ofNullable(level.purpurConfig.axeStrippables.get(blockState.getBlock()));
-+ Optional optional2 = Optional.ofNullable(level.purpurConfig.axeWeatherables.get(blockState.getBlock()));
-+ Optional optional3 = Optional.ofNullable(level.purpurConfig.axeWaxables.get(blockState.getBlock()));
-+ // Purpur end
- ItemStack itemStack = context.getItemInHand();
-- Optional optional4 = Optional.empty();
-+ Optional optional4 = Optional.empty(); // Purpur
- if (optional.isPresent()) {
-- level.playSound(player, blockPos, SoundEvents.AXE_STRIP, SoundSource.BLOCKS, 1.0F, 1.0F);
-+ if (!STRIPPABLES.containsKey(clickedBlock)) level.playSound(null, blockPos, SoundEvents.AXE_STRIP, SoundSource.BLOCKS, 1.0F, 1.0F); // Purpur - force sound
- optional4 = optional;
- } else if (optional2.isPresent()) {
-- level.playSound(player, blockPos, SoundEvents.AXE_SCRAPE, SoundSource.BLOCKS, 1.0F, 1.0F);
-+ if (!HoneycombItem.WAXABLES.get().containsKey(clickedBlock)) level.playSound(null, blockPos, SoundEvents.AXE_SCRAPE, SoundSource.BLOCKS, 1.0F, 1.0F); // Purpur - force sound
- level.levelEvent(player, 3005, blockPos, 0);
- optional4 = optional2;
- } else if (optional3.isPresent()) {
-- level.playSound(player, blockPos, SoundEvents.AXE_WAX_OFF, SoundSource.BLOCKS, 1.0F, 1.0F);
-+ if (!HoneycombItem.WAX_OFF_BY_BLOCK.get().containsKey(clickedBlock)) level.playSound(null, blockPos, SoundEvents.AXE_WAX_OFF, SoundSource.BLOCKS, 1.0F, 1.0F); // Purpur - force sound
- level.levelEvent(player, 3004, blockPos, 0);
- optional4 = optional3;
- }
-
- if (optional4.isPresent()) {
-+ org.purpurmc.purpur.tool.Actionable actionable = optional4.get(); // Purpur
-+ BlockState state = actionable.into().withPropertiesOf(blockState); // Purpur
+- Optional optional = this.evaluateNewBlockState(level, blockPos, player, level.getBlockState(blockPos));
++ Optional optional = this.evaluateActionable(level, blockPos, player, level.getBlockState(blockPos)); // Purpur
+ if (optional.isEmpty()) {
+ return InteractionResult.PASS;
+ } else {
++ org.purpurmc.purpur.tool.Actionable actionable = optional.get(); // Purpur
++ BlockState state = actionable.into().withPropertiesOf(level.getBlockState(blockPos)); // Purpur
+ ItemStack itemStack = context.getItemInHand();
// Paper start - EntityChangeBlockEvent
-- if (!org.bukkit.craftbukkit.event.CraftEventFactory.callEntityChangeBlockEvent(player, blockPos, optional4.get())) {
+- if (!org.bukkit.craftbukkit.event.CraftEventFactory.callEntityChangeBlockEvent(player, blockPos, optional.get())) {
+ if (!org.bukkit.craftbukkit.event.CraftEventFactory.callEntityChangeBlockEvent(player, blockPos, state)) { // Purpur
return InteractionResult.PASS;
}
// Paper end
-@@ -63,15 +66,22 @@ public class AxeItem extends DiggerItem {
+@@ -47,35 +49,40 @@ public class AxeItem extends DiggerItem {
CriteriaTriggers.ITEM_USED_ON_BLOCK.trigger((ServerPlayer)player, blockPos, itemStack);
}
-- level.setBlock(blockPos, optional4.get(), 11);
-- level.gameEvent(GameEvent.BLOCK_CHANGE, blockPos, GameEvent.Context.of(player, optional4.get()));
+- level.setBlock(blockPos, optional.get(), 11);
+- level.gameEvent(GameEvent.BLOCK_CHANGE, blockPos, GameEvent.Context.of(player, optional.get()));
+ // Purpur start
+ level.setBlock(blockPos, state, 11);
+ actionable.drops().forEach((drop, chance) -> {
@@ -74,9 +49,36 @@ index 18898e16ec42f6b694b06e09d9174b60d62450d7..20f33b77b4a9494be227456bc742a029
- return InteractionResult.sidedSuccess(level.isClientSide);
+ return InteractionResult.SUCCESS; // Purpur - force arm swing
- } else {
- return InteractionResult.PASS;
}
+ }
+
+- private Optional evaluateNewBlockState(Level world, BlockPos pos, @Nullable Player player, BlockState state) {
+- Optional optional = this.getStripped(state);
++ private Optional evaluateActionable(Level world, BlockPos pos, @Nullable Player player, BlockState state) { // Purpur
++ Optional optional = Optional.ofNullable(world.purpurConfig.axeStrippables.get(state.getBlock())); // Purpur
+ if (optional.isPresent()) {
+- world.playSound(player, pos, SoundEvents.AXE_STRIP, SoundSource.BLOCKS, 1.0F, 1.0F);
++ if (!STRIPPABLES.containsKey(state.getBlock())) world.playSound(null, pos, SoundEvents.AXE_STRIP, SoundSource.BLOCKS, 1.0F, 1.0F); // Purpur - force sound
+ return optional;
+ } else {
+- Optional optional2 = WeatheringCopper.getPrevious(state);
++ Optional optional2 = Optional.ofNullable(world.purpurConfig.axeWeatherables.get(state.getBlock())); // Purpur
+ if (optional2.isPresent()) {
+- world.playSound(player, pos, SoundEvents.AXE_SCRAPE, SoundSource.BLOCKS, 1.0F, 1.0F);
++ if (!HoneycombItem.WAXABLES.get().containsKey(state.getBlock())) world.playSound(null, pos, SoundEvents.AXE_SCRAPE, SoundSource.BLOCKS, 1.0F, 1.0F); // Purpur - force sound
+ world.levelEvent(player, 3005, pos, 0);
+ return optional2;
+ } else {
+- Optional optional3 = Optional.ofNullable(HoneycombItem.WAX_OFF_BY_BLOCK.get().get(state.getBlock())).map((block) -> {
+- return block.withPropertiesOf(state);
+- });
++ Optional optional3 = Optional.ofNullable(world.purpurConfig.axeWaxables.get(state.getBlock())); // Purpur
+ if (optional3.isPresent()) {
+- world.playSound(player, pos, SoundEvents.AXE_WAX_OFF, SoundSource.BLOCKS, 1.0F, 1.0F);
++ if (!HoneycombItem.WAX_OFF_BY_BLOCK.get().containsKey(state.getBlock())) world.playSound(player, pos, SoundEvents.AXE_WAX_OFF, SoundSource.BLOCKS, 1.0F, 1.0F); // Purpur - force sound
+ world.levelEvent(player, 3004, pos, 0);
+ return optional3;
+ } else {
diff --git a/src/main/java/net/minecraft/world/item/HoeItem.java b/src/main/java/net/minecraft/world/item/HoeItem.java
index 180aec596110309aade13d2080f8824d152b07cb..552c31c0f3746dd35388395036e70a925bf00bd4 100644
--- a/src/main/java/net/minecraft/world/item/HoeItem.java
@@ -151,10 +153,10 @@ index 21212462e6b415e96536a27b2c009d1562f18946..193bcb12152347f5f02ce18b01ba918e
return InteractionResult.PASS;
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 9061a6819cbe7d9da35ff5f8fd8c49bb1128d346..c2bc762175dfab4f64b00c56bbb28ff26b3cad73 100644
+index 97295817c15bfaab80241ae89134bde1bb129462..5f69a74b53880bf7c58fc64402ed99c22b1c244e 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -507,6 +507,206 @@ public class PurpurWorldConfig {
+@@ -503,6 +503,206 @@ public class PurpurWorldConfig {
});
}
diff --git a/patches/server/0190-Store-placer-on-Block-when-placed.patch b/patches/server/0187-Store-placer-on-Block-when-placed.patch
similarity index 86%
rename from patches/server/0190-Store-placer-on-Block-when-placed.patch
rename to patches/server/0187-Store-placer-on-Block-when-placed.patch
index 4e7310b52..6f6344a52 100644
--- a/patches/server/0190-Store-placer-on-Block-when-placed.patch
+++ b/patches/server/0187-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 43366430f1219dc364f1bf7b8112a232f85c275f..5532e166c7e010add65e5921722b50272c805c03 100644
+index 05f4670df6b45d7d9cd4ff78a0e10587f8be6f12..2b1decf36ff950d9572e3d8790e1f60ff84ce5fa 100644
--- a/src/main/java/net/minecraft/world/item/ItemStack.java
+++ b/src/main/java/net/minecraft/world/item/ItemStack.java
-@@ -432,6 +432,7 @@ public final class ItemStack {
+@@ -453,6 +453,7 @@ public final class ItemStack {
world.preventPoiUpdated = true; // CraftBukkit - SPIGOT-5710
for (BlockState blockstate : blocks) {
blockstate.update(true, false);
@@ -16,7 +16,7 @@ index 43366430f1219dc364f1bf7b8112a232f85c275f..5532e166c7e010add65e5921722b5027
}
world.preventPoiUpdated = false;
-@@ -463,6 +464,7 @@ public final class ItemStack {
+@@ -484,6 +485,7 @@ public final class ItemStack {
if (!(block.getBlock() instanceof BaseEntityBlock)) { // Containers get placed automatically
block.getBlock().onPlace(block, world, newblockposition, oldBlock, true, context); // Paper - pass context
}
@@ -25,10 +25,10 @@ index 43366430f1219dc364f1bf7b8112a232f85c275f..5532e166c7e010add65e5921722b5027
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 d4cbff18adb62073a1dceb189043789620af6877..f65b54919d19d2ddc7261cc36853babbaef3c822 100644
+index 4d50dd92a7f3187ee1d8edb926e7c273c8156549..39aebcac2ae260d0db2e7bd5ac3fc7255d39349e 100644
--- a/src/main/java/net/minecraft/world/level/block/Block.java
+++ b/src/main/java/net/minecraft/world/level/block/Block.java
-@@ -430,7 +430,17 @@ public class Block extends BlockBehaviour implements ItemLike {
+@@ -437,7 +437,17 @@ public class Block extends BlockBehaviour implements ItemLike {
} // Paper
}
diff --git a/patches/server/0191-Summoner-API.patch b/patches/server/0188-Summoner-API.patch
similarity index 93%
rename from patches/server/0191-Summoner-API.patch
rename to patches/server/0188-Summoner-API.patch
index 4e875fdf0..126b2b580 100644
--- a/patches/server/0191-Summoner-API.patch
+++ b/patches/server/0188-Summoner-API.patch
@@ -93,7 +93,7 @@ index a1efde792eaa3f80cd0c7c48e38bbd07e1eb5c9d..20f2fd0edf290d448d06e4772b5947fc
}
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 8d882e6ef4e199258866f30f5548a6feae4582da..ff5d08f0cf323606ca2eb8bef3f487c7a86029e2 100644
+index b0d0ed64919a0acea70554b6600cf6ba9566a178..d2640173f3eca484123eb7bc9f6c4f796c9178fb 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
@@ -84,6 +84,7 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob
@@ -137,10 +137,10 @@ index 8d882e6ef4e199258866f30f5548a6feae4582da..ff5d08f0cf323606ca2eb8bef3f487c7
}
diff --git a/src/main/java/net/minecraft/world/level/block/CarvedPumpkinBlock.java b/src/main/java/net/minecraft/world/level/block/CarvedPumpkinBlock.java
-index 23c487e295b3b736d8800f0c884324c9b18a5373..ebeb7caf7fd4f45714bab0856a48b847a544cce7 100644
+index a63733fa01dc58b3c0abb28c1cd88c8b0a456083..75ef899fcd063dd7770aefaca69a6936cccfa620 100644
--- a/src/main/java/net/minecraft/world/level/block/CarvedPumpkinBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/CarvedPumpkinBlock.java
-@@ -64,7 +64,7 @@ public class CarvedPumpkinBlock extends HorizontalDirectionalBlock {
+@@ -71,7 +71,7 @@ public class CarvedPumpkinBlock extends HorizontalDirectionalBlock {
SnowGolem entitysnowman = (SnowGolem) EntityType.SNOW_GOLEM.create(world);
if (entitysnowman != null) {
@@ -149,7 +149,7 @@ index 23c487e295b3b736d8800f0c884324c9b18a5373..ebeb7caf7fd4f45714bab0856a48b847
}
} else {
BlockPattern.BlockPatternMatch shapedetector_shapedetectorcollection1 = this.getOrCreateIronGolemFull().find(world, pos);
-@@ -74,7 +74,7 @@ public class CarvedPumpkinBlock extends HorizontalDirectionalBlock {
+@@ -81,7 +81,7 @@ public class CarvedPumpkinBlock extends HorizontalDirectionalBlock {
if (entityirongolem != null) {
entityirongolem.setPlayerCreated(true);
@@ -158,7 +158,7 @@ index 23c487e295b3b736d8800f0c884324c9b18a5373..ebeb7caf7fd4f45714bab0856a48b847
}
}
}
-@@ -82,6 +82,16 @@ public class CarvedPumpkinBlock extends HorizontalDirectionalBlock {
+@@ -89,6 +89,16 @@ public class CarvedPumpkinBlock extends HorizontalDirectionalBlock {
}
private static void spawnGolemInWorld(Level world, BlockPattern.BlockPatternMatch patternResult, Entity entity, BlockPos pos) {
@@ -176,10 +176,10 @@ index 23c487e295b3b736d8800f0c884324c9b18a5373..ebeb7caf7fd4f45714bab0856a48b847
entity.moveTo((double) pos.getX() + 0.5D, (double) pos.getY() + 0.05D, (double) pos.getZ() + 0.5D, 0.0F, 0.0F);
// CraftBukkit start
diff --git a/src/main/java/net/minecraft/world/level/block/WitherSkullBlock.java b/src/main/java/net/minecraft/world/level/block/WitherSkullBlock.java
-index 1aa0e921890d600c9274deb923da04e72b12bcc6..44bd7bee2665a05878fd2df935a700f02cd13a75 100644
+index fb180f0bcd20e51d41cfc924029c0b23d3d26258..688d161cd6725f494366c23668ebd6ff709b1587 100644
--- a/src/main/java/net/minecraft/world/level/block/WitherSkullBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/WitherSkullBlock.java
-@@ -69,6 +69,7 @@ public class WitherSkullBlock extends SkullBlock {
+@@ -76,6 +76,7 @@ public class WitherSkullBlock extends SkullBlock {
entitywither.moveTo((double) blockposition1.getX() + 0.5D, (double) blockposition1.getY() + 0.55D, (double) blockposition1.getZ() + 0.5D, shapedetector_shapedetectorcollection.getForwards().getAxis() == Direction.Axis.X ? 0.0F : 90.0F, 0.0F);
entitywither.yBodyRot = shapedetector_shapedetectorcollection.getForwards().getAxis() == Direction.Axis.X ? 0.0F : 90.0F;
entitywither.makeInvulnerable();
@@ -188,7 +188,7 @@ index 1aa0e921890d600c9274deb923da04e72b12bcc6..44bd7bee2665a05878fd2df935a700f0
if (!world.addFreshEntity(entitywither, SpawnReason.BUILD_WITHER)) {
return;
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftIronGolem.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftIronGolem.java
-index 75d10b5322eb0a62bce2855c04a5151eb857d7de..208018981a2a5666c455eb34614b03f617354165 100644
+index 63cae1a2e95d8da17c45c4404a8dd0ca6a413c39..966587c2788b5c93be83259ddc962a89cde7cbaa 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftIronGolem.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftIronGolem.java
@@ -27,4 +27,17 @@ public class CraftIronGolem extends CraftGolem implements IronGolem {
@@ -210,7 +210,7 @@ index 75d10b5322eb0a62bce2855c04a5151eb857d7de..208018981a2a5666c455eb34614b03f6
+ // Purpur end
}
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftSnowman.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftSnowman.java
-index e4a14cdfeb91a3d32e622d27d612605b1bca08e2..898d934aafd6066df45f02fe3406fa83f79b745c 100644
+index 4ce2373ff71c3c1b8951646e057587a3ab09e145..4f7f6cf6ca24406570d2d29dc63dc89401119961 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftSnowman.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftSnowman.java
@@ -28,4 +28,17 @@ public class CraftSnowman extends CraftGolem implements Snowman, com.destroystok
@@ -232,7 +232,7 @@ index e4a14cdfeb91a3d32e622d27d612605b1bca08e2..898d934aafd6066df45f02fe3406fa83
+ // Purpur end
}
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftWither.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftWither.java
-index 5a97c92f9b044d8ab7bd3346ceb464455a09046e..e30d8b80734f04b1fa89e8a3cef666116fd7366c 100644
+index 7a8ce6956db56061af93ba9761f5d1057a90bc49..6d286b23806666f7b00ac88c5922144649f8a041 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftWither.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftWither.java
@@ -99,4 +99,17 @@ public class CraftWither extends CraftMonster implements Wither, com.destroystok
diff --git a/patches/server/0192-Customizable-sleeping-actionbar-messages.patch b/patches/server/0189-Customizable-sleeping-actionbar-messages.patch
similarity index 94%
rename from patches/server/0192-Customizable-sleeping-actionbar-messages.patch
rename to patches/server/0189-Customizable-sleeping-actionbar-messages.patch
index 3b1e397ce..f9e767850 100644
--- a/patches/server/0192-Customizable-sleeping-actionbar-messages.patch
+++ b/patches/server/0189-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 81c7fc2cb4c49745b45ecaaa20d91bab457272d5..331985ee26b9491b7ff71c6a104fafd08f983554 100644
+index 67d343ddfd665164219f5645e8a912134170d386..36f3a94499deb1344c3b7628c08adf6e49be26a8 100644
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
-@@ -1219,11 +1219,27 @@ public class ServerLevel extends Level implements WorldGenLevel {
+@@ -1226,11 +1226,27 @@ public class ServerLevel extends Level implements WorldGenLevel {
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 81c7fc2cb4c49745b45ecaaa20d91bab457272d5..331985ee26b9491b7ff71c6a104fafd0
}
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java
-index 934838dc695b708d0672d787887726587dc5762c..f149c4149bf3c19e87c15cbea0078c95283a4d84 100644
+index 3c6331f703acc59f1764f7ef474b242cfeeb63aa..95853c833ba47a2c136ba6d237dcdcee09fb8de8 100644
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
-@@ -1464,7 +1464,19 @@ public class ServerPlayer extends Player {
+@@ -1468,7 +1468,19 @@ public class ServerPlayer extends Player {
});
if (!this.serverLevel().canSleepThroughNights()) {
diff --git a/patches/server/0193-option-to-disable-shulker-box-items-from-dropping-co.patch b/patches/server/0190-option-to-disable-shulker-box-items-from-dropping-co.patch
similarity index 96%
rename from patches/server/0193-option-to-disable-shulker-box-items-from-dropping-co.patch
rename to patches/server/0190-option-to-disable-shulker-box-items-from-dropping-co.patch
index 9b6506fad..0df1df0a8 100644
--- a/patches/server/0193-option-to-disable-shulker-box-items-from-dropping-co.patch
+++ b/patches/server/0190-option-to-disable-shulker-box-items-from-dropping-co.patch
@@ -19,7 +19,7 @@ index efdf56044396b4ce486948d2c993971f99174a5e..21916ab9bde38ef8383e746f2ce597b0
CompoundTag nbttagcompound = BlockItem.getBlockEntityData(itemstack);
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index ad40281464ef651b01520f5662d315ed2f84304b..943fcd97ff515fbcc8508344f5094180ba181978 100644
+index 5f69a74b53880bf7c58fc64402ed99c22b1c244e..f540ecafbcc509ad5f6404ffc0d2047f8cd3d79f 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -221,6 +221,7 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0194-Big-dripleaf-tilt-delay.patch b/patches/server/0191-Big-dripleaf-tilt-delay.patch
similarity index 89%
rename from patches/server/0194-Big-dripleaf-tilt-delay.patch
rename to patches/server/0191-Big-dripleaf-tilt-delay.patch
index 78c6e8fa2..94f51606e 100644
--- a/patches/server/0194-Big-dripleaf-tilt-delay.patch
+++ b/patches/server/0191-Big-dripleaf-tilt-delay.patch
@@ -11,10 +11,10 @@ PARTIAL: big_dripleaf with PARTIAL tilt will change to FULL tilt after 10 ticks
UNSTABLE: big_dripleaf with FULL tilt will change back to no tilt after 100 ticks
diff --git a/src/main/java/net/minecraft/world/level/block/BigDripleafBlock.java b/src/main/java/net/minecraft/world/level/block/BigDripleafBlock.java
-index 54cf35b0c48d96ecfb27ff13cd685c16a1cd616b..1822ea0c72cc1685aab86a44f75c791bc5c595fa 100644
+index 8e4a6a1188b2ce2825dc5750505212c72efb5c7b..c7f78ccb228d261984ac360f2ca6ae9478786184 100644
--- a/src/main/java/net/minecraft/world/level/block/BigDripleafBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/BigDripleafBlock.java
-@@ -236,7 +236,7 @@ public class BigDripleafBlock extends HorizontalDirectionalBlock implements Bone
+@@ -243,7 +243,7 @@ public class BigDripleafBlock extends HorizontalDirectionalBlock implements Bone
BigDripleafBlock.playTiltSound(world, blockposition, soundeffect);
}
@@ -24,10 +24,10 @@ index 54cf35b0c48d96ecfb27ff13cd685c16a1cd616b..1822ea0c72cc1685aab86a44f75c791b
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 8a6b73793bab42e683e22a54d8b801d65baf5fe5..5909f27cf58efdfdb4a86909a86bf396ad9c740b 100644
+index f540ecafbcc509ad5f6404ffc0d2047f8cd3d79f..e9069b48d19779ba9fda5ea736117b6f092b3efd 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -748,6 +748,22 @@ public class PurpurWorldConfig {
+@@ -744,6 +744,22 @@ public class PurpurWorldConfig {
}
}
diff --git a/patches/server/0195-Player-ridable-in-water-option.patch b/patches/server/0192-Player-ridable-in-water-option.patch
similarity index 71%
rename from patches/server/0195-Player-ridable-in-water-option.patch
rename to patches/server/0192-Player-ridable-in-water-option.patch
index 2120e4a3c..22b58cae1 100644
--- a/patches/server/0195-Player-ridable-in-water-option.patch
+++ b/patches/server/0192-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 05c089d6e89cf017998bfab88aa9b2d124bf7f86..52b4ffc17ac913bf64cf6a6b7a37ae6e5af9bd87 100644
+index 952bf54a96f3ee84059f13c5821af2cfafa05c60..fd67cefb971b394042c0fdd845c20cf55d8efc2f 100644
--- a/src/main/java/net/minecraft/world/entity/player/Player.java
+++ b/src/main/java/net/minecraft/world/entity/player/Player.java
-@@ -2110,6 +2110,11 @@ public abstract class Player extends LivingEntity {
+@@ -2025,6 +2025,11 @@ public abstract class Player extends LivingEntity {
return this.inventory.armor;
}
@@ -21,21 +21,21 @@ index 05c089d6e89cf017998bfab88aa9b2d124bf7f86..52b4ffc17ac913bf64cf6a6b7a37ae6e
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 5909f27cf58efdfdb4a86909a86bf396ad9c740b..d0098fc7906ab1b6be5e720978540380e479a02f 100644
+index e9069b48d19779ba9fda5ea736117b6f092b3efd..e45b0f23cad0ad85915d1cbf1d3651a2d5b895a3 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -396,6 +396,7 @@ public class PurpurWorldConfig {
+@@ -394,6 +394,7 @@ public class PurpurWorldConfig {
+ public double playerCriticalDamageMultiplier = 1.5D;
+ public int playerBurpDelay = 10;
public boolean playerBurpWhenFull = false;
- public int playerPortalWaitTime = 80;
- public int playerCreativePortalWaitTime = 1;
+ public boolean playerRidableInWater = false;
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 {
+@@ -416,6 +417,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);
- playerPortalWaitTime = getInt("gameplay-mechanics.player.portal-wait-time", playerPortalWaitTime);
- playerCreativePortalWaitTime = getInt("gameplay-mechanics.player.creative-portal-wait-time", playerCreativePortalWaitTime);
+ playerRidableInWater = getBoolean("gameplay-mechanics.player.ridable-in-water", playerRidableInWater);
}
diff --git a/patches/server/0196-Config-to-disable-Enderman-teleport-on-projectile-hi.patch b/patches/server/0193-Config-to-disable-Enderman-teleport-on-projectile-hi.patch
similarity index 86%
rename from patches/server/0196-Config-to-disable-Enderman-teleport-on-projectile-hi.patch
rename to patches/server/0193-Config-to-disable-Enderman-teleport-on-projectile-hi.patch
index cc1023896..efb92c6c9 100644
--- a/patches/server/0196-Config-to-disable-Enderman-teleport-on-projectile-hi.patch
+++ b/patches/server/0193-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 db05006ca159a91165a7392cb57d0905e3732fe1..463a01305cc76ffd8018d2227f5f6dc1ecf24c5f 100644
+index 6519fb56a7c6fd2e9ce3f4a0504053ed05eb0e14..3583d0c01410987584a53bb6e717d5636e2c9f69 100644
--- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
+++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
-@@ -455,6 +455,7 @@ public class EnderMan extends Monster implements NeutralMob {
+@@ -449,6 +449,7 @@ public class EnderMan extends Monster implements NeutralMob {
} else {
flag1 = flag && this.hurtWithCleanWater(source, (ThrownPotion) source.getDirectEntity(), amount);
@@ -17,10 +17,10 @@ index db05006ca159a91165a7392cb57d0905e3732fe1..463a01305cc76ffd8018d2227f5f6dc1
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 d0098fc7906ab1b6be5e720978540380e479a02f..0319fa5cb86e40520228bbdbd41e51c38cb4ffd6 100644
+index e45b0f23cad0ad85915d1cbf1d3651a2d5b895a3..602f8111576de65d6059704cf5d81cba38172236 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -1369,6 +1369,7 @@ public class PurpurWorldConfig {
+@@ -1360,6 +1360,7 @@ public class PurpurWorldConfig {
public boolean endermanAggroEndermitesOnlyIfPlayerSpawned = false;
public boolean endermanIgnorePlayerDragonHead = false;
public boolean endermanDisableStareAggro = false;
@@ -28,7 +28,7 @@ index d0098fc7906ab1b6be5e720978540380e479a02f..0319fa5cb86e40520228bbdbd41e51c3
private void endermanSettings() {
endermanRidable = getBoolean("mobs.enderman.ridable", endermanRidable);
endermanRidableInWater = getBoolean("mobs.enderman.ridable-in-water", endermanRidableInWater);
-@@ -1391,6 +1392,7 @@ public class PurpurWorldConfig {
+@@ -1382,6 +1383,7 @@ public class PurpurWorldConfig {
endermanAggroEndermitesOnlyIfPlayerSpawned = getBoolean("mobs.enderman.aggressive-towards-endermites-only-spawned-by-player-thrown-ender-pearls", endermanAggroEndermitesOnlyIfPlayerSpawned);
endermanIgnorePlayerDragonHead = getBoolean("mobs.enderman.ignore-players-wearing-dragon-head", endermanIgnorePlayerDragonHead);
endermanDisableStareAggro = getBoolean("mobs.enderman.disable-player-stare-aggression", endermanDisableStareAggro);
diff --git a/patches/server/0197-Add-compass-command.patch b/patches/server/0194-Add-compass-command.patch
similarity index 95%
rename from patches/server/0197-Add-compass-command.patch
rename to patches/server/0194-Add-compass-command.patch
index 7528ba3de..3f2789d0b 100644
--- a/patches/server/0197-Add-compass-command.patch
+++ b/patches/server/0194-Add-compass-command.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Add compass command
diff --git a/src/main/java/net/minecraft/commands/Commands.java b/src/main/java/net/minecraft/commands/Commands.java
-index e254f7c498c5a1608afe130b2dd4d3d037069f25..af712f089e7919fa0bd3946866fd3486fab19f76 100644
+index bf51f5e414ab45e33efa4057ab251120290b43e1..428dd75450bdd5daf902a1fbaca7031a9bc585a8 100644
--- a/src/main/java/net/minecraft/commands/Commands.java
+++ b/src/main/java/net/minecraft/commands/Commands.java
-@@ -235,6 +235,7 @@ public class Commands {
+@@ -255,6 +255,7 @@ public class Commands {
org.purpurmc.purpur.command.PingCommand.register(this.dispatcher); // Purpur
org.purpurmc.purpur.command.UptimeCommand.register(this.dispatcher); // Purpur
org.purpurmc.purpur.command.TPSBarCommand.register(this.dispatcher); // Purpur
@@ -17,10 +17,10 @@ index e254f7c498c5a1608afe130b2dd4d3d037069f25..af712f089e7919fa0bd3946866fd3486
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 f149c4149bf3c19e87c15cbea0078c95283a4d84..1cca542c33510a01fb59631e68b1aa212d8230a5 100644
+index 95853c833ba47a2c136ba6d237dcdcee09fb8de8..074e718e4081d3e37f774613e6929224f28a3e26 100644
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
-@@ -276,6 +276,7 @@ public class ServerPlayer extends Player {
+@@ -283,6 +283,7 @@ public class ServerPlayer extends Player {
public org.bukkit.event.player.PlayerQuitEvent.QuitReason quitReason = null; // Paper - 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 f149c4149bf3c19e87c15cbea0078c95283a4d84..1cca542c33510a01fb59631e68b1aa21
// Paper start - replace player chunk loader
private final java.util.concurrent.atomic.AtomicReference viewDistances = new java.util.concurrent.atomic.AtomicReference<>(new io.papermc.paper.chunk.system.RegionizedPlayerChunkLoader.ViewDistances(-1, -1, -1));
-@@ -564,6 +565,7 @@ public class ServerPlayer extends Player {
+@@ -571,6 +572,7 @@ public class ServerPlayer extends Player {
}
if (nbt.contains("Purpur.TPSBar")) { this.tpsBar = nbt.getBoolean("Purpur.TPSBar"); } // Purpur
@@ -36,7 +36,7 @@ index f149c4149bf3c19e87c15cbea0078c95283a4d84..1cca542c33510a01fb59631e68b1aa21
}
@Override
-@@ -631,6 +633,7 @@ public class ServerPlayer extends Player {
+@@ -638,6 +640,7 @@ public class ServerPlayer extends Player {
this.getBukkitEntity().setExtraData(nbt); // CraftBukkit
nbt.putBoolean("Purpur.TPSBar", this.tpsBar); // Purpur
@@ -44,7 +44,7 @@ index f149c4149bf3c19e87c15cbea0078c95283a4d84..1cca542c33510a01fb59631e68b1aa21
}
// CraftBukkit start - World fallback code, either respawn location or global spawn
-@@ -2800,5 +2803,13 @@ public class ServerPlayer extends Player {
+@@ -2901,5 +2904,13 @@ public class ServerPlayer extends Player {
public void tpsBar(boolean tpsBar) {
this.tpsBar = tpsBar;
}
@@ -89,7 +89,7 @@ index 9a9c4826dab3de9e63ba984f8b2e1b3b7aa5a98b..62fa79eccbb6f679c0460a6dfd457c40
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 d26630c3a5d34b51f2104fe135d5a11a87e4e974..5f48af20f046bf516ecaf0dfd9fd2b0fc209c1ad 100644
+index 602f8111576de65d6059704cf5d81cba38172236..78381e82ddbfc78ed458908053752f48fee034b0 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -222,6 +222,7 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0198-Toggle-for-kinetic-damage.patch b/patches/server/0195-Toggle-for-kinetic-damage.patch
similarity index 89%
rename from patches/server/0198-Toggle-for-kinetic-damage.patch
rename to patches/server/0195-Toggle-for-kinetic-damage.patch
index 05453045e..7e9f7bb3e 100644
--- a/patches/server/0198-Toggle-for-kinetic-damage.patch
+++ b/patches/server/0195-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 a75f8b72632cab7b9f2c5c6e0cacebe8fe572691..47b9bc6ae22243c523dc3a72c13dc335a17999b9 100644
+index 36d4d360c1f60d884f067391b7790e001010b45d..cbf14a9f6c4059ac2246d840ff901113fb03f8cc 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
-@@ -2934,6 +2934,7 @@ public abstract class LivingEntity extends Entity implements Attackable {
+@@ -2905,6 +2905,7 @@ public abstract class LivingEntity extends Entity implements Attackable {
if (f3 > 0.0F) {
this.playSound(this.getFallDamageSound((int) f3), 1.0F, 1.0F);
@@ -17,7 +17,7 @@ index a75f8b72632cab7b9f2c5c6e0cacebe8fe572691..47b9bc6ae22243c523dc3a72c13dc335
}
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 5f48af20f046bf516ecaf0dfd9fd2b0fc209c1ad..19563349b4dab54b840a1d089521d1b5b21353ef 100644
+index 78381e82ddbfc78ed458908053752f48fee034b0..46c1ace4cce14e11ab957df1077625657ea3798b 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -182,12 +182,14 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0199-Add-Option-for-disable-observer-clocks.patch b/patches/server/0196-Add-Option-for-disable-observer-clocks.patch
similarity index 88%
rename from patches/server/0199-Add-Option-for-disable-observer-clocks.patch
rename to patches/server/0196-Add-Option-for-disable-observer-clocks.patch
index 282f377d3..8092e1228 100644
--- a/patches/server/0199-Add-Option-for-disable-observer-clocks.patch
+++ b/patches/server/0196-Add-Option-for-disable-observer-clocks.patch
@@ -6,10 +6,10 @@ Subject: [PATCH] Add Option for disable observer clocks
Allow to disable observer clocks: https://www.spigotmc.org/attachments/observerclock-gif.365936/
diff --git a/src/main/java/net/minecraft/world/level/block/ObserverBlock.java b/src/main/java/net/minecraft/world/level/block/ObserverBlock.java
-index 7b45d6b9a005036ca5051d089a7be792eb87012f..8806c97ecc6bdd8a64c2d82bb2f58f46ac37c468 100644
+index 713352b68f82d4c4a19a712d5207de0f99456713..d056e80c98973e9ba64adc5a8554acc8a5f3eac9 100644
--- a/src/main/java/net/minecraft/world/level/block/ObserverBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/ObserverBlock.java
-@@ -64,6 +64,7 @@ public class ObserverBlock extends DirectionalBlock {
+@@ -71,6 +71,7 @@ public class ObserverBlock extends DirectionalBlock {
@Override
public BlockState updateShape(BlockState state, Direction direction, BlockState neighborState, LevelAccessor world, BlockPos pos, BlockPos neighborPos) {
if (state.getValue(ObserverBlock.FACING) == direction && !(Boolean) state.getValue(ObserverBlock.POWERED)) {
@@ -18,7 +18,7 @@ index 7b45d6b9a005036ca5051d089a7be792eb87012f..8806c97ecc6bdd8a64c2d82bb2f58f46
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 45b89ffe9b7a61d9c4d0508d533131d54e363549..8cece9543a87ac86a8320fef4a23b39dbc76ab5c 100644
+index 46c1ace4cce14e11ab957df1077625657ea3798b..6c5fc242df9b0bf4d79a091105b7b113d801bf05 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -369,6 +369,11 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0200-Customizeable-Zombie-Villager-curing-times.patch b/patches/server/0197-Customizeable-Zombie-Villager-curing-times.patch
similarity index 92%
rename from patches/server/0200-Customizeable-Zombie-Villager-curing-times.patch
rename to patches/server/0197-Customizeable-Zombie-Villager-curing-times.patch
index 36a60560d..cb0b0629f 100644
--- a/patches/server/0200-Customizeable-Zombie-Villager-curing-times.patch
+++ b/patches/server/0197-Customizeable-Zombie-Villager-curing-times.patch
@@ -18,10 +18,10 @@ index 135ce8822ed7e3d6182755deca37a2c0531960c6..6a85de8af9b260e92b4ccffa2ae3503c
return InteractionResult.SUCCESS;
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index b74734549b55ac08f67496b455b62bf65ae21ffa..78b57bf24e0ec6a4e5e4e1f56deb62480e8fd467 100644
+index 6c5fc242df9b0bf4d79a091105b7b113d801bf05..3c6a1dfe949d8c7347ad4990a5e148b74445a8d2 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -2774,6 +2774,8 @@ public class PurpurWorldConfig {
+@@ -2765,6 +2765,8 @@ public class PurpurWorldConfig {
public double zombieVillagerJockeyChance = 0.05D;
public boolean zombieVillagerJockeyTryExistingChickens = true;
public boolean zombieVillagerTakeDamageFromWater = false;
@@ -30,7 +30,7 @@ index b74734549b55ac08f67496b455b62bf65ae21ffa..78b57bf24e0ec6a4e5e4e1f56deb6248
private void zombieVillagerSettings() {
zombieVillagerRidable = getBoolean("mobs.zombie_villager.ridable", zombieVillagerRidable);
zombieVillagerRidableInWater = getBoolean("mobs.zombie_villager.ridable-in-water", zombieVillagerRidableInWater);
-@@ -2789,6 +2791,8 @@ public class PurpurWorldConfig {
+@@ -2780,6 +2782,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/0201-Option-for-sponges-to-work-on-lava-and-mud.patch b/patches/server/0198-Option-for-sponges-to-work-on-lava-and-mud.patch
similarity index 87%
rename from patches/server/0201-Option-for-sponges-to-work-on-lava-and-mud.patch
rename to patches/server/0198-Option-for-sponges-to-work-on-lava-and-mud.patch
index c7286491c..723276f7f 100644
--- a/patches/server/0201-Option-for-sponges-to-work-on-lava-and-mud.patch
+++ b/patches/server/0198-Option-for-sponges-to-work-on-lava-and-mud.patch
@@ -6,10 +6,10 @@ 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 e7b19fa84d9dce28dd88a3b4adcb83576dcb98a8..cc1ac862526377b2ac7b66bc20f428dc1aed6e78 100644
+index 6469f5e25673b4e20cf0b520b28b14b2eda9130c..9e4146ecd36ff2698ee951660ed88290c80fd8f7 100644
--- a/src/main/java/net/minecraft/world/level/block/SpongeBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/SpongeBlock.java
-@@ -70,7 +70,7 @@ public class SpongeBlock extends Block {
+@@ -77,7 +77,7 @@ public class SpongeBlock extends Block {
FluidState fluid = blockList.getFluidState(blockposition1);
// CraftBukkit end
@@ -18,7 +18,7 @@ index e7b19fa84d9dce28dd88a3b4adcb83576dcb98a8..cc1ac862526377b2ac7b66bc20f428dc
return false;
} else {
Block block = iblockdata.getBlock();
-@@ -85,6 +85,10 @@ public class SpongeBlock extends Block {
+@@ -92,6 +92,10 @@ public class SpongeBlock extends Block {
if (iblockdata.getBlock() instanceof LiquidBlock) {
blockList.setBlock(blockposition1, Blocks.AIR.defaultBlockState(), 3); // CraftBukkit
@@ -30,10 +30,10 @@ index e7b19fa84d9dce28dd88a3b4adcb83576dcb98a8..cc1ac862526377b2ac7b66bc20f428dc
if (!iblockdata.is(Blocks.KELP) && !iblockdata.is(Blocks.KELP_PLANT) && !iblockdata.is(Blocks.SEAGRASS) && !iblockdata.is(Blocks.TALL_SEAGRASS)) {
return false;
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index b2f365ab51b56a83ed7ea67c921c163c3511b834..13aa8ae8f33834793adf18c12541c2ecd2d0699f 100644
+index 3c6a1dfe949d8c7347ad4990a5e148b74445a8d2..b96a936a584c21832a7890716743f1c918f2264d 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -949,9 +949,13 @@ public class PurpurWorldConfig {
+@@ -940,9 +940,13 @@ public class PurpurWorldConfig {
public int spongeAbsorptionArea = 65;
public int spongeAbsorptionRadius = 6;
diff --git a/patches/server/0202-Toggle-for-Wither-s-spawn-sound.patch b/patches/server/0199-Toggle-for-Wither-s-spawn-sound.patch
similarity index 85%
rename from patches/server/0202-Toggle-for-Wither-s-spawn-sound.patch
rename to patches/server/0199-Toggle-for-Wither-s-spawn-sound.patch
index ba9f0efda..7cfeab39c 100644
--- a/patches/server/0202-Toggle-for-Wither-s-spawn-sound.patch
+++ b/patches/server/0199-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 ff5d08f0cf323606ca2eb8bef3f487c7a86029e2..5bf7a6ecd58612c8502ed747263b6c0edd445294 100644
+index d2640173f3eca484123eb7bc9f6c4f796c9178fb..73c967330cc793acc029c17f037d985e6ba919de 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
-@@ -425,7 +425,7 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob
+@@ -418,7 +418,7 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob
}
// CraftBukkit end
@@ -18,10 +18,10 @@ index ff5d08f0cf323606ca2eb8bef3f487c7a86029e2..5bf7a6ecd58612c8502ed747263b6c0e
// this.level().globalLevelEvent(1023, new BlockPosition(this), 0);
int viewDistance = ((ServerLevel) this.level()).getCraftServer().getViewDistance() * 16;
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 9a1b71bf2d33ba979dbfbc17b178cf6f40755ea5..06566fb9555c34718dad810b06c53d1020671f82 100644
+index b96a936a584c21832a7890716743f1c918f2264d..70b2bce9096d2e5486ee7932bada442a02b460a4 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -2619,6 +2619,7 @@ public class PurpurWorldConfig {
+@@ -2610,6 +2610,7 @@ public class PurpurWorldConfig {
public boolean witherTakeDamageFromWater = false;
public boolean witherCanRideVehicles = false;
public float witherExplosionRadius = 1.0F;
@@ -29,7 +29,7 @@ index 9a1b71bf2d33ba979dbfbc17b178cf6f40755ea5..06566fb9555c34718dad810b06c53d10
private void witherSettings() {
witherRidable = getBoolean("mobs.wither.ridable", witherRidable);
witherRidableInWater = getBoolean("mobs.wither.ridable-in-water", witherRidableInWater);
-@@ -2640,6 +2641,7 @@ public class PurpurWorldConfig {
+@@ -2631,6 +2632,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/0203-Cactus-breaks-from-solid-neighbors-config.patch b/patches/server/0200-Cactus-breaks-from-solid-neighbors-config.patch
similarity index 84%
rename from patches/server/0203-Cactus-breaks-from-solid-neighbors-config.patch
rename to patches/server/0200-Cactus-breaks-from-solid-neighbors-config.patch
index 9a219962e..a37028a2c 100644
--- a/patches/server/0203-Cactus-breaks-from-solid-neighbors-config.patch
+++ b/patches/server/0200-Cactus-breaks-from-solid-neighbors-config.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Cactus breaks from solid neighbors config
diff --git a/src/main/java/net/minecraft/world/level/block/CactusBlock.java b/src/main/java/net/minecraft/world/level/block/CactusBlock.java
-index 0003fb51ae3a6575575e10b4c86719f3061e2577..c2ca3432a47124d02e1aaf8ffb621f9a2c7d7a62 100644
+index a9629a102c4fa4e5720e63fcf4590e9231426c62..89c0006c06098e0d09a259ea8415d55b997367aa 100644
--- a/src/main/java/net/minecraft/world/level/block/CactusBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/CactusBlock.java
-@@ -107,7 +107,7 @@ public class CactusBlock extends Block {
+@@ -114,7 +114,7 @@ public class CactusBlock extends Block {
enumdirection = (Direction) iterator.next();
iblockdata1 = world.getBlockState(pos.relative(enumdirection));
@@ -18,10 +18,10 @@ index 0003fb51ae3a6575575e10b4c86719f3061e2577..c2ca3432a47124d02e1aaf8ffb621f9a
return false;
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 7670e4e1291e8c48b960ee44977d4850b470a81e..2951c05d64f7c1667343dd781800816b7fae5cb9 100644
+index 70b2bce9096d2e5486ee7932bada442a02b460a4..80f13907f068fc6c52595ea3cf93c1a4d5d03b69 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -775,6 +775,11 @@ public class PurpurWorldConfig {
+@@ -771,6 +771,11 @@ public class PurpurWorldConfig {
});
}
diff --git a/patches/server/0204-Config-to-remove-curse-of-binding-with-weakness.patch b/patches/server/0201-Config-to-remove-curse-of-binding-with-weakness.patch
similarity index 62%
rename from patches/server/0204-Config-to-remove-curse-of-binding-with-weakness.patch
rename to patches/server/0201-Config-to-remove-curse-of-binding-with-weakness.patch
index a14b3f56c..88d1a0b17 100644
--- a/patches/server/0204-Config-to-remove-curse-of-binding-with-weakness.patch
+++ b/patches/server/0201-Config-to-remove-curse-of-binding-with-weakness.patch
@@ -5,41 +5,33 @@ Subject: [PATCH] Config to remove curse of binding with weakness
diff --git a/src/main/java/net/minecraft/world/inventory/InventoryMenu.java b/src/main/java/net/minecraft/world/inventory/InventoryMenu.java
-index b399903e8f11ec6c12fe7e724b7d9c8292acd573..a4afa946cd47238eb0fed297a27b24013d5ba77c 100644
+index 9af1da3858d6cf79b8bfaf99dde1370ccc50d023..1acb41fab25bdbc4109913b111dbe3b0e106af3f 100644
--- a/src/main/java/net/minecraft/world/inventory/InventoryMenu.java
+++ b/src/main/java/net/minecraft/world/inventory/InventoryMenu.java
-@@ -4,6 +4,7 @@ import com.mojang.datafixers.util.Pair;
- import net.minecraft.network.chat.Component;
- import net.minecraft.resources.ResourceLocation;
- import net.minecraft.world.Container;
-+import net.minecraft.world.effect.MobEffects;
- import net.minecraft.world.entity.EquipmentSlot;
- import net.minecraft.world.entity.Mob;
- import net.minecraft.world.entity.player.Inventory;
-@@ -95,7 +96,7 @@ public class InventoryMenu extends RecipeBookMenu {
+@@ -95,7 +95,7 @@ public class InventoryMenu extends RecipeBookMenu {
public boolean mayPickup(Player playerEntity) {
ItemStack itemstack = this.getItem();
- return !itemstack.isEmpty() && !playerEntity.isCreative() && EnchantmentHelper.hasBindingCurse(itemstack) ? false : super.mayPickup(playerEntity);
-+ return !itemstack.isEmpty() && !playerEntity.isCreative() && EnchantmentHelper.hasBindingCurse(itemstack) ? playerEntity.level().purpurConfig.playerRemoveBindingWithWeakness && playerEntity.hasEffect(MobEffects.WEAKNESS) : super.mayPickup(playerEntity); // Purpur
++ return !itemstack.isEmpty() && !playerEntity.isCreative() && EnchantmentHelper.hasBindingCurse(itemstack) ? playerEntity.level().purpurConfig.playerRemoveBindingWithWeakness && playerEntity.hasEffect(net.minecraft.world.effect.MobEffects.WEAKNESS) : super.mayPickup(playerEntity); // Purpur
}
@Override
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 2951c05d64f7c1667343dd781800816b7fae5cb9..f64c758f51134e8102ca4092bc313eefd346d211 100644
+index 80f13907f068fc6c52595ea3cf93c1a4d5d03b69..073bd3a0c0d06269738b406b8de08db99e914f8d 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -406,6 +406,7 @@ public class PurpurWorldConfig {
- public int playerPortalWaitTime = 80;
- public int playerCreativePortalWaitTime = 1;
+@@ -404,6 +404,7 @@ public class PurpurWorldConfig {
+ public int playerBurpDelay = 10;
+ public boolean playerBurpWhenFull = false;
public boolean playerRidableInWater = false;
+ public boolean playerRemoveBindingWithWeakness = false;
private void playerSettings() {
if (PurpurConfig.version < 19) {
boolean oldVal = getBoolean("gameplay-mechanics.player.idle-timeout.mods-target", idleTimeoutTargetPlayer);
-@@ -431,6 +432,7 @@ public class PurpurWorldConfig {
- playerPortalWaitTime = getInt("gameplay-mechanics.player.portal-wait-time", playerPortalWaitTime);
- playerCreativePortalWaitTime = getInt("gameplay-mechanics.player.creative-portal-wait-time", playerCreativePortalWaitTime);
+@@ -427,6 +428,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);
+ playerRemoveBindingWithWeakness = getBoolean("gameplay-mechanics.player.curse-of-binding.remove-with-weakness", playerRemoveBindingWithWeakness);
}
diff --git a/patches/server/0205-Conduit-behavior-configuration.patch b/patches/server/0202-Conduit-behavior-configuration.patch
similarity index 97%
rename from patches/server/0205-Conduit-behavior-configuration.patch
rename to patches/server/0202-Conduit-behavior-configuration.patch
index 6add5b67a..f7f2ad4a0 100644
--- a/patches/server/0205-Conduit-behavior-configuration.patch
+++ b/patches/server/0202-Conduit-behavior-configuration.patch
@@ -77,10 +77,10 @@ index 963a596154091b79ca139af6274aa323518ad1ad..4dcac3899a500d8586580bcfd5b4516e
});
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 1de902f3efaa1b685e6a38eff2b5838f7ff32f8c..a44e8a0a7eea841f6c2ed1a7c2fae960ed8e5974 100644
+index 073bd3a0c0d06269738b406b8de08db99e914f8d..029b938936289db6e2b202e1e307cf8d0fa56ec1 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -2840,4 +2840,27 @@ public class PurpurWorldConfig {
+@@ -2831,4 +2831,27 @@ public class PurpurWorldConfig {
private void hungerSettings() {
hungerStarvationDamage = (float) getDouble("hunger.starvation-damage", hungerStarvationDamage);
}
diff --git a/patches/server/0206-Cauldron-fill-chances.patch b/patches/server/0203-Cauldron-fill-chances.patch
similarity index 87%
rename from patches/server/0206-Cauldron-fill-chances.patch
rename to patches/server/0203-Cauldron-fill-chances.patch
index b82984265..40d319d81 100644
--- a/patches/server/0206-Cauldron-fill-chances.patch
+++ b/patches/server/0203-Cauldron-fill-chances.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Cauldron fill chances
diff --git a/src/main/java/net/minecraft/world/level/block/CauldronBlock.java b/src/main/java/net/minecraft/world/level/block/CauldronBlock.java
-index 2f85b893dd0abc39fcedec65acc89e1567faf6f0..3ee012a9ef8cada0b2203e53b2f731f60f697cb1 100644
+index a821a981adbebdcf22997731b9bbea3d033cd2b1..028419d45c098baf5eab5d6e7a73189cb3e86622 100644
--- a/src/main/java/net/minecraft/world/level/block/CauldronBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/CauldronBlock.java
-@@ -29,7 +29,7 @@ public class CauldronBlock extends AbstractCauldronBlock {
+@@ -36,7 +36,7 @@ public class CauldronBlock extends AbstractCauldronBlock {
}
protected static boolean shouldHandlePrecipitation(Level world, Biome.Precipitation precipitation) {
@@ -18,10 +18,10 @@ index 2f85b893dd0abc39fcedec65acc89e1567faf6f0..3ee012a9ef8cada0b2203e53b2f731f6
@Override
diff --git a/src/main/java/net/minecraft/world/level/block/PointedDripstoneBlock.java b/src/main/java/net/minecraft/world/level/block/PointedDripstoneBlock.java
-index cd943997f11f5ea5c600fdc6db96043fb0fa713c..4adeda49a2e422e11f885bffb311653d99159bf4 100644
+index bd22d3fdecbc992b11073a74d854b7d1b43c3f6a..0a3b97f18abcc9b385c9efd5a30f3e2ce5e4bd59 100644
--- a/src/main/java/net/minecraft/world/level/block/PointedDripstoneBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/PointedDripstoneBlock.java
-@@ -186,7 +186,7 @@ public class PointedDripstoneBlock extends Block implements Fallable, SimpleWate
+@@ -195,7 +195,7 @@ public class PointedDripstoneBlock extends Block implements Fallable, SimpleWate
@VisibleForTesting
public static void maybeTransferFluid(BlockState state, ServerLevel world, BlockPos pos, float dripChance) {
@@ -30,7 +30,7 @@ index cd943997f11f5ea5c600fdc6db96043fb0fa713c..4adeda49a2e422e11f885bffb311653d
if (PointedDripstoneBlock.isStalactiteStartPos(state, world, pos)) {
Optional optional = PointedDripstoneBlock.getFluidAboveStalactite(world, pos, state);
-@@ -195,13 +195,13 @@ public class PointedDripstoneBlock extends Block implements Fallable, SimpleWate
+@@ -204,13 +204,13 @@ public class PointedDripstoneBlock extends Block implements Fallable, SimpleWate
float f1;
if (fluidtype == Fluids.WATER) {
@@ -47,10 +47,10 @@ index cd943997f11f5ea5c600fdc6db96043fb0fa713c..4adeda49a2e422e11f885bffb311653d
if (dripChance < f1) {
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index a44e8a0a7eea841f6c2ed1a7c2fae960ed8e5974..86306d03a4212bca0dbe990cf9f6a3854c1f55e5 100644
+index 029b938936289db6e2b202e1e307cf8d0fa56ec1..b27849dbddadf4388e5909b8fe74bcdab20c552f 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -2863,4 +2863,15 @@ public class PurpurWorldConfig {
+@@ -2854,4 +2854,15 @@ public class PurpurWorldConfig {
});
conduitBlocks = conduitBlockList.toArray(Block[]::new);
}
diff --git a/patches/server/0207-Config-to-allow-mobs-to-pathfind-over-rails.patch b/patches/server/0204-Config-to-allow-mobs-to-pathfind-over-rails.patch
similarity index 94%
rename from patches/server/0207-Config-to-allow-mobs-to-pathfind-over-rails.patch
rename to patches/server/0204-Config-to-allow-mobs-to-pathfind-over-rails.patch
index 40cf268ee..1e95c8846 100644
--- a/patches/server/0207-Config-to-allow-mobs-to-pathfind-over-rails.patch
+++ b/patches/server/0204-Config-to-allow-mobs-to-pathfind-over-rails.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Config to allow mobs to pathfind over rails
diff --git a/src/main/java/net/minecraft/world/level/pathfinder/WalkNodeEvaluator.java b/src/main/java/net/minecraft/world/level/pathfinder/WalkNodeEvaluator.java
-index 3583fcf5284bc5883308876dbd9886664b391e28..d976a6df54c1e817def2d588692abe25a03ee0fa 100644
+index 2aca9b193db5dadc4fb90b8d7548277b698924aa..7702cd386247c1a850bb22ccf8c0724d5bec1020 100644
--- a/src/main/java/net/minecraft/world/level/pathfinder/WalkNodeEvaluator.java
+++ b/src/main/java/net/minecraft/world/level/pathfinder/WalkNodeEvaluator.java
@@ -241,7 +241,7 @@ public class WalkNodeEvaluator extends NodeEvaluator {
@@ -18,7 +18,7 @@ index 3583fcf5284bc5883308876dbd9886664b391e28..d976a6df54c1e817def2d588692abe25
if (node != null && (node.type == BlockPathTypes.OPEN || node.type == BlockPathTypes.WALKABLE) && this.mob.getBbWidth() < 1.0F) {
double g = (double)(x - direction.getStepX()) + 0.5D;
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 909e6bb2781637e5f4c2525371de2ad0b5524afe..8ae2e7f81d1d6a09d9b733ae27ad6c99a58aeb2e 100644
+index b27849dbddadf4388e5909b8fe74bcdab20c552f..46b70a1fa8109fd1a6056dc5a854f6b3fdfb3034 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -138,6 +138,7 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0208-Shulker-change-color-with-dye.patch b/patches/server/0205-Shulker-change-color-with-dye.patch
similarity index 92%
rename from patches/server/0208-Shulker-change-color-with-dye.patch
rename to patches/server/0205-Shulker-change-color-with-dye.patch
index edf3fe483..ab7480489 100644
--- a/patches/server/0208-Shulker-change-color-with-dye.patch
+++ b/patches/server/0205-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 786fe41cc743817f2ed613969c7eeec9fc001b4b..40f4a53cf244549e9cf392f4286bdec1a6852574 100644
+index bf3c02e78df66ca57773d667350197220df5d2d1..47abc81aa04774abeb97c912cd118bbab3b51e86 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Shulker.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Shulker.java
@@ -22,6 +22,8 @@ import net.minecraft.tags.DamageTypeTags;
@@ -47,10 +47,10 @@ index 786fe41cc743817f2ed613969c7eeec9fc001b4b..40f4a53cf244549e9cf392f4286bdec1
protected void registerGoals() {
this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 8ae2e7f81d1d6a09d9b733ae27ad6c99a58aeb2e..a8cddd10832e6be2704569b6c1fb995bd9caf0b9 100644
+index 46b70a1fa8109fd1a6056dc5a854f6b3fdfb3034..a0ba55821e2d2a0c78c06e5756d8a591af85a536 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -2179,6 +2179,7 @@ public class PurpurWorldConfig {
+@@ -2170,6 +2170,7 @@ public class PurpurWorldConfig {
public double shulkerSpawnFromBulletNearbyRange = 8.0D;
public String shulkerSpawnFromBulletNearbyEquation = "(nearby - 1) / 5.0";
public boolean shulkerSpawnFromBulletRandomColor = false;
@@ -58,7 +58,7 @@ index 8ae2e7f81d1d6a09d9b733ae27ad6c99a58aeb2e..a8cddd10832e6be2704569b6c1fb995b
private void shulkerSettings() {
shulkerRidable = getBoolean("mobs.shulker.ridable", shulkerRidable);
shulkerRidableInWater = getBoolean("mobs.shulker.ridable-in-water", shulkerRidableInWater);
-@@ -2195,6 +2196,7 @@ public class PurpurWorldConfig {
+@@ -2186,6 +2187,7 @@ public class PurpurWorldConfig {
shulkerSpawnFromBulletNearbyRange = getDouble("mobs.shulker.spawn-from-bullet.nearby-range", shulkerSpawnFromBulletNearbyRange);
shulkerSpawnFromBulletNearbyEquation = getString("mobs.shulker.spawn-from-bullet.nearby-equation", shulkerSpawnFromBulletNearbyEquation);
shulkerSpawnFromBulletRandomColor = getBoolean("mobs.shulker.spawn-from-bullet.random-color", shulkerSpawnFromBulletRandomColor);
diff --git a/patches/server/0209-Extended-OfflinePlayer-API.patch b/patches/server/0206-Extended-OfflinePlayer-API.patch
similarity index 98%
rename from patches/server/0209-Extended-OfflinePlayer-API.patch
rename to patches/server/0206-Extended-OfflinePlayer-API.patch
index 4276e685b..a290e9e2b 100644
--- a/patches/server/0209-Extended-OfflinePlayer-API.patch
+++ b/patches/server/0206-Extended-OfflinePlayer-API.patch
@@ -223,10 +223,10 @@ index 2bbc39c257965ad91ee360cdfcd3538a0f041c7e..d0e3b531392738679894a989293ae49e
+ // Purpur end - OfflinePlayer API
}
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-index a4aed376b8c66dc251cdbaa98a067c26694c4b8d..63f7023a7f20f0133c03904ea48c15346a8963b8 100644
+index 6413d01dbdabb2f9d9507403dca92391e9dc08bc..0df4d72d82a4f047c6272af664ad61ee0117cf67 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-@@ -2527,6 +2527,28 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+@@ -2547,6 +2547,28 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
return this.getHandle().getAbilities().walkingSpeed * 2f;
}
diff --git a/patches/server/0210-Added-the-ability-to-add-combustible-items.patch b/patches/server/0207-Added-the-ability-to-add-combustible-items.patch
similarity index 96%
rename from patches/server/0210-Added-the-ability-to-add-combustible-items.patch
rename to patches/server/0207-Added-the-ability-to-add-combustible-items.patch
index e2d462abc..1af2e497a 100644
--- a/patches/server/0210-Added-the-ability-to-add-combustible-items.patch
+++ b/patches/server/0207-Added-the-ability-to-add-combustible-items.patch
@@ -51,10 +51,10 @@ index b0afc384907bb75dfa26e432a2328fe080660019..92e58d9503daf4cc9bc1f4c7785e159e
private int maxStack = MAX_STACK;
public List transaction = new java.util.ArrayList();
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
-index 6ab05085b4ba01ae1d6e4decc38cff56a571e20b..dd6d5ed8beb6d090c2aaafc540fa857a4815558f 100644
+index aa84152e8198dfeed0465877d38216f8892f55f7..d974846dda57755cfa33beba76794391beb9b4f3 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
-@@ -1540,6 +1540,19 @@ public final class CraftServer implements Server {
+@@ -1567,6 +1567,19 @@ public final class CraftServer implements Server {
return true;
}
diff --git a/patches/server/0211-Option-for-if-rain-and-thunder-should-stop-on-sleep.patch b/patches/server/0208-Option-for-if-rain-and-thunder-should-stop-on-sleep.patch
similarity index 88%
rename from patches/server/0211-Option-for-if-rain-and-thunder-should-stop-on-sleep.patch
rename to patches/server/0208-Option-for-if-rain-and-thunder-should-stop-on-sleep.patch
index 5d2e91e3a..39fce7cd6 100644
--- a/patches/server/0211-Option-for-if-rain-and-thunder-should-stop-on-sleep.patch
+++ b/patches/server/0208-Option-for-if-rain-and-thunder-should-stop-on-sleep.patch
@@ -5,18 +5,18 @@ Subject: [PATCH] Option for if rain and thunder should stop on sleep
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
-index f7d9398c9a73c8a02a2515b9d43b49433e5f883c..492a50f3b619753f8a353c739a3f10c44dfa7861 100644
+index 36f3a94499deb1344c3b7628c08adf6e49be26a8..5db8e4c8879d355843c196b17b8f39e9fe5d9a6a 100644
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
-@@ -1378,6 +1378,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
-
- private void resetWeatherCycle() {
+@@ -1386,6 +1386,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
+ @VisibleForTesting
+ public void resetWeatherCycle() {
// CraftBukkit start
+ if (this.purpurConfig.rainStopsAfterSleep) // Purpur
this.serverLevelData.setRaining(false, org.bukkit.event.weather.WeatherChangeEvent.Cause.SLEEP); // Paper - when passing the night
// If we stop due to everyone sleeping we should reset the weather duration to some other random value.
// Not that everyone ever manages to get the whole server to sleep at the same time....
-@@ -1385,6 +1386,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
+@@ -1393,6 +1394,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
this.serverLevelData.setRainTime(0);
}
// CraftBukkit end
@@ -25,7 +25,7 @@ index f7d9398c9a73c8a02a2515b9d43b49433e5f883c..492a50f3b619753f8a353c739a3f10c4
// CraftBukkit start
// If we stop due to everyone sleeping we should reset the weather duration to some other random value.
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index a8cddd10832e6be2704569b6c1fb995bd9caf0b9..1da30e052c08c27370755cae3e1890a397a2f323 100644
+index a0ba55821e2d2a0c78c06e5756d8a591af85a536..8fe41200b26c0a17b6b65178aa858a74494471a6 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -139,6 +139,8 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0212-Chance-for-azalea-blocks-to-grow-into-trees-naturall.patch b/patches/server/0209-Chance-for-azalea-blocks-to-grow-into-trees-naturall.patch
similarity index 89%
rename from patches/server/0212-Chance-for-azalea-blocks-to-grow-into-trees-naturall.patch
rename to patches/server/0209-Chance-for-azalea-blocks-to-grow-into-trees-naturall.patch
index abbd59590..ebc7deca6 100644
--- a/patches/server/0212-Chance-for-azalea-blocks-to-grow-into-trees-naturall.patch
+++ b/patches/server/0209-Chance-for-azalea-blocks-to-grow-into-trees-naturall.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Chance for azalea blocks to grow into trees naturally
diff --git a/src/main/java/net/minecraft/world/level/block/AzaleaBlock.java b/src/main/java/net/minecraft/world/level/block/AzaleaBlock.java
-index 087f3b3cc180e16195efdc0b402701fd9f5d78b4..aa4e13f1c77f10221128569483497668cd2eb7d3 100644
+index 3ecc92439fc85d224ff52f41c5e34079e042a5e6..2336fea8c65d64a77a1afa4b8b976fb0d7da00eb 100644
--- a/src/main/java/net/minecraft/world/level/block/AzaleaBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/AzaleaBlock.java
-@@ -43,6 +43,20 @@ public class AzaleaBlock extends BushBlock implements BonemealableBlock {
+@@ -49,6 +49,20 @@ public class AzaleaBlock extends BushBlock implements BonemealableBlock {
@Override
public void performBonemeal(ServerLevel world, RandomSource random, BlockPos pos, BlockState state) {
@@ -26,14 +26,14 @@ index 087f3b3cc180e16195efdc0b402701fd9f5d78b4..aa4e13f1c77f10221128569483497668
+
+ private void growTree(ServerLevel world, RandomSource random, BlockPos pos, net.minecraft.world.level.block.state.BlockState state) {
+ // Purpur end
- TREE_GROWER.growTree(world, world.getChunkSource().getGenerator(), pos, state, random);
+ TreeGrower.AZALEA.growTree(world, world.getChunkSource().getGenerator(), pos, state, random);
}
diff --git a/src/main/java/net/minecraft/world/level/block/Blocks.java b/src/main/java/net/minecraft/world/level/block/Blocks.java
-index b49e02ac7b3db9a5b79ce3f106ead19af4e7cfa6..6425bc42bb8024aa7936b841d6c2ee2c892eb329 100644
+index 1c7bb504a576568bd275b4f1373208d37d1419e5..3d48293c34fa37ba5091c6058dadb32a8f74a009 100644
--- a/src/main/java/net/minecraft/world/level/block/Blocks.java
+++ b/src/main/java/net/minecraft/world/level/block/Blocks.java
-@@ -1094,8 +1094,8 @@ public class Blocks {
+@@ -1145,8 +1145,8 @@ public class Blocks {
public static final Block CAVE_VINES = register("cave_vines", new CaveVinesBlock(BlockBehaviour.Properties.of().mapColor(MapColor.PLANT).randomTicks().noCollission().lightLevel(CaveVines.emission(14)).instabreak().sound(SoundType.CAVE_VINES).pushReaction(PushReaction.DESTROY)));
public static final Block CAVE_VINES_PLANT = register("cave_vines_plant", new CaveVinesPlantBlock(BlockBehaviour.Properties.of().mapColor(MapColor.PLANT).noCollission().lightLevel(CaveVines.emission(14)).instabreak().sound(SoundType.CAVE_VINES).pushReaction(PushReaction.DESTROY)));
public static final Block SPORE_BLOSSOM = register("spore_blossom", new SporeBlossomBlock(BlockBehaviour.Properties.of().mapColor(MapColor.PLANT).instabreak().noCollission().sound(SoundType.SPORE_BLOSSOM).pushReaction(PushReaction.DESTROY)));
@@ -45,10 +45,10 @@ index b49e02ac7b3db9a5b79ce3f106ead19af4e7cfa6..6425bc42bb8024aa7936b841d6c2ee2c
public static final Block PINK_PETALS = register("pink_petals", new PinkPetalsBlock(BlockBehaviour.Properties.of().mapColor(MapColor.PLANT).noCollission().sound(SoundType.PINK_PETALS).pushReaction(PushReaction.DESTROY)));
public static final Block MOSS_BLOCK = register("moss_block", new MossBlock(BlockBehaviour.Properties.of().mapColor(MapColor.COLOR_GREEN).strength(0.1F).sound(SoundType.MOSS).pushReaction(PushReaction.DESTROY)));
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 1da30e052c08c27370755cae3e1890a397a2f323..a3a5decf6586569c347d36f4416cf3cb3b0bef78 100644
+index 8fe41200b26c0a17b6b65178aa858a74494471a6..0be19b3fc5fa6af23a3930a63e62199dffd538ea 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -735,6 +735,11 @@ public class PurpurWorldConfig {
+@@ -731,6 +731,11 @@ public class PurpurWorldConfig {
anvilColorsUseMiniMessage = getBoolean("blocks.anvil.use-mini-message", anvilColorsUseMiniMessage);
}
@@ -60,7 +60,7 @@ index 1da30e052c08c27370755cae3e1890a397a2f323..a3a5decf6586569c347d36f4416cf3cb
public int beaconLevelOne = 20;
public int beaconLevelTwo = 30;
public int beaconLevelThree = 40;
-@@ -872,6 +877,11 @@ public class PurpurWorldConfig {
+@@ -868,6 +873,11 @@ public class PurpurWorldConfig {
farmlandTramplingFeatherFalling = getBoolean("blocks.farmland.feather-fall-distance-affects-trampling", farmlandTramplingFeatherFalling);
}
diff --git a/patches/server/0213-Shift-right-click-to-use-exp-for-mending.patch b/patches/server/0210-Shift-right-click-to-use-exp-for-mending.patch
similarity index 87%
rename from patches/server/0213-Shift-right-click-to-use-exp-for-mending.patch
rename to patches/server/0210-Shift-right-click-to-use-exp-for-mending.patch
index 93b94235a..819e0908a 100644
--- a/patches/server/0213-Shift-right-click-to-use-exp-for-mending.patch
+++ b/patches/server/0210-Shift-right-click-to-use-exp-for-mending.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Shift right click to use exp for mending
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java
-index dce9f57806052337c9256d45e95b4b84a88bf852..6f8d990cbc15c3fa11acdf59fc1ec1fa583f60ec 100644
+index 5de06447de2ab2c45debf314aecd39722d4a7af6..3a50342ff3e8b9685b5595bf78c05bfe8e251e58 100644
--- a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java
+++ b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java
@@ -517,6 +517,7 @@ public class ServerPlayerGameMode {
@@ -36,10 +36,10 @@ index dce9f57806052337c9256d45e95b4b84a88bf852..6f8d990cbc15c3fa11acdf59fc1ec1fa
+ // Purpur end
}
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
-index a541c642ef5132ec41dedac770fd31d96401806c..2152abc4ea04515a688af1dca8174f96a629f2fb 100644
+index 0b5c6557afa83fb018bf3843f2f290e3d1925487..ab20edfc54b37e06d5a775ec8e98f4875513bcae 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
-@@ -2024,6 +2024,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
+@@ -2050,6 +2050,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
boolean cancelled;
if (movingobjectposition == null || movingobjectposition.getType() != HitResult.Type.BLOCK) {
@@ -48,19 +48,19 @@ index a541c642ef5132ec41dedac770fd31d96401806c..2152abc4ea04515a688af1dca8174f96
cancelled = event.useItemInHand() == Event.Result.DENY;
} else {
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index e3c83c9cd122fb4917f1292d3623a5a902562579..1147ae92fb688d57cf4e831bd43be203064a0e88 100644
+index 0be19b3fc5fa6af23a3930a63e62199dffd538ea..c06d51200346d524a81e2d7a735db668da16c580 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -413,6 +413,7 @@ public class PurpurWorldConfig {
- public int playerCreativePortalWaitTime = 1;
+@@ -411,6 +411,7 @@ public class PurpurWorldConfig {
+ public boolean playerBurpWhenFull = false;
public boolean playerRidableInWater = false;
public boolean playerRemoveBindingWithWeakness = false;
+ public int shiftRightClickRepairsMendingPoints = 0;
private void playerSettings() {
if (PurpurConfig.version < 19) {
boolean oldVal = getBoolean("gameplay-mechanics.player.idle-timeout.mods-target", idleTimeoutTargetPlayer);
-@@ -439,6 +440,7 @@ public class PurpurWorldConfig {
- playerCreativePortalWaitTime = getInt("gameplay-mechanics.player.creative-portal-wait-time", playerCreativePortalWaitTime);
+@@ -435,6 +436,7 @@ public class PurpurWorldConfig {
+ playerBurpWhenFull = getBoolean("gameplay-mechanics.player.burp-when-full", playerBurpWhenFull);
playerRidableInWater = getBoolean("gameplay-mechanics.player.ridable-in-water", playerRidableInWater);
playerRemoveBindingWithWeakness = getBoolean("gameplay-mechanics.player.curse-of-binding.remove-with-weakness", playerRemoveBindingWithWeakness);
+ shiftRightClickRepairsMendingPoints = getInt("gameplay-mechanics.player.shift-right-click-repairs-mending-points", shiftRightClickRepairsMendingPoints);
diff --git a/patches/server/0214-Dolphins-naturally-aggressive-to-players-chance.patch b/patches/server/0211-Dolphins-naturally-aggressive-to-players-chance.patch
similarity index 91%
rename from patches/server/0214-Dolphins-naturally-aggressive-to-players-chance.patch
rename to patches/server/0211-Dolphins-naturally-aggressive-to-players-chance.patch
index ec76f54a5..f07fdbbe2 100644
--- a/patches/server/0214-Dolphins-naturally-aggressive-to-players-chance.patch
+++ b/patches/server/0211-Dolphins-naturally-aggressive-to-players-chance.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Dolphins naturally aggressive to players chance
diff --git a/src/main/java/net/minecraft/world/entity/animal/Dolphin.java b/src/main/java/net/minecraft/world/entity/animal/Dolphin.java
-index 77746eeffdc612793a6c907f222753bce5cd0ed4..b6342637f1b42b6368dcda17eea4b39a22ec3b79 100644
+index 75585a6b275fafbc5ef112d9de4926b77fcb3781..0453ba99a640855c6e13cb1e1d82929842f240ea 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Dolphin.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Dolphin.java
@@ -82,6 +82,7 @@ public class Dolphin extends WaterAnimal {
@@ -24,7 +24,7 @@ index 77746eeffdc612793a6c907f222753bce5cd0ed4..b6342637f1b42b6368dcda17eea4b39a
return super.finalizeSpawn(world, difficulty, spawnReason, entityData, entityNbt);
}
-@@ -242,6 +244,7 @@ public class Dolphin extends WaterAnimal {
+@@ -237,6 +239,7 @@ public class Dolphin extends WaterAnimal {
protected void registerGoals() {
this.goalSelector.addGoal(0, new BreathAirGoal(this));
this.goalSelector.addGoal(0, new TryFindWaterGoal(this));
@@ -32,7 +32,7 @@ index 77746eeffdc612793a6c907f222753bce5cd0ed4..b6342637f1b42b6368dcda17eea4b39a
this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur
this.goalSelector.addGoal(1, new Dolphin.DolphinSwimToTreasureGoal(this));
this.goalSelector.addGoal(2, new Dolphin.DolphinSwimWithPlayerGoal(this, 4.0D));
-@@ -249,12 +252,13 @@ public class Dolphin extends WaterAnimal {
+@@ -244,12 +247,13 @@ public class Dolphin extends WaterAnimal {
this.goalSelector.addGoal(4, new RandomLookAroundGoal(this));
this.goalSelector.addGoal(5, new LookAtPlayerGoal(this, Player.class, 6.0F));
this.goalSelector.addGoal(5, new DolphinJumpGoal(this, 10));
@@ -48,10 +48,10 @@ index 77746eeffdc612793a6c907f222753bce5cd0ed4..b6342637f1b42b6368dcda17eea4b39a
public static AttributeSupplier.Builder createAttributes() {
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 8e658c5e81b85fa4fa36b9e18a02bd0634e42554..c146356aa04126f2cd74aabf50c1436fa111aa6a 100644
+index c06d51200346d524a81e2d7a735db668da16c580..30761aaa2afe239f9233d5afee0252f53cf07086 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -1277,6 +1277,7 @@ public class PurpurWorldConfig {
+@@ -1268,6 +1268,7 @@ public class PurpurWorldConfig {
public double dolphinMaxHealth = 10.0D;
public boolean dolphinDisableTreasureSearching = false;
public boolean dolphinTakeDamageFromWater = false;
@@ -59,7 +59,7 @@ index 8e658c5e81b85fa4fa36b9e18a02bd0634e42554..c146356aa04126f2cd74aabf50c1436f
private void dolphinSettings() {
dolphinRidable = getBoolean("mobs.dolphin.ridable", dolphinRidable);
dolphinControllable = getBoolean("mobs.dolphin.controllable", dolphinControllable);
-@@ -1291,6 +1292,7 @@ public class PurpurWorldConfig {
+@@ -1282,6 +1283,7 @@ public class PurpurWorldConfig {
dolphinMaxHealth = getDouble("mobs.dolphin.attributes.max_health", dolphinMaxHealth);
dolphinDisableTreasureSearching = getBoolean("mobs.dolphin.disable-treasure-searching", dolphinDisableTreasureSearching);
dolphinTakeDamageFromWater = getBoolean("mobs.dolphin.takes-damage-from-water", dolphinTakeDamageFromWater);
diff --git a/patches/server/0215-Cows-naturally-aggressive-to-players-chance.patch b/patches/server/0212-Cows-naturally-aggressive-to-players-chance.patch
similarity index 96%
rename from patches/server/0215-Cows-naturally-aggressive-to-players-chance.patch
rename to patches/server/0212-Cows-naturally-aggressive-to-players-chance.patch
index 054fdd923..b8d9187e6 100644
--- a/patches/server/0215-Cows-naturally-aggressive-to-players-chance.patch
+++ b/patches/server/0212-Cows-naturally-aggressive-to-players-chance.patch
@@ -57,10 +57,10 @@ index f76b0d92150fd985a8fc699f6f884527d589dfd3..3c12e179861b5514e081d0db1664f717
@Override
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index c146356aa04126f2cd74aabf50c1436fa111aa6a..e752c2050b696a0f1db12c5301fbe940488d87d1 100644
+index 30761aaa2afe239f9233d5afee0252f53cf07086..3c4b6fed063a7ffcdf8f982e42c4599a129fb406 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -1226,7 +1226,14 @@ public class PurpurWorldConfig {
+@@ -1217,7 +1217,14 @@ public class PurpurWorldConfig {
public int cowFeedMushrooms = 0;
public int cowBreedingTicks = 6000;
public boolean cowTakeDamageFromWater = false;
@@ -75,7 +75,7 @@ index c146356aa04126f2cd74aabf50c1436fa111aa6a..e752c2050b696a0f1db12c5301fbe940
cowRidable = getBoolean("mobs.cow.ridable", cowRidable);
cowRidableInWater = getBoolean("mobs.cow.ridable-in-water", cowRidableInWater);
cowControllable = getBoolean("mobs.cow.controllable", cowControllable);
-@@ -1239,6 +1246,8 @@ public class PurpurWorldConfig {
+@@ -1230,6 +1237,8 @@ public class PurpurWorldConfig {
cowFeedMushrooms = getInt("mobs.cow.feed-mushrooms-for-mooshroom", cowFeedMushrooms);
cowBreedingTicks = getInt("mobs.cow.breeding-delay-ticks", cowBreedingTicks);
cowTakeDamageFromWater = getBoolean("mobs.cow.takes-damage-from-water", cowTakeDamageFromWater);
diff --git a/patches/server/0216-Option-for-beds-to-explode-on-villager-sleep.patch b/patches/server/0213-Option-for-beds-to-explode-on-villager-sleep.patch
similarity index 86%
rename from patches/server/0216-Option-for-beds-to-explode-on-villager-sleep.patch
rename to patches/server/0213-Option-for-beds-to-explode-on-villager-sleep.patch
index cb62f99ce..d8d351f8d 100644
--- a/patches/server/0216-Option-for-beds-to-explode-on-villager-sleep.patch
+++ b/patches/server/0213-Option-for-beds-to-explode-on-villager-sleep.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Option for beds to explode on villager sleep
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 28d940393f387387fa0a2b0dea8de24324e2e55e..6146f3e52eb1d8f47b5a41eff634d2c7cc24c26f 100644
+index 29916aa09d867ef3fa4dc8248b174bf8f97853b7..f78c41833169264fabc76d13bb4b9a89169aa0fe 100644
--- a/src/main/java/net/minecraft/world/entity/npc/Villager.java
+++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java
-@@ -1110,6 +1110,12 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
+@@ -1108,6 +1108,12 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
@Override
public void startSleeping(BlockPos pos) {
@@ -22,10 +22,10 @@ index 28d940393f387387fa0a2b0dea8de24324e2e55e..6146f3e52eb1d8f47b5a41eff634d2c7
this.brain.setMemory(MemoryModuleType.LAST_SLEPT, this.level().getGameTime()); // CraftBukkit - decompile error
this.brain.eraseMemory(MemoryModuleType.WALK_TARGET);
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index e752c2050b696a0f1db12c5301fbe940488d87d1..dae834b637164fabea2b17d2d752a04df31ee88a 100644
+index 3c4b6fed063a7ffcdf8f982e42c4599a129fb406..db9cb3292814b188abac8b1b9fdce1e5d7c4620a 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -754,6 +754,7 @@ public class PurpurWorldConfig {
+@@ -750,6 +750,7 @@ public class PurpurWorldConfig {
}
public boolean bedExplode = true;
@@ -33,7 +33,7 @@ index e752c2050b696a0f1db12c5301fbe940488d87d1..dae834b637164fabea2b17d2d752a04d
public double bedExplosionPower = 5.0D;
public boolean bedExplosionFire = true;
public net.minecraft.world.level.Level.ExplosionInteraction bedExplosionEffect = net.minecraft.world.level.Level.ExplosionInteraction.BLOCK;
-@@ -764,6 +765,7 @@ public class PurpurWorldConfig {
+@@ -760,6 +761,7 @@ public class PurpurWorldConfig {
}
}
bedExplode = getBoolean("blocks.bed.explode", bedExplode);
diff --git a/patches/server/0217-Halloween-options-and-optimizations.patch b/patches/server/0214-Halloween-options-and-optimizations.patch
similarity index 87%
rename from patches/server/0217-Halloween-options-and-optimizations.patch
rename to patches/server/0214-Halloween-options-and-optimizations.patch
index 4df7eb178..b8c741a19 100644
--- a/patches/server/0217-Halloween-options-and-optimizations.patch
+++ b/patches/server/0214-Halloween-options-and-optimizations.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Halloween options and optimizations
diff --git a/src/main/java/net/minecraft/world/entity/ambient/Bat.java b/src/main/java/net/minecraft/world/entity/ambient/Bat.java
-index c3d1d77a5703db4e1e3eb38fdd0b8903f691bf25..c103c3da165ec4a9717400fdf278de2a667edd2a 100644
+index 0ed3d4f4cb9e2d11391c39633267becfd457102d..7d540fce81885776b417d6348dfffb6eb515beb5 100644
--- a/src/main/java/net/minecraft/world/entity/ambient/Bat.java
+++ b/src/main/java/net/minecraft/world/entity/ambient/Bat.java
-@@ -300,7 +300,7 @@ public class Bat extends AmbientCreature {
+@@ -304,7 +304,7 @@ public class Bat extends AmbientCreature {
int i = world.getMaxLocalRawBrightness(pos);
byte b0 = 4;
@@ -18,13 +18,13 @@ index c3d1d77a5703db4e1e3eb38fdd0b8903f691bf25..c103c3da165ec4a9717400fdf278de2a
} else if (random.nextBoolean()) {
return false;
@@ -314,6 +314,7 @@ public class Bat extends AmbientCreature {
- private static boolean isSpookySeason = false;
- private static final int ONE_HOUR = 20 * 60 * 60;
- private static int lastSpookyCheck = -ONE_HOUR;
+ }
+ }
+
+ public static boolean isHalloweenSeason(Level level) { return level.purpurConfig.forceHalloweenSeason || isHalloween(); } // Purpur
private static boolean isHalloween() {
- if (net.minecraft.server.MinecraftServer.currentTick - lastSpookyCheck > ONE_HOUR) {
LocalDate localdate = LocalDate.now();
+ int i = localdate.get(ChronoField.DAY_OF_MONTH);
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 f35637a105d5aa12fb57c2456f2b2a7db12a49f0..f3e1fa62d9f067c0fe8aacb88bf30b01ee0562c1 100644
--- a/src/main/java/net/minecraft/world/entity/monster/AbstractSkeleton.java
@@ -43,7 +43,7 @@ index f35637a105d5aa12fb57c2456f2b2a7db12a49f0..f3e1fa62d9f067c0fe8aacb88bf30b01
this.armorDropChances[EquipmentSlot.HEAD.getIndex()] = 0.0F;
}
diff --git a/src/main/java/net/minecraft/world/entity/monster/Zombie.java b/src/main/java/net/minecraft/world/entity/monster/Zombie.java
-index 15baaf9c358019b1ce2152086e8d16591eec7dbb..79f791188a14a319a19b55674c891384fcb750c9 100644
+index 9b1ae2fa1681f1212b6a09d5b10b16634ce65470..728f4f2d7c37e253b0dab752f627a7b6c4e8339c 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Zombie.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Zombie.java
@@ -586,11 +586,7 @@ public class Zombie extends Monster {
@@ -60,10 +60,10 @@ index 15baaf9c358019b1ce2152086e8d16591eec7dbb..79f791188a14a319a19b55674c891384
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 dae834b637164fabea2b17d2d752a04df31ee88a..9f3fe0265904da5a4be55fd3bc0ed1d283d241a9 100644
+index db9cb3292814b188abac8b1b9fdce1e5d7c4620a..9c2fc6c8d044c1f064010d856fac1b55626d96cb 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -1619,6 +1619,13 @@ public class PurpurWorldConfig {
+@@ -1610,6 +1610,13 @@ public class PurpurWorldConfig {
guardianTakeDamageFromWater = getBoolean("mobs.guardian.takes-damage-from-water", guardianTakeDamageFromWater);
}
diff --git a/patches/server/0218-Config-for-grindstones.patch b/patches/server/0215-Config-for-grindstones.patch
similarity index 98%
rename from patches/server/0218-Config-for-grindstones.patch
rename to patches/server/0215-Config-for-grindstones.patch
index 65da4266d..39bb5e3d8 100644
--- a/patches/server/0218-Config-for-grindstones.patch
+++ b/patches/server/0215-Config-for-grindstones.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Config for grindstones
diff --git a/src/main/java/net/minecraft/world/inventory/GrindstoneMenu.java b/src/main/java/net/minecraft/world/inventory/GrindstoneMenu.java
-index a21eadcdfbdc4be803c5793bc97996db3e706071..132a07e226ae3ac6b5abc6f53c62345e2ab2f31f 100644
+index 076c2b2938c9b88b7e71dbc2aa9d8c7e90d4fe75..c79e87fde9de55dbfe8c3deaf725e2a73dc2af38 100644
--- a/src/main/java/net/minecraft/world/inventory/GrindstoneMenu.java
+++ b/src/main/java/net/minecraft/world/inventory/GrindstoneMenu.java
@@ -130,7 +130,7 @@ public class GrindstoneMenu extends AbstractContainerMenu {
diff --git a/patches/server/0219-UPnP-Port-Forwarding.patch b/patches/server/0216-UPnP-Port-Forwarding.patch
similarity index 91%
rename from patches/server/0219-UPnP-Port-Forwarding.patch
rename to patches/server/0216-UPnP-Port-Forwarding.patch
index a6ed332a2..4d3b7849d 100644
--- a/patches/server/0219-UPnP-Port-Forwarding.patch
+++ b/patches/server/0216-UPnP-Port-Forwarding.patch
@@ -5,10 +5,10 @@ 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 615de0c4baf7797d03c43e5e164b198ebb70b341..ef25e6f4a36e98279061a8f066b37be956b92d49 100644
+index b2690db071a9ae26218406de09e37150a9d3eb66..bd89b6f3570998a6e9c9bb5cdf3b22e052269d89 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
-@@ -303,6 +303,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop CODEC = simpleCodec(Block::new);
+@@ -320,7 +327,7 @@ public class Block extends BlockBehaviour implements ItemLike {
public static void dropResources(BlockState state, LevelAccessor world, BlockPos pos, @Nullable BlockEntity blockEntity) {
if (world instanceof ServerLevel) {
Block.getDrops(state, (ServerLevel) world, pos, blockEntity).forEach((itemstack) -> {
@@ -63,7 +63,7 @@ index f65b54919d19d2ddc7261cc36853babbaef3c822..cee9e07a250ed61570cf9787236308f9
});
state.spawnAfterBreak((ServerLevel) world, pos, ItemStack.EMPTY, true);
}
-@@ -329,7 +336,7 @@ public class Block extends BlockBehaviour implements ItemLike {
+@@ -336,7 +343,7 @@ public class Block extends BlockBehaviour implements ItemLike {
io.papermc.paper.event.block.BlockBreakBlockEvent event = new io.papermc.paper.event.block.BlockBreakBlockEvent(org.bukkit.craftbukkit.block.CraftBlock.at(world, pos), org.bukkit.craftbukkit.block.CraftBlock.at(world, source), items);
event.callEvent();
for (var drop : event.getDrops()) {
@@ -72,7 +72,7 @@ index f65b54919d19d2ddc7261cc36853babbaef3c822..cee9e07a250ed61570cf9787236308f9
}
state.spawnAfterBreak(world.getMinecraftWorld(), pos, ItemStack.EMPTY, true);
}
-@@ -340,13 +347,53 @@ public class Block extends BlockBehaviour implements ItemLike {
+@@ -347,13 +354,53 @@ public class Block extends BlockBehaviour implements ItemLike {
public static void dropResources(BlockState state, Level world, BlockPos pos, @Nullable BlockEntity blockEntity, @Nullable Entity entity, ItemStack tool) {
if (world instanceof ServerLevel) {
Block.getDrops(state, (ServerLevel) world, pos, blockEntity, entity, tool).forEach((itemstack1) -> {
@@ -195,7 +195,7 @@ index 370a25d2deb54f10a35ee24d9e7e92fbfde60edf..2f19f6ac5de454845f5d13a3ebb93af6
+ // Purpur end
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 48b21a71c25974668600cee9437cc8214f47b906..df79037cb06d06d716d0615ec89792ec30e5c18c 100644
+index 061e619a0c9a60a57faf1fe53a2533d73912e927..d2129e850a60b6606a1444f16e40e5baea449c93 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -130,6 +130,7 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0224-Signs-allow-color-codes.patch b/patches/server/0221-Signs-allow-color-codes.patch
similarity index 90%
rename from patches/server/0224-Signs-allow-color-codes.patch
rename to patches/server/0221-Signs-allow-color-codes.patch
index 27aba3cdc..b6bc6dcf4 100644
--- a/patches/server/0224-Signs-allow-color-codes.patch
+++ b/patches/server/0221-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 1cca542c33510a01fb59631e68b1aa212d8230a5..e91f5203478623a6b50ad28236e265bd599ce999 100644
+index 074e718e4081d3e37f774613e6929224f28a3e26..1093ef4e97d3bc84802d4fc96a6f95a5a24624b9 100644
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
-@@ -1576,6 +1576,7 @@ public class ServerPlayer extends Player {
+@@ -1588,6 +1588,7 @@ public class ServerPlayer extends Player {
@Override
public void openTextEdit(SignBlockEntity sign, boolean front) {
@@ -17,10 +17,10 @@ index 1cca542c33510a01fb59631e68b1aa212d8230a5..e91f5203478623a6b50ad28236e265bd
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 38cde466714e5663cd416b6afd5d2558e139ec09..2d625f18f2ba42ee5a1ebeea78ca395ad6f88b37 100644
+index bc01970c5ef9cde4a75394d6977837e924a38463..642e81d7ce763e3f983c83c967f7204164d260be 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
-@@ -202,16 +202,31 @@ public class SignBlockEntity extends BlockEntity implements CommandSource { // C
+@@ -200,16 +200,31 @@ public class SignBlockEntity extends BlockEntity implements CommandSource { // C
return this.setText((SignText) textChanger.apply(signtext), front);
}
@@ -54,7 +54,7 @@ index 38cde466714e5663cd416b6afd5d2558e139ec09..2d625f18f2ba42ee5a1ebeea78ca395a
}
}
-@@ -351,6 +366,28 @@ public class SignBlockEntity extends BlockEntity implements CommandSource { // C
+@@ -349,6 +364,28 @@ public class SignBlockEntity extends BlockEntity implements CommandSource { // C
return ClientboundBlockEntityDataPacket.create(this);
}
@@ -84,11 +84,11 @@ index 38cde466714e5663cd416b6afd5d2558e139ec09..2d625f18f2ba42ee5a1ebeea78ca395a
public CompoundTag getUpdateTag() {
return this.saveWithoutMetadata();
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index df79037cb06d06d716d0615ec89792ec30e5c18c..504225c5b6085ca25a816d4a6259de36ed68941c 100644
+index d2129e850a60b6606a1444f16e40e5baea449c93..db741a6bdcba63c6f716c6093d3ddbc8e2533587 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -977,6 +977,11 @@ public class PurpurWorldConfig {
- shulkerBoxAllowOversizedStacks = getBoolean("blocks.shulker_box.allow-oversized-stacks", shulkerBoxAllowOversizedStacks);
+@@ -968,6 +968,11 @@ public class PurpurWorldConfig {
+ fixSandDuping = getBoolean("blocks.sand.fix-duping", fixSandDuping);
}
+ public boolean signAllowColors = false;
diff --git a/patches/server/0225-Kelp-cave-weeping-and-twisting-vines-configurable-ma.patch b/patches/server/0222-Kelp-cave-weeping-and-twisting-vines-configurable-ma.patch
similarity index 89%
rename from patches/server/0225-Kelp-cave-weeping-and-twisting-vines-configurable-ma.patch
rename to patches/server/0222-Kelp-cave-weeping-and-twisting-vines-configurable-ma.patch
index 4873329c8..8b6096bae 100644
--- a/patches/server/0225-Kelp-cave-weeping-and-twisting-vines-configurable-ma.patch
+++ b/patches/server/0222-Kelp-cave-weeping-and-twisting-vines-configurable-ma.patch
@@ -6,10 +6,10 @@ 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 ead7b37122c76d43af2cdd17af7f0da8014efb26..1acc2dcda68ec8e462d51927f2ea985e7952a830 100644
+index 54916c80720f219bf747250a2ff9a875f180c7a2..cae6d33728a39de9db908e1e24fdc3ad987d0542 100644
--- a/src/main/java/net/minecraft/world/level/block/CaveVinesBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/CaveVinesBlock.java
-@@ -88,4 +88,11 @@ public class CaveVinesBlock extends GrowingPlantHeadBlock implements Bonemealabl
+@@ -94,4 +94,11 @@ public class CaveVinesBlock extends GrowingPlantHeadBlock implements Bonemealabl
public void performBonemeal(ServerLevel world, RandomSource random, BlockPos pos, BlockState state) {
world.setBlock(pos, state.setValue(BERRIES, Boolean.valueOf(true)), 2);
}
@@ -22,10 +22,10 @@ index ead7b37122c76d43af2cdd17af7f0da8014efb26..1acc2dcda68ec8e462d51927f2ea985e
+ // Purpur end
}
diff --git a/src/main/java/net/minecraft/world/level/block/GrowingPlantHeadBlock.java b/src/main/java/net/minecraft/world/level/block/GrowingPlantHeadBlock.java
-index b325fdec8eb99ce57152a5c0fefa5059685276e4..c93e60b01dd46e7de6a6b5a5149a522304f28178 100644
+index 4ebdc4918131a15a1c91b45e8ceb1392bca20a81..2537f99baca6213618865d60f84e96b8a4849307 100644
--- a/src/main/java/net/minecraft/world/level/block/GrowingPlantHeadBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/GrowingPlantHeadBlock.java
-@@ -30,12 +30,12 @@ public abstract class GrowingPlantHeadBlock extends GrowingPlantBlock implements
+@@ -34,12 +34,12 @@ public abstract class GrowingPlantHeadBlock extends GrowingPlantBlock implements
@Override
public BlockState getStateForPlacement(LevelAccessor world) {
@@ -40,7 +40,7 @@ index b325fdec8eb99ce57152a5c0fefa5059685276e4..c93e60b01dd46e7de6a6b5a5149a5223
}
@Override
-@@ -51,7 +51,7 @@ public abstract class GrowingPlantHeadBlock extends GrowingPlantBlock implements
+@@ -55,7 +55,7 @@ public abstract class GrowingPlantHeadBlock extends GrowingPlantBlock implements
} else {
modifier = world.spigotConfig.caveVinesModifier;
}
@@ -49,7 +49,7 @@ index b325fdec8eb99ce57152a5c0fefa5059685276e4..c93e60b01dd46e7de6a6b5a5149a5223
// Spigot end
BlockPos blockposition1 = pos.relative(this.growthDirection);
-@@ -73,11 +73,11 @@ public abstract class GrowingPlantHeadBlock extends GrowingPlantBlock implements
+@@ -77,11 +77,11 @@ public abstract class GrowingPlantHeadBlock extends GrowingPlantBlock implements
}
public BlockState getMaxAgeState(BlockState state) {
@@ -63,7 +63,7 @@ index b325fdec8eb99ce57152a5c0fefa5059685276e4..c93e60b01dd46e7de6a6b5a5149a5223
}
protected BlockState updateBodyAfterConvertedFromHead(BlockState from, BlockState to) {
-@@ -119,13 +119,13 @@ public abstract class GrowingPlantHeadBlock extends GrowingPlantBlock implements
+@@ -123,13 +123,13 @@ public abstract class GrowingPlantHeadBlock extends GrowingPlantBlock implements
@Override
public void performBonemeal(ServerLevel world, RandomSource random, BlockPos pos, BlockState state) {
BlockPos blockposition1 = pos.relative(this.growthDirection);
@@ -79,7 +79,7 @@ index b325fdec8eb99ce57152a5c0fefa5059685276e4..c93e60b01dd46e7de6a6b5a5149a5223
}
}
-@@ -138,4 +138,6 @@ public abstract class GrowingPlantHeadBlock extends GrowingPlantBlock implements
+@@ -142,4 +142,6 @@ public abstract class GrowingPlantHeadBlock extends GrowingPlantBlock implements
protected GrowingPlantHeadBlock getHeadBlock() {
return this;
}
@@ -87,10 +87,10 @@ index b325fdec8eb99ce57152a5c0fefa5059685276e4..c93e60b01dd46e7de6a6b5a5149a5223
+ public abstract int getMaxGrowthAge(); // Purpur
}
diff --git a/src/main/java/net/minecraft/world/level/block/KelpBlock.java b/src/main/java/net/minecraft/world/level/block/KelpBlock.java
-index ff30a93f4160e8e22b40c7a7033c14fa15839160..bf043e1b9f0ec5876a2fa2d0597ec3c60b32b2c0 100644
+index 4dbacee1930bc3955ce431e1d32353588b47afc9..a53c6ab63fd10ac94292836120152f54f23c1e13 100644
--- a/src/main/java/net/minecraft/world/level/block/KelpBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/KelpBlock.java
-@@ -65,4 +65,11 @@ public class KelpBlock extends GrowingPlantHeadBlock implements LiquidBlockConta
+@@ -72,4 +72,11 @@ public class KelpBlock extends GrowingPlantHeadBlock implements LiquidBlockConta
public FluidState getFluidState(BlockState state) {
return Fluids.WATER.getSource(false);
}
@@ -103,10 +103,10 @@ index ff30a93f4160e8e22b40c7a7033c14fa15839160..bf043e1b9f0ec5876a2fa2d0597ec3c6
+ // Purpur end
}
diff --git a/src/main/java/net/minecraft/world/level/block/TwistingVinesBlock.java b/src/main/java/net/minecraft/world/level/block/TwistingVinesBlock.java
-index 6866605c7ef5361b21130a19a59c3fa3660dfb19..dee5d76d29da13f8639ab5d392cd0143201e71ba 100644
+index b4f75d034fbaea8ca68c1b5c5715773e0b8a9036..d05939c4b2ae42a09ee9e97431e83babfc8ed76c 100644
--- a/src/main/java/net/minecraft/world/level/block/TwistingVinesBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/TwistingVinesBlock.java
-@@ -27,4 +27,11 @@ public class TwistingVinesBlock extends GrowingPlantHeadBlock {
+@@ -34,4 +34,11 @@ public class TwistingVinesBlock extends GrowingPlantHeadBlock {
protected boolean canGrowInto(BlockState state) {
return NetherVines.isValidGrowthState(state);
}
@@ -119,10 +119,10 @@ index 6866605c7ef5361b21130a19a59c3fa3660dfb19..dee5d76d29da13f8639ab5d392cd0143
+ // Purpur end
}
diff --git a/src/main/java/net/minecraft/world/level/block/WeepingVinesBlock.java b/src/main/java/net/minecraft/world/level/block/WeepingVinesBlock.java
-index e5c135ec059746b75fe58516809584221285cdbe..713c7e6e31a3e1097b612c77a4fce147c9252e0b 100644
+index 98e62d2cd3c106753c3be4a217e9107397d388ab..6a1fd51423c17cd1498cb313fa52314daaca0a29 100644
--- a/src/main/java/net/minecraft/world/level/block/WeepingVinesBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/WeepingVinesBlock.java
-@@ -27,4 +27,11 @@ public class WeepingVinesBlock extends GrowingPlantHeadBlock {
+@@ -34,4 +34,11 @@ public class WeepingVinesBlock extends GrowingPlantHeadBlock {
protected boolean canGrowInto(BlockState state) {
return NetherVines.isValidGrowthState(state);
}
diff --git a/patches/server/0226-Mobs-always-drop-experience.patch b/patches/server/0223-Mobs-always-drop-experience.patch
similarity index 91%
rename from patches/server/0226-Mobs-always-drop-experience.patch
rename to patches/server/0223-Mobs-always-drop-experience.patch
index 74bcf2133..e628a8a3d 100644
--- a/patches/server/0226-Mobs-always-drop-experience.patch
+++ b/patches/server/0223-Mobs-always-drop-experience.patch
@@ -21,10 +21,10 @@ index d04e48d6a0a6dc7825a3e3d4cf854e294a75d19c..b18cbe85330e26de6f6cbfcc3d51a741
protected ParticleOptions getInkParticle() {
return ParticleTypes.GLOW_SQUID_INK;
diff --git a/src/main/java/net/minecraft/world/entity/ambient/Bat.java b/src/main/java/net/minecraft/world/entity/ambient/Bat.java
-index c103c3da165ec4a9717400fdf278de2a667edd2a..1eab1393a2636c4a247f25dae317cea60cc7021c 100644
+index 7d540fce81885776b417d6348dfffb6eb515beb5..fc3393d1f5fa637d63c8f614bad3f25155d0342e 100644
--- a/src/main/java/net/minecraft/world/entity/ambient/Bat.java
+++ b/src/main/java/net/minecraft/world/entity/ambient/Bat.java
-@@ -281,6 +281,11 @@ public class Bat extends AmbientCreature {
+@@ -285,6 +285,11 @@ public class Bat extends AmbientCreature {
return this.level().purpurConfig.batTakeDamageFromWater;
}
@@ -37,10 +37,10 @@ index c103c3da165ec4a9717400fdf278de2a667edd2a..1eab1393a2636c4a247f25dae317cea6
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 d969a4bb3522faa5f88cae92fcd0bad375b7b0f2..1ddd4ad531e1c536bc3769dc84007d3a3c0350df 100644
+index a4c6ea94be1c1a610c6141328192a29052b9f157..6d7b8c9f9bfe296263f1752f485dcf8f53af8142 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Bee.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Bee.java
-@@ -486,6 +486,11 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal {
+@@ -493,6 +493,11 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal {
return this.level().purpurConfig.beeTakeDamageFromWater;
}
@@ -117,7 +117,7 @@ index 3c12e179861b5514e081d0db1664f7173955629c..6d00b3cd4a9cb0fc8a9e9c27f37429a2
protected void registerGoals() {
this.goalSelector.addGoal(0, new FloatGoal(this));
diff --git a/src/main/java/net/minecraft/world/entity/animal/Dolphin.java b/src/main/java/net/minecraft/world/entity/animal/Dolphin.java
-index 9a1e9a69adf97ab92d9df817716750b7da6e6742..1807c7bac6f5012da8130dd41edeb9dd4df32a47 100644
+index 0453ba99a640855c6e13cb1e1d82929842f240ea..ed2769d8049bb304c1ee3b8e162046855951a624 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Dolphin.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Dolphin.java
@@ -169,6 +169,11 @@ public class Dolphin extends WaterAnimal {
@@ -133,7 +133,7 @@ index 9a1e9a69adf97ab92d9df817716750b7da6e6742..1807c7bac6f5012da8130dd41edeb9dd
@Override
public SpawnGroupData finalizeSpawn(ServerLevelAccessor world, DifficultyInstance difficulty, MobSpawnType spawnReason, @Nullable SpawnGroupData entityData, @Nullable CompoundTag entityNbt) {
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 a1f13c54b7ded4b10fb4e6bd82a384d13446b62f..075554f28dab5809d0f2d346bad40efc16b38371 100644
+index c8efa4029136d0cd54a5f73f003e022511cc7c8b..77d40aad6e336cac7ee4e4adef159571181ba44a 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Fox.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Fox.java
@@ -198,6 +198,11 @@ public class Fox extends Animal implements VariantHolder {
@@ -165,7 +165,7 @@ index c2817324ff57860ea2628dc4ac8e78b76cf67a5a..64aba511e615983988cdb6a0fd45b7d9
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 6b635c997a8052f6ea9b6dc39bef70000edbd782..ab5b150b379598861666ad32906e1fe454437063 100644
+index 1e51eee2c4e425c7ac0152b55a1d1376a5a5708e..c49d25eae4b9d2cdd15022b32947a94364ea2791 100644
--- a/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java
+++ b/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java
@@ -95,6 +95,11 @@ public class MushroomCow extends Cow implements Shearable, VariantHolder getModelRotationValues() {
return this.modelRotationValues;
diff --git a/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java b/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java
-index 26062173d137e26abdc452f7b2e0be0ee6dddfa3..fba00cab2c4b234dd2e85b5f4dcd0db34183c1a2 100644
+index b41509e26808a025bc247fa209d3b9df10368013..5ac471fdc1acfd04a8cdf3e044949e48a6df208d 100644
--- a/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java
+++ b/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java
@@ -119,6 +119,11 @@ public class Goat extends Animal {
@@ -501,10 +501,10 @@ index 53546e904948d03882e5f5b0a8d4256c72698afb..42dcdbec69b052679e590a1ff932c619
protected SoundEvent getAmbientSound() {
return SoundEvents.MULE_AMBIENT;
diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/SkeletonHorse.java b/src/main/java/net/minecraft/world/entity/animal/horse/SkeletonHorse.java
-index 1a988e2abb7c5f7dafa325f2a9d92a99be06681f..6e3af90f4cb4f7722bd1601a515fd9a377459d1b 100644
+index 688c87743446bdf5a9e2b830b8a47655d80f3284..64f0f486e29e0b63b024dd5c06738e12d0fb5b9a 100644
--- a/src/main/java/net/minecraft/world/entity/animal/horse/SkeletonHorse.java
+++ b/src/main/java/net/minecraft/world/entity/animal/horse/SkeletonHorse.java
-@@ -63,6 +63,11 @@ public class SkeletonHorse extends AbstractHorse {
+@@ -67,6 +67,11 @@ public class SkeletonHorse extends AbstractHorse {
return this.level().purpurConfig.skeletonHorseTakeDamageFromWater;
}
@@ -533,10 +533,10 @@ index 17648925f97110f2439890388f4bfbbff0917c61..02e3adc9a55fa9cd2a418094eb206970
public boolean isTraderLlama() {
return true;
diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/ZombieHorse.java b/src/main/java/net/minecraft/world/entity/animal/horse/ZombieHorse.java
-index 9dcc47b0680227d1ada06366ca2a334535d18425..9e4a1c3ea8ce9ef438f958498cce4b04ec70dba9 100644
+index dcc1d71c2eeea48669651165868899ba4a797d48..813501e8aac1c121569cb996b47f0293d99c7e36 100644
--- a/src/main/java/net/minecraft/world/entity/animal/horse/ZombieHorse.java
+++ b/src/main/java/net/minecraft/world/entity/animal/horse/ZombieHorse.java
-@@ -59,6 +59,11 @@ public class ZombieHorse extends AbstractHorse {
+@@ -63,6 +63,11 @@ public class ZombieHorse extends AbstractHorse {
return this.level().purpurConfig.zombieHorseTakeDamageFromWater;
}
@@ -549,7 +549,7 @@ index 9dcc47b0680227d1ada06366ca2a334535d18425..9e4a1c3ea8ce9ef438f958498cce4b04
return createBaseHorseAttributes().add(Attributes.MAX_HEALTH, 15.0D).add(Attributes.MOVEMENT_SPEED, (double)0.2F);
}
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 5bf7a6ecd58612c8502ed747263b6c0edd445294..c94a1b75593ad01e7f79fdc84818ea8ec269e124 100644
+index 73c967330cc793acc029c17f037d985e6ba919de..8f8a3e03eec72cd48b10649778ec2f26016c419a 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
@@ -132,6 +132,11 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob
@@ -613,7 +613,7 @@ index a8bc27c858c6ddec2ff2f84b5c1dc51c3b1b04b0..304ea7fdcd410a7c88ec61143364e14d
protected SoundEvent getHurtSound(DamageSource source) {
return SoundEvents.CREEPER_HURT;
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 9346d634dd2b8cb3d89aa7ccf12fec6ff79bbe2f..63a1cf5604c14025171d7be7434e2d6b64c98107 100644
+index 6e6d7f68cf1c1c224b67a9d674fdcaa67ea00359..034bb2d1292dde6276885c3ea71d886c3894311c 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Drowned.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Drowned.java
@@ -116,6 +116,11 @@ public class Drowned extends Zombie implements RangedAttackMob {
@@ -645,7 +645,7 @@ index cd1f830bf28b1c68e2b9cc7daa77f696234a22c9..df8d1b34078031001c50325b8cf5bfa9
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 02998e2f3d912d47641e7c9199467b5301de1e4c..4c9ffa8e1ab97d8156ead0ed189c769ffd9b4aae 100644
+index 3583d0c01410987584a53bb6e717d5636e2c9f69..c0180f3d7ef4f22bf967b2acc3dde3925283415d 100644
--- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
+++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
@@ -120,6 +120,11 @@ public class EnderMan extends Monster implements NeutralMob {
@@ -677,10 +677,10 @@ index c0c3ab5dbf5987e543e6cdd1a814d2ec3ec17939..20ca96baf8f73fd5835422c6551f515a
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 1ef547285cfb8e74404e4108a1403c8fda43cb1f..4095f03ccd1712335baffe858603618100aed99c 100644
+index db3a49a979a9d84f29228ae975133c46216bfb75..daee6c4c0c2d43b65cdfd691bbbdc72465702dfe 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Evoker.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Evoker.java
-@@ -77,6 +77,11 @@ public class Evoker extends SpellcasterIllager {
+@@ -78,6 +78,11 @@ public class Evoker extends SpellcasterIllager {
return this.level().purpurConfig.evokerTakeDamageFromWater;
}
@@ -725,7 +725,7 @@ index ecaccb4697bf2acaa6dc9034486fcf97c184aa71..d13eed85d5399cd6991b3ad90f05a580
@Override
diff --git a/src/main/java/net/minecraft/world/entity/monster/Guardian.java b/src/main/java/net/minecraft/world/entity/monster/Guardian.java
-index 93cd1129003b360ca40ad50fe849bd834a5f2a9b..54113957c9cfab2ad3be25dbc05b8c29d1a064d5 100644
+index c696ffd7f4454ca79933cef04bf2b89e2a65b8cf..01c558673f0bb5034bca9df0e473375e7b7e724e 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Guardian.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Guardian.java
@@ -104,6 +104,11 @@ public class Guardian extends Monster {
@@ -741,7 +741,7 @@ index 93cd1129003b360ca40ad50fe849bd834a5f2a9b..54113957c9cfab2ad3be25dbc05b8c29
protected void registerGoals() {
MoveTowardsRestrictionGoal pathfindergoalmovetowardsrestriction = new MoveTowardsRestrictionGoal(this, 1.0D);
diff --git a/src/main/java/net/minecraft/world/entity/monster/Husk.java b/src/main/java/net/minecraft/world/entity/monster/Husk.java
-index 481a6cf3dfc2948d80071920b905b488de8737e5..473f28e86a0e5157264b83d9c3c4a18c72216da3 100644
+index 5ac87650e357f3ac48e37713b9b0b18ad4d6feb6..06a5106a94a44c1d21537410d801cdd945503d69 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Husk.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Husk.java
@@ -72,6 +72,11 @@ public class Husk extends Zombie {
@@ -754,7 +754,7 @@ index 481a6cf3dfc2948d80071920b905b488de8737e5..473f28e86a0e5157264b83d9c3c4a18c
+ }
+
public static boolean checkHuskSpawnRules(EntityType type, ServerLevelAccessor world, MobSpawnType spawnReason, BlockPos pos, RandomSource random) {
- return checkMonsterSpawnRules(type, world, spawnReason, pos, random) && (spawnReason == MobSpawnType.SPAWNER || world.canSeeSky(pos));
+ return checkMonsterSpawnRules(type, world, spawnReason, pos, random) && (MobSpawnType.isSpawner(spawnReason) || world.canSeeSky(pos));
}
diff --git a/src/main/java/net/minecraft/world/entity/monster/Illusioner.java b/src/main/java/net/minecraft/world/entity/monster/Illusioner.java
index 91294d87521c884c402485b923691f9fd8985353..f9cddf46d1dbcabc738842ba039daa76bb6f3eb5 100644
@@ -837,7 +837,7 @@ index 5e717433ef29d02669ee2e95454c69c36cbafc24..c9c21c87e3bd1c404fbef6768761bcb5
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 40f4a53cf244549e9cf392f4286bdec1a6852574..81caa18fca658f70846ba437ac02906f5e9653b9 100644
+index 47abc81aa04774abeb97c912cd118bbab3b51e86..22669a188c1961783341b22551325e19aaeb8088 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Shulker.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Shulker.java
@@ -141,6 +141,11 @@ public class Shulker extends AbstractGolem implements VariantHolder brainProvider() {
return Brain.provider(MEMORY_TYPES, SENSOR_TYPES);
diff --git a/src/main/java/net/minecraft/world/entity/monster/Zombie.java b/src/main/java/net/minecraft/world/entity/monster/Zombie.java
-index c95d76c696d9ee39e284e7798bf624d339c98799..1be1bfb831198b68d8e20bf5ff922edff8832114 100644
+index 728f4f2d7c37e253b0dab752f627a7b6c4e8339c..f6dd5fd56926215830ccebbd46098d4bc08e17e4 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Zombie.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Zombie.java
@@ -147,6 +147,11 @@ public class Zombie extends Monster {
@@ -1077,7 +1077,7 @@ index 3574a1e641d8af34a0ff7ea8dcfb08641cf6ace0..df8c7a45eb49a8c667030eb67d6d49dc
public void setPersistentAngerTarget(@Nullable UUID angryAt) {
this.persistentAngerTarget = angryAt;
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 d0144c99cf5c755c81fc0f9457b462c98ff3e804..e326e753cc6bca1bd00287d16c9796b9f3dd4d14 100644
+index d1501c1048417defdf1766366b572f2c98989cc9..a3a21f0c102cadcbe5882de716e90272fddd7f8c 100644
--- a/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java
+++ b/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java
@@ -101,6 +101,11 @@ public class Hoglin extends Animal implements Enemy, HoglinBase {
@@ -1093,7 +1093,7 @@ index d0144c99cf5c755c81fc0f9457b462c98ff3e804..e326e753cc6bca1bd00287d16c9796b9
public boolean canBeLeashed(Player player) {
return !this.isLeashed();
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 e506dcf390ecb5cce8ae6993df7ec91b3ebc125e..9ca1618ab945ad834c5fc221ada49058f806e79c 100644
+index f9e03dc7178c76ea70e45f265d9b42f9d2fe960d..7612a361645018a4f81c374c523bb191e0ff40f0 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
@@ -123,6 +123,11 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento
@@ -1125,10 +1125,10 @@ index b63d87df0f48dd63c89118f91b31dc4e3622e3b8..61e8f2d030fc50840c3f80dfb6fc8107
return Monster.createMonsterAttributes().add(Attributes.MAX_HEALTH, 50.0D).add(Attributes.MOVEMENT_SPEED, (double)0.35F).add(Attributes.ATTACK_DAMAGE, 7.0D);
}
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 6146f3e52eb1d8f47b5a41eff634d2c7cc24c26f..093b10bec1212d47f05e1270302436290cbd282e 100644
+index f78c41833169264fabc76d13bb4b9a89169aa0fe..9eaa0908a9251a53e9d0434a6bf5105033b6fcd2 100644
--- a/src/main/java/net/minecraft/world/entity/npc/Villager.java
+++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java
-@@ -195,6 +195,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
+@@ -193,6 +193,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
return this.level().purpurConfig.villagerTakeDamageFromWater;
}
@@ -1157,10 +1157,10 @@ index d672c1e381e5c4a4b79a1dfb96f1410ec35cb1b5..08320248a6956d41d60681e3d29f8176
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 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637151f81b1 100644
+index db741a6bdcba63c6f716c6093d3ddbc8e2533587..788cbfb4fddbede2788604bdd8ce17971030e3a2 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -1044,12 +1044,14 @@ public class PurpurWorldConfig {
+@@ -1035,12 +1035,14 @@ public class PurpurWorldConfig {
public double axolotlMaxHealth = 14.0D;
public int axolotlBreedingTicks = 6000;
public boolean axolotlTakeDamageFromWater = false;
@@ -1175,7 +1175,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
}
public boolean batRidable = false;
-@@ -1065,6 +1067,7 @@ public class PurpurWorldConfig {
+@@ -1056,6 +1058,7 @@ public class PurpurWorldConfig {
public double batArmorToughness = 0.0D;
public double batAttackKnockback = 0.0D;
public boolean batTakeDamageFromWater = false;
@@ -1183,7 +1183,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
private void batSettings() {
batRidable = getBoolean("mobs.bat.ridable", batRidable);
batRidableInWater = getBoolean("mobs.bat.ridable-in-water", batRidableInWater);
-@@ -1084,6 +1087,7 @@ public class PurpurWorldConfig {
+@@ -1075,6 +1078,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);
@@ -1191,7 +1191,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
}
public boolean beeRidable = false;
-@@ -1095,6 +1099,7 @@ public class PurpurWorldConfig {
+@@ -1086,6 +1090,7 @@ public class PurpurWorldConfig {
public boolean beeTakeDamageFromWater = false;
public boolean beeCanWorkAtNight = false;
public boolean beeCanWorkInRain = false;
@@ -1199,7 +1199,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
private void beeSettings() {
beeRidable = getBoolean("mobs.bee.ridable", beeRidable);
beeRidableInWater = getBoolean("mobs.bee.ridable-in-water", beeRidableInWater);
-@@ -1110,6 +1115,7 @@ public class PurpurWorldConfig {
+@@ -1101,6 +1106,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);
@@ -1207,7 +1207,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
}
public boolean blazeRidable = false;
-@@ -1118,6 +1124,7 @@ public class PurpurWorldConfig {
+@@ -1109,6 +1115,7 @@ public class PurpurWorldConfig {
public double blazeMaxY = 320D;
public double blazeMaxHealth = 20.0D;
public boolean blazeTakeDamageFromWater = true;
@@ -1215,7 +1215,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
private void blazeSettings() {
blazeRidable = getBoolean("mobs.blaze.ridable", blazeRidable);
blazeRidableInWater = getBoolean("mobs.blaze.ridable-in-water", blazeRidableInWater);
-@@ -1130,6 +1137,7 @@ public class PurpurWorldConfig {
+@@ -1121,6 +1128,7 @@ public class PurpurWorldConfig {
}
blazeMaxHealth = getDouble("mobs.blaze.attributes.max_health", blazeMaxHealth);
blazeTakeDamageFromWater = getBoolean("mobs.blaze.takes-damage-from-water", blazeTakeDamageFromWater);
@@ -1223,7 +1223,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
}
public boolean camelRidableInWater = false;
-@@ -1161,6 +1169,7 @@ public class PurpurWorldConfig {
+@@ -1152,6 +1160,7 @@ public class PurpurWorldConfig {
public int catBreedingTicks = 6000;
public DyeColor catDefaultCollarColor = DyeColor.RED;
public boolean catTakeDamageFromWater = false;
@@ -1231,7 +1231,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
private void catSettings() {
catRidable = getBoolean("mobs.cat.ridable", catRidable);
catRidableInWater = getBoolean("mobs.cat.ridable-in-water", catRidableInWater);
-@@ -1181,6 +1190,7 @@ public class PurpurWorldConfig {
+@@ -1172,6 +1181,7 @@ public class PurpurWorldConfig {
catDefaultCollarColor = DyeColor.RED;
}
catTakeDamageFromWater = getBoolean("mobs.cat.takes-damage-from-water", catTakeDamageFromWater);
@@ -1239,7 +1239,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
}
public boolean caveSpiderRidable = false;
-@@ -1188,6 +1198,7 @@ public class PurpurWorldConfig {
+@@ -1179,6 +1189,7 @@ public class PurpurWorldConfig {
public boolean caveSpiderControllable = true;
public double caveSpiderMaxHealth = 12.0D;
public boolean caveSpiderTakeDamageFromWater = false;
@@ -1247,7 +1247,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
private void caveSpiderSettings() {
caveSpiderRidable = getBoolean("mobs.cave_spider.ridable", caveSpiderRidable);
caveSpiderRidableInWater = getBoolean("mobs.cave_spider.ridable-in-water", caveSpiderRidableInWater);
-@@ -1199,6 +1210,7 @@ public class PurpurWorldConfig {
+@@ -1190,6 +1201,7 @@ public class PurpurWorldConfig {
}
caveSpiderMaxHealth = getDouble("mobs.cave_spider.attributes.max_health", caveSpiderMaxHealth);
caveSpiderTakeDamageFromWater = getBoolean("mobs.cave_spider.takes-damage-from-water", caveSpiderTakeDamageFromWater);
@@ -1255,7 +1255,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
}
public boolean chickenRidable = false;
-@@ -1208,6 +1220,7 @@ public class PurpurWorldConfig {
+@@ -1199,6 +1211,7 @@ public class PurpurWorldConfig {
public boolean chickenRetaliate = false;
public int chickenBreedingTicks = 6000;
public boolean chickenTakeDamageFromWater = false;
@@ -1263,7 +1263,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
private void chickenSettings() {
chickenRidable = getBoolean("mobs.chicken.ridable", chickenRidable);
chickenRidableInWater = getBoolean("mobs.chicken.ridable-in-water", chickenRidableInWater);
-@@ -1221,12 +1234,14 @@ public class PurpurWorldConfig {
+@@ -1212,12 +1225,14 @@ 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);
@@ -1278,7 +1278,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
private void codSettings() {
codRidable = getBoolean("mobs.cod.ridable", codRidable);
codControllable = getBoolean("mobs.cod.controllable", codControllable);
-@@ -1237,6 +1252,7 @@ public class PurpurWorldConfig {
+@@ -1228,6 +1243,7 @@ public class PurpurWorldConfig {
}
codMaxHealth = getDouble("mobs.cod.attributes.max_health", codMaxHealth);
codTakeDamageFromWater = getBoolean("mobs.cod.takes-damage-from-water", codTakeDamageFromWater);
@@ -1286,7 +1286,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
}
public boolean cowRidable = false;
-@@ -1248,6 +1264,7 @@ public class PurpurWorldConfig {
+@@ -1239,6 +1255,7 @@ public class PurpurWorldConfig {
public boolean cowTakeDamageFromWater = false;
public double cowNaturallyAggressiveToPlayersChance = 0.0D;
public double cowNaturallyAggressiveToPlayersDamage = 2.0D;
@@ -1294,7 +1294,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
private void cowSettings() {
if (PurpurConfig.version < 22) {
double oldValue = getDouble("mobs.cow.naturally-aggressive-to-players-chance", cowNaturallyAggressiveToPlayersChance);
-@@ -1268,6 +1285,7 @@ public class PurpurWorldConfig {
+@@ -1259,6 +1276,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);
@@ -1302,7 +1302,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
}
public boolean creeperRidable = false;
-@@ -1280,6 +1298,7 @@ public class PurpurWorldConfig {
+@@ -1271,6 +1289,7 @@ public class PurpurWorldConfig {
public boolean creeperTakeDamageFromWater = false;
public boolean creeperExplodeWhenKilled = false;
public boolean creeperHealthRadius = false;
@@ -1310,7 +1310,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
private void creeperSettings() {
creeperRidable = getBoolean("mobs.creeper.ridable", creeperRidable);
creeperRidableInWater = getBoolean("mobs.creeper.ridable-in-water", creeperRidableInWater);
-@@ -1296,6 +1315,7 @@ public class PurpurWorldConfig {
+@@ -1287,6 +1306,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);
@@ -1318,7 +1318,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
}
public boolean dolphinRidable = false;
-@@ -1307,6 +1327,7 @@ public class PurpurWorldConfig {
+@@ -1298,6 +1318,7 @@ public class PurpurWorldConfig {
public boolean dolphinDisableTreasureSearching = false;
public boolean dolphinTakeDamageFromWater = false;
public double dolphinNaturallyAggressiveToPlayersChance = 0.0D;
@@ -1326,7 +1326,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
private void dolphinSettings() {
dolphinRidable = getBoolean("mobs.dolphin.ridable", dolphinRidable);
dolphinControllable = getBoolean("mobs.dolphin.controllable", dolphinControllable);
-@@ -1322,6 +1343,7 @@ public class PurpurWorldConfig {
+@@ -1313,6 +1334,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);
@@ -1334,7 +1334,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
}
public boolean donkeyRidableInWater = false;
-@@ -1333,6 +1355,7 @@ public class PurpurWorldConfig {
+@@ -1324,6 +1346,7 @@ public class PurpurWorldConfig {
public double donkeyMovementSpeedMax = 0.175D;
public int donkeyBreedingTicks = 6000;
public boolean donkeyTakeDamageFromWater = false;
@@ -1342,7 +1342,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
private void donkeySettings() {
donkeyRidableInWater = getBoolean("mobs.donkey.ridable-in-water", donkeyRidableInWater);
if (PurpurConfig.version < 10) {
-@@ -1350,6 +1373,7 @@ public class PurpurWorldConfig {
+@@ -1341,6 +1364,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);
@@ -1350,7 +1350,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
}
public boolean drownedRidable = false;
-@@ -1362,6 +1386,7 @@ public class PurpurWorldConfig {
+@@ -1353,6 +1377,7 @@ public class PurpurWorldConfig {
public boolean drownedJockeyTryExistingChickens = true;
public boolean drownedTakeDamageFromWater = false;
public boolean drownedBreakDoors = false;
@@ -1358,7 +1358,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
private void drownedSettings() {
drownedRidable = getBoolean("mobs.drowned.ridable", drownedRidable);
drownedRidableInWater = getBoolean("mobs.drowned.ridable-in-water", drownedRidableInWater);
-@@ -1378,12 +1403,14 @@ public class PurpurWorldConfig {
+@@ -1369,12 +1394,14 @@ 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);
@@ -1373,7 +1373,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
private void elderGuardianSettings() {
elderGuardianRidable = getBoolean("mobs.elder_guardian.ridable", elderGuardianRidable);
elderGuardianControllable = getBoolean("mobs.elder_guardian.controllable", elderGuardianControllable);
-@@ -1394,6 +1421,7 @@ public class PurpurWorldConfig {
+@@ -1385,6 +1412,7 @@ public class PurpurWorldConfig {
}
elderGuardianMaxHealth = getDouble("mobs.elder_guardian.attributes.max_health", elderGuardianMaxHealth);
elderGuardianTakeDamageFromWater = getBoolean("mobs.elder_guardian.takes-damage-from-water", elderGuardianTakeDamageFromWater);
@@ -1381,7 +1381,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
}
public boolean enderDragonRidable = false;
-@@ -1439,6 +1467,7 @@ public class PurpurWorldConfig {
+@@ -1430,6 +1458,7 @@ public class PurpurWorldConfig {
public boolean endermanIgnorePlayerDragonHead = false;
public boolean endermanDisableStareAggro = false;
public boolean endermanIgnoreProjectiles = false;
@@ -1389,7 +1389,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
private void endermanSettings() {
endermanRidable = getBoolean("mobs.enderman.ridable", endermanRidable);
endermanRidableInWater = getBoolean("mobs.enderman.ridable-in-water", endermanRidableInWater);
-@@ -1462,6 +1491,7 @@ public class PurpurWorldConfig {
+@@ -1453,6 +1482,7 @@ public class PurpurWorldConfig {
endermanIgnorePlayerDragonHead = getBoolean("mobs.enderman.ignore-players-wearing-dragon-head", endermanIgnorePlayerDragonHead);
endermanDisableStareAggro = getBoolean("mobs.enderman.disable-player-stare-aggression", endermanDisableStareAggro);
endermanIgnoreProjectiles = getBoolean("mobs.enderman.ignore-projectiles", endermanIgnoreProjectiles);
@@ -1397,7 +1397,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
}
public boolean endermiteRidable = false;
-@@ -1469,6 +1499,7 @@ public class PurpurWorldConfig {
+@@ -1460,6 +1490,7 @@ public class PurpurWorldConfig {
public boolean endermiteControllable = true;
public double endermiteMaxHealth = 8.0D;
public boolean endermiteTakeDamageFromWater = false;
@@ -1405,7 +1405,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
private void endermiteSettings() {
endermiteRidable = getBoolean("mobs.endermite.ridable", endermiteRidable);
endermiteRidableInWater = getBoolean("mobs.endermite.ridable-in-water", endermiteRidableInWater);
-@@ -1480,6 +1511,7 @@ public class PurpurWorldConfig {
+@@ -1471,6 +1502,7 @@ public class PurpurWorldConfig {
}
endermiteMaxHealth = getDouble("mobs.endermite.attributes.max_health", endermiteMaxHealth);
endermiteTakeDamageFromWater = getBoolean("mobs.endermite.takes-damage-from-water", endermiteTakeDamageFromWater);
@@ -1413,7 +1413,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
}
public boolean evokerRidable = false;
-@@ -1488,6 +1520,7 @@ public class PurpurWorldConfig {
+@@ -1479,6 +1511,7 @@ public class PurpurWorldConfig {
public double evokerMaxHealth = 24.0D;
public boolean evokerBypassMobGriefing = false;
public boolean evokerTakeDamageFromWater = false;
@@ -1421,7 +1421,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
private void evokerSettings() {
evokerRidable = getBoolean("mobs.evoker.ridable", evokerRidable);
evokerRidableInWater = getBoolean("mobs.evoker.ridable-in-water", evokerRidableInWater);
-@@ -1500,6 +1533,7 @@ public class PurpurWorldConfig {
+@@ -1491,6 +1524,7 @@ public class PurpurWorldConfig {
evokerMaxHealth = getDouble("mobs.evoker.attributes.max_health", evokerMaxHealth);
evokerBypassMobGriefing = getBoolean("mobs.evoker.bypass-mob-griefing", evokerBypassMobGriefing);
evokerTakeDamageFromWater = getBoolean("mobs.evoker.takes-damage-from-water", evokerTakeDamageFromWater);
@@ -1429,7 +1429,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
}
public boolean foxRidable = false;
-@@ -1510,6 +1544,7 @@ public class PurpurWorldConfig {
+@@ -1501,6 +1535,7 @@ public class PurpurWorldConfig {
public int foxBreedingTicks = 6000;
public boolean foxBypassMobGriefing = false;
public boolean foxTakeDamageFromWater = false;
@@ -1437,7 +1437,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
private void foxSettings() {
foxRidable = getBoolean("mobs.fox.ridable", foxRidable);
foxRidableInWater = getBoolean("mobs.fox.ridable-in-water", foxRidableInWater);
-@@ -1524,6 +1559,7 @@ public class PurpurWorldConfig {
+@@ -1515,6 +1550,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);
@@ -1445,7 +1445,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
}
public boolean frogRidable = false;
-@@ -1545,6 +1581,7 @@ public class PurpurWorldConfig {
+@@ -1536,6 +1572,7 @@ public class PurpurWorldConfig {
public double ghastMaxY = 320D;
public double ghastMaxHealth = 10.0D;
public boolean ghastTakeDamageFromWater = false;
@@ -1453,7 +1453,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
private void ghastSettings() {
ghastRidable = getBoolean("mobs.ghast.ridable", ghastRidable);
ghastRidableInWater = getBoolean("mobs.ghast.ridable-in-water", ghastRidableInWater);
-@@ -1557,6 +1594,7 @@ public class PurpurWorldConfig {
+@@ -1548,6 +1585,7 @@ public class PurpurWorldConfig {
}
ghastMaxHealth = getDouble("mobs.ghast.attributes.max_health", ghastMaxHealth);
ghastTakeDamageFromWater = getBoolean("mobs.ghast.takes-damage-from-water", ghastTakeDamageFromWater);
@@ -1461,7 +1461,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
}
public boolean giantRidable = false;
-@@ -1570,6 +1608,7 @@ public class PurpurWorldConfig {
+@@ -1561,6 +1599,7 @@ public class PurpurWorldConfig {
public boolean giantHaveAI = false;
public boolean giantHaveHostileAI = false;
public boolean giantTakeDamageFromWater = false;
@@ -1469,7 +1469,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
private void giantSettings() {
giantRidable = getBoolean("mobs.giant.ridable", giantRidable);
giantRidableInWater = getBoolean("mobs.giant.ridable-in-water", giantRidableInWater);
-@@ -1591,6 +1630,7 @@ public class PurpurWorldConfig {
+@@ -1582,6 +1621,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);
@@ -1477,7 +1477,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
}
public boolean glowSquidRidable = false;
-@@ -1598,12 +1638,14 @@ public class PurpurWorldConfig {
+@@ -1589,12 +1629,14 @@ public class PurpurWorldConfig {
public double glowSquidMaxHealth = 10.0D;
public boolean glowSquidsCanFly = false;
public boolean glowSquidTakeDamageFromWater = false;
@@ -1492,7 +1492,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
}
public boolean goatRidable = false;
-@@ -1612,6 +1654,7 @@ public class PurpurWorldConfig {
+@@ -1603,6 +1645,7 @@ public class PurpurWorldConfig {
public double goatMaxHealth = 10.0D;
public int goatBreedingTicks = 6000;
public boolean goatTakeDamageFromWater = false;
@@ -1500,7 +1500,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
private void goatSettings() {
goatRidable = getBoolean("mobs.goat.ridable", goatRidable);
goatRidableInWater = getBoolean("mobs.goat.ridable-in-water", goatRidableInWater);
-@@ -1619,12 +1662,14 @@ public class PurpurWorldConfig {
+@@ -1610,12 +1653,14 @@ public class PurpurWorldConfig {
goatMaxHealth = getDouble("mobs.goat.attributes.max_health", goatMaxHealth);
goatBreedingTicks = getInt("mobs.goat.breeding-delay-ticks", goatBreedingTicks);
goatTakeDamageFromWater = getBoolean("mobs.goat.takes-damage-from-water", goatTakeDamageFromWater);
@@ -1515,7 +1515,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
private void guardianSettings() {
guardianRidable = getBoolean("mobs.guardian.ridable", guardianRidable);
guardianControllable = getBoolean("mobs.guardian.controllable", guardianControllable);
-@@ -1635,6 +1680,7 @@ public class PurpurWorldConfig {
+@@ -1626,6 +1671,7 @@ public class PurpurWorldConfig {
}
guardianMaxHealth = getDouble("mobs.guardian.attributes.max_health", guardianMaxHealth);
guardianTakeDamageFromWater = getBoolean("mobs.guardian.takes-damage-from-water", guardianTakeDamageFromWater);
@@ -1523,7 +1523,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
}
public boolean forceHalloweenSeason = false;
-@@ -1650,6 +1696,7 @@ public class PurpurWorldConfig {
+@@ -1641,6 +1687,7 @@ public class PurpurWorldConfig {
public double hoglinMaxHealth = 40.0D;
public int hoglinBreedingTicks = 6000;
public boolean hoglinTakeDamageFromWater = false;
@@ -1531,7 +1531,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
private void hoglinSettings() {
hoglinRidable = getBoolean("mobs.hoglin.ridable", hoglinRidable);
hoglinRidableInWater = getBoolean("mobs.hoglin.ridable-in-water", hoglinRidableInWater);
-@@ -1662,6 +1709,7 @@ public class PurpurWorldConfig {
+@@ -1653,6 +1700,7 @@ public class PurpurWorldConfig {
hoglinMaxHealth = getDouble("mobs.hoglin.attributes.max_health", hoglinMaxHealth);
hoglinBreedingTicks = getInt("mobs.hoglin.breeding-delay-ticks", hoglinBreedingTicks);
hoglinTakeDamageFromWater = getBoolean("mobs.hoglin.takes-damage-from-water", hoglinTakeDamageFromWater);
@@ -1539,7 +1539,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
}
public boolean horseRidableInWater = false;
-@@ -1673,6 +1721,7 @@ public class PurpurWorldConfig {
+@@ -1664,6 +1712,7 @@ public class PurpurWorldConfig {
public double horseMovementSpeedMax = 0.3375D;
public int horseBreedingTicks = 6000;
public boolean horseTakeDamageFromWater = false;
@@ -1547,7 +1547,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
private void horseSettings() {
horseRidableInWater = getBoolean("mobs.horse.ridable-in-water", horseRidableInWater);
if (PurpurConfig.version < 10) {
-@@ -1690,6 +1739,7 @@ public class PurpurWorldConfig {
+@@ -1681,6 +1730,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);
@@ -1555,7 +1555,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
}
public boolean huskRidable = false;
-@@ -1701,6 +1751,7 @@ public class PurpurWorldConfig {
+@@ -1692,6 +1742,7 @@ public class PurpurWorldConfig {
public double huskJockeyChance = 0.05D;
public boolean huskJockeyTryExistingChickens = true;
public boolean huskTakeDamageFromWater = false;
@@ -1563,7 +1563,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
private void huskSettings() {
huskRidable = getBoolean("mobs.husk.ridable", huskRidable);
huskRidableInWater = getBoolean("mobs.husk.ridable-in-water", huskRidableInWater);
-@@ -1716,6 +1767,7 @@ public class PurpurWorldConfig {
+@@ -1707,6 +1758,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);
@@ -1571,7 +1571,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
}
public boolean illusionerRidable = false;
-@@ -1725,6 +1777,7 @@ public class PurpurWorldConfig {
+@@ -1716,6 +1768,7 @@ public class PurpurWorldConfig {
public double illusionerFollowRange = 18.0D;
public double illusionerMaxHealth = 32.0D;
public boolean illusionerTakeDamageFromWater = false;
@@ -1579,7 +1579,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
private void illusionerSettings() {
illusionerRidable = getBoolean("mobs.illusioner.ridable", illusionerRidable);
illusionerRidableInWater = getBoolean("mobs.illusioner.ridable-in-water", illusionerRidableInWater);
-@@ -1742,6 +1795,7 @@ public class PurpurWorldConfig {
+@@ -1733,6 +1786,7 @@ public class PurpurWorldConfig {
}
illusionerMaxHealth = getDouble("mobs.illusioner.attributes.max_health", illusionerMaxHealth);
illusionerTakeDamageFromWater = getBoolean("mobs.illusioner.takes-damage-from-water", illusionerTakeDamageFromWater);
@@ -1587,7 +1587,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
}
public boolean ironGolemRidable = false;
-@@ -1752,6 +1806,7 @@ public class PurpurWorldConfig {
+@@ -1743,6 +1797,7 @@ public class PurpurWorldConfig {
public boolean ironGolemTakeDamageFromWater = false;
public boolean ironGolemPoppyCalm = false;
public boolean ironGolemHealCalm = false;
@@ -1595,7 +1595,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
private void ironGolemSettings() {
ironGolemRidable = getBoolean("mobs.iron_golem.ridable", ironGolemRidable);
ironGolemRidableInWater = getBoolean("mobs.iron_golem.ridable-in-water", ironGolemRidableInWater);
-@@ -1766,6 +1821,7 @@ public class PurpurWorldConfig {
+@@ -1757,6 +1812,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);
@@ -1603,7 +1603,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
}
public boolean llamaRidable = false;
-@@ -1780,6 +1836,7 @@ public class PurpurWorldConfig {
+@@ -1771,6 +1827,7 @@ public class PurpurWorldConfig {
public int llamaBreedingTicks = 6000;
public boolean llamaTakeDamageFromWater = false;
public boolean llamaJoinCaravans = true;
@@ -1611,7 +1611,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
private void llamaSettings() {
llamaRidable = getBoolean("mobs.llama.ridable", llamaRidable);
llamaRidableInWater = getBoolean("mobs.llama.ridable-in-water", llamaRidableInWater);
-@@ -1800,6 +1857,7 @@ public class PurpurWorldConfig {
+@@ -1791,6 +1848,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);
@@ -1619,7 +1619,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
}
public boolean magmaCubeRidable = false;
-@@ -1810,6 +1868,7 @@ public class PurpurWorldConfig {
+@@ -1801,6 +1859,7 @@ public class PurpurWorldConfig {
public Map magmaCubeMaxHealthCache = new HashMap<>();
public Map magmaCubeAttackDamageCache = new HashMap<>();
public boolean magmaCubeTakeDamageFromWater = false;
@@ -1627,7 +1627,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
private void magmaCubeSettings() {
magmaCubeRidable = getBoolean("mobs.magma_cube.ridable", magmaCubeRidable);
magmaCubeRidableInWater = getBoolean("mobs.magma_cube.ridable-in-water", magmaCubeRidableInWater);
-@@ -1824,6 +1883,7 @@ public class PurpurWorldConfig {
+@@ -1815,6 +1874,7 @@ public class PurpurWorldConfig {
magmaCubeMaxHealthCache.clear();
magmaCubeAttackDamageCache.clear();
magmaCubeTakeDamageFromWater = getBoolean("mobs.magma_cube.takes-damage-from-water", magmaCubeTakeDamageFromWater);
@@ -1635,7 +1635,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
}
public boolean mooshroomRidable = false;
-@@ -1832,6 +1892,7 @@ public class PurpurWorldConfig {
+@@ -1823,6 +1883,7 @@ public class PurpurWorldConfig {
public double mooshroomMaxHealth = 10.0D;
public int mooshroomBreedingTicks = 6000;
public boolean mooshroomTakeDamageFromWater = false;
@@ -1643,7 +1643,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
private void mooshroomSettings() {
mooshroomRidable = getBoolean("mobs.mooshroom.ridable", mooshroomRidable);
mooshroomRidableInWater = getBoolean("mobs.mooshroom.ridable-in-water", mooshroomRidableInWater);
-@@ -1844,6 +1905,7 @@ public class PurpurWorldConfig {
+@@ -1835,6 +1896,7 @@ public class PurpurWorldConfig {
mooshroomMaxHealth = getDouble("mobs.mooshroom.attributes.max_health", mooshroomMaxHealth);
mooshroomBreedingTicks = getInt("mobs.mooshroom.breeding-delay-ticks", mooshroomBreedingTicks);
mooshroomTakeDamageFromWater = getBoolean("mobs.mooshroom.takes-damage-from-water", mooshroomTakeDamageFromWater);
@@ -1651,7 +1651,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
}
public boolean muleRidableInWater = false;
-@@ -1855,6 +1917,7 @@ public class PurpurWorldConfig {
+@@ -1846,6 +1908,7 @@ public class PurpurWorldConfig {
public double muleMovementSpeedMax = 0.175D;
public int muleBreedingTicks = 6000;
public boolean muleTakeDamageFromWater = false;
@@ -1659,7 +1659,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
private void muleSettings() {
muleRidableInWater = getBoolean("mobs.mule.ridable-in-water", muleRidableInWater);
if (PurpurConfig.version < 10) {
-@@ -1872,6 +1935,7 @@ public class PurpurWorldConfig {
+@@ -1863,6 +1926,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);
@@ -1667,7 +1667,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
}
public boolean ocelotRidable = false;
-@@ -1880,6 +1944,7 @@ public class PurpurWorldConfig {
+@@ -1871,6 +1935,7 @@ public class PurpurWorldConfig {
public double ocelotMaxHealth = 10.0D;
public int ocelotBreedingTicks = 6000;
public boolean ocelotTakeDamageFromWater = false;
@@ -1675,7 +1675,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
private void ocelotSettings() {
ocelotRidable = getBoolean("mobs.ocelot.ridable", ocelotRidable);
ocelotRidableInWater = getBoolean("mobs.ocelot.ridable-in-water", ocelotRidableInWater);
-@@ -1892,6 +1957,7 @@ public class PurpurWorldConfig {
+@@ -1883,6 +1948,7 @@ public class PurpurWorldConfig {
ocelotMaxHealth = getDouble("mobs.ocelot.attributes.max_health", ocelotMaxHealth);
ocelotBreedingTicks = getInt("mobs.ocelot.breeding-delay-ticks", ocelotBreedingTicks);
ocelotTakeDamageFromWater = getBoolean("mobs.ocelot.takes-damage-from-water", ocelotTakeDamageFromWater);
@@ -1683,7 +1683,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
}
public boolean pandaRidable = false;
-@@ -1900,6 +1966,7 @@ public class PurpurWorldConfig {
+@@ -1891,6 +1957,7 @@ public class PurpurWorldConfig {
public double pandaMaxHealth = 20.0D;
public int pandaBreedingTicks = 6000;
public boolean pandaTakeDamageFromWater = false;
@@ -1691,7 +1691,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
private void pandaSettings() {
pandaRidable = getBoolean("mobs.panda.ridable", pandaRidable);
pandaRidableInWater = getBoolean("mobs.panda.ridable-in-water", pandaRidableInWater);
-@@ -1912,6 +1979,7 @@ public class PurpurWorldConfig {
+@@ -1903,6 +1970,7 @@ public class PurpurWorldConfig {
pandaMaxHealth = getDouble("mobs.panda.attributes.max_health", pandaMaxHealth);
pandaBreedingTicks = getInt("mobs.panda.breeding-delay-ticks", pandaBreedingTicks);
pandaTakeDamageFromWater = getBoolean("mobs.panda.takes-damage-from-water", pandaTakeDamageFromWater);
@@ -1699,7 +1699,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
}
public boolean parrotRidable = false;
-@@ -1921,6 +1989,7 @@ public class PurpurWorldConfig {
+@@ -1912,6 +1980,7 @@ public class PurpurWorldConfig {
public double parrotMaxHealth = 6.0D;
public boolean parrotTakeDamageFromWater = false;
public boolean parrotBreedable = false;
@@ -1707,7 +1707,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
private void parrotSettings() {
parrotRidable = getBoolean("mobs.parrot.ridable", parrotRidable);
parrotRidableInWater = getBoolean("mobs.parrot.ridable-in-water", parrotRidableInWater);
-@@ -1934,6 +2003,7 @@ public class PurpurWorldConfig {
+@@ -1925,6 +1994,7 @@ public class PurpurWorldConfig {
parrotMaxHealth = getDouble("mobs.parrot.attributes.max_health", parrotMaxHealth);
parrotTakeDamageFromWater = getBoolean("mobs.parrot.takes-damage-from-water", parrotTakeDamageFromWater);
parrotBreedable = getBoolean("mobs.parrot.can-breed", parrotBreedable);
@@ -1715,7 +1715,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
}
public boolean phantomRidable = false;
-@@ -1961,6 +2031,7 @@ public class PurpurWorldConfig {
+@@ -1952,6 +2022,7 @@ public class PurpurWorldConfig {
public boolean phantomBurnInDaylight = true;
public boolean phantomFlamesOnSwoop = false;
public boolean phantomTakeDamageFromWater = false;
@@ -1723,7 +1723,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
private void phantomSettings() {
phantomRidable = getBoolean("mobs.phantom.ridable", phantomRidable);
phantomRidableInWater = getBoolean("mobs.phantom.ridable-in-water", phantomRidableInWater);
-@@ -1996,6 +2067,7 @@ public class PurpurWorldConfig {
+@@ -1987,6 +2058,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);
@@ -1731,7 +1731,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
}
public boolean pigRidable = false;
-@@ -2005,6 +2077,7 @@ public class PurpurWorldConfig {
+@@ -1996,6 +2068,7 @@ public class PurpurWorldConfig {
public boolean pigGiveSaddleBack = false;
public int pigBreedingTicks = 6000;
public boolean pigTakeDamageFromWater = false;
@@ -1739,7 +1739,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
private void pigSettings() {
pigRidable = getBoolean("mobs.pig.ridable", pigRidable);
pigRidableInWater = getBoolean("mobs.pig.ridable-in-water", pigRidableInWater);
-@@ -2018,6 +2091,7 @@ public class PurpurWorldConfig {
+@@ -2009,6 +2082,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);
@@ -1747,7 +1747,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
}
public boolean piglinRidable = false;
-@@ -2027,6 +2101,7 @@ public class PurpurWorldConfig {
+@@ -2018,6 +2092,7 @@ public class PurpurWorldConfig {
public boolean piglinBypassMobGriefing = false;
public boolean piglinTakeDamageFromWater = false;
public int piglinPortalSpawnModifier = 2000;
@@ -1755,7 +1755,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
private void piglinSettings() {
piglinRidable = getBoolean("mobs.piglin.ridable", piglinRidable);
piglinRidableInWater = getBoolean("mobs.piglin.ridable-in-water", piglinRidableInWater);
-@@ -2040,6 +2115,7 @@ public class PurpurWorldConfig {
+@@ -2031,6 +2106,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);
@@ -1763,7 +1763,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
}
public boolean piglinBruteRidable = false;
-@@ -2047,6 +2123,7 @@ public class PurpurWorldConfig {
+@@ -2038,6 +2114,7 @@ public class PurpurWorldConfig {
public boolean piglinBruteControllable = true;
public double piglinBruteMaxHealth = 50.0D;
public boolean piglinBruteTakeDamageFromWater = false;
@@ -1771,7 +1771,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
private void piglinBruteSettings() {
piglinBruteRidable = getBoolean("mobs.piglin_brute.ridable", piglinBruteRidable);
piglinBruteRidableInWater = getBoolean("mobs.piglin_brute.ridable-in-water", piglinBruteRidableInWater);
-@@ -2058,6 +2135,7 @@ public class PurpurWorldConfig {
+@@ -2049,6 +2126,7 @@ public class PurpurWorldConfig {
}
piglinBruteMaxHealth = getDouble("mobs.piglin_brute.attributes.max_health", piglinBruteMaxHealth);
piglinBruteTakeDamageFromWater = getBoolean("mobs.piglin_brute.takes-damage-from-water", piglinBruteTakeDamageFromWater);
@@ -1779,7 +1779,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
}
public boolean pillagerRidable = false;
-@@ -2066,6 +2144,7 @@ public class PurpurWorldConfig {
+@@ -2057,6 +2135,7 @@ public class PurpurWorldConfig {
public double pillagerMaxHealth = 24.0D;
public boolean pillagerBypassMobGriefing = false;
public boolean pillagerTakeDamageFromWater = false;
@@ -1787,7 +1787,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
private void pillagerSettings() {
pillagerRidable = getBoolean("mobs.pillager.ridable", pillagerRidable);
pillagerRidableInWater = getBoolean("mobs.pillager.ridable-in-water", pillagerRidableInWater);
-@@ -2078,6 +2157,7 @@ public class PurpurWorldConfig {
+@@ -2069,6 +2148,7 @@ public class PurpurWorldConfig {
pillagerMaxHealth = getDouble("mobs.pillager.attributes.max_health", pillagerMaxHealth);
pillagerBypassMobGriefing = getBoolean("mobs.pillager.bypass-mob-griefing", pillagerBypassMobGriefing);
pillagerTakeDamageFromWater = getBoolean("mobs.pillager.takes-damage-from-water", pillagerTakeDamageFromWater);
@@ -1795,7 +1795,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
}
public boolean polarBearRidable = false;
-@@ -2088,6 +2168,7 @@ public class PurpurWorldConfig {
+@@ -2079,6 +2159,7 @@ public class PurpurWorldConfig {
public Item polarBearBreedableItem = null;
public int polarBearBreedingTicks = 6000;
public boolean polarBearTakeDamageFromWater = false;
@@ -1803,7 +1803,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
private void polarBearSettings() {
polarBearRidable = getBoolean("mobs.polar_bear.ridable", polarBearRidable);
polarBearRidableInWater = getBoolean("mobs.polar_bear.ridable-in-water", polarBearRidableInWater);
-@@ -2103,12 +2184,14 @@ public class PurpurWorldConfig {
+@@ -2094,12 +2175,14 @@ 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);
@@ -1818,7 +1818,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
private void pufferfishSettings() {
pufferfishRidable = getBoolean("mobs.pufferfish.ridable", pufferfishRidable);
pufferfishControllable = getBoolean("mobs.pufferfish.controllable", pufferfishControllable);
-@@ -2119,6 +2202,7 @@ public class PurpurWorldConfig {
+@@ -2110,6 +2193,7 @@ public class PurpurWorldConfig {
}
pufferfishMaxHealth = getDouble("mobs.pufferfish.attributes.max_health", pufferfishMaxHealth);
pufferfishTakeDamageFromWater = getBoolean("mobs.pufferfish.takes-damage-from-water", pufferfishTakeDamageFromWater);
@@ -1826,7 +1826,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
}
public boolean rabbitRidable = false;
-@@ -2130,6 +2214,7 @@ public class PurpurWorldConfig {
+@@ -2121,6 +2205,7 @@ public class PurpurWorldConfig {
public int rabbitBreedingTicks = 6000;
public boolean rabbitBypassMobGriefing = false;
public boolean rabbitTakeDamageFromWater = false;
@@ -1834,7 +1834,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
private void rabbitSettings() {
rabbitRidable = getBoolean("mobs.rabbit.ridable", rabbitRidable);
rabbitRidableInWater = getBoolean("mobs.rabbit.ridable-in-water", rabbitRidableInWater);
-@@ -2145,6 +2230,7 @@ public class PurpurWorldConfig {
+@@ -2136,6 +2221,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);
@@ -1842,7 +1842,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
}
public boolean ravagerRidable = false;
-@@ -2154,6 +2240,7 @@ public class PurpurWorldConfig {
+@@ -2145,6 +2231,7 @@ public class PurpurWorldConfig {
public boolean ravagerBypassMobGriefing = false;
public boolean ravagerTakeDamageFromWater = false;
public List ravagerGriefableBlocks = new ArrayList<>();
@@ -1850,7 +1850,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
private void ravagerSettings() {
ravagerRidable = getBoolean("mobs.ravager.ridable", ravagerRidable);
ravagerRidableInWater = getBoolean("mobs.ravager.ridable-in-water", ravagerRidableInWater);
-@@ -2183,12 +2270,14 @@ public class PurpurWorldConfig {
+@@ -2174,12 +2261,14 @@ public class PurpurWorldConfig {
ravagerGriefableBlocks.add(block);
}
});
@@ -1865,7 +1865,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
private void salmonSettings() {
salmonRidable = getBoolean("mobs.salmon.ridable", salmonRidable);
salmonControllable = getBoolean("mobs.salmon.controllable", salmonControllable);
-@@ -2199,6 +2288,7 @@ public class PurpurWorldConfig {
+@@ -2190,6 +2279,7 @@ public class PurpurWorldConfig {
}
salmonMaxHealth = getDouble("mobs.salmon.attributes.max_health", salmonMaxHealth);
salmonTakeDamageFromWater = getBoolean("mobs.salmon.takes-damage-from-water", salmonTakeDamageFromWater);
@@ -1873,7 +1873,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
}
public boolean sheepRidable = false;
-@@ -2208,6 +2298,7 @@ public class PurpurWorldConfig {
+@@ -2199,6 +2289,7 @@ public class PurpurWorldConfig {
public int sheepBreedingTicks = 6000;
public boolean sheepBypassMobGriefing = false;
public boolean sheepTakeDamageFromWater = false;
@@ -1881,7 +1881,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
private void sheepSettings() {
sheepRidable = getBoolean("mobs.sheep.ridable", sheepRidable);
sheepRidableInWater = getBoolean("mobs.sheep.ridable-in-water", sheepRidableInWater);
-@@ -2221,6 +2312,7 @@ public class PurpurWorldConfig {
+@@ -2212,6 +2303,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);
@@ -1889,7 +1889,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
}
public boolean shulkerRidable = false;
-@@ -2234,6 +2326,7 @@ public class PurpurWorldConfig {
+@@ -2225,6 +2317,7 @@ public class PurpurWorldConfig {
public String shulkerSpawnFromBulletNearbyEquation = "(nearby - 1) / 5.0";
public boolean shulkerSpawnFromBulletRandomColor = false;
public boolean shulkerChangeColorWithDye = false;
@@ -1897,7 +1897,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
private void shulkerSettings() {
shulkerRidable = getBoolean("mobs.shulker.ridable", shulkerRidable);
shulkerRidableInWater = getBoolean("mobs.shulker.ridable-in-water", shulkerRidableInWater);
-@@ -2251,6 +2344,7 @@ public class PurpurWorldConfig {
+@@ -2242,6 +2335,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);
@@ -1905,7 +1905,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
}
public boolean silverfishRidable = false;
-@@ -2259,6 +2353,7 @@ public class PurpurWorldConfig {
+@@ -2250,6 +2344,7 @@ public class PurpurWorldConfig {
public double silverfishMaxHealth = 8.0D;
public boolean silverfishBypassMobGriefing = false;
public boolean silverfishTakeDamageFromWater = false;
@@ -1913,7 +1913,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
private void silverfishSettings() {
silverfishRidable = getBoolean("mobs.silverfish.ridable", silverfishRidable);
silverfishRidableInWater = getBoolean("mobs.silverfish.ridable-in-water", silverfishRidableInWater);
-@@ -2271,6 +2366,7 @@ public class PurpurWorldConfig {
+@@ -2262,6 +2357,7 @@ public class PurpurWorldConfig {
silverfishMaxHealth = getDouble("mobs.silverfish.attributes.max_health", silverfishMaxHealth);
silverfishBypassMobGriefing = getBoolean("mobs.silverfish.bypass-mob-griefing", silverfishBypassMobGriefing);
silverfishTakeDamageFromWater = getBoolean("mobs.silverfish.takes-damage-from-water", silverfishTakeDamageFromWater);
@@ -1921,7 +1921,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
}
public boolean skeletonRidable = false;
-@@ -2278,6 +2374,7 @@ public class PurpurWorldConfig {
+@@ -2269,6 +2365,7 @@ public class PurpurWorldConfig {
public boolean skeletonControllable = true;
public double skeletonMaxHealth = 20.0D;
public boolean skeletonTakeDamageFromWater = false;
@@ -1929,7 +1929,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
private void skeletonSettings() {
skeletonRidable = getBoolean("mobs.skeleton.ridable", skeletonRidable);
skeletonRidableInWater = getBoolean("mobs.skeleton.ridable-in-water", skeletonRidableInWater);
-@@ -2289,6 +2386,7 @@ public class PurpurWorldConfig {
+@@ -2280,6 +2377,7 @@ public class PurpurWorldConfig {
}
skeletonMaxHealth = getDouble("mobs.skeleton.attributes.max_health", skeletonMaxHealth);
skeletonTakeDamageFromWater = getBoolean("mobs.skeleton.takes-damage-from-water", skeletonTakeDamageFromWater);
@@ -1937,7 +1937,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
}
public boolean skeletonHorseRidable = false;
-@@ -2301,6 +2399,7 @@ public class PurpurWorldConfig {
+@@ -2292,6 +2390,7 @@ public class PurpurWorldConfig {
public double skeletonHorseMovementSpeedMin = 0.2D;
public double skeletonHorseMovementSpeedMax = 0.2D;
public boolean skeletonHorseTakeDamageFromWater = false;
@@ -1945,7 +1945,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
private void skeletonHorseSettings() {
skeletonHorseRidable = getBoolean("mobs.skeleton_horse.ridable", skeletonHorseRidable);
skeletonHorseRidableInWater = getBoolean("mobs.skeleton_horse.ridable-in-water", skeletonHorseRidableInWater);
-@@ -2318,6 +2417,7 @@ public class PurpurWorldConfig {
+@@ -2309,6 +2408,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);
@@ -1953,7 +1953,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
}
public boolean slimeRidable = false;
-@@ -2328,6 +2428,7 @@ public class PurpurWorldConfig {
+@@ -2319,6 +2419,7 @@ public class PurpurWorldConfig {
public Map slimeMaxHealthCache = new HashMap<>();
public Map slimeAttackDamageCache = new HashMap<>();
public boolean slimeTakeDamageFromWater = false;
@@ -1961,7 +1961,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
private void slimeSettings() {
slimeRidable = getBoolean("mobs.slime.ridable", slimeRidable);
slimeRidableInWater = getBoolean("mobs.slime.ridable-in-water", slimeRidableInWater);
-@@ -2342,6 +2443,7 @@ public class PurpurWorldConfig {
+@@ -2333,6 +2434,7 @@ public class PurpurWorldConfig {
slimeMaxHealthCache.clear();
slimeAttackDamageCache.clear();
slimeTakeDamageFromWater = getBoolean("mobs.slime.takes-damage-from-water", slimeTakeDamageFromWater);
@@ -1969,7 +1969,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
}
public boolean snowGolemRidable = false;
-@@ -2357,6 +2459,7 @@ public class PurpurWorldConfig {
+@@ -2348,6 +2450,7 @@ public class PurpurWorldConfig {
public double snowGolemAttackDistance = 1.25D;
public boolean snowGolemBypassMobGriefing = false;
public boolean snowGolemTakeDamageFromWater = true;
@@ -1977,7 +1977,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
private void snowGolemSettings() {
snowGolemRidable = getBoolean("mobs.snow_golem.ridable", snowGolemRidable);
snowGolemRidableInWater = getBoolean("mobs.snow_golem.ridable-in-water", snowGolemRidableInWater);
-@@ -2376,6 +2479,7 @@ public class PurpurWorldConfig {
+@@ -2367,6 +2470,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);
@@ -1985,7 +1985,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
}
public boolean snifferRidable = false;
-@@ -2398,6 +2502,7 @@ public class PurpurWorldConfig {
+@@ -2389,6 +2493,7 @@ public class PurpurWorldConfig {
public double squidOffsetWaterCheck = 0.0D;
public boolean squidsCanFly = false;
public boolean squidTakeDamageFromWater = false;
@@ -1993,7 +1993,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
private void squidSettings() {
squidRidable = getBoolean("mobs.squid.ridable", squidRidable);
squidControllable = getBoolean("mobs.squid.controllable", squidControllable);
-@@ -2411,6 +2516,7 @@ public class PurpurWorldConfig {
+@@ -2402,6 +2507,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);
@@ -2001,7 +2001,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
}
public boolean spiderRidable = false;
-@@ -2418,6 +2524,7 @@ public class PurpurWorldConfig {
+@@ -2409,6 +2515,7 @@ public class PurpurWorldConfig {
public boolean spiderControllable = true;
public double spiderMaxHealth = 16.0D;
public boolean spiderTakeDamageFromWater = false;
@@ -2009,7 +2009,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
private void spiderSettings() {
spiderRidable = getBoolean("mobs.spider.ridable", spiderRidable);
spiderRidableInWater = getBoolean("mobs.spider.ridable-in-water", spiderRidableInWater);
-@@ -2429,6 +2536,7 @@ public class PurpurWorldConfig {
+@@ -2420,6 +2527,7 @@ public class PurpurWorldConfig {
}
spiderMaxHealth = getDouble("mobs.spider.attributes.max_health", spiderMaxHealth);
spiderTakeDamageFromWater = getBoolean("mobs.spider.takes-damage-from-water", spiderTakeDamageFromWater);
@@ -2017,7 +2017,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
}
public boolean strayRidable = false;
-@@ -2436,6 +2544,7 @@ public class PurpurWorldConfig {
+@@ -2427,6 +2535,7 @@ public class PurpurWorldConfig {
public boolean strayControllable = true;
public double strayMaxHealth = 20.0D;
public boolean strayTakeDamageFromWater = false;
@@ -2025,7 +2025,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
private void straySettings() {
strayRidable = getBoolean("mobs.stray.ridable", strayRidable);
strayRidableInWater = getBoolean("mobs.stray.ridable-in-water", strayRidableInWater);
-@@ -2447,6 +2556,7 @@ public class PurpurWorldConfig {
+@@ -2438,6 +2547,7 @@ public class PurpurWorldConfig {
}
strayMaxHealth = getDouble("mobs.stray.attributes.max_health", strayMaxHealth);
strayTakeDamageFromWater = getBoolean("mobs.stray.takes-damage-from-water", strayTakeDamageFromWater);
@@ -2033,7 +2033,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
}
public boolean striderRidable = false;
-@@ -2456,6 +2566,7 @@ public class PurpurWorldConfig {
+@@ -2447,6 +2557,7 @@ public class PurpurWorldConfig {
public int striderBreedingTicks = 6000;
public boolean striderGiveSaddleBack = false;
public boolean striderTakeDamageFromWater = true;
@@ -2041,7 +2041,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
private void striderSettings() {
striderRidable = getBoolean("mobs.strider.ridable", striderRidable);
striderRidableInWater = getBoolean("mobs.strider.ridable-in-water", striderRidableInWater);
-@@ -2469,6 +2580,7 @@ public class PurpurWorldConfig {
+@@ -2460,6 +2571,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);
@@ -2049,7 +2049,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
}
public boolean tadpoleRidable = false;
-@@ -2491,6 +2603,7 @@ public class PurpurWorldConfig {
+@@ -2482,6 +2594,7 @@ public class PurpurWorldConfig {
public double traderLlamaMovementSpeedMax = 0.175D;
public int traderLlamaBreedingTicks = 6000;
public boolean traderLlamaTakeDamageFromWater = false;
@@ -2057,7 +2057,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
private void traderLlamaSettings() {
traderLlamaRidable = getBoolean("mobs.trader_llama.ridable", traderLlamaRidable);
traderLlamaRidableInWater = getBoolean("mobs.trader_llama.ridable-in-water", traderLlamaRidableInWater);
-@@ -2510,12 +2623,14 @@ public class PurpurWorldConfig {
+@@ -2501,12 +2614,14 @@ 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 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
private void tropicalFishSettings() {
tropicalFishRidable = getBoolean("mobs.tropical_fish.ridable", tropicalFishRidable);
tropicalFishControllable = getBoolean("mobs.tropical_fish.controllable", tropicalFishControllable);
-@@ -2526,6 +2641,7 @@ public class PurpurWorldConfig {
+@@ -2517,6 +2632,7 @@ public class PurpurWorldConfig {
}
tropicalFishMaxHealth = getDouble("mobs.tropical_fish.attributes.max_health", tropicalFishMaxHealth);
tropicalFishTakeDamageFromWater = getBoolean("mobs.tropical_fish.takes-damage-from-water", tropicalFishTakeDamageFromWater);
@@ -2080,7 +2080,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
}
public boolean turtleRidable = false;
-@@ -2534,6 +2650,7 @@ public class PurpurWorldConfig {
+@@ -2525,6 +2641,7 @@ public class PurpurWorldConfig {
public double turtleMaxHealth = 30.0D;
public int turtleBreedingTicks = 6000;
public boolean turtleTakeDamageFromWater = false;
@@ -2088,7 +2088,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
private void turtleSettings() {
turtleRidable = getBoolean("mobs.turtle.ridable", turtleRidable);
turtleRidableInWater = getBoolean("mobs.turtle.ridable-in-water", turtleRidableInWater);
-@@ -2546,6 +2663,7 @@ public class PurpurWorldConfig {
+@@ -2537,6 +2654,7 @@ public class PurpurWorldConfig {
turtleMaxHealth = getDouble("mobs.turtle.attributes.max_health", turtleMaxHealth);
turtleBreedingTicks = getInt("mobs.turtle.breeding-delay-ticks", turtleBreedingTicks);
turtleTakeDamageFromWater = getBoolean("mobs.turtle.takes-damage-from-water", turtleTakeDamageFromWater);
@@ -2096,7 +2096,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
}
public boolean vexRidable = false;
-@@ -2554,6 +2672,7 @@ public class PurpurWorldConfig {
+@@ -2545,6 +2663,7 @@ public class PurpurWorldConfig {
public double vexMaxY = 320D;
public double vexMaxHealth = 14.0D;
public boolean vexTakeDamageFromWater = false;
@@ -2104,7 +2104,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
private void vexSettings() {
vexRidable = getBoolean("mobs.vex.ridable", vexRidable);
vexRidableInWater = getBoolean("mobs.vex.ridable-in-water", vexRidableInWater);
-@@ -2566,6 +2685,7 @@ public class PurpurWorldConfig {
+@@ -2557,6 +2676,7 @@ public class PurpurWorldConfig {
}
vexMaxHealth = getDouble("mobs.vex.attributes.max_health", vexMaxHealth);
vexTakeDamageFromWater = getBoolean("mobs.vex.takes-damage-from-water", vexTakeDamageFromWater);
@@ -2112,7 +2112,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
}
public boolean villagerRidable = false;
-@@ -2581,6 +2701,7 @@ public class PurpurWorldConfig {
+@@ -2572,6 +2692,7 @@ public class PurpurWorldConfig {
public boolean villagerBypassMobGriefing = false;
public boolean villagerTakeDamageFromWater = false;
public boolean villagerAllowTrading = true;
@@ -2120,7 +2120,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
private void villagerSettings() {
villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable);
villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater);
-@@ -2600,6 +2721,7 @@ public class PurpurWorldConfig {
+@@ -2591,6 +2712,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);
@@ -2128,7 +2128,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
}
public boolean vindicatorRidable = false;
-@@ -2608,6 +2730,7 @@ public class PurpurWorldConfig {
+@@ -2599,6 +2721,7 @@ public class PurpurWorldConfig {
public double vindicatorMaxHealth = 24.0D;
public double vindicatorJohnnySpawnChance = 0D;
public boolean vindicatorTakeDamageFromWater = false;
@@ -2136,7 +2136,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
private void vindicatorSettings() {
vindicatorRidable = getBoolean("mobs.vindicator.ridable", vindicatorRidable);
vindicatorRidableInWater = getBoolean("mobs.vindicator.ridable-in-water", vindicatorRidableInWater);
-@@ -2620,6 +2743,7 @@ public class PurpurWorldConfig {
+@@ -2611,6 +2734,7 @@ public class PurpurWorldConfig {
vindicatorMaxHealth = getDouble("mobs.vindicator.attributes.max_health", vindicatorMaxHealth);
vindicatorJohnnySpawnChance = getDouble("mobs.vindicator.johnny.spawn-chance", vindicatorJohnnySpawnChance);
vindicatorTakeDamageFromWater = getBoolean("mobs.vindicator.takes-damage-from-water", vindicatorTakeDamageFromWater);
@@ -2144,7 +2144,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
}
public boolean wanderingTraderRidable = false;
-@@ -2630,6 +2754,7 @@ public class PurpurWorldConfig {
+@@ -2621,6 +2745,7 @@ public class PurpurWorldConfig {
public boolean wanderingTraderCanBeLeashed = false;
public boolean wanderingTraderTakeDamageFromWater = false;
public boolean wanderingTraderAllowTrading = true;
@@ -2152,7 +2152,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
private void wanderingTraderSettings() {
wanderingTraderRidable = getBoolean("mobs.wandering_trader.ridable", wanderingTraderRidable);
wanderingTraderRidableInWater = getBoolean("mobs.wandering_trader.ridable-in-water", wanderingTraderRidableInWater);
-@@ -2644,6 +2769,7 @@ public class PurpurWorldConfig {
+@@ -2635,6 +2760,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);
@@ -2160,7 +2160,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
}
public boolean wardenRidable = false;
-@@ -2660,6 +2786,7 @@ public class PurpurWorldConfig {
+@@ -2651,6 +2777,7 @@ public class PurpurWorldConfig {
public boolean witchControllable = true;
public double witchMaxHealth = 26.0D;
public boolean witchTakeDamageFromWater = false;
@@ -2168,7 +2168,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
private void witchSettings() {
witchRidable = getBoolean("mobs.witch.ridable", witchRidable);
witchRidableInWater = getBoolean("mobs.witch.ridable-in-water", witchRidableInWater);
-@@ -2671,6 +2798,7 @@ public class PurpurWorldConfig {
+@@ -2662,6 +2789,7 @@ public class PurpurWorldConfig {
}
witchMaxHealth = getDouble("mobs.witch.attributes.max_health", witchMaxHealth);
witchTakeDamageFromWater = getBoolean("mobs.witch.takes-damage-from-water", witchTakeDamageFromWater);
@@ -2176,7 +2176,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
}
public boolean witherRidable = false;
-@@ -2685,6 +2813,7 @@ public class PurpurWorldConfig {
+@@ -2676,6 +2804,7 @@ public class PurpurWorldConfig {
public boolean witherCanRideVehicles = false;
public float witherExplosionRadius = 1.0F;
public boolean witherPlaySpawnSound = true;
@@ -2184,7 +2184,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
private void witherSettings() {
witherRidable = getBoolean("mobs.wither.ridable", witherRidable);
witherRidableInWater = getBoolean("mobs.wither.ridable-in-water", witherRidableInWater);
-@@ -2707,6 +2836,7 @@ public class PurpurWorldConfig {
+@@ -2698,6 +2827,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);
@@ -2192,7 +2192,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
}
public boolean witherSkeletonRidable = false;
-@@ -2714,6 +2844,7 @@ public class PurpurWorldConfig {
+@@ -2705,6 +2835,7 @@ public class PurpurWorldConfig {
public boolean witherSkeletonControllable = true;
public double witherSkeletonMaxHealth = 20.0D;
public boolean witherSkeletonTakeDamageFromWater = false;
@@ -2200,7 +2200,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
private void witherSkeletonSettings() {
witherSkeletonRidable = getBoolean("mobs.wither_skeleton.ridable", witherSkeletonRidable);
witherSkeletonRidableInWater = getBoolean("mobs.wither_skeleton.ridable-in-water", witherSkeletonRidableInWater);
-@@ -2725,6 +2856,7 @@ public class PurpurWorldConfig {
+@@ -2716,6 +2847,7 @@ public class PurpurWorldConfig {
}
witherSkeletonMaxHealth = getDouble("mobs.wither_skeleton.attributes.max_health", witherSkeletonMaxHealth);
witherSkeletonTakeDamageFromWater = getBoolean("mobs.wither_skeleton.takes-damage-from-water", witherSkeletonTakeDamageFromWater);
@@ -2208,7 +2208,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
}
public boolean wolfRidable = false;
-@@ -2736,6 +2868,7 @@ public class PurpurWorldConfig {
+@@ -2727,6 +2859,7 @@ public class PurpurWorldConfig {
public double wolfNaturalRabid = 0.0D;
public int wolfBreedingTicks = 6000;
public boolean wolfTakeDamageFromWater = false;
@@ -2216,7 +2216,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
private void wolfSettings() {
wolfRidable = getBoolean("mobs.wolf.ridable", wolfRidable);
wolfRidableInWater = getBoolean("mobs.wolf.ridable-in-water", wolfRidableInWater);
-@@ -2755,6 +2888,7 @@ public class PurpurWorldConfig {
+@@ -2746,6 +2879,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);
@@ -2224,7 +2224,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
}
public boolean zoglinRidable = false;
-@@ -2762,6 +2896,7 @@ public class PurpurWorldConfig {
+@@ -2753,6 +2887,7 @@ public class PurpurWorldConfig {
public boolean zoglinControllable = true;
public double zoglinMaxHealth = 40.0D;
public boolean zoglinTakeDamageFromWater = false;
@@ -2232,7 +2232,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
private void zoglinSettings() {
zoglinRidable = getBoolean("mobs.zoglin.ridable", zoglinRidable);
zoglinRidableInWater = getBoolean("mobs.zoglin.ridable-in-water", zoglinRidableInWater);
-@@ -2773,6 +2908,7 @@ public class PurpurWorldConfig {
+@@ -2764,6 +2899,7 @@ public class PurpurWorldConfig {
}
zoglinMaxHealth = getDouble("mobs.zoglin.attributes.max_health", zoglinMaxHealth);
zoglinTakeDamageFromWater = getBoolean("mobs.zoglin.takes-damage-from-water", zoglinTakeDamageFromWater);
@@ -2240,7 +2240,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
}
public boolean zombieRidable = false;
-@@ -2786,6 +2922,7 @@ public class PurpurWorldConfig {
+@@ -2777,6 +2913,7 @@ public class PurpurWorldConfig {
public boolean zombieAggressiveTowardsVillagerWhenLagging = true;
public boolean zombieBypassMobGriefing = false;
public boolean zombieTakeDamageFromWater = false;
@@ -2248,7 +2248,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
private void zombieSettings() {
zombieRidable = getBoolean("mobs.zombie.ridable", zombieRidable);
zombieRidableInWater = getBoolean("mobs.zombie.ridable-in-water", zombieRidableInWater);
-@@ -2803,6 +2940,7 @@ public class PurpurWorldConfig {
+@@ -2794,6 +2931,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);
@@ -2256,7 +2256,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
}
public boolean zombieHorseRidable = false;
-@@ -2816,6 +2954,7 @@ public class PurpurWorldConfig {
+@@ -2807,6 +2945,7 @@ public class PurpurWorldConfig {
public double zombieHorseMovementSpeedMax = 0.2D;
public double zombieHorseSpawnChance = 0.0D;
public boolean zombieHorseTakeDamageFromWater = false;
@@ -2264,7 +2264,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
private void zombieHorseSettings() {
zombieHorseRidable = getBoolean("mobs.zombie_horse.ridable", zombieHorseRidable);
zombieHorseRidableInWater = getBoolean("mobs.zombie_horse.ridable-in-water", zombieHorseRidableInWater);
-@@ -2834,6 +2973,7 @@ public class PurpurWorldConfig {
+@@ -2825,6 +2964,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);
@@ -2272,7 +2272,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
}
public boolean zombieVillagerRidable = false;
-@@ -2848,6 +2988,7 @@ public class PurpurWorldConfig {
+@@ -2839,6 +2979,7 @@ public class PurpurWorldConfig {
public int zombieVillagerCuringTimeMin = 3600;
public int zombieVillagerCuringTimeMax = 6000;
public boolean zombieVillagerCureEnabled = true;
@@ -2280,7 +2280,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
private void zombieVillagerSettings() {
zombieVillagerRidable = getBoolean("mobs.zombie_villager.ridable", zombieVillagerRidable);
zombieVillagerRidableInWater = getBoolean("mobs.zombie_villager.ridable-in-water", zombieVillagerRidableInWater);
-@@ -2866,6 +3007,7 @@ public class PurpurWorldConfig {
+@@ -2857,6 +2998,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);
@@ -2288,7 +2288,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
}
public boolean zombifiedPiglinRidable = false;
-@@ -2878,6 +3020,7 @@ public class PurpurWorldConfig {
+@@ -2869,6 +3011,7 @@ public class PurpurWorldConfig {
public boolean zombifiedPiglinJockeyTryExistingChickens = true;
public boolean zombifiedPiglinCountAsPlayerKillWhenAngry = true;
public boolean zombifiedPiglinTakeDamageFromWater = false;
@@ -2296,7 +2296,7 @@ index 504225c5b6085ca25a816d4a6259de36ed68941c..0c7e459fa6fffedae48461ba70c98637
private void zombifiedPiglinSettings() {
zombifiedPiglinRidable = getBoolean("mobs.zombified_piglin.ridable", zombifiedPiglinRidable);
zombifiedPiglinRidableInWater = getBoolean("mobs.zombified_piglin.ridable-in-water", zombifiedPiglinRidableInWater);
-@@ -2894,6 +3037,7 @@ public class PurpurWorldConfig {
+@@ -2885,6 +3028,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/0227-Potion-NamespacedKey.patch b/patches/server/0224-Potion-NamespacedKey.patch
similarity index 98%
rename from patches/server/0227-Potion-NamespacedKey.patch
rename to patches/server/0224-Potion-NamespacedKey.patch
index 4af9f074a..01a1d677b 100644
--- a/patches/server/0227-Potion-NamespacedKey.patch
+++ b/patches/server/0224-Potion-NamespacedKey.patch
@@ -160,10 +160,10 @@ index 68e1b8271475996020af50b3b2cf04cd25aa6c85..4f2fcbcf90d6f5ee89e35c993a65cae6
@Override
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
-index 7feff1402b3034d0f387440f28ee7a71e4ff4acf..3741993bfdf6b356619d04296c16cf2d2018e091 100644
+index ea91da46779b177d3457e4683a76cedea8bc684d..026e420b561afea5b3daa0f6bcf2cdfce6fb9e9a 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
-@@ -465,7 +465,7 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity {
+@@ -466,7 +466,7 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity {
@Override
public boolean addPotionEffect(PotionEffect effect, boolean force) {
org.spigotmc.AsyncCatcher.catchOp("effect add"); // Paper
diff --git a/patches/server/0228-Grindstone-API.patch b/patches/server/0225-Grindstone-API.patch
similarity index 95%
rename from patches/server/0228-Grindstone-API.patch
rename to patches/server/0225-Grindstone-API.patch
index 62b41be83..3b9493d3c 100644
--- a/patches/server/0228-Grindstone-API.patch
+++ b/patches/server/0225-Grindstone-API.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Grindstone API
diff --git a/src/main/java/net/minecraft/world/inventory/GrindstoneMenu.java b/src/main/java/net/minecraft/world/inventory/GrindstoneMenu.java
-index 132a07e226ae3ac6b5abc6f53c62345e2ab2f31f..3b721092a7a73472756064e0eb91d3220fdc4bc8 100644
+index c79e87fde9de55dbfe8c3deaf725e2a73dc2af38..b1eacb9691b320a10de3420fae3632bb9d5b7ae3 100644
--- a/src/main/java/net/minecraft/world/inventory/GrindstoneMenu.java
+++ b/src/main/java/net/minecraft/world/inventory/GrindstoneMenu.java
@@ -95,9 +95,11 @@ public class GrindstoneMenu extends AbstractContainerMenu {
diff --git a/patches/server/0229-Ability-for-hoe-to-replant-crops-and-nether-warts.patch b/patches/server/0226-Ability-for-hoe-to-replant-crops-and-nether-warts.patch
similarity index 88%
rename from patches/server/0229-Ability-for-hoe-to-replant-crops-and-nether-warts.patch
rename to patches/server/0226-Ability-for-hoe-to-replant-crops-and-nether-warts.patch
index 21996dc6f..394f50e73 100644
--- a/patches/server/0229-Ability-for-hoe-to-replant-crops-and-nether-warts.patch
+++ b/patches/server/0226-Ability-for-hoe-to-replant-crops-and-nether-warts.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Ability for hoe to replant crops and nether warts
diff --git a/src/main/java/net/minecraft/world/level/block/BushBlock.java b/src/main/java/net/minecraft/world/level/block/BushBlock.java
-index 03fde6e47c4a347c62fe9b4a3351769aedf874f6..ca906b0250e5332f7ececf1419ca6d2c1d385adc 100644
+index bed3d9c781c7d3ca260027b4737970889a54689c..db1941ed32d141327a8b11e54b3ff9900072ad36 100644
--- a/src/main/java/net/minecraft/world/level/block/BushBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/BushBlock.java
-@@ -48,4 +48,24 @@ public class BushBlock extends Block {
+@@ -52,4 +52,24 @@ public abstract class BushBlock extends Block {
public boolean isPathfindable(BlockState state, BlockGetter world, BlockPos pos, PathComputationType type) {
return type == PathComputationType.AIR && !this.hasCollision ? true : super.isPathfindable(state, world, pos, type);
}
@@ -34,10 +34,10 @@ index 03fde6e47c4a347c62fe9b4a3351769aedf874f6..ca906b0250e5332f7ececf1419ca6d2c
+ // 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 3f429f083f45d34effc273ccaa5db4da089f7355..61d051f42d8c3d1f039b97fdc7a61b54f57ee86a 100644
+index 0e06958657201806f425990ac01a5f8acc540f3e..32b121fc8b92ce6ff202b967b7d08f77a9a332f4 100644
--- a/src/main/java/net/minecraft/world/level/block/CropBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/CropBlock.java
-@@ -207,4 +207,15 @@ public class CropBlock extends BushBlock implements BonemealableBlock {
+@@ -214,4 +214,15 @@ public class CropBlock extends BushBlock implements BonemealableBlock {
protected void createBlockStateDefinition(StateDefinition.Builder builder) {
builder.add(CropBlock.AGE);
}
@@ -54,10 +54,10 @@ index 3f429f083f45d34effc273ccaa5db4da089f7355..61d051f42d8c3d1f039b97fdc7a61b54
+ // 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 e55720c4d2fbdf6aae526910e87a67c29cf906fd..74fedd3e401c6d58c03c0579f4b919114404fd78 100644
+index 0fc333f240d6918e841a9221be42973839408802..7328764abb0790b389d396179db32f4a63bfe98a 100644
--- a/src/main/java/net/minecraft/world/level/block/NetherWartBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/NetherWartBlock.java
-@@ -60,4 +60,15 @@ public class NetherWartBlock extends BushBlock {
+@@ -68,4 +68,15 @@ public class NetherWartBlock extends BushBlock {
protected void createBlockStateDefinition(StateDefinition.Builder builder) {
builder.add(NetherWartBlock.AGE);
}
@@ -74,10 +74,10 @@ index e55720c4d2fbdf6aae526910e87a67c29cf906fd..74fedd3e401c6d58c03c0579f4b91911
+ // Purpur end
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 41b856485bbb6872cc49cfdc460303e465c3143e..bda73dd90c7d5e72996efca0a41e7f4785c6f548 100644
+index 788cbfb4fddbede2788604bdd8ce17971030e3a2..1b556e774e5a2ddf1741ec6826638ed66f67523f 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -543,6 +543,8 @@ public class PurpurWorldConfig {
+@@ -539,6 +539,8 @@ public class PurpurWorldConfig {
public Map axeWeatherables = new HashMap<>();
public Map hoeTillables = new HashMap<>();
public Map shovelFlattenables = new HashMap<>();
@@ -86,7 +86,7 @@ index 41b856485bbb6872cc49cfdc460303e465c3143e..bda73dd90c7d5e72996efca0a41e7f47
private void toolSettings() {
axeStrippables.clear();
axeWaxables.clear();
-@@ -736,6 +738,8 @@ public class PurpurWorldConfig {
+@@ -732,6 +734,8 @@ public class PurpurWorldConfig {
});
shovelFlattenables.put(block, new Flattenable(into, drops));
});
diff --git a/patches/server/0230-Shearing-jeb-produces-random-color-wool.patch b/patches/server/0227-Shearing-jeb-produces-random-color-wool.patch
similarity index 92%
rename from patches/server/0230-Shearing-jeb-produces-random-color-wool.patch
rename to patches/server/0227-Shearing-jeb-produces-random-color-wool.patch
index 94433ce00..1ce31283f 100644
--- a/patches/server/0230-Shearing-jeb-produces-random-color-wool.patch
+++ b/patches/server/0227-Shearing-jeb-produces-random-color-wool.patch
@@ -18,10 +18,10 @@ index f2d0c67709e38209a8a02e98f4392b9e0a53c211..fb477c3c594bb81e92ae0c606635c309
if (entityitem != null) {
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index bda73dd90c7d5e72996efca0a41e7f4785c6f548..fad281ec8314d4431126abbcea997932401ea95e 100644
+index 1b556e774e5a2ddf1741ec6826638ed66f67523f..f080154f5a2782ae7bd7b68cbb1f3caf4e68f6b9 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -2303,6 +2303,7 @@ public class PurpurWorldConfig {
+@@ -2294,6 +2294,7 @@ public class PurpurWorldConfig {
public boolean sheepBypassMobGriefing = false;
public boolean sheepTakeDamageFromWater = false;
public boolean sheepAlwaysDropExp = false;
@@ -29,7 +29,7 @@ index bda73dd90c7d5e72996efca0a41e7f4785c6f548..fad281ec8314d4431126abbcea997932
private void sheepSettings() {
sheepRidable = getBoolean("mobs.sheep.ridable", sheepRidable);
sheepRidableInWater = getBoolean("mobs.sheep.ridable-in-water", sheepRidableInWater);
-@@ -2317,6 +2318,7 @@ public class PurpurWorldConfig {
+@@ -2308,6 +2309,7 @@ public class PurpurWorldConfig {
sheepBypassMobGriefing = getBoolean("mobs.sheep.bypass-mob-griefing", sheepBypassMobGriefing);
sheepTakeDamageFromWater = getBoolean("mobs.sheep.takes-damage-from-water", sheepTakeDamageFromWater);
sheepAlwaysDropExp = getBoolean("mobs.sheep.always-drop-exp", sheepAlwaysDropExp);
diff --git a/patches/server/0231-Turtle-eggs-random-tick-crack-chance.patch b/patches/server/0228-Turtle-eggs-random-tick-crack-chance.patch
similarity index 86%
rename from patches/server/0231-Turtle-eggs-random-tick-crack-chance.patch
rename to patches/server/0228-Turtle-eggs-random-tick-crack-chance.patch
index 78b87573e..e16f3b802 100644
--- a/patches/server/0231-Turtle-eggs-random-tick-crack-chance.patch
+++ b/patches/server/0228-Turtle-eggs-random-tick-crack-chance.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Turtle eggs random tick crack chance
diff --git a/src/main/java/net/minecraft/world/level/block/TurtleEggBlock.java b/src/main/java/net/minecraft/world/level/block/TurtleEggBlock.java
-index 9c834e3deed07eb70e6a57df2db732c1e2334737..8e975daca6a50c95d7fb620f2756b8bb2b7c7d6b 100644
+index 44bb9930313cae9d150cc08cbdcced10a35bd07d..9756c84e073d9e99ade0ee94c586b8e0fa426138 100644
--- a/src/main/java/net/minecraft/world/level/block/TurtleEggBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/TurtleEggBlock.java
-@@ -162,7 +162,7 @@ public class TurtleEggBlock extends Block {
+@@ -169,7 +169,7 @@ public class TurtleEggBlock extends Block {
private boolean shouldUpdateHatchLevel(Level world) {
float f = world.getTimeOfDay(1.0F);
@@ -18,10 +18,10 @@ index 9c834e3deed07eb70e6a57df2db732c1e2334737..8e975daca6a50c95d7fb620f2756b8bb
@Override
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index fad281ec8314d4431126abbcea997932401ea95e..c300838d83652a36389694e7afbec5feff11cd8a 100644
+index f080154f5a2782ae7bd7b68cbb1f3caf4e68f6b9..f607d41ffa51c00cb9edc70545e3d55fdf56f8db 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -1011,11 +1011,13 @@ public class PurpurWorldConfig {
+@@ -1002,11 +1002,13 @@ public class PurpurWorldConfig {
public boolean turtleEggsBreakFromItems = true;
public boolean turtleEggsBreakFromMinecarts = true;
public boolean turtleEggsBypassMobGriefing = false;
diff --git a/patches/server/0232-Mob-head-visibility-percent.patch b/patches/server/0229-Mob-head-visibility-percent.patch
similarity index 90%
rename from patches/server/0232-Mob-head-visibility-percent.patch
rename to patches/server/0229-Mob-head-visibility-percent.patch
index 7073f012e..1cc1608e6 100644
--- a/patches/server/0232-Mob-head-visibility-percent.patch
+++ b/patches/server/0229-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 619a475f7a7869ddde87c47950c0dfbe7048d9d6..73fed7fb7cc9e38ebf111a365d25ee91657668e1 100644
+index cbf14a9f6c4059ac2246d840ff901113fb03f8cc..ccf94ec8c0fcff5d75365274f662ff24b3ade75d 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
@@ -1040,9 +1040,20 @@ public abstract class LivingEntity extends Entity implements Attackable {
@@ -32,10 +32,10 @@ index 619a475f7a7869ddde87c47950c0dfbe7048d9d6..73fed7fb7cc9e38ebf111a365d25ee91
// 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 8c16e4395c1a2e0f4bdc2a015751ffdacc431804..b687536721b92329869b7ddd2cb9223e2fb28133 100644
+index f607d41ffa51c00cb9edc70545e3d55fdf56f8db..e1cb805d20768559db3452a83392f2e9ea9aa4c3 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -1305,6 +1305,7 @@ public class PurpurWorldConfig {
+@@ -1296,6 +1296,7 @@ public class PurpurWorldConfig {
public boolean creeperExplodeWhenKilled = false;
public boolean creeperHealthRadius = false;
public boolean creeperAlwaysDropExp = false;
@@ -43,7 +43,7 @@ index 8c16e4395c1a2e0f4bdc2a015751ffdacc431804..b687536721b92329869b7ddd2cb9223e
private void creeperSettings() {
creeperRidable = getBoolean("mobs.creeper.ridable", creeperRidable);
creeperRidableInWater = getBoolean("mobs.creeper.ridable-in-water", creeperRidableInWater);
-@@ -1322,6 +1323,7 @@ public class PurpurWorldConfig {
+@@ -1313,6 +1314,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 8c16e4395c1a2e0f4bdc2a015751ffdacc431804..b687536721b92329869b7ddd2cb9223e
}
public boolean dolphinRidable = false;
-@@ -2108,6 +2110,7 @@ public class PurpurWorldConfig {
+@@ -2099,6 +2101,7 @@ public class PurpurWorldConfig {
public boolean piglinTakeDamageFromWater = false;
public int piglinPortalSpawnModifier = 2000;
public boolean piglinAlwaysDropExp = false;
@@ -59,7 +59,7 @@ index 8c16e4395c1a2e0f4bdc2a015751ffdacc431804..b687536721b92329869b7ddd2cb9223e
private void piglinSettings() {
piglinRidable = getBoolean("mobs.piglin.ridable", piglinRidable);
piglinRidableInWater = getBoolean("mobs.piglin.ridable-in-water", piglinRidableInWater);
-@@ -2122,6 +2125,7 @@ public class PurpurWorldConfig {
+@@ -2113,6 +2116,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 8c16e4395c1a2e0f4bdc2a015751ffdacc431804..b687536721b92329869b7ddd2cb9223e
}
public boolean piglinBruteRidable = false;
-@@ -2383,6 +2387,7 @@ public class PurpurWorldConfig {
+@@ -2374,6 +2378,7 @@ public class PurpurWorldConfig {
public double skeletonMaxHealth = 20.0D;
public boolean skeletonTakeDamageFromWater = false;
public boolean skeletonAlwaysDropExp = false;
@@ -75,7 +75,7 @@ index 8c16e4395c1a2e0f4bdc2a015751ffdacc431804..b687536721b92329869b7ddd2cb9223e
private void skeletonSettings() {
skeletonRidable = getBoolean("mobs.skeleton.ridable", skeletonRidable);
skeletonRidableInWater = getBoolean("mobs.skeleton.ridable-in-water", skeletonRidableInWater);
-@@ -2395,6 +2400,7 @@ public class PurpurWorldConfig {
+@@ -2386,6 +2391,7 @@ public class PurpurWorldConfig {
skeletonMaxHealth = getDouble("mobs.skeleton.attributes.max_health", skeletonMaxHealth);
skeletonTakeDamageFromWater = getBoolean("mobs.skeleton.takes-damage-from-water", skeletonTakeDamageFromWater);
skeletonAlwaysDropExp = getBoolean("mobs.skeleton.always-drop-exp", skeletonAlwaysDropExp);
@@ -83,7 +83,7 @@ index 8c16e4395c1a2e0f4bdc2a015751ffdacc431804..b687536721b92329869b7ddd2cb9223e
}
public boolean skeletonHorseRidable = false;
-@@ -2931,6 +2937,7 @@ public class PurpurWorldConfig {
+@@ -2922,6 +2928,7 @@ public class PurpurWorldConfig {
public boolean zombieBypassMobGriefing = false;
public boolean zombieTakeDamageFromWater = false;
public boolean zombieAlwaysDropExp = false;
@@ -91,7 +91,7 @@ index 8c16e4395c1a2e0f4bdc2a015751ffdacc431804..b687536721b92329869b7ddd2cb9223e
private void zombieSettings() {
zombieRidable = getBoolean("mobs.zombie.ridable", zombieRidable);
zombieRidableInWater = getBoolean("mobs.zombie.ridable-in-water", zombieRidableInWater);
-@@ -2949,6 +2956,7 @@ public class PurpurWorldConfig {
+@@ -2940,6 +2947,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/0233-Configurable-valid-characters-for-usernames.patch b/patches/server/0230-Configurable-valid-characters-for-usernames.patch
similarity index 64%
rename from patches/server/0233-Configurable-valid-characters-for-usernames.patch
rename to patches/server/0230-Configurable-valid-characters-for-usernames.patch
index d32428a81..3e98b0367 100644
--- a/patches/server/0233-Configurable-valid-characters-for-usernames.patch
+++ b/patches/server/0230-Configurable-valid-characters-for-usernames.patch
@@ -4,19 +4,18 @@ Date: Sat, 1 Jan 2022 18:38:58 -0600
Subject: [PATCH] Configurable valid characters for usernames
-diff --git a/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java
-index e615e417627840d645db259bc9640a0471a52b05..f0bbc48e2df1da42e4bf9f7113451738b986fbbf 100644
---- a/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java
-+++ b/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java
-@@ -141,6 +141,8 @@ public class ServerLoginPacketListenerImpl implements ServerLoginPacketListener,
+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 fd67cefb971b394042c0fdd845c20cf55d8efc2f..fab644c79287a444fd58c43547beba3e06e9e7ff 100644
+--- a/src/main/java/net/minecraft/world/entity/player/Player.java
++++ b/src/main/java/net/minecraft/world/entity/player/Player.java
+@@ -2404,6 +2404,7 @@ public abstract class Player extends LivingEntity {
+ }
+
+ public static boolean isValidUsername(String name) {
++ if (true) return org.purpurmc.purpur.PurpurConfig.usernameValidCharactersPattern.matcher(name).matches(); // Purpur
+ // Paper start
+ if (name == null || name.isEmpty() || name.length() > 16) {
return false;
- }
-
-+ if (true) return org.purpurmc.purpur.PurpurConfig.usernameValidCharactersPattern.matcher(in).matches(); // Purpur
-+
- for (int i = 0, len = in.length(); i < len; ++i) {
- char c = in.charAt(i);
-
diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
index f562729f543ef2b5998c6c38c0a08b3ae4dab1bf..d56c2776d08306245618dca04cd39891bb61c1bd 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java
diff --git a/patches/server/0234-Shears-can-have-looting-enchantment.patch b/patches/server/0231-Shears-can-have-looting-enchantment.patch
similarity index 99%
rename from patches/server/0234-Shears-can-have-looting-enchantment.patch
rename to patches/server/0231-Shears-can-have-looting-enchantment.patch
index 01fadb23a..daa85ac1a 100644
--- a/patches/server/0234-Shears-can-have-looting-enchantment.patch
+++ b/patches/server/0231-Shears-can-have-looting-enchantment.patch
@@ -37,7 +37,7 @@ index 5e8cc5cfac8888628c6d513148f41be09ca65a2c..a089fc61ec09be6b7490375489178dc6
boolean readyForShearing();
}
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 ab5b150b379598861666ad32906e1fe454437063..59ef1070c6c1ac876e097cd23835e4ed8b6e732f 100644
+index c49d25eae4b9d2cdd15022b32947a94364ea2791..6ce116dc3173d17b19c4c03fe9cf494dd022f0d5 100644
--- a/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java
+++ b/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java
@@ -163,7 +163,7 @@ public class MushroomCow extends Cow implements Shearable, VariantHolder Actual fall distance needed to trample
6.0 -> 6.75
diff --git a/src/main/java/net/minecraft/world/level/block/FarmBlock.java b/src/main/java/net/minecraft/world/level/block/FarmBlock.java
-index 84107011175b6e58b463d5d1b716a3262be0db77..856099241737c43b8213ccc203ef6bb7b7667b1f 100644
+index 5c93cf7f97ecf4fba2c905b293ca7d21d1424f30..c4eca9db159d6a581d863558ebc3008d51d25cfb 100644
--- a/src/main/java/net/minecraft/world/level/block/FarmBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/FarmBlock.java
-@@ -103,7 +103,7 @@ public class FarmBlock extends Block {
+@@ -110,7 +110,7 @@ public class FarmBlock extends Block {
@Override
public void fallOn(Level world, BlockState state, BlockPos pos, Entity entity, float fallDistance) {
super.fallOn(world, state, pos, entity, fallDistance); // CraftBukkit - moved here as game rules / events shouldn't affect fall damage.
@@ -35,10 +35,10 @@ index 84107011175b6e58b463d5d1b716a3262be0db77..856099241737c43b8213ccc203ef6bb7
org.bukkit.event.Cancellable cancellable;
if (entity instanceof Player) {
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 04bccaa4fe7e81a8f82f567bfb2a9bb838961ff4..4c4c5c853eb8a840e76af9aacd73a26e83aaf6f4 100644
+index 9b6309d247b88a73e26b66a65412af5407fcd640..13b1957f4338cc6bb406370e91ee58d7d4002148 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -889,6 +889,7 @@ public class PurpurWorldConfig {
+@@ -885,6 +885,7 @@ public class PurpurWorldConfig {
public boolean farmlandTramplingDisabled = false;
public boolean farmlandTramplingOnlyPlayers = false;
public boolean farmlandTramplingFeatherFalling = false;
@@ -46,7 +46,7 @@ index 04bccaa4fe7e81a8f82f567bfb2a9bb838961ff4..4c4c5c853eb8a840e76af9aacd73a26e
private void farmlandSettings() {
farmlandBypassMobGriefing = getBoolean("blocks.farmland.bypass-mob-griefing", farmlandBypassMobGriefing);
farmlandGetsMoistFromBelow = getBoolean("blocks.farmland.gets-moist-from-below", farmlandGetsMoistFromBelow);
-@@ -896,6 +897,7 @@ public class PurpurWorldConfig {
+@@ -892,6 +893,7 @@ public class PurpurWorldConfig {
farmlandTramplingDisabled = getBoolean("blocks.farmland.disable-trampling", farmlandTramplingDisabled);
farmlandTramplingOnlyPlayers = getBoolean("blocks.farmland.only-players-trample", farmlandTramplingOnlyPlayers);
farmlandTramplingFeatherFalling = getBoolean("blocks.farmland.feather-fall-distance-affects-trampling", farmlandTramplingFeatherFalling);
diff --git a/patches/server/0238-Configurable-player-pickup-exp-delay.patch b/patches/server/0235-Configurable-player-pickup-exp-delay.patch
similarity index 89%
rename from patches/server/0238-Configurable-player-pickup-exp-delay.patch
rename to patches/server/0235-Configurable-player-pickup-exp-delay.patch
index 5d9cec27e..c13022a37 100644
--- a/patches/server/0238-Configurable-player-pickup-exp-delay.patch
+++ b/patches/server/0235-Configurable-player-pickup-exp-delay.patch
@@ -9,7 +9,7 @@ players still only pick up one orb every tick. However, setting this
to any negative number will pick up all orbs instantly.
diff --git a/src/main/java/net/minecraft/world/entity/ExperienceOrb.java b/src/main/java/net/minecraft/world/entity/ExperienceOrb.java
-index 2bd576849403bc2cfae298c2210616192ddc38db..b2233635b6acc35ea3668c36c56e57f15420ac62 100644
+index 5450058d23f1ab20689183bd284b01fc93628db5..a3ef8e6a698df4c78e0494da48063ddd29caf62f 100644
--- a/src/main/java/net/minecraft/world/entity/ExperienceOrb.java
+++ b/src/main/java/net/minecraft/world/entity/ExperienceOrb.java
@@ -313,7 +313,7 @@ public class ExperienceOrb extends Entity {
@@ -22,10 +22,10 @@ index 2bd576849403bc2cfae298c2210616192ddc38db..b2233635b6acc35ea3668c36c56e57f1
int i = this.repairPlayerItems(player, this.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 52b4ffc17ac913bf64cf6a6b7a37ae6e5af9bd87..20c3d3c9d2150574e9b4761dc1bda11cee04862f 100644
+index fab644c79287a444fd58c43547beba3e06e9e7ff..f1fe8a0c1ff1514d9a158e18dc6d234d54388573 100644
--- a/src/main/java/net/minecraft/world/entity/player/Player.java
+++ b/src/main/java/net/minecraft/world/entity/player/Player.java
-@@ -636,7 +636,7 @@ public abstract class Player extends LivingEntity {
+@@ -631,7 +631,7 @@ public abstract class Player extends LivingEntity {
while (iterator.hasNext()) {
Entity entity = (Entity) iterator.next();
@@ -35,10 +35,10 @@ index 52b4ffc17ac913bf64cf6a6b7a37ae6e5af9bd87..20c3d3c9d2150574e9b4761dc1bda11c
} else if (!entity.isRemoved()) {
this.touch(entity);
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 3d1107d954d8dd040895908ddadf2c11c437a9ef..f0f83c4570c79ed88275631ee35aa20e5ef27748 100644
+index 13b1957f4338cc6bb406370e91ee58d7d4002148..99540c1866ee7f36edb7f29273d44f6a6013d879 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -422,6 +422,7 @@ public class PurpurWorldConfig {
+@@ -420,6 +420,7 @@ public class PurpurWorldConfig {
public boolean playerRidableInWater = false;
public boolean playerRemoveBindingWithWeakness = false;
public int shiftRightClickRepairsMendingPoints = 0;
@@ -46,7 +46,7 @@ index 3d1107d954d8dd040895908ddadf2c11c437a9ef..f0f83c4570c79ed88275631ee35aa20e
private void playerSettings() {
if (PurpurConfig.version < 19) {
boolean oldVal = getBoolean("gameplay-mechanics.player.idle-timeout.mods-target", idleTimeoutTargetPlayer);
-@@ -449,6 +450,7 @@ public class PurpurWorldConfig {
+@@ -445,6 +446,7 @@ public class PurpurWorldConfig {
playerRidableInWater = getBoolean("gameplay-mechanics.player.ridable-in-water", playerRidableInWater);
playerRemoveBindingWithWeakness = getBoolean("gameplay-mechanics.player.curse-of-binding.remove-with-weakness", playerRemoveBindingWithWeakness);
shiftRightClickRepairsMendingPoints = getInt("gameplay-mechanics.player.shift-right-click-repairs-mending-points", shiftRightClickRepairsMendingPoints);
diff --git a/patches/server/0239-Allow-void-trading.patch b/patches/server/0236-Allow-void-trading.patch
similarity index 87%
rename from patches/server/0239-Allow-void-trading.patch
rename to patches/server/0236-Allow-void-trading.patch
index 7d1e315f4..e23a7dff5 100644
--- a/patches/server/0239-Allow-void-trading.patch
+++ b/patches/server/0236-Allow-void-trading.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Allow void trading
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
-index 492a50f3b619753f8a353c739a3f10c44dfa7861..3c8585976bbfcb33c26ee5fde8448805e0f97e1a 100644
+index 5db8e4c8879d355843c196b17b8f39e9fe5d9a6a..cc45c828775ac8551fb1efa208f8acc9a79e7f49 100644
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
-@@ -2878,7 +2878,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
+@@ -2902,7 +2902,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
// Spigot Start
if (entity.getBukkitEntity() instanceof org.bukkit.inventory.InventoryHolder && (!(entity instanceof ServerPlayer) || entity.getRemovalReason() != Entity.RemovalReason.KILLED)) { // SPIGOT-6876: closeInventory clears death message
// Paper start
@@ -18,10 +18,10 @@ index 492a50f3b619753f8a353c739a3f10c44dfa7861..3c8585976bbfcb33c26ee5fde8448805
}
// Paper end
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index f0f83c4570c79ed88275631ee35aa20e5ef27748..6008732a98759ac23daab766ea986162b816945f 100644
+index 99540c1866ee7f36edb7f29273d44f6a6013d879..17d12dceec818dfbfb9bccf263295840e2c6bc04 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -423,6 +423,7 @@ public class PurpurWorldConfig {
+@@ -421,6 +421,7 @@ public class PurpurWorldConfig {
public boolean playerRemoveBindingWithWeakness = false;
public int shiftRightClickRepairsMendingPoints = 0;
public int playerExpPickupDelay = 2;
@@ -29,7 +29,7 @@ index f0f83c4570c79ed88275631ee35aa20e5ef27748..6008732a98759ac23daab766ea986162
private void playerSettings() {
if (PurpurConfig.version < 19) {
boolean oldVal = getBoolean("gameplay-mechanics.player.idle-timeout.mods-target", idleTimeoutTargetPlayer);
-@@ -451,6 +452,7 @@ public class PurpurWorldConfig {
+@@ -447,6 +448,7 @@ public class PurpurWorldConfig {
playerRemoveBindingWithWeakness = getBoolean("gameplay-mechanics.player.curse-of-binding.remove-with-weakness", playerRemoveBindingWithWeakness);
shiftRightClickRepairsMendingPoints = getInt("gameplay-mechanics.player.shift-right-click-repairs-mending-points", shiftRightClickRepairsMendingPoints);
playerExpPickupDelay = getInt("gameplay-mechanics.player.exp-pickup-delay-ticks", playerExpPickupDelay);
diff --git a/patches/server/0240-Configurable-phantom-size.patch b/patches/server/0237-Configurable-phantom-size.patch
similarity index 93%
rename from patches/server/0240-Configurable-phantom-size.patch
rename to patches/server/0237-Configurable-phantom-size.patch
index 54fe29305..5461c23e2 100644
--- a/patches/server/0240-Configurable-phantom-size.patch
+++ b/patches/server/0237-Configurable-phantom-size.patch
@@ -22,10 +22,10 @@ index ab9ed9acc394dedf2151b83ff5cf998e0e0be21e..355445b7f8972cb789d33f59d03c382f
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 6008732a98759ac23daab766ea986162b816945f..807ca55a5734fccb10b1aae2d99e0b37aeffc614 100644
+index 17d12dceec818dfbfb9bccf263295840e2c6bc04..599b52cdbccd3b58d0e33d726590b38dece45f96 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -2048,6 +2048,8 @@ public class PurpurWorldConfig {
+@@ -2039,6 +2039,8 @@ public class PurpurWorldConfig {
public boolean phantomFlamesOnSwoop = false;
public boolean phantomTakeDamageFromWater = false;
public boolean phantomAlwaysDropExp = false;
@@ -34,7 +34,7 @@ index 6008732a98759ac23daab766ea986162b816945f..807ca55a5734fccb10b1aae2d99e0b37
private void phantomSettings() {
phantomRidable = getBoolean("mobs.phantom.ridable", phantomRidable);
phantomRidableInWater = getBoolean("mobs.phantom.ridable-in-water", phantomRidableInWater);
-@@ -2084,6 +2086,13 @@ public class PurpurWorldConfig {
+@@ -2075,6 +2077,13 @@ public class PurpurWorldConfig {
phantomFlamesOnSwoop = getBoolean("mobs.phantom.flames-on-swoop", phantomFlamesOnSwoop);
phantomTakeDamageFromWater = getBoolean("mobs.phantom.takes-damage-from-water", phantomTakeDamageFromWater);
phantomAlwaysDropExp = getBoolean("mobs.phantom.always-drop-exp", phantomAlwaysDropExp);
diff --git a/patches/server/0241-Configurable-food-attributes.patch b/patches/server/0238-Configurable-food-attributes.patch
similarity index 98%
rename from patches/server/0241-Configurable-food-attributes.patch
rename to patches/server/0238-Configurable-food-attributes.patch
index f13cde73e..8fe5ba4f5 100644
--- a/patches/server/0241-Configurable-food-attributes.patch
+++ b/patches/server/0238-Configurable-food-attributes.patch
@@ -51,10 +51,10 @@ index b16d9e2eaa589f19c563ee70b1a56d67dbcdecb0..71beab673f04cd051c46ea37f8c84731
public static final FoodProperties BAKED_POTATO = (new FoodProperties.Builder()).nutrition(5).saturationMod(0.6F).build();
public static final FoodProperties BEEF = (new FoodProperties.Builder()).nutrition(3).saturationMod(0.3F).meat().build();
diff --git a/src/main/java/net/minecraft/world/item/Items.java b/src/main/java/net/minecraft/world/item/Items.java
-index 31f5ed9dd1727eee24804a384817d2b76a45676b..5fbb13ebef0ca66419f3e5006d19e4a5918a038a 100644
+index e83ea53da012f3dcaa1f53bf6082a17a69e6ee13..cf68dca4096556b0c2594c76fcf113419e56dae0 100644
--- a/src/main/java/net/minecraft/world/item/Items.java
+++ b/src/main/java/net/minecraft/world/item/Items.java
-@@ -1309,6 +1309,13 @@ public class Items {
+@@ -1367,6 +1367,13 @@ public class Items {
((BlockItem)item).registerBlocks(Item.BY_BLOCK, item);
}
diff --git a/patches/server/0242-Max-joins-per-second.patch b/patches/server/0239-Max-joins-per-second.patch
similarity index 100%
rename from patches/server/0242-Max-joins-per-second.patch
rename to patches/server/0239-Max-joins-per-second.patch
diff --git a/patches/server/0243-Configurable-minimum-demand-for-trades.patch b/patches/server/0240-Configurable-minimum-demand-for-trades.patch
similarity index 89%
rename from patches/server/0243-Configurable-minimum-demand-for-trades.patch
rename to patches/server/0240-Configurable-minimum-demand-for-trades.patch
index 993d75613..4920a4a88 100644
--- a/patches/server/0243-Configurable-minimum-demand-for-trades.patch
+++ b/patches/server/0240-Configurable-minimum-demand-for-trades.patch
@@ -9,10 +9,10 @@ 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 093b10bec1212d47f05e1270302436290cbd282e..b2aa0ff2f07590e8832098d6dea027f1d3d20026 100644
+index 9eaa0908a9251a53e9d0434a6bf5105033b6fcd2..7b685f44109c44d7779a1fbf0152031193175bec 100644
--- a/src/main/java/net/minecraft/world/entity/npc/Villager.java
+++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java
-@@ -546,7 +546,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
+@@ -544,7 +544,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
while (iterator.hasNext()) {
MerchantOffer merchantrecipe = (MerchantOffer) iterator.next();
@@ -40,10 +40,10 @@ index 4f7457578ab3118d10e0d5dfc23d79c9b20c2f44..e03ce53b93d1b9366f2a7f14f341750a
public ItemStack assemble() {
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 65a2db407937c887f00bdc7cc8a84b5eba8e0df5..8517c0b219ccd3cbeb457d8d244534efec89c9a1 100644
+index 599b52cdbccd3b58d0e33d726590b38dece45f96..5f57614f37c63e967ee1866bb11de79a1ccc9e24 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -2733,6 +2733,7 @@ public class PurpurWorldConfig {
+@@ -2724,6 +2724,7 @@ public class PurpurWorldConfig {
public boolean villagerTakeDamageFromWater = false;
public boolean villagerAllowTrading = true;
public boolean villagerAlwaysDropExp = false;
@@ -51,7 +51,7 @@ index 65a2db407937c887f00bdc7cc8a84b5eba8e0df5..8517c0b219ccd3cbeb457d8d244534ef
private void villagerSettings() {
villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable);
villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater);
-@@ -2753,6 +2754,7 @@ public class PurpurWorldConfig {
+@@ -2744,6 +2745,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/0244-Lobotomize-stuck-villagers.patch b/patches/server/0241-Lobotomize-stuck-villagers.patch
similarity index 83%
rename from patches/server/0244-Lobotomize-stuck-villagers.patch
rename to patches/server/0241-Lobotomize-stuck-villagers.patch
index 477fe7a60..74b630a13 100644
--- a/patches/server/0244-Lobotomize-stuck-villagers.patch
+++ b/patches/server/0241-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 b2aa0ff2f07590e8832098d6dea027f1d3d20026..3ec73049c8b681d2ff7f63623037e287adffc11b 100644
+index 7b685f44109c44d7779a1fbf0152031193175bec..52650c912b72de99a23eebf04c9a63945f04359c 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
@@ -15,9 +15,9 @@ index b2aa0ff2f07590e8832098d6dea027f1d3d20026..3ec73049c8b681d2ff7f63623037e287
+ private boolean isLobotomized = false; public boolean isLobotomized() { return this.isLobotomized; } // Purpur
+ private int notLobotomizedCount = 0; // Purpur
- public long nextGolemPanic = -1; // Pufferfish
-
-@@ -200,6 +202,47 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
+ public Villager(EntityType extends Villager> entityType, Level world) {
+ this(entityType, world, VillagerType.PLAINS);
+@@ -198,6 +200,47 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
return this.level().purpurConfig.villagerAlwaysDropExp;
}
@@ -65,7 +65,7 @@ index b2aa0ff2f07590e8832098d6dea027f1d3d20026..3ec73049c8b681d2ff7f63623037e287
@Override
public Brain getBrain() {
return (Brain) super.getBrain(); // CraftBukkit - decompile error
-@@ -297,14 +340,21 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
+@@ -294,14 +337,20 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
// Paper start
this.customServerAiStep(false);
}
@@ -73,25 +73,21 @@ index b2aa0ff2f07590e8832098d6dea027f1d3d20026..3ec73049c8b681d2ff7f63623037e287
+ protected void customServerAiStep(boolean inactive) { // Purpur - not final
// Paper end
this.level().getProfiler().push("villagerBrain");
-- // Pufferfish start
-- if (!inactive && (getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) { // Purpur - only use brain if no rider
-- this.getBrain().tick((ServerLevel) this.level(), this); // Paper
-+ // Purpur start
+ // Purpur start
+ if (this.level().purpurConfig.villagerLobotomizeEnabled) {
+ // treat as inactive if lobotomized
+ inactive = inactive || checkLobotomized();
+ } else {
-+ // clean up state for API
+ this.isLobotomized = false;
- }
-- // Pufferfish end
-+ if (!inactive && (getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Purpur - only use brain if no rider
-+ this.getBrain().tick((ServerLevel) this.level(), this); // Paper
-+ else if (this.isLobotomized && shouldRestock()) restock();
-+ // Purpur end
++ }
+ // if (!inactive && (getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) { // Purpur - only use brain if no rider // Purpur - TODO: Pufferfish
+ if (!inactive && (getRider() == null || !this.isControllable())) { // Purpur - only use brain if no rider
+ this.getBrain().tick((ServerLevel) this.level(), this); // Paper
+- }
++ } else if (this.isLobotomized && shouldRestock()) restock();
+ // Purpur end
this.level().getProfiler().pop();
if (this.assignProfessionWhenSpawned) {
- this.assignProfessionWhenSpawned = false;
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java
index 6c15d40979fd3e3d246a447c432b321fbf29ada3..6ace76a829c88e2e747dbbcce0a6582c615fc56d 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java
@@ -109,10 +105,10 @@ index 6c15d40979fd3e3d246a447c432b321fbf29ada3..6ace76a829c88e2e747dbbcce0a6582c
+ // Purpur end
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 8517c0b219ccd3cbeb457d8d244534efec89c9a1..b123c0505ab3924258aa7ed32262c0b6e99d0ec0 100644
+index 5f57614f37c63e967ee1866bb11de79a1ccc9e24..7f8851967625d9d3fd94d09af72888999a807668 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -2734,6 +2734,8 @@ public class PurpurWorldConfig {
+@@ -2725,6 +2725,8 @@ public class PurpurWorldConfig {
public boolean villagerAllowTrading = true;
public boolean villagerAlwaysDropExp = false;
public int villagerMinimumDemand = 0;
@@ -121,7 +117,7 @@ index 8517c0b219ccd3cbeb457d8d244534efec89c9a1..b123c0505ab3924258aa7ed32262c0b6
private void villagerSettings() {
villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable);
villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater);
-@@ -2755,6 +2757,17 @@ public class PurpurWorldConfig {
+@@ -2746,6 +2748,17 @@ 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/0245-Option-for-villager-display-trade-item.patch b/patches/server/0242-Option-for-villager-display-trade-item.patch
similarity index 91%
rename from patches/server/0245-Option-for-villager-display-trade-item.patch
rename to patches/server/0242-Option-for-villager-display-trade-item.patch
index c0108782f..c7e5db8e2 100644
--- a/patches/server/0245-Option-for-villager-display-trade-item.patch
+++ b/patches/server/0242-Option-for-villager-display-trade-item.patch
@@ -17,10 +17,10 @@ index c3e0b1f11b58668f9f24eb421abc340e1b49dfac..d809fa4f96e2c528075f544355397903
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index b123c0505ab3924258aa7ed32262c0b6e99d0ec0..0786e51fa84f0b4e8661c1ea9c76b0a7c00648dc 100644
+index 7f8851967625d9d3fd94d09af72888999a807668..00fde25fb74499e83039a812c6f525ceaecde0b0 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -2736,6 +2736,7 @@ public class PurpurWorldConfig {
+@@ -2727,6 +2727,7 @@ public class PurpurWorldConfig {
public int villagerMinimumDemand = 0;
public boolean villagerLobotomizeEnabled = false;
public int villagerLobotomizeCheckInterval = 100;
@@ -28,7 +28,7 @@ index b123c0505ab3924258aa7ed32262c0b6e99d0ec0..0786e51fa84f0b4e8661c1ea9c76b0a7
private void villagerSettings() {
villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable);
villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater);
-@@ -2768,6 +2769,7 @@ public class PurpurWorldConfig {
+@@ -2759,6 +2760,7 @@ public class PurpurWorldConfig {
}
villagerLobotomizeEnabled = getBoolean("mobs.villager.lobotomize.enabled", villagerLobotomizeEnabled);
villagerLobotomizeCheckInterval = getInt("mobs.villager.lobotomize.check-interval", villagerLobotomizeCheckInterval);
diff --git a/patches/server/0246-MC-238526-Fix-spawner-not-spawning-water-animals-cor.patch b/patches/server/0243-MC-238526-Fix-spawner-not-spawning-water-animals-cor.patch
similarity index 85%
rename from patches/server/0246-MC-238526-Fix-spawner-not-spawning-water-animals-cor.patch
rename to patches/server/0243-MC-238526-Fix-spawner-not-spawning-water-animals-cor.patch
index 9b6db0573..4f2afdd21 100644
--- a/patches/server/0246-MC-238526-Fix-spawner-not-spawning-water-animals-cor.patch
+++ b/patches/server/0243-MC-238526-Fix-spawner-not-spawning-water-animals-cor.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] MC-238526 - Fix spawner not spawning water animals correctly
diff --git a/src/main/java/net/minecraft/world/entity/animal/WaterAnimal.java b/src/main/java/net/minecraft/world/entity/animal/WaterAnimal.java
-index cd2ce5bcb8c30e4657cd0e340d80544c7e805905..c8c6fed3f93903bb5c6145930538d415f6f59738 100644
+index 827912174ee08cd19249797d351887149b25c880..5b02848ea9f14060353014cada2d55397609e5ac 100644
--- a/src/main/java/net/minecraft/world/entity/animal/WaterAnimal.java
+++ b/src/main/java/net/minecraft/world/entity/animal/WaterAnimal.java
-@@ -82,6 +82,6 @@ public abstract class WaterAnimal extends PathfinderMob {
+@@ -77,6 +77,6 @@ public abstract class WaterAnimal extends PathfinderMob {
i = world.getMinecraftWorld().paperConfig().entities.spawning.wateranimalSpawnHeight.maximum.or(i);
j = world.getMinecraftWorld().paperConfig().entities.spawning.wateranimalSpawnHeight.minimum.or(j);
// Paper end
@@ -17,10 +17,10 @@ index cd2ce5bcb8c30e4657cd0e340d80544c7e805905..c8c6fed3f93903bb5c6145930538d415
}
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 38d13eb230cfb33a450b8a9a1a3c6aa2efe5b053..db1e6276243ee849757bed15f8308474afe56790 100644
+index 00fde25fb74499e83039a812c6f525ceaecde0b0..3cdfee20a6521c056d20a95b2bf08a7b351245e6 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -998,8 +998,10 @@ public class PurpurWorldConfig {
+@@ -989,8 +989,10 @@ public class PurpurWorldConfig {
}
public boolean spawnerDeactivateByRedstone = false;
diff --git a/patches/server/0247-Config-for-mob-last-hurt-by-player-time.patch b/patches/server/0244-Config-for-mob-last-hurt-by-player-time.patch
similarity index 89%
rename from patches/server/0247-Config-for-mob-last-hurt-by-player-time.patch
rename to patches/server/0244-Config-for-mob-last-hurt-by-player-time.patch
index f4e3e022a..b692d41ff 100644
--- a/patches/server/0247-Config-for-mob-last-hurt-by-player-time.patch
+++ b/patches/server/0244-Config-for-mob-last-hurt-by-player-time.patch
@@ -5,10 +5,10 @@ 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 03e446851e90f38a3e61db3fbecc9ff256cc0ae2..c8dc1d1f67474a06f82385d6ab7d893e3cb115ef 100644
+index ccf94ec8c0fcff5d75365274f662ff24b3ade75d..0061b6214f87f61f0bb4ddeffed8f719554a6b43 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
-@@ -1546,13 +1546,13 @@ public abstract class LivingEntity extends Entity implements Attackable {
+@@ -1533,13 +1533,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;
@@ -25,10 +25,10 @@ index 03e446851e90f38a3e61db3fbecc9ff256cc0ae2..c8dc1d1f67474a06f82385d6ab7d893e
if (entityliving2 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 796c1b9725bdc2499c80da6f2f0024727ea028d0..9c94fd78cbd0d3ef0c4dd3678262126b6ed2847b 100644
+index 026e420b561afea5b3daa0f6bcf2cdfce6fb9e9a..5a3fce46328661965480ebcbc381de33b65cdb66 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
-@@ -453,7 +453,7 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity {
+@@ -454,7 +454,7 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity {
net.minecraft.server.level.ServerPlayer entityPlayer = killer == null ? null : ((CraftPlayer) killer).getHandle();
getHandle().lastHurtByPlayer = entityPlayer;
getHandle().lastHurtByMob = entityPlayer;
@@ -38,7 +38,7 @@ index 796c1b9725bdc2499c80da6f2f0024727ea028d0..9c94fd78cbd0d3ef0c4dd3678262126b
// Paper end
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 1dffbf68af69545c6de09eec0c34d160daa895a9..115d9870e89d3efc56d4c6da4cf282e695c47fba 100644
+index 3cdfee20a6521c056d20a95b2bf08a7b351245e6..0f39c1b722924bb1d8a3a6faaa1000391f36036f 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -142,6 +142,7 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0248-Anvil-repair-damage-options.patch b/patches/server/0245-Anvil-repair-damage-options.patch
similarity index 94%
rename from patches/server/0248-Anvil-repair-damage-options.patch
rename to patches/server/0245-Anvil-repair-damage-options.patch
index e6cd11410..737b3bc18 100644
--- a/patches/server/0248-Anvil-repair-damage-options.patch
+++ b/patches/server/0245-Anvil-repair-damage-options.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Anvil repair/damage options
diff --git a/src/main/java/net/minecraft/world/level/block/AnvilBlock.java b/src/main/java/net/minecraft/world/level/block/AnvilBlock.java
-index 5c5a3b169795bf8a527b316c666cbc2105c66622..020afeca950d2c7fb6c7b179d424548fd90f8b0d 100644
+index 9fca247f51e8b4d445f61ab5c16faf3928626deb..583bb1282fedcab75dbe4359a9f53b76a538d903 100644
--- a/src/main/java/net/minecraft/world/level/block/AnvilBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/AnvilBlock.java
-@@ -55,6 +55,54 @@ public class AnvilBlock extends FallingBlock {
+@@ -62,6 +62,54 @@ public class AnvilBlock extends FallingBlock {
@Override
public InteractionResult use(BlockState state, Level world, BlockPos pos, Player player, InteractionHand hand, BlockHitResult hit) {
@@ -64,10 +64,10 @@ index 5c5a3b169795bf8a527b316c666cbc2105c66622..020afeca950d2c7fb6c7b179d424548f
return InteractionResult.SUCCESS;
} else {
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index a5e9e56c86de0ae3b8053367dac777c94a990a30..6ae50abd3d1bb4e5ff6f8865ca6f4303c8144b0e 100644
+index 0f39c1b722924bb1d8a3a6faaa1000391f36036f..ccf92e6d5374003b590f578a7168b09c61824720 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -750,9 +750,13 @@ public class PurpurWorldConfig {
+@@ -746,9 +746,13 @@ public class PurpurWorldConfig {
public boolean anvilAllowColors = false;
public boolean anvilColorsUseMiniMessage;
diff --git a/patches/server/0249-Option-to-disable-turtle-egg-trampling-with-feather-.patch b/patches/server/0246-Option-to-disable-turtle-egg-trampling-with-feather-.patch
similarity index 89%
rename from patches/server/0249-Option-to-disable-turtle-egg-trampling-with-feather-.patch
rename to patches/server/0246-Option-to-disable-turtle-egg-trampling-with-feather-.patch
index 7889c0c86..d8b41af08 100644
--- a/patches/server/0249-Option-to-disable-turtle-egg-trampling-with-feather-.patch
+++ b/patches/server/0246-Option-to-disable-turtle-egg-trampling-with-feather-.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Option to disable turtle egg trampling with feather falling
diff --git a/src/main/java/net/minecraft/world/level/block/TurtleEggBlock.java b/src/main/java/net/minecraft/world/level/block/TurtleEggBlock.java
-index 8e975daca6a50c95d7fb620f2756b8bb2b7c7d6b..e23b920be6702ef6faf97b42fb8a87442707d6be 100644
+index 9756c84e073d9e99ade0ee94c586b8e0fa426138..2c0dcfc916f0845dc830a7ac9ffc828df20f27d0 100644
--- a/src/main/java/net/minecraft/world/level/block/TurtleEggBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/TurtleEggBlock.java
-@@ -211,7 +211,13 @@ public class TurtleEggBlock extends Block {
+@@ -218,7 +218,13 @@ public class TurtleEggBlock extends Block {
if (!(entity instanceof LivingEntity)) {
return false;
}
@@ -24,10 +24,10 @@ index 8e975daca6a50c95d7fb620f2756b8bb2b7c7d6b..e23b920be6702ef6faf97b42fb8a8744
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 6ae50abd3d1bb4e5ff6f8865ca6f4303c8144b0e..ce4f8f9661c6c0d09fa517861aae80559859f09f 100644
+index ccf92e6d5374003b590f578a7168b09c61824720..0b4c34daad630de9d2cdb207d8d9c4d5edd2cd8c 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -1026,12 +1026,14 @@ public class PurpurWorldConfig {
+@@ -1017,12 +1017,14 @@ public class PurpurWorldConfig {
public boolean turtleEggsBreakFromMinecarts = true;
public boolean turtleEggsBypassMobGriefing = false;
public int turtleEggsRandomTickCrackChance = 500;
diff --git a/patches/server/0250-Add-toggle-for-enchant-level-clamping.patch b/patches/server/0247-Add-toggle-for-enchant-level-clamping.patch
similarity index 95%
rename from patches/server/0250-Add-toggle-for-enchant-level-clamping.patch
rename to patches/server/0247-Add-toggle-for-enchant-level-clamping.patch
index 57cc0984b..685312949 100644
--- a/patches/server/0250-Add-toggle-for-enchant-level-clamping.patch
+++ b/patches/server/0247-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/world/item/ItemStack.java b/src/main/java/net/minecraft/world/item/ItemStack.java
-index 5532e166c7e010add65e5921722b50272c805c03..2776b124dd15e4c84edcfbf98ba44d53ef149e43 100644
+index 2b1decf36ff950d9572e3d8790e1f60ff84ce5fa..0505969be72d080c00733615ef5619fa2f4a36d4 100644
--- a/src/main/java/net/minecraft/world/item/ItemStack.java
+++ b/src/main/java/net/minecraft/world/item/ItemStack.java
-@@ -1209,7 +1209,7 @@ public final class ItemStack {
+@@ -1234,7 +1234,7 @@ public final class ItemStack {
ListTag nbttaglist = this.tag.getList("Enchantments", 10);
diff --git a/patches/server/0251-Skip-junit-tests-for-purpur-commands.patch b/patches/server/0248-Skip-junit-tests-for-purpur-commands.patch
similarity index 100%
rename from patches/server/0251-Skip-junit-tests-for-purpur-commands.patch
rename to patches/server/0248-Skip-junit-tests-for-purpur-commands.patch
diff --git a/patches/server/0252-Implement-configurable-search-radius-for-villagers-t.patch b/patches/server/0249-Implement-configurable-search-radius-for-villagers-t.patch
similarity index 87%
rename from patches/server/0252-Implement-configurable-search-radius-for-villagers-t.patch
rename to patches/server/0249-Implement-configurable-search-radius-for-villagers-t.patch
index 0aa265a28..48f8aa53a 100644
--- a/patches/server/0252-Implement-configurable-search-radius-for-villagers-t.patch
+++ b/patches/server/0249-Implement-configurable-search-radius-for-villagers-t.patch
@@ -6,10 +6,10 @@ 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 3ec73049c8b681d2ff7f63623037e287adffc11b..c889e5e0ba42eac860d25c76e5956471eb29be7e 100644
+index 52650c912b72de99a23eebf04c9a63945f04359c..a46fc13b3072b65dc9284ece6cbf63a743b5c1a7 100644
--- a/src/main/java/net/minecraft/world/entity/npc/Villager.java
+++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java
-@@ -1101,6 +1101,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
+@@ -1098,6 +1098,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
}
public void spawnGolemIfNeeded(ServerLevel world, long time, int requiredCount) {
@@ -18,10 +18,10 @@ index 3ec73049c8b681d2ff7f63623037e287adffc11b..c889e5e0ba42eac860d25c76e5956471
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 ecda4d9dcfb38189bb579b93f67047d5d0d00ae1..40bda43c2acbf41eb55cd358307dfd4c3e2c281a 100644
+index 0b4c34daad630de9d2cdb207d8d9c4d5edd2cd8c..3d94ddfe64251d7a154747cd3ab3fc7d703e0c05 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -2747,6 +2747,8 @@ public class PurpurWorldConfig {
+@@ -2738,6 +2738,8 @@ public class PurpurWorldConfig {
public boolean villagerLobotomizeEnabled = false;
public int villagerLobotomizeCheckInterval = 100;
public boolean villagerDisplayTradeItem = true;
@@ -30,7 +30,7 @@ index ecda4d9dcfb38189bb579b93f67047d5d0d00ae1..40bda43c2acbf41eb55cd358307dfd4c
private void villagerSettings() {
villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable);
villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater);
-@@ -2780,6 +2782,8 @@ public class PurpurWorldConfig {
+@@ -2771,6 +2773,8 @@ public class PurpurWorldConfig {
villagerLobotomizeEnabled = getBoolean("mobs.villager.lobotomize.enabled", villagerLobotomizeEnabled);
villagerLobotomizeCheckInterval = getInt("mobs.villager.lobotomize.check-interval", villagerLobotomizeCheckInterval);
villagerDisplayTradeItem = getBoolean("mobs.villager.display-trade-item", villagerDisplayTradeItem);
diff --git a/patches/server/0253-Stonecutter-damage.patch b/patches/server/0250-Stonecutter-damage.patch
similarity index 92%
rename from patches/server/0253-Stonecutter-damage.patch
rename to patches/server/0250-Stonecutter-damage.patch
index 41ac75f17..59f9b20ae 100644
--- a/patches/server/0253-Stonecutter-damage.patch
+++ b/patches/server/0250-Stonecutter-damage.patch
@@ -47,10 +47,10 @@ index 813916852774d6482791989252ecb67b945a8f84..4a5d2e263d2bbee96bde7012d3385fa3
// Purpur end
}
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 0a95842c53a9d0286c57bcb42db97e468e30fb7d..0882e67c5cf876e0fc58a4ca4accb4be40418983 100644
+index 77ae7b8ab24935d046cce1f8f7f476310876f9df..b683f3c2fcd37b17a732802738cd14be87065e54 100644
--- a/src/main/java/net/minecraft/world/level/block/StonecutterBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/StonecutterBlock.java
-@@ -92,4 +92,16 @@ public class StonecutterBlock extends Block {
+@@ -99,4 +99,16 @@ public class StonecutterBlock extends Block {
public boolean isPathfindable(BlockState state, BlockGetter world, BlockPos pos, PathComputationType type) {
return false;
}
@@ -68,10 +68,10 @@ index 0a95842c53a9d0286c57bcb42db97e468e30fb7d..0882e67c5cf876e0fc58a4ca4accb4be
+ // Purpur end
}
diff --git a/src/main/java/net/minecraft/world/level/pathfinder/WalkNodeEvaluator.java b/src/main/java/net/minecraft/world/level/pathfinder/WalkNodeEvaluator.java
-index d976a6df54c1e817def2d588692abe25a03ee0fa..ba57accc272958da4714896baeadb52c99383561 100644
+index 7702cd386247c1a850bb22ccf8c0724d5bec1020..29ec2f9a35dd73e8a6adf2e4edcfe543270520d8 100644
--- a/src/main/java/net/minecraft/world/level/pathfinder/WalkNodeEvaluator.java
+++ b/src/main/java/net/minecraft/world/level/pathfinder/WalkNodeEvaluator.java
-@@ -465,7 +465,7 @@ public class WalkNodeEvaluator extends NodeEvaluator {
+@@ -471,7 +471,7 @@ public class WalkNodeEvaluator extends NodeEvaluator {
return BlockPathTypes.BLOCKED;
} else {
// Paper end
@@ -80,7 +80,7 @@ index d976a6df54c1e817def2d588692abe25a03ee0fa..ba57accc272958da4714896baeadb52c
return BlockPathTypes.DANGER_OTHER;
}
-@@ -498,7 +498,7 @@ public class WalkNodeEvaluator extends NodeEvaluator {
+@@ -504,7 +504,7 @@ public class WalkNodeEvaluator extends NodeEvaluator {
} else if (!blockState.is(BlockTags.TRAPDOORS) && !blockState.is(Blocks.LILY_PAD) && !blockState.is(Blocks.BIG_DRIPLEAF)) {
if (blockState.is(Blocks.POWDER_SNOW)) {
return BlockPathTypes.POWDER_SNOW;
@@ -105,10 +105,10 @@ index 4d147845402a26957c905dd600bf0657bb7bd714..e78e809cc7644d5007b149d5940f8cc1
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 b964bad8d599e093ad312a9dedf1a33856ce9ec1..417322e7cf09eb56acf5fc398ce2319b54c4477a 100644
+index 3d94ddfe64251d7a154747cd3ab3fc7d703e0c05..6d8b078aba1296ec4b51352a367d80550b5ee1bf 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -1021,6 +1021,11 @@ public class PurpurWorldConfig {
+@@ -1012,6 +1012,11 @@ public class PurpurWorldConfig {
spongeAbsorbsWaterFromMud = getBoolean("blocks.sponge.absorbs-water-from-mud", spongeAbsorbsWaterFromMud);
}
diff --git a/patches/server/0254-Configurable-damage-settings-for-magma-blocks.patch b/patches/server/0251-Configurable-damage-settings-for-magma-blocks.patch
similarity index 88%
rename from patches/server/0254-Configurable-damage-settings-for-magma-blocks.patch
rename to patches/server/0251-Configurable-damage-settings-for-magma-blocks.patch
index 027a8ae10..1e5e78cd5 100644
--- a/patches/server/0254-Configurable-damage-settings-for-magma-blocks.patch
+++ b/patches/server/0251-Configurable-damage-settings-for-magma-blocks.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Configurable damage settings for magma blocks
diff --git a/src/main/java/net/minecraft/world/level/block/MagmaBlock.java b/src/main/java/net/minecraft/world/level/block/MagmaBlock.java
-index 1b766045687e4dcded5cbcc50b746c55b9a34e22..be365914856593bb3c4e1945cc990786072f2953 100644
+index 10f5ffacc72a5e0116e2599ca83ee57a5b1ce0eb..31e6468f639de3ed0b25c3bc4ee09333c2150e1b 100644
--- a/src/main/java/net/minecraft/world/level/block/MagmaBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/MagmaBlock.java
-@@ -22,7 +22,7 @@ public class MagmaBlock extends Block {
+@@ -29,7 +29,7 @@ public class MagmaBlock extends Block {
@Override
public void stepOn(Level world, BlockPos pos, BlockState state, Entity entity) {
@@ -18,10 +18,10 @@ index 1b766045687e4dcded5cbcc50b746c55b9a34e22..be365914856593bb3c4e1945cc990786
entity.hurt(world.damageSources().hotFloor(), 1.0F);
org.bukkit.craftbukkit.event.CraftEventFactory.blockDamage = null; // CraftBukkit
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 417322e7cf09eb56acf5fc398ce2319b54c4477a..93e601cad7c26024fe195ee5217c8d65c1b083e4 100644
+index 6d8b078aba1296ec4b51352a367d80550b5ee1bf..dff801d3deaa5fd22a245d0bf7112a2c4f7c4d2b 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -952,6 +952,13 @@ public class PurpurWorldConfig {
+@@ -948,6 +948,13 @@ public class PurpurWorldConfig {
pistonBlockPushLimit = getInt("blocks.piston.block-push-limit", pistonBlockPushLimit);
}
diff --git a/patches/server/0255-Add-config-for-snow-on-blue-ice.patch b/patches/server/0252-Add-config-for-snow-on-blue-ice.patch
similarity index 86%
rename from patches/server/0255-Add-config-for-snow-on-blue-ice.patch
rename to patches/server/0252-Add-config-for-snow-on-blue-ice.patch
index 102753e6d..b96e811a4 100644
--- a/patches/server/0255-Add-config-for-snow-on-blue-ice.patch
+++ b/patches/server/0252-Add-config-for-snow-on-blue-ice.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Add config for snow on blue ice
diff --git a/src/main/java/net/minecraft/world/level/block/SnowLayerBlock.java b/src/main/java/net/minecraft/world/level/block/SnowLayerBlock.java
-index 14e00c7feb1c051d56a3d27cd00dcef072dd771a..4952fb1aaaafb55baa0fddb389f966a120a4786c 100644
+index a3da9536c3a3ad33d1c795673bdd7b05d6534054..9b057f3967aae5d0ca621b19d1212db91aaaee22 100644
--- a/src/main/java/net/minecraft/world/level/block/SnowLayerBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/SnowLayerBlock.java
-@@ -81,6 +81,12 @@ public class SnowLayerBlock extends Block {
+@@ -88,6 +88,12 @@ public class SnowLayerBlock extends Block {
public boolean canSurvive(BlockState state, LevelReader world, BlockPos pos) {
BlockState iblockdata1 = world.getBlockState(pos.below());
@@ -22,10 +22,10 @@ index 14e00c7feb1c051d56a3d27cd00dcef072dd771a..4952fb1aaaafb55baa0fddb389f966a1
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 93e601cad7c26024fe195ee5217c8d65c1b083e4..ea082eed28b9d63514291a094ebd99b8670e7910 100644
+index dff801d3deaa5fd22a245d0bf7112a2c4f7c4d2b..4b4a2646264b558c56bf91e70a110133fb0997bb 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -933,9 +933,11 @@ public class PurpurWorldConfig {
+@@ -929,9 +929,11 @@ public class PurpurWorldConfig {
public boolean mobsSpawnOnPackedIce = true;
public boolean mobsSpawnOnBlueIce = true;
diff --git a/patches/server/0256-Skeletons-eat-wither-roses.patch b/patches/server/0253-Skeletons-eat-wither-roses.patch
similarity index 96%
rename from patches/server/0256-Skeletons-eat-wither-roses.patch
rename to patches/server/0253-Skeletons-eat-wither-roses.patch
index e53b7b39a..23605e916 100644
--- a/patches/server/0256-Skeletons-eat-wither-roses.patch
+++ b/patches/server/0253-Skeletons-eat-wither-roses.patch
@@ -94,10 +94,10 @@ index 9b43150a00d7fac85aa69f5a2dbffd0dfdae4b86..f4a47ac2c86cc95178922cce7320ba1e
+ // Purpur end
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 4076b32e2e35165634b6d328ffa3ab692f8c854f..9ee1258955e99fa0adacfdc56b8621a2dfee064b 100644
+index 4b4a2646264b558c56bf91e70a110133fb0997bb..f36c75217028eea8503c15df710e4cabb8fdd741 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -2429,6 +2429,7 @@ public class PurpurWorldConfig {
+@@ -2420,6 +2420,7 @@ public class PurpurWorldConfig {
public boolean skeletonTakeDamageFromWater = false;
public boolean skeletonAlwaysDropExp = false;
public double skeletonHeadVisibilityPercent = 0.5D;
@@ -105,7 +105,7 @@ index 4076b32e2e35165634b6d328ffa3ab692f8c854f..9ee1258955e99fa0adacfdc56b8621a2
private void skeletonSettings() {
skeletonRidable = getBoolean("mobs.skeleton.ridable", skeletonRidable);
skeletonRidableInWater = getBoolean("mobs.skeleton.ridable-in-water", skeletonRidableInWater);
-@@ -2442,6 +2443,7 @@ public class PurpurWorldConfig {
+@@ -2433,6 +2434,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/0257-Enchantment-Table-Persists-Lapis.patch b/patches/server/0254-Enchantment-Table-Persists-Lapis.patch
similarity index 93%
rename from patches/server/0257-Enchantment-Table-Persists-Lapis.patch
rename to patches/server/0254-Enchantment-Table-Persists-Lapis.patch
index ba2f7c030..24ba68ad3 100644
--- a/patches/server/0257-Enchantment-Table-Persists-Lapis.patch
+++ b/patches/server/0254-Enchantment-Table-Persists-Lapis.patch
@@ -71,10 +71,10 @@ index c5c509fbb915c60dfa95aac8510684d0b9f8b0ff..d604b7ec46f08993647979ed220a8484
});
}
diff --git a/src/main/java/net/minecraft/world/level/block/EnchantmentTableBlock.java b/src/main/java/net/minecraft/world/level/block/EnchantmentTableBlock.java
-index 839b7bc9392906dca384003468746963631fe095..286f34eef22a85be3fe9747dc3c3f9a7d51f437c 100644
+index 790cf30c2bfd4e2530ff563dfcf05e25554248b3..ba69e9b37ce9f2d8b439d471e6de770da38d6971 100644
--- a/src/main/java/net/minecraft/world/level/block/EnchantmentTableBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/EnchantmentTableBlock.java
-@@ -29,6 +29,8 @@ import net.minecraft.world.level.pathfinder.PathComputationType;
+@@ -30,6 +30,8 @@ import net.minecraft.world.level.pathfinder.PathComputationType;
import net.minecraft.world.phys.BlockHitResult;
import net.minecraft.world.phys.shapes.CollisionContext;
import net.minecraft.world.phys.shapes.VoxelShape;
@@ -82,8 +82,8 @@ index 839b7bc9392906dca384003468746963631fe095..286f34eef22a85be3fe9747dc3c3f9a7
+import net.minecraft.world.item.Items; // Purpur
public class EnchantmentTableBlock extends BaseEntityBlock {
- protected static final VoxelShape SHAPE = Block.box(0.0D, 0.0D, 0.0D, 16.0D, 12.0D, 16.0D);
-@@ -121,4 +123,18 @@ public class EnchantmentTableBlock extends BaseEntityBlock {
+ public static final MapCodec CODEC = simpleCodec(EnchantmentTableBlock::new);
+@@ -128,4 +130,18 @@ public class EnchantmentTableBlock extends BaseEntityBlock {
public boolean isPathfindable(BlockState state, BlockGetter world, BlockPos pos, PathComputationType type) {
return false;
}
@@ -146,10 +146,10 @@ index 65e1381bb2d10bd212463feb602c60f8fdb9ade1..b7370e64fd0d50e8725d7d5afc30af2e
+ // Purpur
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 40f127476d96b39ac107cb1d18dd08798612c952..9c90c8f1c6697a98049bf044ac061bb93e1a4363 100644
+index f36c75217028eea8503c15df710e4cabb8fdd741..c11fe39f7ae131eb2950b618aa9ac8900c916aa3 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -1464,6 +1464,11 @@ public class PurpurWorldConfig {
+@@ -1455,6 +1455,11 @@ public class PurpurWorldConfig {
elderGuardianAlwaysDropExp = getBoolean("mobs.elder_guardian.always-drop-exp", elderGuardianAlwaysDropExp);
}
diff --git a/patches/server/0258-Spark-Profiler.patch b/patches/server/0255-Spark-Profiler.patch
similarity index 100%
rename from patches/server/0258-Spark-Profiler.patch
rename to patches/server/0255-Spark-Profiler.patch
diff --git a/patches/server/0259-Option-to-disable-kick-for-out-of-order-chat.patch b/patches/server/0256-Option-to-disable-kick-for-out-of-order-chat.patch
similarity index 82%
rename from patches/server/0259-Option-to-disable-kick-for-out-of-order-chat.patch
rename to patches/server/0256-Option-to-disable-kick-for-out-of-order-chat.patch
index fb285b384..16a157569 100644
--- a/patches/server/0259-Option-to-disable-kick-for-out-of-order-chat.patch
+++ b/patches/server/0256-Option-to-disable-kick-for-out-of-order-chat.patch
@@ -5,18 +5,18 @@ Subject: [PATCH] Option to disable kick for out of order chat
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
-index 2152abc4ea04515a688af1dca8174f96a629f2fb..33944e586b8547a29ed5377a22b4c51067714d11 100644
+index ab20edfc54b37e06d5a775ec8e98f4875513bcae..70c8b4ac1d1a06af280dcecafa6ccf4093b69c13 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
-@@ -2342,7 +2342,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
+@@ -1715,7 +1715,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
+
do {
- instant1 = (Instant) this.lastChatTimeStamp.get();
- if (timestamp.isBefore(instant1)) {
+ if (!iterator.hasNext()) {
- return false;
+ return !org.purpurmc.purpur.PurpurConfig.kickForOutOfOrderChat; // Purpur
}
- } while (!this.lastChatTimeStamp.compareAndSet(instant1, timestamp));
+ voxelshape1 = (VoxelShape) iterator.next();
diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
index e78e809cc7644d5007b149d5940f8cc164a76975..ed9b2f0b55229848894d9d6b401d050cb031b893 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java
diff --git a/patches/server/0260-Config-for-sculk-shrieker-can_summon-state.patch b/patches/server/0257-Config-for-sculk-shrieker-can_summon-state.patch
similarity index 75%
rename from patches/server/0260-Config-for-sculk-shrieker-can_summon-state.patch
rename to patches/server/0257-Config-for-sculk-shrieker-can_summon-state.patch
index bd840ee3f..383d93854 100644
--- a/patches/server/0260-Config-for-sculk-shrieker-can_summon-state.patch
+++ b/patches/server/0257-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 02d01eabb9606ae8c3b76ad9fa4bb9a525e247b1..ce51fec4a874f9466f9966684c535315dbf40b9e 100644
+index 09c61eb5ba129e9630a756b452ef6aa61745c533..837c8399b2f490d98ca556e66018bfd471cf05bf 100644
--- a/src/main/java/net/minecraft/world/level/block/SculkShriekerBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/SculkShriekerBlock.java
-@@ -130,7 +130,7 @@ public class SculkShriekerBlock extends BaseEntityBlock implements SimpleWaterlo
+@@ -137,7 +137,7 @@ public class SculkShriekerBlock extends BaseEntityBlock implements SimpleWaterlo
@Nullable
@Override
public BlockState getStateForPlacement(BlockPlaceContext ctx) {
@@ -18,10 +18,10 @@ index 02d01eabb9606ae8c3b76ad9fa4bb9a525e247b1..ce51fec4a874f9466f9966684c535315
@Override
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 9c90c8f1c6697a98049bf044ac061bb93e1a4363..2f7a5fd20ace3f27edc79c0f4a7bb4e4a772b3f8 100644
+index c11fe39f7ae131eb2950b618aa9ac8900c916aa3..5c5681d74c272ab81370dc5daae485e0e9101adf 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -997,6 +997,11 @@ public class PurpurWorldConfig {
+@@ -993,6 +993,11 @@ public class PurpurWorldConfig {
fixSandDuping = getBoolean("blocks.sand.fix-duping", fixSandDuping);
}
@@ -30,6 +30,6 @@ index 9c90c8f1c6697a98049bf044ac061bb93e1a4363..2f7a5fd20ace3f27edc79c0f4a7bb4e4
+ sculkShriekerCanSummonDefault = getBoolean("blocks.sculk_shrieker.can-summon-default", sculkShriekerCanSummonDefault);
+ }
+
- public boolean shulkerBoxAllowOversizedStacks = false;
- private void shulkerBoxSettings() {
- shulkerBoxAllowOversizedStacks = getBoolean("blocks.shulker_box.allow-oversized-stacks", shulkerBoxAllowOversizedStacks);
+ public boolean signAllowColors = false;
+ private void signSettings() {
+ signAllowColors = getBoolean("blocks.sign.allow-colors", signAllowColors);
diff --git a/patches/server/0261-Config-to-not-let-coral-die.patch b/patches/server/0258-Config-to-not-let-coral-die.patch
similarity index 81%
rename from patches/server/0261-Config-to-not-let-coral-die.patch
rename to patches/server/0258-Config-to-not-let-coral-die.patch
index 9a3a983e5..e13af0fc3 100644
--- a/patches/server/0261-Config-to-not-let-coral-die.patch
+++ b/patches/server/0258-Config-to-not-let-coral-die.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Config to not let coral die
diff --git a/src/main/java/net/minecraft/world/level/block/BaseCoralPlantTypeBlock.java b/src/main/java/net/minecraft/world/level/block/BaseCoralPlantTypeBlock.java
-index 3d2b34c5a7c9b00c1164b4f89c2cbff81fc460eb..b5505e926e5cdb447de68e8eb8e46c97eb988e27 100644
+index 2a65c7b859b1126dbac9819a01ca2652e20498a9..3192edee23b899107b17e354ddfb3159ac2ef429 100644
--- a/src/main/java/net/minecraft/world/level/block/BaseCoralPlantTypeBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/BaseCoralPlantTypeBlock.java
-@@ -35,6 +35,7 @@ public class BaseCoralPlantTypeBlock extends Block implements SimpleWaterloggedB
+@@ -39,6 +39,7 @@ public abstract class BaseCoralPlantTypeBlock extends Block implements SimpleWat
}
protected static boolean scanForWater(BlockState state, BlockGetter world, BlockPos pos) {
@@ -17,10 +17,10 @@ index 3d2b34c5a7c9b00c1164b4f89c2cbff81fc460eb..b5505e926e5cdb447de68e8eb8e46c97
return true;
} else {
diff --git a/src/main/java/net/minecraft/world/level/block/CoralBlock.java b/src/main/java/net/minecraft/world/level/block/CoralBlock.java
-index 88faea00be60a519f56f975a5311df5e1eb3e6b8..cbb726ac367be81e27d3a86643baf7c4f0746edf 100644
+index 8fd8285e07de4a0457da507501e49a807542f3b1..e580c5a141bebdc45893b5abde01e633c864fc13 100644
--- a/src/main/java/net/minecraft/world/level/block/CoralBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/CoralBlock.java
-@@ -45,6 +45,7 @@ public class CoralBlock extends Block {
+@@ -59,6 +59,7 @@ public class CoralBlock extends Block {
}
protected boolean scanForWater(BlockGetter world, BlockPos pos) {
@@ -29,10 +29,10 @@ index 88faea00be60a519f56f975a5311df5e1eb3e6b8..cbb726ac367be81e27d3a86643baf7c4
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 2f7a5fd20ace3f27edc79c0f4a7bb4e4a772b3f8..4351793923ea16e3c3fe7ed547c1236cae0e952a 100644
+index 5c5681d74c272ab81370dc5daae485e0e9101adf..601452f16c7f41b609cc13026386d6f5d06ac92e 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -834,6 +834,11 @@ public class PurpurWorldConfig {
+@@ -830,6 +830,11 @@ public class PurpurWorldConfig {
composterBulkProcess = getBoolean("blocks.composter.sneak-to-bulk-process", composterBulkProcess);
}
diff --git a/patches/server/0262-Add-local-difficulty-api.patch b/patches/server/0259-Add-local-difficulty-api.patch
similarity index 85%
rename from patches/server/0262-Add-local-difficulty-api.patch
rename to patches/server/0259-Add-local-difficulty-api.patch
index 6555f6ab4..0ac1d7118 100644
--- a/patches/server/0262-Add-local-difficulty-api.patch
+++ b/patches/server/0259-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 90c76ddcb8af13409490b8976263d27a71954668..99df34c7efb003d63142a1cd191d863c5315b4cb 100644
+index e1fad381b861471a17529c246bb8a4a9c7646420..648be304b99793fcec850ee6f3965baf1cd679d8 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
-@@ -2354,6 +2354,12 @@ public class CraftWorld extends CraftRegionAccessor implements World {
+@@ -2360,6 +2360,12 @@ public class CraftWorld extends CraftRegionAccessor implements World {
return (this.getHandle().getDragonFight() == null) ? null : new CraftDragonBattle(this.getHandle().getDragonFight());
}
diff --git a/patches/server/0263-Add-toggle-for-RNG-manipulation.patch b/patches/server/0260-Add-toggle-for-RNG-manipulation.patch
similarity index 90%
rename from patches/server/0263-Add-toggle-for-RNG-manipulation.patch
rename to patches/server/0260-Add-toggle-for-RNG-manipulation.patch
index 59575ff50..8e300d86b 100644
--- a/patches/server/0263-Add-toggle-for-RNG-manipulation.patch
+++ b/patches/server/0260-Add-toggle-for-RNG-manipulation.patch
@@ -7,10 +7,10 @@ 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 bf48e496f4988f45ea8c92eb45544f44753e5738..af06a919673f2e4f41d1cd712caa5b002d12ae71 100644
+index c9dafb8ca9267bea2449bb92ab5808af453ad2b1..61aaf79bb631c37680d04168519a4e2e6af1ccc0 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
-@@ -594,7 +594,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {
+@@ -593,7 +593,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S
this.bb = Entity.INITIAL_AABB;
this.stuckSpeedMultiplier = Vec3.ZERO;
this.nextStep = 1.0F;
@@ -33,7 +33,7 @@ index 88c238e492b1081d1a64a3b6f05d7baa17e5d8c9..dd7f2beabf0edad4143ac2365ac04a22
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 4351793923ea16e3c3fe7ed547c1236cae0e952a..07b8826509d158e60ee6c3c847f7855b7469325f 100644
+index 601452f16c7f41b609cc13026386d6f5d06ac92e..4e8c250a1c41c82dbfbae69e8d48b4604d63139b 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -204,9 +204,11 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0264-Send-client-custom-name-of-BE.patch b/patches/server/0261-Send-client-custom-name-of-BE.patch
similarity index 100%
rename from patches/server/0264-Send-client-custom-name-of-BE.patch
rename to patches/server/0261-Send-client-custom-name-of-BE.patch
diff --git a/patches/server/0265-Allow-custom-ChatDecorators.patch b/patches/server/0262-Allow-custom-ChatDecorators.patch
similarity index 90%
rename from patches/server/0265-Allow-custom-ChatDecorators.patch
rename to patches/server/0262-Allow-custom-ChatDecorators.patch
index 7ff5882b7..67db06b22 100644
--- a/patches/server/0265-Allow-custom-ChatDecorators.patch
+++ b/patches/server/0262-Allow-custom-ChatDecorators.patch
@@ -6,10 +6,10 @@ Subject: [PATCH] Allow custom ChatDecorators
Requires NMS to utilize. I'll write an API for this once our upstreams calm down with the changes.
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
-index 7951d617accb093e650d0ca30e2088b5a795d2a2..219f4c9ca2dfa1f55d7c5f4443dab9844ebec4b9 100644
+index c3e3f70b560206b42b4b5eac4fa47540a899706d..a751b8dce17aae891fe0400f52ecdb6e3784ee0a 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
-@@ -2671,6 +2671,15 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop {
entityplayer.connection.suspendFlushing();
});
@@ -111,7 +129,7 @@ index cd319d1bddbe5f02e998c961905bcba777492371..bf5cc18304f464aec59f3982311a0a99
// Paper start - Folia scheduler API
((io.papermc.paper.threadedregions.scheduler.FoliaGlobalRegionScheduler) Bukkit.getGlobalRegionScheduler()).tick();
getAllLevels().forEach(level -> {
-@@ -1512,21 +1512,21 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop {
return ichunkaccess1;
-@@ -450,17 +450,17 @@ public class ServerChunkCache extends ChunkSource {
+@@ -445,17 +445,17 @@ public class ServerChunkCache extends ChunkSource {
public void save(boolean flush) {
this.runDistanceManagerUpdates();
@@ -370,7 +357,7 @@ index 5d26364c0f4ed03bd9994077683c93b9883e5327..03bde9d1c765700c872cc592fe414eb8
}
// Paper end
-@@ -490,22 +490,22 @@ public class ServerChunkCache extends ChunkSource {
+@@ -485,23 +485,23 @@ public class ServerChunkCache extends ChunkSource {
@Override
public void tick(BooleanSupplier shouldKeepTicking, boolean tickChunks) {
this.level.getProfiler().push("purge");
@@ -388,6 +375,7 @@ index 5d26364c0f4ed03bd9994077683c93b9883e5327..03bde9d1c765700c872cc592fe414eb8
this.tickChunks();
- this.level.timings.chunks.stopTiming(); // Paper - timings
+ //this.level.timings.chunks.stopTiming(); // Paper - timings // Purpur
+ this.chunkMap.tick();
}
- this.level.timings.doChunkUnload.startTiming(); // Spigot
@@ -399,44 +387,48 @@ index 5d26364c0f4ed03bd9994077683c93b9883e5327..03bde9d1c765700c872cc592fe414eb8
this.level.getProfiler().pop();
this.clearCache();
}
-@@ -529,7 +529,7 @@ public class ServerChunkCache extends ChunkSource {
- boolean flag1 = this.level.ticksPerSpawnCategory.getLong(org.bukkit.entity.SpawnCategory.ANIMAL) != 0L && worlddata.getGameTime() % this.level.ticksPerSpawnCategory.getLong(org.bukkit.entity.SpawnCategory.ANIMAL) == 0L; // CraftBukkit
+@@ -516,7 +516,7 @@ public class ServerChunkCache extends ChunkSource {
- gameprofilerfiller.push("naturalSpawnCount");
-- this.level.timings.countNaturalMobs.startTiming(); // Paper - timings
-+ //this.level.timings.countNaturalMobs.startTiming(); // Paper - timings // Purpur
- int l = this.distanceManager.getNaturalSpawnChunkCount();
- // Paper start - per player mob spawning
- NaturalSpawner.SpawnState spawnercreature_d; // moved down
-@@ -560,13 +560,13 @@ public class ServerChunkCache extends ChunkSource {
- // Pufferfish end
- }
- // Paper end
-- this.level.timings.countNaturalMobs.stopTiming(); // Paper - timings
-+ //this.level.timings.countNaturalMobs.stopTiming(); // Paper - timings // Purpur
+ gameprofilerfiller.push("pollingChunks");
+ gameprofilerfiller.push("filteringLoadedChunks");
+- if (this.level.getServer().tickRateManager().runsNormally()) this.level.timings.chunkTicks.startTiming(); // Paper
++ // if (this.level.getServer().tickRateManager().runsNormally()) this.level.timings.chunkTicks.startTiming(); // Paper // Purpur
- //this.lastSpawnState = spawnercreature_d; // Pufferfish - this is managed asynchronously
- gameprofilerfiller.popPush("filteringLoadedChunks");
- // Paper - optimise chunk tick iteration
- // Paper - optimise chunk tick iteration
-- this.level.timings.chunkTicks.startTiming(); // Paper
-+ //this.level.timings.chunkTicks.startTiming(); // Paper // Purpur
+ // Paper start - optimise chunk tick iteration
+ ChunkMap playerChunkMap = this.chunkMap;
+@@ -556,7 +556,7 @@ public class ServerChunkCache extends ChunkSource {
- // Paper - optimise chunk tick iteration
-
-@@ -672,17 +672,17 @@ public class ServerChunkCache extends ChunkSource {
+ if (this.level.getServer().tickRateManager().runsNormally()) {
+ gameprofilerfiller.popPush("naturalSpawnCount");
+- this.level.timings.countNaturalMobs.startTiming(); // Paper - timings
++ //this.level.timings.countNaturalMobs.startTiming(); // Paper - timings // Purpur
+ int k = this.distanceManager.getNaturalSpawnChunkCount();
+ // Paper start - per player mob spawning
+ int naturalSpawnChunkCount = k;
+@@ -581,7 +581,7 @@ public class ServerChunkCache extends ChunkSource {
+ spawnercreature_d = NaturalSpawner.createState(naturalSpawnChunkCount, this.level.getAllEntities(), this::getFullChunk, !this.level.paperConfig().entities.spawning.perPlayerMobSpawns ? new LocalMobCapCalculator(this.chunkMap) : null, false);
+ }
+ // Paper end
+- this.level.timings.countNaturalMobs.stopTiming(); // Paper - timings
++ // this.level.timings.countNaturalMobs.stopTiming(); // Paper - timings // Purpur
+
+ this.lastSpawnState = spawnercreature_d;
+ gameprofilerfiller.popPush("spawnAndTick");
+@@ -688,19 +688,19 @@ public class ServerChunkCache extends ChunkSource {
+ }
+ }
+ // Paper end - optimise chunk tick iteration
+- this.level.timings.chunkTicks.stopTiming(); // Paper
++ // this.level.timings.chunkTicks.stopTiming(); // Paper // Purpur
+
+ gameprofilerfiller.popPush("customSpawners");
+ if (flag) {
+- try (co.aikar.timings.Timing ignored = this.level.timings.miscMobSpawning.startTiming()) { // Paper - timings
++ //try (co.aikar.timings.Timing ignored = this.level.timings.miscMobSpawning.startTiming()) { // Paper - timings // Purpur
+ this.level.tickCustomSpawners(this.spawnEnemies, this.spawnFriendlies);
+- } // Paper - timings
++ //} // Paper - timings // Purpur
}
- }
- // Paper end - optimise chunk tick iteration
-- this.level.timings.chunkTicks.stopTiming(); // Paper
-+ //this.level.timings.chunkTicks.stopTiming(); // Paper // Purpur
- gameprofilerfiller.popPush("customSpawners");
- if (flag2) {
-- try (co.aikar.timings.Timing ignored = this.level.timings.miscMobSpawning.startTiming()) { // Paper - timings
-+ //try (co.aikar.timings.Timing ignored = this.level.timings.miscMobSpawning.startTiming()) { // Paper - timings // Purpur
- this.level.tickCustomSpawners(this.spawnEnemies, this.spawnFriendlies);
-- } // Paper - timings
-+ //} // Paper - timings // Purpur
}
gameprofilerfiller.popPush("broadcast");
@@ -446,7 +438,7 @@ index 5d26364c0f4ed03bd9994077683c93b9883e5327..03bde9d1c765700c872cc592fe414eb8
// Paper start - optimise chunk tick iteration
if (!this.chunkMap.needsChangeBroadcasting.isEmpty()) {
it.unimi.dsi.fastutil.objects.ReferenceOpenHashSet copy = this.chunkMap.needsChangeBroadcasting.clone();
-@@ -696,7 +696,7 @@ public class ServerChunkCache extends ChunkSource {
+@@ -714,7 +714,7 @@ public class ServerChunkCache extends ChunkSource {
}
}
// Paper end - optimise chunk tick iteration
@@ -456,19 +448,19 @@ index 5d26364c0f4ed03bd9994077683c93b9883e5327..03bde9d1c765700c872cc592fe414eb8
gameprofilerfiller.pop();
gameprofilerfiller.pop();
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
-index de8e4fb4e0dac35cda26aced583f7dbd7f670f56..d5837c675e033c7277656e026cb98d55b6668038 100644
+index cc45c828775ac8551fb1efa208f8acc9a79e7f49..7673c3be73a5e6527f04333047839edbaa778e8c 100644
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
-@@ -856,7 +856,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
- this.updateSkyBrightness();
- this.tickTime();
+@@ -867,7 +867,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
+ }
+
gameprofilerfiller.popPush("tickPending");
- this.timings.scheduledBlocks.startTiming(); // Paper
+ //this.timings.scheduledBlocks.startTiming(); // Paper // Purpur
- if (!this.isDebug()) {
+ if (!this.isDebug() && flag) {
j = this.getGameTime();
gameprofilerfiller.push("blockTicks");
-@@ -865,20 +865,20 @@ public class ServerLevel extends Level implements WorldGenLevel {
+@@ -876,24 +876,24 @@ public class ServerLevel extends Level implements WorldGenLevel {
this.fluidTicks.tick(j, 65536, this::tickFluid);
gameprofilerfiller.pop();
}
@@ -476,11 +468,14 @@ index de8e4fb4e0dac35cda26aced583f7dbd7f670f56..d5837c675e033c7277656e026cb98d55
+ //this.timings.scheduledBlocks.stopTiming(); // Paper // Purpur
gameprofilerfiller.popPush("raid");
-- this.timings.raids.startTiming(); // Paper - timings
-+ //this.timings.raids.startTiming(); // Paper - timings // Purpur
- this.raids.tick();
-- this.timings.raids.stopTiming(); // Paper - timings
-+ //this.timings.raids.stopTiming(); // Paper - timings // Purpur
+ if (flag) {
+- this.timings.raids.startTiming(); // Paper - timings
++ // this.timings.raids.startTiming(); // Paper - timings // Purpur
+ this.raids.tick();
+- this.timings.raids.stopTiming(); // Paper - timings
++ // this.timings.raids.stopTiming(); // Paper - timings // Purpur
+ }
+
gameprofilerfiller.popPush("chunkSource");
- this.timings.chunkProviderTick.startTiming(); // Paper - timings
+ //this.timings.chunkProviderTick.startTiming(); // Paper - timings // Purpur
@@ -488,33 +483,34 @@ index de8e4fb4e0dac35cda26aced583f7dbd7f670f56..d5837c675e033c7277656e026cb98d55
- this.timings.chunkProviderTick.stopTiming(); // Paper - timings
+ //this.timings.chunkProviderTick.stopTiming(); // Paper - timings // Purpur
gameprofilerfiller.popPush("blockEvents");
-- this.timings.doSounds.startTiming(); // Spigot
-+ //this.timings.doSounds.startTiming(); // Spigot // Purpur
- this.runBlockEvents();
-- this.timings.doSounds.stopTiming(); // Spigot
-+ //this.timings.doSounds.stopTiming(); // Spigot // Purpur
- this.handlingTick = false;
- gameprofilerfiller.pop();
- boolean flag = true || !this.players.isEmpty() || !this.getForcedChunks().isEmpty(); // CraftBukkit - this prevents entity cleanup, other issues on servers with no players
-@@ -889,7 +889,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
+ if (flag) {
+- this.timings.doSounds.startTiming(); // Spigot
++ // this.timings.doSounds.startTiming(); // Spigot // Purpur
+ this.runBlockEvents();
+- this.timings.doSounds.stopTiming(); // Spigot
++ // this.timings.doSounds.stopTiming(); // Spigot // Purpur
+ }
- if (flag || this.emptyTime++ < 300) {
+ this.handlingTick = false;
+@@ -906,7 +906,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
+
+ if (flag1 || this.emptyTime++ < 300) {
gameprofilerfiller.push("entities");
- this.timings.tickEntities.startTiming(); // Spigot
+ //this.timings.tickEntities.startTiming(); // Spigot // Purpur
- if (this.dragonFight != null) {
+ if (this.dragonFight != null && flag) {
gameprofilerfiller.push("dragonFight");
this.dragonFight.tick();
-@@ -897,7 +897,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
+@@ -914,7 +914,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
}
org.spigotmc.ActivationRange.activateEntities(this); // Spigot
- this.timings.entityTick.startTiming(); // Spigot
+ //this.timings.entityTick.startTiming(); // Spigot // Purpur
this.entityTickList.forEach((entity) -> {
- entity.activatedPriorityReset = false; // Pufferfish - DAB
if (!entity.isRemoved()) {
-@@ -938,8 +938,8 @@ public class ServerLevel extends Level implements WorldGenLevel {
+ if (false && this.shouldDiscardEntity(entity)) { // CraftBukkit - We prevent spawning in general, so this butchering is not needed
+@@ -941,8 +941,8 @@ public class ServerLevel extends Level implements WorldGenLevel {
}
}
});
@@ -525,16 +521,16 @@ index de8e4fb4e0dac35cda26aced583f7dbd7f670f56..d5837c675e033c7277656e026cb98d55
gameprofilerfiller.pop();
this.tickBlockEntities();
}
-@@ -1082,7 +1082,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
+@@ -1084,7 +1084,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
+ } // Paper
- // Paper start - optimise random block ticking
gameprofilerfiller.popPush("tickBlocks");
- timings.chunkTicksBlocks.startTiming(); // Paper
+ //timings.chunkTicksBlocks.startTiming(); // Paper // Purpur
if (randomTickSpeed > 0) {
+ // Paper start - optimize random block ticking
LevelChunkSection[] sections = chunk.getSections();
- final int minSection = io.papermc.paper.util.WorldUtil.getMinSection(this);
-@@ -1115,7 +1115,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
+@@ -1118,7 +1118,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
}
// Paper end - optimise random block ticking
@@ -543,7 +539,7 @@ index de8e4fb4e0dac35cda26aced583f7dbd7f670f56..d5837c675e033c7277656e026cb98d55
gameprofilerfiller.pop();
}
-@@ -1454,8 +1454,8 @@ public class ServerLevel extends Level implements WorldGenLevel {
+@@ -1462,8 +1462,8 @@ public class ServerLevel extends Level implements WorldGenLevel {
// Spigot end
// Paper start- timings
final boolean isActive = org.spigotmc.ActivationRange.checkIfActive(entity);
@@ -554,7 +550,7 @@ index de8e4fb4e0dac35cda26aced583f7dbd7f670f56..d5837c675e033c7277656e026cb98d55
// Paper end - timings
entity.setOldPosAndRot();
ProfilerFiller gameprofilerfiller = this.getProfiler();
-@@ -1471,7 +1471,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
+@@ -1479,7 +1479,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
entity.postTick(); // CraftBukkit
} else { entity.inactiveTick(); } // Paper - EAR 2
this.getProfiler().pop();
@@ -563,7 +559,7 @@ index de8e4fb4e0dac35cda26aced583f7dbd7f670f56..d5837c675e033c7277656e026cb98d55
Iterator iterator = entity.getPassengers().iterator();
while (iterator.hasNext()) {
-@@ -1494,8 +1494,8 @@ public class ServerLevel extends Level implements WorldGenLevel {
+@@ -1502,8 +1502,8 @@ public class ServerLevel extends Level implements WorldGenLevel {
if (passenger instanceof Player || this.entityTickList.contains(passenger)) {
// Paper - EAR 2
final boolean isActive = org.spigotmc.ActivationRange.checkIfActive(passenger);
@@ -574,7 +570,7 @@ index de8e4fb4e0dac35cda26aced583f7dbd7f670f56..d5837c675e033c7277656e026cb98d55
// Paper end
passenger.setOldPosAndRot();
++passenger.tickCount;
-@@ -1525,7 +1525,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
+@@ -1533,7 +1533,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
this.tickPassenger(passenger, entity2);
}
@@ -583,7 +579,7 @@ index de8e4fb4e0dac35cda26aced583f7dbd7f670f56..d5837c675e033c7277656e026cb98d55
}
} else {
passenger.stopRiding();
-@@ -1545,14 +1545,14 @@ public class ServerLevel extends Level implements WorldGenLevel {
+@@ -1553,14 +1553,14 @@ public class ServerLevel extends Level implements WorldGenLevel {
org.bukkit.Bukkit.getPluginManager().callEvent(new org.bukkit.event.world.WorldSaveEvent(getWorld()));
}
@@ -601,7 +597,7 @@ index de8e4fb4e0dac35cda26aced583f7dbd7f670f56..d5837c675e033c7277656e026cb98d55
// Copied from save()
// CraftBukkit start - moved from MinecraftServer.saveChunks
-@@ -1564,7 +1564,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
+@@ -1572,7 +1572,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
this.convertable.saveDataTag(this.server.registryAccess(), this.serverLevelData, this.server.getPlayerList().getSingleplayerData());
}
// CraftBukkit end
@@ -610,7 +606,7 @@ index de8e4fb4e0dac35cda26aced583f7dbd7f670f56..d5837c675e033c7277656e026cb98d55
}
// Paper end
-@@ -1578,7 +1578,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
+@@ -1586,7 +1586,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
if (!savingDisabled) {
org.bukkit.Bukkit.getPluginManager().callEvent(new org.bukkit.event.world.WorldSaveEvent(this.getWorld())); // CraftBukkit
@@ -619,7 +615,7 @@ index de8e4fb4e0dac35cda26aced583f7dbd7f670f56..d5837c675e033c7277656e026cb98d55
if (progressListener != null) {
progressListener.progressStartNoAbort(Component.translatable("menu.savingLevel"));
}
-@@ -1588,11 +1588,11 @@ public class ServerLevel extends Level implements WorldGenLevel {
+@@ -1596,11 +1596,11 @@ public class ServerLevel extends Level implements WorldGenLevel {
progressListener.progressStage(Component.translatable("menu.savingChunks"));
}
@@ -635,10 +631,10 @@ index de8e4fb4e0dac35cda26aced583f7dbd7f670f56..d5837c675e033c7277656e026cb98d55
} else if (close) { chunkproviderserver.close(false); } // Paper - rewrite chunk system
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
-index 33944e586b8547a29ed5377a22b4c51067714d11..4fa1b9a46566fcfbf9ca080bdecd2e912c01ac4f 100644
+index 70c8b4ac1d1a06af280dcecafa6ccf4093b69c13..7865288eee0950c346801cc20aea9071a31fc6dc 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
-@@ -2452,7 +2452,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
+@@ -2458,7 +2458,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
public void handleCommand(String s) { // Paper - private -> public
org.spigotmc.AsyncCatcher.catchOp("Command Dispatched Async: " + s); // Paper - Add async catcher
@@ -647,7 +643,7 @@ index 33944e586b8547a29ed5377a22b4c51067714d11..4fa1b9a46566fcfbf9ca080bdecd2e91
if ( org.spigotmc.SpigotConfig.logCommands ) // Spigot
this.LOGGER.info(this.player.getScoreboardName() + " issued server command: " + s);
-@@ -2462,7 +2462,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
+@@ -2468,7 +2468,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
this.cserver.getPluginManager().callEvent(event);
if (event.isCancelled()) {
@@ -656,7 +652,7 @@ index 33944e586b8547a29ed5377a22b4c51067714d11..4fa1b9a46566fcfbf9ca080bdecd2e91
return;
}
-@@ -2475,7 +2475,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
+@@ -2481,7 +2481,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
java.util.logging.Logger.getLogger(ServerGamePacketListenerImpl.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
return;
} finally {
@@ -666,10 +662,10 @@ index 33944e586b8547a29ed5377a22b4c51067714d11..4fa1b9a46566fcfbf9ca080bdecd2e91
}
// CraftBukkit end
diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java
-index cdb5ebf7ed24cdf0ab8e06a92bc2dd21f85008d9..182acaad79e14e5e120094916a0d295a4584de7a 100644
+index 0d75ccbf6c5cacd9ce2355d4dca2b1290a8da39f..2e3a43b92fb86e55a75a557663bc465e604c4156 100644
--- a/src/main/java/net/minecraft/server/players/PlayerList.java
+++ b/src/main/java/net/minecraft/server/players/PlayerList.java
-@@ -1270,7 +1270,7 @@ public abstract class PlayerList {
+@@ -1268,7 +1268,7 @@ public abstract class PlayerList {
public void saveAll(int interval) {
io.papermc.paper.util.MCUtil.ensureMain("Save Players" , () -> { // Paper - Ensure main
@@ -678,7 +674,7 @@ index cdb5ebf7ed24cdf0ab8e06a92bc2dd21f85008d9..182acaad79e14e5e120094916a0d295a
int numSaved = 0;
long now = MinecraftServer.currentTick;
for (int i = 0; i < this.players.size(); ++i) {
-@@ -1281,7 +1281,7 @@ public abstract class PlayerList {
+@@ -1279,7 +1279,7 @@ public abstract class PlayerList {
}
// Paper end
}
@@ -737,10 +733,10 @@ index fcdb9bde8e1605e30dde3e580491522d4b62cdc0..7094701d213c73ba47ace806962244c1
}
diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java
-index 80b4d8d1283c03681106853fd83bf6df0392c230..8b537022638648c11396c0ee638750c712a6230b 100644
+index aec194669dbb13563a83abb64df2f0b64cc64cc7..214a18320d450fc318593b147e0010c42977d421 100644
--- a/src/main/java/net/minecraft/world/level/Level.java
+++ b/src/main/java/net/minecraft/world/level/Level.java
-@@ -1304,15 +1304,15 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
+@@ -1311,15 +1311,15 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
ProfilerFiller gameprofilerfiller = this.getProfiler();
gameprofilerfiller.push("blockEntities");
@@ -757,9 +753,9 @@ index 80b4d8d1283c03681106853fd83bf6df0392c230..8b537022638648c11396c0ee638750c7
- this.timings.tileEntityTick.startTiming(); // Spigot
+ //this.timings.tileEntityTick.startTiming(); // Spigot // Purpur
// Spigot start
- // Iterator iterator = this.blockEntityTickers.iterator();
- int tilesThisCycle = 0;
-@@ -1345,7 +1345,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
+ // Iterator iterator = this.blockEntityTickers.iterator();
+ boolean flag = this.tickRateManager().runsNormally();
+@@ -1354,7 +1354,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
}
this.blockEntityTickers.removeAll(toRemove);
@@ -769,7 +765,7 @@ index 80b4d8d1283c03681106853fd83bf6df0392c230..8b537022638648c11396c0ee638750c7
co.aikar.timings.TimingHistory.tileEntityTicks += this.blockEntityTickers.size(); // Paper
gameprofilerfiller.pop();
diff --git a/src/main/java/net/minecraft/world/level/NaturalSpawner.java b/src/main/java/net/minecraft/world/level/NaturalSpawner.java
-index 9c2d62feff1816f5729060c6192269a5b2d34153..1e3349690d00c7889a381f7c65a3b5bf3de2ac5b 100644
+index 3cdddda9c0618e95288b81b975d499c8dd30c05f..6a5dddfd120760b3334d8a4c4ebde84744083392 100644
--- a/src/main/java/net/minecraft/world/level/NaturalSpawner.java
+++ b/src/main/java/net/minecraft/world/level/NaturalSpawner.java
@@ -133,7 +133,7 @@ public final class NaturalSpawner {
@@ -791,10 +787,10 @@ index 9c2d62feff1816f5729060c6192269a5b2d34153..1e3349690d00c7889a381f7c65a3b5bf
}
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 b9aca339851cdaa6325c04e5cea847904752c63c..88b7f814a1454841b1f1b27e9c7d66d64717a422 100644
+index fa170cc1ce7011d201295b89718292d696c7fc24..5e91f70a994ffa92e3aa794b52441790766cd774 100644
--- a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java
+++ b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java
-@@ -800,7 +800,7 @@ public class LevelChunk extends ChunkAccess {
+@@ -786,7 +786,7 @@ public class LevelChunk extends ChunkAccess {
this.chunkHolder.getEntityChunk().callEntitiesLoadEvent(); // Paper - rewrite chunk system
if (this.needsDecoration) {
@@ -803,7 +799,7 @@ index b9aca339851cdaa6325c04e5cea847904752c63c..88b7f814a1454841b1f1b27e9c7d66d6
this.needsDecoration = false;
java.util.Random random = new java.util.Random();
random.setSeed(this.level.getSeed());
-@@ -820,7 +820,7 @@ public class LevelChunk extends ChunkAccess {
+@@ -806,7 +806,7 @@ public class LevelChunk extends ChunkAccess {
}
}
server.getPluginManager().callEvent(new org.bukkit.event.world.ChunkPopulateEvent(bukkitChunk));
@@ -812,7 +808,7 @@ index b9aca339851cdaa6325c04e5cea847904752c63c..88b7f814a1454841b1f1b27e9c7d66d6
}
}
}
-@@ -1178,7 +1178,7 @@ public class LevelChunk extends ChunkAccess {
+@@ -1164,7 +1164,7 @@ public class LevelChunk extends ChunkAccess {
ProfilerFiller gameprofilerfiller = LevelChunk.this.level.getProfiler();
gameprofilerfiller.push(this::getType);
@@ -821,7 +817,7 @@ index b9aca339851cdaa6325c04e5cea847904752c63c..88b7f814a1454841b1f1b27e9c7d66d6
BlockState iblockdata = LevelChunk.this.getBlockState(blockposition);
if (this.blockEntity.getType().isValid(iblockdata)) {
-@@ -1200,7 +1200,7 @@ public class LevelChunk extends ChunkAccess {
+@@ -1186,7 +1186,7 @@ public class LevelChunk extends ChunkAccess {
// Paper end
// Spigot start
} finally {
@@ -831,7 +827,7 @@ index b9aca339851cdaa6325c04e5cea847904752c63c..88b7f814a1454841b1f1b27e9c7d66d6
}
}
diff --git a/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java b/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java
-index e5b8466fb2f8c98bdc81839d9c01cece42c39081..247b233978728d8a0007b494e1d1e0aee29f68c6 100644
+index d1b1bc4845fc9519fc892e962c3e7d89da3f14de..7902c649a54fccbb13531c01e052df87ec4a424a 100644
--- a/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java
+++ b/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java
@@ -513,10 +513,10 @@ public class CraftScheduler implements BukkitScheduler {
@@ -886,11 +882,11 @@ index ea26d9464644b5217879b8c21b4da28e57708dcb..5835dc236b3f5291a804f7fb14a12eb4
long getCreatedAt() {
diff --git a/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboardManager.java b/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboardManager.java
-index 891f850ea99dac1433f3e395e26be14c8abf2bfb..280ed3a3b61b3eadbb6f253cd4e058641e2c3d2e 100644
+index b3e1adeb932da9b3bed16acd94e2f16da48a7c72..d3ec817e95628f1fc8be4a29c9a0f13c7d5fd552 100644
--- a/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboardManager.java
+++ b/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboardManager.java
@@ -115,7 +115,7 @@ public final class CraftScoreboardManager implements ScoreboardManager {
- public void getScoreboardScores(ObjectiveCriteria criteria, String name, Consumer consumer) {
+ public void forAllObjectives(ObjectiveCriteria criteria, ScoreHolder holder, Consumer consumer) {
// Paper start - add timings for scoreboard search
// plugins leaking scoreboards will make this very expensive, let server owners debug it easily
- co.aikar.timings.MinecraftTimings.scoreboardScoreSearch.startTimingIfSync();
@@ -899,7 +895,7 @@ index 891f850ea99dac1433f3e395e26be14c8abf2bfb..280ed3a3b61b3eadbb6f253cd4e05864
// Paper end - add timings for scoreboard search
for (CraftScoreboard scoreboard : this.scoreboards) {
@@ -123,7 +123,7 @@ public final class CraftScoreboardManager implements ScoreboardManager {
- board.forAllObjectives(criteria, name, (score) -> consumer.accept(score));
+ board.forAllObjectives(criteria, holder, (score) -> consumer.accept(score));
}
} finally { // Paper start - add timings for scoreboard search
- co.aikar.timings.MinecraftTimings.scoreboardScoreSearch.stopTimingIfSync();
@@ -908,10 +904,10 @@ index 891f850ea99dac1433f3e395e26be14c8abf2bfb..280ed3a3b61b3eadbb6f253cd4e05864
// Paper end - add timings for scoreboard search
}
diff --git a/src/main/java/org/spigotmc/ActivationRange.java b/src/main/java/org/spigotmc/ActivationRange.java
-index a7ecbd77d0017a298b94cceeddc049eff713f60f..0b03dae85e6008283e68b07fa438daccf0e4f5fa 100644
+index 3fb2ae23bcbf0c397e91a958796f13a2dfedd152..a828dbdd755368b74501cc0bab2e38e7fde6f2bd 100644
--- a/src/main/java/org/spigotmc/ActivationRange.java
+++ b/src/main/java/org/spigotmc/ActivationRange.java
-@@ -170,7 +170,7 @@ public class ActivationRange
+@@ -166,7 +166,7 @@ public class ActivationRange
*/
public static void activateEntities(Level world)
{
@@ -920,7 +916,7 @@ index a7ecbd77d0017a298b94cceeddc049eff713f60f..0b03dae85e6008283e68b07fa438dacc
final int miscActivationRange = world.spigotConfig.miscActivationRange;
final int raiderActivationRange = world.spigotConfig.raiderActivationRange;
final int animalActivationRange = world.spigotConfig.animalActivationRange;
-@@ -250,7 +250,7 @@ public class ActivationRange
+@@ -227,7 +227,7 @@ public class ActivationRange
}
// Paper end
}
diff --git a/patches/server/0267-Remove-Mojang-Profiler.patch b/patches/server/0264-Remove-Mojang-Profiler.patch
similarity index 80%
rename from patches/server/0267-Remove-Mojang-Profiler.patch
rename to patches/server/0264-Remove-Mojang-Profiler.patch
index fabd4e667..244cd67f4 100644
--- a/patches/server/0267-Remove-Mojang-Profiler.patch
+++ b/patches/server/0264-Remove-Mojang-Profiler.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Remove Mojang Profiler
diff --git a/src/main/java/net/minecraft/commands/Commands.java b/src/main/java/net/minecraft/commands/Commands.java
-index af712f089e7919fa0bd3946866fd3486fab19f76..9caab6541a224dc8f729a7d720eccda7bd83ed53 100644
+index 428dd75450bdd5daf902a1fbaca7031a9bc585a8..c1202a56b560269e132eafd8bb12383473d4d33e 100644
--- a/src/main/java/net/minecraft/commands/Commands.java
+++ b/src/main/java/net/minecraft/commands/Commands.java
-@@ -152,7 +152,7 @@ public class Commands {
+@@ -165,7 +165,7 @@ public class Commands {
DamageCommand.register(this.dispatcher, commandRegistryAccess);
DataCommands.register(this.dispatcher);
DataPackCommand.register(this.dispatcher);
@@ -17,8 +17,8 @@ index af712f089e7919fa0bd3946866fd3486fab19f76..9caab6541a224dc8f729a7d720eccda7
DefaultGameModeCommands.register(this.dispatcher);
DifficultyCommand.register(this.dispatcher);
EffectCommands.register(this.dispatcher, commandRegistryAccess);
-@@ -323,9 +323,9 @@ public class Commands {
- public int performCommand(ParseResults parseresults, String s, String label) { // CraftBukkit
+@@ -341,9 +341,9 @@ public class Commands {
+ public void performCommand(ParseResults parseresults, String s, String label) { // CraftBukkit
CommandSourceStack commandlistenerwrapper = (CommandSourceStack) parseresults.getContext().getSource();
- commandlistenerwrapper.getServer().getProfiler().push(() -> {
@@ -26,23 +26,23 @@ index af712f089e7919fa0bd3946866fd3486fab19f76..9caab6541a224dc8f729a7d720eccda7
return "/" + s;
- });
+ });*/ // Purpur
+ ContextChain contextchain = this.finishParsing(parseresults, s, commandlistenerwrapper, label); // CraftBukkit // Paper - make finishParsing not static
- byte b0;
-
-@@ -408,7 +408,7 @@ public class Commands {
- b0 = 0;
+ try {
+@@ -372,7 +372,7 @@ public class Commands {
+ Commands.LOGGER.error("'/{}' threw an exception", s, exception);
}
} finally {
- commandlistenerwrapper.getServer().getProfiler().pop();
+ //commandlistenerwrapper.getServer().getProfiler().pop(); // Purpur
}
- return b0;
+ }
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
-index bf5cc18304f464aec59f3982311a0a99d9a9706b..926ba816e7bccec0d1b34c2f8fc3300be84df4c2 100644
+index f1037c50605f1bf0f5dad383e245d93a8bcf6f8b..e764ad7096852d8905422e8d0f140ed16c5b4498 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
-@@ -338,13 +338,13 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop {
+ return false;
+ } : this::haveTime);
- this.profiler.popPush("nextTickWait");
+ //this.profiler.popPush("nextTickWait"); // Purpur
this.mayHaveDelayedTasks = true;
- // Purpur start - tps catchup
- if (org.purpurmc.purpur.PurpurConfig.tpsCatchup) {
-@@ -1185,8 +1185,8 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 0 && this.tickCount % autosavePeriod == 0;
try {
this.isSaving = true;
-@@ -1429,7 +1429,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 0; // Paper
worldserver.hasRidableMoveEvent = org.purpurmc.purpur.event.entity.RidableMoveEvent.getHandlerList().getRegisteredListeners().length > 0; // Purpur
@@ -192,7 +194,7 @@ index bf5cc18304f464aec59f3982311a0a99d9a9706b..926ba816e7bccec0d1b34c2f8fc3300b
try {
//worldserver.timings.doTick.startTiming(); // Spigot // Purpur
-@@ -1595,17 +1595,17 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop {
this.executeBlocking(() -> {
this.saveDebugReport(path.resolve("server"));
-@@ -2550,40 +2550,40 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop functions, ResourceLocation label) {
+ private void executeTagFunctions(Collection> functions, ResourceLocation label) {
- ProfilerFiller gameprofilerfiller = this.server.getProfiler();
+ //ProfilerFiller gameprofilerfiller = this.server.getProfiler(); // Purpur
@@ -366,39 +367,37 @@ index a6a1b57b4327f5710e9ec5ebca35a47c11751d11..097ac55028d66ef9ab430ff5dd103db6
Iterator iterator = functions.iterator();
while (iterator.hasNext()) {
-@@ -72,7 +72,7 @@ public class ServerFunctionManager {
- this.execute(customfunction, this.getGameLoopSender());
+@@ -65,15 +65,15 @@ public class ServerFunctionManager {
+ this.execute(commandfunction, this.getGameLoopSender());
}
- this.server.getProfiler().pop();
+ //this.server.getProfiler().pop(); // Purpur
}
- public int execute(CommandFunction function, CommandSourceStack source) {
-@@ -195,10 +195,10 @@ public class ServerFunctionManager {
+ public void execute(CommandFunction function, CommandSourceStack source) {
+- ProfilerFiller gameprofilerfiller = this.server.getProfiler();
++ // ProfilerFiller gameprofilerfiller = this.server.getProfiler(); // Purpur
- try {
- ServerFunctionManager.QueuedCommand customfunctiondata_queuedcommand = (ServerFunctionManager.QueuedCommand) this.commandQueue.removeFirst();
-- ProfilerFiller gameprofilerfiller = ServerFunctionManager.this.server.getProfiler();
-+ //ProfilerFiller gameprofilerfiller = ServerFunctionManager.this.server.getProfiler(); // Purpur
+- gameprofilerfiller.push(() -> {
++ /*gameprofilerfiller.push(() -> { // Purpur
+ return "function " + function.id();
+- });
++ });*/ // Purpur
- Objects.requireNonNull(customfunctiondata_queuedcommand);
-- gameprofilerfiller.push(customfunctiondata_queuedcommand::toString);
-+ //gameprofilerfiller.push(customfunctiondata_queuedcommand::toString); // Purpur
- this.depth = customfunctiondata_queuedcommand.depth;
- customfunctiondata_queuedcommand.execute(ServerFunctionManager.this, this.commandQueue, i, this.tracer);
- if (this.abortCurrentDepth) {
-@@ -217,7 +217,7 @@ public class ServerFunctionManager {
+ try {
+ InstantiatedFunction instantiatedfunction = function.instantiate((CompoundTag) null, this.getDispatcher(), source);
+@@ -86,7 +86,7 @@ public class ServerFunctionManager {
+ } catch (Exception exception) {
+ ServerFunctionManager.LOGGER.warn("Failed to execute function {}", function.id(), exception);
+ } finally {
+- gameprofilerfiller.pop();
++ // gameprofilerfiller.pop(); // Purpur
+ }
- this.nestedCalls.clear();
- } finally {
-- ServerFunctionManager.this.server.getProfiler().pop();
-+ //ServerFunctionManager.this.server.getProfiler().pop(); // Purpur
- }
-
- ++j;
+ }
diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java
-index a428df846cc6f4b2168d0c3ffdba34b42734bea3..3771caa73b0b41428f3d629aca1f562df7bcfaff 100644
+index c5a4a6a61c160e1cc29ee3c7d03debc0f51ce204..710156f616afd0a9666b3eede98fb19c0f30e777 100644
--- a/src/main/java/net/minecraft/server/level/ChunkMap.java
+++ b/src/main/java/net/minecraft/server/level/ChunkMap.java
@@ -546,20 +546,20 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
@@ -427,10 +426,10 @@ index a428df846cc6f4b2168d0c3ffdba34b42734bea3..3771caa73b0b41428f3d629aca1f562d
public boolean hasWork() {
diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java
-index 03bde9d1c765700c872cc592fe414eb815956e47..43a46feb5fb4bf23d71bc4f6c08caa93b1959ffc 100644
+index 3c16bf34a63ca1391268da3678ea3b59fa5d4190..1a22b58e2ce7a4e7034898e9fe24f238d6a7ec22 100644
--- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java
+++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java
-@@ -279,16 +279,16 @@ public class ServerChunkCache extends ChunkSource {
+@@ -274,16 +274,16 @@ public class ServerChunkCache extends ChunkSource {
return ifLoaded;
}
// Paper end
@@ -450,7 +449,7 @@ index 03bde9d1c765700c872cc592fe414eb815956e47..43a46feb5fb4bf23d71bc4f6c08caa93
CompletableFuture> completablefuture = this.getChunkFutureMainThread(x, z, leastStatus, create, true); // Paper
ServerChunkCache.MainThreadExecutor chunkproviderserver_b = this.mainThreadProcessor;
-@@ -477,24 +477,24 @@ public class ServerChunkCache extends ChunkSource {
+@@ -472,24 +472,24 @@ public class ServerChunkCache extends ChunkSource {
// CraftBukkit start - modelled on below
public void purgeUnload() {
if (true) return; // Paper - tickets will be removed later, this behavior isn't really well accounted for by the chunk system
@@ -480,7 +479,7 @@ index 03bde9d1c765700c872cc592fe414eb815956e47..43a46feb5fb4bf23d71bc4f6c08caa93
if (tickChunks) {
//this.level.timings.chunks.startTiming(); // Paper - timings // Purpur
this.chunkMap.level.playerChunkLoader.tick(); // Paper - replace player chunk loader - this is mostly required to account for view distance changes
-@@ -503,10 +503,10 @@ public class ServerChunkCache extends ChunkSource {
+@@ -499,10 +499,10 @@ public class ServerChunkCache extends ChunkSource {
}
//this.level.timings.doChunkUnload.startTiming(); // Spigot // Purpur
@@ -493,51 +492,49 @@ index 03bde9d1c765700c872cc592fe414eb815956e47..43a46feb5fb4bf23d71bc4f6c08caa93
this.clearCache();
}
-@@ -521,14 +521,14 @@ public class ServerChunkCache extends ChunkSource {
- this.chunkMap.tick();
- } else {
- LevelData worlddata = this.level.getLevelData();
+@@ -512,10 +512,10 @@ public class ServerChunkCache extends ChunkSource {
+
+ this.lastInhabitedUpdate = i;
+ if (!this.level.isDebug()) {
- ProfilerFiller gameprofilerfiller = this.level.getProfiler();
+ //ProfilerFiller gameprofilerfiller = this.level.getProfiler(); // Purpur
- gameprofilerfiller.push("pollingChunks");
+- gameprofilerfiller.push("filteringLoadedChunks");
+ //gameprofilerfiller.push("pollingChunks"); // Purpur
- this.level.resetIceAndSnowTick(); // Pufferfish - reset ice & snow tick random
- int k = this.level.getGameRules().getInt(GameRules.RULE_RANDOMTICKING);
- boolean flag1 = this.level.ticksPerSpawnCategory.getLong(org.bukkit.entity.SpawnCategory.ANIMAL) != 0L && worlddata.getGameTime() % this.level.ticksPerSpawnCategory.getLong(org.bukkit.entity.SpawnCategory.ANIMAL) == 0L; // CraftBukkit
-
-- gameprofilerfiller.push("naturalSpawnCount");
-+ //gameprofilerfiller.push("naturalSpawnCount"); // Purpur
- //this.level.timings.countNaturalMobs.startTiming(); // Paper - timings // Purpur
- int l = this.distanceManager.getNaturalSpawnChunkCount();
- // Paper start - per player mob spawning
-@@ -563,14 +563,14 @@ public class ServerChunkCache extends ChunkSource {
- //this.level.timings.countNaturalMobs.stopTiming(); // Paper - timings // Purpur
-
- //this.lastSpawnState = spawnercreature_d; // Pufferfish - this is managed asynchronously
-- gameprofilerfiller.popPush("filteringLoadedChunks");
-+ //gameprofilerfiller.popPush("filteringLoadedChunks"); // Purpur
- // Paper - optimise chunk tick iteration
- // Paper - optimise chunk tick iteration
- //this.level.timings.chunkTicks.startTiming(); // Paper // Purpur
-
- // Paper - optimise chunk tick iteration
-
-- gameprofilerfiller.popPush("spawnAndTick");
-+ //gameprofilerfiller.popPush("spawnAndTick"); // Purpur
- boolean flag2 = this.level.getGameRules().getBoolean(GameRules.RULE_DOMOBSPAWNING) && !this.level.players().isEmpty(); // CraftBukkit
++ //gameprofilerfiller.push("filteringLoadedChunks"); // Purpur
+ // if (this.level.getServer().tickRateManager().runsNormally()) this.level.timings.chunkTicks.startTiming(); // Paper // Purpur
// Paper start - optimise chunk tick iteration
-@@ -673,14 +673,14 @@ public class ServerChunkCache extends ChunkSource {
- }
+@@ -555,7 +555,7 @@ public class ServerChunkCache extends ChunkSource {
// Paper end - optimise chunk tick iteration
- //this.level.timings.chunkTicks.stopTiming(); // Paper // Purpur
-- gameprofilerfiller.popPush("customSpawners");
-+ //gameprofilerfiller.popPush("customSpawners"); // Purpur
- if (flag2) {
- //try (co.aikar.timings.Timing ignored = this.level.timings.miscMobSpawning.startTiming()) { // Paper - timings // Purpur
- this.level.tickCustomSpawners(this.spawnEnemies, this.spawnFriendlies);
- //} // Paper - timings // Purpur
+
+ if (this.level.getServer().tickRateManager().runsNormally()) {
+- gameprofilerfiller.popPush("naturalSpawnCount");
++ // gameprofilerfiller.popPush("naturalSpawnCount"); // Purpur
+ //this.level.timings.countNaturalMobs.startTiming(); // Paper - timings // Purpur
+ int k = this.distanceManager.getNaturalSpawnChunkCount();
+ // Paper start - per player mob spawning
+@@ -584,7 +584,7 @@ public class ServerChunkCache extends ChunkSource {
+ // this.level.timings.countNaturalMobs.stopTiming(); // Paper - timings // Purpur
+
+ this.lastSpawnState = spawnercreature_d;
+- gameprofilerfiller.popPush("spawnAndTick");
++ //gameprofilerfiller.popPush("spawnAndTick"); // Purpur
+ boolean flag = this.level.getGameRules().getBoolean(GameRules.RULE_DOMOBSPAWNING) && !this.level.players().isEmpty(); // CraftBukkit
+
+ // Paper start - optimise chunk tick iteration
+@@ -690,7 +690,7 @@ public class ServerChunkCache extends ChunkSource {
+ // Paper end - optimise chunk tick iteration
+ // this.level.timings.chunkTicks.stopTiming(); // Paper // Purpur
+
+- gameprofilerfiller.popPush("customSpawners");
++ //gameprofilerfiller.popPush("customSpawners"); // Purpur
+ if (flag) {
+ //try (co.aikar.timings.Timing ignored = this.level.timings.miscMobSpawning.startTiming()) { // Paper - timings // Purpur
+ this.level.tickCustomSpawners(this.spawnEnemies, this.spawnFriendlies);
+@@ -698,7 +698,7 @@ public class ServerChunkCache extends ChunkSource {
+ }
}
- gameprofilerfiller.popPush("broadcast");
@@ -545,7 +542,7 @@ index 03bde9d1c765700c872cc592fe414eb815956e47..43a46feb5fb4bf23d71bc4f6c08caa93
// Paper - optimise chunk tick iteration
//this.level.timings.broadcastChunkUpdates.startTiming(); // Paper - timing // Purpur
// Paper start - optimise chunk tick iteration
-@@ -698,8 +698,8 @@ public class ServerChunkCache extends ChunkSource {
+@@ -716,8 +716,8 @@ public class ServerChunkCache extends ChunkSource {
// Paper end - optimise chunk tick iteration
//this.level.timings.broadcastChunkUpdates.stopTiming(); // Paper - timing // Purpur
// Paper - optimise chunk tick iteration
@@ -553,10 +550,10 @@ index 03bde9d1c765700c872cc592fe414eb815956e47..43a46feb5fb4bf23d71bc4f6c08caa93
- gameprofilerfiller.pop();
+ //gameprofilerfiller.pop(); // Purpur
+ //gameprofilerfiller.pop(); // Purpur
- this.chunkMap.tick();
}
-
-@@ -906,7 +906,7 @@ public class ServerChunkCache extends ChunkSource {
+ }
+
+@@ -889,7 +889,7 @@ public class ServerChunkCache extends ChunkSource {
@Override
protected void doRunTask(Runnable task) {
@@ -566,10 +563,10 @@ index 03bde9d1c765700c872cc592fe414eb815956e47..43a46feb5fb4bf23d71bc4f6c08caa93
}
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
-index ac28e6fecabe74fc0207ad4832ef166d5fc0b59b..1c8724fb56e790922c7e8fc73bc97442b7a6df83 100644
+index 7673c3be73a5e6527f04333047839edbaa778e8c..124868caa3c809875571f2c4a2ad0b7051dfd457 100644
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
-@@ -823,12 +823,12 @@ public class ServerLevel extends Level implements WorldGenLevel {
+@@ -825,16 +825,16 @@ public class ServerLevel extends Level implements WorldGenLevel {
}
public void tick(BooleanSupplier shouldKeepTicking) {
@@ -577,22 +574,26 @@ index ac28e6fecabe74fc0207ad4832ef166d5fc0b59b..1c8724fb56e790922c7e8fc73bc97442
+ //ProfilerFiller gameprofilerfiller = this.getProfiler(); // Purpur
this.handlingTick = true;
-- gameprofilerfiller.push("world border");
-+ //gameprofilerfiller.push("world border"); // Purpur
- this.getWorldBorder().tick();
-- gameprofilerfiller.popPush("weather");
-+ //gameprofilerfiller.popPush("weather"); // Purpur
- this.advanceWeatherCycle();
- int i = this.getGameRules().getInt(GameRules.RULE_PLAYERS_SLEEPING_PERCENTAGE);
- long j;
-@@ -855,32 +855,32 @@ public class ServerLevel extends Level implements WorldGenLevel {
+ TickRateManager tickratemanager = this.tickRateManager();
+ boolean flag = tickratemanager.runsNormally();
+
+ if (flag) {
+- gameprofilerfiller.push("world border");
++ // gameprofilerfiller.push("world border"); // Purpur
+ this.getWorldBorder().tick();
+- gameprofilerfiller.popPush("weather");
++ // gameprofilerfiller.popPush("weather"); // Purpur
+ this.advanceWeatherCycle();
+ }
+
+@@ -866,30 +866,30 @@ public class ServerLevel extends Level implements WorldGenLevel {
+ this.tickTime();
+ }
- this.updateSkyBrightness();
- this.tickTime();
- gameprofilerfiller.popPush("tickPending");
+ //gameprofilerfiller.popPush("tickPending"); // Purpur
//this.timings.scheduledBlocks.startTiming(); // Paper // Purpur
- if (!this.isDebug()) {
+ if (!this.isDebug() && flag) {
j = this.getGameTime();
- gameprofilerfiller.push("blockTicks");
+ //gameprofilerfiller.push("blockTicks"); // Purpur
@@ -607,9 +608,12 @@ index ac28e6fecabe74fc0207ad4832ef166d5fc0b59b..1c8724fb56e790922c7e8fc73bc97442
- gameprofilerfiller.popPush("raid");
+ //gameprofilerfiller.popPush("raid"); // Purpur
- //this.timings.raids.startTiming(); // Paper - timings // Purpur
- this.raids.tick();
- //this.timings.raids.stopTiming(); // Paper - timings // Purpur
+ if (flag) {
+ // this.timings.raids.startTiming(); // Paper - timings // Purpur
+ this.raids.tick();
+ // this.timings.raids.stopTiming(); // Paper - timings // Purpur
+ }
+
- gameprofilerfiller.popPush("chunkSource");
+ //gameprofilerfiller.popPush("chunkSource"); // Purpur
//this.timings.chunkProviderTick.startTiming(); // Paper - timings // Purpur
@@ -617,23 +621,26 @@ index ac28e6fecabe74fc0207ad4832ef166d5fc0b59b..1c8724fb56e790922c7e8fc73bc97442
//this.timings.chunkProviderTick.stopTiming(); // Paper - timings // Purpur
- gameprofilerfiller.popPush("blockEvents");
+ //gameprofilerfiller.popPush("blockEvents"); // Purpur
- //this.timings.doSounds.startTiming(); // Spigot // Purpur
- this.runBlockEvents();
- //this.timings.doSounds.stopTiming(); // Spigot // Purpur
+ if (flag) {
+ // this.timings.doSounds.startTiming(); // Spigot // Purpur
+ this.runBlockEvents();
+@@ -897,7 +897,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
+ }
+
this.handlingTick = false;
- gameprofilerfiller.pop();
+ //gameprofilerfiller.pop(); // Purpur
- boolean flag = true || !this.players.isEmpty() || !this.getForcedChunks().isEmpty(); // CraftBukkit - this prevents entity cleanup, other issues on servers with no players
+ boolean flag1 = true || !this.players.isEmpty() || !this.getForcedChunks().isEmpty(); // CraftBukkit - this prevents entity cleanup, other issues on servers with no players
- if (flag) {
-@@ -888,12 +888,12 @@ public class ServerLevel extends Level implements WorldGenLevel {
+ if (flag1) {
+@@ -905,12 +905,12 @@ public class ServerLevel extends Level implements WorldGenLevel {
}
- if (flag || this.emptyTime++ < 300) {
+ if (flag1 || this.emptyTime++ < 300) {
- gameprofilerfiller.push("entities");
+ //gameprofilerfiller.push("entities"); // Purpur
//this.timings.tickEntities.startTiming(); // Spigot // Purpur
- if (this.dragonFight != null) {
+ if (this.dragonFight != null && flag) {
- gameprofilerfiller.push("dragonFight");
+ //gameprofilerfiller.push("dragonFight"); // Purpur
this.dragonFight.tick();
@@ -642,10 +649,10 @@ index ac28e6fecabe74fc0207ad4832ef166d5fc0b59b..1c8724fb56e790922c7e8fc73bc97442
}
org.spigotmc.ActivationRange.activateEntities(this); // Spigot
-@@ -904,9 +904,9 @@ public class ServerLevel extends Level implements WorldGenLevel {
+@@ -920,9 +920,9 @@ public class ServerLevel extends Level implements WorldGenLevel {
if (false && this.shouldDiscardEntity(entity)) { // CraftBukkit - We prevent spawning in general, so this butchering is not needed
entity.discard();
- } else {
+ } else if (!tickratemanager.isEntityFrozen(entity)) {
- gameprofilerfiller.push("checkDespawn");
+ //gameprofilerfiller.push("checkDespawn"); // Purpur
entity.checkDespawn();
@@ -654,19 +661,13 @@ index ac28e6fecabe74fc0207ad4832ef166d5fc0b59b..1c8724fb56e790922c7e8fc73bc97442
if (true || this.chunkSource.chunkMap.getDistanceManager().inEntityTickingRange(entity.chunkPosition().toLong())) { // Paper - now always true if in the ticking list
Entity entity1 = entity.getVehicle();
-@@ -918,7 +918,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
+@@ -934,22 +934,21 @@ public class ServerLevel extends Level implements WorldGenLevel {
entity.stopRiding();
}
- gameprofilerfiller.push("tick");
+ //gameprofilerfiller.push("tick"); // Purpur
- // Pufferfish start - copied from this.guardEntityTick
- try {
- this.tickNonPassenger(entity); // Pufferfish - changed
-@@ -933,20 +933,19 @@ public class ServerLevel extends Level implements WorldGenLevel {
- // Paper end
- }
- // Pufferfish end
+ this.guardEntityTick(this::tickNonPassenger, entity);
- gameprofilerfiller.pop();
+ //gameprofilerfiller.pop(); // Purpur
}
@@ -687,7 +688,7 @@ index ac28e6fecabe74fc0207ad4832ef166d5fc0b59b..1c8724fb56e790922c7e8fc73bc97442
}
@Override
-@@ -1028,9 +1027,9 @@ public class ServerLevel extends Level implements WorldGenLevel {
+@@ -1029,9 +1028,9 @@ public class ServerLevel extends Level implements WorldGenLevel {
boolean flag = this.isRaining();
int j = chunkcoordintpair.getMinBlockX();
int k = chunkcoordintpair.getMinBlockZ();
@@ -698,8 +699,8 @@ index ac28e6fecabe74fc0207ad4832ef166d5fc0b59b..1c8724fb56e790922c7e8fc73bc97442
+ //gameprofilerfiller.push("thunder"); // Purpur
final BlockPos.MutableBlockPos blockposition = this.chunkTickMutablePosition; // Paper - use mutable to reduce allocation rate, final to force compile fail on change
- if (!this.paperConfig().environment.disableThunder && flag && this.isThundering() && this.spigotConfig.thunderChance > 0 && /*this.random.nextInt(this.spigotConfig.thunderChance) == 0 &&*/ chunk.shouldDoLightning(this.random)) { // Spigot // Paper - disable thunder // Pufferfish - replace random with shouldDoLightning
-@@ -1069,7 +1068,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
+ if (!this.paperConfig().environment.disableThunder && flag && this.isThundering() && this.spigotConfig.thunderChance > 0 && this.random.nextInt(this.spigotConfig.thunderChance) == 0) { // Spigot // Paper - disable thunder
+@@ -1070,7 +1069,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
}
}
@@ -708,16 +709,16 @@ index ac28e6fecabe74fc0207ad4832ef166d5fc0b59b..1c8724fb56e790922c7e8fc73bc97442
if (!this.paperConfig().environment.disableIceAndSnow) { // Paper
for (int l = 0; l < randomTickSpeed; ++l) {
-@@ -1081,7 +1080,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
+@@ -1083,7 +1082,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
+ }
} // Paper
- // Paper start - optimise random block ticking
- gameprofilerfiller.popPush("tickBlocks");
+ //gameprofilerfiller.popPush("tickBlocks"); // Purpur
//timings.chunkTicksBlocks.startTiming(); // Paper // Purpur
if (randomTickSpeed > 0) {
- LevelChunkSection[] sections = chunk.getSections();
-@@ -1116,7 +1115,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
+ // Paper start - optimize random block ticking
+@@ -1119,7 +1118,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
// Paper end - optimise random block ticking
//timings.chunkTicksBlocks.stopTiming(); // Paper // Purpur
@@ -725,8 +726,8 @@ index ac28e6fecabe74fc0207ad4832ef166d5fc0b59b..1c8724fb56e790922c7e8fc73bc97442
+ //gameprofilerfiller.pop(); // Purpur
}
- private void tickIceAndSnow(boolean raining, BlockPos.MutableBlockPos blockposition1, final LevelChunk chunk) { // Paper - optimise chunk ticking
-@@ -1458,19 +1457,19 @@ public class ServerLevel extends Level implements WorldGenLevel {
+ @VisibleForTesting
+@@ -1466,19 +1465,19 @@ public class ServerLevel extends Level implements WorldGenLevel {
//try { // Purpur
// Paper end - timings
entity.setOldPosAndRot();
@@ -751,7 +752,7 @@ index ac28e6fecabe74fc0207ad4832ef166d5fc0b59b..1c8724fb56e790922c7e8fc73bc97442
//} finally { timer.stopTiming(); } // Paper - timings // Purpur
Iterator iterator = entity.getPassengers().iterator();
-@@ -1499,12 +1498,12 @@ public class ServerLevel extends Level implements WorldGenLevel {
+@@ -1507,12 +1506,12 @@ public class ServerLevel extends Level implements WorldGenLevel {
// Paper end
passenger.setOldPosAndRot();
++passenger.tickCount;
@@ -768,7 +769,7 @@ index ac28e6fecabe74fc0207ad4832ef166d5fc0b59b..1c8724fb56e790922c7e8fc73bc97442
// Paper start - EAR 2
if (isActive) {
passenger.rideTick();
-@@ -1516,7 +1515,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
+@@ -1524,7 +1523,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
vehicle.positionRider(passenger);
}
// Paper end - EAR 2
@@ -778,10 +779,10 @@ index ac28e6fecabe74fc0207ad4832ef166d5fc0b59b..1c8724fb56e790922c7e8fc73bc97442
while (iterator.hasNext()) {
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java
-index e91f5203478623a6b50ad28236e265bd599ce999..70d952fedba4b9bab44e0e6de94d60b894538ce7 100644
+index 1093ef4e97d3bc84802d4fc96a6f95a5a24624b9..adbce4f4334c8857f0ab2fec910ba3883582256b 100644
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
-@@ -1235,7 +1235,7 @@ public class ServerPlayer extends Player {
+@@ -1239,7 +1239,7 @@ public class ServerPlayer extends Player {
PortalInfo shapedetectorshape = this.findDimensionEntryPoint(worldserver);
if (shapedetectorshape != null) {
@@ -790,7 +791,7 @@ index e91f5203478623a6b50ad28236e265bd599ce999..70d952fedba4b9bab44e0e6de94d60b8
worldserver = shapedetectorshape.world; // CraftBukkit
if (worldserver == null) { } else // CraftBukkit - empty to fall through to null to event
if (resourcekey == LevelStem.OVERWORLD && worldserver.getTypeKey() == LevelStem.NETHER) { // CraftBukkit
-@@ -1258,8 +1258,8 @@ public class ServerPlayer extends Player {
+@@ -1262,8 +1262,8 @@ public class ServerPlayer extends Player {
worldserver = ((CraftWorld) exit.getWorld()).getHandle();
// CraftBukkit end
@@ -801,7 +802,7 @@ index e91f5203478623a6b50ad28236e265bd599ce999..70d952fedba4b9bab44e0e6de94d60b8
if (true) { // CraftBukkit
this.isChangingDimension = true; // CraftBukkit - Set teleport invulnerability only if player changing worlds
-@@ -1277,7 +1277,7 @@ public class ServerPlayer extends Player {
+@@ -1281,7 +1281,7 @@ public class ServerPlayer extends Player {
this.connection.teleport(exit); // CraftBukkit - use internal teleport without event
this.connection.resetPosition();
worldserver.addDuringPortalTeleport(this);
@@ -811,7 +812,7 @@ index e91f5203478623a6b50ad28236e265bd599ce999..70d952fedba4b9bab44e0e6de94d60b8
this.connection.send(new ClientboundPlayerAbilitiesPacket(this.getAbilities()));
playerlist.sendLevelInfo(this, worldserver);
diff --git a/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java
-index 61e794f63c6ec9b19ff0e75924470ea9a1db442e..b19c59a87d4136da583a0b687f6b27fef3456f09 100644
+index 04b9f56134a24385468c16c61cf84327263dcb88..83b79a93acb8387d6d432f8e816acf50bfb89832 100644
--- a/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java
@@ -209,7 +209,7 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack
@@ -1037,10 +1038,10 @@ index 2e6e8eac987c4ef6b2dcd3de592d8a51d2b29792..863343a87fe34d72f04af89d75268b47
};
}
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
-index 1edc85fd226df294e4c6880dc26591a298c8789b..c8e410dd79a61865eb7610bd038af17b540f8159 100644
+index 61aaf79bb631c37680d04168519a4e2e6af1ccc0..82f649715a566a5bbbbc175877bd344d96e41a2d 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
-@@ -842,7 +842,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {
+@@ -835,7 +835,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S
// CraftBukkit end
public void baseTick() {
@@ -1049,7 +1050,7 @@ index 1edc85fd226df294e4c6880dc26591a298c8789b..c8e410dd79a61865eb7610bd038af17b
if (firstTick && this instanceof net.minecraft.world.entity.NeutralMob neutralMob) neutralMob.tickInitialPersistentAnger(level); // Paper - Update last hurt when ticking
this.feetBlockState = null;
if (this.isPassenger() && this.getVehicle().isRemoved()) {
-@@ -903,7 +903,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {
+@@ -896,7 +896,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S
}
this.firstTick = false;
@@ -1058,7 +1059,7 @@ index 1edc85fd226df294e4c6880dc26591a298c8789b..c8e410dd79a61865eb7610bd038af17b
}
public void setSharedFlagOnFire(boolean onFire) {
-@@ -1122,7 +1122,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {
+@@ -1115,7 +1115,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S
}
}
@@ -1067,7 +1068,7 @@ index 1edc85fd226df294e4c6880dc26591a298c8789b..c8e410dd79a61865eb7610bd038af17b
if (this.stuckSpeedMultiplier.lengthSqr() > 1.0E-7D) {
movement = movement.multiply(this.stuckSpeedMultiplier);
this.stuckSpeedMultiplier = Vec3.ZERO;
-@@ -1131,7 +1131,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {
+@@ -1124,7 +1124,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S
// Paper start - ignore movement changes while inactive.
if (isTemporarilyActive && !(this instanceof ItemEntity || this instanceof net.minecraft.world.entity.vehicle.AbstractMinecart) && movement == getDeltaMovement() && movementType == MoverType.SELF) {
setDeltaMovement(Vec3.ZERO);
@@ -1076,7 +1077,7 @@ index 1edc85fd226df294e4c6880dc26591a298c8789b..c8e410dd79a61865eb7610bd038af17b
return;
}
// Paper end
-@@ -1152,8 +1152,8 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {
+@@ -1145,8 +1145,8 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S
this.setPos(this.getX() + vec3d1.x, this.getY() + vec3d1.y, this.getZ() + vec3d1.z);
}
@@ -1087,7 +1088,7 @@ index 1edc85fd226df294e4c6880dc26591a298c8789b..c8e410dd79a61865eb7610bd038af17b
boolean flag = !Mth.equal(movement.x, vec3d1.x);
boolean flag1 = !Mth.equal(movement.z, vec3d1.z);
-@@ -1172,7 +1172,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {
+@@ -1165,7 +1165,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S
this.checkFallDamage(vec3d1.y, this.onGround(), iblockdata, blockposition);
if (this.isRemoved()) {
@@ -1096,7 +1097,7 @@ index 1edc85fd226df294e4c6880dc26591a298c8789b..c8e410dd79a61865eb7610bd038af17b
} else {
if (this.horizontalCollision) {
Vec3 vec3d2 = this.getDeltaMovement();
-@@ -1310,7 +1310,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {
+@@ -1303,7 +1303,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S
this.setRemainingFireTicks(-this.getFireImmuneTicks());
}
@@ -1105,7 +1106,7 @@ index 1edc85fd226df294e4c6880dc26591a298c8789b..c8e410dd79a61865eb7610bd038af17b
}
}
// Paper start - detailed watchdog information
-@@ -3163,7 +3163,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {
+@@ -3180,7 +3180,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S
ServerLevel worldserver1 = minecraftserver.getLevel(resourcekey);
if (true && !this.isPassenger() && this.portalTime++ >= i) { // CraftBukkit
@@ -1114,7 +1115,7 @@ index 1edc85fd226df294e4c6880dc26591a298c8789b..c8e410dd79a61865eb7610bd038af17b
this.portalTime = i;
// Paper start
io.papermc.paper.event.entity.EntityPortalReadyEvent event = new io.papermc.paper.event.entity.EntityPortalReadyEvent(this.getBukkitEntity(), worldserver1 == null ? null : worldserver1.getWorld(), org.bukkit.PortalType.NETHER);
-@@ -3181,7 +3181,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {
+@@ -3198,7 +3198,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S
}
} // Paper
// CraftBukkit end
@@ -1123,7 +1124,7 @@ index 1edc85fd226df294e4c6880dc26591a298c8789b..c8e410dd79a61865eb7610bd038af17b
}
this.isInsidePortal = false;
-@@ -3656,14 +3656,14 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {
+@@ -3673,14 +3673,14 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S
}
// Paper end
if (this.level() instanceof ServerLevel && !this.isRemoved()) {
@@ -1140,7 +1141,7 @@ index 1edc85fd226df294e4c6880dc26591a298c8789b..c8e410dd79a61865eb7610bd038af17b
PortalInfo shapedetectorshape = (location == null) ? this.findDimensionEntryPoint(worldserver) : new PortalInfo(new Vec3(location.x(), location.y(), location.z()), Vec3.ZERO, this.yRot, this.xRot, worldserver, null); // CraftBukkit
if (shapedetectorshape == null) {
-@@ -3702,7 +3702,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {
+@@ -3719,7 +3719,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S
this.unRide();
// CraftBukkit end
@@ -1149,7 +1150,7 @@ index 1edc85fd226df294e4c6880dc26591a298c8789b..c8e410dd79a61865eb7610bd038af17b
// Paper start - Change lead drop timing to prevent dupe
if (this instanceof Mob) {
((Mob) this).dropLeash(true, true); // Paper drop lead
-@@ -3725,10 +3725,10 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {
+@@ -3746,10 +3746,10 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S
}
this.removeAfterChangingDimensions();
@@ -1163,7 +1164,7 @@ index 1edc85fd226df294e4c6880dc26591a298c8789b..c8e410dd79a61865eb7610bd038af17b
}
} else {
diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
-index 8ef2540b295a6cb9a3b79b3481336bfd59d1dbba..f3ae27e860a5cb0c622b7c419a70b2c0998f230b 100644
+index 0061b6214f87f61f0bb4ddeffed8f719554a6b43..3af72be980ed6cab704eedadeb9a9577aca25fc1 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
@@ -410,7 +410,7 @@ public abstract class LivingEntity extends Entity implements Attackable {
@@ -1184,7 +1185,7 @@ index 8ef2540b295a6cb9a3b79b3481336bfd59d1dbba..f3ae27e860a5cb0c622b7c419a70b2c0
}
public boolean canSpawnSoulSpeedParticle() {
-@@ -3167,10 +3167,10 @@ public abstract class LivingEntity extends Entity implements Attackable {
+@@ -3138,10 +3138,10 @@ public abstract class LivingEntity extends Entity implements Attackable {
}
this.run += (f3 - this.run) * 0.3F;
@@ -1198,7 +1199,7 @@ index 8ef2540b295a6cb9a3b79b3481336bfd59d1dbba..f3ae27e860a5cb0c622b7c419a70b2c0
// Paper start - stop large pitch and yaw changes from crashing the server
this.yRotO += Math.round((this.getYRot() - this.yRotO) / 360.0F) * 360.0F;
-@@ -3182,7 +3182,7 @@ public abstract class LivingEntity extends Entity implements Attackable {
+@@ -3153,7 +3153,7 @@ public abstract class LivingEntity extends Entity implements Attackable {
this.yHeadRotO += Math.round((this.yHeadRot - this.yHeadRotO) / 360.0F) * 360.0F;
// Paper end
@@ -1207,7 +1208,7 @@ index 8ef2540b295a6cb9a3b79b3481336bfd59d1dbba..f3ae27e860a5cb0c622b7c419a70b2c0
this.animStep += f2;
if (this.isFallFlying()) {
++this.fallFlyTicks;
-@@ -3472,19 +3472,19 @@ public abstract class LivingEntity extends Entity implements Attackable {
+@@ -3448,19 +3448,19 @@ public abstract class LivingEntity extends Entity implements Attackable {
}
this.setDeltaMovement(d0, d1, d2);
@@ -1232,7 +1233,7 @@ index 8ef2540b295a6cb9a3b79b3481336bfd59d1dbba..f3ae27e860a5cb0c622b7c419a70b2c0
if (this.jumping && this.isAffectedByFluids()) {
double d3;
-@@ -3511,8 +3511,8 @@ public abstract class LivingEntity extends Entity implements Attackable {
+@@ -3487,8 +3487,8 @@ public abstract class LivingEntity extends Entity implements Attackable {
this.noJumpDelay = 0;
}
@@ -1243,7 +1244,7 @@ index 8ef2540b295a6cb9a3b79b3481336bfd59d1dbba..f3ae27e860a5cb0c622b7c419a70b2c0
this.xxa *= 0.98F;
this.zza *= 0.98F;
this.updateFallFlying();
-@@ -3539,8 +3539,8 @@ public abstract class LivingEntity extends Entity implements Attackable {
+@@ -3515,8 +3515,8 @@ public abstract class LivingEntity extends Entity implements Attackable {
this.travel(vec3d1);
}
@@ -1251,10 +1252,10 @@ index 8ef2540b295a6cb9a3b79b3481336bfd59d1dbba..f3ae27e860a5cb0c622b7c419a70b2c0
- this.level().getProfiler().push("freezing");
+ //this.level().getProfiler().pop(); // Purpur
+ //this.level().getProfiler().push("freezing"); // Purpur
- if (!this.level().isClientSide && !this.isDeadOrDying() && !freezeLocked) { // Paper - Freeze Tick Lock API
+ if (!this.level().isClientSide && !this.isDeadOrDying() && !this.freezeLocked) { // Paper - Freeze Tick Lock API
int i = this.getTicksFrozen();
-@@ -3557,15 +3557,15 @@ public abstract class LivingEntity extends Entity implements Attackable {
+@@ -3533,15 +3533,15 @@ public abstract class LivingEntity extends Entity implements Attackable {
this.hurt(this.damageSources().freeze(), 1.0F);
}
@@ -1274,10 +1275,10 @@ index 8ef2540b295a6cb9a3b79b3481336bfd59d1dbba..f3ae27e860a5cb0c622b7c419a70b2c0
// Purpur start
if (this.xo != this.getX() || this.yo != this.getY() || this.zo != this.getZ() || this.yRotO != this.getYRot() || this.xRotO != this.getXRot()) {
diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java
-index 3a86686789ca77301e43bb9810f9b2b311d7763d..80c03bd4e5d7e20bb8a4e14af5620f5c57a05fd4 100644
+index 7c8bdf0ec5c61d8a79fcaa68f1f79b7f56705dce..b1212f456f2cf1b4aae1fe0e301dfaab26a305ea 100644
--- a/src/main/java/net/minecraft/world/entity/Mob.java
+++ b/src/main/java/net/minecraft/world/entity/Mob.java
-@@ -366,13 +366,13 @@ public abstract class Mob extends LivingEntity implements Targeting {
+@@ -365,13 +365,13 @@ public abstract class Mob extends LivingEntity implements Targeting {
@Override
public void baseTick() {
super.baseTick();
@@ -1293,7 +1294,7 @@ index 3a86686789ca77301e43bb9810f9b2b311d7763d..80c03bd4e5d7e20bb8a4e14af5620f5c
incrementTicksSinceLastInteraction(); // Purpur
}
-@@ -703,7 +703,7 @@ public abstract class Mob extends LivingEntity implements Targeting {
+@@ -702,7 +702,7 @@ public abstract class Mob extends LivingEntity implements Targeting {
@Override
public void aiStep() {
super.aiStep();
@@ -1302,7 +1303,7 @@ index 3a86686789ca77301e43bb9810f9b2b311d7763d..80c03bd4e5d7e20bb8a4e14af5620f5c
if (!this.level().isClientSide && this.canPickUpLoot() && this.isAlive() && !this.dead && (this.level().purpurConfig.entitiesPickUpLootBypassMobGriefing || this.level().getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING))) {
Vec3i baseblockposition = this.getPickupReach();
List list = this.level().getEntitiesOfClass(ItemEntity.class, this.getBoundingBox().inflate((double) baseblockposition.getX(), (double) baseblockposition.getY(), (double) baseblockposition.getZ()));
-@@ -723,7 +723,7 @@ public abstract class Mob extends LivingEntity implements Targeting {
+@@ -722,7 +722,7 @@ public abstract class Mob extends LivingEntity implements Targeting {
}
}
@@ -1311,7 +1312,7 @@ index 3a86686789ca77301e43bb9810f9b2b311d7763d..80c03bd4e5d7e20bb8a4e14af5620f5c
}
protected Vec3i getPickupReach() {
-@@ -935,46 +935,46 @@ public abstract class Mob extends LivingEntity implements Targeting {
+@@ -934,42 +934,42 @@ public abstract class Mob extends LivingEntity implements Targeting {
return;
}
// Paper end
@@ -1325,26 +1326,22 @@ index 3a86686789ca77301e43bb9810f9b2b311d7763d..80c03bd4e5d7e20bb8a4e14af5620f5c
if (i % 2 != 0 && this.tickCount > 1) {
- this.level().getProfiler().push("targetSelector");
+ //this.level().getProfiler().push("targetSelector"); // Purpur
- if (this.targetSelector.inactiveTick(this.activatedPriority, false)) // Pufferfish - use this to alternate ticking
this.targetSelector.tickRunningGoals(false);
- this.level().getProfiler().pop();
- this.level().getProfiler().push("goalSelector");
+ //this.level().getProfiler().pop(); // Purpur
+ //this.level().getProfiler().push("goalSelector"); // Purpur
- if (this.goalSelector.inactiveTick(this.activatedPriority, false)) // Pufferfish - use this to alternate ticking
this.goalSelector.tickRunningGoals(false);
- this.level().getProfiler().pop();
+ //this.level().getProfiler().pop(); // Purpur
} else {
- this.level().getProfiler().push("targetSelector");
+ //this.level().getProfiler().push("targetSelector");
- if (this.targetSelector.inactiveTick(this.activatedPriority, false)) // Pufferfish - use this to alternate ticking
this.targetSelector.tick();
- this.level().getProfiler().pop();
- this.level().getProfiler().push("goalSelector");
+ //this.level().getProfiler().pop(); // Purpur
+ //this.level().getProfiler().push("goalSelector"); // Purpur
- if (this.goalSelector.inactiveTick(this.activatedPriority, false)) // Pufferfish - use this to alternate ticking
this.goalSelector.tick();
- this.level().getProfiler().pop();
+ //this.level().getProfiler().pop(); // Purpur
@@ -1379,10 +1376,10 @@ index 3a86686789ca77301e43bb9810f9b2b311d7763d..80c03bd4e5d7e20bb8a4e14af5620f5c
}
diff --git a/src/main/java/net/minecraft/world/entity/ai/goal/GoalSelector.java b/src/main/java/net/minecraft/world/entity/ai/goal/GoalSelector.java
-index 1635818fc4b1788c0d397085239df6dd75b210ab..02978315bc2b828cc603ce7478408f3f82c249c2 100644
+index b738ee2d3801fadfd09313f05ae24593e56b0ec6..8a70bc63e12838f45fa3eade74f2899438715886 100644
--- a/src/main/java/net/minecraft/world/entity/ai/goal/GoalSelector.java
+++ b/src/main/java/net/minecraft/world/entity/ai/goal/GoalSelector.java
-@@ -105,8 +105,8 @@ public class GoalSelector {
+@@ -102,8 +102,8 @@ public class GoalSelector {
}
public void tick() {
@@ -1393,7 +1390,7 @@ index 1635818fc4b1788c0d397085239df6dd75b210ab..02978315bc2b828cc603ce7478408f3f
for(WrappedGoal wrappedGoal : this.availableGoals) {
if (wrappedGoal.isRunning() && (goalContainsAnyFlags(wrappedGoal, this.goalTypes) || !wrappedGoal.canContinueToUse())) {
-@@ -123,8 +123,8 @@ public class GoalSelector {
+@@ -120,8 +120,8 @@ public class GoalSelector {
}
}
@@ -1404,7 +1401,7 @@ index 1635818fc4b1788c0d397085239df6dd75b210ab..02978315bc2b828cc603ce7478408f3f
for(WrappedGoal wrappedGoal2 : this.availableGoals) {
// Paper start
-@@ -144,13 +144,13 @@ public class GoalSelector {
+@@ -141,13 +141,13 @@ public class GoalSelector {
}
}
@@ -1421,7 +1418,7 @@ index 1635818fc4b1788c0d397085239df6dd75b210ab..02978315bc2b828cc603ce7478408f3f
for(WrappedGoal wrappedGoal : this.availableGoals) {
if (wrappedGoal.isRunning() && (tickAll || wrappedGoal.requiresUpdateEveryTick())) {
-@@ -158,7 +158,7 @@ public class GoalSelector {
+@@ -155,7 +155,7 @@ public class GoalSelector {
}
}
@@ -1466,16 +1463,16 @@ index 51772f03a3469b11e7166ec6f3a1b9c64a606221..02f2f46ccc48bb4d9bd08555818b0489
this.seen.add(i);
} else {
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 09f796ec491f21520e1fcc454249e4696dad3b1b..9bf06cf7b3706f8883e1a0ceac8b1aebb52ba475 100644
+index 80ff5b8b2041afd7ffef99c33ecd4f5252e827fe..f9af021350df28f286028099d857f034bc03913b 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
-@@ -259,13 +259,13 @@ public class Allay extends PathfinderMob implements InventoryCarrier, VibrationS
- private int behaviorTick = 0; // Pufferfish
+@@ -258,13 +258,13 @@ public class Allay extends PathfinderMob implements InventoryCarrier, VibrationS
+
@Override
protected void customServerAiStep() {
- this.level().getProfiler().push("allayBrain");
+ //this.level().getProfiler().push("allayBrain"); // Purpur
- if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider
+ //if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider // Purpur - TODO: Pufferfish
this.getBrain().tick((ServerLevel) this.level(), this);
- this.level().getProfiler().pop();
- this.level().getProfiler().push("allayActivityUpdate");
@@ -1488,15 +1485,16 @@ index 09f796ec491f21520e1fcc454249e4696dad3b1b..9bf06cf7b3706f8883e1a0ceac8b1aeb
}
diff --git a/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java b/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java
-index 89e473aadb1ab0bd802e7f74a77cce09578320d7..7369290820f726c28c87bc63dba2a74f415bb126 100644
+index a2664e7961bba5231d81b90f7fc2cf43a116114a..5f3670c02ddbb923a96ba0c6199c49e665d224c4 100644
--- a/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java
+++ b/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java
-@@ -320,12 +320,13 @@ public class Axolotl extends Animal implements LerpingModel, VariantHolder {
- private int behaviorTick = 0; // Pufferfish
+@@ -214,13 +214,13 @@ public class Frog extends Animal implements VariantHolder {
+
@Override
protected void customServerAiStep() {
- this.level().getProfiler().push("frogBrain");
+ //this.level().getProfiler().push("frogBrain"); // Purpur
- if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider
+ // if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider // Purpur - TODO: Pufferfish
this.getBrain().tick((ServerLevel)this.level(), this);
- this.level().getProfiler().pop();
- this.level().getProfiler().push("frogActivityUpdate");
@@ -1553,17 +1551,16 @@ index 3cef040c0e8869ca2ca2cb83c8f60a0f15582ae8..9417ce67cc231d5bfa6813f78ec27196
}
diff --git a/src/main/java/net/minecraft/world/entity/animal/frog/Tadpole.java b/src/main/java/net/minecraft/world/entity/animal/frog/Tadpole.java
-index af8438ae8c805d3276ef2d82eb39b08880fcc8a1..6b012bea26e8ef0c04571f43da67f6e108188830 100644
+index e46475c2d44923167da7c654cb8af6b6278c7149..1e86f144d6139cff52ccc48f03f3283aa6517736 100644
--- a/src/main/java/net/minecraft/world/entity/animal/frog/Tadpole.java
+++ b/src/main/java/net/minecraft/world/entity/animal/frog/Tadpole.java
-@@ -117,13 +117,13 @@ public class Tadpole extends AbstractFish {
- private int behaviorTick = 0; // Pufferfish
+@@ -116,12 +116,12 @@ public class Tadpole extends AbstractFish {
+
@Override
protected void customServerAiStep() {
- this.level().getProfiler().push("tadpoleBrain");
+ //this.level().getProfiler().push("tadpoleBrain"); // Purpur
- if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider
- this.getBrain().tick((ServerLevel) this.level(), this);
+ // if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider // Purpur - TODO: Pufferfish
- this.level().getProfiler().pop();
- this.level().getProfiler().push("tadpoleActivityUpdate");
+ //this.level().getProfiler().pop(); // Purpur
@@ -1575,16 +1572,16 @@ index af8438ae8c805d3276ef2d82eb39b08880fcc8a1..6b012bea26e8ef0c04571f43da67f6e1
}
diff --git a/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java b/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java
-index fba00cab2c4b234dd2e85b5f4dcd0db34183c1a2..806b207e5246db7daa03bebabd7aa574d8b0dab7 100644
+index 5ac471fdc1acfd04a8cdf3e044949e48a6df208d..1162318d8d187b8bdb30d28f6f61c430452c41b5 100644
--- a/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java
+++ b/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java
-@@ -226,13 +226,13 @@ public class Goat extends Animal {
- private int behaviorTick = 0; // Pufferfish
+@@ -225,13 +225,13 @@ public class Goat extends Animal {
+
@Override
protected void customServerAiStep() {
- this.level().getProfiler().push("goatBrain");
+ //this.level().getProfiler().push("goatBrain"); // Purpur
- if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider
+ // if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider // Purpur - TODO: Pufferfish
this.getBrain().tick((ServerLevel) this.level(), this);
- this.level().getProfiler().pop();
- this.level().getProfiler().push("goatActivityUpdate");
@@ -1633,16 +1630,16 @@ index 15fd1af0773ba1254a429240444f48e68e29ee74..1d36459ee10da702d65b4a6d139a05fd
}
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 e326e753cc6bca1bd00287d16c9796b9f3dd4d14..9d6c4f13c4a444c6c815c6c4f2114142f166b9bb 100644
+index a3a21f0c102cadcbe5882de716e90272fddd7f8c..468351b78af72c5ce998f9179f14d53951e95e46 100644
--- a/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java
+++ b/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java
-@@ -168,10 +168,10 @@ public class Hoglin extends Animal implements Enemy, HoglinBase {
- private int behaviorTick; // Pufferfish
+@@ -167,10 +167,10 @@ public class Hoglin extends Animal implements Enemy, HoglinBase {
+
@Override
protected void customServerAiStep() {
- this.level().getProfiler().push("hoglinBrain");
+ //this.level().getProfiler().push("hoglinBrain"); // Purpur
- if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider
+ // if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider // Purpur - TODO: Pufferfish
this.getBrain().tick((ServerLevel)this.level(), this);
- this.level().getProfiler().pop();
+ //this.level().getProfiler().pop(); // Purpur
@@ -1650,16 +1647,16 @@ index e326e753cc6bca1bd00287d16c9796b9f3dd4d14..9d6c4f13c4a444c6c815c6c4f2114142
if (this.isConverting()) {
++this.timeInOverworld;
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 9ca1618ab945ad834c5fc221ada49058f806e79c..8e829d522a6012f409161ad5a9a06721a942d7e4 100644
+index 7612a361645018a4f81c374c523bb191e0ff40f0..2174a583b6db56520fa7523adc3c09e56ed7e85e 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
-@@ -335,10 +335,10 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento
- private int behaviorTick; // Pufferfish
+@@ -334,10 +334,10 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento
+
@Override
protected void customServerAiStep() {
- this.level().getProfiler().push("piglinBrain");
+ //this.level().getProfiler().push("piglinBrain"); // Purpur
- if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider
+ // if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider // Purpur - TODO: Pufferfish
this.getBrain().tick((ServerLevel) this.level(), this);
- this.level().getProfiler().pop();
+ //this.level().getProfiler().pop(); // Purpur
@@ -1684,16 +1681,15 @@ index 61e8f2d030fc50840c3f80dfb6fc810797ec440f..856e6e02c9424a6c06e310262cb4f5bd
PiglinBruteAi.maybePlayActivitySound(this);
super.customServerAiStep();
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 250af1ce7a93c2d2897f35c68fae319c9ba7d55d..5e66c2bd3807619cadee5b7081d93d21886e2806 100644
+index 53035057b715401381b4f5438c82a61fe6012a7e..656c4ee100364a3299cb78f7173ee0506d46ff04 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
-@@ -301,10 +301,10 @@ public class Warden extends Monster implements VibrationSystem {
+@@ -301,9 +301,9 @@ public class Warden extends Monster implements VibrationSystem {
protected void customServerAiStep() {
ServerLevel worldserver = (ServerLevel) this.level();
- worldserver.getProfiler().push("wardenBrain");
+ //worldserver.getProfiler().push("wardenBrain"); // Purpur
- if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish
this.getBrain().tick(worldserver, this);
- this.level().getProfiler().pop();
+ //this.level().getProfiler().pop(); // Purpur
@@ -1701,10 +1697,10 @@ index 250af1ce7a93c2d2897f35c68fae319c9ba7d55d..5e66c2bd3807619cadee5b7081d93d21
if ((this.tickCount + this.getId()) % 120 == 0) {
Warden.applyDarknessAround(worldserver, this.position(), this, 20);
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 c889e5e0ba42eac860d25c76e5956471eb29be7e..02df0bf09f2ef91e4dafbdcea590b4634b2abf08 100644
+index a46fc13b3072b65dc9284ece6cbf63a743b5c1a7..fe68013f8efa35e6dfcf658df3b33d9d3df73979 100644
--- a/src/main/java/net/minecraft/world/entity/npc/Villager.java
+++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java
-@@ -342,7 +342,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
+@@ -339,7 +339,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
}
protected void customServerAiStep(boolean inactive) { // Purpur - not final
// Paper end
@@ -1713,9 +1709,9 @@ index c889e5e0ba42eac860d25c76e5956471eb29be7e..02df0bf09f2ef91e4dafbdcea590b463
// Purpur start
if (this.level().purpurConfig.villagerLobotomizeEnabled) {
// treat as inactive if lobotomized
-@@ -355,7 +355,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
+@@ -352,7 +352,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
this.getBrain().tick((ServerLevel) this.level(), this); // Paper
- else if (this.isLobotomized && shouldRestock()) restock();
+ } else if (this.isLobotomized && shouldRestock()) restock();
// Purpur end
- this.level().getProfiler().pop();
+ //this.level().getProfiler().pop(); // Purpur
@@ -1723,32 +1719,32 @@ index c889e5e0ba42eac860d25c76e5956471eb29be7e..02df0bf09f2ef91e4dafbdcea590b463
this.assignProfessionWhenSpawned = false;
}
diff --git a/src/main/java/net/minecraft/world/level/Explosion.java b/src/main/java/net/minecraft/world/level/Explosion.java
-index 45243249a561440512ef2a620c60b02e159c80e2..b26cea981a876fd42c9ab91923d507b3c11a0425 100644
+index c790418ff4584af20db006a3e8770f261bab271e..370952a7be8df3ea00c0816235d84927df4ed79d 100644
--- a/src/main/java/net/minecraft/world/level/Explosion.java
+++ b/src/main/java/net/minecraft/world/level/Explosion.java
-@@ -706,7 +706,7 @@ public class Explosion {
- if (!iblockdata.isAir() && iblockdata.isDestroyable()) { // Paper
- BlockPos blockposition1 = blockposition.immutable();
+@@ -659,7 +659,7 @@ public class Explosion {
+ }
-- this.level.getProfiler().push("explosion_blocks");
-+ //this.level.getProfiler().push("explosion_blocks"); // Purpur
- if (block.dropFromExplosion(this)) {
- Level world = this.level;
+ if (flag1) {
+- this.level.getProfiler().push("explosion_blocks");
++ // this.level.getProfiler().push("explosion_blocks"); // Purpur
+ List> list = new ArrayList();
-@@ -728,7 +728,7 @@ public class Explosion {
-
- this.level.setBlock(blockposition, Blocks.AIR.defaultBlockState(), 3);
- block.wasExploded(this.level, blockposition, this);
-- this.level.getProfiler().pop();
-+ //this.level.getProfiler().pop(); // Purpur
- }
+ Util.shuffle(this.toBlow, this.level.random);
+@@ -735,7 +735,7 @@ public class Explosion {
+ Block.popResource(this.level, (BlockPos) pair.getSecond(), (ItemStack) pair.getFirst());
}
+- this.level.getProfiler().pop();
++ // this.level.getProfiler().pop(); // Purpur
+ }
+
+ if (this.fire) {
diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java
-index 8b537022638648c11396c0ee638750c712a6230b..25540a7f5631acd856726cdb44bace9be7dab401 100644
+index 214a18320d450fc318593b147e0010c42977d421..8e411a60cdd39ba1a365b29a6dbbb468a8ef6736 100644
--- a/src/main/java/net/minecraft/world/level/Level.java
+++ b/src/main/java/net/minecraft/world/level/Level.java
-@@ -1301,9 +1301,9 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
+@@ -1308,9 +1308,9 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
}
protected void tickBlockEntities() {
@@ -1760,7 +1756,7 @@ index 8b537022638648c11396c0ee638750c712a6230b..25540a7f5631acd856726cdb44bace9b
//this.timings.tileEntityPending.startTiming(); // Spigot // Purpur
this.tickingBlockEntities = true;
if (!this.pendingBlockEntityTickers.isEmpty()) {
-@@ -1348,7 +1348,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
+@@ -1357,7 +1357,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
//this.timings.tileEntityTick.stopTiming(); // Spigot // Purpur
this.tickingBlockEntities = false;
co.aikar.timings.TimingHistory.tileEntityTicks += this.blockEntityTickers.size(); // Paper
@@ -1769,7 +1765,7 @@ index 8b537022638648c11396c0ee638750c712a6230b..25540a7f5631acd856726cdb44bace9b
this.spigotConfig.currentPrimedTnt = 0; // Spigot
}
-@@ -1551,7 +1551,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
+@@ -1567,7 +1567,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
@Override
public List getEntities(@Nullable Entity except, AABB box, Predicate super Entity> predicate) {
@@ -1778,7 +1774,7 @@ index 8b537022638648c11396c0ee638750c712a6230b..25540a7f5631acd856726cdb44bace9b
List list = Lists.newArrayList();
((ServerLevel)this).getEntityLookup().getEntities(except, box, list, predicate); // Paper - optimise this call
return list;
-@@ -1570,7 +1570,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
+@@ -1586,7 +1586,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
}
public void getEntities(EntityTypeTest filter, AABB box, Predicate super T> predicate, List super T> result, int limit) {
@@ -1787,17 +1783,16 @@ index 8b537022638648c11396c0ee638750c712a6230b..25540a7f5631acd856726cdb44bace9b
// Paper start - optimise this call
//TODO use limit
if (filter instanceof net.minecraft.world.entity.EntityType entityTypeTest) {
-@@ -1827,7 +1827,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
+@@ -1845,6 +1845,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
}
public ProfilerFiller getProfiler() {
-- if (gg.pufferfish.pufferfish.PufferfishConfig.disableMethodProfiler) return net.minecraft.util.profiling.InactiveProfiler.INSTANCE; // Pufferfish
-+ if (true || gg.pufferfish.pufferfish.PufferfishConfig.disableMethodProfiler) return net.minecraft.util.profiling.InactiveProfiler.INSTANCE; // Pufferfish // Purpur
++ //if (true || gg.pufferfish.pufferfish.PufferfishConfig.disableMethodProfiler) return net.minecraft.util.profiling.InactiveProfiler.INSTANCE; // Pufferfish // Purpur // Purpur - TODO: Pufferfish
return (ProfilerFiller) this.profiler.get();
}
diff --git a/src/main/java/net/minecraft/world/level/NaturalSpawner.java b/src/main/java/net/minecraft/world/level/NaturalSpawner.java
-index 1e3349690d00c7889a381f7c65a3b5bf3de2ac5b..524301e2438ee2938b59eb2b2e9fc4e0eb727a87 100644
+index 6a5dddfd120760b3334d8a4c4ebde84744083392..f3ff965e641f561dbc1b5194353e75dc17e9a0ba 100644
--- a/src/main/java/net/minecraft/world/level/NaturalSpawner.java
+++ b/src/main/java/net/minecraft/world/level/NaturalSpawner.java
@@ -132,7 +132,7 @@ public final class NaturalSpawner {
@@ -1819,10 +1814,10 @@ index 1e3349690d00c7889a381f7c65a3b5bf3de2ac5b..524301e2438ee2938b59eb2b2e9fc4e0
// Paper start
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 88b7f814a1454841b1f1b27e9c7d66d64717a422..66656c4cf157228c9f52b33b358713ef0172f9ff 100644
+index 5e91f70a994ffa92e3aa794b52441790766cd774..5efb3e1d04cc22a8fa37a25e2bef07f9e2842adc 100644
--- a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java
+++ b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java
-@@ -457,11 +457,11 @@ public class LevelChunk extends ChunkAccess {
+@@ -443,11 +443,11 @@ public class LevelChunk extends ChunkAccess {
if (LightEngine.hasDifferentLightProperties(this, blockposition, iblockdata1, iblockdata)) {
ProfilerFiller gameprofilerfiller = this.level.getProfiler();
@@ -1837,7 +1832,7 @@ index 88b7f814a1454841b1f1b27e9c7d66d64717a422..66656c4cf157228c9f52b33b358713ef
}
boolean flag3 = iblockdata1.hasBlockEntity();
-@@ -1175,9 +1175,9 @@ public class LevelChunk extends ChunkAccess {
+@@ -1161,9 +1161,9 @@ public class LevelChunk extends ChunkAccess {
if (LevelChunk.this.isTicking(blockposition)) {
try {
@@ -1849,7 +1844,7 @@ index 88b7f814a1454841b1f1b27e9c7d66d64717a422..66656c4cf157228c9f52b33b358713ef
//this.blockEntity.tickTimer.startTiming(); // Spigot // Purpur
BlockState iblockdata = LevelChunk.this.getBlockState(blockposition);
-@@ -1189,7 +1189,7 @@ public class LevelChunk extends ChunkAccess {
+@@ -1175,7 +1175,7 @@ public class LevelChunk extends ChunkAccess {
LevelChunk.LOGGER.warn("Block entity {} @ {} state {} invalid for ticking:", new Object[]{LogUtils.defer(this::getType), LogUtils.defer(this::getPos), iblockdata});
}
diff --git a/patches/server/0268-Add-more-logger-output-for-invalid-movement-kicks.patch b/patches/server/0265-Add-more-logger-output-for-invalid-movement-kicks.patch
similarity index 91%
rename from patches/server/0268-Add-more-logger-output-for-invalid-movement-kicks.patch
rename to patches/server/0265-Add-more-logger-output-for-invalid-movement-kicks.patch
index 324a974da..7bbd1d04d 100644
--- a/patches/server/0268-Add-more-logger-output-for-invalid-movement-kicks.patch
+++ b/patches/server/0265-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 4fa1b9a46566fcfbf9ca080bdecd2e912c01ac4f..fa586687929ae348d16a6afc81b364aafd2b238f 100644
+index 7865288eee0950c346801cc20aea9071a31fc6dc..d651b8c6254a28fc55f9a9c3f264f83a265bf316 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
-@@ -736,6 +736,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
+@@ -739,6 +739,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
if (packet.getId() == this.awaitingTeleport) {
if (this.awaitingPositionFromClient == null) {
this.disconnect(Component.translatable("multiplayer.disconnect.invalid_player_movement"), org.bukkit.event.player.PlayerKickEvent.Cause.INVALID_PLAYER_MOVEMENT); // Paper - kick event cause
@@ -16,7 +16,7 @@ index 4fa1b9a46566fcfbf9ca080bdecd2e912c01ac4f..fa586687929ae348d16a6afc81b364aa
return;
}
-@@ -1328,8 +1329,16 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
+@@ -1352,8 +1353,16 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
@Override
public void handleMovePlayer(ServerboundMovePlayerPacket packet) {
PacketUtils.ensureRunningOnSameThread(packet, this, this.player.serverLevel());
diff --git a/patches/server/0269-Add-Bee-API.patch b/patches/server/0266-Add-Bee-API.patch
similarity index 89%
rename from patches/server/0269-Add-Bee-API.patch
rename to patches/server/0266-Add-Bee-API.patch
index cfd237990..a3f2b0126 100644
--- a/patches/server/0269-Add-Bee-API.patch
+++ b/patches/server/0266-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 02e95af3c18b3da5a6a32a7536e903ca9c426249..38a3dcec138d9233a46e5d523bcc6d64bc7fffd0 100644
+index 0a4ca865d1e41efca0eb8287c833e642e838b01a..bdb78cc701543cfe91a6bafd1786fe2ea0bf1ddc 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Bee.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Bee.java
-@@ -807,6 +807,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal {
+@@ -814,6 +814,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 02e95af3c18b3da5a6a32a7536e903ca9c426249..38a3dcec138d9233a46e5d523bcc6d64
return true;
} else {
Bee.this.remainingCooldownBeforeLocatingNewFlower = Mth.nextInt(Bee.this.random, 20, 60);
-@@ -863,6 +864,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal {
+@@ -870,6 +871,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 02e95af3c18b3da5a6a32a7536e903ca9c426249..38a3dcec138d9233a46e5d523bcc6d64
}
@Override
-@@ -909,6 +911,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal {
+@@ -916,6 +918,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal {
this.setWantedPos();
}
diff --git a/patches/server/0270-Debug-Marker-API.patch b/patches/server/0267-Debug-Marker-API.patch
similarity index 93%
rename from patches/server/0270-Debug-Marker-API.patch
rename to patches/server/0267-Debug-Marker-API.patch
index a5d6c17cb..f796cb495 100644
--- a/patches/server/0270-Debug-Marker-API.patch
+++ b/patches/server/0267-Debug-Marker-API.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Debug Marker API
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
-index 85546e81f90676df985de1ba6d6aa066aef4762a..ce33562ad91d4fee2c2f41e27c414f3480743485 100644
+index d974846dda57755cfa33beba76794391beb9b4f3..7c35318e65608b29f6ea0c1481c0af8f0dd8ba5f 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
-@@ -1551,6 +1551,42 @@ public final class CraftServer implements Server {
+@@ -1578,6 +1578,42 @@ public final class CraftServer implements Server {
public void removeFuel(org.bukkit.Material material) {
net.minecraft.world.level.block.entity.AbstractFurnaceBlockEntity.removeFuel(net.minecraft.world.item.ItemStack.fromBukkitCopy(new ItemStack(material)));
}
@@ -52,10 +52,10 @@ index 85546e81f90676df985de1ba6d6aa066aef4762a..ce33562ad91d4fee2c2f41e27c414f34
@Override
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
-index 99df34c7efb003d63142a1cd191d863c5315b4cb..bc9a049df648fa5a169219bb009c92a213df9ffd 100644
+index 648be304b99793fcec850ee6f3965baf1cd679d8..14df9ede813b64f87d97a1ffa96024361b10f131 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
-@@ -2358,6 +2358,42 @@ public class CraftWorld extends CraftRegionAccessor implements World {
+@@ -2364,6 +2364,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 99df34c7efb003d63142a1cd191d863c5315b4cb..bc9a049df648fa5a169219bb009c92a2
@Override
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-index 63f7023a7f20f0133c03904ea48c15346a8963b8..a432579ea6fb3f2c1fefe98f16a357450ad5b5ae 100644
+index 0df4d72d82a4f047c6272af664ad61ee0117cf67..ece49c9be55d4f356bf1ea53ec06cd60e02b7eae 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-@@ -3355,5 +3355,43 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+@@ -3367,5 +3367,43 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
public void resetIdleTimer() {
getHandle().resetLastActionTime();
}
diff --git a/patches/server/0271-mob-spawning-option-to-ignore-creative-players.patch b/patches/server/0268-mob-spawning-option-to-ignore-creative-players.patch
similarity index 92%
rename from patches/server/0271-mob-spawning-option-to-ignore-creative-players.patch
rename to patches/server/0268-mob-spawning-option-to-ignore-creative-players.patch
index dd1268f05..5c52cd9c3 100644
--- a/patches/server/0271-mob-spawning-option-to-ignore-creative-players.patch
+++ b/patches/server/0268-mob-spawning-option-to-ignore-creative-players.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] mob spawning option to ignore creative players
diff --git a/src/main/java/net/minecraft/world/level/NaturalSpawner.java b/src/main/java/net/minecraft/world/level/NaturalSpawner.java
-index 524301e2438ee2938b59eb2b2e9fc4e0eb727a87..a2a59dd2e515bf4dca84a442703c122fd36f05e0 100644
+index f3ff965e641f561dbc1b5194353e75dc17e9a0ba..51a4d0b212278a20363fd0d3cb253f0e3047e961 100644
--- a/src/main/java/net/minecraft/world/level/NaturalSpawner.java
+++ b/src/main/java/net/minecraft/world/level/NaturalSpawner.java
@@ -258,7 +258,7 @@ public final class NaturalSpawner {
@@ -18,7 +18,7 @@ index 524301e2438ee2938b59eb2b2e9fc4e0eb727a87..a2a59dd2e515bf4dca84a442703c122f
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 07b8826509d158e60ee6c3c847f7855b7469325f..71d2da21e1dcf5991f9161b3fcad66247a5a4991 100644
+index 4e8c250a1c41c82dbfbae69e8d48b4604d63139b..52cc678de23f370c411933d3f99c31a7acbe2d9b 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -377,6 +377,7 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0272-Add-skeleton-bow-accuracy-option.patch b/patches/server/0269-Add-skeleton-bow-accuracy-option.patch
similarity index 94%
rename from patches/server/0272-Add-skeleton-bow-accuracy-option.patch
rename to patches/server/0269-Add-skeleton-bow-accuracy-option.patch
index 8358207f3..ae98e0eb6 100644
--- a/patches/server/0272-Add-skeleton-bow-accuracy-option.patch
+++ b/patches/server/0269-Add-skeleton-bow-accuracy-option.patch
@@ -18,10 +18,10 @@ index f3e1fa62d9f067c0fe8aacb88bf30b01ee0562c1..28eb98d383d6846a25c29f8cd8ff211c
org.bukkit.event.entity.EntityShootBowEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callEntityShootBowEvent(this, this.getMainHandItem(), entityarrow.getPickupItem(), entityarrow, net.minecraft.world.InteractionHand.MAIN_HAND, 0.8F, true); // Paper
if (event.isCancelled()) {
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 9df11e164f6aaa13c2ad50717cfc42b8c4c8c6e7..712e9b87442e0eeb05993e6589123d756d875518 100644
+index 52cc678de23f370c411933d3f99c31a7acbe2d9b..2957282e6c19fbe38ddb4f8a30ae2d3404d87385 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -2449,6 +2449,8 @@ public class PurpurWorldConfig {
+@@ -2440,6 +2440,8 @@ public class PurpurWorldConfig {
public boolean skeletonAlwaysDropExp = false;
public double skeletonHeadVisibilityPercent = 0.5D;
public int skeletonFeedWitherRoses = 0;
@@ -30,7 +30,7 @@ index 9df11e164f6aaa13c2ad50717cfc42b8c4c8c6e7..712e9b87442e0eeb05993e6589123d75
private void skeletonSettings() {
skeletonRidable = getBoolean("mobs.skeleton.ridable", skeletonRidable);
skeletonRidableInWater = getBoolean("mobs.skeleton.ridable-in-water", skeletonRidableInWater);
-@@ -2463,6 +2465,18 @@ public class PurpurWorldConfig {
+@@ -2454,6 +2456,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/0273-Allay-respect-item-NBT.patch b/patches/server/0270-Allay-respect-item-NBT.patch
similarity index 89%
rename from patches/server/0273-Allay-respect-item-NBT.patch
rename to patches/server/0270-Allay-respect-item-NBT.patch
index f0b8b115c..6ab6e3e95 100644
--- a/patches/server/0273-Allay-respect-item-NBT.patch
+++ b/patches/server/0270-Allay-respect-item-NBT.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Allay respect item NBT
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 9bf06cf7b3706f8883e1a0ceac8b1aebb52ba475..c783ce59ea766e6c46a3313628b961f27e01ee8b 100644
+index f9af021350df28f286028099d857f034bc03913b..b3e92d3fb6fbadfc6df236754123bc12ad9bc7e7 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
-@@ -406,9 +406,31 @@ public class Allay extends PathfinderMob implements InventoryCarrier, VibrationS
+@@ -405,9 +405,31 @@ public class Allay extends PathfinderMob implements InventoryCarrier, VibrationS
@Override
public boolean wantsToPickUp(ItemStack stack) {
@@ -44,10 +44,10 @@ index 9bf06cf7b3706f8883e1a0ceac8b1aebb52ba475..c783ce59ea766e6c46a3313628b961f2
private boolean allayConsidersItemEqual(ItemStack stack, ItemStack stack2) {
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 86340e782bbc125ec672eea855de29f90ac127de..1a8a1a9bca5c2f92b87fb1a21bdff194718caa8e 100644
+index 2957282e6c19fbe38ddb4f8a30ae2d3404d87385..4cd381104a2ab320feb3984b8f77f9630246c7e4 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -1083,10 +1083,13 @@ public class PurpurWorldConfig {
+@@ -1074,10 +1074,13 @@ public class PurpurWorldConfig {
public boolean allayRidable = false;
public boolean allayRidableInWater = true;
public boolean allayControllable = true;
diff --git a/patches/server/0274-Add-death-screen-API.patch b/patches/server/0271-Add-death-screen-API.patch
similarity index 87%
rename from patches/server/0274-Add-death-screen-API.patch
rename to patches/server/0271-Add-death-screen-API.patch
index 3dcadc145..72e111531 100644
--- a/patches/server/0274-Add-death-screen-API.patch
+++ b/patches/server/0271-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 a432579ea6fb3f2c1fefe98f16a357450ad5b5ae..3b3bbeda831f82b6d9b284d85a31a1fff578a64f 100644
+index ece49c9be55d4f356bf1ea53ec06cd60e02b7eae..6f52c5f94a8ac8c04c61c551d2345ad72272942e 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-@@ -3393,5 +3393,11 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+@@ -3405,5 +3405,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/0276-Implement-ram-and-rambar-commands.patch b/patches/server/0272-Implement-ram-and-rambar-commands.patch
similarity index 97%
rename from patches/server/0276-Implement-ram-and-rambar-commands.patch
rename to patches/server/0272-Implement-ram-and-rambar-commands.patch
index 03ad8a8b8..911b0cef1 100644
--- a/patches/server/0276-Implement-ram-and-rambar-commands.patch
+++ b/patches/server/0272-Implement-ram-and-rambar-commands.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Implement ram and rambar commands
diff --git a/src/main/java/net/minecraft/commands/Commands.java b/src/main/java/net/minecraft/commands/Commands.java
-index 9caab6541a224dc8f729a7d720eccda7bd83ed53..2fd376789bb24b14101e289733631a9a4b68fa1c 100644
+index c1202a56b560269e132eafd8bb12383473d4d33e..815af29d1aae935264a400bdb9c3d676e81a841a 100644
--- a/src/main/java/net/minecraft/commands/Commands.java
+++ b/src/main/java/net/minecraft/commands/Commands.java
-@@ -236,6 +236,8 @@ public class Commands {
+@@ -256,6 +256,8 @@ public class Commands {
org.purpurmc.purpur.command.UptimeCommand.register(this.dispatcher); // Purpur
org.purpurmc.purpur.command.TPSBarCommand.register(this.dispatcher); // Purpur
org.purpurmc.purpur.command.CompassCommand.register(this.dispatcher); // Purpur
@@ -18,10 +18,10 @@ index 9caab6541a224dc8f729a7d720eccda7bd83ed53..2fd376789bb24b14101e289733631a9a
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 70d952fedba4b9bab44e0e6de94d60b894538ce7..7b72be8dcaf3fc5c7151c847faa2dfc75ef9eeb7 100644
+index adbce4f4334c8857f0ab2fec910ba3883582256b..07c6e9c5a32ef7155525924d1a0e433943787819 100644
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
-@@ -277,6 +277,7 @@ public class ServerPlayer extends Player {
+@@ -284,6 +284,7 @@ public class ServerPlayer extends Player {
public boolean purpurClient = false; // Purpur
private boolean tpsBar = false; // Purpur
private boolean compassBar = false; // Purpur
@@ -29,7 +29,7 @@ index 70d952fedba4b9bab44e0e6de94d60b894538ce7..7b72be8dcaf3fc5c7151c847faa2dfc7
// Paper start - replace player chunk loader
private final java.util.concurrent.atomic.AtomicReference viewDistances = new java.util.concurrent.atomic.AtomicReference<>(new io.papermc.paper.chunk.system.RegionizedPlayerChunkLoader.ViewDistances(-1, -1, -1));
-@@ -564,6 +565,7 @@ public class ServerPlayer extends Player {
+@@ -571,6 +572,7 @@ public class ServerPlayer extends Player {
}
}
@@ -37,7 +37,7 @@ index 70d952fedba4b9bab44e0e6de94d60b894538ce7..7b72be8dcaf3fc5c7151c847faa2dfc7
if (nbt.contains("Purpur.TPSBar")) { this.tpsBar = nbt.getBoolean("Purpur.TPSBar"); } // Purpur
if (nbt.contains("Purpur.CompassBar")) { this.compassBar = nbt.getBoolean("Purpur.CompassBar"); } // Purpur
}
-@@ -632,6 +634,7 @@ public class ServerPlayer extends Player {
+@@ -639,6 +641,7 @@ public class ServerPlayer extends Player {
}
this.getBukkitEntity().setExtraData(nbt); // CraftBukkit
@@ -45,7 +45,7 @@ index 70d952fedba4b9bab44e0e6de94d60b894538ce7..7b72be8dcaf3fc5c7151c847faa2dfc7
nbt.putBoolean("Purpur.TPSBar", this.tpsBar); // Purpur
nbt.putBoolean("Purpur.CompassBar", this.compassBar); // Purpur
}
-@@ -2812,5 +2815,13 @@ public class ServerPlayer extends Player {
+@@ -2913,5 +2916,13 @@ public class ServerPlayer extends Player {
public void compassBar(boolean compassBar) {
this.compassBar = compassBar;
}
diff --git a/patches/server/0277-Add-item-packet-serialize-event.patch b/patches/server/0273-Add-item-packet-serialize-event.patch
similarity index 89%
rename from patches/server/0277-Add-item-packet-serialize-event.patch
rename to patches/server/0273-Add-item-packet-serialize-event.patch
index 4c37bfd59..76908d388 100644
--- a/patches/server/0277-Add-item-packet-serialize-event.patch
+++ b/patches/server/0273-Add-item-packet-serialize-event.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Add item packet serialize event
diff --git a/src/main/java/net/minecraft/network/FriendlyByteBuf.java b/src/main/java/net/minecraft/network/FriendlyByteBuf.java
-index 2e395962b555bef0ce1a98e1d768e7738f011535..40f51062624161892c780ddae05e22859e2cd021 100644
+index ff794499df6a2b65db2ca5956d2b98317592057f..fcfb7eb9b093896f11be4c13d450c522b3c47b15 100644
--- a/src/main/java/net/minecraft/network/FriendlyByteBuf.java
+++ b/src/main/java/net/minecraft/network/FriendlyByteBuf.java
-@@ -94,6 +94,8 @@ public class FriendlyByteBuf extends ByteBuf {
+@@ -95,6 +95,8 @@ public class FriendlyByteBuf extends ByteBuf {
private static final int MAX_PUBLIC_KEY_LENGTH = 512;
private static final Gson GSON = new Gson();
@@ -36,10 +36,10 @@ index 2e395962b555bef0ce1a98e1d768e7738f011535..40f51062624161892c780ddae05e2285
this.writeId(BuiltInRegistries.ITEM, item);
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
-index 926ba816e7bccec0d1b34c2f8fc3300be84df4c2..b61c4d1ebb9c15a7ecd7bec5eb864851c053fb7e 100644
+index e764ad7096852d8905422e8d0f140ed16c5b4498..39ecb12d4296852ee5865dcfa2b8b6c3233a4804 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
-@@ -1549,6 +1549,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop piercedAndKilledEntities;
+ public ItemStack pickupItemStack;
+ public int lootingLevel; // Purpur
// Spigot Start
@Override
-@@ -612,6 +613,12 @@ public abstract class AbstractArrow extends Projectile {
+@@ -641,6 +642,12 @@ public abstract class AbstractArrow extends Projectile {
this.knockback = punch;
}
@@ -67,7 +67,7 @@ index 0a0f19f73a6a4e5aece7c17089dc4d31ed2a5299..2c51a73ebfd05af21b0f5d731fc9f1df
}
diff --git a/src/main/java/net/minecraft/world/item/TridentItem.java b/src/main/java/net/minecraft/world/item/TridentItem.java
-index 6d1573161f0d8c7999f84925ba7bbf536ee9583a..c32cbe6065ecb6810f352b8a3598c21e42e60e1d 100644
+index 07695068fafd170ca88ad109d83dea93c387d794..ec5daeef857fdad6c7659130fb42f52cf6eb491f 100644
--- a/src/main/java/net/minecraft/world/item/TridentItem.java
+++ b/src/main/java/net/minecraft/world/item/TridentItem.java
@@ -82,6 +82,14 @@ public class TridentItem extends Item implements Vanishable {
diff --git a/patches/server/0279-Configurable-block-blast-resistance.patch b/patches/server/0275-Configurable-block-blast-resistance.patch
similarity index 93%
rename from patches/server/0279-Configurable-block-blast-resistance.patch
rename to patches/server/0275-Configurable-block-blast-resistance.patch
index bb40058aa..4be9e5d15 100644
--- a/patches/server/0279-Configurable-block-blast-resistance.patch
+++ b/patches/server/0275-Configurable-block-blast-resistance.patch
@@ -5,10 +5,10 @@ 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 443bed339884f78ecda8abdbcdc9b57ea9768cc9..e46a097dc134672720bc753ec0da0a9102737d2c 100644
+index 06b07927aba82084bd2996be92b9e340a9bf2ad2..0b6ab25fb59a7dd713a0fa9063f8590cad8414de 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
-@@ -81,7 +81,7 @@ public abstract class BlockBehaviour implements FeatureElement {
+@@ -85,7 +85,7 @@ public abstract class BlockBehaviour implements FeatureElement {
protected static final Direction[] UPDATE_SHAPE_ORDER = new Direction[]{Direction.WEST, Direction.EAST, Direction.NORTH, Direction.SOUTH, Direction.DOWN, Direction.UP};
public final boolean hasCollision;
diff --git a/patches/server/0280-Configurable-block-fall-damage-modifiers.patch b/patches/server/0276-Configurable-block-fall-damage-modifiers.patch
similarity index 91%
rename from patches/server/0280-Configurable-block-fall-damage-modifiers.patch
rename to patches/server/0276-Configurable-block-fall-damage-modifiers.patch
index 9d2c1cadc..c885da83e 100644
--- a/patches/server/0280-Configurable-block-fall-damage-modifiers.patch
+++ b/patches/server/0276-Configurable-block-fall-damage-modifiers.patch
@@ -5,10 +5,10 @@ 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 e8405a57fb88e63b63baaf00645c417633bdc0f2..2b66ddafaaca17f64d1e7502dfa4d7576e3e032f 100644
+index ab11b017f0795f5ec8161a4831c463c780307eaa..8c6a8ab9e18bfbb015febea55e188ee9882ec5dc 100644
--- a/src/main/java/net/minecraft/world/level/block/BedBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/BedBlock.java
-@@ -173,7 +173,7 @@ public class BedBlock extends HorizontalDirectionalBlock implements EntityBlock
+@@ -183,7 +183,7 @@ public class BedBlock extends HorizontalDirectionalBlock implements EntityBlock
@Override
public void fallOn(Level world, BlockState state, BlockPos pos, Entity entity, float fallDistance) {
@@ -18,10 +18,10 @@ index e8405a57fb88e63b63baaf00645c417633bdc0f2..2b66ddafaaca17f64d1e7502dfa4d757
@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 cee9e07a250ed61570cf9787236308f91724f02f..65504432a13df45e895cf6ca885627014444563a 100644
+index f70d462a42e5f4b1951cf015234c3b383d90bc9b..9e32ca4a0f94627bbd4d3cedd5be93bfeb8115ee 100644
--- a/src/main/java/net/minecraft/world/level/block/Block.java
+++ b/src/main/java/net/minecraft/world/level/block/Block.java
-@@ -94,6 +94,10 @@ public class Block extends BlockBehaviour implements ItemLike {
+@@ -96,6 +96,10 @@ public class Block extends BlockBehaviour implements ItemLike {
public static final int UPDATE_LIMIT = 512;
protected final StateDefinition stateDefinition;
private BlockState defaultBlockState;
@@ -32,7 +32,7 @@ index cee9e07a250ed61570cf9787236308f91724f02f..65504432a13df45e895cf6ca88562701
// Paper start
public final boolean isDestroyable() {
return io.papermc.paper.configuration.GlobalConfiguration.get().unsupportedSettings.allowPermanentBlockBreakExploits ||
-@@ -506,7 +510,7 @@ public class Block extends BlockBehaviour implements ItemLike {
+@@ -513,7 +517,7 @@ public class Block extends BlockBehaviour implements ItemLike {
}
public void fallOn(Level world, BlockState state, BlockPos pos, Entity entity, float fallDistance) {
@@ -42,10 +42,10 @@ index cee9e07a250ed61570cf9787236308f91724f02f..65504432a13df45e895cf6ca88562701
public void updateEntityAfterFallOn(BlockGetter world, Entity entity) {
diff --git a/src/main/java/net/minecraft/world/level/block/HayBlock.java b/src/main/java/net/minecraft/world/level/block/HayBlock.java
-index cfbe1dae76db76cf54a4f5d72aca72d5e893859e..74cb10230d459ac9f300a9d59af504d233ac663e 100644
+index ef364aa171a48482a45bc18cfe730ec20c3f7be6..74971d90506aa253d5ee821b5390fb2551a3a393 100644
--- a/src/main/java/net/minecraft/world/level/block/HayBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/HayBlock.java
-@@ -15,6 +15,6 @@ public class HayBlock extends RotatedPillarBlock {
+@@ -23,6 +23,6 @@ public class HayBlock extends RotatedPillarBlock {
@Override
public void fallOn(Level world, BlockState state, BlockPos pos, Entity entity, float fallDistance) {
diff --git a/patches/server/0281-Language-API.patch b/patches/server/0277-Language-API.patch
similarity index 88%
rename from patches/server/0281-Language-API.patch
rename to patches/server/0277-Language-API.patch
index e68b59216..e69bdd237 100644
--- a/patches/server/0281-Language-API.patch
+++ b/patches/server/0277-Language-API.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Language API
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
-index 4563040a258f4379bd717c398a51c2d2cce9e77f..79f00c72d28426095a3f3742d77f2369164b2a9c 100644
+index 7c35318e65608b29f6ea0c1481c0af8f0dd8ba5f..1677e737daa272d7669777a75214170a8e9c7d74 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
-@@ -401,6 +401,20 @@ public final class CraftServer implements Server {
+@@ -402,6 +402,20 @@ public final class CraftServer implements Server {
this.dataPackManager = new CraftDataPackManager(this.getServer().getPackRepository());
Bukkit.setServer(this);
diff --git a/patches/server/0282-Milk-Keeps-Beneficial-Effects.patch b/patches/server/0278-Milk-Keeps-Beneficial-Effects.patch
similarity index 93%
rename from patches/server/0282-Milk-Keeps-Beneficial-Effects.patch
rename to patches/server/0278-Milk-Keeps-Beneficial-Effects.patch
index 554916528..ae4807ae8 100644
--- a/patches/server/0282-Milk-Keeps-Beneficial-Effects.patch
+++ b/patches/server/0278-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 7a5f51c9585c280c51b4dbe5e6848d7e07fa7386..aa7ef9bcd6caffa9b987ae4ae759f89358e3001d 100644
+index 3af72be980ed6cab704eedadeb9a9577aca25fc1..ac57b2d31019eeb12a0d63266b900c606d90b05e 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
@@ -1124,6 +1124,7 @@ public abstract class LivingEntity extends Entity implements Attackable {
@@ -17,7 +17,7 @@ index 7a5f51c9585c280c51b4dbe5e6848d7e07fa7386..aa7ef9bcd6caffa9b987ae4ae759f893
if (event.isCancelled()) {
continue;
diff --git a/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java b/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java
-index 6986fcbe67e55c4942d13b2af39bd6293bf993a9..d8a4b1aaa180fc0c837bc0d8efab781a578898a5 100644
+index 08320248a6956d41d60681e3d29f81768c80fd3d..237247cb91248eb2d05e967e95cb8ad0a8a63080 100644
--- a/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java
+++ b/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java
@@ -114,7 +114,7 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill
@@ -30,7 +30,7 @@ index 6986fcbe67e55c4942d13b2af39bd6293bf993a9..d8a4b1aaa180fc0c837bc0d8efab781a
this.goalSelector.addGoal(1, new TradeWithPlayerGoal(this));
this.goalSelector.addGoal(1, new AvoidEntityGoal<>(this, Zombie.class, 8.0F, 0.5D, 0.5D));
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 1a8a1a9bca5c2f92b87fb1a21bdff194718caa8e..1bec2760e6ae3022dbcef1bb40d7749cf3b0609e 100644
+index 4cd381104a2ab320feb3984b8f77f9630246c7e4..48e44b0dd3d9ff863d7ee7a96d434a68a84cdf0f 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -128,6 +128,7 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0283-MC-121706-Fix-mobs-not-looking-up-and-down-when-stra.patch b/patches/server/0279-MC-121706-Fix-mobs-not-looking-up-and-down-when-stra.patch
similarity index 100%
rename from patches/server/0283-MC-121706-Fix-mobs-not-looking-up-and-down-when-stra.patch
rename to patches/server/0279-MC-121706-Fix-mobs-not-looking-up-and-down-when-stra.patch
diff --git a/patches/server/0284-Add-log-suppression-for-LibraryLoader.patch b/patches/server/0280-Add-log-suppression-for-LibraryLoader.patch
similarity index 100%
rename from patches/server/0284-Add-log-suppression-for-LibraryLoader.patch
rename to patches/server/0280-Add-log-suppression-for-LibraryLoader.patch
diff --git a/patches/server/0285-Add-option-to-allow-creeper-to-encircle-target-when-.patch b/patches/server/0281-Add-option-to-allow-creeper-to-encircle-target-when-.patch
similarity index 92%
rename from patches/server/0285-Add-option-to-allow-creeper-to-encircle-target-when-.patch
rename to patches/server/0281-Add-option-to-allow-creeper-to-encircle-target-when-.patch
index 4655518ae..342e508ef 100644
--- a/patches/server/0285-Add-option-to-allow-creeper-to-encircle-target-when-.patch
+++ b/patches/server/0281-Add-option-to-allow-creeper-to-encircle-target-when-.patch
@@ -24,10 +24,10 @@ index e241ae250f4f04a17ef2c583d00b065a4ca56a4c..7b99c3446b50939241d3e220d93e0564
}
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 1bec2760e6ae3022dbcef1bb40d7749cf3b0609e..c04befc0e4d97497087bc8961daefe814e199a84 100644
+index 48e44b0dd3d9ff863d7ee7a96d434a68a84cdf0f..52108909cbe0ea7faa0032f985898c41084cac10 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -1357,6 +1357,7 @@ public class PurpurWorldConfig {
+@@ -1348,6 +1348,7 @@ public class PurpurWorldConfig {
public boolean creeperHealthRadius = false;
public boolean creeperAlwaysDropExp = false;
public double creeperHeadVisibilityPercent = 0.5D;
@@ -35,7 +35,7 @@ index 1bec2760e6ae3022dbcef1bb40d7749cf3b0609e..c04befc0e4d97497087bc8961daefe81
private void creeperSettings() {
creeperRidable = getBoolean("mobs.creeper.ridable", creeperRidable);
creeperRidableInWater = getBoolean("mobs.creeper.ridable-in-water", creeperRidableInWater);
-@@ -1375,6 +1376,7 @@ public class PurpurWorldConfig {
+@@ -1366,6 +1367,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/0286-Fire-Immunity-API.patch b/patches/server/0282-Fire-Immunity-API.patch
similarity index 78%
rename from patches/server/0286-Fire-Immunity-API.patch
rename to patches/server/0282-Fire-Immunity-API.patch
index 8e400970f..a32b76a9f 100644
--- a/patches/server/0286-Fire-Immunity-API.patch
+++ b/patches/server/0282-Fire-Immunity-API.patch
@@ -5,10 +5,10 @@ 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 5d46d35db653d58ccb850794282e8613b33e2393..1b58e4c4919d6e697533dd2f29f7c91ff5074987 100644
+index 82f649715a566a5bbbbc175877bd344d96e41a2d..9c7a84874df50ba675a6a480086336e0c137424f 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
-@@ -418,6 +418,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {
+@@ -423,6 +423,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S
public boolean freezeLocked = false; // Paper - Freeze Tick Lock API
public boolean collidingWithWorldBorder; // Paper
public boolean fixedPose = false; // Paper
@@ -16,7 +16,7 @@ index 5d46d35db653d58ccb850794282e8613b33e2393..1b58e4c4919d6e697533dd2f29f7c91f
public void setOrigin(@javax.annotation.Nonnull Location location) {
this.origin = location.toVector();
-@@ -1812,7 +1813,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {
+@@ -1805,7 +1806,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S
}
public boolean fireImmune() {
@@ -25,19 +25,19 @@ index 5d46d35db653d58ccb850794282e8613b33e2393..1b58e4c4919d6e697533dd2f29f7c91f
}
public boolean causeFallDamage(float fallDistance, float damageMultiplier, DamageSource damageSource) {
-@@ -2486,6 +2487,11 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {
- nbt.putBoolean("Paper.FreezeLock", true);
+@@ -2497,6 +2498,11 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S
+ nbttagcompound.putBoolean("Paper.FreezeLock", true);
}
// Paper end
+ // Purpur start
+ if (immuneToFire != null) {
-+ nbt.putBoolean("Purpur.FireImmune", immuneToFire);
++ nbttagcompound.putBoolean("Purpur.FireImmune", immuneToFire);
+ }
+ // Purpur end
- return nbt;
+ return nbttagcompound;
} catch (Throwable throwable) {
CrashReport crashreport = CrashReport.forThrowable(throwable, "Saving entity NBT");
-@@ -2633,6 +2639,11 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {
+@@ -2644,6 +2650,11 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S
freezeLocked = nbt.getBoolean("Paper.FreezeLock");
}
// Paper end
@@ -50,10 +50,10 @@ index 5d46d35db653d58ccb850794282e8613b33e2393..1b58e4c4919d6e697533dd2f29f7c91f
} 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 38ff078ae636218d157d4c885fca19be5666b52a..a18bc175d0a6d55492edd02cdc407a52d58346c1 100644
+index 03b38dd69cd6932c17b9b2d832e67c14628a4918..d2c4ebe74023c96220aae4629abb3a515f1c2a20 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
-@@ -223,6 +223,16 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
+@@ -228,6 +228,16 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
this.entityType = CraftEntityType.minecraftToBukkit(entity.getType());
}
@@ -71,7 +71,7 @@ index 38ff078ae636218d157d4c885fca19be5666b52a..a18bc175d0a6d55492edd02cdc407a52
public boolean isInDaylight() {
return getHandle().isSunBurnTick();
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftItem.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftItem.java
-index b2a28dea0c711331c351d38ac19944ef9f9299dc..f03a6fad31b240722a2b944d91282412cf79d884 100644
+index 14d6ff11c8b8b047ada5d308515e9d214cf77b69..ba33fb0b049a670851004022da18fe744dca27eb 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftItem.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftItem.java
@@ -173,9 +173,14 @@ public class CraftItem extends CraftEntity implements Item {
diff --git a/patches/server/0287-Add-option-to-teleport-to-spawn-on-nether-ceiling-da.patch b/patches/server/0283-Add-option-to-teleport-to-spawn-on-nether-ceiling-da.patch
similarity index 88%
rename from patches/server/0287-Add-option-to-teleport-to-spawn-on-nether-ceiling-da.patch
rename to patches/server/0283-Add-option-to-teleport-to-spawn-on-nether-ceiling-da.patch
index 1f4e95614..82885415c 100644
--- a/patches/server/0287-Add-option-to-teleport-to-spawn-on-nether-ceiling-da.patch
+++ b/patches/server/0283-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 1b58e4c4919d6e697533dd2f29f7c91ff5074987..d61d7ae47285d9779221011212f871c4ef7de830 100644
+index 9c7a84874df50ba675a6a480086336e0c137424f..b38b39bbf6560af368780a305559668a9d8f808b 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
-@@ -917,6 +917,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {
+@@ -910,6 +910,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S
&& this.level.paperConfig().environment.netherCeilingVoidDamageHeight.test(v -> this.getY() >= v)
&& (!(this instanceof Player player) || !player.getAbilities().invulnerable))) {
// Paper end
@@ -17,7 +17,7 @@ index 1b58e4c4919d6e697533dd2f29f7c91ff5074987..d61d7ae47285d9779221011212f871c4
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index c04befc0e4d97497087bc8961daefe814e199a84..443871290764e6863509acd0847f8c4c8f8566b6 100644
+index 52108909cbe0ea7faa0032f985898c41084cac10..0e25bfd7b345c3ba578191ce6656f041ffb9fd05 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -417,6 +417,7 @@ public class PurpurWorldConfig {
@@ -28,7 +28,7 @@ index c04befc0e4d97497087bc8961daefe814e199a84..443871290764e6863509acd0847f8c4c
public boolean totemOfUndyingWorksInInventory = false;
public boolean playerFixStuckPortal = false;
public boolean creativeOnePunch = false;
-@@ -446,6 +447,7 @@ public class PurpurWorldConfig {
+@@ -444,6 +445,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/0288-Added-got-ram-event.patch b/patches/server/0284-Added-got-ram-event.patch
similarity index 86%
rename from patches/server/0288-Added-got-ram-event.patch
rename to patches/server/0284-Added-got-ram-event.patch
index b9275a0e9..6512088bd 100644
--- a/patches/server/0288-Added-got-ram-event.patch
+++ b/patches/server/0284-Added-got-ram-event.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Added got ram event
diff --git a/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java b/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java
-index 806b207e5246db7daa03bebabd7aa574d8b0dab7..5d7b20c30bc5e3be8511b300c318d12a1e4a49d0 100644
+index 1162318d8d187b8bdb30d28f6f61c430452c41b5..fd2a6c9def675fa2dd5e78fbc18002794098da26 100644
--- a/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java
+++ b/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java
-@@ -429,6 +429,7 @@ public class Goat extends Animal {
+@@ -428,6 +428,7 @@ public class Goat extends Animal {
// Paper start - Goat ram API
public void ram(net.minecraft.world.entity.LivingEntity entity) {
diff --git a/patches/server/0289-Log-skipped-entity-s-position.patch b/patches/server/0285-Log-skipped-entity-s-position.patch
similarity index 86%
rename from patches/server/0289-Log-skipped-entity-s-position.patch
rename to patches/server/0285-Log-skipped-entity-s-position.patch
index eca731a8b..0d909a68e 100644
--- a/patches/server/0289-Log-skipped-entity-s-position.patch
+++ b/patches/server/0285-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 5d703e322bd220665c3ce3a41e40129b238ae150..5930e45bae5aa86b3cedb811c4c9bb92099bc1b5 100644
+index ef01a87a77954f19f017129ab186afea9e6389a2..9793a5c9a36201b00ba32f2ac928cfabfbdb98e1 100644
--- a/src/main/java/net/minecraft/world/entity/EntityType.java
+++ b/src/main/java/net/minecraft/world/entity/EntityType.java
-@@ -613,6 +613,12 @@ public class EntityType implements FeatureElement, EntityTypeT
+@@ -615,6 +615,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/0290-End-Crystal-Cramming.patch b/patches/server/0286-End-Crystal-Cramming.patch
similarity index 91%
rename from patches/server/0290-End-Crystal-Cramming.patch
rename to patches/server/0286-End-Crystal-Cramming.patch
index fc7355718..35e687f75 100644
--- a/patches/server/0290-End-Crystal-Cramming.patch
+++ b/patches/server/0286-End-Crystal-Cramming.patch
@@ -17,10 +17,10 @@ index 564d17bc460e2a04947ff9676fbf4c8b1569659c..440add62fcfa62d483409e1aecfc9159
// Purpur start
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 443871290764e6863509acd0847f8c4c8f8566b6..829f3a7542460ef71bd934ff3dea0321168a9fac 100644
+index 0e25bfd7b345c3ba578191ce6656f041ffb9fd05..8a4a51283bfc37e61c6581bf6e2ddd49e79a3122 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -877,6 +877,7 @@ public class PurpurWorldConfig {
+@@ -873,6 +873,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 443871290764e6863509acd0847f8c4c8f8566b6..829f3a7542460ef71bd934ff3dea0321
private void endCrystalSettings() {
if (PurpurConfig.version < 31) {
if ("DESTROY".equals(getString("blocks.end-crystal.baseless.explosion-effect", baselessEndCrystalExplosionEffect.name()))) {
-@@ -904,6 +905,7 @@ public class PurpurWorldConfig {
+@@ -900,6 +901,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/0291-Option-to-allow-beacon-effects-when-covered-by-tinte.patch b/patches/server/0287-Option-to-allow-beacon-effects-when-covered-by-tinte.patch
similarity index 95%
rename from patches/server/0291-Option-to-allow-beacon-effects-when-covered-by-tinte.patch
rename to patches/server/0287-Option-to-allow-beacon-effects-when-covered-by-tinte.patch
index 2ff083b98..ba5a3cc4b 100644
--- a/patches/server/0291-Option-to-allow-beacon-effects-when-covered-by-tinte.patch
+++ b/patches/server/0287-Option-to-allow-beacon-effects-when-covered-by-tinte.patch
@@ -36,10 +36,10 @@ index a5f9747be5503dd24abd98f11cfa8229448ca3bf..99ef8d7e3ee0ee9777d12ad825e728c3
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 829f3a7542460ef71bd934ff3dea0321168a9fac..78e8043f85f65e81db0d4192fbe93df952849490 100644
+index 8a4a51283bfc37e61c6581bf6e2ddd49e79a3122..05b4bd8495451dbd6277946e77737495b58375f8 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -776,11 +776,13 @@ public class PurpurWorldConfig {
+@@ -772,11 +772,13 @@ public class PurpurWorldConfig {
public int beaconLevelTwo = 30;
public int beaconLevelThree = 40;
public int beaconLevelFour = 50;
diff --git a/patches/server/0292-Add-attribute-clamping-and-armor-limit-config.patch b/patches/server/0288-Add-attribute-clamping-and-armor-limit-config.patch
similarity index 100%
rename from patches/server/0292-Add-attribute-clamping-and-armor-limit-config.patch
rename to patches/server/0288-Add-attribute-clamping-and-armor-limit-config.patch
diff --git a/patches/server/0293-Config-to-remove-explosion-radius-clamp.patch b/patches/server/0289-Config-to-remove-explosion-radius-clamp.patch
similarity index 88%
rename from patches/server/0293-Config-to-remove-explosion-radius-clamp.patch
rename to patches/server/0289-Config-to-remove-explosion-radius-clamp.patch
index d9f022418..75558571d 100644
--- a/patches/server/0293-Config-to-remove-explosion-radius-clamp.patch
+++ b/patches/server/0289-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/entity/boss/enderdragon/EnderDragon.java b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java
-index 82d81fd2edff9df0bb4ff116d9274887a316d0a8..823f0e36119079eb827767c08391f18d75b66610 100644
+index d116f6d5c5ca8cc956264ef14f59001a2ff32d49..624dad43a1088e1d6423561e2cf418f329fbca38 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
@@ -111,6 +111,7 @@ public class EnderDragon extends Mob implements Enemy {
@@ -17,10 +17,10 @@ index 82d81fd2edff9df0bb4ff116d9274887a316d0a8..823f0e36119079eb827767c08391f18d
this.growlTime = 100;
this.nodes = new Node[24];
diff --git a/src/main/java/net/minecraft/world/level/Explosion.java b/src/main/java/net/minecraft/world/level/Explosion.java
-index b26cea981a876fd42c9ab91923d507b3c11a0425..b6c8f19a7d919fc56deb3518a28d725e9afbc82b 100644
+index 370952a7be8df3ea00c0816235d84927df4ed79d..b0b8a0391bfd347fea44271b0408de2792d6489b 100644
--- a/src/main/java/net/minecraft/world/level/Explosion.java
+++ b/src/main/java/net/minecraft/world/level/Explosion.java
-@@ -87,7 +87,7 @@ public class Explosion {
+@@ -97,7 +97,7 @@ public class Explosion {
this.hitPlayers = Maps.newHashMap();
this.level = world;
this.source = entity;
@@ -29,7 +29,7 @@ index b26cea981a876fd42c9ab91923d507b3c11a0425..b6c8f19a7d919fc56deb3518a28d725e
this.x = x;
this.y = y;
this.z = z;
-@@ -403,7 +403,7 @@ public class Explosion {
+@@ -425,7 +425,7 @@ public class Explosion {
public void explode() {
// CraftBukkit start
@@ -39,7 +39,7 @@ index b26cea981a876fd42c9ab91923d507b3c11a0425..b6c8f19a7d919fc56deb3518a28d725e
}
// CraftBukkit end
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 78e8043f85f65e81db0d4192fbe93df952849490..ba7fa9386b494c38e44717529f20c9341e26d9c2 100644
+index 05b4bd8495451dbd6277946e77737495b58375f8..f3571a1a86b7ec9f10b2a5bf4e2c3f7b0bded7d1 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -213,6 +213,11 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0294-bonemealable-sugarcane-cactus-and-netherwart.patch b/patches/server/0290-bonemealable-sugarcane-cactus-and-netherwart.patch
similarity index 86%
rename from patches/server/0294-bonemealable-sugarcane-cactus-and-netherwart.patch
rename to patches/server/0290-bonemealable-sugarcane-cactus-and-netherwart.patch
index 8da96d245..2c159a893 100644
--- a/patches/server/0294-bonemealable-sugarcane-cactus-and-netherwart.patch
+++ b/patches/server/0290-bonemealable-sugarcane-cactus-and-netherwart.patch
@@ -5,19 +5,19 @@ Subject: [PATCH] bonemealable sugarcane, cactus, and netherwart
diff --git a/src/main/java/net/minecraft/world/level/block/CactusBlock.java b/src/main/java/net/minecraft/world/level/block/CactusBlock.java
-index c2ca3432a47124d02e1aaf8ffb621f9a2c7d7a62..fa6a2fbb8065b1f120750491b7e4b89542a6a891 100644
+index 89c0006c06098e0d09a259ea8415d55b997367aa..a476f9a1eaa99b557962947149b6ee6ea3288d6e 100644
--- a/src/main/java/net/minecraft/world/level/block/CactusBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/CactusBlock.java
-@@ -22,7 +22,7 @@ import net.minecraft.world.phys.shapes.CollisionContext;
+@@ -23,7 +23,7 @@ import net.minecraft.world.phys.shapes.CollisionContext;
import net.minecraft.world.phys.shapes.VoxelShape;
import org.bukkit.craftbukkit.event.CraftEventFactory; // CraftBukkit
-public class CactusBlock extends Block {
+public class CactusBlock extends Block implements BonemealableBlock { // Purpur
+ public static final MapCodec CODEC = simpleCodec(CactusBlock::new);
public static final IntegerProperty AGE = BlockStateProperties.AGE_15;
- public static final int MAX_AGE = 15;
-@@ -129,4 +129,34 @@ public class CactusBlock extends Block {
+@@ -136,4 +136,34 @@ public class CactusBlock extends Block {
public boolean isPathfindable(BlockState state, BlockGetter world, BlockPos pos, PathComputationType type) {
return false;
}
@@ -53,19 +53,19 @@ index c2ca3432a47124d02e1aaf8ffb621f9a2c7d7a62..fa6a2fbb8065b1f120750491b7e4b895
+ // 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 74fedd3e401c6d58c03c0579f4b919114404fd78..7d15796e3637c1a865703807c98a22c01315c307 100644
+index 7328764abb0790b389d396179db32f4a63bfe98a..9e47da91a5daed92b7326c84a88e619d2d981dd0 100644
--- a/src/main/java/net/minecraft/world/level/block/NetherWartBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/NetherWartBlock.java
-@@ -14,7 +14,7 @@ import net.minecraft.world.level.block.state.properties.IntegerProperty;
+@@ -16,7 +16,7 @@ import net.minecraft.world.level.block.state.properties.IntegerProperty;
import net.minecraft.world.phys.shapes.CollisionContext;
import net.minecraft.world.phys.shapes.VoxelShape;
-public class NetherWartBlock extends BushBlock {
+public class NetherWartBlock extends BushBlock implements BonemealableBlock { // Purpur
+ public static final MapCodec CODEC = simpleCodec(NetherWartBlock::new);
public static final int MAX_AGE = 3;
- public static final IntegerProperty AGE = BlockStateProperties.AGE_3;
-@@ -70,5 +70,22 @@ public class NetherWartBlock extends BushBlock {
+@@ -78,5 +78,22 @@ public class NetherWartBlock extends BushBlock {
super.playerDestroy(world, player, pos, state, blockEntity, itemInHand, includeDrops);
}
}
@@ -89,19 +89,19 @@ index 74fedd3e401c6d58c03c0579f4b919114404fd78..7d15796e3637c1a865703807c98a22c0
// Purpur end
}
diff --git a/src/main/java/net/minecraft/world/level/block/SugarCaneBlock.java b/src/main/java/net/minecraft/world/level/block/SugarCaneBlock.java
-index c3f500580d257e1397f2eb7c47b063a6fe6bb405..21a194fadb7d1f0a30f94caf999dabdd78847f36 100644
+index ceaec1776067b7635c3952025f00f13f4ea86c88..8b6c43b0a2fb4b89d6f63716e56074ef0e194e63 100644
--- a/src/main/java/net/minecraft/world/level/block/SugarCaneBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/SugarCaneBlock.java
-@@ -19,7 +19,7 @@ import net.minecraft.world.level.material.FluidState;
+@@ -20,7 +20,7 @@ import net.minecraft.world.level.material.FluidState;
import net.minecraft.world.phys.shapes.CollisionContext;
import net.minecraft.world.phys.shapes.VoxelShape;
-public class SugarCaneBlock extends Block {
+public class SugarCaneBlock extends Block implements BonemealableBlock { // Purpur
+ public static final MapCodec CODEC = simpleCodec(SugarCaneBlock::new);
public static final IntegerProperty AGE = BlockStateProperties.AGE_15;
- protected static final float AABB_OFFSET = 6.0F;
-@@ -106,4 +106,34 @@ public class SugarCaneBlock extends Block {
+@@ -113,4 +113,34 @@ public class SugarCaneBlock extends Block {
protected void createBlockStateDefinition(StateDefinition.Builder builder) {
builder.add(SugarCaneBlock.AGE);
}
@@ -137,10 +137,10 @@ index c3f500580d257e1397f2eb7c47b063a6fe6bb405..21a194fadb7d1f0a30f94caf999dabdd
+ // Purpur end
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index ba7fa9386b494c38e44717529f20c9341e26d9c2..2870a23c01ab5bdb45e355b2f1fd277395ef4771 100644
+index f3571a1a86b7ec9f10b2a5bf4e2c3f7b0bded7d1..db47c443a765a87d2cabde2d3956909661d65237 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -830,8 +830,20 @@ public class PurpurWorldConfig {
+@@ -826,8 +826,20 @@ public class PurpurWorldConfig {
}
public boolean cactusBreaksFromSolidNeighbors = true;
diff --git a/patches/server/0295-Add-PreExplodeEvents.patch b/patches/server/0291-Add-PreExplodeEvents.patch
similarity index 92%
rename from patches/server/0295-Add-PreExplodeEvents.patch
rename to patches/server/0291-Add-PreExplodeEvents.patch
index c99e6649a..2462678f8 100644
--- a/patches/server/0295-Add-PreExplodeEvents.patch
+++ b/patches/server/0291-Add-PreExplodeEvents.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Add PreExplodeEvents
diff --git a/src/main/java/net/minecraft/world/level/Explosion.java b/src/main/java/net/minecraft/world/level/Explosion.java
-index b6c8f19a7d919fc56deb3518a28d725e9afbc82b..ef9b1687dd2dfda5398523140aecc678b4690642 100644
+index b0b8a0391bfd347fea44271b0408de2792d6489b..e07078e175433b3b63c7031b02eb3846c091821d 100644
--- a/src/main/java/net/minecraft/world/level/Explosion.java
+++ b/src/main/java/net/minecraft/world/level/Explosion.java
-@@ -407,6 +407,23 @@ public class Explosion {
+@@ -429,6 +429,23 @@ public class Explosion {
return;
}
// CraftBukkit end
diff --git a/patches/server/0296-Improve-output-of-plugins-command.patch b/patches/server/0292-Improve-output-of-plugins-command.patch
similarity index 100%
rename from patches/server/0296-Improve-output-of-plugins-command.patch
rename to patches/server/0292-Improve-output-of-plugins-command.patch
diff --git a/patches/server/0297-Add-mending-multiplier.patch b/patches/server/0293-Add-mending-multiplier.patch
similarity index 92%
rename from patches/server/0297-Add-mending-multiplier.patch
rename to patches/server/0293-Add-mending-multiplier.patch
index cf095aedc..747ffa0df 100644
--- a/patches/server/0297-Add-mending-multiplier.patch
+++ b/patches/server/0293-Add-mending-multiplier.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Add mending multiplier
diff --git a/src/main/java/net/minecraft/world/entity/ExperienceOrb.java b/src/main/java/net/minecraft/world/entity/ExperienceOrb.java
-index b2233635b6acc35ea3668c36c56e57f15420ac62..724bf857bf1b89cb0947b8a82e0ce09a0bec0335 100644
+index a3ef8e6a698df4c78e0494da48063ddd29caf62f..1b8f5680c4122c7b6b19e2bc1ed6295caa024622 100644
--- a/src/main/java/net/minecraft/world/entity/ExperienceOrb.java
+++ b/src/main/java/net/minecraft/world/entity/ExperienceOrb.java
@@ -359,13 +359,15 @@ public class ExperienceOrb extends Entity {
@@ -27,7 +27,7 @@ index b2233635b6acc35ea3668c36c56e57f15420ac62..724bf857bf1b89cb0947b8a82e0ce09a
public int getValue() {
return this.value;
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 2870a23c01ab5bdb45e355b2f1fd277395ef4771..e7a794ce230c481e39436506facdb77726f96199 100644
+index db47c443a765a87d2cabde2d3956909661d65237..93f350d5059e9385f4ba344cd24be8ca4d3198e9 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -119,6 +119,7 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0298-Make-GUI-Great-Again.patch b/patches/server/0294-Make-GUI-Great-Again.patch
similarity index 99%
rename from patches/server/0298-Make-GUI-Great-Again.patch
rename to patches/server/0294-Make-GUI-Great-Again.patch
index 193a40bd4..d314a536c 100644
--- a/patches/server/0298-Make-GUI-Great-Again.patch
+++ b/patches/server/0294-Make-GUI-Great-Again.patch
@@ -96,7 +96,7 @@ index 0000000000000000000000000000000000000000..15a226e3854d731f7724025ea3459c8a
+ }
+}
diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
-index db17a6ce62bdaa5018e79f0fe0fac9838e6b07d6..a51306bb36d403ab627cd8b2fc8d8f7a3e6ca918 100644
+index 0d3d62620659d7897d4ad92147255a99a4a1866d..2e70ac06c1a6414d9fbbc7a929968e804f0a91f5 100644
--- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
+++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
@@ -99,6 +99,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface
diff --git a/patches/server/0299-Stored-Bee-API.patch b/patches/server/0295-Stored-Bee-API.patch
similarity index 98%
rename from patches/server/0299-Stored-Bee-API.patch
rename to patches/server/0295-Stored-Bee-API.patch
index 244285d4f..4ff9f6b4e 100644
--- a/patches/server/0299-Stored-Bee-API.patch
+++ b/patches/server/0295-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 5dd0daba333159b26987921b810e0ac3575afc5f..1098cf5a7675ec742caf687cc8828e09cfd3125e 100644
+index 8a163b5d3c7759abe4fe84bfec788a15fddc1e44..f5bcfece7bba52234964da646370bc271043a631 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
@@ -130,6 +130,22 @@ public class BeehiveBlockEntity extends BlockEntity {
diff --git a/patches/server/0300-Shears-can-defuse-TNT.patch b/patches/server/0296-Shears-can-defuse-TNT.patch
similarity index 91%
rename from patches/server/0300-Shears-can-defuse-TNT.patch
rename to patches/server/0296-Shears-can-defuse-TNT.patch
index 154157dd0..fe90a9509 100644
--- a/patches/server/0300-Shears-can-defuse-TNT.patch
+++ b/patches/server/0296-Shears-can-defuse-TNT.patch
@@ -8,10 +8,10 @@ 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 4ce3e69970dd9eb251d0538a2d233ca30e9e5e47..afc65b8bb7e7f7f70a25f2d869412ed325b658da 100644
+index c3e47426382296d650fa00ce0bc1a82bf23c7877..dfc3e9d2611ce418ac6f6cc5a23bb74415007713 100644
--- a/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java
+++ b/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java
-@@ -175,4 +175,29 @@ public class PrimedTnt extends Entity implements TraceableEntity {
+@@ -207,4 +207,29 @@ public class PrimedTnt extends Entity implements TraceableEntity {
return !level().paperConfig().fixes.preventTntFromMovingInWater && super.isPushedByFluid();
}
// Paper end
@@ -42,10 +42,10 @@ index 4ce3e69970dd9eb251d0538a2d233ca30e9e5e47..afc65b8bb7e7f7f70a25f2d869412ed3
+ // 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 5019942bbbabef9a73f34d3b3c84c7c6f2a014b1..469aa0c5d2080394f0a9cbbb3891f0de36da72a3 100644
+index 93f350d5059e9385f4ba344cd24be8ca4d3198e9..0b95401b8d89268a3b7a388acfcaba5b5b679a0e 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -3223,4 +3223,11 @@ public class PurpurWorldConfig {
+@@ -3214,4 +3214,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/0301-Explorer-Map-API.patch b/patches/server/0297-Explorer-Map-API.patch
similarity index 91%
rename from patches/server/0301-Explorer-Map-API.patch
rename to patches/server/0297-Explorer-Map-API.patch
index f4039b193..b1f59284b 100644
--- a/patches/server/0301-Explorer-Map-API.patch
+++ b/patches/server/0297-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 c368b437597edf7e165326727ae778a69c3fcc83..fed5bfb02ab7d6c1d1d9bf993fda5b3f411b9352 100644
+index cd841f027edbe7e000d633034a2aa6a214c20b5b..ad90732cd424d4a1b569f708a6719a9934dee6dc 100644
--- a/src/main/java/net/minecraft/world/item/MapItem.java
+++ b/src/main/java/net/minecraft/world/item/MapItem.java
@@ -243,6 +243,7 @@ public class MapItem extends ComplexItem {
@@ -29,7 +29,7 @@ index e4c4948e076cd64686dfd16ae0568fafc1437140..804c342783baccdc12e8ca49a362770e
// CraftBukkit start
public final CraftMapView mapView;
diff --git a/src/main/java/org/bukkit/craftbukkit/map/CraftMapRenderer.java b/src/main/java/org/bukkit/craftbukkit/map/CraftMapRenderer.java
-index 2d2bf5c37709b8e747fbfa2db5ce86f258e86224..f6413ab181208d729afb532dca5e96e4c938e83c 100644
+index 15e9dd8844f893de5e8372b847c9e8295d6f69ca..b4b105c0190502328d5aeb680dd8e67c2875618f 100644
--- a/src/main/java/org/bukkit/craftbukkit/map/CraftMapRenderer.java
+++ b/src/main/java/org/bukkit/craftbukkit/map/CraftMapRenderer.java
@@ -46,4 +46,10 @@ public class CraftMapRenderer extends MapRenderer {
diff --git a/patches/server/0302-Option-Ocelot-Spawn-Under-Sea-Level.patch b/patches/server/0298-Option-Ocelot-Spawn-Under-Sea-Level.patch
similarity index 91%
rename from patches/server/0302-Option-Ocelot-Spawn-Under-Sea-Level.patch
rename to patches/server/0298-Option-Ocelot-Spawn-Under-Sea-Level.patch
index f0ebe5b25..c0699ddaf 100644
--- a/patches/server/0302-Option-Ocelot-Spawn-Under-Sea-Level.patch
+++ b/patches/server/0298-Option-Ocelot-Spawn-Under-Sea-Level.patch
@@ -18,10 +18,10 @@ index af275fc579d66bb098c08e88e4186846a1174c02..3c5f25300d1c7800144a459cc8bf5983
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index ec7c1b39a87f253c52de4d0f3b01e8329aaa723a..39236dc4d7c70edff091bb1df54b2158e6dd5e2c 100644
+index 0b95401b8d89268a3b7a388acfcaba5b5b679a0e..637c70fda2d3a82db8e6d831ff13160a05ab2008 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -2036,6 +2036,7 @@ public class PurpurWorldConfig {
+@@ -2027,6 +2027,7 @@ public class PurpurWorldConfig {
public int ocelotBreedingTicks = 6000;
public boolean ocelotTakeDamageFromWater = false;
public boolean ocelotAlwaysDropExp = false;
@@ -29,7 +29,7 @@ index ec7c1b39a87f253c52de4d0f3b01e8329aaa723a..39236dc4d7c70edff091bb1df54b2158
private void ocelotSettings() {
ocelotRidable = getBoolean("mobs.ocelot.ridable", ocelotRidable);
ocelotRidableInWater = getBoolean("mobs.ocelot.ridable-in-water", ocelotRidableInWater);
-@@ -2049,6 +2050,7 @@ public class PurpurWorldConfig {
+@@ -2040,6 +2041,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/0303-add-an-option-for-piglins-to-ignore-gold-trimmed-arm.patch b/patches/server/0299-add-an-option-for-piglins-to-ignore-gold-trimmed-arm.patch
similarity index 94%
rename from patches/server/0303-add-an-option-for-piglins-to-ignore-gold-trimmed-arm.patch
rename to patches/server/0299-add-an-option-for-piglins-to-ignore-gold-trimmed-arm.patch
index ead8bf953..391415caa 100644
--- a/patches/server/0303-add-an-option-for-piglins-to-ignore-gold-trimmed-arm.patch
+++ b/patches/server/0299-add-an-option-for-piglins-to-ignore-gold-trimmed-arm.patch
@@ -45,10 +45,10 @@ index 372d084609216d5437b92ee60810a9efbb0b6f31..a5a7ea0ddad31e3633647f823df86ddb
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 bb5b1acf54f8347ef19c50f50bc6e9ff90fa87f5..cc9aa6b7a76b1d993f0e3eb3d8e9374fffd87176 100644
+index 637c70fda2d3a82db8e6d831ff13160a05ab2008..4f3f16e90362fb08cfa20441fdc3b7220d10dbb4 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -2205,6 +2205,7 @@ public class PurpurWorldConfig {
+@@ -2196,6 +2196,7 @@ public class PurpurWorldConfig {
public int piglinPortalSpawnModifier = 2000;
public boolean piglinAlwaysDropExp = false;
public double piglinHeadVisibilityPercent = 0.5D;
@@ -56,7 +56,7 @@ index bb5b1acf54f8347ef19c50f50bc6e9ff90fa87f5..cc9aa6b7a76b1d993f0e3eb3d8e9374f
private void piglinSettings() {
piglinRidable = getBoolean("mobs.piglin.ridable", piglinRidable);
piglinRidableInWater = getBoolean("mobs.piglin.ridable-in-water", piglinRidableInWater);
-@@ -2220,6 +2221,7 @@ public class PurpurWorldConfig {
+@@ -2211,6 +2212,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/0304-Add-option-for-always-showing-item-in-player-death-m.patch b/patches/server/0300-Add-option-for-always-showing-item-in-player-death-m.patch
similarity index 100%
rename from patches/server/0304-Add-option-for-always-showing-item-in-player-death-m.patch
rename to patches/server/0300-Add-option-for-always-showing-item-in-player-death-m.patch
diff --git a/patches/server/0305-place-end-crystal-on-any-block.patch b/patches/server/0301-place-end-crystal-on-any-block.patch
similarity index 88%
rename from patches/server/0305-place-end-crystal-on-any-block.patch
rename to patches/server/0301-place-end-crystal-on-any-block.patch
index 617d26409..7d31a2ed7 100644
--- a/patches/server/0305-place-end-crystal-on-any-block.patch
+++ b/patches/server/0301-place-end-crystal-on-any-block.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] place end crystal on any block
diff --git a/src/main/java/net/minecraft/world/item/EndCrystalItem.java b/src/main/java/net/minecraft/world/item/EndCrystalItem.java
-index 3688e9f8c6c6d1239095e3a87060ccca90386d0c..34254eec36d34ae343733fa1abbaaba60be41a3b 100644
+index 5a19875cbc603acea95193d969d2e1dc1e0bfd78..a9ee4a382118294b43d0ff13ffd5fbe9463316a3 100644
--- a/src/main/java/net/minecraft/world/item/EndCrystalItem.java
+++ b/src/main/java/net/minecraft/world/item/EndCrystalItem.java
@@ -26,7 +26,7 @@ public class EndCrystalItem extends Item {
@@ -18,10 +18,10 @@ index 3688e9f8c6c6d1239095e3a87060ccca90386d0c..34254eec36d34ae343733fa1abbaaba6
} 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 cd7f347e46f4fa08e291bfdbbb01ea4f3271a877..d4d9f748d259df8b6f4566efa21c15c470de5ba2 100644
+index 4f3f16e90362fb08cfa20441fdc3b7220d10dbb4..96f6186ca9eb1889beefd7b54addc42052f8907a 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -899,6 +899,7 @@ public class PurpurWorldConfig {
+@@ -895,6 +895,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 cd7f347e46f4fa08e291bfdbbb01ea4f3271a877..d4d9f748d259df8b6f4566efa21c15c4
private void endCrystalSettings() {
if (PurpurConfig.version < 31) {
if ("DESTROY".equals(getString("blocks.end-crystal.baseless.explosion-effect", baselessEndCrystalExplosionEffect.name()))) {
-@@ -927,6 +928,7 @@ public class PurpurWorldConfig {
+@@ -923,6 +924,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/0306-Add-hover-lines-API.patch b/patches/server/0302-Add-hover-lines-API.patch
similarity index 88%
rename from patches/server/0306-Add-hover-lines-API.patch
rename to patches/server/0302-Add-hover-lines-API.patch
index fef201802..61bbe2d48 100644
--- a/patches/server/0306-Add-hover-lines-API.patch
+++ b/patches/server/0302-Add-hover-lines-API.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Add hover lines API
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemFactory.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemFactory.java
-index 9469b0d5d8a46ac17c3998a4b537a4feb1deb3b0..cf7b65ec3fac111b607f11d08aee8f11873a04fd 100644
+index c77634ec9c4e7a9eaacc81de7f95e9452b393a52..181a57cc22845d83f99b22b6c14cadd6cd3eeb36 100644
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemFactory.java
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemFactory.java
-@@ -599,4 +599,17 @@ public final class CraftItemFactory implements ItemFactory {
+@@ -602,4 +602,17 @@ public final class CraftItemFactory implements ItemFactory {
return CraftItemStack.asCraftMirror(enchanted);
}
// Paper end - enchantWithLevels API
diff --git a/patches/server/0307-Add-option-to-disable-the-copper-oxidation-proximity.patch b/patches/server/0303-Add-option-to-disable-the-copper-oxidation-proximity.patch
similarity index 85%
rename from patches/server/0307-Add-option-to-disable-the-copper-oxidation-proximity.patch
rename to patches/server/0303-Add-option-to-disable-the-copper-oxidation-proximity.patch
index 0ed6de5c5..8a75a040a 100644
--- a/patches/server/0307-Add-option-to-disable-the-copper-oxidation-proximity.patch
+++ b/patches/server/0303-Add-option-to-disable-the-copper-oxidation-proximity.patch
@@ -5,20 +5,20 @@ Subject: [PATCH] Add option to disable the copper oxidation proximity penalty
diff --git a/src/main/java/net/minecraft/world/level/block/ChangeOverTimeBlock.java b/src/main/java/net/minecraft/world/level/block/ChangeOverTimeBlock.java
-index 8512b977b44a0a4d3a2521e27a60d65f7ac967be..dd270f67388c8663e0418875c88cb1e2a55d0635 100644
+index daae7fd6e0148cfba8e359d990748a0c83a3376e..0e06b1bcd906e92c083dc74d56d6d0a2a36f62a7 100644
--- a/src/main/java/net/minecraft/world/level/block/ChangeOverTimeBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/ChangeOverTimeBlock.java
-@@ -65,7 +65,7 @@ public interface ChangeOverTimeBlock> {
+@@ -67,7 +67,7 @@ public interface ChangeOverTimeBlock> {
}
float f = (float) (k + 1) / (float) (k + j + 1);
- float f1 = f * f * this.getChanceModifier();
+ float f1 = world.purpurConfig.disableOxidationProximityPenalty ? this.getChanceModifier() : f * f * this.getChanceModifier(); // Purpur
- if (random.nextFloat() < f1) {
- this.getNext(state).ifPresent((iblockdata2) -> {
+ return random.nextFloat() < f1 ? this.getNext(state) : Optional.empty();
+ }
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index d4d9f748d259df8b6f4566efa21c15c470de5ba2..64e172e6cbfb8134c2b36bce8279e1ef44085257 100644
+index 96f6186ca9eb1889beefd7b54addc42052f8907a..d24664bc4d373804e373266a189eb6de1e0b261d 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -145,6 +145,7 @@ public class PurpurWorldConfig {
diff --git a/patches/api/0002-Fix-pufferfish-issues.patch b/patches/unapplied/api/0001-Fix-pufferfish-issues.patch
similarity index 100%
rename from patches/api/0002-Fix-pufferfish-issues.patch
rename to patches/unapplied/api/0001-Fix-pufferfish-issues.patch
diff --git a/patches/api/0001-Pufferfish-API-Changes.patch b/patches/unapplied/api/0001-Pufferfish-API-Changes.patch
similarity index 100%
rename from patches/api/0001-Pufferfish-API-Changes.patch
rename to patches/unapplied/api/0001-Pufferfish-API-Changes.patch
diff --git a/patches/server/0001-Pufferfish-Server-Changes.patch b/patches/unapplied/server/0001-Pufferfish-Server-Changes.patch
similarity index 100%
rename from patches/server/0001-Pufferfish-Server-Changes.patch
rename to patches/unapplied/server/0001-Pufferfish-Server-Changes.patch
diff --git a/patches/server/0002-Fix-pufferfish-issues.patch b/patches/unapplied/server/0002-Fix-pufferfish-issues.patch
similarity index 100%
rename from patches/server/0002-Fix-pufferfish-issues.patch
rename to patches/unapplied/server/0002-Fix-pufferfish-issues.patch
diff --git a/patches/server/0275-Make-pufferfish-config-relocatable.patch b/patches/unapplied/server/0275-Make-pufferfish-config-relocatable.patch
similarity index 100%
rename from patches/server/0275-Make-pufferfish-config-relocatable.patch
rename to patches/unapplied/server/0275-Make-pufferfish-config-relocatable.patch