From 33a31b01b77ac19c9afb45692b629d6ef562eb7b Mon Sep 17 00:00:00 2001 From: granny Date: Wed, 8 May 2024 19:01:16 -0700 Subject: [PATCH 001/588] Updated Upstream (Paper) Upstream has released updates that appear to apply and compile correctly Paper Changes: PaperMC/Paper@5729b29 Update Adventure to 4.17.0 Release --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 84f8a3a7a..b25dc406c 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ group = org.purpurmc.purpur version = 1.20.6-R0.1-SNAPSHOT mcVersion = 1.20.6 -paperCommit = eee55d019fe80372c2e08ccd1d0a94c066cda926 +paperCommit = 5729b294eef2ffde690f73c5b14a64a31f301084 org.gradle.caching = true org.gradle.parallel = true From 8aa793450315a361548f5e1dce4edf18e606bf51 Mon Sep 17 00:00:00 2001 From: granny Date: Wed, 8 May 2024 20:41:48 -0700 Subject: [PATCH 002/588] [ci skip] remove unneeded repository --- build.gradle.kts | 1 - 1 file changed, 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 44d772656..82be595b3 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -42,7 +42,6 @@ subprojects { repositories { mavenCentral() maven(paperMavenPublicUrl) - maven("https://s01.oss.sonatype.org/content/repositories/snapshots/") // TODO - Adventure snapshot maven("https://jitpack.io") } } From 0f0f600e2a14db63f0856001908d567e87ae254b Mon Sep 17 00:00:00 2001 From: granny Date: Thu, 9 May 2024 16:31:59 -0700 Subject: [PATCH 003/588] Updated Upstream (Paper) Upstream has released updates that appear to apply and compile correctly Paper Changes: PaperMC/Paper@ab2a85a [ci skip] Clarify var entry in contributing file PaperMC/Paper@f2512b1 Print data component type on encoding error --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index b25dc406c..61c1afdb9 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ group = org.purpurmc.purpur version = 1.20.6-R0.1-SNAPSHOT mcVersion = 1.20.6 -paperCommit = 5729b294eef2ffde690f73c5b14a64a31f301084 +paperCommit = f2512b12385961f8ca1f69efebe5ed0e00c0caa8 org.gradle.caching = true org.gradle.parallel = true From d8e95e062bcaa3ee26e9b0e76f39ae1c3beed292 Mon Sep 17 00:00:00 2001 From: granny Date: Thu, 9 May 2024 23:52:22 -0700 Subject: [PATCH 004/588] Updated Upstream (Paper) Upstream has released updates that appear to apply and compile correctly Paper Changes: PaperMC/Paper@1b67e02 Fix entity tracker desync when new players are added to the tracker PaperMC/Paper@cc29d2b Invalidate PathTypeCache when pathfinding updates are disabled --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 61c1afdb9..788e4b613 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ group = org.purpurmc.purpur version = 1.20.6-R0.1-SNAPSHOT mcVersion = 1.20.6 -paperCommit = f2512b12385961f8ca1f69efebe5ed0e00c0caa8 +paperCommit = cc29d2b7d594795b23573d8136c0266f680037bf org.gradle.caching = true org.gradle.parallel = true From e1603ae33f4d4fa00d7a166335160d8a5b97496d Mon Sep 17 00:00:00 2001 From: granny Date: Fri, 10 May 2024 00:46:18 -0700 Subject: [PATCH 005/588] Updated Upstream (Paper) Upstream has released updates that appear to apply and compile correctly Paper Changes: PaperMC/Paper@b56e92f Fix chunk data version check not running in chunk system PaperMC/Paper@2df1dac Fix DataConverter ConverterParticleToNBT.parseProperties PaperMC/Paper@8748ae1 Use MCDataConverter instead of raw convert call for cmd converter --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 788e4b613..f978605d6 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ group = org.purpurmc.purpur version = 1.20.6-R0.1-SNAPSHOT mcVersion = 1.20.6 -paperCommit = cc29d2b7d594795b23573d8136c0266f680037bf +paperCommit = 8748ae16aca495c0b6bfdc0c72e47ea64e4e6475 org.gradle.caching = true org.gradle.parallel = true From 479a7d8583d27167f96d4a418fdb05797d364453 Mon Sep 17 00:00:00 2001 From: granny Date: Fri, 10 May 2024 19:06:49 -0700 Subject: [PATCH 006/588] Updated Upstream (Paper) Upstream has released updates that appear to apply and compile correctly Paper Changes: PaperMC/Paper@7f1a154 Add validation to player profile and properties (#10680) PaperMC/Paper@4fd58a1 Add conversion for summon command PaperMC/Paper@39532a1 Fix stacks losing empty attr modifiers PaperMC/Paper@cdb6ba8 Fix keepalive time interval (#10690) --- gradle.properties | 2 +- patches/api/0009-Bring-back-server-name.patch | 4 ++-- patches/api/0011-Lagging-threshold.patch | 4 ++-- .../0030-Added-the-ability-to-add-combustible-items.patch | 4 ++-- patches/api/0037-Debug-Marker-API.patch | 4 ++-- patches/server/0016-Alternative-Keepalive-Handling.patch | 8 ++++---- 6 files changed, 13 insertions(+), 13 deletions(-) diff --git a/gradle.properties b/gradle.properties index f978605d6..57ff0eb73 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ group = org.purpurmc.purpur version = 1.20.6-R0.1-SNAPSHOT mcVersion = 1.20.6 -paperCommit = 8748ae16aca495c0b6bfdc0c72e47ea64e4e6475 +paperCommit = cdb6ba8ef1fc609289e813fa1dcbe62ac610ed0d org.gradle.caching = true org.gradle.parallel = true diff --git a/patches/api/0009-Bring-back-server-name.patch b/patches/api/0009-Bring-back-server-name.patch index 32c20281f..56635c70b 100644 --- a/patches/api/0009-Bring-back-server-name.patch +++ b/patches/api/0009-Bring-back-server-name.patch @@ -25,10 +25,10 @@ index 5d1b55fdbcbe63f6b42b694d05211a3cc691a09d..54f11593f4acfb89623cf1fad58819e0 + // Purpur end } diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java -index f5c3c1a0c11dd3518981ce3b86dba8ced8578d9c..1299cab5a4a0a017e0a1b792539d9b6fb8ef6c54 100644 +index 607ba7cb902d7053cb570d8f3676ecbadbe56daf..9ca26866e902aa6b70f9878bb16cdc558f9138f7 100644 --- a/src/main/java/org/bukkit/Server.java +++ b/src/main/java/org/bukkit/Server.java -@@ -2552,4 +2552,13 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi +@@ -2554,4 +2554,13 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi */ boolean isOwnedByCurrentRegion(@NotNull Entity entity); // Paper end - Folia region threading API diff --git a/patches/api/0011-Lagging-threshold.patch b/patches/api/0011-Lagging-threshold.patch index 428bbf5fb..92c1c6461 100644 --- a/patches/api/0011-Lagging-threshold.patch +++ b/patches/api/0011-Lagging-threshold.patch @@ -24,10 +24,10 @@ index 54f11593f4acfb89623cf1fad58819e001505fd1..215647d7f5cc8487d6a173bc0160fec6 // Purpur end } diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java -index 1299cab5a4a0a017e0a1b792539d9b6fb8ef6c54..7f9dc209c88a66bd2ee82cc62b948e827c6b1060 100644 +index 9ca26866e902aa6b70f9878bb16cdc558f9138f7..f6d1d39a3988aee95176badf47c127c82d3aa207 100644 --- a/src/main/java/org/bukkit/Server.java +++ b/src/main/java/org/bukkit/Server.java -@@ -2560,5 +2560,12 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi +@@ -2562,5 +2562,12 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi */ @NotNull String getServerName(); diff --git a/patches/api/0030-Added-the-ability-to-add-combustible-items.patch b/patches/api/0030-Added-the-ability-to-add-combustible-items.patch index 597454cba..d5b96b3b9 100644 --- a/patches/api/0030-Added-the-ability-to-add-combustible-items.patch +++ b/patches/api/0030-Added-the-ability-to-add-combustible-items.patch @@ -34,10 +34,10 @@ index 215647d7f5cc8487d6a173bc0160fec6db1971eb..7bc4e5e9947ab646707a5c0b39c70c0c // Purpur end } diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java -index 7f9dc209c88a66bd2ee82cc62b948e827c6b1060..fa926319ff033768d78508491e072efec1dcbc9f 100644 +index f6d1d39a3988aee95176badf47c127c82d3aa207..d39f53e9bb31195976993bb6390df6ff54085711 100644 --- a/src/main/java/org/bukkit/Server.java +++ b/src/main/java/org/bukkit/Server.java -@@ -2567,5 +2567,20 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi +@@ -2569,5 +2569,20 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi * @return True if lagging */ boolean isLagging(); diff --git a/patches/api/0037-Debug-Marker-API.patch b/patches/api/0037-Debug-Marker-API.patch index 8541e74ea..03d40a25e 100644 --- a/patches/api/0037-Debug-Marker-API.patch +++ b/patches/api/0037-Debug-Marker-API.patch @@ -99,10 +99,10 @@ index 7bc4e5e9947ab646707a5c0b39c70c0cc6606bd8..70ef8f63ab79e102cb4326c21cc34448 // Purpur end } diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java -index fa926319ff033768d78508491e072efec1dcbc9f..320422ff95773efa01e8205edcc5c6c9a84d5ecd 100644 +index d39f53e9bb31195976993bb6390df6ff54085711..ec8b9b2cbe65838a194281f7d76d0e17defc5211 100644 --- a/src/main/java/org/bukkit/Server.java +++ b/src/main/java/org/bukkit/Server.java -@@ -2582,5 +2582,75 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi +@@ -2584,5 +2584,75 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi * @param material The material that will no longer be a fuel */ public void removeFuel(@NotNull Material material); diff --git a/patches/server/0016-Alternative-Keepalive-Handling.patch b/patches/server/0016-Alternative-Keepalive-Handling.patch index 224feaaf5..217dd108f 100644 --- a/patches/server/0016-Alternative-Keepalive-Handling.patch +++ b/patches/server/0016-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 4228fd441f8350d43bd545e31c920304f07968bc..3a15085e0421f46800f779066d235ef21b463289 100644 +index a8edeb5a40cd9aac933805259407e32c544d181e..26ccb217b846410c826cb1da017b45903d9c5469 100644 --- a/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java @@ -73,6 +73,7 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack @@ -52,11 +52,11 @@ index 4228fd441f8350d43bd545e31c920304f07968bc..3a15085e0421f46800f779066d235ef2 + } else + // Purpur end + - if (!this.isSingleplayerOwner() && elapsedTime >= KEEPALIVE_LIMIT) { // Paper - check keepalive limit, don't fire if already disconnected - if (this.keepAlivePending && !this.processedDisconnect) { // Paper + if (!this.isSingleplayerOwner() && elapsedTime >= 15000L) { // Paper - use vanilla's 15000L between keep alive packets + if (this.keepAlivePending && !this.processedDisconnect && elapsedTime >= KEEPALIVE_LIMIT) { // Paper - check keepalive limit, don't fire if already disconnected this.disconnect(ServerCommonPacketListenerImpl.TIMEOUT_DISCONNECTION_MESSAGE, org.bukkit.event.player.PlayerKickEvent.Cause.TIMEOUT); // Paper - kick event cause diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index 9c5bba0ae119f8d42274455e322530ceb5f67d9b..a14cf3a5dc2ba265de5e400404afcbd9faa3f25a 100644 +index 876a4ea0beeae5baca62822eec2e18a4cf3ef09b..bf45bdc2126b320a4954a3d546ec9d4d30660527 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java @@ -198,6 +198,11 @@ public class PurpurConfig { From 5d3572db65b00ec505ff4e51d2fe235c2c3d65bc Mon Sep 17 00:00:00 2001 From: granny Date: Sat, 11 May 2024 19:35:26 -0700 Subject: [PATCH 007/588] Updated Upstream (Paper) Upstream has released updates that appear to apply and compile correctly Paper Changes: PaperMC/Paper@a61d58d adjust ItemMeta to distinguish null and empty modifiers PaperMC/Paper@6c02dbc handle recent ItemMeta changes in serialization logic PaperMC/Paper@447f9a1 [ci skip] Fix paperclip PR label PaperMC/Paper@b98d20a Brigadier Command Support (#8235) PaperMC/Paper@ac554ad Updated Upstream (Bukkit/CraftBukkit) (#10691) PaperMC/Paper@711f82e Fix signed book page serialization (#10696) --- gradle.properties | 2 +- patches/api/0002-Build-System-Changes.patch | 4 +- patches/api/0010-ExecuteCommandEvent.patch | 6 +- .../0014-ItemStack-convenience-methods.patch | 14 +-- patches/api/0035-Remove-Timings.patch | 4 +- patches/server/0001-Rebrand.patch | 32 +++---- patches/server/0002-Purpur-config-files.patch | 18 ++-- .../server/0003-Purpur-client-support.patch | 8 +- .../0005-Component-related-conveniences.patch | 6 +- patches/server/0006-Ridables.patch | 24 ++--- patches/server/0010-AFK-API.patch | 10 +-- .../server/0011-Bring-back-server-name.patch | 4 +- .../0012-Configurable-server-mod-name.patch | 6 +- patches/server/0013-Lagging-threshold.patch | 10 +-- ...able-loot-drops-on-death-by-cramming.patch | 4 +- ...-Skip-events-if-there-s-no-listeners.patch | 6 +- .../0043-Configurable-TPS-Catchup.patch | 6 +- ...derman-and-creeper-griefing-controls.patch | 6 +- ...0056-Add-5-second-tps-average-in-tps.patch | 10 +-- ...0065-Implement-bed-explosion-options.patch | 6 +- ...ent-respawn-anchor-explosion-options.patch | 8 +- patches/server/0069-Entity-lifespan.patch | 4 +- .../0093-Configurable-daylight-cycle.patch | 6 +- patches/server/0114-Implement-TPSBar.patch | 14 +-- ...22-Movement-options-for-armor-stands.patch | 4 +- .../server/0128-Dont-run-with-scissors.patch | 18 ++-- ...er-Pearl-cooldown-damage-and-Endermi.patch | 6 +- ...dd-back-player-spawned-endermite-API.patch | 4 +- .../0155-Gamemode-extra-permissions.patch | 6 +- patches/server/0181-Add-uptime-command.patch | 8 +- .../0202-Extended-OfflinePlayer-API.patch | 4 +- ...the-ability-to-add-combustible-items.patch | 4 +- .../server/0212-UPnP-Port-Forwarding.patch | 10 +-- ...counts-in-beehives-to-Purpur-clients.patch | 10 +-- patches/server/0243-Stonecutter-damage.patch | 14 +-- ...247-Enchantment-Table-Persists-Lapis.patch | 10 +-- patches/server/0254-Remove-Timings.patch | 87 +++++++++---------- .../server/0255-Remove-Mojang-Profiler.patch | 64 +++++++------- patches/server/0258-Debug-Marker-API.patch | 8 +- .../server/0261-Add-death-screen-API.patch | 4 +- patches/server/0266-Language-API.patch | 10 +-- .../server/0280-Add-PreExplodeEvents.patch | 4 +- ...lways-showing-item-in-player-death-m.patch | 6 +- .../0295-config-for-startup-commands.patch | 4 +- 44 files changed, 245 insertions(+), 258 deletions(-) diff --git a/gradle.properties b/gradle.properties index 57ff0eb73..7a667c728 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ group = org.purpurmc.purpur version = 1.20.6-R0.1-SNAPSHOT mcVersion = 1.20.6 -paperCommit = cdb6ba8ef1fc609289e813fa1dcbe62ac610ed0d +paperCommit = 711f82e01e44d8d86b47040aaa8ce33130b2f194 org.gradle.caching = true org.gradle.parallel = true diff --git a/patches/api/0002-Build-System-Changes.patch b/patches/api/0002-Build-System-Changes.patch index 75f91f3eb..b50c166d1 100644 --- a/patches/api/0002-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 65e67b8726f1e19a6bcb1fe2f448e4ab68df11d1..892e78b1d2d29dc54def03fcb6d85a93ad56d84c 100644 +index fd39ed209b20c927054b8482c400beeeeab460a3..6aef83558a5ef7e84873b127c3bb43a6468c9a24 100644 --- a/build.gradle.kts +++ b/build.gradle.kts -@@ -121,6 +121,8 @@ tasks.jar { +@@ -142,6 +142,8 @@ tasks.jar { } tasks.withType { diff --git a/patches/api/0010-ExecuteCommandEvent.patch b/patches/api/0010-ExecuteCommandEvent.patch index dd05e0eb9..8fd1af0a7 100644 --- a/patches/api/0010-ExecuteCommandEvent.patch +++ b/patches/api/0010-ExecuteCommandEvent.patch @@ -5,10 +5,10 @@ Subject: [PATCH] ExecuteCommandEvent diff --git a/src/main/java/org/bukkit/command/SimpleCommandMap.java b/src/main/java/org/bukkit/command/SimpleCommandMap.java -index ac9a28922f8a556944a4c3649d74c32c622f0cb0..e842d13febca67ffa1c89fb2c1324d2609fb81fd 100644 +index c3a9cf65db73ed534bf20996c7f05b5eb0aaebe1..83f84a76cbfdf5138ecccf3a886d38151a500bf2 100644 --- a/src/main/java/org/bukkit/command/SimpleCommandMap.java +++ b/src/main/java/org/bukkit/command/SimpleCommandMap.java -@@ -143,6 +143,19 @@ public class SimpleCommandMap implements CommandMap { +@@ -152,6 +152,19 @@ public class SimpleCommandMap implements CommandMap { return false; } @@ -28,7 +28,7 @@ index ac9a28922f8a556944a4c3649d74c32c622f0cb0..e842d13febca67ffa1c89fb2c1324d26 // Paper start - Plugins do weird things to workaround normal registration if (target.timings == null) { target.timings = co.aikar.timings.TimingsManager.getCommandTiming(null, target); -@@ -152,7 +165,7 @@ public class SimpleCommandMap implements CommandMap { +@@ -161,7 +174,7 @@ public class SimpleCommandMap implements CommandMap { try { try (co.aikar.timings.Timing ignored = target.timings.startTiming()) { // Paper - use try with resources // Note: we don't return the result of target.execute as thats success / failure, we return handled (true) or not handled (false) diff --git a/patches/api/0014-ItemStack-convenience-methods.patch b/patches/api/0014-ItemStack-convenience-methods.patch index 979571e73..410afb4bd 100644 --- a/patches/api/0014-ItemStack-convenience-methods.patch +++ b/patches/api/0014-ItemStack-convenience-methods.patch @@ -5,12 +5,12 @@ Subject: [PATCH] ItemStack convenience methods diff --git a/src/main/java/org/bukkit/Material.java b/src/main/java/org/bukkit/Material.java -index 7a337fe908915f8ea487a0b9236c511cb07d5e66..1dd02e2782364bf25521088cf8858d3443643447 100644 +index 81f9ad99699a78b97e4accaaf1a98eacf29493ce..e3e996d932db689ba62a43f7f01d6f003f8337d3 100644 --- a/src/main/java/org/bukkit/Material.java +++ b/src/main/java/org/bukkit/Material.java -@@ -11657,4 +11657,40 @@ public enum Material implements Keyed, Translatable, net.kyori.adventure.transla - public boolean isEnabledByFeature(@NotNull World world) { - return Bukkit.getDataPackManager().isEnabledByFeature(this, world); +@@ -5701,4 +5701,40 @@ public enum Material implements Keyed, Translatable, net.kyori.adventure.transla + } + return Registry.BLOCK.get(material.key); } + + // Purpur start @@ -50,10 +50,10 @@ index 7a337fe908915f8ea487a0b9236c511cb07d5e66..1dd02e2782364bf25521088cf8858d34 + // Purpur end } diff --git a/src/main/java/org/bukkit/inventory/ItemStack.java b/src/main/java/org/bukkit/inventory/ItemStack.java -index 84a7bf0936d35bf42b5ed038d295d5c31740f472..6e9b4cbc81878616b1c48add5db534286d267b05 100644 +index c64413a6740b604282984dea2a8430a6e7478d68..5c609d916e2d2f08ba90ebd23f13c5c9a14bc73c 100644 --- a/src/main/java/org/bukkit/inventory/ItemStack.java +++ b/src/main/java/org/bukkit/inventory/ItemStack.java -@@ -17,6 +17,17 @@ import org.bukkit.inventory.meta.ItemMeta; +@@ -19,6 +19,17 @@ import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.material.MaterialData; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -71,7 +71,7 @@ index 84a7bf0936d35bf42b5ed038d295d5c31740f472..6e9b4cbc81878616b1c48add5db53428 /** * Represents a stack of items. -@@ -1073,4 +1084,565 @@ public class ItemStack implements Cloneable, ConfigurationSerializable, Translat +@@ -1079,4 +1090,565 @@ public class ItemStack implements Cloneable, ConfigurationSerializable, Translat return Bukkit.getUnsafe().computeTooltipLines(this, tooltipContext, player); } // Paper end - expose itemstack tooltip lines diff --git a/patches/api/0035-Remove-Timings.patch b/patches/api/0035-Remove-Timings.patch index 75f6b7465..e6e555809 100644 --- a/patches/api/0035-Remove-Timings.patch +++ b/patches/api/0035-Remove-Timings.patch @@ -136,10 +136,10 @@ index e801e79fa57c44b2e5d359647c920f88064826f1..1abfcee0f6d632f4cd8d74b4994a90c9 new ArrayList(TIMINGS_SUBCOMMANDS.size())); } diff --git a/src/main/java/org/bukkit/command/SimpleCommandMap.java b/src/main/java/org/bukkit/command/SimpleCommandMap.java -index e842d13febca67ffa1c89fb2c1324d2609fb81fd..5349f16136d9348c374a7dfe5b89a71dfcb0e66d 100644 +index 83f84a76cbfdf5138ecccf3a886d38151a500bf2..fdedac32544be6534288c8ba28abe7f5c4c56f3b 100644 --- a/src/main/java/org/bukkit/command/SimpleCommandMap.java +++ b/src/main/java/org/bukkit/command/SimpleCommandMap.java -@@ -163,10 +163,10 @@ public class SimpleCommandMap implements CommandMap { +@@ -172,10 +172,10 @@ public class SimpleCommandMap implements CommandMap { // Paper end try { diff --git a/patches/server/0001-Rebrand.patch b/patches/server/0001-Rebrand.patch index 07e65c2f1..106562bd3 100644 --- a/patches/server/0001-Rebrand.patch +++ b/patches/server/0001-Rebrand.patch @@ -5,25 +5,19 @@ Subject: [PATCH] Rebrand diff --git a/build.gradle.kts b/build.gradle.kts -index 5d448d8a7cf6626a11791f30ad52baf41a099272..81996f00384674b29368e8bea944bdd14d631da3 100644 +index 87bb3fd9b97506f61734ae7f2e6860610ba794e7..89f21e21efc5f5ab99d1586f4f3b8f2f3c48ac06 100644 --- a/build.gradle.kts +++ b/build.gradle.kts -@@ -12,8 +12,12 @@ configurations.named(log4jPlugins.compileClasspathConfigurationName) { +@@ -12,7 +12,7 @@ configurations.named(log4jPlugins.compileClasspathConfigurationName) { val alsoShade: Configuration by configurations.creating dependencies { - 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") -+ } -+ // Purpur end ++ implementation(project(":purpur-api")) // Purpur // Paper start implementation("org.jline:jline-terminal-jansi:3.21.0") implementation("net.minecrell:terminalconsoleappender:1.3.0") -@@ -47,6 +51,10 @@ dependencies { +@@ -46,6 +46,10 @@ dependencies { runtimeOnly("org.apache.maven.resolver:maven-resolver-connector-basic:1.9.18") runtimeOnly("org.apache.maven.resolver:maven-resolver-transport-http:1.9.18") @@ -34,7 +28,7 @@ index 5d448d8a7cf6626a11791f30ad52baf41a099272..81996f00384674b29368e8bea944bdd1 testImplementation("io.github.classgraph:classgraph:4.8.47") // Paper - mob goal test testImplementation("org.junit.jupiter:junit-jupiter:5.10.2") testImplementation("org.hamcrest:hamcrest:2.2") -@@ -79,7 +87,7 @@ tasks.jar { +@@ -78,7 +82,7 @@ tasks.jar { attributes( "Main-Class" to "org.bukkit.craftbukkit.Main", "Implementation-Title" to "CraftBukkit", @@ -43,7 +37,7 @@ index 5d448d8a7cf6626a11791f30ad52baf41a099272..81996f00384674b29368e8bea944bdd1 "Implementation-Vendor" to date, // Paper "Specification-Title" to "Bukkit", "Specification-Version" to project.version, -@@ -138,7 +146,7 @@ fun TaskContainer.registerRunTask( +@@ -137,7 +141,7 @@ fun TaskContainer.registerRunTask( name: String, block: JavaExec.() -> Unit ): TaskProvider = register(name) { @@ -175,10 +169,10 @@ index 4f3cc14d48690bb183d09bb7a5ba1e23e8a0c08a..c366d84518979e842a6f10f969a59515 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 8dc2f9df367c849ca333bf1a1fd92ff91617b548..57e6aaa63c1308baa5e2863b82b7521d5f4a4f31 100644 +index 39303bb4e336732db0ab19dee0c1f8b609bbb134..7483be7ff59e80aa6605dc19f18bb54473e3540e 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -960,7 +960,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop { 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 e6c7f62ed379a78645933670299e4fcda8540ed1..edb94e5601acc38994dac20a167b145de778d426 100644 +index 59d7e8a3d83d3ab7aa28606401bb129ccaeff240..b51850c0368b0fa2c9eb4ca44b9c931eb46478fc 100644 --- a/src/main/java/net/minecraft/commands/CommandSourceStack.java +++ b/src/main/java/net/minecraft/commands/CommandSourceStack.java -@@ -331,6 +331,30 @@ public class CommandSourceStack implements ExecutionCommandSource 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 8ac5d8ccf731100a1be690cb2ed1be82cadba8ed..4228fd441f8350d43bd545e31c920304f07968bc 100644 +index 308aef9c4933b2bcdd622a34b68efab4a220fe4d..a8edeb5a40cd9aac933805259407e32c544d181e 100644 --- a/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java @@ -78,6 +78,7 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack @@ -43,10 +43,10 @@ index 8ac5d8ccf731100a1be690cb2ed1be82cadba8ed..4228fd441f8350d43bd545e31c920304 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 5f896948d158651cd9837364759dbfbcce6b7d21..7f78db4e0331d0f4801807ed1242642ee940d0f8 100644 +index 561a7a8e96e2d91bbb87fe6230e94b5f38073d27..bae888162966f5e31f92c49fbf6df119c2b83781 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -3522,4 +3522,11 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -3519,4 +3519,11 @@ public class CraftPlayer extends CraftHumanEntity implements Player { public void setSendViewDistance(final int viewDistance) { this.getHandle().setSendViewDistance(viewDistance); } diff --git a/patches/server/0005-Component-related-conveniences.patch b/patches/server/0005-Component-related-conveniences.patch index 934ea5bc3..2c2ae7aac 100644 --- a/patches/server/0005-Component-related-conveniences.patch +++ b/patches/server/0005-Component-related-conveniences.patch @@ -5,7 +5,7 @@ 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 8b07eb1c428bc70b8ee07ea2209f1898d6034809..0b9c85adaf5c7b5dcb23ab74a4fd02e6c0798851 100644 +index 40b9a89531d1df347191edd274485cf977051e04..f587958d2b907f7fcd819dbb6db7e42232754567 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java @@ -1978,6 +1978,26 @@ public class ServerPlayer extends Player { @@ -61,10 +61,10 @@ index a2142930b4d4b05987c90496fb9d733d99040aa0..2d6b6795703431939005aa09d1ed590c Iterator iterator = this.players.iterator(); diff --git a/src/main/java/net/minecraft/world/damagesource/DamageSource.java b/src/main/java/net/minecraft/world/damagesource/DamageSource.java -index 160dc3216e8f5db5f9b3cce5e2d655f2b35b208a..43b9a7e8ed9043c4d3f8295258a27209ddb4474b 100644 +index dd9638bdb228a53e72820e0e7cf6fe6fcc08fe4b..bc5071efe710614309308dad5b6d9c56197ee888 100644 --- a/src/main/java/net/minecraft/world/damagesource/DamageSource.java +++ b/src/main/java/net/minecraft/world/damagesource/DamageSource.java -@@ -177,6 +177,15 @@ public class DamageSource { +@@ -193,6 +193,15 @@ public class DamageSource { } } diff --git a/patches/server/0006-Ridables.patch b/patches/server/0006-Ridables.patch index ab339717c..f7997b862 100644 --- a/patches/server/0006-Ridables.patch +++ b/patches/server/0006-Ridables.patch @@ -22,10 +22,10 @@ index 665e88b2dedf9d5bb50914d5f3d377f2d19f40b0..f70a80b496bd1498778e82fc221c3b1b 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 57e6aaa63c1308baa5e2863b82b7521d5f4a4f31..73b77367039eb6a4445d1ef2d66fb3410e91f4b8 100644 +index 7483be7ff59e80aa6605dc19f18bb54473e3540e..e02ae9c2c510ff2564f46e6d6d69465d0c4dabed 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1762,6 +1762,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 0; // Paper - Add EntityMoveEvent net.minecraft.world.level.block.entity.HopperBlockEntity.skipHopperEvents = worldserver.paperConfig().hopper.disableMoveEvent || org.bukkit.event.inventory.InventoryMoveItemEvent.getHandlerList().getRegisteredListeners().length == 0; // Paper - Perf: Optimize Hoppers worldserver.updateLagCompensationTick(); // Paper - lag compensation @@ -34,7 +34,7 @@ index 57e6aaa63c1308baa5e2863b82b7521d5f4a4f31..73b77367039eb6a4445d1ef2d66fb341 this.profiler.push(() -> { String s = String.valueOf(worldserver); diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 0981d440d0dbfe4df668d1f3f1b5706a93bc4434..fc791a66d299905798c2c1ca542467e4c7933caf 100644 +index ca56a0b596976448da6bb2a0e82b3d5cd4133e12..6247659f33c3d21d33ec1f510523403616ea9c4f 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java @@ -229,6 +229,7 @@ public class ServerLevel extends Level implements WorldGenLevel { @@ -46,7 +46,7 @@ index 0981d440d0dbfe4df668d1f3f1b5706a93bc4434..fc791a66d299905798c2c1ca542467e4 public LevelChunk getChunkIfLoaded(int x, int z) { return this.chunkSource.getChunkAtIfLoadedImmediately(x, z); // Paper - Use getChunkIfLoadedImmediately diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 0b9c85adaf5c7b5dcb23ab74a4fd02e6c0798851..2820333cbcd2cb972c4408cb0d9cc1be37a844cf 100644 +index f587958d2b907f7fcd819dbb6db7e42232754567..4391ae896d8dbe98c6577f85759b187a396a7c21 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java @@ -814,6 +814,15 @@ public class ServerPlayer extends Player { @@ -66,10 +66,10 @@ index 0b9c85adaf5c7b5dcb23ab74a4fd02e6c0798851..2820333cbcd2cb972c4408cb0d9cc1be private void updatePlayerAttributes() { diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 5e9202bc7fc649764568b55d66ba0d684118c00c..1377d7abfe024b8ac977aa1a071b401836c3c048 100644 +index b9b3277c8ed94e0cd30b20b9c00a33eaad48e5ac..647026afdb161e21ff55dc9a3d470eef5502571f 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -2789,6 +2789,8 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -2772,6 +2772,8 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl ServerGamePacketListenerImpl.this.cserver.getPluginManager().callEvent(event); @@ -190,7 +190,7 @@ index 09fdea983772612ef3fff6b2da3cf469a34e4ec0..aa76a24421cdb3908a3544d92eb3d1e3 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 6e043457a29a890bcefd27fc5bb07c1a7e4e30f7..72bd60f691a639a0e7b6b5a98e5a3816305cfdaf 100644 +index 517e10c3d8b1549cd30fd0e7cf2bcb35e88eb8ed..961c4addedd288758ac91b5144571d054f6069ac 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java @@ -229,9 +229,9 @@ public abstract class LivingEntity extends Entity implements Attackable { @@ -2676,7 +2676,7 @@ index 6725013c608e9321ce0d088059672af4412cf6db..1c8ac6b9603a6e282c5bbe8cdcc61046 protected void defineSynchedData(SynchedEntityData.Builder builder) { } diff --git a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java -index 6f14607a88761171a72e274b3c9b476b20a272f1..170038f2bfdfd01003b6661672a9f8ed266343e2 100644 +index 0e797e2714a2fd103cbd51548764577fd9b6412d..14ac30d43eaa550eef1b0c339de2034c51e28d9d 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 @@ -106,6 +106,7 @@ public class EnderDragon extends Mob implements Enemy { @@ -3141,7 +3141,7 @@ index 87e4b300ac248f6c13d9b4a8f24fd78b24b565b4..504996c8309fcd11de1dd166dee12d7e public boolean doHurtTarget(Entity target) { if (super.doHurtTarget(target)) { diff --git a/src/main/java/net/minecraft/world/entity/monster/Creeper.java b/src/main/java/net/minecraft/world/entity/monster/Creeper.java -index cbcb2bfa8f91099e5c374f590f48885390bdf7a7..6e812033323b1d1ace9023d57f0405e0d546c337 100644 +index 0ae4ba060b2ce2c79e1235c939f3c1926eb6e33e..cd4da06183fa84e3aa7567866b28ad915eadafe6 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Creeper.java +++ b/src/main/java/net/minecraft/world/entity/monster/Creeper.java @@ -61,21 +61,98 @@ public class Creeper extends Monster implements PowerableMob { @@ -5095,7 +5095,7 @@ index a2d336ceb52b63db5c03432ee7bc94dc6a742b82..a6268b3df9691278606501284b5504da + // 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 547ab158cd0cbf51da06ea97740cfce34bca651b..a49193a023bbd9b65bcd3652dc9c241720500755 100644 +index 34b91eff3190848bae38b20e1d956ece497b1473..b4fba33f2e2d15d35ac3e884026572a696082160 100644 --- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java @@ -592,6 +592,15 @@ public class CraftEventFactory { @@ -5114,7 +5114,7 @@ index 547ab158cd0cbf51da06ea97740cfce34bca651b..a49193a023bbd9b65bcd3652dc9c2417 return event; } -@@ -1179,6 +1188,7 @@ public class CraftEventFactory { +@@ -1181,6 +1190,7 @@ public class CraftEventFactory { EntityDamageEvent event; if (damager != null) { event = new EntityDamageByEntityEvent(damager.getBukkitEntity(), damagee.getBukkitEntity(), cause, bukkitDamageSource, modifiers, modifierFunctions, critical); @@ -5123,7 +5123,7 @@ index 547ab158cd0cbf51da06ea97740cfce34bca651b..a49193a023bbd9b65bcd3652dc9c2417 event = new EntityDamageEvent(damagee.getBukkitEntity(), cause, bukkitDamageSource, modifiers, modifierFunctions); } diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index 19161d9736b626811423deefedd045abe60360cc..9287376ae1374e355857108d722f1be2fd7276d9 100644 +index 4f015144be0a7a448c6c2b0765232c02ad405d09..169722178ba7cd9543a029741e81d025a659ffe2 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java @@ -172,4 +172,9 @@ public class PurpurConfig { diff --git a/patches/server/0010-AFK-API.patch b/patches/server/0010-AFK-API.patch index 78b6d741e..7cc1a23cd 100644 --- a/patches/server/0010-AFK-API.patch +++ b/patches/server/0010-AFK-API.patch @@ -5,7 +5,7 @@ Subject: [PATCH] AFK API diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 2820333cbcd2cb972c4408cb0d9cc1be37a844cf..bc6a5de72d52627b3ceca4b52b95e12ceddf1247 100644 +index 4391ae896d8dbe98c6577f85759b187a396a7c21..7e99e10eb07eabb9fc81c93bafe5e16f7177af09 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java @@ -2326,8 +2326,68 @@ public class ServerPlayer extends Player { @@ -78,7 +78,7 @@ index 2820333cbcd2cb972c4408cb0d9cc1be37a844cf..bc6a5de72d52627b3ceca4b52b95e12c return this.stats; } diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 1377d7abfe024b8ac977aa1a071b401836c3c048..510a4391463026dd0c896027a579a94174c24299 100644 +index 647026afdb161e21ff55dc9a3d470eef5502571f..f2ba620d25eba517d2949cb669ee84166f954984 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java @@ -332,6 +332,20 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl @@ -223,7 +223,7 @@ index ea0aee88c7d901034427db201c1b2430f8a1d522..1f28bfb435c1e4d97da713f96c452aba if (range < 0.0 || d < range * range) { return true; diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 7f78db4e0331d0f4801807ed1242642ee940d0f8..a4e4babedbf5bbf09bfbabd4f55ecd6301dae302 100644 +index bae888162966f5e31f92c49fbf6df119c2b83781..f47548b84337eaea3299d9ba859734fbd8e3e0e5 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -574,10 +574,15 @@ public class CraftPlayer extends CraftHumanEntity implements Player { @@ -243,7 +243,7 @@ index 7f78db4e0331d0f4801807ed1242642ee940d0f8..a4e4babedbf5bbf09bfbabd4f55ecd63 if (this.getHandle().connection == null) return; // Paper - Updates are possible before the player has fully joined for (ServerPlayer player : (List) this.server.getHandle().players) { if (player.getBukkitEntity().canSee(this)) { -@@ -3528,5 +3533,20 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -3525,5 +3530,20 @@ public class CraftPlayer extends CraftHumanEntity implements Player { public boolean usesPurpurClient() { return getHandle().purpurClient; } @@ -265,7 +265,7 @@ index 7f78db4e0331d0f4801807ed1242642ee940d0f8..a4e4babedbf5bbf09bfbabd4f55ecd63 // Purpur end } diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index 940438c4b86d38be618dca8af95e3a7bf97bfa3c..beab078faaa6ea72539fdfd626ec64ff800d030c 100644 +index db0d57060cae1f5fd51087a15134ca5f389511bc..d2f3e864aa4d1c5d3ee8bb8f1e36787b1ca45f2e 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java @@ -174,8 +174,18 @@ public class PurpurConfig { diff --git a/patches/server/0011-Bring-back-server-name.patch b/patches/server/0011-Bring-back-server-name.patch index d72709ac6..21a632583 100644 --- a/patches/server/0011-Bring-back-server-name.patch +++ b/patches/server/0011-Bring-back-server-name.patch @@ -17,10 +17,10 @@ index 9d10cdacb3aed2c00dc60aeb6f2cbeb48905e21f..842f382de43df5d5c321422372ec30cc public final boolean spawnNpcs = this.get("spawn-npcs", true); public final boolean pvp = this.get("pvp", true); diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 26eb9ff0f4e77230d1eae793398869e71999982b..c014528d7d2583fa0a3007c42ea9c16f2d0eb20c 100644 +index 21cc03794429e66edc3b9f0a4ed98b66dbba078c..fb430d21889e90597160fc11b0d0bc59b6b85ffc 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -3293,4 +3293,11 @@ public final class CraftServer implements Server { +@@ -3284,4 +3284,11 @@ public final class CraftServer implements Server { return this.potionBrewer; } // Paper end diff --git a/patches/server/0012-Configurable-server-mod-name.patch b/patches/server/0012-Configurable-server-mod-name.patch index d409b5409..76b13582f 100644 --- a/patches/server/0012-Configurable-server-mod-name.patch +++ b/patches/server/0012-Configurable-server-mod-name.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Configurable server mod name diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 73b77367039eb6a4445d1ef2d66fb3410e91f4b8..8a6f7681d97c48886f5a78b61763e718e56ec015 100644 +index e02ae9c2c510ff2564f46e6d6d69465d0c4dabed..27a1948b97f5a20b64849ebda7b485b229ed7bce 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1925,7 +1925,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop { + org.bukkit.event.entity.EntityDeathEvent deathEvent = CraftEventFactory.callEntityDeathEvent(this, source, this.drops, () -> { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java index 755d53e04bb0ed678bebc3497476e252dd5a736e..b7bf1a6e59e33d13887ae3d98f37658f52030e37 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java diff --git a/patches/server/0041-Skip-events-if-there-s-no-listeners.patch b/patches/server/0041-Skip-events-if-there-s-no-listeners.patch index a34b98f86..f20d2e6da 100644 --- a/patches/server/0041-Skip-events-if-there-s-no-listeners.patch +++ b/patches/server/0041-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 aa2fca6917fb67fe0e9ba067d11487c3a274f675..5c7287ef8c2d59215aff81cb138a55676bfa6356 100644 +index 2b33c5f5a7c5c87cf975c5237a2c9ba8cc0d2bdf..733eaf1162642a875708ae311f9426f93c07f711 100644 --- a/src/main/java/net/minecraft/commands/Commands.java +++ b/src/main/java/net/minecraft/commands/Commands.java -@@ -501,6 +501,7 @@ public class Commands { +@@ -513,6 +513,7 @@ public class Commands { private void runSync(ServerPlayer player, Collection bukkit, RootCommandNode rootcommandnode) { // Paper end - Perf: Async command map building new com.destroystokyo.paper.event.brigadier.AsyncPlayerSendCommandsEvent(player.getBukkitEntity(), (RootCommandNode) rootcommandnode, false).callEvent(); // Paper - Brigadier API @@ -16,7 +16,7 @@ index aa2fca6917fb67fe0e9ba067d11487c3a274f675..5c7287ef8c2d59215aff81cb138a5567 PlayerCommandSendEvent event = new PlayerCommandSendEvent(player.getBukkitEntity(), new LinkedHashSet<>(bukkit)); event.getPlayer().getServer().getPluginManager().callEvent(event); -@@ -511,6 +512,7 @@ public class Commands { +@@ -523,6 +524,7 @@ public class Commands { } } // CraftBukkit end diff --git a/patches/server/0043-Configurable-TPS-Catchup.patch b/patches/server/0043-Configurable-TPS-Catchup.patch index 2bed1436e..d7d205b86 100644 --- a/patches/server/0043-Configurable-TPS-Catchup.patch +++ b/patches/server/0043-Configurable-TPS-Catchup.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Configurable TPS Catchup diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index dfa332c4ff52033eb95248518bc44bbd22697697..f3ad4ee45ba48a10bbae1084f291ae0bcccdf624 100644 +index d55adf4db46c89d9ce387036856ebb0305cbc412..bdd0cc746315a9b8bbee53bdbca298cf8aaf6b2d 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1240,6 +1240,12 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop processQueue = new java.util.concurrent.ConcurrentLinkedQueue(); public int autosavePeriod; - public Commands vanillaCommandDispatcher; + // Paper - don't store the vanilla dispatcher diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index f3f8ca5f2b391860b2134e06784819aa0e78321e..16239aafded82b4f19f97ae5fd87c53b55a5ef53 100644 +index cf7aee68632d1f65ce61f969c5003797ab69b914..286404510ed9b3a5d399697be34740a92b169697 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java @@ -184,6 +184,7 @@ public class PurpurConfig { diff --git a/patches/server/0202-Extended-OfflinePlayer-API.patch b/patches/server/0202-Extended-OfflinePlayer-API.patch index 92790b03e..55ff89e46 100644 --- a/patches/server/0202-Extended-OfflinePlayer-API.patch +++ b/patches/server/0202-Extended-OfflinePlayer-API.patch @@ -243,10 +243,10 @@ index 9d93130f23addb18b97d7f5ec013faef17a74529..29d2fb87a65778926aea2cfc7a5b486c + // 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 925b8260bb2b1c94e544d6e082ea3b02e613d224..cf5897f8fed0c390ee75ca3b5b1037cfe1bdc43d 100644 +index 59b55669d4e9592f6205a0b9f49f8db3b3e5fd92..20543386332d782327229e570c18425dcb98fba4 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -2745,6 +2745,28 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -2742,6 +2742,28 @@ public class CraftPlayer extends CraftHumanEntity implements Player { return this.getHandle().getAbilities().walkingSpeed * 2f; } diff --git a/patches/server/0203-Added-the-ability-to-add-combustible-items.patch b/patches/server/0203-Added-the-ability-to-add-combustible-items.patch index 702e67fa0..e87bb4a5b 100644 --- a/patches/server/0203-Added-the-ability-to-add-combustible-items.patch +++ b/patches/server/0203-Added-the-ability-to-add-combustible-items.patch @@ -51,10 +51,10 @@ index ce2c424068001eec16032361baa206f6a5aa5332..c02d638b8f117156c815821207a91c55 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 a52ddb9fe006c2cbaf34686fc53cfdbe5e70de01..f4b611754a0b4a14c31595bc2a5e8acf8bf849bc 100644 +index 3b87a30e247002cc6caaa27aa870626f6bd1354a..f01763d5f00a8f8c72dec699009b035bf3414fdf 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -1589,6 +1589,19 @@ public final class CraftServer implements Server { +@@ -1580,6 +1580,19 @@ public final class CraftServer implements Server { return true; } diff --git a/patches/server/0212-UPnP-Port-Forwarding.patch b/patches/server/0212-UPnP-Port-Forwarding.patch index 6865e4805..dac92bf1e 100644 --- a/patches/server/0212-UPnP-Port-Forwarding.patch +++ b/patches/server/0212-UPnP-Port-Forwarding.patch @@ -5,7 +5,7 @@ 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 6d84eb68e3160f772d6832513df2bc4db87b594e..0f4fde2097b9db59b6c29935462f305f34747b3b 100644 +index 71c506a43e69f7c0c74947387fa6376e9f7343e7..f7f97c2c5fbd03d8c87efa2d1a4e7c93667d2be1 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -317,6 +317,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop { diff --git a/patches/server/0254-Remove-Timings.patch b/patches/server/0254-Remove-Timings.patch index b59617ff9..3993325b9 100644 --- a/patches/server/0254-Remove-Timings.patch +++ b/patches/server/0254-Remove-Timings.patch @@ -42,6 +42,30 @@ index 56b07a3306e5735816c8d89601b519cb0db6379a..604de7aed6db44c9c84d541765e57da4 return executedUnloadTask | canSaveChunk | canSaveEntities | canSavePOI ? new SaveStat(executedUnloadTask || canSaveChunk, canSaveEntities, canSavePOI): null; } +diff --git a/src/main/java/io/papermc/paper/command/brigadier/bukkit/BukkitCommandNode.java b/src/main/java/io/papermc/paper/command/brigadier/bukkit/BukkitCommandNode.java +index 10a113b057b0a4d27cce3bae975e1108aaa7b517..02597f890ac7f2dc12c94c283356b8309638dd17 100644 +--- a/src/main/java/io/papermc/paper/command/brigadier/bukkit/BukkitCommandNode.java ++++ b/src/main/java/io/papermc/paper/command/brigadier/bukkit/BukkitCommandNode.java +@@ -75,16 +75,16 @@ public class BukkitCommandNode extends LiteralCommandNode { + + // Plugins do weird things to workaround normal registration + if (this.command.timings == null) { +- this.command.timings = co.aikar.timings.TimingsManager.getCommandTiming(null, this.command); ++ //this.command.timings = co.aikar.timings.TimingsManager.getCommandTiming(null, this.command); // Purpur + } + + String content = context.getRange().get(context.getInput()); + String[] args = org.apache.commons.lang3.StringUtils.split(content, ' '); // fix adjacent spaces (from console/plugins) causing empty array elements + +- try (Timing ignored = this.command.timings.startTiming()) { ++ //try (Timing ignored = this.command.timings.startTiming()) { // Purpur + // Note: we don't return the result of target.execute as thats success / failure, we return handled (true) or not handled (false) + this.command.execute(sender, this.literal, Arrays.copyOfRange(args, 1, args.length)); +- } ++ //} // Purpur + + // return true as command was handled + return 1; diff --git a/src/main/java/net/minecraft/network/protocol/PacketUtils.java b/src/main/java/net/minecraft/network/protocol/PacketUtils.java index 57e76b53e5e314c3e6b8856010f7a84188121582..8c134a642ccaf3530022f2e675a858d726e1dda4 100644 --- a/src/main/java/net/minecraft/network/protocol/PacketUtils.java @@ -56,10 +80,10 @@ index 57e76b53e5e314c3e6b8856010f7a84188121582..8c134a642ccaf3530022f2e675a858d7 } catch (Exception exception) { if (exception instanceof ReportedException) { diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 5081a631a94920db0307341261755eac399fea1e..f3c66049ab3fe087fa0fa87c2fca36c3c8b5c572 100644 +index 7c016118b410b8c041aa4e0cc0928aa978a4b5d6..1fbbf1ff63a186099f47b9c478dead3e416099ee 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1481,7 +1481,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop { entityplayer.connection.suspendFlushing(); }); @@ -129,7 +153,7 @@ index 5081a631a94920db0307341261755eac399fea1e..f3c66049ab3fe087fa0fa87c2fca36c3 // Paper start - Folia scheduler API ((io.papermc.paper.threadedregions.scheduler.FoliaGlobalRegionScheduler) Bukkit.getGlobalRegionScheduler()).tick(); getAllLevels().forEach(level -> { -@@ -1743,21 +1743,21 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop public - org.spigotmc.AsyncCatcher.catchOp("Command Dispatched Async: " + s); // Paper - Add async catcher -- co.aikar.timings.MinecraftTimings.playerCommandTimer.startTiming(); // Paper -+ //co.aikar.timings.MinecraftTimings.playerCommandTimer.startTiming(); // Paper // Purpur - if ( org.spigotmc.SpigotConfig.logCommands ) // Spigot - this.LOGGER.info(this.player.getScoreboardName() + " issued server command: " + s); - -@@ -2547,7 +2547,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl - this.cserver.getPluginManager().callEvent(event); - - if (event.isCancelled()) { -- co.aikar.timings.MinecraftTimings.playerCommandTimer.stopTiming(); // Paper -+ //co.aikar.timings.MinecraftTimings.playerCommandTimer.stopTiming(); // Paper // Purpur - return; - } - -@@ -2560,7 +2560,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl - java.util.logging.Logger.getLogger(ServerGamePacketListenerImpl.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); - return; - } finally { -- co.aikar.timings.MinecraftTimings.playerCommandTimer.stopTiming(); // Paper -+ //co.aikar.timings.MinecraftTimings.playerCommandTimer.stopTiming(); // Paper // Purpur - } - } - // 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 d20a7a79e27db1092ff78910df5d45982971cc3e..b863f6fe65c796a1d3102cc3eddb5d6c5becd3ac 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java diff --git a/patches/server/0255-Remove-Mojang-Profiler.patch b/patches/server/0255-Remove-Mojang-Profiler.patch index 9f7c152f3..63897dbb1 100644 --- a/patches/server/0255-Remove-Mojang-Profiler.patch +++ b/patches/server/0255-Remove-Mojang-Profiler.patch @@ -5,7 +5,7 @@ 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 67ec90a2a05269a5912b3c8e64d6d4162a8c6ca2..d3c42c19a051fb3a670e541fc746b55717192a91 100644 +index c57d77a5412463ee842f1cd9f6fa9f66d6f601bf..a92f969e99202922ba27b28f88b738e6f96efc60 100644 --- a/src/main/java/net/minecraft/commands/Commands.java +++ b/src/main/java/net/minecraft/commands/Commands.java @@ -166,7 +166,7 @@ public class Commands { @@ -17,8 +17,8 @@ index 67ec90a2a05269a5912b3c8e64d6d4162a8c6ca2..d3c42c19a051fb3a670e541fc746b557 DefaultGameModeCommands.register(this.dispatcher); DifficultyCommand.register(this.dispatcher); EffectCommands.register(this.dispatcher, commandRegistryAccess); -@@ -333,9 +333,9 @@ public class Commands { - public void performCommand(ParseResults parseresults, String s, String label) { // CraftBukkit +@@ -344,9 +344,9 @@ public class Commands { + // Paper end CommandSourceStack commandlistenerwrapper = (CommandSourceStack) parseresults.getContext().getSource(); - commandlistenerwrapper.getServer().getProfiler().push(() -> { @@ -29,7 +29,7 @@ index 67ec90a2a05269a5912b3c8e64d6d4162a8c6ca2..d3c42c19a051fb3a670e541fc746b557 ContextChain contextchain = this.finishParsing(parseresults, s, commandlistenerwrapper, label); // CraftBukkit // Paper - Add UnknownCommandEvent try { -@@ -364,7 +364,7 @@ public class Commands { +@@ -376,7 +376,7 @@ public class Commands { Commands.LOGGER.error("'/{}' threw an exception", s, exception); } } finally { @@ -83,7 +83,7 @@ index e9775b4506909bee65a74964f0d5391a0513de1d..684f7f202305c09b1037c5d38a52a5ea } } diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index f3c66049ab3fe087fa0fa87c2fca36c3c8b5c572..dfeae138e830e95ab823b6349a91160b02622208 100644 +index 1fbbf1ff63a186099f47b9c478dead3e416099ee..642627e37014d5bf634ea7a153ce1abf0be9bf06 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -347,13 +347,13 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 0 && this.tickCount % autosavePeriod == 0; try { this.isSaving = true; -@@ -1624,7 +1624,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 0; // Purpur @@ -242,7 +242,7 @@ index f3c66049ab3fe087fa0fa87c2fca36c3c8b5c572..dfeae138e830e95ab823b6349a91160b try { //worldserver.timings.doTick.startTiming(); // Spigot // Purpur -@@ -1820,17 +1820,17 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop { this.executeBlocking(() -> { this.saveDebugReport(path.resolve("server")); -@@ -2832,40 +2833,40 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop Date: Sat, 11 May 2024 19:45:36 -0700 Subject: [PATCH 008/588] update paperweight version --- build.gradle.kts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 82be595b3..f9c414929 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -4,7 +4,7 @@ import org.gradle.api.tasks.testing.logging.TestLogEvent plugins { java `maven-publish` - id("io.papermc.paperweight.patcher") version "1.6.3" + id("io.papermc.paperweight.patcher") version "1.7.1" } allprojects { @@ -87,12 +87,10 @@ paperweight { tasks.generateDevelopmentBundle { apiCoordinates = "org.purpurmc.purpur:purpur-api" - mojangApiCoordinates = "io.papermc.paper:paper-mojangapi" libraryRepositories = listOf( "https://repo.maven.apache.org/maven2/", paperMavenPublicUrl, "https://repo.purpurmc.org/snapshots", - "https://s01.oss.sonatype.org/content/repositories/snapshots/", // TODO - Adventure snapshot ) } From 818fa0d596d3d539cfb4402fc4b58c6037769c5c Mon Sep 17 00:00:00 2001 From: granny Date: Sun, 12 May 2024 00:19:29 -0700 Subject: [PATCH 009/588] Updated Upstream (Paper) Upstream has released updates that appear to apply and compile correctly Paper Changes: PaperMC/Paper@7e48f66 Properly pass requirement on namespaced redirects (#10701) --- gradle.properties | 2 +- .../server/0041-Skip-events-if-there-s-no-listeners.patch | 6 +++--- patches/server/0255-Remove-Mojang-Profiler.patch | 6 +++--- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/gradle.properties b/gradle.properties index 7a667c728..f739b3509 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ group = org.purpurmc.purpur version = 1.20.6-R0.1-SNAPSHOT mcVersion = 1.20.6 -paperCommit = 711f82e01e44d8d86b47040aaa8ce33130b2f194 +paperCommit = 7e48f66c05dcc85f8533c96b29fc90b87be65a66 org.gradle.caching = true org.gradle.parallel = true diff --git a/patches/server/0041-Skip-events-if-there-s-no-listeners.patch b/patches/server/0041-Skip-events-if-there-s-no-listeners.patch index f20d2e6da..e32a4bfec 100644 --- a/patches/server/0041-Skip-events-if-there-s-no-listeners.patch +++ b/patches/server/0041-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 2b33c5f5a7c5c87cf975c5237a2c9ba8cc0d2bdf..733eaf1162642a875708ae311f9426f93c07f711 100644 +index 24086a82e1687cb1925398218b18c2384fa8f6e3..6b95a810c2fa17f18bd911dba2c5544caa39173d 100644 --- a/src/main/java/net/minecraft/commands/Commands.java +++ b/src/main/java/net/minecraft/commands/Commands.java -@@ -513,6 +513,7 @@ public class Commands { +@@ -514,6 +514,7 @@ public class Commands { private void runSync(ServerPlayer player, Collection bukkit, RootCommandNode rootcommandnode) { // Paper end - Perf: Async command map building new com.destroystokyo.paper.event.brigadier.AsyncPlayerSendCommandsEvent(player.getBukkitEntity(), (RootCommandNode) rootcommandnode, false).callEvent(); // Paper - Brigadier API @@ -16,7 +16,7 @@ index 2b33c5f5a7c5c87cf975c5237a2c9ba8cc0d2bdf..733eaf1162642a875708ae311f9426f9 PlayerCommandSendEvent event = new PlayerCommandSendEvent(player.getBukkitEntity(), new LinkedHashSet<>(bukkit)); event.getPlayer().getServer().getPluginManager().callEvent(event); -@@ -523,6 +524,7 @@ public class Commands { +@@ -524,6 +525,7 @@ public class Commands { } } // CraftBukkit end diff --git a/patches/server/0255-Remove-Mojang-Profiler.patch b/patches/server/0255-Remove-Mojang-Profiler.patch index 63897dbb1..577bd901b 100644 --- a/patches/server/0255-Remove-Mojang-Profiler.patch +++ b/patches/server/0255-Remove-Mojang-Profiler.patch @@ -5,7 +5,7 @@ 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 c57d77a5412463ee842f1cd9f6fa9f66d6f601bf..a92f969e99202922ba27b28f88b738e6f96efc60 100644 +index 9a91a29614823e10f59aeaa156d85f7229bfb497..5c048dc779b29c4903dc63daa8a1f9bf54270ba1 100644 --- a/src/main/java/net/minecraft/commands/Commands.java +++ b/src/main/java/net/minecraft/commands/Commands.java @@ -166,7 +166,7 @@ public class Commands { @@ -17,7 +17,7 @@ index c57d77a5412463ee842f1cd9f6fa9f66d6f601bf..a92f969e99202922ba27b28f88b738e6 DefaultGameModeCommands.register(this.dispatcher); DifficultyCommand.register(this.dispatcher); EffectCommands.register(this.dispatcher, commandRegistryAccess); -@@ -344,9 +344,9 @@ public class Commands { +@@ -345,9 +345,9 @@ public class Commands { // Paper end CommandSourceStack commandlistenerwrapper = (CommandSourceStack) parseresults.getContext().getSource(); @@ -29,7 +29,7 @@ index c57d77a5412463ee842f1cd9f6fa9f66d6f601bf..a92f969e99202922ba27b28f88b738e6 ContextChain contextchain = this.finishParsing(parseresults, s, commandlistenerwrapper, label); // CraftBukkit // Paper - Add UnknownCommandEvent try { -@@ -376,7 +376,7 @@ public class Commands { +@@ -377,7 +377,7 @@ public class Commands { Commands.LOGGER.error("'/{}' threw an exception", s, exception); } } finally { From 4418fbfd2549a265748c54321c9044fdef56921b Mon Sep 17 00:00:00 2001 From: granny Date: Sun, 12 May 2024 17:07:36 +0000 Subject: [PATCH 010/588] Updated Upstream (Paper) Upstream has released updates that appear to apply and compile correctly Paper Changes: PaperMC/Paper@f041f48 Prevent infinite recursion on cyclic brig redirect (#10705) --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index f739b3509..0aa6747d1 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ group = org.purpurmc.purpur version = 1.20.6-R0.1-SNAPSHOT mcVersion = 1.20.6 -paperCommit = 7e48f66c05dcc85f8533c96b29fc90b87be65a66 +paperCommit = f041f48458e6d81a54895e988867c0b738922d4d org.gradle.caching = true org.gradle.parallel = true From be47af0884f583ac90968d4f1e90275cc383bd9d Mon Sep 17 00:00:00 2001 From: granny Date: Sun, 12 May 2024 17:22:18 -0700 Subject: [PATCH 011/588] only show armorstand name if it's custom, fixes #1514 --- ...isplay-names-from-item-forms-of-entities-to-e.patch | 10 +++++----- ...e-visible-when-using-a-Name-Tag-on-an-Armor-S.patch | 4 ++-- .../0122-Movement-options-for-armor-stands.patch | 4 ++-- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/patches/server/0100-Apply-display-names-from-item-forms-of-entities-to-e.patch b/patches/server/0100-Apply-display-names-from-item-forms-of-entities-to-e.patch index f746e667a..6727beaa9 100644 --- a/patches/server/0100-Apply-display-names-from-item-forms-of-entities-to-e.patch +++ b/patches/server/0100-Apply-display-names-from-item-forms-of-entities-to-e.patch @@ -6,7 +6,7 @@ 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 5abbc0caf90cafc1a06dfff158c158b1538f827c..8b25bb80a913cd002cdaeadf076d811172f10488 100644 +index ebf1d6e3431e36811f14ed09d3b891a074fbdaf2..67eb7ddb77e781bf9d140133e0ad9f16c1ca0f0e 100644 --- a/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java +++ b/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java @@ -613,6 +613,7 @@ public class ArmorStand extends LivingEntity { @@ -75,7 +75,7 @@ index 0b23e05f936cab7a9867828c2d69417cfde1d2ce..105e2b7d7cd7c64a9164e4114476e44f 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 1634a7d5ff06583408cf2f02f2b5f90931b1e02a..dfe8473a880cbddfc3ac6a9c97f1a500624eeb38 100644 +index 1634a7d5ff06583408cf2f02f2b5f90931b1e02a..fd83261f64c6469aebde8ab13a6777b9b269cea2 100644 --- a/src/main/java/net/minecraft/world/item/ArmorStandItem.java +++ b/src/main/java/net/minecraft/world/item/ArmorStandItem.java @@ -58,6 +58,14 @@ public class ArmorStandItem extends Item { @@ -86,7 +86,7 @@ index 1634a7d5ff06583408cf2f02f2b5f90931b1e02a..dfe8473a880cbddfc3ac6a9c97f1a500 + if (!world.purpurConfig.persistentDroppableEntityDisplayNames) { + entityarmorstand.setCustomName(null); + } -+ if (world.purpurConfig.armorstandSetNameVisible) { ++ if (world.purpurConfig.armorstandSetNameVisible && entityarmorstand.getCustomName() != null) { + entityarmorstand.setCustomNameVisible(true); + } + // Purpur end @@ -126,14 +126,14 @@ index 530167ce8e5bb72a418f8ec61411e38a5892fd72..35dc7546793dba34bf6debad3f214f61 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 8ba5fc8813ef1cb34f7df801f6d7b2ed42b1c052..1f5cfaf07e0fd86a530b57fd0198ade2b1d0d999 100644 +index 8ba5fc8813ef1cb34f7df801f6d7b2ed42b1c052..8a0eb8281364cd0b140381474a46d02a6c4ad3ba 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 { } public float armorstandStepHeight = 0.0F; -+ public boolean armorstandSetNameVisible = true; ++ public boolean armorstandSetNameVisible = false; private void armorstandSettings() { armorstandStepHeight = (float) getDouble("gameplay-mechanics.armorstand.step-height", armorstandStepHeight); + armorstandSetNameVisible = getBoolean("gameplay-mechanics.armorstand.set-name-visible-when-placing-with-custom-name", armorstandSetNameVisible); diff --git a/patches/server/0101-Set-name-visible-when-using-a-Name-Tag-on-an-Armor-S.patch b/patches/server/0101-Set-name-visible-when-using-a-Name-Tag-on-an-Armor-S.patch index aef93925b..3fc1704f3 100644 --- a/patches/server/0101-Set-name-visible-when-using-a-Name-Tag-on-an-Armor-S.patch +++ b/patches/server/0101-Set-name-visible-when-using-a-Name-Tag-on-an-Armor-S.patch @@ -17,13 +17,13 @@ index 774c982f28b4f127fc3f036c19dfb47fb9ae3264..d49b60e7e643498b49c03593dc0da2f8 // Paper end - Add PlayerNameEntityEvent mob.setPersistenceRequired(); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 1f5cfaf07e0fd86a530b57fd0198ade2b1d0d999..548ad445ed73c5009c93cadb0ee8e39acdbd737c 100644 +index 8a0eb8281364cd0b140381474a46d02a6c4ad3ba..5b1c6815967d5006fbc466e3368398cc4d1f0c18 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 { public float armorstandStepHeight = 0.0F; - public boolean armorstandSetNameVisible = true; + public boolean armorstandSetNameVisible = false; + public boolean armorstandFixNametags = false; private void armorstandSettings() { armorstandStepHeight = (float) getDouble("gameplay-mechanics.armorstand.step-height", armorstandStepHeight); diff --git a/patches/server/0122-Movement-options-for-armor-stands.patch b/patches/server/0122-Movement-options-for-armor-stands.patch index a376aa4ea..371d9e861 100644 --- a/patches/server/0122-Movement-options-for-armor-stands.patch +++ b/patches/server/0122-Movement-options-for-armor-stands.patch @@ -66,12 +66,12 @@ index 67eb7ddb77e781bf9d140133e0ad9f16c1ca0f0e..d22ce9181e3b403328b8510bc73f8e6b + // Purpur end } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 91f204f313ee4b5a1f16416670e855d4e7177e51..c0f62102bb2147d08666013c5ca5360a5bcf8e8b 100644 +index 5694476f17d56f0db1c9fdfbafa1fc935cb84b3e..8c36c55ba6230bd254f1416e0a6446737fc1d911 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 { public float armorstandStepHeight = 0.0F; - public boolean armorstandSetNameVisible = true; + public boolean armorstandSetNameVisible = false; public boolean armorstandFixNametags = false; + public boolean armorstandMovement = true; + public boolean armorstandWaterMovement = true; From 3e944ed2d393ef3cc112fd7cddc7d4252492d862 Mon Sep 17 00:00:00 2001 From: granny Date: Sun, 12 May 2024 18:49:23 -0700 Subject: [PATCH 012/588] properly fix infinityWorksWithoutArrows option --- .../server/0092-Infinity-bow-settings.patch | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/patches/server/0092-Infinity-bow-settings.patch b/patches/server/0092-Infinity-bow-settings.patch index 1349ffb70..7db648e38 100644 --- a/patches/server/0092-Infinity-bow-settings.patch +++ b/patches/server/0092-Infinity-bow-settings.patch @@ -4,19 +4,19 @@ Date: Sun, 4 Oct 2020 19:08:53 -0500 Subject: [PATCH] Infinity bow settings -diff --git a/src/main/java/net/minecraft/world/item/BowItem.java b/src/main/java/net/minecraft/world/item/BowItem.java -index 5ca843df5b4caa668953e5e36a9b20fabeb35046..abe6da2d70e8080461f70014757c1e1b5878bbf7 100644 ---- a/src/main/java/net/minecraft/world/item/BowItem.java -+++ b/src/main/java/net/minecraft/world/item/BowItem.java -@@ -81,7 +81,7 @@ public class BowItem extends ProjectileWeaponItem { - public InteractionResultHolder use(Level world, Player user, InteractionHand hand) { - ItemStack itemStack = user.getItemInHand(hand); - boolean bl = !user.getProjectile(itemStack).isEmpty(); -- if (!user.hasInfiniteMaterials() && !bl) { -+ if (!(world.purpurConfig.infinityWorksWithoutArrows && net.minecraft.world.item.enchantment.EnchantmentHelper.getItemEnchantmentLevel(net.minecraft.world.item.enchantment.Enchantments.INFINITY, itemStack) > 0) && !user.hasInfiniteMaterials() && !bl) { // Purpur - return InteractionResultHolder.fail(itemStack); - } else { - user.startUsingItem(hand); +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 d98f5e4323859f9eae0caac04865a78719f5befc..55fd190274fed733a7049b03e56fa7a3b454b63a 100644 +--- a/src/main/java/net/minecraft/world/entity/player/Player.java ++++ b/src/main/java/net/minecraft/world/entity/player/Player.java +@@ -2343,7 +2343,7 @@ public abstract class Player extends LivingEntity { + } + } + +- return this.abilities.instabuild ? new ItemStack(Items.ARROW) : ItemStack.EMPTY; ++ return this.abilities.instabuild || (level().purpurConfig.infinityWorksWithoutArrows && net.minecraft.world.item.enchantment.EnchantmentHelper.getItemEnchantmentLevel(net.minecraft.world.item.enchantment.Enchantments.INFINITY, stack) > 0) ? new ItemStack(Items.ARROW) : ItemStack.EMPTY; // Purpur + } + } + } diff --git a/src/main/java/net/minecraft/world/item/ProjectileWeaponItem.java b/src/main/java/net/minecraft/world/item/ProjectileWeaponItem.java index d27e83c08c45b8514207f26e48ceb1a91ded94be..d6d91de1639a180eb39bb85ac825e992c477d0f9 100644 --- a/src/main/java/net/minecraft/world/item/ProjectileWeaponItem.java From da953af857486ad7888802152901c407cf53a95e Mon Sep 17 00:00:00 2001 From: granny Date: Sun, 12 May 2024 22:45:04 -0700 Subject: [PATCH 013/588] Updated Upstream (Paper) Upstream has released updates that appear to apply and compile correctly Paper Changes: PaperMC/Paper@11c3963 Improve Recipe validation (#10707) PaperMC/Paper@0688f21 Better way to keep paper datapack enabled --- gradle.properties | 2 +- ...Add-predicate-to-recipe-s-ExactChoice-ingredient.patch | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/gradle.properties b/gradle.properties index 0aa6747d1..5dd3cb9e2 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ group = org.purpurmc.purpur version = 1.20.6-R0.1-SNAPSHOT mcVersion = 1.20.6 -paperCommit = f041f48458e6d81a54895e988867c0b738922d4d +paperCommit = 0688f212f534f7ef8d9146b595f38e4c2b2eba42 org.gradle.caching = true org.gradle.parallel = true diff --git a/patches/api/0018-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch b/patches/api/0018-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch index e6dd23224..0465887ee 100644 --- a/patches/api/0018-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch +++ b/patches/api/0018-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Add predicate to recipe's ExactChoice ingredient diff --git a/src/main/java/org/bukkit/inventory/RecipeChoice.java b/src/main/java/org/bukkit/inventory/RecipeChoice.java -index db8bcc66bdc4bedfffb4705db6338eda4c0ad29a..feda3ddfaaf37b6ee218a0e0b1fbc199899bd364 100644 +index c143b0d8b97d514566bac8413d0346cf50822aeb..032a21766ce91471cb7d91b663d70e0d9fa66a26 100644 --- a/src/main/java/org/bukkit/inventory/RecipeChoice.java +++ b/src/main/java/org/bukkit/inventory/RecipeChoice.java @@ -10,6 +10,7 @@ import java.util.function.Predicate; @@ -16,7 +16,7 @@ index db8bcc66bdc4bedfffb4705db6338eda4c0ad29a..feda3ddfaaf37b6ee218a0e0b1fbc199 /** * Represents a potential item match within a recipe. All choices within a -@@ -150,6 +151,7 @@ public interface RecipeChoice extends Predicate, Cloneable { +@@ -157,6 +158,7 @@ public interface RecipeChoice extends Predicate, Cloneable { public static class ExactChoice implements RecipeChoice { private List choices; @@ -24,7 +24,7 @@ index db8bcc66bdc4bedfffb4705db6338eda4c0ad29a..feda3ddfaaf37b6ee218a0e0b1fbc199 public ExactChoice(@NotNull ItemStack stack) { this(Arrays.asList(stack)); -@@ -194,6 +196,7 @@ public interface RecipeChoice extends Predicate, Cloneable { +@@ -206,6 +208,7 @@ public interface RecipeChoice extends Predicate, Cloneable { @Override public boolean test(@NotNull ItemStack t) { @@ -32,7 +32,7 @@ index db8bcc66bdc4bedfffb4705db6338eda4c0ad29a..feda3ddfaaf37b6ee218a0e0b1fbc199 for (ItemStack match : choices) { if (t.isSimilar(match)) { return true; -@@ -203,6 +206,17 @@ public interface RecipeChoice extends Predicate, Cloneable { +@@ -215,6 +218,17 @@ public interface RecipeChoice extends Predicate, Cloneable { return false; } From 12905d50407b2a1bac4af4b4a68dd56548f2e08c Mon Sep 17 00:00:00 2001 From: granny Date: Mon, 13 May 2024 14:36:30 -0700 Subject: [PATCH 014/588] Updated Upstream (Paper) Upstream has released updates that appear to apply and compile correctly Paper Changes: PaperMC/Paper@218d33c fix creating complex recipes that have air results PaperMC/Paper@fa8a407 Remove Adventure snapshot repo from dev bundle (#10716) --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 5dd3cb9e2..999ff6432 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ group = org.purpurmc.purpur version = 1.20.6-R0.1-SNAPSHOT mcVersion = 1.20.6 -paperCommit = 0688f212f534f7ef8d9146b595f38e4c2b2eba42 +paperCommit = fa8a407072c320564c39d32d2d221550c3e6d5b6 org.gradle.caching = true org.gradle.parallel = true From c637b74bade41e7be96ed3478bab7c3b923e7d84 Mon Sep 17 00:00:00 2001 From: granny Date: Mon, 13 May 2024 16:12:06 -0700 Subject: [PATCH 015/588] Updated Upstream (Paper) Upstream has released updates that appear to apply and compile correctly Paper Changes: PaperMC/Paper@bebcc9c Make exception during command conversion non-fatal PaperMC/Paper@2faa3b2 Correctly copy alias requirements in command upgrader --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 999ff6432..1101b5d36 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ group = org.purpurmc.purpur version = 1.20.6-R0.1-SNAPSHOT mcVersion = 1.20.6 -paperCommit = fa8a407072c320564c39d32d2d221550c3e6d5b6 +paperCommit = 2faa3b2f44c962ce7413e8e3d71e32786851d556 org.gradle.caching = true org.gradle.parallel = true From ba950ad7758d4da6ccc26f578521ab4a07a2402d Mon Sep 17 00:00:00 2001 From: granny Date: Tue, 14 May 2024 16:32:28 -0700 Subject: [PATCH 016/588] reparse minimessage from serialized playerlist component, closes #1515 --- patches/server/0010-AFK-API.patch | 4 ++-- test-plugin/src/main/resources/paper-plugin.yml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/patches/server/0010-AFK-API.patch b/patches/server/0010-AFK-API.patch index 7cc1a23cd..957afbf94 100644 --- a/patches/server/0010-AFK-API.patch +++ b/patches/server/0010-AFK-API.patch @@ -5,7 +5,7 @@ Subject: [PATCH] AFK API diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 4391ae896d8dbe98c6577f85759b187a396a7c21..7e99e10eb07eabb9fc81c93bafe5e16f7177af09 100644 +index 4391ae896d8dbe98c6577f85759b187a396a7c21..59d37e8938b16882c2424146f50088eb0ea24857 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java @@ -2326,8 +2326,68 @@ public class ServerPlayer extends Player { @@ -56,7 +56,7 @@ index 4391ae896d8dbe98c6577f85759b187a396a7c21..7e99e10eb07eabb9fc81c93bafe5e16f + if (afk) { + getBukkitEntity().setPlayerListName(org.purpurmc.purpur.PurpurConfig.afkTabListPrefix + prefix + scoreboardName + suffix + org.purpurmc.purpur.PurpurConfig.afkTabListSuffix, true); + } else { -+ getBukkitEntity().setPlayerListName(prefix + scoreboardName + suffix); ++ getBukkitEntity().setPlayerListName(prefix + scoreboardName + suffix, true); + } + } + diff --git a/test-plugin/src/main/resources/paper-plugin.yml b/test-plugin/src/main/resources/paper-plugin.yml index 3418d110e..4357c79e2 100644 --- a/test-plugin/src/main/resources/paper-plugin.yml +++ b/test-plugin/src/main/resources/paper-plugin.yml @@ -5,8 +5,8 @@ description: Purpur Test Plugin author: PurpurMC api-version: ${apiversion} load: STARTUP -bootstrapper: org.purpurmc.testplugin.TestPluginBootstrap -loader: org.purpurmc.testplugin.TestPluginLoader +#bootstrapper: org.purpurmc.testplugin.TestPluginBootstrap +#loader: org.purpurmc.testplugin.TestPluginLoader defaultPerm: FALSE permissions: dependencies: From 69d3bb4c2d303048debdc78e92700693634b9172 Mon Sep 17 00:00:00 2001 From: granny Date: Thu, 16 May 2024 19:11:29 -0700 Subject: [PATCH 017/588] Updated Upstream (Paper) Upstream has released updates that appear to apply and compile correctly Paper Changes: PaperMC/Paper@3fc9358 Show stacktrace when modifyItemStack fails PaperMC/Paper@f175193 Expose server build information (#10729) --- gradle.properties | 2 +- patches/api/0001-Rebrand.patch | 24 ++ ...s.patch => 0002-Purpur-config-files.patch} | 2 +- ....patch => 0003-Build-System-Changes.patch} | 0 ...patch => 0004-Purpur-client-support.patch} | 0 ...s.patch => 0005-Default-permissions.patch} | 0 ...005-Ridables.patch => 0006-Ridables.patch} | 0 ...ch => 0007-Allow-inventory-resizing.patch} | 0 ...7-Llama-API.patch => 0008-Llama-API.patch} | 0 ...{0008-AFK-API.patch => 0009-AFK-API.patch} | 0 ...atch => 0010-Bring-back-server-name.patch} | 4 +- ...t.patch => 0011-ExecuteCommandEvent.patch} | 0 ...old.patch => 0012-Lagging-threshold.patch} | 4 +- ...13-PlayerSetSpawnerTypeWithEggEvent.patch} | 0 ...3-Anvil-API.patch => 0014-Anvil-API.patch} | 0 ... 0015-ItemStack-convenience-methods.patch} | 0 ...016-LivingEntity-broadcastItemBreak.patch} | 0 ...atch => 0017-ChatColor-conveniences.patch} | 0 ...atch => 0018-Item-entity-immunities.patch} | 0 ...-to-recipe-s-ExactChoice-ingredient.patch} | 0 ...lf-API.patch => 0020-Rabid-Wolf-API.patch} | 0 ...tch => 0021-PlayerBookTooLargeEvent.patch} | 0 ...herite-armor-grants-fire-resistance.patch} | 0 ...023-Add-EntityTeleportHinderedEvent.patch} | 0 ...tment-target-for-bows-and-crossbows.patch} | 0 ...25-API-for-any-mob-to-burn-daylight.patch} | 0 ...d-back-player-spawned-endermite-API.patch} | 0 ... 0027-Fix-default-permission-system.patch} | 0 ...oner-API.patch => 0028-Summoner-API.patch} | 0 ...029-Clean-up-version-command-output.patch} | 0 ... => 0030-Extended-OfflinePlayer-API.patch} | 0 ...he-ability-to-add-combustible-items.patch} | 4 +- ...ne-API.patch => 0032-Grindstone-API.patch} | 0 ...Shears-can-have-looting-enchantment.patch} | 0 ... => 0034-Lobotomize-stuck-villagers.patch} | 0 ...ch => 0035-Add-local-difficulty-api.patch} | 0 ...imings.patch => 0036-Remove-Timings.patch} | 0 ...d-Bee-API.patch => 0037-Add-Bee-API.patch} | 0 ...-API.patch => 0038-Debug-Marker-API.patch} | 4 +- ....patch => 0039-Add-death-screen-API.patch} | 0 ...uage-API.patch => 0040-Language-API.patch} | 0 ...d-log-suppression-for-LibraryLoader.patch} | 0 ...API.patch => 0042-Fire-Immunity-API.patch} | 0 ....patch => 0043-Added-goat-ram-event.patch} | 0 ....patch => 0044-Add-PreExplodeEvents.patch} | 0 ...ee-API.patch => 0045-Stored-Bee-API.patch} | 0 ...-API.patch => 0046-Explorer-Map-API.patch} | 0 ...ge.patch => 0047-Stonecutter-damage.patch} | 0 patches/server/0001-Rebrand.patch | 211 +++++++++--------- patches/server/0002-Purpur-config-files.patch | 14 +- patches/server/0006-Ridables.patch | 4 +- .../server/0011-Bring-back-server-name.patch | 4 +- .../0012-Configurable-server-mod-name.patch | 12 +- patches/server/0013-Lagging-threshold.patch | 12 +- .../0020-Disable-outdated-build-check.patch | 4 +- .../0043-Configurable-TPS-Catchup.patch | 6 +- ...0056-Add-5-second-tps-average-in-tps.patch | 12 +- patches/server/0059-Add-ping-command.patch | 6 +- .../0093-Configurable-daylight-cycle.patch | 4 +- patches/server/0114-Implement-TPSBar.patch | 12 +- .../server/0128-Dont-run-with-scissors.patch | 6 +- ...0157-Configurable-broadcast-settings.patch | 6 +- patches/server/0181-Add-uptime-command.patch | 8 +- ...the-ability-to-add-combustible-items.patch | 4 +- .../server/0212-UPnP-Port-Forwarding.patch | 8 +- ...counts-in-beehives-to-Purpur-clients.patch | 6 +- patches/server/0254-Remove-Timings.patch | 22 +- .../server/0255-Remove-Mojang-Profiler.patch | 46 ++-- patches/server/0258-Debug-Marker-API.patch | 4 +- patches/server/0266-Language-API.patch | 4 +- .../0295-config-for-startup-commands.patch | 6 +- 71 files changed, 246 insertions(+), 219 deletions(-) create mode 100644 patches/api/0001-Rebrand.patch rename patches/api/{0001-Purpur-config-files.patch => 0002-Purpur-config-files.patch} (91%) rename patches/api/{0002-Build-System-Changes.patch => 0003-Build-System-Changes.patch} (100%) rename patches/api/{0003-Purpur-client-support.patch => 0004-Purpur-client-support.patch} (100%) rename patches/api/{0004-Default-permissions.patch => 0005-Default-permissions.patch} (100%) rename patches/api/{0005-Ridables.patch => 0006-Ridables.patch} (100%) rename patches/api/{0006-Allow-inventory-resizing.patch => 0007-Allow-inventory-resizing.patch} (100%) rename patches/api/{0007-Llama-API.patch => 0008-Llama-API.patch} (100%) rename patches/api/{0008-AFK-API.patch => 0009-AFK-API.patch} (100%) rename patches/api/{0009-Bring-back-server-name.patch => 0010-Bring-back-server-name.patch} (90%) rename patches/api/{0010-ExecuteCommandEvent.patch => 0011-ExecuteCommandEvent.patch} (100%) rename patches/api/{0011-Lagging-threshold.patch => 0012-Lagging-threshold.patch} (89%) rename patches/api/{0012-PlayerSetSpawnerTypeWithEggEvent.patch => 0013-PlayerSetSpawnerTypeWithEggEvent.patch} (100%) rename patches/api/{0013-Anvil-API.patch => 0014-Anvil-API.patch} (100%) rename patches/api/{0014-ItemStack-convenience-methods.patch => 0015-ItemStack-convenience-methods.patch} (100%) rename patches/api/{0015-LivingEntity-broadcastItemBreak.patch => 0016-LivingEntity-broadcastItemBreak.patch} (100%) rename patches/api/{0016-ChatColor-conveniences.patch => 0017-ChatColor-conveniences.patch} (100%) rename patches/api/{0017-Item-entity-immunities.patch => 0018-Item-entity-immunities.patch} (100%) rename patches/api/{0018-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch => 0019-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch} (100%) rename patches/api/{0019-Rabid-Wolf-API.patch => 0020-Rabid-Wolf-API.patch} (100%) rename patches/api/{0020-PlayerBookTooLargeEvent.patch => 0021-PlayerBookTooLargeEvent.patch} (100%) rename patches/api/{0021-Full-netherite-armor-grants-fire-resistance.patch => 0022-Full-netherite-armor-grants-fire-resistance.patch} (100%) rename patches/api/{0022-Add-EntityTeleportHinderedEvent.patch => 0023-Add-EntityTeleportHinderedEvent.patch} (100%) rename patches/api/{0023-Add-enchantment-target-for-bows-and-crossbows.patch => 0024-Add-enchantment-target-for-bows-and-crossbows.patch} (100%) rename patches/api/{0024-API-for-any-mob-to-burn-daylight.patch => 0025-API-for-any-mob-to-burn-daylight.patch} (100%) rename patches/api/{0025-Add-back-player-spawned-endermite-API.patch => 0026-Add-back-player-spawned-endermite-API.patch} (100%) rename patches/api/{0026-Fix-default-permission-system.patch => 0027-Fix-default-permission-system.patch} (100%) rename patches/api/{0027-Summoner-API.patch => 0028-Summoner-API.patch} (100%) rename patches/api/{0028-Clean-up-version-command-output.patch => 0029-Clean-up-version-command-output.patch} (100%) rename patches/api/{0029-Extended-OfflinePlayer-API.patch => 0030-Extended-OfflinePlayer-API.patch} (100%) rename patches/api/{0030-Added-the-ability-to-add-combustible-items.patch => 0031-Added-the-ability-to-add-combustible-items.patch} (93%) rename patches/api/{0031-Grindstone-API.patch => 0032-Grindstone-API.patch} (100%) rename patches/api/{0032-Shears-can-have-looting-enchantment.patch => 0033-Shears-can-have-looting-enchantment.patch} (100%) rename patches/api/{0033-Lobotomize-stuck-villagers.patch => 0034-Lobotomize-stuck-villagers.patch} (100%) rename patches/api/{0034-Add-local-difficulty-api.patch => 0035-Add-local-difficulty-api.patch} (100%) rename patches/api/{0035-Remove-Timings.patch => 0036-Remove-Timings.patch} (100%) rename patches/api/{0036-Add-Bee-API.patch => 0037-Add-Bee-API.patch} (100%) rename patches/api/{0037-Debug-Marker-API.patch => 0038-Debug-Marker-API.patch} (99%) rename patches/api/{0038-Add-death-screen-API.patch => 0039-Add-death-screen-API.patch} (100%) rename patches/api/{0039-Language-API.patch => 0040-Language-API.patch} (100%) rename patches/api/{0040-Add-log-suppression-for-LibraryLoader.patch => 0041-Add-log-suppression-for-LibraryLoader.patch} (100%) rename patches/api/{0041-Fire-Immunity-API.patch => 0042-Fire-Immunity-API.patch} (100%) rename patches/api/{0042-Added-goat-ram-event.patch => 0043-Added-goat-ram-event.patch} (100%) rename patches/api/{0043-Add-PreExplodeEvents.patch => 0044-Add-PreExplodeEvents.patch} (100%) rename patches/api/{0044-Stored-Bee-API.patch => 0045-Stored-Bee-API.patch} (100%) rename patches/api/{0045-Explorer-Map-API.patch => 0046-Explorer-Map-API.patch} (100%) rename patches/api/{0046-Stonecutter-damage.patch => 0047-Stonecutter-damage.patch} (100%) diff --git a/gradle.properties b/gradle.properties index 1101b5d36..d2a188ca9 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ group = org.purpurmc.purpur version = 1.20.6-R0.1-SNAPSHOT mcVersion = 1.20.6 -paperCommit = 2faa3b2f44c962ce7413e8e3d71e32786851d556 +paperCommit = f17519338bc589c045e0b32bfc37e048b23544d5 org.gradle.caching = true org.gradle.parallel = true diff --git a/patches/api/0001-Rebrand.patch b/patches/api/0001-Rebrand.patch new file mode 100644 index 000000000..32f36462b --- /dev/null +++ b/patches/api/0001-Rebrand.patch @@ -0,0 +1,24 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: granny +Date: Thu, 16 May 2024 19:11:29 -0700 +Subject: [PATCH] Rebrand + + +diff --git a/src/main/java/io/papermc/paper/ServerBuildInfo.java b/src/main/java/io/papermc/paper/ServerBuildInfo.java +index 9df9d09aa477d4cd3c496ba0933c816df1ef0964..7107eabf02d9d9b69d97c978ba421ad52031ec3f 100644 +--- a/src/main/java/io/papermc/paper/ServerBuildInfo.java ++++ b/src/main/java/io/papermc/paper/ServerBuildInfo.java +@@ -18,6 +18,13 @@ public interface ServerBuildInfo { + */ + Key BRAND_PAPER_ID = Key.key("papermc", "paper"); + ++ // Purpur start ++ /** ++ * The brand id for Purpur. ++ */ ++ Key BRAND_PURPUR_ID = Key.key("purpurmc", "purpur"); ++ // Purpur end ++ + /** + * Gets the {@code ServerBuildInfo}. + * diff --git a/patches/api/0001-Purpur-config-files.patch b/patches/api/0002-Purpur-config-files.patch similarity index 91% rename from patches/api/0001-Purpur-config-files.patch rename to patches/api/0002-Purpur-config-files.patch index d175ac5a8..da3a1e3c3 100644 --- a/patches/api/0001-Purpur-config-files.patch +++ b/patches/api/0002-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 30cbe3bdc7142769019765b03cc4fe1f9ba1ddb4..f5c3c1a0c11dd3518981ce3b86dba8ced8578d9c 100644 +index c8595ffcfcbdd79794d464415287d46acef72b72..607ba7cb902d7053cb570d8f3676ecbadbe56daf 100644 --- a/src/main/java/org/bukkit/Server.java +++ b/src/main/java/org/bukkit/Server.java @@ -2257,6 +2257,18 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi diff --git a/patches/api/0002-Build-System-Changes.patch b/patches/api/0003-Build-System-Changes.patch similarity index 100% rename from patches/api/0002-Build-System-Changes.patch rename to patches/api/0003-Build-System-Changes.patch diff --git a/patches/api/0003-Purpur-client-support.patch b/patches/api/0004-Purpur-client-support.patch similarity index 100% rename from patches/api/0003-Purpur-client-support.patch rename to patches/api/0004-Purpur-client-support.patch diff --git a/patches/api/0004-Default-permissions.patch b/patches/api/0005-Default-permissions.patch similarity index 100% rename from patches/api/0004-Default-permissions.patch rename to patches/api/0005-Default-permissions.patch diff --git a/patches/api/0005-Ridables.patch b/patches/api/0006-Ridables.patch similarity index 100% rename from patches/api/0005-Ridables.patch rename to patches/api/0006-Ridables.patch diff --git a/patches/api/0006-Allow-inventory-resizing.patch b/patches/api/0007-Allow-inventory-resizing.patch similarity index 100% rename from patches/api/0006-Allow-inventory-resizing.patch rename to patches/api/0007-Allow-inventory-resizing.patch diff --git a/patches/api/0007-Llama-API.patch b/patches/api/0008-Llama-API.patch similarity index 100% rename from patches/api/0007-Llama-API.patch rename to patches/api/0008-Llama-API.patch diff --git a/patches/api/0008-AFK-API.patch b/patches/api/0009-AFK-API.patch similarity index 100% rename from patches/api/0008-AFK-API.patch rename to patches/api/0009-AFK-API.patch diff --git a/patches/api/0009-Bring-back-server-name.patch b/patches/api/0010-Bring-back-server-name.patch similarity index 90% rename from patches/api/0009-Bring-back-server-name.patch rename to patches/api/0010-Bring-back-server-name.patch index 56635c70b..b598cb8fc 100644 --- a/patches/api/0009-Bring-back-server-name.patch +++ b/patches/api/0010-Bring-back-server-name.patch @@ -5,10 +5,10 @@ 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 5d1b55fdbcbe63f6b42b694d05211a3cc691a09d..54f11593f4acfb89623cf1fad58819e001505fd1 100644 +index 71f1c361ebccbe83193c37ec3a90faa4085001c3..20f10b2cfb6f2b1ce7da61a15f7dc4a68b7c5cde 100644 --- a/src/main/java/org/bukkit/Bukkit.java +++ b/src/main/java/org/bukkit/Bukkit.java -@@ -2910,4 +2910,15 @@ public final class Bukkit { +@@ -2907,4 +2907,15 @@ public final class Bukkit { public static Server.Spigot spigot() { return server.spigot(); } diff --git a/patches/api/0010-ExecuteCommandEvent.patch b/patches/api/0011-ExecuteCommandEvent.patch similarity index 100% rename from patches/api/0010-ExecuteCommandEvent.patch rename to patches/api/0011-ExecuteCommandEvent.patch diff --git a/patches/api/0011-Lagging-threshold.patch b/patches/api/0012-Lagging-threshold.patch similarity index 89% rename from patches/api/0011-Lagging-threshold.patch rename to patches/api/0012-Lagging-threshold.patch index 92c1c6461..38afefd44 100644 --- a/patches/api/0011-Lagging-threshold.patch +++ b/patches/api/0012-Lagging-threshold.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Lagging threshold diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java -index 54f11593f4acfb89623cf1fad58819e001505fd1..215647d7f5cc8487d6a173bc0160fec6db1971eb 100644 +index 20f10b2cfb6f2b1ce7da61a15f7dc4a68b7c5cde..07a79b10ef8b7fa6fd22fbb2652d35ffc9170bfb 100644 --- a/src/main/java/org/bukkit/Bukkit.java +++ b/src/main/java/org/bukkit/Bukkit.java -@@ -2920,5 +2920,14 @@ public final class Bukkit { +@@ -2917,5 +2917,14 @@ public final class Bukkit { public static String getServerName() { return server.getServerName(); } diff --git a/patches/api/0012-PlayerSetSpawnerTypeWithEggEvent.patch b/patches/api/0013-PlayerSetSpawnerTypeWithEggEvent.patch similarity index 100% rename from patches/api/0012-PlayerSetSpawnerTypeWithEggEvent.patch rename to patches/api/0013-PlayerSetSpawnerTypeWithEggEvent.patch diff --git a/patches/api/0013-Anvil-API.patch b/patches/api/0014-Anvil-API.patch similarity index 100% rename from patches/api/0013-Anvil-API.patch rename to patches/api/0014-Anvil-API.patch diff --git a/patches/api/0014-ItemStack-convenience-methods.patch b/patches/api/0015-ItemStack-convenience-methods.patch similarity index 100% rename from patches/api/0014-ItemStack-convenience-methods.patch rename to patches/api/0015-ItemStack-convenience-methods.patch diff --git a/patches/api/0015-LivingEntity-broadcastItemBreak.patch b/patches/api/0016-LivingEntity-broadcastItemBreak.patch similarity index 100% rename from patches/api/0015-LivingEntity-broadcastItemBreak.patch rename to patches/api/0016-LivingEntity-broadcastItemBreak.patch diff --git a/patches/api/0016-ChatColor-conveniences.patch b/patches/api/0017-ChatColor-conveniences.patch similarity index 100% rename from patches/api/0016-ChatColor-conveniences.patch rename to patches/api/0017-ChatColor-conveniences.patch diff --git a/patches/api/0017-Item-entity-immunities.patch b/patches/api/0018-Item-entity-immunities.patch similarity index 100% rename from patches/api/0017-Item-entity-immunities.patch rename to patches/api/0018-Item-entity-immunities.patch diff --git a/patches/api/0018-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch b/patches/api/0019-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch similarity index 100% rename from patches/api/0018-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch rename to patches/api/0019-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch diff --git a/patches/api/0019-Rabid-Wolf-API.patch b/patches/api/0020-Rabid-Wolf-API.patch similarity index 100% rename from patches/api/0019-Rabid-Wolf-API.patch rename to patches/api/0020-Rabid-Wolf-API.patch diff --git a/patches/api/0020-PlayerBookTooLargeEvent.patch b/patches/api/0021-PlayerBookTooLargeEvent.patch similarity index 100% rename from patches/api/0020-PlayerBookTooLargeEvent.patch rename to patches/api/0021-PlayerBookTooLargeEvent.patch diff --git a/patches/api/0021-Full-netherite-armor-grants-fire-resistance.patch b/patches/api/0022-Full-netherite-armor-grants-fire-resistance.patch similarity index 100% rename from patches/api/0021-Full-netherite-armor-grants-fire-resistance.patch rename to patches/api/0022-Full-netherite-armor-grants-fire-resistance.patch diff --git a/patches/api/0022-Add-EntityTeleportHinderedEvent.patch b/patches/api/0023-Add-EntityTeleportHinderedEvent.patch similarity index 100% rename from patches/api/0022-Add-EntityTeleportHinderedEvent.patch rename to patches/api/0023-Add-EntityTeleportHinderedEvent.patch diff --git a/patches/api/0023-Add-enchantment-target-for-bows-and-crossbows.patch b/patches/api/0024-Add-enchantment-target-for-bows-and-crossbows.patch similarity index 100% rename from patches/api/0023-Add-enchantment-target-for-bows-and-crossbows.patch rename to patches/api/0024-Add-enchantment-target-for-bows-and-crossbows.patch diff --git a/patches/api/0024-API-for-any-mob-to-burn-daylight.patch b/patches/api/0025-API-for-any-mob-to-burn-daylight.patch similarity index 100% rename from patches/api/0024-API-for-any-mob-to-burn-daylight.patch rename to patches/api/0025-API-for-any-mob-to-burn-daylight.patch diff --git a/patches/api/0025-Add-back-player-spawned-endermite-API.patch b/patches/api/0026-Add-back-player-spawned-endermite-API.patch similarity index 100% rename from patches/api/0025-Add-back-player-spawned-endermite-API.patch rename to patches/api/0026-Add-back-player-spawned-endermite-API.patch diff --git a/patches/api/0026-Fix-default-permission-system.patch b/patches/api/0027-Fix-default-permission-system.patch similarity index 100% rename from patches/api/0026-Fix-default-permission-system.patch rename to patches/api/0027-Fix-default-permission-system.patch diff --git a/patches/api/0027-Summoner-API.patch b/patches/api/0028-Summoner-API.patch similarity index 100% rename from patches/api/0027-Summoner-API.patch rename to patches/api/0028-Summoner-API.patch diff --git a/patches/api/0028-Clean-up-version-command-output.patch b/patches/api/0029-Clean-up-version-command-output.patch similarity index 100% rename from patches/api/0028-Clean-up-version-command-output.patch rename to patches/api/0029-Clean-up-version-command-output.patch diff --git a/patches/api/0029-Extended-OfflinePlayer-API.patch b/patches/api/0030-Extended-OfflinePlayer-API.patch similarity index 100% rename from patches/api/0029-Extended-OfflinePlayer-API.patch rename to patches/api/0030-Extended-OfflinePlayer-API.patch diff --git a/patches/api/0030-Added-the-ability-to-add-combustible-items.patch b/patches/api/0031-Added-the-ability-to-add-combustible-items.patch similarity index 93% rename from patches/api/0030-Added-the-ability-to-add-combustible-items.patch rename to patches/api/0031-Added-the-ability-to-add-combustible-items.patch index d5b96b3b9..eb734766b 100644 --- a/patches/api/0030-Added-the-ability-to-add-combustible-items.patch +++ b/patches/api/0031-Added-the-ability-to-add-combustible-items.patch @@ -5,10 +5,10 @@ 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 215647d7f5cc8487d6a173bc0160fec6db1971eb..7bc4e5e9947ab646707a5c0b39c70c0cc6606bd8 100644 +index 07a79b10ef8b7fa6fd22fbb2652d35ffc9170bfb..b99e7e0076448a8b81e3d2d75a451c76f01fc12d 100644 --- a/src/main/java/org/bukkit/Bukkit.java +++ b/src/main/java/org/bukkit/Bukkit.java -@@ -2929,5 +2929,24 @@ public final class Bukkit { +@@ -2926,5 +2926,24 @@ public final class Bukkit { public static boolean isLagging() { return server.isLagging(); } diff --git a/patches/api/0031-Grindstone-API.patch b/patches/api/0032-Grindstone-API.patch similarity index 100% rename from patches/api/0031-Grindstone-API.patch rename to patches/api/0032-Grindstone-API.patch diff --git a/patches/api/0032-Shears-can-have-looting-enchantment.patch b/patches/api/0033-Shears-can-have-looting-enchantment.patch similarity index 100% rename from patches/api/0032-Shears-can-have-looting-enchantment.patch rename to patches/api/0033-Shears-can-have-looting-enchantment.patch diff --git a/patches/api/0033-Lobotomize-stuck-villagers.patch b/patches/api/0034-Lobotomize-stuck-villagers.patch similarity index 100% rename from patches/api/0033-Lobotomize-stuck-villagers.patch rename to patches/api/0034-Lobotomize-stuck-villagers.patch diff --git a/patches/api/0034-Add-local-difficulty-api.patch b/patches/api/0035-Add-local-difficulty-api.patch similarity index 100% rename from patches/api/0034-Add-local-difficulty-api.patch rename to patches/api/0035-Add-local-difficulty-api.patch diff --git a/patches/api/0035-Remove-Timings.patch b/patches/api/0036-Remove-Timings.patch similarity index 100% rename from patches/api/0035-Remove-Timings.patch rename to patches/api/0036-Remove-Timings.patch diff --git a/patches/api/0036-Add-Bee-API.patch b/patches/api/0037-Add-Bee-API.patch similarity index 100% rename from patches/api/0036-Add-Bee-API.patch rename to patches/api/0037-Add-Bee-API.patch diff --git a/patches/api/0037-Debug-Marker-API.patch b/patches/api/0038-Debug-Marker-API.patch similarity index 99% rename from patches/api/0037-Debug-Marker-API.patch rename to patches/api/0038-Debug-Marker-API.patch index 03d40a25e..e69f06c97 100644 --- a/patches/api/0037-Debug-Marker-API.patch +++ b/patches/api/0038-Debug-Marker-API.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Debug Marker API diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java -index 7bc4e5e9947ab646707a5c0b39c70c0cc6606bd8..70ef8f63ab79e102cb4326c21cc344488f4fbdd3 100644 +index b99e7e0076448a8b81e3d2d75a451c76f01fc12d..75fe3bdbd44440c7cbea45dbd248e260f322dbb2 100644 --- a/src/main/java/org/bukkit/Bukkit.java +++ b/src/main/java/org/bukkit/Bukkit.java -@@ -2948,5 +2948,89 @@ public final class Bukkit { +@@ -2945,5 +2945,89 @@ public final class Bukkit { public static void removeFuel(@NotNull Material material) { server.removeFuel(material); } diff --git a/patches/api/0038-Add-death-screen-API.patch b/patches/api/0039-Add-death-screen-API.patch similarity index 100% rename from patches/api/0038-Add-death-screen-API.patch rename to patches/api/0039-Add-death-screen-API.patch diff --git a/patches/api/0039-Language-API.patch b/patches/api/0040-Language-API.patch similarity index 100% rename from patches/api/0039-Language-API.patch rename to patches/api/0040-Language-API.patch diff --git a/patches/api/0040-Add-log-suppression-for-LibraryLoader.patch b/patches/api/0041-Add-log-suppression-for-LibraryLoader.patch similarity index 100% rename from patches/api/0040-Add-log-suppression-for-LibraryLoader.patch rename to patches/api/0041-Add-log-suppression-for-LibraryLoader.patch diff --git a/patches/api/0041-Fire-Immunity-API.patch b/patches/api/0042-Fire-Immunity-API.patch similarity index 100% rename from patches/api/0041-Fire-Immunity-API.patch rename to patches/api/0042-Fire-Immunity-API.patch diff --git a/patches/api/0042-Added-goat-ram-event.patch b/patches/api/0043-Added-goat-ram-event.patch similarity index 100% rename from patches/api/0042-Added-goat-ram-event.patch rename to patches/api/0043-Added-goat-ram-event.patch diff --git a/patches/api/0043-Add-PreExplodeEvents.patch b/patches/api/0044-Add-PreExplodeEvents.patch similarity index 100% rename from patches/api/0043-Add-PreExplodeEvents.patch rename to patches/api/0044-Add-PreExplodeEvents.patch diff --git a/patches/api/0044-Stored-Bee-API.patch b/patches/api/0045-Stored-Bee-API.patch similarity index 100% rename from patches/api/0044-Stored-Bee-API.patch rename to patches/api/0045-Stored-Bee-API.patch diff --git a/patches/api/0045-Explorer-Map-API.patch b/patches/api/0046-Explorer-Map-API.patch similarity index 100% rename from patches/api/0045-Explorer-Map-API.patch rename to patches/api/0046-Explorer-Map-API.patch diff --git a/patches/api/0046-Stonecutter-damage.patch b/patches/api/0047-Stonecutter-damage.patch similarity index 100% rename from patches/api/0046-Stonecutter-damage.patch rename to patches/api/0047-Stonecutter-damage.patch diff --git a/patches/server/0001-Rebrand.patch b/patches/server/0001-Rebrand.patch index 106562bd3..1e7b45bb8 100644 --- a/patches/server/0001-Rebrand.patch +++ b/patches/server/0001-Rebrand.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Rebrand diff --git a/build.gradle.kts b/build.gradle.kts -index 87bb3fd9b97506f61734ae7f2e6860610ba794e7..89f21e21efc5f5ab99d1586f4f3b8f2f3c48ac06 100644 +index 4998aff0b7cb084dcda15c6a18bbe45e99b6000a..d23ecfabf6bf1e355fb2efe5abd80236259ce3c4 100644 --- a/build.gradle.kts +++ b/build.gradle.kts -@@ -12,7 +12,7 @@ configurations.named(log4jPlugins.compileClasspathConfigurationName) { +@@ -13,7 +13,7 @@ configurations.named(log4jPlugins.compileClasspathConfigurationName) { val alsoShade: Configuration by configurations.creating dependencies { @@ -17,7 +17,7 @@ index 87bb3fd9b97506f61734ae7f2e6860610ba794e7..89f21e21efc5f5ab99d1586f4f3b8f2f // Paper start implementation("org.jline:jline-terminal-jansi:3.21.0") implementation("net.minecrell:terminalconsoleappender:1.3.0") -@@ -46,6 +46,10 @@ dependencies { +@@ -47,6 +47,10 @@ dependencies { runtimeOnly("org.apache.maven.resolver:maven-resolver-connector-basic:1.9.18") runtimeOnly("org.apache.maven.resolver:maven-resolver-transport-http:1.9.18") @@ -28,16 +28,27 @@ index 87bb3fd9b97506f61734ae7f2e6860610ba794e7..89f21e21efc5f5ab99d1586f4f3b8f2f testImplementation("io.github.classgraph:classgraph:4.8.47") // Paper - mob goal test testImplementation("org.junit.jupiter:junit-jupiter:5.10.2") testImplementation("org.hamcrest:hamcrest:2.2") -@@ -78,7 +82,7 @@ tasks.jar { +@@ -80,14 +84,14 @@ tasks.jar { + val gitBranch = git("rev-parse", "--abbrev-ref", "HEAD").getText().trim() // Paper attributes( "Main-Class" to "org.bukkit.craftbukkit.Main", - "Implementation-Title" to "CraftBukkit", -- "Implementation-Version" to "git-Paper-$implementationVersion", -+ "Implementation-Version" to "git-Purpur-$implementationVersion", // Pufferfish // Purpur +- "Implementation-Title" to "Paper", ++ "Implementation-Title" to "Purpur", // Purpur + "Implementation-Version" to implementationVersion, "Implementation-Vendor" to date, // Paper - "Specification-Title" to "Bukkit", +- "Specification-Title" to "Paper", ++ "Specification-Title" to "Purpur", // Purpur "Specification-Version" to project.version, -@@ -137,7 +141,7 @@ fun TaskContainer.registerRunTask( +- "Specification-Vendor" to "Paper Team", +- "Brand-Id" to "papermc:paper", +- "Brand-Name" to "Paper", ++ "Specification-Vendor" to "Purpur Team", // Purpur ++ "Brand-Id" to "purpurmc:purpur", // Purpur ++ "Brand-Name" to "Purpur", // Purpur + "Build-Number" to (build ?: ""), + "Build-Time" to Instant.now().toString(), + "Git-Branch" to gitBranch, // Paper +@@ -144,7 +148,7 @@ fun TaskContainer.registerRunTask( name: String, block: JavaExec.() -> Unit ): TaskProvider = register(name) { @@ -47,97 +58,78 @@ index 87bb3fd9b97506f61734ae7f2e6860610ba794e7..89f21e21efc5f5ab99d1586f4f3b8f2f standardInput = System.`in` workingDir = rootProject.layout.projectDirectory diff --git a/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java b/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java -index 9d687da5bdf398bb3f6c84cdf1249a7213d09f2e..462a6eed350fd660ddaf25d567bb6e97b77d0b2b 100644 +index 532306cacd52579cdf37e4aca25887b1ed3ba6a1..af5890e6d915cc60cf19fc531022699599450493 100644 --- a/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java +++ b/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java -@@ -19,8 +19,10 @@ import java.util.stream.StreamSupport; - - public class PaperVersionFetcher implements VersionFetcher { - private static final java.util.regex.Pattern VER_PATTERN = java.util.regex.Pattern.compile("^([0-9\\.]*)\\-.*R"); // R is an anchor, will always give '-R' at end -- private static final String GITHUB_BRANCH_NAME = "master"; +@@ -35,7 +35,10 @@ public class PaperVersionFetcher implements VersionFetcher { + private static final Logger LOGGER = LogUtils.getClassLogger(); + private static final int DISTANCE_ERROR = -1; + private static final int DISTANCE_UNKNOWN = -2; - private static final String DOWNLOAD_PAGE = "https://papermc.io/downloads/paper"; + // Purpur start + private static final String DOWNLOAD_PAGE = "https://purpurmc.org/downloads"; -+ private static int distance = -2; public int distance() { return distance; } ++ private static int distance = DISTANCE_UNKNOWN; public int distance() { return distance; } + // Purpur end - private static @Nullable String mcVer; @Override -@@ -31,11 +33,11 @@ public class PaperVersionFetcher implements VersionFetcher { - @Nonnull - @Override - public Component getVersionMessage(@Nonnull String serverVersion) { -- String[] parts = serverVersion.substring("git-Paper-".length()).split("[-\\s]"); -- final Component updateMessage = getUpdateStatusMessage("PaperMC/Paper", GITHUB_BRANCH_NAME, parts[0]); -+ String[] parts = serverVersion.substring("git-Purpur-".length()).split("[-\\s]"); // Purpur -+ final Component updateMessage = getUpdateStatusMessage("PurpurMC/Purpur", "ver/" + getMinecraftVersion(), parts[0]); // Purpur - final Component history = getHistory(); + public long getCacheTime() { +@@ -49,7 +52,7 @@ public class PaperVersionFetcher implements VersionFetcher { + if (build.buildNumber().isEmpty() && build.gitCommit().isEmpty()) { + updateMessage = text("You are running a development version without access to version information", color(0xFF5300)); + } else { +- updateMessage = getUpdateStatusMessage("PaperMC/Paper", build); ++ updateMessage = getUpdateStatusMessage("PurpurMC/Purpur", build); // Purpur + } + final @Nullable Component history = this.getHistory(); -- return history != null ? TextComponent.ofChildren(updateMessage, Component.newline(), history) : updateMessage; -+ return history != null ? Component.join(net.kyori.adventure.text.JoinConfiguration.separator(Component.newline()), history, updateMessage) : updateMessage; // Purpur +@@ -57,7 +60,7 @@ public class PaperVersionFetcher implements VersionFetcher { } - private static @Nullable String getMinecraftVersion() { -@@ -45,7 +47,7 @@ public class PaperVersionFetcher implements VersionFetcher { - String result = matcher.group(); - mcVer = result.substring(0, result.length() - 2); // strip 'R' anchor and trailing '-' - } else { -- org.bukkit.Bukkit.getLogger().warning("Unable to match version to pattern! Report to PaperMC!"); -+ org.bukkit.Bukkit.getLogger().warning("Unable to match version to pattern! Report to Purpur!"); // Purpur - org.bukkit.Bukkit.getLogger().warning("Pattern: " + VER_PATTERN.toString()); - org.bukkit.Bukkit.getLogger().warning("Version: " + org.bukkit.Bukkit.getBukkitVersion()); - } -@@ -55,7 +57,7 @@ public class PaperVersionFetcher implements VersionFetcher { - } + private static Component getUpdateStatusMessage(final String repo, final ServerBuildInfo build) { +- int distance = DISTANCE_ERROR; ++ //int distance = DISTANCE_ERROR; // Purpur - use field - private static Component getUpdateStatusMessage(@Nonnull String repo, @Nonnull String branch, @Nonnull String versionInfo) { -- int distance; -+ //int distance; // Purpur - use field - try { - int jenkinsBuild = Integer.parseInt(versionInfo); - distance = fetchDistanceFromSiteApi(jenkinsBuild, getMinecraftVersion()); -@@ -66,13 +68,13 @@ public class PaperVersionFetcher implements VersionFetcher { + final OptionalInt buildNumber = build.buildNumber(); + if (buildNumber.isPresent()) { +@@ -71,10 +74,10 @@ public class PaperVersionFetcher implements VersionFetcher { + } - switch (distance) { - case -1: -- return Component.text("Error obtaining version information", NamedTextColor.YELLOW); -+ return Component.text("* Error obtaining version information", NamedTextColor.RED); // Purpur - case 0: -- return Component.text("You are running the latest version", NamedTextColor.GREEN); -+ return Component.text("* You are running the latest version", NamedTextColor.GREEN); // Purpur - case -2: -- return Component.text("Unknown version", NamedTextColor.YELLOW); -+ return Component.text("* Unknown version", NamedTextColor.YELLOW); // Purpur - default: -- return Component.text("You are " + distance + " version(s) behind", NamedTextColor.YELLOW) -+ return Component.text("* You are " + distance + " version(s) behind", NamedTextColor.YELLOW) // Purpur - .append(Component.newline()) - .append(Component.text("Download the new version at: ") - .append(Component.text(DOWNLOAD_PAGE, NamedTextColor.GOLD) -@@ -85,15 +87,11 @@ public class PaperVersionFetcher implements VersionFetcher { - if (siteApiVersion == null) { return -1; } + return switch (distance) { +- case DISTANCE_ERROR -> text("Error obtaining version information", NamedTextColor.YELLOW); +- case 0 -> text("You are running the latest version", NamedTextColor.GREEN); +- case DISTANCE_UNKNOWN -> text("Unknown version", NamedTextColor.YELLOW); +- default -> text("You are " + distance + " version(s) behind", NamedTextColor.YELLOW) ++ case DISTANCE_ERROR -> text("* Error obtaining version information", NamedTextColor.RED); // Purpur ++ case 0 -> text("* You are running the latest version", NamedTextColor.GREEN); // Purpur ++ case DISTANCE_UNKNOWN -> text("* Unknown version", NamedTextColor.YELLOW); // Purpur ++ default -> text("* You are " + distance + " version(s) behind", NamedTextColor.YELLOW) // Purpur + .append(Component.newline()) + .append(text("Download the new version at: ") + .append(text(DOWNLOAD_PAGE, NamedTextColor.GOLD) +@@ -86,15 +89,12 @@ public class PaperVersionFetcher implements VersionFetcher { + private static int fetchDistanceFromSiteApi(final ServerBuildInfo build, final int jenkinsBuild) { try { - try (BufferedReader reader = Resources.asCharSource( -- new URL("https://api.papermc.io/v2/projects/paper/versions/" + siteApiVersion), -+ new URL("https://api.purpurmc.org/v2/purpur/" + siteApiVersion), // Purpur + try (final BufferedReader reader = Resources.asCharSource( +- URI.create("https://api.papermc.io/v2/projects/paper/versions/" + build.minecraftVersionId()).toURL(), ++ URI.create("https://api.purpurmc.org/v2/purpur/" + build.minecraftVersionId()).toURL(), // Purpur Charsets.UTF_8 ).openBufferedStream()) { - JsonObject json = new Gson().fromJson(reader, JsonObject.class); -- JsonArray builds = json.getAsJsonArray("builds"); -- int latest = StreamSupport.stream(builds.spliterator(), false) -- .mapToInt(e -> e.getAsInt()) + final JsonObject json = new Gson().fromJson(reader, JsonObject.class); + final JsonArray builds = json.getAsJsonArray("builds"); +- final int latest = StreamSupport.stream(builds.spliterator(), false) +- .mapToInt(JsonElement::getAsInt) - .max() -- .getAsInt(); -+ int latest = json.getAsJsonObject("builds").getAsJsonPrimitive("latest").getAsInt(); // Purpur +- .orElseThrow(); ++ final int latest = json.getAsJsonObject("builds").getAsJsonPrimitive("latest").getAsInt(); // Purpur return latest - jenkinsBuild; - } catch (JsonSyntaxException ex) { - ex.printStackTrace(); -@@ -144,6 +142,6 @@ public class PaperVersionFetcher implements VersionFetcher { + } catch (final JsonSyntaxException ex) { + LOGGER.error("Error parsing json from Paper's downloads API", ex); +@@ -141,6 +141,6 @@ public class PaperVersionFetcher implements VersionFetcher { return null; } -- return Component.text("Previous version: " + oldVersion, NamedTextColor.GRAY, TextDecoration.ITALIC); -+ return org.bukkit.ChatColor.parseMM("Previous: %s", oldVersion); // Purpur +- return text("Previous version: " + oldVersion, NamedTextColor.GRAY, TextDecoration.ITALIC); ++ return text("Previous: " + oldVersion, NamedTextColor.GRAY); // Purpur } } diff --git a/src/main/java/com/destroystokyo/paper/console/PaperConsole.java b/src/main/java/com/destroystokyo/paper/console/PaperConsole.java @@ -153,6 +145,39 @@ index c5d5648f4ca603ef2b1df723b58f9caf4dd3c722..3cb56595822799926a8141e60a42f5d1 .variable(LineReader.HISTORY_FILE, java.nio.file.Paths.get(".console_history")) .completer(new ConsoleCommandCompleter(this.server)) .option(LineReader.Option.COMPLETE_IN_WORD, true); +diff --git a/src/main/java/io/papermc/paper/ServerBuildInfoImpl.java b/src/main/java/io/papermc/paper/ServerBuildInfoImpl.java +index 790bad0494454ca12ee152e3de6da3da634d9b20..a6e5950b5875cafd734300cdfbf58f5d3736f3c8 100644 +--- a/src/main/java/io/papermc/paper/ServerBuildInfoImpl.java ++++ b/src/main/java/io/papermc/paper/ServerBuildInfoImpl.java +@@ -31,6 +31,7 @@ public record ServerBuildInfoImpl( + private static final String ATTRIBUTE_GIT_COMMIT = "Git-Commit"; + + private static final String BRAND_PAPER_NAME = "Paper"; ++ private static final String BRAND_PURPUR_NAME = "Purpur"; // Purpur + + private static final String BUILD_DEV = "DEV"; + +@@ -42,9 +43,9 @@ public record ServerBuildInfoImpl( + this( + getManifestAttribute(manifest, ATTRIBUTE_BRAND_ID) + .map(Key::key) +- .orElse(BRAND_PAPER_ID), ++ .orElse(BRAND_PURPUR_ID), // Purpur + getManifestAttribute(manifest, ATTRIBUTE_BRAND_NAME) +- .orElse(BRAND_PAPER_NAME), ++ .orElse(BRAND_PURPUR_NAME), // Purpur + SharedConstants.getCurrentVersion().getId(), + SharedConstants.getCurrentVersion().getName(), + getManifestAttribute(manifest, ATTRIBUTE_BUILD_NUMBER) +@@ -61,7 +62,7 @@ public record ServerBuildInfoImpl( + + @Override + public boolean isBrandCompatible(final @NotNull Key brandId) { +- return brandId.equals(this.brandId); ++ return brandId.equals(this.brandId) || brandId.equals(BRAND_PAPER_ID); // Purpur + } + + @Override diff --git a/src/main/java/net/minecraft/CrashReport.java b/src/main/java/net/minecraft/CrashReport.java index 4f3cc14d48690bb183d09bb7a5ba1e23e8a0c08a..c366d84518979e842a6f10f969a5951539ecac93 100644 --- a/src/main/java/net/minecraft/CrashReport.java @@ -169,10 +194,10 @@ index 4f3cc14d48690bb183d09bb7a5ba1e23e8a0c08a..c366d84518979e842a6f10f969a59515 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 39303bb4e336732db0ab19dee0c1f8b609bbb134..7483be7ff59e80aa6605dc19f18bb54473e3540e 100644 +index dbc86b8d4d2af6e5f7e678f2bb77fd39b85c04c5..989de328a8dd26486d65245d2737d9789d936e8a 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -962,7 +962,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop // Pufferfish > // Paper - } - - 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 da1aed63af837b193900bb85393611edbd56c363..4f454c5d70e7333429557eb86e38e0f2c22af380 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 - import javax.annotation.Nonnull; // Paper - - public final class CraftServer implements Server { -- private final String serverName = "Paper"; // Paper -+ private final String serverName = "Purpur"; // Paper // Pufferfish // Purpur - private final String serverVersion; - private final String bukkitVersion = Versioning.getBukkitVersion(); - private final Logger logger = Logger.getLogger("Minecraft"); diff --git a/src/main/java/org/bukkit/craftbukkit/command/CraftConsoleCommandSender.java b/src/main/java/org/bukkit/craftbukkit/command/CraftConsoleCommandSender.java index 4e56018b64d11f76c8da43fd8f85c6de72204e36..9607675e6c5bff2183c4420d11fc63eeb5747fb6 100644 --- a/src/main/java/org/bukkit/craftbukkit/command/CraftConsoleCommandSender.java @@ -244,7 +247,7 @@ index e85b9bb3f9c225d289a4959921970b9963881199..c1e2d3a75b9d4710ab6d8b5c62af4bc1 // (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 74c5c0e63a3c41174967c1be1da01e60e458f12f..8c62796dacf79dbe7ac228ac04ea478679466fd4 100644 +index 5a382907285a288f2a223189e690d3dbdf45594c..3daf674f1e0de3fdd89db5536cc1e34140a5abb8 100644 --- a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java +++ b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java @@ -511,7 +511,7 @@ public final class CraftMagicNumbers implements UnsafeValues { diff --git a/patches/server/0002-Purpur-config-files.patch b/patches/server/0002-Purpur-config-files.patch index 623cd4a0d..5f301ba79 100644 --- a/patches/server/0002-Purpur-config-files.patch +++ b/patches/server/0002-Purpur-config-files.patch @@ -112,10 +112,10 @@ index b4ef3ad2c17168085372f1fe46809f02d9dfe74a..04f7f6743aabdca54892b2b155386f86 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 4f454c5d70e7333429557eb86e38e0f2c22af380..21cc03794429e66edc3b9f0a4ed98b66dbba078c 100644 +index 2fa5507aa2153a05208077f9547c165a1099b5bb..97e7f9d08dd41630e8ebf610f23d5b37b820db1b 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -1038,6 +1038,7 @@ public final class CraftServer implements Server { +@@ -1033,6 +1033,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 4f454c5d70e7333429557eb86e38e0f2c22af380..21cc03794429e66edc3b9f0a4ed98b66 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)) -@@ -1053,6 +1054,7 @@ public final class CraftServer implements Server { +@@ -1048,6 +1049,7 @@ public final class CraftServer implements Server { } } world.spigotConfig.init(); // Spigot @@ -131,7 +131,7 @@ index 4f454c5d70e7333429557eb86e38e0f2c22af380..21cc03794429e66edc3b9f0a4ed98b66 } Plugin[] pluginClone = pluginManager.getPlugins().clone(); // Paper -@@ -1069,6 +1071,7 @@ public final class CraftServer implements Server { +@@ -1064,6 +1066,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 4f454c5d70e7333429557eb86e38e0f2c22af380..21cc03794429e66edc3b9f0a4ed98b66 this.overrideAllCommandBlockCommands = this.commandsConfiguration.getStringList("command-block-overrides").contains("*"); this.ignoreVanillaPermissions = this.commandsConfiguration.getBoolean("ignore-vanilla-permissions"); -@@ -3039,6 +3042,18 @@ public final class CraftServer implements Server { +@@ -3034,6 +3037,18 @@ public final class CraftServer implements Server { return CraftServer.this.console.paperConfigurations.createLegacyObject(CraftServer.this.console); } @@ -159,10 +159,10 @@ index 4f454c5d70e7333429557eb86e38e0f2c22af380..21cc03794429e66edc3b9f0a4ed98b66 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 c988afa496d25314451435eedd64079a0d87cef0..45a33086e1bb8a70e0fa01090731d27a0474da41 100644 +index e02102280ed1dc300191d19bbca8f00e17701753..fe181ec5f8e968ff78e694f7a213c7aac718704c 100644 --- a/src/main/java/org/bukkit/craftbukkit/Main.java +++ b/src/main/java/org/bukkit/craftbukkit/Main.java -@@ -175,6 +175,14 @@ public class Main { +@@ -176,6 +176,14 @@ public class Main { .describedAs("Jar file"); // Paper end diff --git a/patches/server/0006-Ridables.patch b/patches/server/0006-Ridables.patch index f7997b862..b6f22c902 100644 --- a/patches/server/0006-Ridables.patch +++ b/patches/server/0006-Ridables.patch @@ -22,10 +22,10 @@ index 665e88b2dedf9d5bb50914d5f3d377f2d19f40b0..f70a80b496bd1498778e82fc221c3b1b 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 7483be7ff59e80aa6605dc19f18bb54473e3540e..e02ae9c2c510ff2564f46e6d6d69465d0c4dabed 100644 +index 989de328a8dd26486d65245d2737d9789d936e8a..71f1f9a9a395b17398941a4bb35e2d143a62a1f5 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1764,6 +1764,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 0; // Paper - Add EntityMoveEvent net.minecraft.world.level.block.entity.HopperBlockEntity.skipHopperEvents = worldserver.paperConfig().hopper.disableMoveEvent || org.bukkit.event.inventory.InventoryMoveItemEvent.getHandlerList().getRegisteredListeners().length == 0; // Paper - Perf: Optimize Hoppers worldserver.updateLagCompensationTick(); // Paper - lag compensation diff --git a/patches/server/0011-Bring-back-server-name.patch b/patches/server/0011-Bring-back-server-name.patch index 21a632583..3319bde81 100644 --- a/patches/server/0011-Bring-back-server-name.patch +++ b/patches/server/0011-Bring-back-server-name.patch @@ -17,10 +17,10 @@ index 9d10cdacb3aed2c00dc60aeb6f2cbeb48905e21f..842f382de43df5d5c321422372ec30cc public final boolean spawnNpcs = this.get("spawn-npcs", true); public final boolean pvp = this.get("pvp", true); diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 21cc03794429e66edc3b9f0a4ed98b66dbba078c..fb430d21889e90597160fc11b0d0bc59b6b85ffc 100644 +index 97e7f9d08dd41630e8ebf610f23d5b37b820db1b..7edceb03bf1db24892dd311c31edb75a223011f0 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -3284,4 +3284,11 @@ public final class CraftServer implements Server { +@@ -3279,4 +3279,11 @@ public final class CraftServer implements Server { return this.potionBrewer; } // Paper end diff --git a/patches/server/0012-Configurable-server-mod-name.patch b/patches/server/0012-Configurable-server-mod-name.patch index 76b13582f..cbe9427aa 100644 --- a/patches/server/0012-Configurable-server-mod-name.patch +++ b/patches/server/0012-Configurable-server-mod-name.patch @@ -5,27 +5,27 @@ Subject: [PATCH] Configurable server mod name diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index e02ae9c2c510ff2564f46e6d6d69465d0c4dabed..27a1948b97f5a20b64849ebda7b485b229ed7bce 100644 +index 71f1f9a9a395b17398941a4bb35e2d143a62a1f5..537726b345038e045172a42464ea166353515868 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1927,7 +1927,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop // Pufferfish > // Paper -+ return org.purpurmc.purpur.PurpurConfig.serverModName; // Purpur - Purpur > // Pufferfish > // Paper +- return io.papermc.paper.ServerBuildInfo.buildInfo().brandName(); // Paper ++ return org.purpurmc.purpur.PurpurConfig.serverModName; // Paper // Purpur } public SystemReport fillSystemReport(SystemReport details) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index d2f3e864aa4d1c5d3ee8bb8f1e36787b1ca45f2e..1701580d6f09cab9088db28254afd70a63dee7fb 100644 +index d2f3e864aa4d1c5d3ee8bb8f1e36787b1ca45f2e..fdf726c455f9a4de822644c703de7ffeab6b3702 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java @@ -188,6 +188,11 @@ public class PurpurConfig { afkTabListSuffix = MiniMessage.miniMessage().serialize(MiniMessage.miniMessage().deserialize(getString("settings.messages.afk-tab-list-suffix", afkTabListSuffix))); } -+ public static String serverModName = "Purpur"; ++ public static String serverModName = io.papermc.paper.ServerBuildInfo.buildInfo().brandName(); + private static void serverModName() { + serverModName = getString("settings.server-mod-name", serverModName); + } diff --git a/patches/server/0013-Lagging-threshold.patch b/patches/server/0013-Lagging-threshold.patch index eebc03180..e8eff07cf 100644 --- a/patches/server/0013-Lagging-threshold.patch +++ b/patches/server/0013-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 27a1948b97f5a20b64849ebda7b485b229ed7bce..d55adf4db46c89d9ce387036856ebb0305cbc412 100644 +index 537726b345038e045172a42464ea166353515868..5aabb74e0fd49a7ab97d324f9fa7bfc26527af00 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -315,6 +315,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 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 3b87a30e247002cc6caaa27aa870626f6bd1354a..f01763d5f00a8f8c72dec699009b035bf3414fdf 100644 +index a3ab5eaf8f9b999bfc6b3674a68450a0efeec7e8..9b707ac3a5516f1590afeee73566d0e57ff3050c 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -1580,6 +1580,19 @@ public final class CraftServer implements Server { +@@ -1575,6 +1575,19 @@ public final class CraftServer implements Server { return true; } diff --git a/patches/server/0212-UPnP-Port-Forwarding.patch b/patches/server/0212-UPnP-Port-Forwarding.patch index dac92bf1e..6ed0861a5 100644 --- a/patches/server/0212-UPnP-Port-Forwarding.patch +++ b/patches/server/0212-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 71c506a43e69f7c0c74947387fa6376e9f7343e7..f7f97c2c5fbd03d8c87efa2d1a4e7c93667d2be1 100644 +index bac978e042a1049cc66048a951b068793b855427..b08c508c0577adcea88a433211108a11edb72473 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -317,6 +317,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop { entityplayer.connection.suspendFlushing(); }); @@ -153,7 +153,7 @@ index 7c016118b410b8c041aa4e0cc0928aa978a4b5d6..1fbbf1ff63a186099f47b9c478dead3e // Paper start - Folia scheduler API ((io.papermc.paper.threadedregions.scheduler.FoliaGlobalRegionScheduler) Bukkit.getGlobalRegionScheduler()).tick(); getAllLevels().forEach(level -> { -@@ -1745,21 +1745,21 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 0 && this.tickCount % autosavePeriod == 0; try { this.isSaving = true; -@@ -1626,7 +1626,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 0; // Purpur @@ -242,7 +242,7 @@ index 1fbbf1ff63a186099f47b9c478dead3e416099ee..642627e37014d5bf634ea7a153ce1abf try { //worldserver.timings.doTick.startTiming(); // Spigot // Purpur -@@ -1822,17 +1822,17 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop { this.executeBlocking(() -> { this.saveDebugReport(path.resolve("server")); -@@ -2843,40 +2844,40 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop Date: Thu, 16 May 2024 19:44:34 -0700 Subject: [PATCH 018/588] fix version command throwing an exception --- patches/server/0001-Rebrand.patch | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/patches/server/0001-Rebrand.patch b/patches/server/0001-Rebrand.patch index 1e7b45bb8..dc66cbdfe 100644 --- a/patches/server/0001-Rebrand.patch +++ b/patches/server/0001-Rebrand.patch @@ -58,7 +58,7 @@ index 4998aff0b7cb084dcda15c6a18bbe45e99b6000a..d23ecfabf6bf1e355fb2efe5abd80236 standardInput = System.`in` workingDir = rootProject.layout.projectDirectory diff --git a/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java b/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java -index 532306cacd52579cdf37e4aca25887b1ed3ba6a1..af5890e6d915cc60cf19fc531022699599450493 100644 +index 532306cacd52579cdf37e4aca25887b1ed3ba6a1..eddc4426301d429968f44d493bae4e71b5969325 100644 --- a/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java +++ b/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java @@ -35,7 +35,10 @@ public class PaperVersionFetcher implements VersionFetcher { @@ -115,11 +115,12 @@ index 532306cacd52579cdf37e4aca25887b1ed3ba6a1..af5890e6d915cc60cf19fc5310226995 Charsets.UTF_8 ).openBufferedStream()) { final JsonObject json = new Gson().fromJson(reader, JsonObject.class); - final JsonArray builds = json.getAsJsonArray("builds"); +- final JsonArray builds = json.getAsJsonArray("builds"); - final int latest = StreamSupport.stream(builds.spliterator(), false) - .mapToInt(JsonElement::getAsInt) - .max() - .orElseThrow(); ++ //final JsonArray builds = json.getAsJsonArray("builds"); // Purpur + final int latest = json.getAsJsonObject("builds").getAsJsonPrimitive("latest").getAsInt(); // Purpur return latest - jenkinsBuild; } catch (final JsonSyntaxException ex) { From 9dcfdf13c206866ec56b4044f4a7905886a669ea Mon Sep 17 00:00:00 2001 From: granny Date: Thu, 16 May 2024 20:04:35 -0700 Subject: [PATCH 019/588] [ci skip] missed this from the upstream --- patches/server/0001-Rebrand.patch | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/patches/server/0001-Rebrand.patch b/patches/server/0001-Rebrand.patch index dc66cbdfe..4725b813b 100644 --- a/patches/server/0001-Rebrand.patch +++ b/patches/server/0001-Rebrand.patch @@ -58,7 +58,7 @@ index 4998aff0b7cb084dcda15c6a18bbe45e99b6000a..d23ecfabf6bf1e355fb2efe5abd80236 standardInput = System.`in` workingDir = rootProject.layout.projectDirectory diff --git a/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java b/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java -index 532306cacd52579cdf37e4aca25887b1ed3ba6a1..eddc4426301d429968f44d493bae4e71b5969325 100644 +index 532306cacd52579cdf37e4aca25887b1ed3ba6a1..6d36fc6d8e22d9b68dea3830f6ecc8763184c343 100644 --- a/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java +++ b/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java @@ -35,7 +35,10 @@ public class PaperVersionFetcher implements VersionFetcher { @@ -106,7 +106,7 @@ index 532306cacd52579cdf37e4aca25887b1ed3ba6a1..eddc4426301d429968f44d493bae4e71 .append(Component.newline()) .append(text("Download the new version at: ") .append(text(DOWNLOAD_PAGE, NamedTextColor.GOLD) -@@ -86,15 +89,12 @@ public class PaperVersionFetcher implements VersionFetcher { +@@ -86,18 +89,15 @@ public class PaperVersionFetcher implements VersionFetcher { private static int fetchDistanceFromSiteApi(final ServerBuildInfo build, final int jenkinsBuild) { try { try (final BufferedReader reader = Resources.asCharSource( @@ -124,7 +124,11 @@ index 532306cacd52579cdf37e4aca25887b1ed3ba6a1..eddc4426301d429968f44d493bae4e71 + final int latest = json.getAsJsonObject("builds").getAsJsonPrimitive("latest").getAsInt(); // Purpur return latest - jenkinsBuild; } catch (final JsonSyntaxException ex) { - LOGGER.error("Error parsing json from Paper's downloads API", ex); +- LOGGER.error("Error parsing json from Paper's downloads API", ex); ++ LOGGER.error("Error parsing json from Purpur's downloads API", ex); // Purpur + return DISTANCE_ERROR; + } + } catch (final IOException e) { @@ -141,6 +141,6 @@ public class PaperVersionFetcher implements VersionFetcher { return null; } From 88aa731cf319e853f3db3a73afc5d773b5622170 Mon Sep 17 00:00:00 2001 From: granny Date: Sun, 19 May 2024 15:11:01 -0700 Subject: [PATCH 020/588] Updated Upstream (Paper) Upstream has released updates that appear to apply and compile correctly Paper Changes: PaperMC/Paper@d8d59e0 Fix NPE sending resource pack without prompt PaperMC/Paper@5a9afbe Fixes issues in the suppress dismount cancellation patch (#10735) PaperMC/Paper@0ad09de Make PaperSimplePluginClassLoader show class which is not found --- gradle.properties | 2 +- .../0005-Component-related-conveniences.patch | 6 +++--- patches/server/0006-Ridables.patch | 18 +++++++++--------- ...-option-to-set-armorstand-step-height.patch | 6 +++--- ...eleport-to-spawn-if-outside-world-bor.patch | 6 +++--- ...-Stop-squids-floating-on-top-of-water.patch | 4 ++-- ...ntities-can-use-portals-configuration.patch | 6 +++--- patches/server/0114-Implement-TPSBar.patch | 4 ++-- patches/server/0123-Fix-stuck-in-portals.patch | 8 ++++---- patches/server/0143-Drowning-Settings.patch | 8 ++++---- ...176-Shulker-spawn-from-bullet-options.patch | 8 ++++---- patches/server/0190-Add-compass-command.patch | 10 +++++----- .../server/0255-Remove-Mojang-Profiler.patch | 16 ++++++++-------- ...262-Implement-ram-and-rambar-commands.patch | 8 ++++---- 14 files changed, 55 insertions(+), 55 deletions(-) diff --git a/gradle.properties b/gradle.properties index d2a188ca9..473655d7b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ group = org.purpurmc.purpur version = 1.20.6-R0.1-SNAPSHOT mcVersion = 1.20.6 -paperCommit = f17519338bc589c045e0b32bfc37e048b23544d5 +paperCommit = 0ad09de75bfb1db2a84bb760cdee09b06d609bb3 org.gradle.caching = true org.gradle.parallel = true diff --git a/patches/server/0005-Component-related-conveniences.patch b/patches/server/0005-Component-related-conveniences.patch index 2c2ae7aac..6046b3496 100644 --- a/patches/server/0005-Component-related-conveniences.patch +++ b/patches/server/0005-Component-related-conveniences.patch @@ -5,7 +5,7 @@ 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 40b9a89531d1df347191edd274485cf977051e04..f587958d2b907f7fcd819dbb6db7e42232754567 100644 +index 88ce79c7c479a7b905a4d6e5c2b4c0bc25e66854..0f8c2ff5e2d0d396e85e26e0a03a761e9bb25654 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java @@ -1978,6 +1978,26 @@ public class ServerPlayer extends Player { @@ -81,10 +81,10 @@ index dd9638bdb228a53e72820e0e7cf6fe6fcc08fe4b..bc5071efe710614309308dad5b6d9c56 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 2bc85351e6e52f90da5fdb29d8d042a06132d742..6c7f80723d67baf0ca036e0a12c3007144352edf 100644 +index 25ea45a528612d1a2a2d77293b3802f473a52f38..95c88ac0142551fbcfd2356be2fc70f7a78278ab 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -4190,6 +4190,20 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -4196,6 +4196,20 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess return SlotAccess.NULL; } diff --git a/patches/server/0006-Ridables.patch b/patches/server/0006-Ridables.patch index b6f22c902..11e0c7030 100644 --- a/patches/server/0006-Ridables.patch +++ b/patches/server/0006-Ridables.patch @@ -46,7 +46,7 @@ index ca56a0b596976448da6bb2a0e82b3d5cd4133e12..6247659f33c3d21d33ec1f5105234036 public LevelChunk getChunkIfLoaded(int x, int z) { return this.chunkSource.getChunkAtIfLoadedImmediately(x, z); // Paper - Use getChunkIfLoadedImmediately diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index f587958d2b907f7fcd819dbb6db7e42232754567..4391ae896d8dbe98c6577f85759b187a396a7c21 100644 +index 0f8c2ff5e2d0d396e85e26e0a03a761e9bb25654..c1d6a2c82e240a7c50b4cb973c285b816f7ec419 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java @@ -814,6 +814,15 @@ public class ServerPlayer extends Player { @@ -79,7 +79,7 @@ index b9b3277c8ed94e0cd30b20b9c00a33eaad48e5ac..647026afdb161e21ff55dc9a3d470eef if ((entity instanceof Bucketable && entity instanceof LivingEntity && origItem != null && origItem.asItem() == Items.WATER_BUCKET) && (event.isCancelled() || ServerGamePacketListenerImpl.this.player.getInventory().getSelected() == null || ServerGamePacketListenerImpl.this.player.getInventory().getSelected().getItem() != origItem)) { entity.resendPossiblyDesyncedEntityData(ServerGamePacketListenerImpl.this.player); // Paper - The entire mob gets deleted, so resend it. diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 6c7f80723d67baf0ca036e0a12c3007144352edf..9c99a3df80c5f0a0d81e1f6a6516d088438a0b1e 100644 +index 95c88ac0142551fbcfd2356be2fc70f7a78278ab..973e4c24a53fecad99fa5740c9c3cedd1320821b 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java @@ -381,7 +381,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess @@ -91,7 +91,7 @@ index 6c7f80723d67baf0ca036e0a12c3007144352edf..9c99a3df80c5f0a0d81e1f6a6516d088 private float eyeHeight; public boolean isInPowderSnow; public boolean wasInPowderSnow; -@@ -3080,6 +3080,13 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3086,6 +3086,13 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess this.passengers = ImmutableList.copyOf(list); } @@ -105,7 +105,7 @@ index 6c7f80723d67baf0ca036e0a12c3007144352edf..9c99a3df80c5f0a0d81e1f6a6516d088 this.gameEvent(GameEvent.ENTITY_MOUNT, passenger); } } -@@ -3119,6 +3126,14 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3125,6 +3132,14 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess return false; } // CraftBukkit end @@ -120,7 +120,7 @@ index 6c7f80723d67baf0ca036e0a12c3007144352edf..9c99a3df80c5f0a0d81e1f6a6516d088 if (this.passengers.size() == 1 && this.passengers.get(0) == entity) { this.passengers = ImmutableList.of(); } else { -@@ -5009,4 +5024,44 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -5015,4 +5030,44 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess return ((net.minecraft.server.level.ServerChunkCache) level.getChunkSource()).isPositionTicking(this); } // Paper end - Expose entity id counter @@ -190,7 +190,7 @@ index 09fdea983772612ef3fff6b2da3cf469a34e4ec0..aa76a24421cdb3908a3544d92eb3d1e3 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 517e10c3d8b1549cd30fd0e7cf2bcb35e88eb8ed..961c4addedd288758ac91b5144571d054f6069ac 100644 +index ef0f118aecf0893e45cb9423a677d7e42496324b..593db87486031d6e21b574a755b16bf6f5c5bf95 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java @@ -229,9 +229,9 @@ public abstract class LivingEntity extends Entity implements Attackable { @@ -4034,7 +4034,7 @@ index 2d7b7c949faaaaae94c0043132a4a822f55df104..1248a48c0146258d14efcaa805a82ce1 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 5215fa54666979ef4da074ddfdb082e7274f2957..78433d0b7624019018012c55e8dd6fec029f8cd1 100644 +index e03119f88719c8d6d44793a6b3706ae97b2da307..803a5c71f7712ac004990419131757d17ad685bf 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 getVariant() { @@ -68,7 +68,7 @@ index 2202798612cad53aff28c499b8909a7292a37ad5..5ed2b7d15686fc9aa6dc7c03c337433c + // Purpur end } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 1c2aec3ddbe6d9dd0ae9ce4d074092ed0555d711..444ae36042e5d5bf2bd3ba7348882304825b5f06 100644 +index 8e92de376b23fc2efcc4e5e65cd988d176399f9f..fbac1586ee666fa9ca22fb0bf2797b0913bf3788 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -1908,6 +1908,11 @@ public class PurpurWorldConfig { diff --git a/patches/server/0190-Add-compass-command.patch b/patches/server/0190-Add-compass-command.patch index a7c9fd136..9c9b87963 100644 --- a/patches/server/0190-Add-compass-command.patch +++ b/patches/server/0190-Add-compass-command.patch @@ -5,7 +5,7 @@ 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 26c9254cef922a78deac3053f93c60037f19d31f..67ec90a2a05269a5912b3c8e64d6d4162a8c6ca2 100644 +index f11d6bb515217088ef1192653998a77ddce67edf..9a91a29614823e10f59aeaa156d85f7229bfb497 100644 --- a/src/main/java/net/minecraft/commands/Commands.java +++ b/src/main/java/net/minecraft/commands/Commands.java @@ -257,6 +257,7 @@ public class Commands { @@ -17,7 +17,7 @@ index 26c9254cef922a78deac3053f93c60037f19d31f..67ec90a2a05269a5912b3c8e64d6d416 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 7bb82c9b652a509c2bf1a43ed82a5da709fb2cb2..e9d9cb47221075447aac66dd30ce6e8f08962cf5 100644 +index 58b066793a6248b4627f6b81921412971828e313..cce4ebb350ba09323c59903991e4f6f289d2cb53 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java @@ -300,6 +300,7 @@ public class ServerPlayer extends Player { @@ -44,7 +44,7 @@ index 7bb82c9b652a509c2bf1a43ed82a5da709fb2cb2..e9d9cb47221075447aac66dd30ce6e8f } // CraftBukkit start - World fallback code, either respawn location or global spawn -@@ -3011,5 +3014,13 @@ public class ServerPlayer extends Player { +@@ -3017,5 +3020,13 @@ public class ServerPlayer extends Player { public void tpsBar(boolean tpsBar) { this.tpsBar = tpsBar; } @@ -59,7 +59,7 @@ index 7bb82c9b652a509c2bf1a43ed82a5da709fb2cb2..e9d9cb47221075447aac66dd30ce6e8f // Purpur end } diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index e4188163e7a9dda878e72ae84a1b5cb28c23510d..b56afa30c04350b5e9ca4ea2d33f9e7c58559380 100644 +index 297e02900adb7251cc0449db47490d26dec3f62f..899abbef0b6f458b560e9dd329cb95dfb8af3146 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java @@ -255,6 +255,11 @@ public class PurpurConfig { @@ -89,7 +89,7 @@ index e4188163e7a9dda878e72ae84a1b5cb28c23510d..b56afa30c04350b5e9ca4ea2d33f9e7c 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 ae67aa6cf66e64d5e7506c0ca7193a9ba8a986ce..963540e5c3eb6dfbb78b089bba013ef348c8487f 100644 +index 0f5bb7e220fc4381445e9aaef19882dd4b27987b..b66224c74eeb7b60ded96edb08d323002c355db6 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/0255-Remove-Mojang-Profiler.patch b/patches/server/0255-Remove-Mojang-Profiler.patch index d0342726c..3cab52d30 100644 --- a/patches/server/0255-Remove-Mojang-Profiler.patch +++ b/patches/server/0255-Remove-Mojang-Profiler.patch @@ -826,7 +826,7 @@ index b727c707ef46a9387fc225b51ef050c6baff1c74..7924e3c597164f71056cd58dd167ee8b 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 326520c7bb551ca0712454324921a5c59ba6abb1..3670c65cf3c65c57d0e40862d1905c1dc3d158b6 100644 +index d3d6febb1942b59e6e0e90259acdef22d344a853..12d55da2cd14a497effe16f5d33b5bcba6cb22c1 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java @@ -1317,7 +1317,7 @@ public class ServerPlayer extends Player { @@ -1085,7 +1085,7 @@ index a715ecf4a8ac91d3e5e5c6269d89e54b2c1cd279..223c3665126c576eddb1a8f7c9f5bc60 }; } diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 68e8f9913055219486ce19d95dcf9d7c76e08082..2c3ad553272ad651e6ca26917719e6d9fffdef68 100644 +index 81c10d07d28e5158e0f248e02939f562fa20d65c..597c8934264d4d541494e7ce2375a0b403dcc68c 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java @@ -897,7 +897,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess @@ -1153,7 +1153,7 @@ index 68e8f9913055219486ce19d95dcf9d7c76e08082..2c3ad553272ad651e6ca26917719e6d9 } } // Paper start - detailed watchdog information -@@ -3258,7 +3258,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3264,7 +3264,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess ServerLevel worldserver1 = minecraftserver.getLevel(resourcekey); if (true && !this.isPassenger() && this.portalTime++ >= i) { // CraftBukkit @@ -1162,7 +1162,7 @@ index 68e8f9913055219486ce19d95dcf9d7c76e08082..2c3ad553272ad651e6ca26917719e6d9 this.portalTime = i; // Paper start - Add EntityPortalReadyEvent 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); -@@ -3276,7 +3276,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3282,7 +3282,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } } // Paper - Add EntityPortalReadyEvent // CraftBukkit end @@ -1171,7 +1171,7 @@ index 68e8f9913055219486ce19d95dcf9d7c76e08082..2c3ad553272ad651e6ca26917719e6d9 } this.isInsidePortal = false; -@@ -3736,14 +3736,14 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3742,14 +3742,14 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } // Paper end - Fix item duplication and teleport issues if (this.level() instanceof ServerLevel && !this.isRemoved()) { @@ -1188,7 +1188,7 @@ index 68e8f9913055219486ce19d95dcf9d7c76e08082..2c3ad553272ad651e6ca26917719e6d9 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) { -@@ -3782,7 +3782,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3788,7 +3788,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess this.unRide(); // CraftBukkit end @@ -1197,7 +1197,7 @@ index 68e8f9913055219486ce19d95dcf9d7c76e08082..2c3ad553272ad651e6ca26917719e6d9 // Paper start - Fix item duplication and teleport issues if (this instanceof Mob) { ((Mob) this).dropLeash(true, true); // Paper drop lead -@@ -3809,10 +3809,10 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3815,10 +3815,10 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } this.removeAfterChangingDimensions(); @@ -1211,7 +1211,7 @@ index 68e8f9913055219486ce19d95dcf9d7c76e08082..2c3ad553272ad651e6ca26917719e6d9 } } else { diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 3603e26b253c8489d11784f260b38bc7bc8e69e7..cba8fd846bfe8279252e232277d81a59349d3511 100644 +index 93670b0ca36eed241075168e5724fcffb14e83e3..7c020efc033ecdd0582ba972063d6de486699498 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java @@ -423,7 +423,7 @@ public abstract class LivingEntity extends Entity implements Attackable { diff --git a/patches/server/0262-Implement-ram-and-rambar-commands.patch b/patches/server/0262-Implement-ram-and-rambar-commands.patch index ec2e7056f..63976f70a 100644 --- a/patches/server/0262-Implement-ram-and-rambar-commands.patch +++ b/patches/server/0262-Implement-ram-and-rambar-commands.patch @@ -5,7 +5,7 @@ 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 d3c42c19a051fb3a670e541fc746b55717192a91..13dfb3e506d50c0b191baf5d05bbfc28c20be0ae 100644 +index 5c048dc779b29c4903dc63daa8a1f9bf54270ba1..96872be696c68b49586e95cca3df6f6f1759a0e4 100644 --- a/src/main/java/net/minecraft/commands/Commands.java +++ b/src/main/java/net/minecraft/commands/Commands.java @@ -258,6 +258,8 @@ public class Commands { @@ -18,7 +18,7 @@ index d3c42c19a051fb3a670e541fc746b55717192a91..13dfb3e506d50c0b191baf5d05bbfc28 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 ad9d42e886bc1e2529ca13990626169ab2354898..d7e4a9fe9676563845d9981523bff1a7ff12282c 100644 +index 12d55da2cd14a497effe16f5d33b5bcba6cb22c1..a7ba658a4dc6eeb9d5bc854289c21b3bd21646b1 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java @@ -301,6 +301,7 @@ public class ServerPlayer extends Player { @@ -45,7 +45,7 @@ index ad9d42e886bc1e2529ca13990626169ab2354898..d7e4a9fe9676563845d9981523bff1a7 nbt.putBoolean("Purpur.TPSBar", this.tpsBar); // Purpur nbt.putBoolean("Purpur.CompassBar", this.compassBar); // Purpur } -@@ -3023,5 +3026,13 @@ public class ServerPlayer extends Player { +@@ -3029,5 +3032,13 @@ public class ServerPlayer extends Player { public void compassBar(boolean compassBar) { this.compassBar = compassBar; } @@ -60,7 +60,7 @@ index ad9d42e886bc1e2529ca13990626169ab2354898..d7e4a9fe9676563845d9981523bff1a7 // Purpur end } diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index 620f1207fc773f8602b748128557f1c73f0319fb..62612451c23bb146e82f4082ca8677e5dc57a08f 100644 +index 9b6b21a8a74617c40c9eedfc86e59cb7fa3461f3..90bcf87bec6ea88b670a84ed2c2f078e9563a473 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java @@ -182,6 +182,8 @@ public class PurpurConfig { From 3d2569397afa45a8988762081cdff594e96a2c6c Mon Sep 17 00:00:00 2001 From: granny Date: Mon, 20 May 2024 15:34:16 -0700 Subject: [PATCH 021/588] Updated Upstream (Paper) Upstream has released updates that appear to apply and compile correctly Paper Changes: PaperMC/Paper@b3b3406 fix CompassMeta not being correct (#10737) PaperMC/Paper@591521e Check for more correct profile validation (#10730) PaperMC/Paper@7d2e5c3 Add an 'empty' RecipeChoice for certain ingredient slots (#10710) PaperMC/Paper@9bf4855 Add a better warning message than "Server performance will be affected" for CommandRegisteredEvent use (#10754) --- gradle.properties | 2 +- patches/api/0010-Bring-back-server-name.patch | 8 ++++---- patches/api/0012-Lagging-threshold.patch | 8 ++++---- ...Add-predicate-to-recipe-s-ExactChoice-ingredient.patch | 8 ++++---- .../0031-Added-the-ability-to-add-combustible-items.patch | 8 ++++---- patches/api/0038-Debug-Marker-API.patch | 8 ++++---- patches/server/0011-Bring-back-server-name.patch | 4 ++-- patches/server/0013-Lagging-threshold.patch | 4 ++-- ...Add-predicate-to-recipe-s-ExactChoice-ingredient.patch | 8 ++++---- 9 files changed, 29 insertions(+), 29 deletions(-) diff --git a/gradle.properties b/gradle.properties index 473655d7b..6cc5f0b64 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ group = org.purpurmc.purpur version = 1.20.6-R0.1-SNAPSHOT mcVersion = 1.20.6 -paperCommit = 0ad09de75bfb1db2a84bb760cdee09b06d609bb3 +paperCommit = 9bf48555241dc03246c67258fe66eaf6c7a4a044 org.gradle.caching = true org.gradle.parallel = true diff --git a/patches/api/0010-Bring-back-server-name.patch b/patches/api/0010-Bring-back-server-name.patch index b598cb8fc..939ac10be 100644 --- a/patches/api/0010-Bring-back-server-name.patch +++ b/patches/api/0010-Bring-back-server-name.patch @@ -5,10 +5,10 @@ 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 71f1c361ebccbe83193c37ec3a90faa4085001c3..20f10b2cfb6f2b1ce7da61a15f7dc4a68b7c5cde 100644 +index 9a219b255b63f10005fc68faacb771dd32f61ac2..203581e1b00241c519f20dac4936d06f95122ea4 100644 --- a/src/main/java/org/bukkit/Bukkit.java +++ b/src/main/java/org/bukkit/Bukkit.java -@@ -2907,4 +2907,15 @@ public final class Bukkit { +@@ -2913,4 +2913,15 @@ public final class Bukkit { public static Server.Spigot spigot() { return server.spigot(); } @@ -25,10 +25,10 @@ index 71f1c361ebccbe83193c37ec3a90faa4085001c3..20f10b2cfb6f2b1ce7da61a15f7dc4a6 + // Purpur end } diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java -index 607ba7cb902d7053cb570d8f3676ecbadbe56daf..9ca26866e902aa6b70f9878bb16cdc558f9138f7 100644 +index bb96d4266f83029eda3e847860302cd9d14e852e..ae752aebf35d0f1a861086c56d30e6c86c43b599 100644 --- a/src/main/java/org/bukkit/Server.java +++ b/src/main/java/org/bukkit/Server.java -@@ -2554,4 +2554,13 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi +@@ -2558,4 +2558,13 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi */ boolean isOwnedByCurrentRegion(@NotNull Entity entity); // Paper end - Folia region threading API diff --git a/patches/api/0012-Lagging-threshold.patch b/patches/api/0012-Lagging-threshold.patch index 38afefd44..ab3349f93 100644 --- a/patches/api/0012-Lagging-threshold.patch +++ b/patches/api/0012-Lagging-threshold.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Lagging threshold diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java -index 20f10b2cfb6f2b1ce7da61a15f7dc4a68b7c5cde..07a79b10ef8b7fa6fd22fbb2652d35ffc9170bfb 100644 +index 203581e1b00241c519f20dac4936d06f95122ea4..49bf78441db33ad0fbc1ca5dfb42859727ea23f8 100644 --- a/src/main/java/org/bukkit/Bukkit.java +++ b/src/main/java/org/bukkit/Bukkit.java -@@ -2917,5 +2917,14 @@ public final class Bukkit { +@@ -2923,5 +2923,14 @@ public final class Bukkit { public static String getServerName() { return server.getServerName(); } @@ -24,10 +24,10 @@ index 20f10b2cfb6f2b1ce7da61a15f7dc4a68b7c5cde..07a79b10ef8b7fa6fd22fbb2652d35ff // Purpur end } diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java -index 9ca26866e902aa6b70f9878bb16cdc558f9138f7..f6d1d39a3988aee95176badf47c127c82d3aa207 100644 +index ae752aebf35d0f1a861086c56d30e6c86c43b599..86fceb2ad3ba00400f65493d669fd4f4423d45ac 100644 --- a/src/main/java/org/bukkit/Server.java +++ b/src/main/java/org/bukkit/Server.java -@@ -2562,5 +2562,12 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi +@@ -2566,5 +2566,12 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi */ @NotNull String getServerName(); diff --git a/patches/api/0019-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch b/patches/api/0019-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch index 0465887ee..6a4e4528f 100644 --- a/patches/api/0019-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch +++ b/patches/api/0019-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Add predicate to recipe's ExactChoice ingredient diff --git a/src/main/java/org/bukkit/inventory/RecipeChoice.java b/src/main/java/org/bukkit/inventory/RecipeChoice.java -index c143b0d8b97d514566bac8413d0346cf50822aeb..032a21766ce91471cb7d91b663d70e0d9fa66a26 100644 +index 1cd6601c9d2e86ef850011fcb9e59811207b4af7..5ec7d9dab1935bb743e3264d9f7390795fd9f55c 100644 --- a/src/main/java/org/bukkit/inventory/RecipeChoice.java +++ b/src/main/java/org/bukkit/inventory/RecipeChoice.java @@ -10,6 +10,7 @@ import java.util.function.Predicate; @@ -16,7 +16,7 @@ index c143b0d8b97d514566bac8413d0346cf50822aeb..032a21766ce91471cb7d91b663d70e0d /** * Represents a potential item match within a recipe. All choices within a -@@ -157,6 +158,7 @@ public interface RecipeChoice extends Predicate, Cloneable { +@@ -180,6 +181,7 @@ public interface RecipeChoice extends Predicate, Cloneable { public static class ExactChoice implements RecipeChoice { private List choices; @@ -24,7 +24,7 @@ index c143b0d8b97d514566bac8413d0346cf50822aeb..032a21766ce91471cb7d91b663d70e0d public ExactChoice(@NotNull ItemStack stack) { this(Arrays.asList(stack)); -@@ -206,6 +208,7 @@ public interface RecipeChoice extends Predicate, Cloneable { +@@ -229,6 +231,7 @@ public interface RecipeChoice extends Predicate, Cloneable { @Override public boolean test(@NotNull ItemStack t) { @@ -32,7 +32,7 @@ index c143b0d8b97d514566bac8413d0346cf50822aeb..032a21766ce91471cb7d91b663d70e0d for (ItemStack match : choices) { if (t.isSimilar(match)) { return true; -@@ -215,6 +218,17 @@ public interface RecipeChoice extends Predicate, Cloneable { +@@ -238,6 +241,17 @@ public interface RecipeChoice extends Predicate, Cloneable { return false; } diff --git a/patches/api/0031-Added-the-ability-to-add-combustible-items.patch b/patches/api/0031-Added-the-ability-to-add-combustible-items.patch index eb734766b..617e78ecc 100644 --- a/patches/api/0031-Added-the-ability-to-add-combustible-items.patch +++ b/patches/api/0031-Added-the-ability-to-add-combustible-items.patch @@ -5,10 +5,10 @@ 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 07a79b10ef8b7fa6fd22fbb2652d35ffc9170bfb..b99e7e0076448a8b81e3d2d75a451c76f01fc12d 100644 +index 49bf78441db33ad0fbc1ca5dfb42859727ea23f8..0b298161d8b94d655113328ebc0cd19a65619c72 100644 --- a/src/main/java/org/bukkit/Bukkit.java +++ b/src/main/java/org/bukkit/Bukkit.java -@@ -2926,5 +2926,24 @@ public final class Bukkit { +@@ -2932,5 +2932,24 @@ public final class Bukkit { public static boolean isLagging() { return server.isLagging(); } @@ -34,10 +34,10 @@ index 07a79b10ef8b7fa6fd22fbb2652d35ffc9170bfb..b99e7e0076448a8b81e3d2d75a451c76 // Purpur end } diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java -index f6d1d39a3988aee95176badf47c127c82d3aa207..d39f53e9bb31195976993bb6390df6ff54085711 100644 +index 86fceb2ad3ba00400f65493d669fd4f4423d45ac..cecf7b49e3858359ae7eaa4318180d7f11728a7a 100644 --- a/src/main/java/org/bukkit/Server.java +++ b/src/main/java/org/bukkit/Server.java -@@ -2569,5 +2569,20 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi +@@ -2573,5 +2573,20 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi * @return True if lagging */ boolean isLagging(); diff --git a/patches/api/0038-Debug-Marker-API.patch b/patches/api/0038-Debug-Marker-API.patch index e69f06c97..7621add2d 100644 --- a/patches/api/0038-Debug-Marker-API.patch +++ b/patches/api/0038-Debug-Marker-API.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Debug Marker API diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java -index b99e7e0076448a8b81e3d2d75a451c76f01fc12d..75fe3bdbd44440c7cbea45dbd248e260f322dbb2 100644 +index 0b298161d8b94d655113328ebc0cd19a65619c72..83b979fbb8c0dd64f0a19feef654af2b165bd603 100644 --- a/src/main/java/org/bukkit/Bukkit.java +++ b/src/main/java/org/bukkit/Bukkit.java -@@ -2945,5 +2945,89 @@ public final class Bukkit { +@@ -2951,5 +2951,89 @@ public final class Bukkit { public static void removeFuel(@NotNull Material material) { server.removeFuel(material); } @@ -99,10 +99,10 @@ index b99e7e0076448a8b81e3d2d75a451c76f01fc12d..75fe3bdbd44440c7cbea45dbd248e260 // Purpur end } diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java -index d39f53e9bb31195976993bb6390df6ff54085711..ec8b9b2cbe65838a194281f7d76d0e17defc5211 100644 +index cecf7b49e3858359ae7eaa4318180d7f11728a7a..916db0d6096338c4f1b8707048eb38b50a2b027d 100644 --- a/src/main/java/org/bukkit/Server.java +++ b/src/main/java/org/bukkit/Server.java -@@ -2584,5 +2584,75 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi +@@ -2588,5 +2588,75 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi * @param material The material that will no longer be a fuel */ public void removeFuel(@NotNull Material material); diff --git a/patches/server/0011-Bring-back-server-name.patch b/patches/server/0011-Bring-back-server-name.patch index 3319bde81..f78802dbb 100644 --- a/patches/server/0011-Bring-back-server-name.patch +++ b/patches/server/0011-Bring-back-server-name.patch @@ -17,10 +17,10 @@ index 9d10cdacb3aed2c00dc60aeb6f2cbeb48905e21f..842f382de43df5d5c321422372ec30cc public final boolean spawnNpcs = this.get("spawn-npcs", true); public final boolean pvp = this.get("pvp", true); diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 97e7f9d08dd41630e8ebf610f23d5b37b820db1b..7edceb03bf1db24892dd311c31edb75a223011f0 100644 +index 76c2c7d104cef8527641883e094a5c09a4f56092..5609a6588c0f4271f1b1416604ba88e24deb7e3d 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -3279,4 +3279,11 @@ public final class CraftServer implements Server { +@@ -3276,4 +3276,11 @@ public final class CraftServer implements Server { return this.potionBrewer; } // Paper end diff --git a/patches/server/0013-Lagging-threshold.patch b/patches/server/0013-Lagging-threshold.patch index e8eff07cf..c1b79a5a3 100644 --- a/patches/server/0013-Lagging-threshold.patch +++ b/patches/server/0013-Lagging-threshold.patch @@ -25,10 +25,10 @@ index 537726b345038e045172a42464ea166353515868..5aabb74e0fd49a7ab97d324f9fa7bfc2 } // Paper end - further improve server tick loop diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 7edceb03bf1db24892dd311c31edb75a223011f0..8e8f6e8f867b9dd63b91a91342629ba40e8e7374 100644 +index 5609a6588c0f4271f1b1416604ba88e24deb7e3d..1318db17fc43183b19afccc911657b24ff5f2e9a 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -3285,5 +3285,10 @@ public final class CraftServer implements Server { +@@ -3282,5 +3282,10 @@ public final class CraftServer implements Server { public String getServerName() { return this.getProperties().serverName; } diff --git a/patches/server/0090-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch b/patches/server/0090-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch index 4358026f2..bf8146bf9 100644 --- a/patches/server/0090-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch +++ b/patches/server/0090-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch @@ -30,7 +30,7 @@ index e314f36951e9ac15c57137e24fce8c410373130a..21dfb8e91c5427ac12133de2c05d923d int i = aitemstack.length; diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftRecipe.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftRecipe.java -index 6ba29875d78ede4aa7978ff689e588f7fed11528..4afec4387971612f62b825e9e56c2ead7424a7c2 100644 +index c76c78bb7757d407102271463e14716a1b012deb..458b91582a22fb1e6deb1551c38d2a10e33e24f1 100644 --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftRecipe.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftRecipe.java @@ -29,6 +29,7 @@ public interface CraftRecipe extends Recipe { @@ -38,6 +38,6 @@ index 6ba29875d78ede4aa7978ff689e588f7fed11528..4afec4387971612f62b825e9e56c2ead stack = new Ingredient(((RecipeChoice.ExactChoice) bukkit).getChoices().stream().map((mat) -> new net.minecraft.world.item.crafting.Ingredient.ItemValue(CraftItemStack.asNMSCopy(mat)))); stack.exact = true; + stack.predicate = ((RecipeChoice.ExactChoice) bukkit).getPredicate(); // Purpur - } else { - throw new IllegalArgumentException("Unknown recipe stack instance " + bukkit); - } + // Paper start - support "empty" choices + } else if (bukkit == RecipeChoice.empty()) { + stack = Ingredient.EMPTY; From 248ba175af2e1e472aff4eb6bcaa7ea0f7741dd5 Mon Sep 17 00:00:00 2001 From: granny Date: Wed, 22 May 2024 02:59:07 -0700 Subject: [PATCH 022/588] Updated Upstream (Paper) Upstream has released updates that appear to apply and compile correctly Paper Changes: PaperMC/Paper@66cb880 Remove ThreadedWorldUpgrader patch PaperMC/Paper@980cff9 Fix compile --- gradle.properties | 2 +- patches/server/0001-Rebrand.patch | 4 +- patches/server/0002-Purpur-config-files.patch | 8 +-- patches/server/0006-Ridables.patch | 4 +- .../server/0011-Bring-back-server-name.patch | 4 +- .../0012-Configurable-server-mod-name.patch | 4 +- patches/server/0013-Lagging-threshold.patch | 8 +-- .../0043-Configurable-TPS-Catchup.patch | 4 +- ...0056-Add-5-second-tps-average-in-tps.patch | 10 ++-- ...-Add-allow-water-in-end-world-option.patch | 6 +-- .../0093-Configurable-daylight-cycle.patch | 4 +- ...justable-breeding-cooldown-to-config.patch | 10 ++-- patches/server/0114-Implement-TPSBar.patch | 4 +- ...the-ability-to-add-combustible-items.patch | 4 +- .../server/0212-UPnP-Port-Forwarding.patch | 4 +- ...counts-in-beehives-to-Purpur-clients.patch | 4 +- patches/server/0254-Remove-Timings.patch | 28 +++++----- .../server/0255-Remove-Mojang-Profiler.patch | 54 +++++++++---------- patches/server/0258-Debug-Marker-API.patch | 6 +-- .../0295-config-for-startup-commands.patch | 4 +- 20 files changed, 88 insertions(+), 88 deletions(-) diff --git a/gradle.properties b/gradle.properties index 6cc5f0b64..2b3d8a953 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ group = org.purpurmc.purpur version = 1.20.6-R0.1-SNAPSHOT mcVersion = 1.20.6 -paperCommit = 9bf48555241dc03246c67258fe66eaf6c7a4a044 +paperCommit = 980cff9f298032f8670b20368851b8a7316a44d7 org.gradle.caching = true org.gradle.parallel = true diff --git a/patches/server/0001-Rebrand.patch b/patches/server/0001-Rebrand.patch index 4725b813b..423e26f1f 100644 --- a/patches/server/0001-Rebrand.patch +++ b/patches/server/0001-Rebrand.patch @@ -199,10 +199,10 @@ index 4f3cc14d48690bb183d09bb7a5ba1e23e8a0c08a..c366d84518979e842a6f10f969a59515 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 dbc86b8d4d2af6e5f7e678f2bb77fd39b85c04c5..989de328a8dd26486d65245d2737d9789d936e8a 100644 +index 0ed42fa899721f83b598db05be1b5f321af3614a..d42cd000684f6bed26a188bfcf2c633e49b51370 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -959,7 +959,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 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 - create paper world config; 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 - create paper world config @@ -112,7 +112,7 @@ index b4ef3ad2c17168085372f1fe46809f02d9dfe74a..04f7f6743aabdca54892b2b155386f86 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 2fa5507aa2153a05208077f9547c165a1099b5bb..97e7f9d08dd41630e8ebf610f23d5b37b820db1b 100644 +index af015237214cebc4d1c4bb9e9c5f939d433e365c..68902ec8122314d75d70ebdd3e7392cca8a6c53c 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -1033,6 +1033,7 @@ public final class CraftServer implements Server { @@ -139,7 +139,7 @@ index 2fa5507aa2153a05208077f9547c165a1099b5bb..97e7f9d08dd41630e8ebf610f23d5b37 this.overrideAllCommandBlockCommands = this.commandsConfiguration.getStringList("command-block-overrides").contains("*"); this.ignoreVanillaPermissions = this.commandsConfiguration.getBoolean("ignore-vanilla-permissions"); -@@ -3034,6 +3037,18 @@ public final class CraftServer implements Server { +@@ -3029,6 +3032,18 @@ public final class CraftServer implements Server { return CraftServer.this.console.paperConfigurations.createLegacyObject(CraftServer.this.console); } diff --git a/patches/server/0006-Ridables.patch b/patches/server/0006-Ridables.patch index 11e0c7030..202fac4a2 100644 --- a/patches/server/0006-Ridables.patch +++ b/patches/server/0006-Ridables.patch @@ -22,10 +22,10 @@ index 665e88b2dedf9d5bb50914d5f3d377f2d19f40b0..f70a80b496bd1498778e82fc221c3b1b 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 989de328a8dd26486d65245d2737d9789d936e8a..71f1f9a9a395b17398941a4bb35e2d143a62a1f5 100644 +index d42cd000684f6bed26a188bfcf2c633e49b51370..8a264034d2b0552587b64fb82409f1aa3f5b6808 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1761,6 +1761,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 0; // Paper - Add EntityMoveEvent net.minecraft.world.level.block.entity.HopperBlockEntity.skipHopperEvents = worldserver.paperConfig().hopper.disableMoveEvent || org.bukkit.event.inventory.InventoryMoveItemEvent.getHandlerList().getRegisteredListeners().length == 0; // Paper - Perf: Optimize Hoppers worldserver.updateLagCompensationTick(); // Paper - lag compensation diff --git a/patches/server/0011-Bring-back-server-name.patch b/patches/server/0011-Bring-back-server-name.patch index f78802dbb..2f79b0d78 100644 --- a/patches/server/0011-Bring-back-server-name.patch +++ b/patches/server/0011-Bring-back-server-name.patch @@ -17,10 +17,10 @@ index 9d10cdacb3aed2c00dc60aeb6f2cbeb48905e21f..842f382de43df5d5c321422372ec30cc public final boolean spawnNpcs = this.get("spawn-npcs", true); public final boolean pvp = this.get("pvp", true); diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 76c2c7d104cef8527641883e094a5c09a4f56092..5609a6588c0f4271f1b1416604ba88e24deb7e3d 100644 +index 68902ec8122314d75d70ebdd3e7392cca8a6c53c..cfa894a74ce616306fcc55664b29166e36c74ee1 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -3276,4 +3276,11 @@ public final class CraftServer implements Server { +@@ -3271,4 +3271,11 @@ public final class CraftServer implements Server { return this.potionBrewer; } // Paper end diff --git a/patches/server/0012-Configurable-server-mod-name.patch b/patches/server/0012-Configurable-server-mod-name.patch index cbe9427aa..a0429989f 100644 --- a/patches/server/0012-Configurable-server-mod-name.patch +++ b/patches/server/0012-Configurable-server-mod-name.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Configurable server mod name diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 71f1f9a9a395b17398941a4bb35e2d143a62a1f5..537726b345038e045172a42464ea166353515868 100644 +index 8a264034d2b0552587b64fb82409f1aa3f5b6808..6464cf3cf027d894d18d1a24495952d304151648 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1924,7 +1924,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop explosionDensityCache = new HashMap<>(); // Paper - Optimize explosions + public java.util.ArrayDeque redstoneUpdateInfos; // Paper - Faster redstone torch rapid clock removal; Move from Map in BlockRedstoneTorch to here + // Purpur start + private com.google.common.cache.Cache playerBreedingCooldowns; @@ -95,7 +95,7 @@ index 2e44e9ea9558ebc1456d9bbf53561988e33ce845..edd9762e2475aa8828930ada59eb331a public CraftWorld getWorld() { return this.world; } -@@ -218,6 +261,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -209,6 +252,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 - create paper world config this.purpurConfig = new org.purpurmc.purpur.PurpurWorldConfig(((net.minecraft.world.level.storage.PrimaryLevelData) worlddatamutable).getLevelName(), env); // Purpur diff --git a/patches/server/0114-Implement-TPSBar.patch b/patches/server/0114-Implement-TPSBar.patch index 3d9d8fa77..5f9d0fa61 100644 --- a/patches/server/0114-Implement-TPSBar.patch +++ b/patches/server/0114-Implement-TPSBar.patch @@ -17,10 +17,10 @@ index 1b701beeac0cf2a3fe01a09601318e59316131d7..6e4274ac868e744c63e6faece2bbf371 if (environment.includeIntegrated) { diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index f9f089360640a46fa4c71839185ea6523925a763..9481d4d4b839dca720e1ce2a2feadc7e4a03cc56 100644 +index 6ebc9327f74344245886144a4075836205cc1533..8df97c81a610d937758ba0459b91041db7db645d 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1059,6 +1059,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 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 a3ab5eaf8f9b999bfc6b3674a68450a0efeec7e8..9b707ac3a5516f1590afeee73566d0e57ff3050c 100644 +index 8bfb9c9445200b142af3bf9118c0f7c2d1b11501..5e538df03bdbad95227acee2c96d5e03f6b153f8 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -1575,6 +1575,19 @@ public final class CraftServer implements Server { +@@ -1570,6 +1570,19 @@ public final class CraftServer implements Server { return true; } diff --git a/patches/server/0212-UPnP-Port-Forwarding.patch b/patches/server/0212-UPnP-Port-Forwarding.patch index 6ed0861a5..f42ce5f41 100644 --- a/patches/server/0212-UPnP-Port-Forwarding.patch +++ b/patches/server/0212-UPnP-Port-Forwarding.patch @@ -5,7 +5,7 @@ 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 bac978e042a1049cc66048a951b068793b855427..b08c508c0577adcea88a433211108a11edb72473 100644 +index 813b3a6c6de4f05e885ab864e8429818d8103acb..a8efb833d9efbc3367ddda1623ee1a0742cf3ea4 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -314,6 +314,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop { entityplayer.connection.suspendFlushing(); }); @@ -153,7 +153,7 @@ index 57be38313992369f3fa39ab54c9c80a6e4f393eb..834428ee526db305c70cf0ec4015204b // Paper start - Folia scheduler API ((io.papermc.paper.threadedregions.scheduler.FoliaGlobalRegionScheduler) Bukkit.getGlobalRegionScheduler()).tick(); getAllLevels().forEach(level -> { -@@ -1742,21 +1742,21 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop iterator = this.blockEntityTickers.iterator(); boolean flag = this.tickRateManager().runsNormally(); -@@ -1343,7 +1343,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -1334,7 +1334,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { } this.blockEntityTickers.removeAll(toRemove); // Paper - Fix MC-117075 diff --git a/patches/server/0255-Remove-Mojang-Profiler.patch b/patches/server/0255-Remove-Mojang-Profiler.patch index 3cab52d30..ff6b7e73d 100644 --- a/patches/server/0255-Remove-Mojang-Profiler.patch +++ b/patches/server/0255-Remove-Mojang-Profiler.patch @@ -83,7 +83,7 @@ index e9775b4506909bee65a74964f0d5391a0513de1d..684f7f202305c09b1037c5d38a52a5ea } } diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 834428ee526db305c70cf0ec4015204b03348b43..72eee1f7f29578a1d20245e0e4d90e11046ffe39 100644 +index f91739d3de41c20b352e159c7f4e12e6fdcab794..9e9537007a156dfbd41e53a93312ccb8be061a08 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -344,13 +344,13 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 0 && this.tickCount % autosavePeriod == 0; try { this.isSaving = true; -@@ -1623,7 +1623,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 0; // Purpur @@ -242,7 +242,7 @@ index 834428ee526db305c70cf0ec4015204b03348b43..72eee1f7f29578a1d20245e0e4d90e11 try { //worldserver.timings.doTick.startTiming(); // Spigot // Purpur -@@ -1819,17 +1819,17 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop { this.executeBlocking(() -> { this.saveDebugReport(path.resolve("server")); -@@ -2840,40 +2841,40 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop getEntities(@Nullable Entity except, AABB box, Predicate predicate) { @@ -1867,7 +1867,7 @@ index 4d00d72d66adfb282d354e22703552b333138694..eda2f8cc034cf46293be1be117a60cf8 List list = Lists.newArrayList(); ((ServerLevel)this).getEntityLookup().getEntities(except, box, list, predicate); // Paper - optimise this call return list; -@@ -1580,7 +1580,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -1571,7 +1571,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { } public void getEntities(EntityTypeTest filter, AABB box, Predicate predicate, List result, int limit) { @@ -1876,7 +1876,7 @@ index 4d00d72d66adfb282d354e22703552b333138694..eda2f8cc034cf46293be1be117a60cf8 // Paper start - optimise this call //TODO use limit if (filter instanceof net.minecraft.world.entity.EntityType entityTypeTest) { -@@ -1835,6 +1835,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -1826,6 +1826,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { } public ProfilerFiller getProfiler() { diff --git a/patches/server/0258-Debug-Marker-API.patch b/patches/server/0258-Debug-Marker-API.patch index 6bd532fbe..1812ad4e4 100644 --- a/patches/server/0258-Debug-Marker-API.patch +++ b/patches/server/0258-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 9b707ac3a5516f1590afeee73566d0e57ff3050c..02d3be715acb113a1776450b54eeca17684d238e 100644 +index 5e538df03bdbad95227acee2c96d5e03f6b153f8..3542dde0942a0354e77dacf25811ee46c0eace21 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -1586,6 +1586,42 @@ public final class CraftServer implements Server { +@@ -1581,6 +1581,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))); } @@ -99,7 +99,7 @@ index b7a02ae4eda06cab8ffd1220259a061558981dec..226ff7c6048b510be2e71ecc5d5ff358 @Override diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 20543386332d782327229e570c18425dcb98fba4..839c5794183882a875f68fc6b1a61aa543421681 100644 +index 5ea638493fc9330acb194c806a7add8525eab3ee..7dbd2c06ee8777f5100e9545c9666abc83dae21e 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -3571,5 +3571,43 @@ public class CraftPlayer extends CraftHumanEntity implements Player { diff --git a/patches/server/0295-config-for-startup-commands.patch b/patches/server/0295-config-for-startup-commands.patch index 888e14319..ed6aa7165 100644 --- a/patches/server/0295-config-for-startup-commands.patch +++ b/patches/server/0295-config-for-startup-commands.patch @@ -5,10 +5,10 @@ Subject: [PATCH] config for startup commands diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 72eee1f7f29578a1d20245e0e4d90e11046ffe39..71705ccbc0cce88382b1fb536271773a332ad3a2 100644 +index 9e9537007a156dfbd41e53a93312ccb8be061a08..330bae815c0a332e3dc9fa7b224c9f92098199b9 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1187,6 +1187,16 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop Date: Wed, 22 May 2024 20:34:11 -0700 Subject: [PATCH 023/588] Updated Upstream (Paper) Upstream has released updates that appear to apply and compile correctly Paper Changes: PaperMC/Paper@d3ffa62 fix default item attributes PaperMC/Paper@b149584 Always show command exception stack traces in logs (#10766) --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 2b3d8a953..5cb0a883f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ group = org.purpurmc.purpur version = 1.20.6-R0.1-SNAPSHOT mcVersion = 1.20.6 -paperCommit = 980cff9f298032f8670b20368851b8a7316a44d7 +paperCommit = b14958485d88cdf2ba5e1ea4a7bc3171ba9a7de3 org.gradle.caching = true org.gradle.parallel = true From 1bbb0334799623b7d50beb920f35bd5f591471d1 Mon Sep 17 00:00:00 2001 From: granny Date: Thu, 23 May 2024 15:12:39 -0700 Subject: [PATCH 024/588] Updated Upstream (Paper) Upstream has released updates that appear to apply and compile correctly Paper Changes: PaperMC/Paper@a9201d4 [ci skip] Move logic in our patches to ItemType/BlockType (#10772) PaperMC/Paper@3de408e Fix equipment slot and group API (#10767) PaperMC/Paper@d408381 Print CommandRegisteredEvent deprecation warnings again (#10756) PaperMC/Paper@6de7a1f Improve default item attributes API (#10765) PaperMC/Paper@2a90732 Remove incorrect logic for Fireball#setVelocity (#10764) PaperMC/Paper@5e7b65a Allow using PluginLoader classpath API from Bukkit plugins (#10758) --- gradle.properties | 2 +- patches/api/0015-ItemStack-convenience-methods.patch | 4 ++-- .../api/0041-Add-log-suppression-for-LibraryLoader.patch | 6 +++--- patches/server/0001-Rebrand.patch | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/gradle.properties b/gradle.properties index 5cb0a883f..4452a0f11 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ group = org.purpurmc.purpur version = 1.20.6-R0.1-SNAPSHOT mcVersion = 1.20.6 -paperCommit = b14958485d88cdf2ba5e1ea4a7bc3171ba9a7de3 +paperCommit = 5e7b65a9a9c0c9f51679933447bfad543fc1e11d org.gradle.caching = true org.gradle.parallel = true diff --git a/patches/api/0015-ItemStack-convenience-methods.patch b/patches/api/0015-ItemStack-convenience-methods.patch index 410afb4bd..5d52b2610 100644 --- a/patches/api/0015-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 81f9ad99699a78b97e4accaaf1a98eacf29493ce..e3e996d932db689ba62a43f7f01d6f003f8337d3 100644 +index 4f7f91b5e2903ce3b180c637cb463e01a860271e..5b14cea8d246f31c51b09baa731e673f305aea6e 100644 --- a/src/main/java/org/bukkit/Material.java +++ b/src/main/java/org/bukkit/Material.java -@@ -5701,4 +5701,40 @@ public enum Material implements Keyed, Translatable, net.kyori.adventure.transla +@@ -5733,4 +5733,40 @@ public enum Material implements Keyed, Translatable, net.kyori.adventure.transla } return Registry.BLOCK.get(material.key); } diff --git a/patches/api/0041-Add-log-suppression-for-LibraryLoader.patch b/patches/api/0041-Add-log-suppression-for-LibraryLoader.patch index d1a85cb9d..89e515574 100644 --- a/patches/api/0041-Add-log-suppression-for-LibraryLoader.patch +++ b/patches/api/0041-Add-log-suppression-for-LibraryLoader.patch @@ -17,7 +17,7 @@ index eaefbb00e9993d54906cc8cf35cf753c0d6c7707..f1e58639213be0c43cd2ff090b625e7d /** * This class was not meant to be constructed explicitly diff --git a/src/main/java/org/bukkit/plugin/java/LibraryLoader.java b/src/main/java/org/bukkit/plugin/java/LibraryLoader.java -index 8e1b6be2462aaa692efa1f72986921a6dc357196..b6e18b12fd4d61ce92203582906d24b4d14e6cc5 100644 +index c66252802c51174bc26f266cb5cdecdd856ff220..97f580fccd06a8db5f592a53c8b95a7a6159adac 100644 --- a/src/main/java/org/bukkit/plugin/java/LibraryLoader.java +++ b/src/main/java/org/bukkit/plugin/java/LibraryLoader.java @@ -68,6 +68,7 @@ public class LibraryLoader @@ -28,7 +28,7 @@ index 8e1b6be2462aaa692efa1f72986921a6dc357196..b6e18b12fd4d61ce92203582906d24b4 logger.log( Level.INFO, "Downloading {0}", event.getResource().getRepositoryUrl() + event.getResource().getResourceName() ); } } ); -@@ -88,6 +89,7 @@ public class LibraryLoader +@@ -94,6 +95,7 @@ public class LibraryLoader { return null; } @@ -36,7 +36,7 @@ index 8e1b6be2462aaa692efa1f72986921a6dc357196..b6e18b12fd4d61ce92203582906d24b4 logger.log( Level.INFO, "[{0}] Loading {1} libraries... please wait", new Object[] { java.util.Objects.requireNonNullElseGet(desc.getPrefix(), desc::getName), desc.getLibraries().size() // Paper - use configured log prefix -@@ -135,6 +137,7 @@ public class LibraryLoader +@@ -144,6 +146,7 @@ public class LibraryLoader } jarFiles.add( url ); diff --git a/patches/server/0001-Rebrand.patch b/patches/server/0001-Rebrand.patch index 423e26f1f..e3f4e5b53 100644 --- a/patches/server/0001-Rebrand.patch +++ b/patches/server/0001-Rebrand.patch @@ -252,10 +252,10 @@ index e85b9bb3f9c225d289a4959921970b9963881199..c1e2d3a75b9d4710ab6d8b5c62af4bc1 // (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 5a382907285a288f2a223189e690d3dbdf45594c..3daf674f1e0de3fdd89db5536cc1e34140a5abb8 100644 +index e46714f38df931350d81c30907560c381c8d2725..777f1d11d9fb5af29ec895383902daf348eb528e 100644 --- a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java +++ b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java -@@ -511,7 +511,7 @@ public final class CraftMagicNumbers implements UnsafeValues { +@@ -502,7 +502,7 @@ public final class CraftMagicNumbers implements UnsafeValues { @Override public com.destroystokyo.paper.util.VersionFetcher getVersionFetcher() { From 222387f797756a18f7c8de7be353d078ebe720bc Mon Sep 17 00:00:00 2001 From: granny Date: Sat, 25 May 2024 18:41:03 -0700 Subject: [PATCH 025/588] Updated Upstream (Paper) Upstream has released updates that appear to apply and compile correctly Paper Changes: PaperMC/Paper@3004717 Do not re-wrap vanilla goals (#10751) PaperMC/Paper@377733d Use getter/setter on Mob for equipment drop chances (#10780) PaperMC/Paper@dff591d Allow to define new map cursor types (#10782) PaperMC/Paper@4fd3ac0 [ci skip] Update Player#getListeningPluginChannels Jdoc (#10778) PaperMC/Paper@535dca5 Fix a few issues with ItemMeta (#10740) PaperMC/Paper@26e90b9 Fix CraftMetaBlockState for data components (#10731) PaperMC/Paper@f0bd0cc Expose anvil cost in the API (#10682) --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 4452a0f11..d1d426dcd 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ group = org.purpurmc.purpur version = 1.20.6-R0.1-SNAPSHOT mcVersion = 1.20.6 -paperCommit = 5e7b65a9a9c0c9f51679933447bfad543fc1e11d +paperCommit = f0bd0cca8f7c423f78b84ff9cbb323b698062767 org.gradle.caching = true org.gradle.parallel = true From 692ff89babbff821495accd118b974d7b6de4483 Mon Sep 17 00:00:00 2001 From: granny Date: Sat, 25 May 2024 19:16:35 -0700 Subject: [PATCH 026/588] [ci skip] specify purpur in version command --- patches/api/0029-Clean-up-version-command-output.patch | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/patches/api/0029-Clean-up-version-command-output.patch b/patches/api/0029-Clean-up-version-command-output.patch index 1bd0a28dd..5e853fa92 100644 --- a/patches/api/0029-Clean-up-version-command-output.patch +++ b/patches/api/0029-Clean-up-version-command-output.patch @@ -22,7 +22,7 @@ index a736d7bcdc5861a01b66ba36158db1c716339346..22fc165fd9c95f0f3ae1be7a0857e48c @Override diff --git a/src/main/java/org/bukkit/command/defaults/VersionCommand.java b/src/main/java/org/bukkit/command/defaults/VersionCommand.java -index fd5d9881abfd930bb883120f018f76dc78b62b14..d3dadad49df09e85c724c93e8cc88da2c985e9b4 100644 +index fd5d9881abfd930bb883120f018f76dc78b62b14..3d29c47ac0620af82d990faf5dfc266c6f0235f1 100644 --- a/src/main/java/org/bukkit/command/defaults/VersionCommand.java +++ b/src/main/java/org/bukkit/command/defaults/VersionCommand.java @@ -214,7 +214,7 @@ public class VersionCommand extends BukkitCommand { @@ -44,7 +44,7 @@ index fd5d9881abfd930bb883120f018f76dc78b62b14..d3dadad49df09e85c724c93e8cc88da2 + // Purpur start + int distance = getVersionFetcher().distance(); + final Component message = Component.join(net.kyori.adventure.text.JoinConfiguration.separator(Component.newline()), -+ ChatColor.parseMM("Current: %s%s*", distance == 0 ? "" : distance > 0 ? "" : "", Bukkit.getVersion()), ++ ChatColor.parseMM("Current Purpur Version: %s%s*", distance == 0 ? "" : distance > 0 ? "" : "", Bukkit.getVersion()), + // Purpur end msg ); From 7b850ef9b15096dc1a9ac05db114e23bd256292f Mon Sep 17 00:00:00 2001 From: CyberFlame Date: Sun, 26 May 2024 18:01:50 +1200 Subject: [PATCH 027/588] [ci skip] Fix version inconsistency in README (#1517) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 74d937f47..df4b3919b 100644 --- a/README.md +++ b/README.md @@ -80,7 +80,7 @@ repositories { ``` ```kotlin dependencies { - compileOnly("org.purpurmc.purpur:purpur-api:1.20.5-R0.1-SNAPSHOT") + compileOnly("org.purpurmc.purpur:purpur-api:1.20.6-R0.1-SNAPSHOT") } ``` From 22fc5f9bda380a33e4f0a4db9af43644d9e4c5f0 Mon Sep 17 00:00:00 2001 From: granny Date: Sat, 25 May 2024 23:06:16 -0700 Subject: [PATCH 028/588] Updated Upstream (Paper) Upstream has released updates that appear to apply and compile correctly Paper Changes: PaperMC/Paper@41bee55 Fix NPE for color-related metas PaperMC/Paper@4e10fad reset meta block state on BlockStateMeta#setBlockState --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index d1d426dcd..068ca8c84 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ group = org.purpurmc.purpur version = 1.20.6-R0.1-SNAPSHOT mcVersion = 1.20.6 -paperCommit = f0bd0cca8f7c423f78b84ff9cbb323b698062767 +paperCommit = 4e10fadfdc8f854feeabf916c23a71e21fb0b29f org.gradle.caching = true org.gradle.parallel = true From 2842b97ddf051139e4f76b54ec1731e73e0140ba Mon Sep 17 00:00:00 2001 From: granny Date: Sun, 26 May 2024 17:12:40 -0700 Subject: [PATCH 029/588] Updated Upstream (Paper) Upstream has released updates that appear to apply and compile correctly Paper Changes: PaperMC/Paper@a7ae966 readd itemstack data sanitization (#10454) PaperMC/Paper@ca50b87 Clear firework item properly (#10793) PaperMC/Paper@9774a52 fix and cleanup loot table patches (#10100) PaperMC/Paper@ac4ee06 Fix integer overflow for lag compensating eating check (#10797) PaperMC/Paper@6649a17 Fix BlockStateMeta equals (#10795) PaperMC/Paper@1b8cdc6 Extend Player Interact cancellation to cover Jigsaw blocks (#10719) PaperMC/Paper@841ab41 Fix more item desync when an event is cancelled (#10654) PaperMC/Paper@b0e3ca4 Prevent NPE if hooked entity was cleared (#10712) PaperMC/Paper@347bbe3 Fix Cancelling BlockPlaceEvent calling onRemove (#10773) --- gradle.properties | 2 +- patches/server/0002-Purpur-config-files.patch | 6 +- .../0005-Component-related-conveniences.patch | 8 +-- patches/server/0006-Ridables.patch | 28 +++++----- patches/server/0010-AFK-API.patch | 10 ++-- ...option-to-set-armorstand-step-height.patch | 6 +- patches/server/0031-Cows-eat-mushrooms.patch | 6 +- ...-Minecart-settings-and-WASD-controls.patch | 8 +-- ...urable-void-damage-height-and-damage.patch | 6 +- .../0052-Add-canSaveToDisk-to-Entity.patch | 4 +- ...g-mends-most-damages-equipment-first.patch | 4 +- .../0057-Implement-elytra-settings.patch | 8 +-- ...-Add-allow-water-in-end-world-option.patch | 4 +- ...leport-to-spawn-if-outside-world-bor.patch | 6 +- ...Stop-squids-floating-on-top-of-water.patch | 4 +- ...tities-can-use-portals-configuration.patch | 6 +- ...justable-breeding-cooldown-to-config.patch | 6 +- ...mes-from-item-forms-of-entities-to-e.patch | 4 +- .../0105-Add-boat-fall-damage-config.patch | 6 +- patches/server/0114-Implement-TPSBar.patch | 10 ++-- ...22-Movement-options-for-armor-stands.patch | 4 +- .../server/0123-Fix-stuck-in-portals.patch | 8 +-- ...-to-ignore-nearby-mobs-when-sleeping.patch | 6 +- patches/server/0143-Drowning-Settings.patch | 6 +- ...-Config-to-allow-for-unsafe-enchants.patch | 6 +- ...0157-Configurable-broadcast-settings.patch | 4 +- ...169-API-for-any-mob-to-burn-daylight.patch | 10 ++-- ...83-Store-placer-on-Block-when-placed.patch | 10 ++-- ...omizable-sleeping-actionbar-messages.patch | 8 +-- patches/server/0190-Add-compass-command.patch | 10 ++-- .../server/0217-Signs-allow-color-codes.patch | 6 +- ...0253-Add-toggle-for-RNG-manipulation.patch | 6 +- patches/server/0254-Remove-Timings.patch | 8 +-- .../server/0255-Remove-Mojang-Profiler.patch | 56 +++++++++---------- ...62-Implement-ram-and-rambar-commands.patch | 10 ++-- patches/server/0271-Fire-Immunity-API.patch | 10 ++-- ...leport-to-spawn-on-nether-ceiling-da.patch | 6 +- patches/server/0273-Added-got-ram-event.patch | 4 +- 38 files changed, 160 insertions(+), 160 deletions(-) diff --git a/gradle.properties b/gradle.properties index 068ca8c84..f64d78628 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ group = org.purpurmc.purpur version = 1.20.6-R0.1-SNAPSHOT mcVersion = 1.20.6 -paperCommit = 4e10fadfdc8f854feeabf916c23a71e21fb0b29f +paperCommit = 347bbe389786d5cdae7cd1c6ec32cacba2a9aac7 org.gradle.caching = true org.gradle.parallel = true diff --git a/patches/server/0002-Purpur-config-files.patch b/patches/server/0002-Purpur-config-files.patch index 9cc31d432..394c11c6b 100644 --- a/patches/server/0002-Purpur-config-files.patch +++ b/patches/server/0002-Purpur-config-files.patch @@ -92,10 +92,10 @@ index 2eb9c584cc77237f1c82d880a51a3f8b51008d73..6dc0101193c5a1a8850f849d4459462f this.setPvpAllowed(dedicatedserverproperties.pvp); diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index 0a8eeebb2d702ebcefd9f26cc0f41d1eab497902..a876fc3a23d716265c615949e2f1fa653c2f903c 100644 +index 14281a4e72f49dc4eb2ca3da8479c1f81a3a175d..be8bc5b5d5fdf41da40fb5aef9e6bb16f2af0ba0 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java -@@ -170,6 +170,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -171,6 +171,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { // Paper end - add paper world config public final com.destroystokyo.paper.antixray.ChunkPacketBlockController chunkPacketBlockController; // Paper - Anti-Xray @@ -103,7 +103,7 @@ index 0a8eeebb2d702ebcefd9f26cc0f41d1eab497902..a876fc3a23d716265c615949e2f1fa65 public final co.aikar.timings.WorldTimingsHandler timings; // Paper public static BlockPos lastPhysicsProblem; // Spigot private org.spigotmc.TickLimiter entityLimiter; -@@ -207,6 +208,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -208,6 +209,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { protected Level(WritableLevelData worlddatamutable, ResourceKey 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 - create paper world config; 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 - create paper world config diff --git a/patches/server/0005-Component-related-conveniences.patch b/patches/server/0005-Component-related-conveniences.patch index 6046b3496..d47604210 100644 --- a/patches/server/0005-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 88ce79c7c479a7b905a4d6e5c2b4c0bc25e66854..0f8c2ff5e2d0d396e85e26e0a03a761e9bb25654 100644 +index 32c02333eee85dd3e90f259873bf8bbb4c9177a7..8a183fc9d0a79dd9a952bc1759c53da286908188 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -1978,6 +1978,26 @@ public class ServerPlayer extends Player { +@@ -1979,6 +1979,26 @@ public class ServerPlayer extends Player { this.lastSentExp = -1; // CraftBukkit - Added to reset } @@ -81,10 +81,10 @@ index dd9638bdb228a53e72820e0e7cf6fe6fcc08fe4b..bc5071efe710614309308dad5b6d9c56 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 25ea45a528612d1a2a2d77293b3802f473a52f38..95c88ac0142551fbcfd2356be2fc70f7a78278ab 100644 +index 4ee843dfd826772c9157ca421d8fe1f36f814b51..ffcd965586acc5993c8122336ea2ec661932d4b7 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -4196,6 +4196,20 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -4195,6 +4195,20 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess return SlotAccess.NULL; } diff --git a/patches/server/0006-Ridables.patch b/patches/server/0006-Ridables.patch index 202fac4a2..345ea2814 100644 --- a/patches/server/0006-Ridables.patch +++ b/patches/server/0006-Ridables.patch @@ -46,10 +46,10 @@ index ca56a0b596976448da6bb2a0e82b3d5cd4133e12..6247659f33c3d21d33ec1f5105234036 public LevelChunk getChunkIfLoaded(int x, int z) { return this.chunkSource.getChunkAtIfLoadedImmediately(x, z); // Paper - Use getChunkIfLoadedImmediately diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 0f8c2ff5e2d0d396e85e26e0a03a761e9bb25654..c1d6a2c82e240a7c50b4cb973c285b816f7ec419 100644 +index 8a183fc9d0a79dd9a952bc1759c53da286908188..5dd8c9f53ba50f160198a09dd2069edbac48230e 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -814,6 +814,15 @@ public class ServerPlayer extends Player { +@@ -815,6 +815,15 @@ public class ServerPlayer extends Player { this.trackEnteredOrExitedLavaOnVehicle(); this.updatePlayerAttributes(); this.advancements.flushDirty(this); @@ -66,7 +66,7 @@ index 0f8c2ff5e2d0d396e85e26e0a03a761e9bb25654..c1d6a2c82e240a7c50b4cb973c285b81 private void updatePlayerAttributes() { diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index b9b3277c8ed94e0cd30b20b9c00a33eaad48e5ac..647026afdb161e21ff55dc9a3d470eef5502571f 100644 +index c450447585af4c8cdc87abe871c229ff895c3e53..a33a724de4c408fcf23b8ec9206311fc25936f1c 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java @@ -2772,6 +2772,8 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl @@ -79,10 +79,10 @@ index b9b3277c8ed94e0cd30b20b9c00a33eaad48e5ac..647026afdb161e21ff55dc9a3d470eef if ((entity instanceof Bucketable && entity instanceof LivingEntity && origItem != null && origItem.asItem() == Items.WATER_BUCKET) && (event.isCancelled() || ServerGamePacketListenerImpl.this.player.getInventory().getSelected() == null || ServerGamePacketListenerImpl.this.player.getInventory().getSelected().getItem() != origItem)) { entity.resendPossiblyDesyncedEntityData(ServerGamePacketListenerImpl.this.player); // Paper - The entire mob gets deleted, so resend it. diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 95c88ac0142551fbcfd2356be2fc70f7a78278ab..973e4c24a53fecad99fa5740c9c3cedd1320821b 100644 +index ffcd965586acc5993c8122336ea2ec661932d4b7..b976ea5d919f73c406adea90603f4a78b761fd25 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -381,7 +381,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -380,7 +380,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess private final Set tags; private final double[] pistonDeltas; private long pistonDeltasGameTime; @@ -91,7 +91,7 @@ index 95c88ac0142551fbcfd2356be2fc70f7a78278ab..973e4c24a53fecad99fa5740c9c3cedd private float eyeHeight; public boolean isInPowderSnow; public boolean wasInPowderSnow; -@@ -3086,6 +3086,13 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3085,6 +3085,13 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess this.passengers = ImmutableList.copyOf(list); } @@ -105,7 +105,7 @@ index 95c88ac0142551fbcfd2356be2fc70f7a78278ab..973e4c24a53fecad99fa5740c9c3cedd this.gameEvent(GameEvent.ENTITY_MOUNT, passenger); } } -@@ -3125,6 +3132,14 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3124,6 +3131,14 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess return false; } // CraftBukkit end @@ -120,7 +120,7 @@ index 95c88ac0142551fbcfd2356be2fc70f7a78278ab..973e4c24a53fecad99fa5740c9c3cedd if (this.passengers.size() == 1 && this.passengers.get(0) == entity) { this.passengers = ImmutableList.of(); } else { -@@ -5015,4 +5030,44 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -5014,4 +5029,44 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess return ((net.minecraft.server.level.ServerChunkCache) level.getChunkSource()).isPositionTicking(this); } // Paper end - Expose entity id counter @@ -190,7 +190,7 @@ index 09fdea983772612ef3fff6b2da3cf469a34e4ec0..aa76a24421cdb3908a3544d92eb3d1e3 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 ef0f118aecf0893e45cb9423a677d7e42496324b..593db87486031d6e21b574a755b16bf6f5c5bf95 100644 +index 0ddf2e1a6d2ea836f8a140a435721e0ce96bd8d2..f790211062a14b5d70dac178c31bfc7033779222 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java @@ -229,9 +229,9 @@ public abstract class LivingEntity extends Entity implements Attackable { @@ -268,7 +268,7 @@ index ef0f118aecf0893e45cb9423a677d7e42496324b..593db87486031d6e21b574a755b16bf6 // Paper end - Add EntityMoveEvent 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 e89f9c3e887601d8461eb967ae0bf582b672f631..26b03594b6ccd69ca35156472e27543d11ba2077 100644 +index 9f42563699508fcb3d8a96cfdfc25a7bffd99759..9534ad75d46e2c379a4a850337a6d7568f863f50 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java @@ -165,8 +165,8 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Targeti @@ -816,7 +816,7 @@ index 824e5e4fe7619ae46061c3c978c9a044db8c84ab..e2a98b45e56a368de19bb65e304370a5 public ItemStack getBucketItemStack() { return new ItemStack(Items.COD_BUCKET); diff --git a/src/main/java/net/minecraft/world/entity/animal/Cow.java b/src/main/java/net/minecraft/world/entity/animal/Cow.java -index 5a7b1be351834a6b8889b1380cede1be025cb302..41b6c79c31414378d433500a35e434e546738e42 100644 +index e336934f37075a827843e4b1bb2b6b660d2c60c9..8c6bda1ed0408fa1c7cc772097159410443b7fae 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Cow.java +++ b/src/main/java/net/minecraft/world/entity/animal/Cow.java @@ -44,9 +44,27 @@ public class Cow extends Animal { @@ -855,10 +855,10 @@ index 5a7b1be351834a6b8889b1380cede1be025cb302..41b6c79c31414378d433500a35e434e5 ItemStack itemstack = player.getItemInHand(hand); if (itemstack.is(Items.BUCKET) && !this.isBaby()) { -@@ -101,7 +120,7 @@ public class Cow extends Animal { - PlayerBucketFillEvent event = CraftEventFactory.callPlayerBucketFillEvent((ServerLevel) player.level(), player, this.blockPosition(), this.blockPosition(), null, itemstack, Items.MILK_BUCKET, hand); +@@ -102,7 +121,7 @@ public class Cow extends Animal { if (event.isCancelled()) { + player.containerMenu.sendAllDataToRemote(); // Paper - Fix inventory desync - return InteractionResult.PASS; + return tryRide(player, hand); // Purpur } @@ -2332,7 +2332,7 @@ index 290d41136f5ec7671bc4990dfe50da0a770c124d..b98a34357e59168bbb22c967b86a449f this.level().getProfiler().pop(); this.level().getProfiler().push("tadpoleActivityUpdate"); 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 02e49c7ae5e120302b6479cf3e3934b9217eebf0..9cd8220a1e5e43c141ad27df4969e66ef3746ecd 100644 +index 376bcbc189008464f4d518c1e07643431ba96306..691f5020df77b01523d1e292be40552089e2f538 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 @@ -91,6 +91,23 @@ public class Goat extends Animal { diff --git a/patches/server/0010-AFK-API.patch b/patches/server/0010-AFK-API.patch index 957afbf94..fdfa7ea18 100644 --- a/patches/server/0010-AFK-API.patch +++ b/patches/server/0010-AFK-API.patch @@ -5,10 +5,10 @@ Subject: [PATCH] AFK API diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 4391ae896d8dbe98c6577f85759b187a396a7c21..59d37e8938b16882c2424146f50088eb0ea24857 100644 +index 5dd8c9f53ba50f160198a09dd2069edbac48230e..70838e5ee30733a71ad73330f69ea093f73b4bd2 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -2326,8 +2326,68 @@ public class ServerPlayer extends Player { +@@ -2327,8 +2327,68 @@ public class ServerPlayer extends Player { public void resetLastActionTime() { this.lastActionTime = Util.getMillis(); @@ -78,7 +78,7 @@ index 4391ae896d8dbe98c6577f85759b187a396a7c21..59d37e8938b16882c2424146f50088eb return this.stats; } diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 647026afdb161e21ff55dc9a3d470eef5502571f..f2ba620d25eba517d2949cb669ee84166f954984 100644 +index a33a724de4c408fcf23b8ec9206311fc25936f1c..d84f083ea335d4bfc021e11cbb86bcc17f9ba76c 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java @@ -332,6 +332,20 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl @@ -192,7 +192,7 @@ index d2f0c3b26d4beedb49d86e0242d843590d469d02..7463eefb7d09ea55fe8780210e7e967c 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 054c905085b70ba72a3b76649bf5a20106f239d1..cd0992ec6b70f88c17cf7492847ae7f35e9c1e0d 100644 +index a651b1ecca3133876486dab08627c67449b67005..91a52b49141c7d1e5b9553a4a7e33c85b95ce49f 100644 --- a/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java @@ -201,6 +201,13 @@ public abstract class Player extends LivingEntity { @@ -223,7 +223,7 @@ index ea0aee88c7d901034427db201c1b2430f8a1d522..1f28bfb435c1e4d97da713f96c452aba if (range < 0.0 || d < range * range) { return true; diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index bae888162966f5e31f92c49fbf6df119c2b83781..f47548b84337eaea3299d9ba859734fbd8e3e0e5 100644 +index 497439478e20f2207e23e8e556ac7df80eb7e5c7..a0db237d748147280cd4ccfc6eaa601974f1f304 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -574,10 +574,15 @@ public class CraftPlayer extends CraftHumanEntity implements Player { diff --git a/patches/server/0029-Add-option-to-set-armorstand-step-height.patch b/patches/server/0029-Add-option-to-set-armorstand-step-height.patch index 57459fe83..f9f6dc0b3 100644 --- a/patches/server/0029-Add-option-to-set-armorstand-step-height.patch +++ b/patches/server/0029-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 e90c753e8a2d1ca75ee55ff250b16d60b1d61df6..f1cecf8ba15c6e6827b572386e82992bdecaef08 100644 +index 28c8860d145eb34911e1a54a15597d8c873df872..5ebf68635f868c17bc56a3397e3ceed7b7507aa6 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -340,6 +340,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -339,6 +339,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess public double xOld; public double yOld; public double zOld; @@ -16,7 +16,7 @@ index e90c753e8a2d1ca75ee55ff250b16d60b1d61df6..f1cecf8ba15c6e6827b572386e82992b public boolean noPhysics; public final RandomSource random; public int tickCount; -@@ -4858,7 +4859,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -4857,7 +4858,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } public float maxUpStep() { diff --git a/patches/server/0031-Cows-eat-mushrooms.patch b/patches/server/0031-Cows-eat-mushrooms.patch index 4b9bf527b..29865f2ad 100644 --- a/patches/server/0031-Cows-eat-mushrooms.patch +++ b/patches/server/0031-Cows-eat-mushrooms.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Cows eat mushrooms diff --git a/src/main/java/net/minecraft/world/entity/animal/Cow.java b/src/main/java/net/minecraft/world/entity/animal/Cow.java -index bee1a275f242866206dc461461b7962e04289ddc..bda0d933ccbee613aa7fb31534351a0d2dbab0a7 100644 +index 478663c16a5763dda9a6c3edbafc843b8dfe06f2..5710f77389f4dc4c56475d36ac592633486f2ba7 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Cow.java +++ b/src/main/java/net/minecraft/world/entity/animal/Cow.java @@ -2,6 +2,7 @@ package net.minecraft.world.entity.animal; @@ -33,7 +33,7 @@ index bee1a275f242866206dc461461b7962e04289ddc..bda0d933ccbee613aa7fb31534351a0d }, false)); this.goalSelector.addGoal(4, new FollowParentGoal(this, 1.25D)); this.goalSelector.addGoal(5, new WaterAvoidingRandomStrollGoal(this, 1.0D)); -@@ -134,6 +136,10 @@ public class Cow extends Animal { +@@ -135,6 +137,10 @@ public class Cow extends Animal { player.setItemInHand(hand, itemstack1); return InteractionResult.sidedSuccess(this.level().isClientSide); @@ -44,7 +44,7 @@ index bee1a275f242866206dc461461b7962e04289ddc..bda0d933ccbee613aa7fb31534351a0d } else { return super.mobInteract(player, hand); } -@@ -149,4 +155,69 @@ public class Cow extends Animal { +@@ -150,4 +156,69 @@ public class Cow extends Animal { public EntityDimensions getDefaultDimensions(Pose pose) { return this.isBaby() ? Cow.BABY_DIMENSIONS : super.getDefaultDimensions(pose); } diff --git a/patches/server/0037-Minecart-settings-and-WASD-controls.patch b/patches/server/0037-Minecart-settings-and-WASD-controls.patch index b38b1d122..ddbbcbe87 100644 --- a/patches/server/0037-Minecart-settings-and-WASD-controls.patch +++ b/patches/server/0037-Minecart-settings-and-WASD-controls.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Minecart settings and WASD controls diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index bc6a5de72d52627b3ceca4b52b95e12ceddf1247..a17de781053a2c2caf615e5ac48a45c14386b0af 100644 +index 70838e5ee30733a71ad73330f69ea093f73b4bd2..65fa71b587bd14494c71ae265e56de768d6b8219 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -1189,6 +1189,7 @@ public class ServerPlayer extends Player { +@@ -1190,6 +1190,7 @@ public class ServerPlayer extends Player { if (this.isInvulnerableTo(source)) { return false; } else { @@ -112,7 +112,7 @@ index 4d7454e5a64fc18e63793a221daa94617f17c666..97172e9c53c381d451111227feb4d1fa 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 66074445d3908b9bb1c8d70e1e27d057720ec8e5..0fd4f2ab929df479360755a3f1e58a933ae59520 100644 +index d524fcc191cb95d6ec7f12ae7fceeb8077bb08fc..4b8cebb321eddc852b4ec7def7f51d781f67927b 100644 --- a/src/main/java/net/minecraft/world/item/MinecartItem.java +++ b/src/main/java/net/minecraft/world/item/MinecartItem.java @@ -120,8 +120,9 @@ public class MinecartItem extends Item { @@ -127,7 +127,7 @@ index 66074445d3908b9bb1c8d70e1e27d057720ec8e5..0fd4f2ab929df479360755a3f1e58a93 ItemStack itemstack = context.getItemInHand(); if (world instanceof ServerLevel) { -@@ -146,6 +147,6 @@ public class MinecartItem extends Item { +@@ -147,6 +148,6 @@ public class MinecartItem extends Item { itemstack.shrink(1); return InteractionResult.sidedSuccess(world.isClientSide); diff --git a/patches/server/0051-Configurable-void-damage-height-and-damage.patch b/patches/server/0051-Configurable-void-damage-height-and-damage.patch index 8adbee6ec..d5310fe23 100644 --- a/patches/server/0051-Configurable-void-damage-height-and-damage.patch +++ b/patches/server/0051-Configurable-void-damage-height-and-damage.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Configurable void damage height and damage diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 429d1a3fd7a75fe3dc8eb8d467ad4f2bd99e0212..f0ba7603795eb1fde01dc86cd3d8b02d73a55869 100644 +index 5ebf68635f868c17bc56a3397e3ceed7b7507aa6..e4e240b227fbde9dee03d7a3fa8364e3b129da88 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -948,7 +948,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -947,7 +947,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess public void checkBelowWorld() { // Paper start - Configurable nether ceiling damage @@ -18,7 +18,7 @@ index 429d1a3fd7a75fe3dc8eb8d467ad4f2bd99e0212..f0ba7603795eb1fde01dc86cd3d8b02d && (!(this instanceof Player player) || !player.getAbilities().invulnerable))) { // Paper end - Configurable nether ceiling damage diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 7b210484fd10e6e994c66afb45f8a28ffb5812f1..ed8833ed95584cdf9be2b931915277c04beac6ee 100644 +index 965fdc5701162aad8656b09c8930448e47db0f3c..7f9b6688066298655d7b722d8d47ad1700326fcb 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java @@ -2592,7 +2592,7 @@ public abstract class LivingEntity extends Entity implements Attackable { diff --git a/patches/server/0052-Add-canSaveToDisk-to-Entity.patch b/patches/server/0052-Add-canSaveToDisk-to-Entity.patch index 0503b956b..f6bac21c2 100644 --- a/patches/server/0052-Add-canSaveToDisk-to-Entity.patch +++ b/patches/server/0052-Add-canSaveToDisk-to-Entity.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add canSaveToDisk to Entity diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index f0ba7603795eb1fde01dc86cd3d8b02d73a55869..a99d04b820c230422bc82a3e0e094a79ab0c5c33 100644 +index e4e240b227fbde9dee03d7a3fa8364e3b129da88..9b653134ad71a6d3ff22dfaa15390e3cd7b4453a 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -558,6 +558,10 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -557,6 +557,10 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess return false; } diff --git a/patches/server/0055-Mending-mends-most-damages-equipment-first.patch b/patches/server/0055-Mending-mends-most-damages-equipment-first.patch index e79a10187..90a6916fd 100644 --- a/patches/server/0055-Mending-mends-most-damages-equipment-first.patch +++ b/patches/server/0055-Mending-mends-most-damages-equipment-first.patch @@ -18,10 +18,10 @@ index a207a31d80a302dbdfe80f8727222542d3a78da2..7ca70e9ddda24e2fe661c7b13fa439a6 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 a45389d64c04cd4c2a35fbc511595be0535a8665..e51bbab02b816a431f18c520fc67eeb1880fbfa0 100644 +index 58c38bc4361ddf24716f326b0c6fc626d434756e..6ab9bc3da937f259b4d5b4ef69c011170b1f6783 100644 --- a/src/main/java/net/minecraft/world/item/ItemStack.java +++ b/src/main/java/net/minecraft/world/item/ItemStack.java -@@ -636,6 +636,16 @@ public final class ItemStack implements DataComponentHolder { +@@ -638,6 +638,16 @@ public final class ItemStack implements DataComponentHolder { return this.isDamageableItem() && this.getDamageValue() > 0; } diff --git a/patches/server/0057-Implement-elytra-settings.patch b/patches/server/0057-Implement-elytra-settings.patch index e2c58c260..8e47b4856 100644 --- a/patches/server/0057-Implement-elytra-settings.patch +++ b/patches/server/0057-Implement-elytra-settings.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Implement elytra settings diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index ed8833ed95584cdf9be2b931915277c04beac6ee..9a2725e3f61a7d37943518cc760b17859a0938bb 100644 +index 7f9b6688066298655d7b722d8d47ad1700326fcb..72eb43102ddf8349c4a376ed66ef016dc3bf52eb 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java @@ -3554,7 +3554,16 @@ public abstract class LivingEntity extends Entity implements Attackable { @@ -46,10 +46,10 @@ index 218f2f085309f04438f8b07bc41cf242583db2dc..ea8e49b42b9dde74784189430be66ed6 itemStack.shrink(1); } else ((net.minecraft.server.level.ServerPlayer) user).getBukkitEntity().updateInventory(); diff --git a/src/main/java/net/minecraft/world/item/ItemStack.java b/src/main/java/net/minecraft/world/item/ItemStack.java -index e51bbab02b816a431f18c520fc67eeb1880fbfa0..b2c5581b126ceb9e47a13f6eda8cc132d11bfb09 100644 +index 6ab9bc3da937f259b4d5b4ef69c011170b1f6783..ddf746734697305c405c53d29066c8b3003f1bf9 100644 --- a/src/main/java/net/minecraft/world/item/ItemStack.java +++ b/src/main/java/net/minecraft/world/item/ItemStack.java -@@ -663,7 +663,7 @@ public final class ItemStack implements DataComponentHolder { +@@ -665,7 +665,7 @@ public final class ItemStack implements DataComponentHolder { int j; if (amount > 0) { @@ -58,7 +58,7 @@ index e51bbab02b816a431f18c520fc67eeb1880fbfa0..b2c5581b126ceb9e47a13f6eda8cc132 int k = 0; for (int l = 0; j > 0 && l < amount; ++l) { -@@ -739,6 +739,12 @@ public final class ItemStack implements DataComponentHolder { +@@ -741,6 +741,12 @@ public final class ItemStack implements DataComponentHolder { this.hurtAndBreak(amount, randomsource, entity, () -> { // Paper - Add EntityDamageItemEvent entity.broadcastBreakEvent(slot); Item item = this.getItem(); diff --git a/patches/server/0067-Add-allow-water-in-end-world-option.patch b/patches/server/0067-Add-allow-water-in-end-world-option.patch index a07fc793c..d0fe3fe2a 100644 --- a/patches/server/0067-Add-allow-water-in-end-world-option.patch +++ b/patches/server/0067-Add-allow-water-in-end-world-option.patch @@ -27,10 +27,10 @@ index 49557d6f22c5725c663a231deab019d4f6fe95fa..046652e8f9c5dcdf7c90acb9391214ca 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 a876fc3a23d716265c615949e2f1fa653c2f903c..b90802d8132cd2979a202a0fe76b1a948eb90fc4 100644 +index be8bc5b5d5fdf41da40fb5aef9e6bb16f2af0ba0..a0a0ccd06cf8de4a379d9fbb89865bae8feeedc6 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java -@@ -1893,4 +1893,13 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -1894,4 +1894,13 @@ public abstract class Level implements LevelAccessor, AutoCloseable { return null; } // Paper end - optimize redstone (Alternate Current) diff --git a/patches/server/0070-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch b/patches/server/0070-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch index 541c36ae8..7682b42d2 100644 --- a/patches/server/0070-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch +++ b/patches/server/0070-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 fa03d36630549ed2c2a7b167e0bd8fa1d656c485..ca750192e6faa46c1ce6feee220572ccb195f98f 100644 +index 65fa71b587bd14494c71ae265e56de768d6b8219..a11dd0a2f302f1ff64c3ca92d55d6a8ef28398b7 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -2962,4 +2962,26 @@ public class ServerPlayer extends Player { +@@ -2963,4 +2963,26 @@ public class ServerPlayer extends Player { return (CraftPlayer) super.getBukkitEntity(); } // CraftBukkit end @@ -36,7 +36,7 @@ index fa03d36630549ed2c2a7b167e0bd8fa1d656c485..ca750192e6faa46c1ce6feee220572cc + // 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 cd5b8086b2caf693abfa5b42edd77819db84bf58..31ad48379987a9c623e7ea3a6def31921167487c 100644 +index 72eb43102ddf8349c4a376ed66ef016dc3bf52eb..c5aa3104c6b9377422ab36dca73d8179a3af7f13 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java @@ -440,6 +440,7 @@ public abstract class LivingEntity extends Entity implements Attackable { diff --git a/patches/server/0081-Stop-squids-floating-on-top-of-water.patch b/patches/server/0081-Stop-squids-floating-on-top-of-water.patch index 53912f141..1cddbd176 100644 --- a/patches/server/0081-Stop-squids-floating-on-top-of-water.patch +++ b/patches/server/0081-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 286511c9023752ec65867f4fac8953a7be64b31f..8ab25832250e68ce1838dbe13394b44a0ed2ca9c 100644 +index 9b653134ad71a6d3ff22dfaa15390e3cd7b4453a..b3fe632b18e5dfa18d37ef23a5a62f3a0f9ccf42 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -4517,6 +4517,12 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -4516,6 +4516,12 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess this.yRotO = this.getYRot(); } diff --git a/patches/server/0083-Entities-can-use-portals-configuration.patch b/patches/server/0083-Entities-can-use-portals-configuration.patch index e0ee2728d..779a74ef8 100644 --- a/patches/server/0083-Entities-can-use-portals-configuration.patch +++ b/patches/server/0083-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 8ab25832250e68ce1838dbe13394b44a0ed2ca9c..e61e4413e05bf8ec699044d26abf355ddad636eb 100644 +index b3fe632b18e5dfa18d37ef23a5a62f3a0f9ccf42..e29f56c83e8ce237e9135fabcf2381130a1a790d 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -3226,7 +3226,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3225,7 +3225,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess public void handleInsidePortal(BlockPos pos) { if (this.isOnPortalCooldown()) { this.setPortalCooldown(); @@ -17,7 +17,7 @@ index 8ab25832250e68ce1838dbe13394b44a0ed2ca9c..e61e4413e05bf8ec699044d26abf355d if (!this.level().isClientSide && !pos.equals(this.portalEntrancePos)) { this.portalEntrancePos = pos.immutable(); } -@@ -3920,7 +3920,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3919,7 +3919,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } public boolean canChangeDimensions() { diff --git a/patches/server/0098-Add-adjustable-breeding-cooldown-to-config.patch b/patches/server/0098-Add-adjustable-breeding-cooldown-to-config.patch index f23bd0126..dcc9157b3 100644 --- a/patches/server/0098-Add-adjustable-breeding-cooldown-to-config.patch +++ b/patches/server/0098-Add-adjustable-breeding-cooldown-to-config.patch @@ -42,10 +42,10 @@ index 5193cf1d3c922d750a11e492b7636215e23ad0d6..b1f0fda942559b6d12c12a77088da6ce 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 b90802d8132cd2979a202a0fe76b1a948eb90fc4..6e25a2ea1694a681c0b648b45c7b8be1458f2ea9 100644 +index a0a0ccd06cf8de4a379d9fbb89865bae8feeedc6..f81a73b0ca751086cb13a9e4fef227356429209b 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java -@@ -179,6 +179,49 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -180,6 +180,49 @@ public abstract class Level implements LevelAccessor, AutoCloseable { public final Map explosionDensityCache = new HashMap<>(); // Paper - Optimize explosions public java.util.ArrayDeque redstoneUpdateInfos; // Paper - Faster redstone torch rapid clock removal; Move from Map in BlockRedstoneTorch to here @@ -95,7 +95,7 @@ index b90802d8132cd2979a202a0fe76b1a948eb90fc4..6e25a2ea1694a681c0b648b45c7b8be1 public CraftWorld getWorld() { return this.world; } -@@ -209,6 +252,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -210,6 +253,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 - create paper world config this.purpurConfig = new org.purpurmc.purpur.PurpurWorldConfig(((net.minecraft.world.level.storage.PrimaryLevelData) worlddatamutable).getLevelName(), env); // Purpur diff --git a/patches/server/0100-Apply-display-names-from-item-forms-of-entities-to-e.patch b/patches/server/0100-Apply-display-names-from-item-forms-of-entities-to-e.patch index 6727beaa9..c03758587 100644 --- a/patches/server/0100-Apply-display-names-from-item-forms-of-entities-to-e.patch +++ b/patches/server/0100-Apply-display-names-from-item-forms-of-entities-to-e.patch @@ -75,10 +75,10 @@ index 0b23e05f936cab7a9867828c2d69417cfde1d2ce..105e2b7d7cd7c64a9164e4114476e44f 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 1634a7d5ff06583408cf2f02f2b5f90931b1e02a..fd83261f64c6469aebde8ab13a6777b9b269cea2 100644 +index 066a6e5ed2632a55324ec0d10f2f8a6bf3f30a0f..1921ecf2c0a9f18c93d207692fb9c2db58c9358f 100644 --- a/src/main/java/net/minecraft/world/item/ArmorStandItem.java +++ b/src/main/java/net/minecraft/world/item/ArmorStandItem.java -@@ -58,6 +58,14 @@ public class ArmorStandItem extends Item { +@@ -59,6 +59,14 @@ public class ArmorStandItem extends Item { return InteractionResult.FAIL; } // CraftBukkit end diff --git a/patches/server/0105-Add-boat-fall-damage-config.patch b/patches/server/0105-Add-boat-fall-damage-config.patch index 6282219c2..363d4b351 100644 --- a/patches/server/0105-Add-boat-fall-damage-config.patch +++ b/patches/server/0105-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 03b206289d103a36d19dcf3154f10ad98f976ba2..fe250c154aed8b10e33c6b916cabedb0dda3d5d6 100644 +index a11dd0a2f302f1ff64c3ca92d55d6a8ef28398b7..6aeb9f330380b0adc3f45433a462799675d5380c 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -1189,7 +1189,16 @@ public class ServerPlayer extends Player { +@@ -1190,7 +1190,16 @@ public class ServerPlayer extends Player { if (this.isInvulnerableTo(source)) { return false; } else { @@ -27,7 +27,7 @@ index 03b206289d103a36d19dcf3154f10ad98f976ba2..fe250c154aed8b10e33c6b916cabedb0 if (!flag && this.spawnInvulnerableTime > 0 && !source.is(DamageTypeTags.BYPASSES_INVULNERABILITY)) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 4ac5d5469312b5f9e0203551baa085317189553b..8a0a018ff9119afe4ada2f30f98b260a523f2e70 100644 +index aba8165029d6b614072f511f45bb16c35988fbfd..8ef18139d06e34a885f284fc1954236349a2f1ba 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -112,6 +112,7 @@ public class PurpurWorldConfig { diff --git a/patches/server/0114-Implement-TPSBar.patch b/patches/server/0114-Implement-TPSBar.patch index 5f9d0fa61..b1307154d 100644 --- a/patches/server/0114-Implement-TPSBar.patch +++ b/patches/server/0114-Implement-TPSBar.patch @@ -5,7 +5,7 @@ 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 1b701beeac0cf2a3fe01a09601318e59316131d7..6e4274ac868e744c63e6faece2bbf3713f47fce0 100644 +index 8ce3d644e555df1d9381d6d7eba382a62265c80e..bf870cedca36fd60488596399a8261933d7d31a2 100644 --- a/src/main/java/net/minecraft/commands/Commands.java +++ b/src/main/java/net/minecraft/commands/Commands.java @@ -255,6 +255,7 @@ public class Commands { @@ -41,7 +41,7 @@ index 6dc0101193c5a1a8850f849d4459462f00ce30e8..04accfaeba1beb564db7205c81d8481d } } diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index f19897177d9e4bfde145f3eb9de5adf7bbe8c2a4..742c97e226987bccee3f1950ccee8755dddff11c 100644 +index 6aeb9f330380b0adc3f45433a462799675d5380c..ea2b179be7fe04bb690d7ff01dca0cc235636559 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java @@ -299,6 +299,7 @@ public class ServerPlayer extends Player { @@ -52,7 +52,7 @@ index f19897177d9e4bfde145f3eb9de5adf7bbe8c2a4..742c97e226987bccee3f1950ccee8755 // 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)); -@@ -609,6 +610,7 @@ public class ServerPlayer extends Player { +@@ -610,6 +611,7 @@ public class ServerPlayer extends Player { }); } @@ -60,7 +60,7 @@ index f19897177d9e4bfde145f3eb9de5adf7bbe8c2a4..742c97e226987bccee3f1950ccee8755 } @Override -@@ -685,6 +687,7 @@ public class ServerPlayer extends Player { +@@ -686,6 +688,7 @@ public class ServerPlayer extends Player { }); } @@ -68,7 +68,7 @@ index f19897177d9e4bfde145f3eb9de5adf7bbe8c2a4..742c97e226987bccee3f1950ccee8755 } // CraftBukkit start - World fallback code, either respawn location or global spawn -@@ -2992,5 +2995,13 @@ public class ServerPlayer extends Player { +@@ -2993,5 +2996,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); } } diff --git a/patches/server/0122-Movement-options-for-armor-stands.patch b/patches/server/0122-Movement-options-for-armor-stands.patch index 371d9e861..e984f34d3 100644 --- a/patches/server/0122-Movement-options-for-armor-stands.patch +++ b/patches/server/0122-Movement-options-for-armor-stands.patch @@ -17,10 +17,10 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index a93ae9de698ce97e8603deb1075e6dc5aeaab274..2f8b5646222b86fa7ef908c9796d28e034702ec7 100644 +index e29f56c83e8ce237e9135fabcf2381130a1a790d..eaa290e87be6953466252f0ae60de7763813e23f 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -1936,7 +1936,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -1935,7 +1935,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess return this.isInWater() || flag; } diff --git a/patches/server/0123-Fix-stuck-in-portals.patch b/patches/server/0123-Fix-stuck-in-portals.patch index 1c3ecc080..cde8fe13a 100644 --- a/patches/server/0123-Fix-stuck-in-portals.patch +++ b/patches/server/0123-Fix-stuck-in-portals.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Fix stuck in portals diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 742c97e226987bccee3f1950ccee8755dddff11c..0f4fec0270add49795a9ef3a1461c512e12c1ea3 100644 +index ea2b179be7fe04bb690d7ff01dca0cc235636559..d1c5c334cf3d8ef6c34fcaac194fef693a594250 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -1348,6 +1348,7 @@ public class ServerPlayer extends Player { +@@ -1349,6 +1349,7 @@ public class ServerPlayer extends Player { playerlist.sendPlayerPermissionLevel(this); worldserver1.removePlayerImmediately(this, Entity.RemovalReason.CHANGED_DIMENSION); this.unsetRemoved(); @@ -17,10 +17,10 @@ index 742c97e226987bccee3f1950ccee8755dddff11c..0f4fec0270add49795a9ef3a1461c512 // 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 cd9df8fa121acb6b90976b9d6bdc3f16399734a0..2f16b454fb72dc3fce129b6326ba41eb2fcb6861 100644 +index eaa290e87be6953466252f0ae60de7763813e23f..afb96312f3c88a298799bd487e048d3d84252bf6 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -3223,12 +3223,15 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3222,12 +3222,15 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess return Vec3.directionFromRotation(this.getRotationVector()); } diff --git a/patches/server/0131-Config-to-ignore-nearby-mobs-when-sleeping.patch b/patches/server/0131-Config-to-ignore-nearby-mobs-when-sleeping.patch index 29cc238c3..66597622e 100644 --- a/patches/server/0131-Config-to-ignore-nearby-mobs-when-sleeping.patch +++ b/patches/server/0131-Config-to-ignore-nearby-mobs-when-sleeping.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Config to ignore nearby mobs when sleeping diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 146c2e46e0fb9a9358484a054f716d72b9750ed8..c9458551b1da419f484e9dce6b3fba8d79c2de79 100644 +index d1c5c334cf3d8ef6c34fcaac194fef693a594250..e0f0ad1fab5d980beb1bfdcd837504e2e94eea83 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -1505,7 +1505,7 @@ public class ServerPlayer extends Player { +@@ -1506,7 +1506,7 @@ public class ServerPlayer extends Player { return entitymonster.isPreventingPlayerRest(this); }); @@ -18,7 +18,7 @@ index 146c2e46e0fb9a9358484a054f716d72b9750ed8..c9458551b1da419f484e9dce6b3fba8d } } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index a71ce1e255bbb469d3c0a20853450130589af326..afcde828b7f39affd26cf3a52b744e0b37140694 100644 +index d7c0928a9e96e9c85877830ff5f8e929ce7284d5..c9a65ec607a306acb1f51b483d1b3f9901b07684 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -353,6 +353,7 @@ public class PurpurWorldConfig { diff --git a/patches/server/0143-Drowning-Settings.patch b/patches/server/0143-Drowning-Settings.patch index 6e2e5fb81..92cd252ff 100644 --- a/patches/server/0143-Drowning-Settings.patch +++ b/patches/server/0143-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 2f16b454fb72dc3fce129b6326ba41eb2fcb6861..324be0ae784cd7ae80ef6e2352010f1b08c55eaf 100644 +index afb96312f3c88a298799bd487e048d3d84252bf6..126a11c27deb848c86e81ae6e63610c5bb711956 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -3458,7 +3458,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3457,7 +3457,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } public int getMaxAirSupply() { @@ -18,7 +18,7 @@ index 2f16b454fb72dc3fce129b6326ba41eb2fcb6861..324be0ae784cd7ae80ef6e2352010f1b 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 eb7405f67d8812d2e1b8f629914ca319517614cb..4bc9a3ff5bb6959de2e6a5721f9889902ab88fe2 100644 +index 828d42cac52fb7f1f0ca50b46e5f15492c8c8707..70d8e252371a29832580e7e0b230f9b7534a9720 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java @@ -452,7 +452,7 @@ public abstract class LivingEntity extends Entity implements Attackable { diff --git a/patches/server/0148-Config-to-allow-for-unsafe-enchants.patch b/patches/server/0148-Config-to-allow-for-unsafe-enchants.patch index 7e350835a..731ca9f07 100644 --- a/patches/server/0148-Config-to-allow-for-unsafe-enchants.patch +++ b/patches/server/0148-Config-to-allow-for-unsafe-enchants.patch @@ -74,10 +74,10 @@ index 5cadd69bcae33b1de58806fcf40533850d976154..17067510990f575bf638f6a95ed0d964 ((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 4e5315c93e99dd3c1c27f48cdec9bd5a2cc70ec5..1b829ad61a25ef1e18adefe291d91fdb7401956d 100644 +index ddf746734697305c405c53d29066c8b3003f1bf9..d606c15385273796fbbd2b503cda6e262be358b2 100644 --- a/src/main/java/net/minecraft/world/item/ItemStack.java +++ b/src/main/java/net/minecraft/world/item/ItemStack.java -@@ -1226,6 +1226,16 @@ public final class ItemStack implements DataComponentHolder { +@@ -1228,6 +1228,16 @@ public final class ItemStack implements DataComponentHolder { return !((ItemEnchantments) this.getOrDefault(DataComponents.ENCHANTMENTS, ItemEnchantments.EMPTY)).isEmpty(); } @@ -95,7 +95,7 @@ index 4e5315c93e99dd3c1c27f48cdec9bd5a2cc70ec5..1b829ad61a25ef1e18adefe291d91fdb return (ItemEnchantments) this.getOrDefault(DataComponents.ENCHANTMENTS, ItemEnchantments.EMPTY); } diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index c60d0d1861fd24b74bfa93228357f27d524f4ce7..25b0eeb09f20601e8517f3dc413a72a3b05ac983 100644 +index 06b9b3777e58366608433adbd92e4c22083725cf..ac50ff035635f33ee8d4bb3363fb13a1d0a013df 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java @@ -285,14 +285,34 @@ public class PurpurConfig { diff --git a/patches/server/0157-Configurable-broadcast-settings.patch b/patches/server/0157-Configurable-broadcast-settings.patch index 9aa047eb9..bb0779a78 100644 --- a/patches/server/0157-Configurable-broadcast-settings.patch +++ b/patches/server/0157-Configurable-broadcast-settings.patch @@ -17,10 +17,10 @@ index 94893039363b5fe2d7d0622d0592bce2c867b1c3..ef520d1dd00ae9473c1f34e2df4d8b06 // 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 c38e4ebedf333454583b3cb66300ceeab4562a18..bb046b4afb38ba735bb772961ed51fb5845218e8 100644 +index e0f0ad1fab5d980beb1bfdcd837504e2e94eea83..af27cd5c111acfb99e8a6e1071181a89b94f7c25 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -1089,6 +1089,7 @@ public class ServerPlayer extends Player { +@@ -1090,6 +1090,7 @@ public class ServerPlayer extends Player { })); PlayerTeam scoreboardteam = this.getTeam(); diff --git a/patches/server/0169-API-for-any-mob-to-burn-daylight.patch b/patches/server/0169-API-for-any-mob-to-burn-daylight.patch index c3a524598..0f4975f2e 100644 --- a/patches/server/0169-API-for-any-mob-to-burn-daylight.patch +++ b/patches/server/0169-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 5f19cc285efac25b56a29242b41c2823020f170e..2d1fc8734f440c284710c71abc6789e8185ec909 100644 +index 126a11c27deb848c86e81ae6e63610c5bb711956..888e44f730725e6dee0a1414a3e75538dda87c14 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -562,6 +562,21 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -561,6 +561,21 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess return true; } @@ -32,7 +32,7 @@ index 5f19cc285efac25b56a29242b41c2823020f170e..2d1fc8734f440c284710c71abc6789e8 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 ce0d043f8839bb6b7fa2f6e1e721a26ffe33f77c..54a612dd2fcdf6972f7580fbd814f461df07b7f6 100644 +index 7eb32e29ce009b161599196eb28f0dca11dfc548..2fc36b716ce636929e2323651302fd76358dc3e2 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java @@ -274,6 +274,7 @@ public abstract class LivingEntity extends Entity implements Attackable { @@ -92,7 +92,7 @@ index ce0d043f8839bb6b7fa2f6e1e721a26ffe33f77c..54a612dd2fcdf6972f7580fbd814f461 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 77cf0d92212d11b9036f9f9cf23b23f71f1d590d..ee98efa69d67cd22eb5722cf68f3b7063e2595c8 100644 +index 456c3197cc72d63e9c53a768ca7bae45bb1fc722..9d532c373ca1762ad48b9b81000d2c11b929d220 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java @@ -1881,17 +1881,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Targeti @@ -361,7 +361,7 @@ index befe3372d5f1550b7bde3b63b5e7aef9035c5379..3c674ecd3b80501047b4593e88720342 Preconditions.checkArgument(entity != null, "Unknown entity"); diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java -index 11bd76d79bbfff68734d8ee1095f21c5c50e7bde..1a8a76aa31bd1d1670be6e9cada162c540084cf9 100644 +index 54537d1b981d690bc8c5a698fd07425a04070553..d5dfc97f40df7a7161bdaeb04ae6ca5e1a8c8a2b 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java @@ -1180,5 +1180,15 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { diff --git a/patches/server/0183-Store-placer-on-Block-when-placed.patch b/patches/server/0183-Store-placer-on-Block-when-placed.patch index eaf73e694..3f1ff2ba5 100644 --- a/patches/server/0183-Store-placer-on-Block-when-placed.patch +++ b/patches/server/0183-Store-placer-on-Block-when-placed.patch @@ -5,18 +5,18 @@ 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 1b829ad61a25ef1e18adefe291d91fdb7401956d..f93cb39c2664b74066bd9ac352137c11e612e5f9 100644 +index d606c15385273796fbbd2b503cda6e262be358b2..4934e912653361dc4af8306d3747850c0c0f4554 100644 --- a/src/main/java/net/minecraft/world/item/ItemStack.java +++ b/src/main/java/net/minecraft/world/item/ItemStack.java -@@ -475,6 +475,7 @@ public final class ItemStack implements DataComponentHolder { - world.preventPoiUpdated = true; // CraftBukkit - SPIGOT-5710 +@@ -476,6 +476,7 @@ public final class ItemStack implements DataComponentHolder { + world.isBlockPlaceCancelled = true; // Paper - prevent calling cleanup logic when undoing a block place upon a cancelled BlockPlaceEvent for (BlockState blockstate : blocks) { blockstate.update(true, false); + ((CraftBlock) blockstate.getBlock()).getNMS().getBlock().forgetPlacer(); // Purpur } + world.isBlockPlaceCancelled = false; // Paper - prevent calling cleanup logic when undoing a block place upon a cancelled BlockPlaceEvent world.preventPoiUpdated = false; - -@@ -506,6 +507,7 @@ public final class ItemStack implements DataComponentHolder { +@@ -508,6 +509,7 @@ public final class ItemStack implements DataComponentHolder { if (!(block.getBlock() instanceof BaseEntityBlock)) { // Containers get placed automatically block.onPlace(world, newblockposition, oldBlock, true, context); // Paper - pass context } diff --git a/patches/server/0185-Customizable-sleeping-actionbar-messages.patch b/patches/server/0185-Customizable-sleeping-actionbar-messages.patch index 2834d4aee..5cbda6436 100644 --- a/patches/server/0185-Customizable-sleeping-actionbar-messages.patch +++ b/patches/server/0185-Customizable-sleeping-actionbar-messages.patch @@ -5,7 +5,7 @@ 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 1dc58b41d3963c2adc58e79cd6db7e146ac049ad..83ec2e31d81d6209953252a3780552c3cf110c68 100644 +index 154c9b0e747c38e55e6b2f4658c2add452a65ae4..7a18a6f0c88ba4e8a15606aae4839ed3150b7f4d 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java @@ -1231,11 +1231,27 @@ public class ServerLevel extends Level implements WorldGenLevel { @@ -38,10 +38,10 @@ index 1dc58b41d3963c2adc58e79cd6db7e146ac049ad..83ec2e31d81d6209953252a3780552c3 } diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 2b10087cf34be4c36d8596d0263d68476bb1a521..7bb82c9b652a509c2bf1a43ed82a5da709fb2cb2 100644 +index af27cd5c111acfb99e8a6e1071181a89b94f7c25..00572e66b50d9e6489871f629e45c36b0ca47715 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -1546,7 +1546,19 @@ public class ServerPlayer extends Player { +@@ -1547,7 +1547,19 @@ public class ServerPlayer extends Player { }); if (!this.serverLevel().canSleepThroughNights()) { @@ -63,7 +63,7 @@ index 2b10087cf34be4c36d8596d0263d68476bb1a521..7bb82c9b652a509c2bf1a43ed82a5da7 ((ServerLevel) this.level()).updateSleepingPlayerList(); diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index 16239aafded82b4f19f97ae5fd87c53b55a5ef53..e4188163e7a9dda878e72ae84a1b5cb28c23510d 100644 +index 1578f7a30e575a353a8a7ac286ab4e212dc3f9cc..297e02900adb7251cc0449db47490d26dec3f62f 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java @@ -186,6 +186,9 @@ public class PurpurConfig { diff --git a/patches/server/0190-Add-compass-command.patch b/patches/server/0190-Add-compass-command.patch index 9c9b87963..db4e093b8 100644 --- a/patches/server/0190-Add-compass-command.patch +++ b/patches/server/0190-Add-compass-command.patch @@ -5,7 +5,7 @@ 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 f11d6bb515217088ef1192653998a77ddce67edf..9a91a29614823e10f59aeaa156d85f7229bfb497 100644 +index 2afedee0f62f71bc5cdd7e54d73dd5bb84072a18..157a8cd3599a196f1c12f56ad4c5aa68898a1960 100644 --- a/src/main/java/net/minecraft/commands/Commands.java +++ b/src/main/java/net/minecraft/commands/Commands.java @@ -257,6 +257,7 @@ public class Commands { @@ -17,7 +17,7 @@ index f11d6bb515217088ef1192653998a77ddce67edf..9a91a29614823e10f59aeaa156d85f72 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 58b066793a6248b4627f6b81921412971828e313..cce4ebb350ba09323c59903991e4f6f289d2cb53 100644 +index 00572e66b50d9e6489871f629e45c36b0ca47715..03a1eceaed065b7f33d830414136ed3c07c2034c 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java @@ -300,6 +300,7 @@ public class ServerPlayer extends Player { @@ -28,7 +28,7 @@ index 58b066793a6248b4627f6b81921412971828e313..cce4ebb350ba09323c59903991e4f6f2 // 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)); -@@ -611,6 +612,7 @@ public class ServerPlayer extends Player { +@@ -612,6 +613,7 @@ public class ServerPlayer extends Player { } if (nbt.contains("Purpur.TPSBar")) { this.tpsBar = nbt.getBoolean("Purpur.TPSBar"); } // Purpur @@ -36,7 +36,7 @@ index 58b066793a6248b4627f6b81921412971828e313..cce4ebb350ba09323c59903991e4f6f2 } @Override -@@ -688,6 +690,7 @@ public class ServerPlayer extends Player { +@@ -689,6 +691,7 @@ public class ServerPlayer extends Player { } nbt.putBoolean("Purpur.TPSBar", this.tpsBar); // Purpur @@ -44,7 +44,7 @@ index 58b066793a6248b4627f6b81921412971828e313..cce4ebb350ba09323c59903991e4f6f2 } // CraftBukkit start - World fallback code, either respawn location or global spawn -@@ -3017,5 +3020,13 @@ public class ServerPlayer extends Player { +@@ -3018,5 +3021,13 @@ public class ServerPlayer extends Player { public void tpsBar(boolean tpsBar) { this.tpsBar = tpsBar; } diff --git a/patches/server/0217-Signs-allow-color-codes.patch b/patches/server/0217-Signs-allow-color-codes.patch index f547212e5..99be6c994 100644 --- a/patches/server/0217-Signs-allow-color-codes.patch +++ b/patches/server/0217-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 e9d9cb47221075447aac66dd30ce6e8f08962cf5..635e6b46081ec0078b687818310e623cbbf1cc1f 100644 +index 03a1eceaed065b7f33d830414136ed3c07c2034c..a5566e52d839191add236a6ff7245d1b7617fc37 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -1683,6 +1683,7 @@ public class ServerPlayer extends Player { +@@ -1684,6 +1684,7 @@ public class ServerPlayer extends Player { @Override public void openTextEdit(SignBlockEntity sign, boolean front) { @@ -84,7 +84,7 @@ index a28be7a332659be655f419d969e0c64e659b6c21..8cd812a25b1cc05ea14675658bf9c150 public ClientboundBlockEntityDataPacket getUpdatePacket() { return ClientboundBlockEntityDataPacket.create(this); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index abe3614f2286db8945bc6c4eadd01ec8a7f93555..6fce1773a4b5008f3234e06b556bf12e140eb1c1 100644 +index 1474de310551a68d2c14980f6076381c66a46f85..7c46618ae3934646a2badb94872ad12ad7b020d8 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -1041,6 +1041,11 @@ public class PurpurWorldConfig { diff --git a/patches/server/0253-Add-toggle-for-RNG-manipulation.patch b/patches/server/0253-Add-toggle-for-RNG-manipulation.patch index 996a45aaf..4130a3e2d 100644 --- a/patches/server/0253-Add-toggle-for-RNG-manipulation.patch +++ b/patches/server/0253-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 2d1fc8734f440c284710c71abc6789e8185ec909..68e8f9913055219486ce19d95dcf9d7c76e08082 100644 +index 888e44f730725e6dee0a1414a3e75538dda87c14..13f69b9ceb082a013dfe2de2d5807dde77d53a2f 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -597,7 +597,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -596,7 +596,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess this.bb = Entity.INITIAL_AABB; this.stuckSpeedMultiplier = Vec3.ZERO; this.nextStep = 1.0F; @@ -33,7 +33,7 @@ index b86676ebcd6c301e5dd857d8e84e1db2c1da416b..cb950ba3ee3bdfe0ff7acdb94c7ee233 } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 9e884018d72ad9b63b8968551223451ecc09b547..f50c26f02bc7c95f7b1228588aff68296290c21b 100644 +index e1e22c05b263c9fd4c2d58d5b75f5fbd0025e76f..fdc2b8823acf81f10b3502335eb93a480b69d328 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -212,9 +212,11 @@ public class PurpurWorldConfig { diff --git a/patches/server/0254-Remove-Timings.patch b/patches/server/0254-Remove-Timings.patch index 8c8fe6db4..d285248f3 100644 --- a/patches/server/0254-Remove-Timings.patch +++ b/patches/server/0254-Remove-Timings.patch @@ -727,10 +727,10 @@ index 85b4b24361e785acf75571ff98f924c00ae80748..09a7b418ddf564c0be13297f7c216db2 } diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index 6e25a2ea1694a681c0b648b45c7b8be1458f2ea9..90313f228944cc37f6af5ff5fcc679f423a26d14 100644 +index f81a73b0ca751086cb13a9e4fef227356429209b..a09e27a34631b779ca0170da7abc0bcb2559c5d2 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java -@@ -1297,15 +1297,15 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -1298,15 +1298,15 @@ public abstract class Level implements LevelAccessor, AutoCloseable { ProfilerFiller gameprofilerfiller = this.getProfiler(); gameprofilerfiller.push("blockEntities"); @@ -749,7 +749,7 @@ index 6e25a2ea1694a681c0b648b45c7b8be1458f2ea9..90313f228944cc37f6af5ff5fcc679f4 // Spigot start // Iterator iterator = this.blockEntityTickers.iterator(); boolean flag = this.tickRateManager().runsNormally(); -@@ -1334,7 +1334,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -1335,7 +1335,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { } this.blockEntityTickers.removeAll(toRemove); // Paper - Fix MC-117075 @@ -781,7 +781,7 @@ index ed8032495af9ce9c23419224814b8d27e4a97c17..2812505185df691e8f08932aa0bba162 } 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 2a8609e33716949ff1877b6d10f64a9d7a7c81e9..e8d14bf4120dd9861e4ccb8bd6c14e175343c55d 100644 +index 14ee7b5b9b804bebd4e2a846b238547a28a36035..a9ed6255be8505cb8d067dbf8f665aacda618716 100644 --- a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java +++ b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java @@ -785,7 +785,7 @@ public class LevelChunk extends ChunkAccess { diff --git a/patches/server/0255-Remove-Mojang-Profiler.patch b/patches/server/0255-Remove-Mojang-Profiler.patch index ff6b7e73d..ebed3a705 100644 --- a/patches/server/0255-Remove-Mojang-Profiler.patch +++ b/patches/server/0255-Remove-Mojang-Profiler.patch @@ -5,7 +5,7 @@ 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 9a91a29614823e10f59aeaa156d85f7229bfb497..5c048dc779b29c4903dc63daa8a1f9bf54270ba1 100644 +index 157a8cd3599a196f1c12f56ad4c5aa68898a1960..5e846fe5b1b13abf10d3d36c2a78472dc2bd0e42 100644 --- a/src/main/java/net/minecraft/commands/Commands.java +++ b/src/main/java/net/minecraft/commands/Commands.java @@ -166,7 +166,7 @@ public class Commands { @@ -826,10 +826,10 @@ index b727c707ef46a9387fc225b51ef050c6baff1c74..7924e3c597164f71056cd58dd167ee8b 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 d3d6febb1942b59e6e0e90259acdef22d344a853..12d55da2cd14a497effe16f5d33b5bcba6cb22c1 100644 +index a5566e52d839191add236a6ff7245d1b7617fc37..375d1532d267f4fbc735eede99eddc6f7f25103c 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -1317,7 +1317,7 @@ public class ServerPlayer extends Player { +@@ -1318,7 +1318,7 @@ public class ServerPlayer extends Player { PortalInfo shapedetectorshape = this.findDimensionEntryPoint(worldserver); if (shapedetectorshape != null) { @@ -838,7 +838,7 @@ index d3d6febb1942b59e6e0e90259acdef22d344a853..12d55da2cd14a497effe16f5d33b5bcb 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 -@@ -1340,8 +1340,8 @@ public class ServerPlayer extends Player { +@@ -1341,8 +1341,8 @@ public class ServerPlayer extends Player { worldserver = ((CraftWorld) exit.getWorld()).getHandle(); // CraftBukkit end @@ -849,7 +849,7 @@ index d3d6febb1942b59e6e0e90259acdef22d344a853..12d55da2cd14a497effe16f5d33b5bcb if (true) { // CraftBukkit this.isChangingDimension = true; // CraftBukkit - Set teleport invulnerability only if player changing worlds -@@ -1359,7 +1359,7 @@ public class ServerPlayer extends Player { +@@ -1360,7 +1360,7 @@ public class ServerPlayer extends Player { this.connection.teleport(exit); // CraftBukkit - use internal teleport without event this.connection.resetPosition(); worldserver.addDuringPortalTeleport(this); @@ -1085,10 +1085,10 @@ index a715ecf4a8ac91d3e5e5c6269d89e54b2c1cd279..223c3665126c576eddb1a8f7c9f5bc60 }; } diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 81c10d07d28e5158e0f248e02939f562fa20d65c..597c8934264d4d541494e7ce2375a0b403dcc68c 100644 +index 13f69b9ceb082a013dfe2de2d5807dde77d53a2f..57aa9f71a3b27073f3e229ecd342c52546d151b3 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -897,7 +897,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -896,7 +896,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess // CraftBukkit end public void baseTick() { @@ -1097,7 +1097,7 @@ index 81c10d07d28e5158e0f248e02939f562fa20d65c..597c8934264d4d541494e7ce2375a0b4 if (firstTick && this instanceof net.minecraft.world.entity.NeutralMob neutralMob) neutralMob.tickInitialPersistentAnger(level); // Paper - Prevent entity loading causing async lookups this.inBlockState = null; if (this.isPassenger() && this.getVehicle().isRemoved()) { -@@ -958,7 +958,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -957,7 +957,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } this.firstTick = false; @@ -1106,7 +1106,7 @@ index 81c10d07d28e5158e0f248e02939f562fa20d65c..597c8934264d4d541494e7ce2375a0b4 } public void setSharedFlagOnFire(boolean onFire) { -@@ -1175,7 +1175,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -1174,7 +1174,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } } @@ -1115,7 +1115,7 @@ index 81c10d07d28e5158e0f248e02939f562fa20d65c..597c8934264d4d541494e7ce2375a0b4 if (this.stuckSpeedMultiplier.lengthSqr() > 1.0E-7D) { movement = movement.multiply(this.stuckSpeedMultiplier); this.stuckSpeedMultiplier = Vec3.ZERO; -@@ -1184,7 +1184,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -1183,7 +1183,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess // Paper start - ignore movement changes while inactive. if (isTemporarilyActive && !(this instanceof ItemEntity) && movement == getDeltaMovement() && movementType == MoverType.SELF) { setDeltaMovement(Vec3.ZERO); @@ -1124,7 +1124,7 @@ index 81c10d07d28e5158e0f248e02939f562fa20d65c..597c8934264d4d541494e7ce2375a0b4 return; } // Paper end -@@ -1205,8 +1205,8 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -1204,8 +1204,8 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess this.setPos(this.getX() + vec3d1.x, this.getY() + vec3d1.y, this.getZ() + vec3d1.z); } @@ -1135,7 +1135,7 @@ index 81c10d07d28e5158e0f248e02939f562fa20d65c..597c8934264d4d541494e7ce2375a0b4 boolean flag = !Mth.equal(movement.x, vec3d1.x); boolean flag1 = !Mth.equal(movement.z, vec3d1.z); -@@ -1225,7 +1225,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -1224,7 +1224,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess this.checkFallDamage(vec3d1.y, this.onGround(), iblockdata, blockposition); if (this.isRemoved()) { @@ -1144,7 +1144,7 @@ index 81c10d07d28e5158e0f248e02939f562fa20d65c..597c8934264d4d541494e7ce2375a0b4 } else { if (this.horizontalCollision) { Vec3 vec3d2 = this.getDeltaMovement(); -@@ -1363,7 +1363,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -1362,7 +1362,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess this.setRemainingFireTicks(-this.getFireImmuneTicks()); } @@ -1153,7 +1153,7 @@ index 81c10d07d28e5158e0f248e02939f562fa20d65c..597c8934264d4d541494e7ce2375a0b4 } } // Paper start - detailed watchdog information -@@ -3264,7 +3264,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3263,7 +3263,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess ServerLevel worldserver1 = minecraftserver.getLevel(resourcekey); if (true && !this.isPassenger() && this.portalTime++ >= i) { // CraftBukkit @@ -1162,7 +1162,7 @@ index 81c10d07d28e5158e0f248e02939f562fa20d65c..597c8934264d4d541494e7ce2375a0b4 this.portalTime = i; // Paper start - Add EntityPortalReadyEvent 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); -@@ -3282,7 +3282,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3281,7 +3281,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } } // Paper - Add EntityPortalReadyEvent // CraftBukkit end @@ -1171,7 +1171,7 @@ index 81c10d07d28e5158e0f248e02939f562fa20d65c..597c8934264d4d541494e7ce2375a0b4 } this.isInsidePortal = false; -@@ -3742,14 +3742,14 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3741,14 +3741,14 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } // Paper end - Fix item duplication and teleport issues if (this.level() instanceof ServerLevel && !this.isRemoved()) { @@ -1188,7 +1188,7 @@ index 81c10d07d28e5158e0f248e02939f562fa20d65c..597c8934264d4d541494e7ce2375a0b4 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) { -@@ -3788,7 +3788,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3787,7 +3787,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess this.unRide(); // CraftBukkit end @@ -1197,7 +1197,7 @@ index 81c10d07d28e5158e0f248e02939f562fa20d65c..597c8934264d4d541494e7ce2375a0b4 // Paper start - Fix item duplication and teleport issues if (this instanceof Mob) { ((Mob) this).dropLeash(true, true); // Paper drop lead -@@ -3815,10 +3815,10 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3814,10 +3814,10 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } this.removeAfterChangingDimensions(); @@ -1211,7 +1211,7 @@ index 81c10d07d28e5158e0f248e02939f562fa20d65c..597c8934264d4d541494e7ce2375a0b4 } } else { diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 93670b0ca36eed241075168e5724fcffb14e83e3..7c020efc033ecdd0582ba972063d6de486699498 100644 +index 09a00496c003f875e07c249c4a601ec598af0e5e..94bd8a91dba30b2682f245efccc199dbf71212f8 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java @@ -423,7 +423,7 @@ public abstract class LivingEntity extends Entity implements Attackable { @@ -1322,7 +1322,7 @@ index 93670b0ca36eed241075168e5724fcffb14e83e3..7c020efc033ecdd0582ba972063d6de4 // 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 ee98efa69d67cd22eb5722cf68f3b7063e2595c8..56da8a4600688efd1987d82d4fcad1757e33f4f2 100644 +index 9d532c373ca1762ad48b9b81000d2c11b929d220..429d8b09496d7d6ffc5f44dca953d6194683813b 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java @@ -376,13 +376,13 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Targeti @@ -1645,7 +1645,7 @@ index b98a34357e59168bbb22c967b86a449fc91f47f0..09c4cf772df4644413e40055fedcdf42 } 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 79c27b5717fec000ea94138ebc76dbabf5b2eeaf..4e855055abe4d300b6b126e8a9deecaab5827a33 100644 +index fab01a3e779e39962ef04305540e2fe3043072a2..4feddea8703d25a671fe11617f99e1fa9c1deaa2 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 @@ -224,13 +224,13 @@ public class Goat extends Animal { @@ -1834,10 +1834,10 @@ index 082b804f4793f72e76361f5427f0358273454b3d..bd5fcb028d41b60de183b4d849f1ba10 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 90313f228944cc37f6af5ff5fcc679f423a26d14..487bb3e75afc5871a79506a54f0f4af806460b14 100644 +index a09e27a34631b779ca0170da7abc0bcb2559c5d2..4beada452d014ec7dc7c167466ec2af3c5bfcd33 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java -@@ -1294,9 +1294,9 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -1295,9 +1295,9 @@ public abstract class Level implements LevelAccessor, AutoCloseable { } protected void tickBlockEntities() { @@ -1849,7 +1849,7 @@ index 90313f228944cc37f6af5ff5fcc679f423a26d14..487bb3e75afc5871a79506a54f0f4af8 //this.timings.tileEntityPending.startTiming(); // Spigot // Purpur this.tickingBlockEntities = true; if (!this.pendingBlockEntityTickers.isEmpty()) { -@@ -1337,7 +1337,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -1338,7 +1338,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 @@ -1858,7 +1858,7 @@ index 90313f228944cc37f6af5ff5fcc679f423a26d14..487bb3e75afc5871a79506a54f0f4af8 this.spigotConfig.currentPrimedTnt = 0; // Spigot } -@@ -1552,7 +1552,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -1553,7 +1553,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { @Override public List getEntities(@Nullable Entity except, AABB box, Predicate predicate) { @@ -1867,7 +1867,7 @@ index 90313f228944cc37f6af5ff5fcc679f423a26d14..487bb3e75afc5871a79506a54f0f4af8 List list = Lists.newArrayList(); ((ServerLevel)this).getEntityLookup().getEntities(except, box, list, predicate); // Paper - optimise this call return list; -@@ -1571,7 +1571,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -1572,7 +1572,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { } public void getEntities(EntityTypeTest filter, AABB box, Predicate predicate, List result, int limit) { @@ -1876,7 +1876,7 @@ index 90313f228944cc37f6af5ff5fcc679f423a26d14..487bb3e75afc5871a79506a54f0f4af8 // Paper start - optimise this call //TODO use limit if (filter instanceof net.minecraft.world.entity.EntityType entityTypeTest) { -@@ -1826,6 +1826,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -1827,6 +1827,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { } public ProfilerFiller getProfiler() { @@ -1907,7 +1907,7 @@ index 2812505185df691e8f08932aa0bba162a7d9db86..35e94c06361795d032f995e8282f8b35 // Paper start - Add mobcaps commands 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 e8d14bf4120dd9861e4ccb8bd6c14e175343c55d..fd637415625fdabcac07e120e9168d09c06141d4 100644 +index a9ed6255be8505cb8d067dbf8f665aacda618716..8fea185d3b7213dfef3c94ab7cc38bd008c38d29 100644 --- a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java +++ b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java @@ -443,11 +443,11 @@ public class LevelChunk extends ChunkAccess { diff --git a/patches/server/0262-Implement-ram-and-rambar-commands.patch b/patches/server/0262-Implement-ram-and-rambar-commands.patch index 63976f70a..2e299a7f4 100644 --- a/patches/server/0262-Implement-ram-and-rambar-commands.patch +++ b/patches/server/0262-Implement-ram-and-rambar-commands.patch @@ -5,7 +5,7 @@ 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 5c048dc779b29c4903dc63daa8a1f9bf54270ba1..96872be696c68b49586e95cca3df6f6f1759a0e4 100644 +index 5e846fe5b1b13abf10d3d36c2a78472dc2bd0e42..65ede1d284692f71bb97b814b171f47cbe877b89 100644 --- a/src/main/java/net/minecraft/commands/Commands.java +++ b/src/main/java/net/minecraft/commands/Commands.java @@ -258,6 +258,8 @@ public class Commands { @@ -18,7 +18,7 @@ index 5c048dc779b29c4903dc63daa8a1f9bf54270ba1..96872be696c68b49586e95cca3df6f6f 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 12d55da2cd14a497effe16f5d33b5bcba6cb22c1..a7ba658a4dc6eeb9d5bc854289c21b3bd21646b1 100644 +index 375d1532d267f4fbc735eede99eddc6f7f25103c..4a29e90ff2a0fe9c5be094400d79ab89e61c437d 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java @@ -301,6 +301,7 @@ public class ServerPlayer extends Player { @@ -29,7 +29,7 @@ index 12d55da2cd14a497effe16f5d33b5bcba6cb22c1..a7ba658a4dc6eeb9d5bc854289c21b3b // 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)); -@@ -613,6 +614,7 @@ public class ServerPlayer extends Player { +@@ -614,6 +615,7 @@ public class ServerPlayer extends Player { if (nbt.contains("Purpur.TPSBar")) { this.tpsBar = nbt.getBoolean("Purpur.TPSBar"); } // Purpur if (nbt.contains("Purpur.CompassBar")) { this.compassBar = nbt.getBoolean("Purpur.CompassBar"); } // Purpur @@ -37,7 +37,7 @@ index 12d55da2cd14a497effe16f5d33b5bcba6cb22c1..a7ba658a4dc6eeb9d5bc854289c21b3b } @Override -@@ -689,6 +691,7 @@ public class ServerPlayer extends Player { +@@ -690,6 +692,7 @@ public class ServerPlayer extends Player { }); } @@ -45,7 +45,7 @@ index 12d55da2cd14a497effe16f5d33b5bcba6cb22c1..a7ba658a4dc6eeb9d5bc854289c21b3b nbt.putBoolean("Purpur.TPSBar", this.tpsBar); // Purpur nbt.putBoolean("Purpur.CompassBar", this.compassBar); // Purpur } -@@ -3029,5 +3032,13 @@ public class ServerPlayer extends Player { +@@ -3030,5 +3033,13 @@ public class ServerPlayer extends Player { public void compassBar(boolean compassBar) { this.compassBar = compassBar; } diff --git a/patches/server/0271-Fire-Immunity-API.patch b/patches/server/0271-Fire-Immunity-API.patch index 2a3980e0f..1f47cad5e 100644 --- a/patches/server/0271-Fire-Immunity-API.patch +++ b/patches/server/0271-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 2c3ad553272ad651e6ca26917719e6d9fffdef68..7a27388b5155e7b2478b0daa02cb616829a5d4a2 100644 +index 57aa9f71a3b27073f3e229ecd342c52546d151b3..8609cb9946aab1b47d9453dbd200b6414e567499 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -427,6 +427,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -426,6 +426,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess private UUID originWorld; public boolean freezeLocked = false; // Paper - Freeze Tick Lock API public boolean fixedPose = false; // Paper - Expand Pose API @@ -16,7 +16,7 @@ index 2c3ad553272ad651e6ca26917719e6d9fffdef68..7a27388b5155e7b2478b0daa02cb6168 public void setOrigin(@javax.annotation.Nonnull Location location) { this.origin = location.toVector(); -@@ -1878,7 +1879,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -1877,7 +1878,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } public boolean fireImmune() { @@ -25,7 +25,7 @@ index 2c3ad553272ad651e6ca26917719e6d9fffdef68..7a27388b5155e7b2478b0daa02cb6168 } public boolean causeFallDamage(float fallDistance, float damageMultiplier, DamageSource damageSource) { -@@ -2575,6 +2576,11 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -2574,6 +2575,11 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess nbttagcompound.putBoolean("Paper.FreezeLock", true); } // Paper end @@ -37,7 +37,7 @@ index 2c3ad553272ad651e6ca26917719e6d9fffdef68..7a27388b5155e7b2478b0daa02cb6168 return nbttagcompound; } catch (Throwable throwable) { CrashReport crashreport = CrashReport.forThrowable(throwable, "Saving entity NBT"); -@@ -2722,6 +2728,11 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -2721,6 +2727,11 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess freezeLocked = nbt.getBoolean("Paper.FreezeLock"); } // Paper end diff --git a/patches/server/0272-Add-option-to-teleport-to-spawn-on-nether-ceiling-da.patch b/patches/server/0272-Add-option-to-teleport-to-spawn-on-nether-ceiling-da.patch index 5935e653e..67470a2d8 100644 --- a/patches/server/0272-Add-option-to-teleport-to-spawn-on-nether-ceiling-da.patch +++ b/patches/server/0272-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 7a27388b5155e7b2478b0daa02cb616829a5d4a2..3aae4fa4176c0bf170f4532ae187e3122c142a6a 100644 +index 8609cb9946aab1b47d9453dbd200b6414e567499..0c02fcbf76506bf2fc1ca2a16f361947ff6365b7 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -972,6 +972,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -971,6 +971,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess && this.level.paperConfig().environment.netherCeilingVoidDamageHeight.test(v -> this.getY() >= v) && (!(this instanceof Player player) || !player.getAbilities().invulnerable))) { // Paper end - Configurable nether ceiling damage @@ -17,7 +17,7 @@ index 7a27388b5155e7b2478b0daa02cb616829a5d4a2..3aae4fa4176c0bf170f4532ae187e312 } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 6d4d76eff2372edd7ecceb619c3b6650bd779fa2..7a86b8a64d79128176cf0c40133494d88a50a561 100644 +index d5762258fd0611388bfc5fb5e92045d4fc0f4919..85bb68d172be1dceb69e26b7092a0b7876cb684f 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -425,6 +425,7 @@ public class PurpurWorldConfig { diff --git a/patches/server/0273-Added-got-ram-event.patch b/patches/server/0273-Added-got-ram-event.patch index 9809d3a17..ed9151652 100644 --- a/patches/server/0273-Added-got-ram-event.patch +++ b/patches/server/0273-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 4e855055abe4d300b6b126e8a9deecaab5827a33..6a3c68839d3b993c82fabd4e17f53e38ce9c38f7 100644 +index 4feddea8703d25a671fe11617f99e1fa9c1deaa2..aa548cba6134652751d73b6774e88f9f6d9ee0ed 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 -@@ -427,6 +427,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) { From ec1b4fa7ad3101638fc9a4542fc24153e03ce61f Mon Sep 17 00:00:00 2001 From: granny Date: Tue, 28 May 2024 13:13:18 -0700 Subject: [PATCH 030/588] Updated Upstream (Paper) Upstream has released updates that appear to apply and compile correctly Paper Changes: PaperMC/Paper@23fe116 Fix missing debug trace PaperMC/Paper@b0c9b9c Only remove worldgen block entity on changed block (#10794) PaperMC/Paper@9c917fe [ci skip] Clean up paperclip build-pr workflow (#10802) PaperMC/Paper@9d6f2cc [ci skip] Rebuild patches (#10803) --- gradle.properties | 2 +- patches/server/0002-Purpur-config-files.patch | 4 ++-- patches/server/0011-Bring-back-server-name.patch | 4 ++-- patches/server/0013-Lagging-threshold.patch | 4 ++-- patches/server/0056-Add-5-second-tps-average-in-tps.patch | 4 ++-- .../0203-Added-the-ability-to-add-combustible-items.patch | 4 ++-- patches/server/0258-Debug-Marker-API.patch | 4 ++-- 7 files changed, 13 insertions(+), 13 deletions(-) diff --git a/gradle.properties b/gradle.properties index f64d78628..a84ef5c85 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ group = org.purpurmc.purpur version = 1.20.6-R0.1-SNAPSHOT mcVersion = 1.20.6 -paperCommit = 347bbe389786d5cdae7cd1c6ec32cacba2a9aac7 +paperCommit = 9d6f2cced75c1a433c508ab531a61872bce73854 org.gradle.caching = true org.gradle.parallel = true diff --git a/patches/server/0002-Purpur-config-files.patch b/patches/server/0002-Purpur-config-files.patch index 394c11c6b..29b41f120 100644 --- a/patches/server/0002-Purpur-config-files.patch +++ b/patches/server/0002-Purpur-config-files.patch @@ -112,7 +112,7 @@ index 14281a4e72f49dc4eb2ca3da8479c1f81a3a175d..be8bc5b5d5fdf41da40fb5aef9e6bb16 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 af015237214cebc4d1c4bb9e9c5f939d433e365c..68902ec8122314d75d70ebdd3e7392cca8a6c53c 100644 +index 94a31c8f903eb61eb6d203e8e6fe8fb0beca28b1..934b942d1e8fdd0b9b3c1f704d514f06a9556623 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -1033,6 +1033,7 @@ public final class CraftServer implements Server { @@ -139,7 +139,7 @@ index af015237214cebc4d1c4bb9e9c5f939d433e365c..68902ec8122314d75d70ebdd3e7392cc this.overrideAllCommandBlockCommands = this.commandsConfiguration.getStringList("command-block-overrides").contains("*"); this.ignoreVanillaPermissions = this.commandsConfiguration.getBoolean("ignore-vanilla-permissions"); -@@ -3029,6 +3032,18 @@ public final class CraftServer implements Server { +@@ -3030,6 +3033,18 @@ public final class CraftServer implements Server { return CraftServer.this.console.paperConfigurations.createLegacyObject(CraftServer.this.console); } diff --git a/patches/server/0011-Bring-back-server-name.patch b/patches/server/0011-Bring-back-server-name.patch index 2f79b0d78..017be150b 100644 --- a/patches/server/0011-Bring-back-server-name.patch +++ b/patches/server/0011-Bring-back-server-name.patch @@ -17,10 +17,10 @@ index 9d10cdacb3aed2c00dc60aeb6f2cbeb48905e21f..842f382de43df5d5c321422372ec30cc public final boolean spawnNpcs = this.get("spawn-npcs", true); public final boolean pvp = this.get("pvp", true); diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 68902ec8122314d75d70ebdd3e7392cca8a6c53c..cfa894a74ce616306fcc55664b29166e36c74ee1 100644 +index 934b942d1e8fdd0b9b3c1f704d514f06a9556623..635666762408b9e62ace15703c75f2dbcc768967 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -3271,4 +3271,11 @@ public final class CraftServer implements Server { +@@ -3272,4 +3272,11 @@ public final class CraftServer implements Server { return this.potionBrewer; } // Paper end diff --git a/patches/server/0013-Lagging-threshold.patch b/patches/server/0013-Lagging-threshold.patch index 72321f996..9a555e3c3 100644 --- a/patches/server/0013-Lagging-threshold.patch +++ b/patches/server/0013-Lagging-threshold.patch @@ -25,10 +25,10 @@ index 6464cf3cf027d894d18d1a24495952d304151648..87957873de7f8cea2ae84abf04c99a42 } // Paper end - further improve server tick loop diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index cfa894a74ce616306fcc55664b29166e36c74ee1..19dd84902702d3c2fcff624b81c4b23fee9e9948 100644 +index 635666762408b9e62ace15703c75f2dbcc768967..e1f7b8c6edbecc1cfdc35a3d508044dcc984e647 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -3277,5 +3277,10 @@ public final class CraftServer implements Server { +@@ -3278,5 +3278,10 @@ public final class CraftServer implements Server { public String getServerName() { return this.getProperties().serverName; } diff --git a/patches/server/0056-Add-5-second-tps-average-in-tps.patch b/patches/server/0056-Add-5-second-tps-average-in-tps.patch index 9ad42041d..d3028581e 100644 --- a/patches/server/0056-Add-5-second-tps-average-in-tps.patch +++ b/patches/server/0056-Add-5-second-tps-average-in-tps.patch @@ -74,10 +74,10 @@ index 096c89bd01cec2abd151bf6fffc4847d1bcd548f..cd0a8a6a1be75cab8bbb8ee3ac17bb73 this.values[this.vp++ & 0xFF] = (int)(l * 100L / Runtime.getRuntime().maxMemory()); this.repaint(); diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 19dd84902702d3c2fcff624b81c4b23fee9e9948..8bfb9c9445200b142af3bf9118c0f7c2d1b11501 100644 +index e1f7b8c6edbecc1cfdc35a3d508044dcc984e647..70e252cbd6d516875b0e6de1f51b9afb34c58f48 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -3073,6 +3073,7 @@ public final class CraftServer implements Server { +@@ -3074,6 +3074,7 @@ public final class CraftServer implements Server { @Override public double[] getTPS() { return new double[] { diff --git a/patches/server/0203-Added-the-ability-to-add-combustible-items.patch b/patches/server/0203-Added-the-ability-to-add-combustible-items.patch index 30dba06a7..51a0d973d 100644 --- a/patches/server/0203-Added-the-ability-to-add-combustible-items.patch +++ b/patches/server/0203-Added-the-ability-to-add-combustible-items.patch @@ -51,10 +51,10 @@ index ce2c424068001eec16032361baa206f6a5aa5332..c02d638b8f117156c815821207a91c55 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 8bfb9c9445200b142af3bf9118c0f7c2d1b11501..5e538df03bdbad95227acee2c96d5e03f6b153f8 100644 +index 70e252cbd6d516875b0e6de1f51b9afb34c58f48..d78062e40bb4cec0f69c58de305527a640799a53 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -1570,6 +1570,19 @@ public final class CraftServer implements Server { +@@ -1571,6 +1571,19 @@ public final class CraftServer implements Server { return true; } diff --git a/patches/server/0258-Debug-Marker-API.patch b/patches/server/0258-Debug-Marker-API.patch index 1812ad4e4..8677c2995 100644 --- a/patches/server/0258-Debug-Marker-API.patch +++ b/patches/server/0258-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 5e538df03bdbad95227acee2c96d5e03f6b153f8..3542dde0942a0354e77dacf25811ee46c0eace21 100644 +index d78062e40bb4cec0f69c58de305527a640799a53..a207163168ff3ac6827bec209a24ee92c0c1dfe5 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -1581,6 +1581,42 @@ public final class CraftServer implements Server { +@@ -1582,6 +1582,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))); } From b1464f3bf7c39370cc89268b58a975eaffab0bbe Mon Sep 17 00:00:00 2001 From: granny Date: Wed, 29 May 2024 15:23:57 -0700 Subject: [PATCH 031/588] Updated Upstream (Paper) Upstream has released updates that appear to apply and compile correctly Paper Changes: PaperMC/Paper@84f6e6e Fix max temper API for llama (#10823) PaperMC/Paper@672c077 handle BODY slot for non-mobs (#10822) PaperMC/Paper@716b868 Use RegistryOps for loadAdvancement (#10799) PaperMC/Paper@d9e659a Allow firework effects with no colors (#10814) PaperMC/Paper@7e2b682 Fix skipping custom block entity tag (#10812) PaperMC/Paper@ed85aac Flatten namespaced vanilla command alias redirects (#10821) PaperMC/Paper@a31dc90 Several fixes and new api for experience merging/stacking (#9242) PaperMC/Paper@efd91e5 Add registry-related argument types (#10770) PaperMC/Paper@27d2ed8 Extend fishing API (#10634) PaperMC/Paper@0fcf3e3 Deprecate InvAction#HOTBAR_MOVE_AND_READD (#10784) --- gradle.properties | 2 +- patches/server/0001-Rebrand.patch | 4 ++-- patches/server/0006-Ridables.patch | 14 ++++++------- ...-Configurable-entity-base-attributes.patch | 20 +++++++++---------- patches/server/0009-Llama-API.patch | 12 +++++------ ...-Skip-events-if-there-s-no-listeners.patch | 6 +++--- ...g-mends-most-damages-equipment-first.patch | 4 ++-- ...e-entity-breeding-times-configurable.patch | 8 ++++---- ...oggle-for-water-sensitive-mob-damage.patch | 16 +++++++-------- ...136-Config-to-disable-Llama-caravans.patch | 6 +++--- .../0219-Mobs-always-drop-experience.patch | 14 ++++++------- ...Configurable-player-pickup-exp-delay.patch | 8 ++++---- .../server/0255-Remove-Mojang-Profiler.patch | 6 +++--- .../server/0282-Add-mending-multiplier.patch | 6 +++--- 14 files changed, 63 insertions(+), 63 deletions(-) diff --git a/gradle.properties b/gradle.properties index a84ef5c85..a72b50f43 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ group = org.purpurmc.purpur version = 1.20.6-R0.1-SNAPSHOT mcVersion = 1.20.6 -paperCommit = 9d6f2cced75c1a433c508ab531a61872bce73854 +paperCommit = 0fcf3e347f671ce6bdc9699cbe4c34567562dd2b org.gradle.caching = true org.gradle.parallel = true diff --git a/patches/server/0001-Rebrand.patch b/patches/server/0001-Rebrand.patch index e3f4e5b53..663d5bedd 100644 --- a/patches/server/0001-Rebrand.patch +++ b/patches/server/0001-Rebrand.patch @@ -252,10 +252,10 @@ index e85b9bb3f9c225d289a4959921970b9963881199..c1e2d3a75b9d4710ab6d8b5c62af4bc1 // (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 e46714f38df931350d81c30907560c381c8d2725..777f1d11d9fb5af29ec895383902daf348eb528e 100644 +index 4788a591f40f506d81b10fd9f6ab68f308a68e23..de3f413dc60ee501e540b68a7b3c1118c750ca0b 100644 --- a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java +++ b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java -@@ -502,7 +502,7 @@ public final class CraftMagicNumbers implements UnsafeValues { +@@ -503,7 +503,7 @@ public final class CraftMagicNumbers implements UnsafeValues { @Override public com.destroystokyo.paper.util.VersionFetcher getVersionFetcher() { diff --git a/patches/server/0006-Ridables.patch b/patches/server/0006-Ridables.patch index 345ea2814..9f7ae07fb 100644 --- a/patches/server/0006-Ridables.patch +++ b/patches/server/0006-Ridables.patch @@ -66,7 +66,7 @@ index 8a183fc9d0a79dd9a952bc1759c53da286908188..5dd8c9f53ba50f160198a09dd2069edb private void updatePlayerAttributes() { diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index c450447585af4c8cdc87abe871c229ff895c3e53..a33a724de4c408fcf23b8ec9206311fc25936f1c 100644 +index 4ae88bfcead40cd05f9514a48a922a37767cb3cf..ac11226ca4b8d730871851d99491d598e41a0de6 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java @@ -2772,6 +2772,8 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl @@ -2438,13 +2438,13 @@ index 6e299770fca78699f7e1988db4cdef37b99d74c1..816c698a81a77f217a606468aa157bda protected void randomizeAttributes(RandomSource random) { this.getAttribute(Attributes.MAX_HEALTH).setBaseValue((double)generateMaxHealth(random::nextInt)); 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 1dd4290287725898ace29e46b439b55df8fdd1af..3943ca63aaeecfb98c34ceef9b0c40e71de4e832 100644 +index 36d654073ab4058db54830d9447d7d959a0b25f1..1564d1327e4b735461e41a7a876f63a9943d2675 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 -@@ -78,7 +78,51 @@ public class Llama extends AbstractChestedHorse implements VariantHolder type, Level world) { super(type, world); + this.maxDomestication = 30; // Paper - Missing entity API; configure max temper instead of a hardcoded value + // Purpur start + this.moveControl = new org.purpurmc.purpur.controller.MoveControllerWASD(this) { + @Override @@ -2493,7 +2493,7 @@ index 1dd4290287725898ace29e46b439b55df8fdd1af..3943ca63aaeecfb98c34ceef9b0c40e7 public boolean isTraderLlama() { return false; -@@ -120,6 +164,7 @@ public class Llama extends AbstractChestedHorse implements VariantHolder 676.0) { 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 697895661826e4a1ecbdfd2c3a195b9d0ee7e00a..05614fb50a5509331ac15bb819e827365a4cefcf 100644 +index df4943e0a75d084a1c0ae6c12ade533b3c4206fc..9ed11bf6420e4ea8ea78cec641a7e37327301ae1 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 type, Level world) { super(type, world); -@@ -167,6 +168,7 @@ public class Llama extends AbstractChestedHorse implements VariantHolder bukkit, RootCommandNode rootcommandnode) { // Paper end - Perf: Async command map building new com.destroystokyo.paper.event.brigadier.AsyncPlayerSendCommandsEvent(player.getBukkitEntity(), (RootCommandNode) rootcommandnode, false).callEvent(); // Paper - Brigadier API @@ -16,7 +16,7 @@ index 24086a82e1687cb1925398218b18c2384fa8f6e3..6b95a810c2fa17f18bd911dba2c5544c PlayerCommandSendEvent event = new PlayerCommandSendEvent(player.getBukkitEntity(), new LinkedHashSet<>(bukkit)); event.getPlayer().getServer().getPluginManager().callEvent(event); -@@ -524,6 +525,7 @@ public class Commands { +@@ -530,6 +531,7 @@ public class Commands { } } // CraftBukkit end diff --git a/patches/server/0055-Mending-mends-most-damages-equipment-first.patch b/patches/server/0055-Mending-mends-most-damages-equipment-first.patch index 90a6916fd..2f5754062 100644 --- a/patches/server/0055-Mending-mends-most-damages-equipment-first.patch +++ b/patches/server/0055-Mending-mends-most-damages-equipment-first.patch @@ -5,10 +5,10 @@ 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 a207a31d80a302dbdfe80f8727222542d3a78da2..7ca70e9ddda24e2fe661c7b13fa439a6c19726dd 100644 +index 46d8bcad1545953757659870901cbbdf3340bc15..45fda4c03c6fe586d26638f0a2a1d26db807e52c 100644 --- a/src/main/java/net/minecraft/world/entity/ExperienceOrb.java +++ b/src/main/java/net/minecraft/world/entity/ExperienceOrb.java -@@ -338,7 +338,7 @@ public class ExperienceOrb extends Entity { +@@ -344,7 +344,7 @@ public class ExperienceOrb extends Entity { } private int repairPlayerItems(Player player, int amount) { diff --git a/patches/server/0099-Make-entity-breeding-times-configurable.patch b/patches/server/0099-Make-entity-breeding-times-configurable.patch index 5ef15b6c9..ed3e0f001 100644 --- a/patches/server/0099-Make-entity-breeding-times-configurable.patch +++ b/patches/server/0099-Make-entity-breeding-times-configurable.patch @@ -95,7 +95,7 @@ index 14210dac8a4fa8caaf69ec830f83d15525bb1bea..a440e9cc8973d6116652a0871251c421 protected void registerGoals() { this.goalSelector.addGoal(0, new FloatGoal(this)); diff --git a/src/main/java/net/minecraft/world/entity/animal/Cow.java b/src/main/java/net/minecraft/world/entity/animal/Cow.java -index bda0d933ccbee613aa7fb31534351a0d2dbab0a7..64866ca220f4c0b6350e92473cd013658a7de974 100644 +index 5710f77389f4dc4c56475d36ac592633486f2ba7..8cb0d645e7d2f477874d4d55dbf7a3bc75fe15dc 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Cow.java +++ b/src/main/java/net/minecraft/world/entity/animal/Cow.java @@ -68,6 +68,11 @@ public class Cow extends Animal { @@ -362,7 +362,7 @@ index b6a4b4e66ca67e4dcb4b14a13ab6586a94e1b020..b0f8115b328eda1e3571051870b5310c 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 9cd8220a1e5e43c141ad27df4969e66ef3746ecd..84c04603d50e190430e4e6cf2a7b613537a0c341 100644 +index 691f5020df77b01523d1e292be40552089e2f538..1de70d3faddb58df1180b500195b9167b6c9d644 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 @@ -108,6 +108,11 @@ public class Goat extends Animal { @@ -410,10 +410,10 @@ index 9ad0d3972d1970b11687da174a83e3a0a4180c0e..16d4278d49dad84f72c968ca36914e93 protected void randomizeAttributes(RandomSource random) { this.getAttribute(Attributes.MAX_HEALTH).setBaseValue((double)generateMaxHealth(random::nextInt)); 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 05614fb50a5509331ac15bb819e827365a4cefcf..81d614cf14512464b376575fd2d7e7fbf93d9e03 100644 +index 9ed11bf6420e4ea8ea78cec641a7e37327301ae1..326d94eabe0a469bfebed4517960be0042517249 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 -@@ -140,6 +140,11 @@ public class Llama extends AbstractChestedHorse implements 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 84c04603d50e190430e4e6cf2a7b613537a0c341..412b44ea2d33ef68721b91da9f550738c6c780ba 100644 +index 1de70d3faddb58df1180b500195b9167b6c9d644..9fba034ed863d1dc1ee5fb7cf09650382481dbc7 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 @@ -113,6 +113,11 @@ public class Goat extends Animal { @@ -475,10 +475,10 @@ index 16d4278d49dad84f72c968ca36914e93d46dc5f6..e623284b353831d1a540af40e139ac16 protected void randomizeAttributes(RandomSource random) { this.getAttribute(Attributes.MAX_HEALTH).setBaseValue((double)generateMaxHealth(random::nextInt)); 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 81d614cf14512464b376575fd2d7e7fbf93d9e03..87ec5bd632353ce364de29c5d56460551b6a4139 100644 +index 326d94eabe0a469bfebed4517960be0042517249..876b06fd6a371caa6cc71026a3b2f7a111c89dc8 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 -@@ -145,6 +145,11 @@ public class Llama extends AbstractChestedHorse implements VariantHolder list = this.llama.level().getEntities(this.llama, this.llama.getBoundingBox().inflate(9.0, 4.0, 9.0), 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 87ec5bd632353ce364de29c5d56460551b6a4139..12ff4091674f7efb3e324df0df2d798dcbc46027 100644 +index 876b06fd6a371caa6cc71026a3b2f7a111c89dc8..6f744c07d01d5e01dda5aa5cdcf9a29f883ad28a 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 -@@ -481,7 +481,7 @@ public class Llama extends AbstractChestedHorse implements 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 412b44ea2d33ef68721b91da9f550738c6c780ba..79c27b5717fec000ea94138ebc76dbabf5b2eeaf 100644 +index 9fba034ed863d1dc1ee5fb7cf09650382481dbc7..fab01a3e779e39962ef04305540e2fe3043072a2 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 @@ -118,6 +118,11 @@ public class Goat extends Animal { @@ -469,10 +469,10 @@ index e623284b353831d1a540af40e139ac16091dcbf6..fdf9ec418b0fc567e286ac79dbdbedda protected void randomizeAttributes(RandomSource random) { this.getAttribute(Attributes.MAX_HEALTH).setBaseValue((double)generateMaxHealth(random::nextInt)); 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 12ff4091674f7efb3e324df0df2d798dcbc46027..7d2a5c806fd0f1228c45b8a8b56d7ba13b899a2d 100644 +index 6f744c07d01d5e01dda5aa5cdcf9a29f883ad28a..f452e18829e2b05cf742a4239cba293263b3a88a 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 -@@ -150,6 +150,11 @@ public class Llama extends AbstractChestedHorse implements VariantHolder Date: Thu, 30 May 2024 18:44:08 -0700 Subject: [PATCH 032/588] Updated Upstream (Paper) Upstream has released updates that appear to apply and compile correctly Paper Changes: PaperMC/Paper@8e6554a Fix sending disconnect packet in phases where it doesn't exist PaperMC/Paper@06e69c8 Use CommandSourceStack in AsyncPlayerSendCommandsEvent (#10826) PaperMC/Paper@a47e11d fix knockback events (#10831) PaperMC/Paper@3181470 Add entity heal API (#10267) --- gradle.properties | 2 +- patches/server/0006-Ridables.patch | 16 ++++++------- ...urable-void-damage-height-and-damage.patch | 6 ++--- .../0057-Implement-elytra-settings.patch | 4 ++-- ...0084-LivingEntity-broadcastItemBreak.patch | 4 ++-- patches/server/0129-One-Punch-Man.patch | 6 ++--- ...169-API-for-any-mob-to-burn-daylight.patch | 12 +++++----- .../0191-Toggle-for-kinetic-damage.patch | 6 ++--- .../server/0232-Max-joins-per-second.patch | 6 ++--- ...fig-for-mob-last-hurt-by-player-time.patch | 8 +++---- .../server/0255-Remove-Mojang-Profiler.patch | 24 +++++++++---------- 11 files changed, 47 insertions(+), 47 deletions(-) diff --git a/gradle.properties b/gradle.properties index a72b50f43..b2b30e565 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ group = org.purpurmc.purpur version = 1.20.6-R0.1-SNAPSHOT mcVersion = 1.20.6 -paperCommit = 0fcf3e347f671ce6bdc9699cbe4c34567562dd2b +paperCommit = 3181470ad7d372d2a799c3dcdb61e9392969abe4 org.gradle.caching = true org.gradle.parallel = true diff --git a/patches/server/0006-Ridables.patch b/patches/server/0006-Ridables.patch index 9f7ae07fb..637318837 100644 --- a/patches/server/0006-Ridables.patch +++ b/patches/server/0006-Ridables.patch @@ -79,7 +79,7 @@ index 4ae88bfcead40cd05f9514a48a922a37767cb3cf..ac11226ca4b8d730871851d99491d598 if ((entity instanceof Bucketable && entity instanceof LivingEntity && origItem != null && origItem.asItem() == Items.WATER_BUCKET) && (event.isCancelled() || ServerGamePacketListenerImpl.this.player.getInventory().getSelected() == null || ServerGamePacketListenerImpl.this.player.getInventory().getSelected().getItem() != origItem)) { entity.resendPossiblyDesyncedEntityData(ServerGamePacketListenerImpl.this.player); // Paper - The entire mob gets deleted, so resend it. diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index ffcd965586acc5993c8122336ea2ec661932d4b7..b976ea5d919f73c406adea90603f4a78b761fd25 100644 +index 0766292235c04662ce9a5f94d11f9617f563031d..757aeb4b715b17d3f239b495899b0d8874811db8 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java @@ -380,7 +380,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess @@ -190,7 +190,7 @@ index 09fdea983772612ef3fff6b2da3cf469a34e4ec0..aa76a24421cdb3908a3544d92eb3d1e3 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 0ddf2e1a6d2ea836f8a140a435721e0ce96bd8d2..f790211062a14b5d70dac178c31bfc7033779222 100644 +index ce01fe82dc1eaaf06ca317ddbc62b7d1b87a48b2..de03ae0d49a9331c6e397c2a26114a935c41b0d8 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java @@ -229,9 +229,9 @@ public abstract class LivingEntity extends Entity implements Attackable { @@ -223,7 +223,7 @@ index 0ddf2e1a6d2ea836f8a140a435721e0ce96bd8d2..f790211062a14b5d70dac178c31bfc70 @Override protected void checkFallDamage(double heightDifference, boolean onGround, BlockState state, BlockPos landedPosition) { -@@ -2781,7 +2782,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -2771,7 +2772,7 @@ public abstract class LivingEntity extends Entity implements Attackable { } protected long lastJumpTime = 0L; // Paper - Prevent excessive velocity through repeated crits @@ -232,7 +232,7 @@ index 0ddf2e1a6d2ea836f8a140a435721e0ce96bd8d2..f790211062a14b5d70dac178c31bfc70 float f = this.getJumpPower(); if (f > 1.0E-5F) { -@@ -3494,8 +3495,10 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -3484,8 +3485,10 @@ public abstract class LivingEntity extends Entity implements Attackable { this.pushEntities(); this.level().getProfiler().pop(); // Paper start - Add EntityMoveEvent @@ -245,7 +245,7 @@ index 0ddf2e1a6d2ea836f8a140a435721e0ce96bd8d2..f790211062a14b5d70dac178c31bfc70 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()); -@@ -3505,6 +3508,21 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -3495,6 +3498,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()); } } @@ -268,7 +268,7 @@ index 0ddf2e1a6d2ea836f8a140a435721e0ce96bd8d2..f790211062a14b5d70dac178c31bfc70 // Paper end - Add EntityMoveEvent 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 9f42563699508fcb3d8a96cfdfc25a7bffd99759..9534ad75d46e2c379a4a850337a6d7568f863f50 100644 +index 8b612b772ca87c852d0b108c2afd6785c261c9b9..3fdb1ba2e9249cda6f09406cfbf4cc677a258f13 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java @@ -165,8 +165,8 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Targeti @@ -5003,7 +5003,7 @@ index 0854e9b7ee2e6b23b6c1ee6a324a5a253c9d4679..6bdf3d1e3652a661282d61f1dc2bfc27 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 686374e89e41b0917791264f3281f7384835bca8..1f2ba90a5418d6b4367ebce0f498ebdd204e5b18 100644 +index 25595bef64199c4ddbe69c65fd149eec33e778ad..2455ea05bbe00ad939e45d2faa9b7a9a8c932aae 100644 --- a/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java @@ -206,6 +206,19 @@ public abstract class Player extends LivingEntity { @@ -5095,7 +5095,7 @@ index a2d336ceb52b63db5c03432ee7bc94dc6a742b82..a6268b3df9691278606501284b5504da + // 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 1a737167757891794b40575a5db48b0667e23a6b..78b3dde824622ea89ab4446ebb5a965b825ab7de 100644 +index dfbe0914ab2771ac632fd064719878ac47559e9f..1a6ab0a29546e39b4df1dc76952488edb0aa6e38 100644 --- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java @@ -592,6 +592,15 @@ public class CraftEventFactory { diff --git a/patches/server/0051-Configurable-void-damage-height-and-damage.patch b/patches/server/0051-Configurable-void-damage-height-and-damage.patch index d5310fe23..76bf9c5eb 100644 --- a/patches/server/0051-Configurable-void-damage-height-and-damage.patch +++ b/patches/server/0051-Configurable-void-damage-height-and-damage.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Configurable void damage height and damage diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 5ebf68635f868c17bc56a3397e3ceed7b7507aa6..e4e240b227fbde9dee03d7a3fa8364e3b129da88 100644 +index 8feace82105dccd2db3872a7e735ce376397abc8..90788e4ffdc6f38675aa859e3b2ff185046ac3fc 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java @@ -947,7 +947,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess @@ -18,10 +18,10 @@ index 5ebf68635f868c17bc56a3397e3ceed7b7507aa6..e4e240b227fbde9dee03d7a3fa8364e3 && (!(this instanceof Player player) || !player.getAbilities().invulnerable))) { // Paper end - Configurable nether ceiling damage diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 965fdc5701162aad8656b09c8930448e47db0f3c..7f9b6688066298655d7b722d8d47ad1700326fcb 100644 +index 3c023e4c810b7bc3693b944d284f493ccb874253..c0dd4b16056686ad00d82b32e8d73f985b7023b3 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -2592,7 +2592,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -2582,7 +2582,7 @@ public abstract class LivingEntity extends Entity implements Attackable { @Override protected void onBelowWorld() { diff --git a/patches/server/0057-Implement-elytra-settings.patch b/patches/server/0057-Implement-elytra-settings.patch index 8e47b4856..6d2c27964 100644 --- a/patches/server/0057-Implement-elytra-settings.patch +++ b/patches/server/0057-Implement-elytra-settings.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Implement elytra settings diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 7f9b6688066298655d7b722d8d47ad1700326fcb..72eb43102ddf8349c4a376ed66ef016dc3bf52eb 100644 +index c0dd4b16056686ad00d82b32e8d73f985b7023b3..9cea786b57ed7b7c08bf06783d58945980c62e0f 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -3554,7 +3554,16 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -3544,7 +3544,16 @@ public abstract class LivingEntity extends Entity implements Attackable { int j = i / 10; if (j % 2 == 0) { diff --git a/patches/server/0084-LivingEntity-broadcastItemBreak.patch b/patches/server/0084-LivingEntity-broadcastItemBreak.patch index d815a2657..ff56ca547 100644 --- a/patches/server/0084-LivingEntity-broadcastItemBreak.patch +++ b/patches/server/0084-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 aa351df679f300018367244c7ccb3e5a59e9276f..11bd76d79bbfff68734d8ee1095f21c5c50e7bde 100644 +index 18af8736f30780b48313257a09973e30df6d0e2f..f234cc33ad0e1f308daef6a09e1755bc23497294 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java -@@ -1173,4 +1173,12 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { +@@ -1180,4 +1180,12 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { this.getHandle().setYBodyRot(bodyYaw); } // Paper end - body yaw API diff --git a/patches/server/0129-One-Punch-Man.patch b/patches/server/0129-One-Punch-Man.patch index 51461e170..5cadf1570 100644 --- a/patches/server/0129-One-Punch-Man.patch +++ b/patches/server/0129-One-Punch-Man.patch @@ -5,10 +5,10 @@ Subject: [PATCH] One Punch Man! diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index dc1c7c55fd13cc1a8ade803bfb1b7c385cf29132..523052af43aa86982d2ded0cc0882d34bac24da7 100644 +index 450b289398cb3cccfcddcb4377004358a77d2c45..3a1236048a4cb3fd0efe7343dbc2649bed67dedd 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -2382,6 +2382,21 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -2372,6 +2372,21 @@ public abstract class LivingEntity extends Entity implements Attackable { } } @@ -31,7 +31,7 @@ index dc1c7c55fd13cc1a8ade803bfb1b7c385cf29132..523052af43aa86982d2ded0cc0882d34 if (human) { // PAIL: Be sure to drag all this code from the EntityHuman subclass each update. diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 3f07fa6eec5efb308d6ec10ddb036c4774031a32..5f01c0d1277e1aa910208a3b9308c427b6e22cdb 100644 +index 3a13246c0dccb82ef8168d35d59932911ef2a5ad..b830a673a8c7033147d15d0a63474aa33f5520e6 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -344,6 +344,7 @@ public class PurpurWorldConfig { diff --git a/patches/server/0169-API-for-any-mob-to-burn-daylight.patch b/patches/server/0169-API-for-any-mob-to-burn-daylight.patch index 0f4975f2e..e3dcd4188 100644 --- a/patches/server/0169-API-for-any-mob-to-burn-daylight.patch +++ b/patches/server/0169-API-for-any-mob-to-burn-daylight.patch @@ -6,7 +6,7 @@ Subject: [PATCH] API for any mob to burn daylight Co-authored by: Encode42 diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 126a11c27deb848c86e81ae6e63610c5bb711956..888e44f730725e6dee0a1414a3e75538dda87c14 100644 +index 0eea9e29170a365e96659bcea2dea283d6f1ceda..ed2b8138d23e94b5471181396f290c530e29254b 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java @@ -561,6 +561,21 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess @@ -32,7 +32,7 @@ index 126a11c27deb848c86e81ae6e63610c5bb711956..888e44f730725e6dee0a1414a3e75538 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 7eb32e29ce009b161599196eb28f0dca11dfc548..2fc36b716ce636929e2323651302fd76358dc3e2 100644 +index 15f89efd59c7f6334483c67d49e3de6dd03921c9..12f37b245901b84b4cee4e75d38446a554b2274b 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java @@ -274,6 +274,7 @@ public abstract class LivingEntity extends Entity implements Attackable { @@ -63,7 +63,7 @@ index 7eb32e29ce009b161599196eb28f0dca11dfc548..2fc36b716ce636929e2323651302fd76 } // CraftBukkit start -@@ -3573,6 +3580,27 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -3563,6 +3570,27 @@ public abstract class LivingEntity extends Entity implements Attackable { this.hurt(this.damageSources().drown(), 1.0F); } @@ -92,7 +92,7 @@ index 7eb32e29ce009b161599196eb28f0dca11dfc548..2fc36b716ce636929e2323651302fd76 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 456c3197cc72d63e9c53a768ca7bae45bb1fc722..9d532c373ca1762ad48b9b81000d2c11b929d220 100644 +index 3bb977f7b4861c92cf2c036bdf720cf6323964b0..3486c6782f9bbb3477d2fefd1e0a363a5326999f 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java @@ -1881,17 +1881,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Targeti @@ -361,10 +361,10 @@ index befe3372d5f1550b7bde3b63b5e7aef9035c5379..3c674ecd3b80501047b4593e88720342 Preconditions.checkArgument(entity != null, "Unknown entity"); diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java -index 54537d1b981d690bc8c5a698fd07425a04070553..d5dfc97f40df7a7161bdaeb04ae6ca5e1a8c8a2b 100644 +index f234cc33ad0e1f308daef6a09e1755bc23497294..fbb1b3672af69306c510f3a629bede548ba7a9fd 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java -@@ -1180,5 +1180,15 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { +@@ -1187,5 +1187,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/0191-Toggle-for-kinetic-damage.patch b/patches/server/0191-Toggle-for-kinetic-damage.patch index 1addaa713..0868d8b95 100644 --- a/patches/server/0191-Toggle-for-kinetic-damage.patch +++ b/patches/server/0191-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 54a612dd2fcdf6972f7580fbd814f461df07b7f6..549579f2bc2e1fd23ece1ead543e3e5242f52ce0 100644 +index 12f37b245901b84b4cee4e75d38446a554b2274b..3e18ca92cdaee1b836d17cddb259ffb683f8ba97 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -2993,6 +2993,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -2983,6 +2983,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 54a612dd2fcdf6972f7580fbd814f461df07b7f6..549579f2bc2e1fd23ece1ead543e3e52 } } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 963540e5c3eb6dfbb78b089bba013ef348c8487f..7a2a3243e6d1e22dcbd57674db06bf7cb42abfed 100644 +index b66224c74eeb7b60ded96edb08d323002c355db6..36a59f1107a59fc25c48774184ebaba3254a5027 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/0232-Max-joins-per-second.patch b/patches/server/0232-Max-joins-per-second.patch index 14ae2c131..dc0b275b9 100644 --- a/patches/server/0232-Max-joins-per-second.patch +++ b/patches/server/0232-Max-joins-per-second.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Max joins per second When this option is set to true the `max-joins-per-tick` setting in paper.yml will be used per second instead of per tick diff --git a/src/main/java/net/minecraft/network/Connection.java b/src/main/java/net/minecraft/network/Connection.java -index 02833deaa2bb7e5abc655bc1bdbe15c4b3ac7119..71b021513f30376c7b09d83059deea89cc92385f 100644 +index f40420a6841f03983b0837e177ea2ae7c3a37ca1..3b66ecc4f110d0f2dc0ef6c560801296d7e0be64 100644 --- a/src/main/java/net/minecraft/network/Connection.java +++ b/src/main/java/net/minecraft/network/Connection.java -@@ -608,11 +608,20 @@ public class Connection extends SimpleChannelInboundHandler> { +@@ -609,11 +609,20 @@ public class Connection extends SimpleChannelInboundHandler> { private static final int MAX_PER_TICK = io.papermc.paper.configuration.GlobalConfiguration.get().misc.maxJoinsPerTick; // Paper - Buffer joins to world private static int joinAttemptsThisTick; // Paper - Buffer joins to world private static int currTick; // Paper - Buffer joins to world @@ -31,7 +31,7 @@ index 02833deaa2bb7e5abc655bc1bdbe15c4b3ac7119..71b021513f30376c7b09d83059deea89 } // Paper end - Buffer joins to world diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index 0d6b99822a3a743fe50362702afdca52f6a4a88e..5879af630bc3711a17d51f455585ccd31f7a6d88 100644 +index 6884aed8d03ee4da14baeaa5d6eaea54ff53afe5..d0e13dce484c9680128061efaef74555c57ca742 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java @@ -456,8 +456,10 @@ public class PurpurConfig { diff --git a/patches/server/0237-Config-for-mob-last-hurt-by-player-time.patch b/patches/server/0237-Config-for-mob-last-hurt-by-player-time.patch index ae1b68e82..c217e4771 100644 --- a/patches/server/0237-Config-for-mob-last-hurt-by-player-time.patch +++ b/patches/server/0237-Config-for-mob-last-hurt-by-player-time.patch @@ -5,7 +5,7 @@ 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 119d2e57995fa20f34b88963b93c945ff87e0cab..36022a0ab50655363d26be7dba765e2261baccdf 100644 +index 2257f14e5abf775cad3d5e0d2a8f6736c72f41cb..2fa0404f4f4a332248cdf7e84f2d9723dda7df8b 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java @@ -1561,13 +1561,13 @@ public abstract class LivingEntity extends Entity implements Attackable { @@ -25,10 +25,10 @@ index 119d2e57995fa20f34b88963b93c945ff87e0cab..36022a0ab50655363d26be7dba765e22 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 1a8a76aa31bd1d1670be6e9cada162c540084cf9..b452ebbe11145987fb5e66b39993898457322080 100644 +index fbb1b3672af69306c510f3a629bede548ba7a9fd..1284c941a4c863c287098a0a04efcc723e727bb3 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java -@@ -505,7 +505,7 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { +@@ -512,7 +512,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 1a8a76aa31bd1d1670be6e9cada162c540084cf9..b452ebbe11145987fb5e66b399938984 // Paper end diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 05307f584d96b95e9b81239316a256310422c039..389aac3c02c16bbfe3f266e66e53f6107b27e4dd 100644 +index bb4763d6200cdb99a37ce3af58362ae434e3aea9..d7fdefb27ae9361b631d29c61e82aff913814e92 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -143,6 +143,7 @@ public class PurpurWorldConfig { diff --git a/patches/server/0255-Remove-Mojang-Profiler.patch b/patches/server/0255-Remove-Mojang-Profiler.patch index 9c3f524ea..3e7a30dbd 100644 --- a/patches/server/0255-Remove-Mojang-Profiler.patch +++ b/patches/server/0255-Remove-Mojang-Profiler.patch @@ -1085,7 +1085,7 @@ index a715ecf4a8ac91d3e5e5c6269d89e54b2c1cd279..223c3665126c576eddb1a8f7c9f5bc60 }; } diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 13f69b9ceb082a013dfe2de2d5807dde77d53a2f..57aa9f71a3b27073f3e229ecd342c52546d151b3 100644 +index d42cf771b9cf77304d5174f374c56eb793fc2991..45e06ec0e975973edb4434f64ddfc0f663ca3c31 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java @@ -896,7 +896,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess @@ -1211,7 +1211,7 @@ index 13f69b9ceb082a013dfe2de2d5807dde77d53a2f..57aa9f71a3b27073f3e229ecd342c525 } } else { diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 09a00496c003f875e07c249c4a601ec598af0e5e..94bd8a91dba30b2682f245efccc199dbf71212f8 100644 +index 2fa0404f4f4a332248cdf7e84f2d9723dda7df8b..3c132007cc40a330693e33350e0cad087ac4c90b 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java @@ -423,7 +423,7 @@ public abstract class LivingEntity extends Entity implements Attackable { @@ -1232,7 +1232,7 @@ index 09a00496c003f875e07c249c4a601ec598af0e5e..94bd8a91dba30b2682f245efccc199db } public boolean canSpawnSoulSpeedParticle() { -@@ -3227,10 +3227,10 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -3217,10 +3217,10 @@ public abstract class LivingEntity extends Entity implements Attackable { } this.run += (f3 - this.run) * 0.3F; @@ -1246,7 +1246,7 @@ index 09a00496c003f875e07c249c4a601ec598af0e5e..94bd8a91dba30b2682f245efccc199db // Paper start - stop large pitch and yaw changes from crashing the server this.yRotO += Math.round((this.getYRot() - this.yRotO) / 360.0F) * 360.0F; -@@ -3242,7 +3242,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -3232,7 +3232,7 @@ public abstract class LivingEntity extends Entity implements Attackable { this.yHeadRotO += Math.round((this.yHeadRot - this.yHeadRotO) / 360.0F) * 360.0F; // Paper end @@ -1255,7 +1255,7 @@ index 09a00496c003f875e07c249c4a601ec598af0e5e..94bd8a91dba30b2682f245efccc199db this.animStep += f2; if (this.isFallFlying()) { ++this.fallFlyTicks; -@@ -3465,19 +3465,19 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -3455,19 +3455,19 @@ public abstract class LivingEntity extends Entity implements Attackable { } this.setDeltaMovement(d0, d1, d2); @@ -1280,7 +1280,7 @@ index 09a00496c003f875e07c249c4a601ec598af0e5e..94bd8a91dba30b2682f245efccc199db if (this.jumping && this.isAffectedByFluids()) { double d3; -@@ -3504,8 +3504,8 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -3494,8 +3494,8 @@ public abstract class LivingEntity extends Entity implements Attackable { this.noJumpDelay = 0; } @@ -1291,7 +1291,7 @@ index 09a00496c003f875e07c249c4a601ec598af0e5e..94bd8a91dba30b2682f245efccc199db this.xxa *= 0.98F; this.zza *= 0.98F; this.updateFallFlying(); -@@ -3530,8 +3530,8 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -3520,8 +3520,8 @@ public abstract class LivingEntity extends Entity implements Attackable { this.travel(vec3d1); } @@ -1302,7 +1302,7 @@ index 09a00496c003f875e07c249c4a601ec598af0e5e..94bd8a91dba30b2682f245efccc199db if (!this.level().isClientSide && !this.isDeadOrDying() && !this.freezeLocked) { // Paper - Freeze Tick Lock API int i = this.getTicksFrozen(); -@@ -3548,15 +3548,15 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -3538,15 +3538,15 @@ public abstract class LivingEntity extends Entity implements Attackable { this.hurt(this.damageSources().freeze(), 1.0F); } @@ -1322,7 +1322,7 @@ index 09a00496c003f875e07c249c4a601ec598af0e5e..94bd8a91dba30b2682f245efccc199db // 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 9d532c373ca1762ad48b9b81000d2c11b929d220..429d8b09496d7d6ffc5f44dca953d6194683813b 100644 +index 3486c6782f9bbb3477d2fefd1e0a363a5326999f..6cb17876fc0efaf15ab9f54e4c95b9b858b0a5ee 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java @@ -376,13 +376,13 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Targeti @@ -1812,10 +1812,10 @@ index dcf580d852ede8ea01f5d91944a224ec6eca73e4..4be218129188c1be8736940170a861ad 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 082b804f4793f72e76361f5427f0358273454b3d..bd5fcb028d41b60de183b4d849f1ba10746fa0d0 100644 +index 638447e8cb74b26f4f8e3862c2fb4a3048979ebc..2e2461b585d9008f1bbb90f9b45e2a1ad837dbd6 100644 --- a/src/main/java/net/minecraft/world/level/Explosion.java +++ b/src/main/java/net/minecraft/world/level/Explosion.java -@@ -681,7 +681,7 @@ public class Explosion { +@@ -668,7 +668,7 @@ public class Explosion { } if (flag1) { @@ -1824,7 +1824,7 @@ index 082b804f4793f72e76361f5427f0358273454b3d..bd5fcb028d41b60de183b4d849f1ba10 List> list = new ArrayList(); Util.shuffle(this.toBlow, this.level.random); -@@ -759,7 +759,7 @@ public class Explosion { +@@ -746,7 +746,7 @@ public class Explosion { Block.popResource(this.level, (BlockPos) pair.getSecond(), (ItemStack) pair.getFirst()); } From 847719c3232b346b8d4e68ba35b221223b006e31 Mon Sep 17 00:00:00 2001 From: granny Date: Thu, 30 May 2024 22:09:44 -0700 Subject: [PATCH 033/588] one punch!! improvements - go back to setting attack damage to a really high value - move above event calls to allow plugin manipulation - ignore damage from projectiles --- patches/server/0129-One-Punch-Man.patch | 29 ++++++++++--------- ...169-API-for-any-mob-to-burn-daylight.patch | 4 +-- .../0191-Toggle-for-kinetic-damage.patch | 4 +-- ...fig-for-mob-last-hurt-by-player-time.patch | 4 +-- .../server/0255-Remove-Mojang-Profiler.patch | 14 ++++----- 5 files changed, 29 insertions(+), 26 deletions(-) diff --git a/patches/server/0129-One-Punch-Man.patch b/patches/server/0129-One-Punch-Man.patch index 5cadf1570..c46783d09 100644 --- a/patches/server/0129-One-Punch-Man.patch +++ b/patches/server/0129-One-Punch-Man.patch @@ -5,31 +5,34 @@ Subject: [PATCH] One Punch Man! diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 450b289398cb3cccfcddcb4377004358a77d2c45..3a1236048a4cb3fd0efe7343dbc2649bed67dedd 100644 +index 450b289398cb3cccfcddcb4377004358a77d2c45..d69efde99472087c98cdadfe76b154847718951b 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -2372,6 +2372,21 @@ public abstract class LivingEntity extends Entity implements Attackable { - } +@@ -1451,6 +1451,24 @@ public abstract class LivingEntity extends Entity implements Attackable { + this.stopSleeping(); } + // Purpur start -+ if (damagesource.getEntity() instanceof net.minecraft.world.entity.player.Player player && damagesource.getEntity().level().purpurConfig.creativeOnePunch) { ++ if (source.getEntity() instanceof net.minecraft.world.entity.player.Player player && source.getEntity().level().purpurConfig.creativeOnePunch && !source.is(DamageTypeTags.IS_PROJECTILE)) { + if (player.isCreative()) { -+ double attackDamage; -+ net.minecraft.world.item.component.ItemAttributeModifiers itemattributemodifiers = player.getMainHandItem().getOrDefault(DataComponents.ATTRIBUTE_MODIFIERS, net.minecraft.world.item.component.ItemAttributeModifiers.EMPTY); ++ org.apache.commons.lang3.mutable.MutableDouble attackDamage = new org.apache.commons.lang3.mutable.MutableDouble(); ++ player.getMainHandItem().forEachModifier(EquipmentSlot.MAINHAND, (attributeHolder, attributeModifier) -> { ++ if (attributeModifier.operation() == AttributeModifier.Operation.ADD_VALUE) { ++ attackDamage.addAndGet(attributeModifier.amount()); ++ } ++ }); + -+ attackDamage = itemattributemodifiers.compute(player.getAttributeBaseValue(Attributes.ATTACK_DAMAGE), EquipmentSlot.MAINHAND); -+ -+ if (attackDamage == 1.0D) { -+ this.setHealth(0); ++ if (attackDamage.doubleValue() == 0.0D) { ++ // One punch! ++ amount = 9999F; + } + } + } + // Purpur end + - if (f > 0 || !human) { - if (human) { - // PAIL: Be sure to drag all this code from the EntityHuman subclass each update. + this.noActionTime = 0; + float f1 = amount; + boolean flag = amount > 0.0F && this.isDamageSourceBlocked(source); // Copied from below diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java index 3a13246c0dccb82ef8168d35d59932911ef2a5ad..b830a673a8c7033147d15d0a63474aa33f5520e6 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java diff --git a/patches/server/0169-API-for-any-mob-to-burn-daylight.patch b/patches/server/0169-API-for-any-mob-to-burn-daylight.patch index e3dcd4188..d0a5501fd 100644 --- a/patches/server/0169-API-for-any-mob-to-burn-daylight.patch +++ b/patches/server/0169-API-for-any-mob-to-burn-daylight.patch @@ -32,7 +32,7 @@ index 0eea9e29170a365e96659bcea2dea283d6f1ceda..ed2b8138d23e94b5471181396f290c53 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 15f89efd59c7f6334483c67d49e3de6dd03921c9..12f37b245901b84b4cee4e75d38446a554b2274b 100644 +index 64642403d6821d149e2acc3a4cac43ef19b4dd3d..753b1220ecf63914920ef85292db47d006ecfa27 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java @@ -274,6 +274,7 @@ public abstract class LivingEntity extends Entity implements Attackable { @@ -63,7 +63,7 @@ index 15f89efd59c7f6334483c67d49e3de6dd03921c9..12f37b245901b84b4cee4e75d38446a5 } // CraftBukkit start -@@ -3563,6 +3570,27 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -3566,6 +3573,27 @@ public abstract class LivingEntity extends Entity implements Attackable { this.hurt(this.damageSources().drown(), 1.0F); } diff --git a/patches/server/0191-Toggle-for-kinetic-damage.patch b/patches/server/0191-Toggle-for-kinetic-damage.patch index 0868d8b95..ca4b0cf14 100644 --- a/patches/server/0191-Toggle-for-kinetic-damage.patch +++ b/patches/server/0191-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 12f37b245901b84b4cee4e75d38446a554b2274b..3e18ca92cdaee1b836d17cddb259ffb683f8ba97 100644 +index 753b1220ecf63914920ef85292db47d006ecfa27..a4a0486a3cc7c638b8abf8ca0004ca6f7781b0de 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -2983,6 +2983,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -2986,6 +2986,7 @@ public abstract class LivingEntity extends Entity implements Attackable { if (f3 > 0.0F) { this.playSound(this.getFallDamageSound((int) f3), 1.0F, 1.0F); diff --git a/patches/server/0237-Config-for-mob-last-hurt-by-player-time.patch b/patches/server/0237-Config-for-mob-last-hurt-by-player-time.patch index c217e4771..365c19d2a 100644 --- a/patches/server/0237-Config-for-mob-last-hurt-by-player-time.patch +++ b/patches/server/0237-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 2257f14e5abf775cad3d5e0d2a8f6736c72f41cb..2fa0404f4f4a332248cdf7e84f2d9723dda7df8b 100644 +index 7f717b3e8bb8a8eef98411216823f98ead912408..ceb420d3b9c5d3050b0d72ae612b8003d562202a 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -1561,13 +1561,13 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -1579,13 +1579,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; diff --git a/patches/server/0255-Remove-Mojang-Profiler.patch b/patches/server/0255-Remove-Mojang-Profiler.patch index 3e7a30dbd..03e5b4297 100644 --- a/patches/server/0255-Remove-Mojang-Profiler.patch +++ b/patches/server/0255-Remove-Mojang-Profiler.patch @@ -1211,7 +1211,7 @@ index d42cf771b9cf77304d5174f374c56eb793fc2991..45e06ec0e975973edb4434f64ddfc0f6 } } else { diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 2fa0404f4f4a332248cdf7e84f2d9723dda7df8b..3c132007cc40a330693e33350e0cad087ac4c90b 100644 +index ceb420d3b9c5d3050b0d72ae612b8003d562202a..05644dd1872d8b558ed64f74fc8699d651cc893e 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java @@ -423,7 +423,7 @@ public abstract class LivingEntity extends Entity implements Attackable { @@ -1232,7 +1232,7 @@ index 2fa0404f4f4a332248cdf7e84f2d9723dda7df8b..3c132007cc40a330693e33350e0cad08 } public boolean canSpawnSoulSpeedParticle() { -@@ -3217,10 +3217,10 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -3220,10 +3220,10 @@ public abstract class LivingEntity extends Entity implements Attackable { } this.run += (f3 - this.run) * 0.3F; @@ -1246,7 +1246,7 @@ index 2fa0404f4f4a332248cdf7e84f2d9723dda7df8b..3c132007cc40a330693e33350e0cad08 // Paper start - stop large pitch and yaw changes from crashing the server this.yRotO += Math.round((this.getYRot() - this.yRotO) / 360.0F) * 360.0F; -@@ -3232,7 +3232,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -3235,7 +3235,7 @@ public abstract class LivingEntity extends Entity implements Attackable { this.yHeadRotO += Math.round((this.yHeadRot - this.yHeadRotO) / 360.0F) * 360.0F; // Paper end @@ -1255,7 +1255,7 @@ index 2fa0404f4f4a332248cdf7e84f2d9723dda7df8b..3c132007cc40a330693e33350e0cad08 this.animStep += f2; if (this.isFallFlying()) { ++this.fallFlyTicks; -@@ -3455,19 +3455,19 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -3458,19 +3458,19 @@ public abstract class LivingEntity extends Entity implements Attackable { } this.setDeltaMovement(d0, d1, d2); @@ -1280,7 +1280,7 @@ index 2fa0404f4f4a332248cdf7e84f2d9723dda7df8b..3c132007cc40a330693e33350e0cad08 if (this.jumping && this.isAffectedByFluids()) { double d3; -@@ -3494,8 +3494,8 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -3497,8 +3497,8 @@ public abstract class LivingEntity extends Entity implements Attackable { this.noJumpDelay = 0; } @@ -1291,7 +1291,7 @@ index 2fa0404f4f4a332248cdf7e84f2d9723dda7df8b..3c132007cc40a330693e33350e0cad08 this.xxa *= 0.98F; this.zza *= 0.98F; this.updateFallFlying(); -@@ -3520,8 +3520,8 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -3523,8 +3523,8 @@ public abstract class LivingEntity extends Entity implements Attackable { this.travel(vec3d1); } @@ -1302,7 +1302,7 @@ index 2fa0404f4f4a332248cdf7e84f2d9723dda7df8b..3c132007cc40a330693e33350e0cad08 if (!this.level().isClientSide && !this.isDeadOrDying() && !this.freezeLocked) { // Paper - Freeze Tick Lock API int i = this.getTicksFrozen(); -@@ -3538,15 +3538,15 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -3541,15 +3541,15 @@ public abstract class LivingEntity extends Entity implements Attackable { this.hurt(this.damageSources().freeze(), 1.0F); } From 1af74564be0136bfc2973e610553e94699331f87 Mon Sep 17 00:00:00 2001 From: granny Date: Thu, 30 May 2024 22:16:00 -0700 Subject: [PATCH 034/588] [ci skip] document mods that patches took inspiration from --- patches/server/0128-Dont-run-with-scissors.patch | 1 + patches/server/0129-One-Punch-Man.patch | 1 + 2 files changed, 2 insertions(+) diff --git a/patches/server/0128-Dont-run-with-scissors.patch b/patches/server/0128-Dont-run-with-scissors.patch index 67024b62b..e9864f1f7 100644 --- a/patches/server/0128-Dont-run-with-scissors.patch +++ b/patches/server/0128-Dont-run-with-scissors.patch @@ -3,6 +3,7 @@ From: JustDoom Date: Fri, 5 Mar 2021 14:23:16 -0500 Subject: [PATCH] Dont run with scissors! +inspired by https://modrinth.com/mod/dont-run-with-scissors diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java index 8cd681accfe4c8c3e4b2ed02ed6958014059bee1..9861cb1fcbbe75222ecca18aeb1f346e053f02bd 100644 diff --git a/patches/server/0129-One-Punch-Man.patch b/patches/server/0129-One-Punch-Man.patch index c46783d09..d04ac11d9 100644 --- a/patches/server/0129-One-Punch-Man.patch +++ b/patches/server/0129-One-Punch-Man.patch @@ -3,6 +3,7 @@ From: Fourmisain <8464472+Fourmisain@users.noreply.github.com> Date: Fri, 5 Mar 2021 17:42:35 -0500 Subject: [PATCH] One Punch Man! +inspired by https://modrinth.com/mod/creative-one-punch diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java index 450b289398cb3cccfcddcb4377004358a77d2c45..d69efde99472087c98cdadfe76b154847718951b 100644 From 224e7c7987d7b5b16379f5cd072b3e1a639c06db Mon Sep 17 00:00:00 2001 From: granny Date: Fri, 31 May 2024 14:47:30 -0700 Subject: [PATCH 035/588] Updated Upstream (Paper) Upstream has released updates that appear to apply and compile correctly Paper Changes: PaperMC/Paper@0513374 Fire TabCompleteEvent for legacy commands (#10834) --- gradle.properties | 2 +- patches/server/0254-Remove-Timings.patch | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/gradle.properties b/gradle.properties index b2b30e565..a6c720dd7 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ group = org.purpurmc.purpur version = 1.20.6-R0.1-SNAPSHOT mcVersion = 1.20.6 -paperCommit = 3181470ad7d372d2a799c3dcdb61e9392969abe4 +paperCommit = 0513374b1f3410c2dd630f169a0cdf64a349500e org.gradle.caching = true org.gradle.parallel = true diff --git a/patches/server/0254-Remove-Timings.patch b/patches/server/0254-Remove-Timings.patch index d285248f3..7b4e4f3cd 100644 --- a/patches/server/0254-Remove-Timings.patch +++ b/patches/server/0254-Remove-Timings.patch @@ -43,10 +43,10 @@ index 56b07a3306e5735816c8d89601b519cb0db6379a..604de7aed6db44c9c84d541765e57da4 return executedUnloadTask | canSaveChunk | canSaveEntities | canSavePOI ? new SaveStat(executedUnloadTask || canSaveChunk, canSaveEntities, canSavePOI): null; } diff --git a/src/main/java/io/papermc/paper/command/brigadier/bukkit/BukkitCommandNode.java b/src/main/java/io/papermc/paper/command/brigadier/bukkit/BukkitCommandNode.java -index 10a113b057b0a4d27cce3bae975e1108aaa7b517..02597f890ac7f2dc12c94c283356b8309638dd17 100644 +index 0c3c82b28e581286b798ee58ca4193efc2faff4a..24121a43aeb5e9bce013f30c92dddd15f99736c6 100644 --- a/src/main/java/io/papermc/paper/command/brigadier/bukkit/BukkitCommandNode.java +++ b/src/main/java/io/papermc/paper/command/brigadier/bukkit/BukkitCommandNode.java -@@ -75,16 +75,16 @@ public class BukkitCommandNode extends LiteralCommandNode { +@@ -80,16 +80,16 @@ public class BukkitCommandNode extends LiteralCommandNode { // Plugins do weird things to workaround normal registration if (this.command.timings == null) { From be3a6d56bc477d975c55efc0059543cf618b8107 Mon Sep 17 00:00:00 2001 From: granny Date: Sun, 2 Jun 2024 00:29:31 -0700 Subject: [PATCH 036/588] Updated Upstream (Paper) Upstream has released updates that appear to apply and compile correctly Paper Changes: PaperMC/Paper@5d8e53d Fix CommandSourceStack#bypassSelectorPermissions (#10837) --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index a6c720dd7..a642ffad5 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ group = org.purpurmc.purpur version = 1.20.6-R0.1-SNAPSHOT mcVersion = 1.20.6 -paperCommit = 0513374b1f3410c2dd630f169a0cdf64a349500e +paperCommit = 5d8e53d78d0089894c9552b95b7b8ad9dcc8cb6f org.gradle.caching = true org.gradle.parallel = true From a52426c5f3c0754924704e8b15175a85dd50048c Mon Sep 17 00:00:00 2001 From: granny Date: Sun, 2 Jun 2024 18:21:26 -0700 Subject: [PATCH 037/588] Updated Upstream (Paper) Upstream has released updates that appear to apply and compile correctly Paper Changes: PaperMC/Paper@ac64751 Use RegistryOps in the correct places (#10843) --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index a642ffad5..809da9f3c 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ group = org.purpurmc.purpur version = 1.20.6-R0.1-SNAPSHOT mcVersion = 1.20.6 -paperCommit = 5d8e53d78d0089894c9552b95b7b8ad9dcc8cb6f +paperCommit = ac647513b2330e4c58f7c511ed79b1ad5d262be6 org.gradle.caching = true org.gradle.parallel = true From 86ad0b3b43be06e09a8d3386df6958108290a4fd Mon Sep 17 00:00:00 2001 From: granny Date: Mon, 3 Jun 2024 22:04:42 -0700 Subject: [PATCH 038/588] Updated Upstream (Paper) Upstream has released updates that appear to apply and compile correctly Paper Changes: PaperMC/Paper@54fbd0c clarify what getEntityId actually returns (#10839) PaperMC/Paper@b8f2101 Only assign blockstate data if super ctor did not (#10841) PaperMC/Paper@4f13be9 Do not perform chunk existance check for I/O scheduling --- gradle.properties | 2 +- patches/api/0006-Ridables.patch | 4 ++-- patches/api/0025-API-for-any-mob-to-burn-daylight.patch | 4 ++-- patches/api/0042-Fire-Immunity-API.patch | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/gradle.properties b/gradle.properties index 809da9f3c..2b3961197 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ group = org.purpurmc.purpur version = 1.20.6-R0.1-SNAPSHOT mcVersion = 1.20.6 -paperCommit = ac647513b2330e4c58f7c511ed79b1ad5d262be6 +paperCommit = 4f13be937eda5ee18010b271474a91894348e3e4 org.gradle.caching = true org.gradle.parallel = true diff --git a/patches/api/0006-Ridables.patch b/patches/api/0006-Ridables.patch index fb93dd846..c787a329f 100644 --- a/patches/api/0006-Ridables.patch +++ b/patches/api/0006-Ridables.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Ridables diff --git a/src/main/java/org/bukkit/entity/Entity.java b/src/main/java/org/bukkit/entity/Entity.java -index 62e3793903905b94eb1a120345015149abb33713..50344412a04f3008439e337ecf9dd09c7f853bc9 100644 +index 725ef320f929d5e3d141c1ed3246d73a7d741f31..514611cf71cafc8e7e07ef901c2ccad03cd5f31b 100644 --- a/src/main/java/org/bukkit/entity/Entity.java +++ b/src/main/java/org/bukkit/entity/Entity.java -@@ -1155,4 +1155,35 @@ public interface Entity extends Metadatable, CommandSender, Nameable, Persistent +@@ -1159,4 +1159,35 @@ public interface Entity extends Metadatable, CommandSender, Nameable, Persistent */ @NotNull String getScoreboardEntryName(); // Paper end - entity scoreboard name diff --git a/patches/api/0025-API-for-any-mob-to-burn-daylight.patch b/patches/api/0025-API-for-any-mob-to-burn-daylight.patch index eb412045f..fdb5da886 100644 --- a/patches/api/0025-API-for-any-mob-to-burn-daylight.patch +++ b/patches/api/0025-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 50344412a04f3008439e337ecf9dd09c7f853bc9..f482467ae784b134da97eb38afb7f12585520297 100644 +index 514611cf71cafc8e7e07ef901c2ccad03cd5f31b..8c9c4183785a47b64f084f4b8cdac53d2d4402aa 100644 --- a/src/main/java/org/bukkit/entity/Entity.java +++ b/src/main/java/org/bukkit/entity/Entity.java -@@ -1185,5 +1185,12 @@ public interface Entity extends Metadatable, CommandSender, Nameable, Persistent +@@ -1189,5 +1189,12 @@ public interface Entity extends Metadatable, CommandSender, Nameable, Persistent * @return True if ridable in water */ boolean isRidableInWater(); diff --git a/patches/api/0042-Fire-Immunity-API.patch b/patches/api/0042-Fire-Immunity-API.patch index d84da08f3..245abf073 100644 --- a/patches/api/0042-Fire-Immunity-API.patch +++ b/patches/api/0042-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 f482467ae784b134da97eb38afb7f12585520297..07b8c0dd049ff783fd2e408be634642479bf8b1e 100644 +index 8c9c4183785a47b64f084f4b8cdac53d2d4402aa..2d12c70b0baa50504619c8e37881a11a56d7df2c 100644 --- a/src/main/java/org/bukkit/entity/Entity.java +++ b/src/main/java/org/bukkit/entity/Entity.java -@@ -1192,5 +1192,18 @@ public interface Entity extends Metadatable, CommandSender, Nameable, Persistent +@@ -1196,5 +1196,18 @@ public interface Entity extends Metadatable, CommandSender, Nameable, Persistent * @return True if in daylight */ boolean isInDaylight(); From 79d199c7f07d4acd9af6a9858cd895722ce16429 Mon Sep 17 00:00:00 2001 From: granny Date: Tue, 4 Jun 2024 16:16:25 -0700 Subject: [PATCH 039/588] Updated Upstream (Paper) Upstream has released updates that appear to apply and compile correctly Paper Changes: PaperMC/Paper@79c1ce1 Add since to deprecated for removals (#10848) PaperMC/Paper@88d76d9 Make Bogged implement Shearable (#10844) PaperMC/Paper@bd5867a Handle alpha channel from potion_contents component (#10808) --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 2b3961197..7277b917e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ group = org.purpurmc.purpur version = 1.20.6-R0.1-SNAPSHOT mcVersion = 1.20.6 -paperCommit = 4f13be937eda5ee18010b271474a91894348e3e4 +paperCommit = bd5867a96f792f0eb32c1d249bb4bbc1d8338d14 org.gradle.caching = true org.gradle.parallel = true From 7708a4c06f344575eff43cd1116024fd471925cc Mon Sep 17 00:00:00 2001 From: granny Date: Fri, 7 Jun 2024 17:56:16 -0700 Subject: [PATCH 040/588] don't send keepalive packet early, closes #1520 --- .../0016-Alternative-Keepalive-Handling.patch | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/patches/server/0016-Alternative-Keepalive-Handling.patch b/patches/server/0016-Alternative-Keepalive-Handling.patch index 217dd108f..7e82316a3 100644 --- a/patches/server/0016-Alternative-Keepalive-Handling.patch +++ b/patches/server/0016-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 a8edeb5a40cd9aac933805259407e32c544d181e..26ccb217b846410c826cb1da017b45903d9c5469 100644 +index a8edeb5a40cd9aac933805259407e32c544d181e..a30435cdc62d4947596b9cee3b114f7cb1349769 100644 --- a/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java @@ -73,6 +73,7 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack @@ -22,10 +22,10 @@ index a8edeb5a40cd9aac933805259407e32c544d181e..26ccb217b846410c826cb1da017b4590 public void handleKeepAlive(ServerboundKeepAlivePacket packet) { + // Purpur start + if (org.purpurmc.purpur.PurpurConfig.useAlternateKeepAlive) { -+ long id = packet.getId(); -+ if (keepAlives.size() > 0 && keepAlives.contains(id)) { -+ int ping = (int) (Util.getMillis() - id); ++ if (this.keepAlivePending && !keepAlives.isEmpty() && keepAlives.contains(packet.getId())) { ++ int ping = (int) (Util.getMillis() - packet.getId()); + this.latency = (this.latency * 3 + ping) / 4; ++ this.keepAlivePending = false; + keepAlives.clear(); // we got a valid response, lets roll with it and forget the rest + } + } else @@ -40,13 +40,13 @@ index a8edeb5a40cd9aac933805259407e32c544d181e..26ccb217b846410c826cb1da017b4590 + // Purpur start + if (org.purpurmc.purpur.PurpurConfig.useAlternateKeepAlive) { + if (elapsedTime >= 1000L) { // 1 second -+ if (!processedDisconnect && keepAlives.size() * 1000L >= KEEPALIVE_LIMIT) { -+ LOGGER.warn("{} was kicked due to keepalive timeout!", this.player.getScoreboardName()); -+ disconnect(ServerCommonPacketListenerImpl.TIMEOUT_DISCONNECTION_MESSAGE, org.bukkit.event.player.PlayerKickEvent.Cause.TIMEOUT); -+ } else { -+ keepAliveTime = currentTime; // hijack this field for 1 second intervals -+ keepAlives.add(currentTime); // currentTime is ID -+ send(new ClientboundKeepAlivePacket(currentTime)); ++ if (this.keepAlivePending && !this.processedDisconnect && keepAlives.size() * 1000L >= KEEPALIVE_LIMIT) { ++ this.disconnect(ServerCommonPacketListenerImpl.TIMEOUT_DISCONNECTION_MESSAGE, org.bukkit.event.player.PlayerKickEvent.Cause.TIMEOUT); ++ } else if (this.checkIfClosed(currentTime)) { ++ this.keepAlivePending = true; ++ this.keepAliveTime = currentTime; // hijack this field for 1 second intervals ++ this.keepAlives.add(currentTime); // currentTime is ID ++ this.send(new ClientboundKeepAlivePacket(currentTime)); + } + } + } else @@ -56,7 +56,7 @@ index a8edeb5a40cd9aac933805259407e32c544d181e..26ccb217b846410c826cb1da017b4590 if (this.keepAlivePending && !this.processedDisconnect && elapsedTime >= KEEPALIVE_LIMIT) { // Paper - check keepalive limit, don't fire if already disconnected this.disconnect(ServerCommonPacketListenerImpl.TIMEOUT_DISCONNECTION_MESSAGE, org.bukkit.event.player.PlayerKickEvent.Cause.TIMEOUT); // Paper - kick event cause diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index 876a4ea0beeae5baca62822eec2e18a4cf3ef09b..bf45bdc2126b320a4954a3d546ec9d4d30660527 100644 +index f80414b9bb7fb1f2849749481209648516fb28fb..e4c01fc54f832f895adec75ac855b614ff77d19a 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java @@ -198,6 +198,11 @@ public class PurpurConfig { From 4873495bc27e4a1643fbc59527bb52504bcfb8cb Mon Sep 17 00:00:00 2001 From: granny Date: Sat, 8 Jun 2024 22:32:42 -0700 Subject: [PATCH 041/588] add config to reverse bubble column flow for soulsand and magma blocks --- ...Config-to-reverse-bubble-column-flow.patch | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 patches/server/0296-Config-to-reverse-bubble-column-flow.patch diff --git a/patches/server/0296-Config-to-reverse-bubble-column-flow.patch b/patches/server/0296-Config-to-reverse-bubble-column-flow.patch new file mode 100644 index 000000000..4c3265c36 --- /dev/null +++ b/patches/server/0296-Config-to-reverse-bubble-column-flow.patch @@ -0,0 +1,45 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: granny +Date: Sat, 8 Jun 2024 22:06:47 -0700 +Subject: [PATCH] Config to reverse bubble column flow + + +diff --git a/src/main/java/net/minecraft/world/level/block/BubbleColumnBlock.java b/src/main/java/net/minecraft/world/level/block/BubbleColumnBlock.java +index 4c1f20fafdbd86011959cc2d4983b6c2f8e87a5f..0faabddbd68915721994134ba0cb97fe8ab184df 100644 +--- a/src/main/java/net/minecraft/world/level/block/BubbleColumnBlock.java ++++ b/src/main/java/net/minecraft/world/level/block/BubbleColumnBlock.java +@@ -122,10 +122,10 @@ public class BubbleColumnBlock extends Block implements BucketPickup { + if (state.is(Blocks.BUBBLE_COLUMN)) { + return state; + } else if (state.is(Blocks.SOUL_SAND)) { +- return Blocks.BUBBLE_COLUMN.defaultBlockState().setValue(DRAG_DOWN, Boolean.valueOf(false)); ++ return Blocks.BUBBLE_COLUMN.defaultBlockState().setValue(DRAG_DOWN, Boolean.valueOf(org.purpurmc.purpur.PurpurConfig.soulSandBlockReverseBubbleColumnFlow)); // Purpur + } else { + return state.is(Blocks.MAGMA_BLOCK) +- ? Blocks.BUBBLE_COLUMN.defaultBlockState().setValue(DRAG_DOWN, Boolean.valueOf(true)) ++ ? Blocks.BUBBLE_COLUMN.defaultBlockState().setValue(DRAG_DOWN, Boolean.valueOf(!org.purpurmc.purpur.PurpurConfig.magmaBlockReverseBubbleColumnFlow)) // Purpur + : Blocks.WATER.defaultBlockState(); + } + } +diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java +index b5092184076946b7169b67086b9542a9685c15f3..cac4500adee80168823aa4454d6da9a7cb096186 100644 +--- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java ++++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java +@@ -341,6 +341,8 @@ public class PurpurConfig { + public static int kelpMaxGrowthAge = 25; + public static int twistingVinesMaxGrowthAge = 25; + public static int weepingVinesMaxGrowthAge = 25; ++ public static boolean magmaBlockReverseBubbleColumnFlow = false; ++ public static boolean soulSandBlockReverseBubbleColumnFlow = false; + private static void blockSettings() { + if (version < 3) { + boolean oldValue = getBoolean("settings.barrel.packed-barrels", true); +@@ -412,6 +414,8 @@ public class PurpurConfig { + log(Level.WARNING, "blocks.weeping_vines.max-growth-age is set to above maximum allowed value of 25"); + log(Level.WARNING, "Using value of 25 to prevent issues"); + } ++ magmaBlockReverseBubbleColumnFlow = getBoolean("settings.blocks.magma-block.reverse-bubble-column-flow", magmaBlockReverseBubbleColumnFlow); ++ soulSandBlockReverseBubbleColumnFlow = getBoolean("settings.blocks.soul-sand.reverse-bubble-column-flow", soulSandBlockReverseBubbleColumnFlow); + } + + public static boolean allowInfinityMending = false; From eac419810e1f56f37cfbfddb7d570c457de1979f Mon Sep 17 00:00:00 2001 From: granny Date: Mon, 10 Jun 2024 01:19:56 -0700 Subject: [PATCH 042/588] Updated Upstream (Paper) Upstream has released updates that appear to apply and compile correctly Paper Changes: PaperMC/Paper@906df69 Prevent internal NPE on ItemStack#damage (#10836) --- gradle.properties | 2 +- patches/server/0057-Implement-elytra-settings.patch | 6 +++--- .../server/0148-Config-to-allow-for-unsafe-enchants.patch | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/gradle.properties b/gradle.properties index 7277b917e..83b68fe1b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ group = org.purpurmc.purpur version = 1.20.6-R0.1-SNAPSHOT mcVersion = 1.20.6 -paperCommit = bd5867a96f792f0eb32c1d249bb4bbc1d8338d14 +paperCommit = 906df69f05d0779906377abb809bfec9fc3c3546 org.gradle.caching = true org.gradle.parallel = true diff --git a/patches/server/0057-Implement-elytra-settings.patch b/patches/server/0057-Implement-elytra-settings.patch index 6d2c27964..1309251bd 100644 --- a/patches/server/0057-Implement-elytra-settings.patch +++ b/patches/server/0057-Implement-elytra-settings.patch @@ -46,7 +46,7 @@ index 218f2f085309f04438f8b07bc41cf242583db2dc..ea8e49b42b9dde74784189430be66ed6 itemStack.shrink(1); } else ((net.minecraft.server.level.ServerPlayer) user).getBukkitEntity().updateInventory(); diff --git a/src/main/java/net/minecraft/world/item/ItemStack.java b/src/main/java/net/minecraft/world/item/ItemStack.java -index 6ab9bc3da937f259b4d5b4ef69c011170b1f6783..ddf746734697305c405c53d29066c8b3003f1bf9 100644 +index 37b037f167fe5b85eede525bdff2e3aab8c04eda..c3a4158df98d52854d777f986d8a8b962ea55e29 100644 --- a/src/main/java/net/minecraft/world/item/ItemStack.java +++ b/src/main/java/net/minecraft/world/item/ItemStack.java @@ -665,7 +665,7 @@ public final class ItemStack implements DataComponentHolder { @@ -58,9 +58,9 @@ index 6ab9bc3da937f259b4d5b4ef69c011170b1f6783..ddf746734697305c405c53d29066c8b3 int k = 0; for (int l = 0; j > 0 && l < amount; ++l) { -@@ -741,6 +741,12 @@ public final class ItemStack implements DataComponentHolder { +@@ -748,6 +748,12 @@ public final class ItemStack implements DataComponentHolder { this.hurtAndBreak(amount, randomsource, entity, () -> { // Paper - Add EntityDamageItemEvent - entity.broadcastBreakEvent(slot); + if (slot != null) entity.broadcastBreakEvent(slot); // Paper - ItemStack damage API - slot is nullable Item item = this.getItem(); + // Purpur start + if (item == Items.ELYTRA) { diff --git a/patches/server/0148-Config-to-allow-for-unsafe-enchants.patch b/patches/server/0148-Config-to-allow-for-unsafe-enchants.patch index 731ca9f07..a9b0cab9c 100644 --- a/patches/server/0148-Config-to-allow-for-unsafe-enchants.patch +++ b/patches/server/0148-Config-to-allow-for-unsafe-enchants.patch @@ -74,10 +74,10 @@ index 5cadd69bcae33b1de58806fcf40533850d976154..17067510990f575bf638f6a95ed0d964 ((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 ddf746734697305c405c53d29066c8b3003f1bf9..d606c15385273796fbbd2b503cda6e262be358b2 100644 +index c3a4158df98d52854d777f986d8a8b962ea55e29..18f0652da2b7a8572463fcf302eb4d35480daf1a 100644 --- a/src/main/java/net/minecraft/world/item/ItemStack.java +++ b/src/main/java/net/minecraft/world/item/ItemStack.java -@@ -1228,6 +1228,16 @@ public final class ItemStack implements DataComponentHolder { +@@ -1235,6 +1235,16 @@ public final class ItemStack implements DataComponentHolder { return !((ItemEnchantments) this.getOrDefault(DataComponents.ENCHANTMENTS, ItemEnchantments.EMPTY)).isEmpty(); } From 72192634b0629433aa531dedaf8c918755f82fbe Mon Sep 17 00:00:00 2001 From: granny Date: Mon, 10 Jun 2024 01:48:25 -0700 Subject: [PATCH 043/588] [ci skip] inline fqn imports --- patches/api/0017-ChatColor-conveniences.patch | 14 +--- ...e-to-recipe-s-ExactChoice-ingredient.patch | 20 ++--- patches/server/0021-Giants-AI-settings.patch | 73 +++++-------------- .../server/0026-Tulips-change-fox-type.patch | 22 ++---- patches/server/0031-Cows-eat-mushrooms.patch | 34 +++------ ...ispenser-curse-of-binding-protection.patch | 14 +--- patches/server/0069-Entity-lifespan.patch | 16 ++-- patches/server/0071-Squid-EAR-immunity.patch | 14 +--- ...95-Furnace-uses-lava-from-underneath.patch | 16 +--- ...e-entity-breeding-times-configurable.patch | 10 +-- ...04-Changeable-Mob-Left-Handed-Chance.patch | 6 +- ...ble-chance-for-wolves-to-spawn-rabid.patch | 37 ++++------ ...11-Configurable-default-collar-color.patch | 6 +- ...iefing-bypass-to-everything-affected.patch | 14 ++-- ...oggle-for-water-sensitive-mob-damage.patch | 16 ++-- ...25-Config-to-always-tame-in-Creative.patch | 6 +- ...169-API-for-any-mob-to-burn-daylight.patch | 6 +- ...8-Option-to-make-drowned-break-doors.patch | 18 ++--- .../0201-Shulker-change-color-with-dye.patch | 32 ++------ ...the-ability-to-add-combustible-items.patch | 4 +- ...turally-aggressive-to-players-chance.patch | 16 ++-- .../0219-Mobs-always-drop-experience.patch | 24 +++--- patches/server/0254-Remove-Timings.patch | 6 +- .../server/0255-Remove-Mojang-Profiler.patch | 12 +-- 24 files changed, 151 insertions(+), 285 deletions(-) diff --git a/patches/api/0017-ChatColor-conveniences.patch b/patches/api/0017-ChatColor-conveniences.patch index 1cbcc2653..bf0bd59b4 100644 --- a/patches/api/0017-ChatColor-conveniences.patch +++ b/patches/api/0017-ChatColor-conveniences.patch @@ -5,18 +5,10 @@ Subject: [PATCH] ChatColor conveniences diff --git a/src/main/java/org/bukkit/ChatColor.java b/src/main/java/org/bukkit/ChatColor.java -index 918a045165cdcde264bc24082b7afebb407271de..687d11619379aead7f665d4a5f8f8bcc857cb8e9 100644 +index 918a045165cdcde264bc24082b7afebb407271de..e98d6321c5f2cdde91b54f8a74cbcc045eae75a8 100644 --- a/src/main/java/org/bukkit/ChatColor.java +++ b/src/main/java/org/bukkit/ChatColor.java -@@ -3,6 +3,7 @@ package org.bukkit; - import com.google.common.base.Preconditions; - import com.google.common.collect.Maps; - import java.util.Map; -+import java.util.regex.Matcher; - import java.util.regex.Pattern; - import org.jetbrains.annotations.Contract; - import org.jetbrains.annotations.NotNull; -@@ -456,4 +457,77 @@ public enum ChatColor { +@@ -456,4 +456,77 @@ public enum ChatColor { BY_CHAR.put(color.code, color); } } @@ -31,7 +23,7 @@ index 918a045165cdcde264bc24082b7afebb407271de..687d11619379aead7f665d4a5f8f8bcc + @NotNull + public static String toMM(@NotNull String str) { + StringBuilder sb = new StringBuilder(str); -+ Matcher m = STRIP_COLOR_PATTERN.matcher(sb); ++ java.util.regex.Matcher m = STRIP_COLOR_PATTERN.matcher(sb); + while (m.find()) { + sb.replace(m.start(), m.end(), sb.substring(m.start(), m.end()).toLowerCase()); + } diff --git a/patches/api/0019-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch b/patches/api/0019-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch index 6a4e4528f..4e2fba82c 100644 --- a/patches/api/0019-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch +++ b/patches/api/0019-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch @@ -5,18 +5,10 @@ Subject: [PATCH] Add predicate to recipe's ExactChoice ingredient diff --git a/src/main/java/org/bukkit/inventory/RecipeChoice.java b/src/main/java/org/bukkit/inventory/RecipeChoice.java -index 1cd6601c9d2e86ef850011fcb9e59811207b4af7..5ec7d9dab1935bb743e3264d9f7390795fd9f55c 100644 +index 1cd6601c9d2e86ef850011fcb9e59811207b4af7..81c563d44c311ea1b49425d93c57f46beb4a2ef9 100644 --- a/src/main/java/org/bukkit/inventory/RecipeChoice.java +++ b/src/main/java/org/bukkit/inventory/RecipeChoice.java -@@ -10,6 +10,7 @@ import java.util.function.Predicate; - import org.bukkit.Material; - import org.bukkit.Tag; - import org.jetbrains.annotations.NotNull; -+import org.jetbrains.annotations.Nullable; // Purpur - - /** - * Represents a potential item match within a recipe. All choices within a -@@ -180,6 +181,7 @@ public interface RecipeChoice extends Predicate, Cloneable { +@@ -180,6 +180,7 @@ public interface RecipeChoice extends Predicate, Cloneable { public static class ExactChoice implements RecipeChoice { private List choices; @@ -24,7 +16,7 @@ index 1cd6601c9d2e86ef850011fcb9e59811207b4af7..5ec7d9dab1935bb743e3264d9f739079 public ExactChoice(@NotNull ItemStack stack) { this(Arrays.asList(stack)); -@@ -229,6 +231,7 @@ public interface RecipeChoice extends Predicate, Cloneable { +@@ -229,6 +230,7 @@ public interface RecipeChoice extends Predicate, Cloneable { @Override public boolean test(@NotNull ItemStack t) { @@ -32,17 +24,17 @@ index 1cd6601c9d2e86ef850011fcb9e59811207b4af7..5ec7d9dab1935bb743e3264d9f739079 for (ItemStack match : choices) { if (t.isSimilar(match)) { return true; -@@ -238,6 +241,17 @@ public interface RecipeChoice extends Predicate, Cloneable { +@@ -238,6 +240,17 @@ public interface RecipeChoice extends Predicate, Cloneable { return false; } + // Purpur start -+ @Nullable ++ @org.jetbrains.annotations.Nullable + public Predicate getPredicate() { + return predicate; + } + -+ public void setPredicate(@Nullable Predicate predicate) { ++ public void setPredicate(@org.jetbrains.annotations.Nullable Predicate predicate) { + this.predicate = predicate; + } + // Purpur end diff --git a/patches/server/0021-Giants-AI-settings.patch b/patches/server/0021-Giants-AI-settings.patch index 1f14b308e..e4ef7500b 100644 --- a/patches/server/0021-Giants-AI-settings.patch +++ b/patches/server/0021-Giants-AI-settings.patch @@ -5,77 +5,42 @@ Subject: [PATCH] Giants AI settings diff --git a/src/main/java/net/minecraft/world/entity/monster/Giant.java b/src/main/java/net/minecraft/world/entity/monster/Giant.java -index 9602e59cbebeedc85ea75d2a41d3e74f0ff45b46..3c1217d36522b1fd3d1a099d3a12d99016f34c4b 100644 +index 9602e59cbebeedc85ea75d2a41d3e74f0ff45b46..ca53c5b45c119dce1c713dbf931251f89c90cb8d 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Giant.java +++ b/src/main/java/net/minecraft/world/entity/monster/Giant.java -@@ -1,11 +1,34 @@ - package net.minecraft.world.entity.monster; - - import net.minecraft.core.BlockPos; -+import net.minecraft.nbt.CompoundTag; -+import net.minecraft.world.Difficulty; -+import net.minecraft.world.DifficultyInstance; - import net.minecraft.world.entity.EntityType; -+import net.minecraft.world.entity.EquipmentSlot; -+import net.minecraft.world.entity.MobSpawnType; -+import net.minecraft.world.entity.SpawnGroupData; - import net.minecraft.world.entity.ai.attributes.AttributeSupplier; - import net.minecraft.world.entity.ai.attributes.Attributes; -+import net.minecraft.world.entity.ai.goal.FloatGoal; -+import net.minecraft.world.entity.ai.goal.LookAtPlayerGoal; -+import net.minecraft.world.entity.ai.goal.MeleeAttackGoal; -+import net.minecraft.world.entity.ai.goal.MoveTowardsRestrictionGoal; -+import net.minecraft.world.entity.ai.goal.RandomLookAroundGoal; -+import net.minecraft.world.entity.ai.goal.WaterAvoidingRandomStrollGoal; -+import net.minecraft.world.entity.ai.goal.target.HurtByTargetGoal; -+import net.minecraft.world.entity.ai.goal.target.NearestAttackableTargetGoal; -+import net.minecraft.world.entity.animal.IronGolem; -+import net.minecraft.world.entity.animal.Turtle; -+import net.minecraft.world.entity.npc.Villager; -+import net.minecraft.world.entity.player.Player; -+import net.minecraft.world.item.ItemStack; -+import net.minecraft.world.item.Items; - import net.minecraft.world.level.Level; - import net.minecraft.world.level.LevelReader; -+import net.minecraft.world.level.ServerLevelAccessor; -+ -+import javax.annotation.Nullable; - - public class Giant extends Monster { - public Giant(EntityType type, Level world) { -@@ -30,8 +53,23 @@ public class Giant extends Monster { +@@ -30,8 +30,23 @@ public class Giant extends Monster { @Override protected void registerGoals() { - this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); - this.targetSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); + if (level().purpurConfig.giantHaveAI) { -+ this.goalSelector.addGoal(0, new FloatGoal(this)); ++ this.goalSelector.addGoal(0, new net.minecraft.world.entity.ai.goal.FloatGoal(this)); + this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); -+ this.goalSelector.addGoal(7, new WaterAvoidingRandomStrollGoal(this, 1.0D)); -+ this.goalSelector.addGoal(8, new LookAtPlayerGoal(this, Player.class, 16.0F)); -+ this.goalSelector.addGoal(8, new RandomLookAroundGoal(this)); -+ this.goalSelector.addGoal(5, new MoveTowardsRestrictionGoal(this, 1.0D)); ++ this.goalSelector.addGoal(7, new net.minecraft.world.entity.ai.goal.WaterAvoidingRandomStrollGoal(this, 1.0D)); ++ this.goalSelector.addGoal(8, new net.minecraft.world.entity.ai.goal.LookAtPlayerGoal(this, net.minecraft.world.entity.player.Player.class, 16.0F)); ++ this.goalSelector.addGoal(8, new net.minecraft.world.entity.ai.goal.RandomLookAroundGoal(this)); ++ this.goalSelector.addGoal(5, new net.minecraft.world.entity.ai.goal.MoveTowardsRestrictionGoal(this, 1.0D)); + if (level().purpurConfig.giantHaveHostileAI) { -+ this.goalSelector.addGoal(2, new MeleeAttackGoal(this, 1.0D, false)); ++ this.goalSelector.addGoal(2, new net.minecraft.world.entity.ai.goal.MeleeAttackGoal(this, 1.0D, false)); + this.targetSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); -+ this.targetSelector.addGoal(1, new HurtByTargetGoal(this).setAlertOthers(ZombifiedPiglin.class)); -+ this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true)); -+ this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, Villager.class, false)); -+ this.targetSelector.addGoal(4, new NearestAttackableTargetGoal<>(this, IronGolem.class, true)); -+ this.targetSelector.addGoal(5, new NearestAttackableTargetGoal<>(this, Turtle.class, true)); ++ this.targetSelector.addGoal(1, new net.minecraft.world.entity.ai.goal.target.HurtByTargetGoal(this).setAlertOthers(ZombifiedPiglin.class)); ++ this.targetSelector.addGoal(2, new net.minecraft.world.entity.ai.goal.target.NearestAttackableTargetGoal<>(this, net.minecraft.world.entity.player.Player.class, true)); ++ this.targetSelector.addGoal(3, new net.minecraft.world.entity.ai.goal.target.NearestAttackableTargetGoal<>(this, net.minecraft.world.entity.npc.Villager.class, false)); ++ this.targetSelector.addGoal(4, new net.minecraft.world.entity.ai.goal.target.NearestAttackableTargetGoal<>(this, net.minecraft.world.entity.animal.IronGolem.class, true)); ++ this.targetSelector.addGoal(5, new net.minecraft.world.entity.ai.goal.target.NearestAttackableTargetGoal<>(this, net.minecraft.world.entity.animal.Turtle.class, true)); + } + } } @Override -@@ -47,8 +85,34 @@ public class Giant extends Monster { +@@ -47,8 +62,34 @@ public class Giant extends Monster { return Monster.createMonsterAttributes().add(Attributes.MAX_HEALTH, 100.0).add(Attributes.MOVEMENT_SPEED, 0.5).add(Attributes.ATTACK_DAMAGE, 50.0); } + @Override -+ public SpawnGroupData finalizeSpawn(ServerLevelAccessor world, DifficultyInstance difficulty, MobSpawnType spawnReason, @Nullable SpawnGroupData entityData) { -+ SpawnGroupData groupData = super.finalizeSpawn(world, difficulty, spawnReason, entityData); ++ public net.minecraft.world.entity.SpawnGroupData finalizeSpawn(net.minecraft.world.level.ServerLevelAccessor world, net.minecraft.world.DifficultyInstance difficulty, net.minecraft.world.entity.MobSpawnType spawnReason, @javax.annotation.Nullable net.minecraft.world.entity.SpawnGroupData entityData) { ++ net.minecraft.world.entity.SpawnGroupData groupData = super.finalizeSpawn(world, difficulty, spawnReason, entityData); + if (groupData == null) { + populateDefaultEquipmentSlots(this.random, difficulty); + populateDefaultEquipmentEnchantments(this.random, difficulty); @@ -84,11 +49,11 @@ index 9602e59cbebeedc85ea75d2a41d3e74f0ff45b46..3c1217d36522b1fd3d1a099d3a12d990 + } + + @Override -+ protected void populateDefaultEquipmentSlots(net.minecraft.util.RandomSource random, DifficultyInstance difficulty) { ++ protected void populateDefaultEquipmentSlots(net.minecraft.util.RandomSource random, net.minecraft.world.DifficultyInstance difficulty) { + super.populateDefaultEquipmentSlots(this.random, difficulty); + // TODO make configurable -+ if (random.nextFloat() < (level().getDifficulty() == Difficulty.HARD ? 0.1F : 0.05F)) { -+ this.setItemSlot(EquipmentSlot.MAINHAND, new ItemStack(Items.IRON_SWORD)); ++ if (random.nextFloat() < (level().getDifficulty() == net.minecraft.world.Difficulty.HARD ? 0.1F : 0.05F)) { ++ this.setItemSlot(net.minecraft.world.entity.EquipmentSlot.MAINHAND, new net.minecraft.world.item.ItemStack(net.minecraft.world.item.Items.IRON_SWORD)); + } + } + diff --git a/patches/server/0026-Tulips-change-fox-type.patch b/patches/server/0026-Tulips-change-fox-type.patch index 50f08714b..5ffa6e37e 100644 --- a/patches/server/0026-Tulips-change-fox-type.patch +++ b/patches/server/0026-Tulips-change-fox-type.patch @@ -5,18 +5,10 @@ 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 8666d82775570b812d5bdd80336c8e14db6ddf47..d2be8c1c23f291e98b9a31a63ba5fa7d44fc7402 100644 +index 8666d82775570b812d5bdd80336c8e14db6ddf47..d1866f0f07e4d023241229a45b55031a37cc5c99 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Fox.java +++ b/src/main/java/net/minecraft/world/entity/animal/Fox.java -@@ -37,6 +37,7 @@ import net.minecraft.util.RandomSource; - import net.minecraft.util.StringRepresentable; - import net.minecraft.world.DifficultyInstance; - import net.minecraft.world.InteractionHand; -+import net.minecraft.world.InteractionResult; - import net.minecraft.world.damagesource.DamageSource; - import net.minecraft.world.entity.AgeableMob; - import net.minecraft.world.entity.Entity; -@@ -389,6 +390,11 @@ public class Fox extends Animal implements VariantHolder { +@@ -389,6 +389,11 @@ public class Fox extends Animal implements VariantHolder { } private void setTargetGoals() { @@ -28,7 +20,7 @@ index 8666d82775570b812d5bdd80336c8e14db6ddf47..d2be8c1c23f291e98b9a31a63ba5fa7d if (this.getVariant() == Fox.Type.RED) { this.targetSelector.addGoal(4, this.landTargetGoal); this.targetSelector.addGoal(4, this.turtleEggTargetGoal); -@@ -422,6 +428,7 @@ public class Fox extends Animal implements VariantHolder { +@@ -422,6 +427,7 @@ public class Fox extends Animal implements VariantHolder { public void setVariant(Fox.Type variant) { this.entityData.set(Fox.DATA_TYPE_ID, variant.getId()); @@ -36,13 +28,13 @@ index 8666d82775570b812d5bdd80336c8e14db6ddf47..d2be8c1c23f291e98b9a31a63ba5fa7d } List getTrustedUUIDs() { -@@ -762,6 +769,29 @@ public class Fox extends Animal implements VariantHolder { +@@ -762,6 +768,29 @@ public class Fox extends Animal implements VariantHolder { } // Paper end + // Purpur start + @Override -+ public InteractionResult mobInteract(Player player, InteractionHand hand) { ++ public net.minecraft.world.InteractionResult mobInteract(Player player, InteractionHand hand) { + if (level().purpurConfig.foxTypeChangesWithTulips) { + ItemStack itemstack = player.getItemInHand(hand); + if (getVariant() == Type.RED && itemstack.getItem() == Items.WHITE_TULIP) { @@ -50,13 +42,13 @@ index 8666d82775570b812d5bdd80336c8e14db6ddf47..d2be8c1c23f291e98b9a31a63ba5fa7d + if (!player.getAbilities().instabuild) { + itemstack.shrink(1); + } -+ return InteractionResult.SUCCESS; ++ return net.minecraft.world.InteractionResult.SUCCESS; + } else if (getVariant() == Type.SNOW && itemstack.getItem() == Items.ORANGE_TULIP) { + setVariant(Type.RED); + if (!player.getAbilities().instabuild) { + itemstack.shrink(1); + } -+ return InteractionResult.SUCCESS; ++ return net.minecraft.world.InteractionResult.SUCCESS; + } + } + return super.mobInteract(player, hand); diff --git a/patches/server/0031-Cows-eat-mushrooms.patch b/patches/server/0031-Cows-eat-mushrooms.patch index 29865f2ad..d3b20b80c 100644 --- a/patches/server/0031-Cows-eat-mushrooms.patch +++ b/patches/server/0031-Cows-eat-mushrooms.patch @@ -5,35 +5,19 @@ Subject: [PATCH] Cows eat mushrooms diff --git a/src/main/java/net/minecraft/world/entity/animal/Cow.java b/src/main/java/net/minecraft/world/entity/animal/Cow.java -index 478663c16a5763dda9a6c3edbafc843b8dfe06f2..5710f77389f4dc4c56475d36ac592633486f2ba7 100644 +index 478663c16a5763dda9a6c3edbafc843b8dfe06f2..bf5935fbd8e3edfb1221dd06ea1e1a2c8fb887fd 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Cow.java +++ b/src/main/java/net/minecraft/world/entity/animal/Cow.java -@@ -2,6 +2,7 @@ package net.minecraft.world.entity.animal; - - import javax.annotation.Nullable; - import net.minecraft.core.BlockPos; -+import net.minecraft.core.particles.ParticleTypes; - import net.minecraft.server.level.ServerLevel; - import net.minecraft.sounds.SoundEvent; - import net.minecraft.sounds.SoundEvents; -@@ -29,6 +30,7 @@ import net.minecraft.world.item.ItemStack; - import net.minecraft.world.item.ItemUtils; - import net.minecraft.world.item.Items; - import net.minecraft.world.level.Level; -+import net.minecraft.world.level.block.Blocks; - import net.minecraft.world.level.block.state.BlockState; - // CraftBukkit start - import org.bukkit.craftbukkit.event.CraftEventFactory; -@@ -73,7 +75,7 @@ public class Cow extends Animal { +@@ -73,7 +73,7 @@ public class Cow extends Animal { this.goalSelector.addGoal(1, new PanicGoal(this, 2.0D)); this.goalSelector.addGoal(2, new BreedGoal(this, 1.0D)); this.goalSelector.addGoal(3, new TemptGoal(this, 1.25D, (itemstack) -> { - return itemstack.is(ItemTags.COW_FOOD); -+ return level().purpurConfig.cowFeedMushrooms > 0 && (itemstack.is(Blocks.RED_MUSHROOM.asItem()) || itemstack.is(Blocks.BROWN_MUSHROOM.asItem())) || itemstack.is(ItemTags.COW_FOOD); // Purpur ++ return level().purpurConfig.cowFeedMushrooms > 0 && (itemstack.is(net.minecraft.world.level.block.Blocks.RED_MUSHROOM.asItem()) || itemstack.is(net.minecraft.world.level.block.Blocks.BROWN_MUSHROOM.asItem())) || itemstack.is(ItemTags.COW_FOOD); // Purpur }, false)); this.goalSelector.addGoal(4, new FollowParentGoal(this, 1.25D)); this.goalSelector.addGoal(5, new WaterAvoidingRandomStrollGoal(this, 1.0D)); -@@ -135,6 +137,10 @@ public class Cow extends Animal { +@@ -135,6 +135,10 @@ public class Cow extends Animal { player.setItemInHand(hand, itemstack1); return InteractionResult.sidedSuccess(this.level().isClientSide); @@ -44,7 +28,7 @@ index 478663c16a5763dda9a6c3edbafc843b8dfe06f2..5710f77389f4dc4c56475d36ac592633 } else { return super.mobInteract(player, hand); } -@@ -150,4 +156,69 @@ public class Cow extends Animal { +@@ -150,4 +154,69 @@ public class Cow extends Animal { public EntityDimensions getDefaultDimensions(Pose pose) { return this.isBaby() ? Cow.BABY_DIMENSIONS : super.getDefaultDimensions(pose); } @@ -54,11 +38,11 @@ index 478663c16a5763dda9a6c3edbafc843b8dfe06f2..5710f77389f4dc4c56475d36ac592633 + private int brownMushroomsFed = 0; + + private boolean isMushroom(ItemStack stack) { -+ return stack.getItem() == Blocks.RED_MUSHROOM.asItem() || stack.getItem() == Blocks.BROWN_MUSHROOM.asItem(); ++ return stack.getItem() == net.minecraft.world.level.block.Blocks.RED_MUSHROOM.asItem() || stack.getItem() == net.minecraft.world.level.block.Blocks.BROWN_MUSHROOM.asItem(); + } + + private int incrementFeedCount(ItemStack stack) { -+ if (stack.getItem() == Blocks.RED_MUSHROOM.asItem()) { ++ if (stack.getItem() == net.minecraft.world.level.block.Blocks.RED_MUSHROOM.asItem()) { + return ++redMushroomsFed; + } else { + return ++brownMushroomsFed; @@ -78,7 +62,7 @@ index 478663c16a5763dda9a6c3edbafc843b8dfe06f2..5710f77389f4dc4c56475d36ac592633 + if (mooshroom == null) { + return InteractionResult.PASS; + } -+ if (stack.getItem() == Blocks.BROWN_MUSHROOM.asItem()) { ++ if (stack.getItem() == net.minecraft.world.level.block.Blocks.BROWN_MUSHROOM.asItem()) { + mooshroom.setVariant(MushroomCow.MushroomType.BROWN); + } else { + mooshroom.setVariant(MushroomCow.MushroomType.RED); @@ -106,7 +90,7 @@ index 478663c16a5763dda9a6c3edbafc843b8dfe06f2..5710f77389f4dc4c56475d36ac592633 + stack.shrink(1); + } + for (int i = 0; i < 15; ++i) { -+ ((ServerLevel) level()).sendParticles(((ServerLevel) level()).players(), null, ParticleTypes.HAPPY_VILLAGER, ++ ((ServerLevel) level()).sendParticles(((ServerLevel) level()).players(), null, net.minecraft.core.particles.ParticleTypes.HAPPY_VILLAGER, + getX() + random.nextFloat(), getY() + (random.nextFloat() * 2), getZ() + random.nextFloat(), 1, + random.nextGaussian() * 0.05D, random.nextGaussian() * 0.05D, random.nextGaussian() * 0.05D, 0, true); + } diff --git a/patches/server/0053-Dispenser-curse-of-binding-protection.patch b/patches/server/0053-Dispenser-curse-of-binding-protection.patch index 9ceca7396..903c7f4ef 100644 --- a/patches/server/0053-Dispenser-curse-of-binding-protection.patch +++ b/patches/server/0053-Dispenser-curse-of-binding-protection.patch @@ -5,24 +5,16 @@ 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 3d5f08d673f6b95c8f87070345f1fb200b5f4bde..c4392a997061aa4939e5ad7dcacf5e39cbecc55a 100644 +index a0e0d3ca25bf047a5520a3ed47f93ab97377b8b4..49422ea596125ee669bdc66d88f084b692acaca7 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java -@@ -75,6 +75,7 @@ import net.minecraft.world.item.SpawnEggItem; - import net.minecraft.world.item.SwordItem; - import net.minecraft.world.item.component.ItemAttributeModifiers; - import net.minecraft.world.item.enchantment.EnchantmentHelper; -+import net.minecraft.world.item.enchantment.Enchantments; - import net.minecraft.world.level.GameRules; - import net.minecraft.world.level.ItemLike; - import net.minecraft.world.level.Level; -@@ -1309,6 +1310,12 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Targeti +@@ -1309,6 +1309,12 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Targeti } + // Purpur start + public static @Nullable EquipmentSlot getSlotForDispenser(ItemStack itemstack) { -+ return EnchantmentHelper.getItemEnchantmentLevel(Enchantments.BINDING_CURSE, itemstack) > 0 ? null : getEquipmentSlotForItem(itemstack); ++ return EnchantmentHelper.getItemEnchantmentLevel(net.minecraft.world.item.enchantment.Enchantments.BINDING_CURSE, itemstack) > 0 ? null : getEquipmentSlotForItem(itemstack); + } + // Purpur end + diff --git a/patches/server/0069-Entity-lifespan.patch b/patches/server/0069-Entity-lifespan.patch index b9ff46e7b..efb2f5207 100644 --- a/patches/server/0069-Entity-lifespan.patch +++ b/patches/server/0069-Entity-lifespan.patch @@ -5,7 +5,7 @@ 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 f0ff103977c0a0106df1368755fa99ca1376b83a..2a5b759d50931405f214e2a89d0cca624f0c3705 100644 +index 1d09fe4cc604e5ccebe32fde9e2f7c008bb10a72..96019786b27e2f017239b765724257bebee73cb9 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java @@ -2807,6 +2807,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl @@ -17,10 +17,10 @@ index f0ff103977c0a0106df1368755fa99ca1376b83a..2a5b759d50931405f214e2a89d0cca62 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 c4392a997061aa4939e5ad7dcacf5e39cbecc55a..e7251ac940b49564c83b4b603e49c3990fc85db1 100644 +index 49422ea596125ee669bdc66d88f084b692acaca7..6415bc82e44629a08a2ec881acaa5d993e48bb9d 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java -@@ -152,6 +152,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Targeti +@@ -151,6 +151,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Targeti private BlockPos restrictCenter; private float restrictRadius; @@ -28,7 +28,7 @@ index c4392a997061aa4939e5ad7dcacf5e39cbecc55a..e7251ac940b49564c83b4b603e49c399 public boolean aware = true; // CraftBukkit protected Mob(EntityType type, Level world) { -@@ -339,6 +340,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Targeti +@@ -338,6 +339,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Targeti entityliving = null; } } @@ -36,7 +36,7 @@ index c4392a997061aa4939e5ad7dcacf5e39cbecc55a..e7251ac940b49564c83b4b603e49c399 this.target = entityliving; return true; // CraftBukkit end -@@ -381,8 +383,28 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Targeti +@@ -380,8 +382,28 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Targeti } this.level().getProfiler().pop(); @@ -65,7 +65,7 @@ index c4392a997061aa4939e5ad7dcacf5e39cbecc55a..e7251ac940b49564c83b4b603e49c399 @Override protected void playHurtSound(DamageSource damageSource) { this.resetAmbientSoundTime(); -@@ -585,6 +607,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Targeti +@@ -584,6 +606,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Targeti } nbt.putBoolean("Bukkit.Aware", this.aware); // CraftBukkit @@ -73,7 +73,7 @@ index c4392a997061aa4939e5ad7dcacf5e39cbecc55a..e7251ac940b49564c83b4b603e49c399 } @Override -@@ -669,6 +692,11 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Targeti +@@ -668,6 +691,11 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Targeti this.aware = nbt.getBoolean("Bukkit.Aware"); } // CraftBukkit end @@ -85,7 +85,7 @@ index c4392a997061aa4939e5ad7dcacf5e39cbecc55a..e7251ac940b49564c83b4b603e49c399 } @Override -@@ -1848,6 +1876,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Targeti +@@ -1847,6 +1875,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Targeti this.setLastHurtMob(target); } diff --git a/patches/server/0071-Squid-EAR-immunity.patch b/patches/server/0071-Squid-EAR-immunity.patch index 6e6183b7a..891141943 100644 --- a/patches/server/0071-Squid-EAR-immunity.patch +++ b/patches/server/0071-Squid-EAR-immunity.patch @@ -25,22 +25,14 @@ index 98e6faaeeaf8a983f9d730591a9d85c314c112d3..27d279d76fd3632fd023edded3b10630 public boolean spiderRidable = false; diff --git a/src/main/java/org/spigotmc/ActivationRange.java b/src/main/java/org/spigotmc/ActivationRange.java -index a9a39f0da7b09410d8171172a4219c7d509fdb99..a8fc07e06039e1418e020f7c1ad2cd36b9b94eb4 100644 +index a9a39f0da7b09410d8171172a4219c7d509fdb99..2ed85c0aa7d3053e338927fa308b86bcbf9eb7b6 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; - import net.minecraft.world.entity.animal.Animal; - import net.minecraft.world.entity.animal.Bee; - import net.minecraft.world.entity.animal.Sheep; -+import net.minecraft.world.entity.animal.Squid; - import net.minecraft.world.entity.animal.WaterAnimal; - import net.minecraft.world.entity.animal.horse.Llama; - import net.minecraft.world.entity.boss.EnderDragonPart; -@@ -380,6 +381,7 @@ public class ActivationRange +@@ -380,6 +380,7 @@ public class ActivationRange */ public static boolean checkIfActive(Entity entity) { -+ if (entity.level().purpurConfig.squidImmuneToEAR && entity instanceof Squid) return true; // Purpur ++ if (entity.level().purpurConfig.squidImmuneToEAR && entity instanceof net.minecraft.world.entity.animal.Squid) return true; // Purpur // Never safe to skip fireworks or entities not yet added to chunk if ( entity instanceof FireworkRocketEntity ) { return true; diff --git a/patches/server/0095-Furnace-uses-lava-from-underneath.patch b/patches/server/0095-Furnace-uses-lava-from-underneath.patch index e5d2aa6fe..ecc244969 100644 --- a/patches/server/0095-Furnace-uses-lava-from-underneath.patch +++ b/patches/server/0095-Furnace-uses-lava-from-underneath.patch @@ -5,18 +5,10 @@ Subject: [PATCH] Furnace uses lava from underneath diff --git a/src/main/java/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java -index a99fe191c429bb528209dd0f31b509acf9cccbb5..ce2c424068001eec16032361baa206f6a5aa5332 100644 +index a99fe191c429bb528209dd0f31b509acf9cccbb5..08ff372334f32b9bfac2e7b7a405e43ecf0df959 100644 --- a/src/main/java/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java -@@ -45,6 +45,7 @@ import net.minecraft.world.level.Level; - import net.minecraft.world.level.block.AbstractFurnaceBlock; - import net.minecraft.world.level.block.Blocks; - import net.minecraft.world.level.block.state.BlockState; -+import net.minecraft.world.level.material.FluidState; - import net.minecraft.world.phys.Vec3; - // CraftBukkit start - import org.bukkit.craftbukkit.block.CraftBlock; -@@ -335,6 +336,21 @@ public abstract class AbstractFurnaceBlockEntity extends BaseContainerBlockEntit +@@ -335,6 +335,21 @@ public abstract class AbstractFurnaceBlockEntity extends BaseContainerBlockEntit } ItemStack itemstack = (ItemStack) blockEntity.items.get(1); @@ -26,7 +18,7 @@ index a99fe191c429bb528209dd0f31b509acf9cccbb5..ce2c424068001eec16032361baa206f6 + BlockPos below = blockEntity.getBlockPos().below(); + BlockState belowState = world.getBlockStateIfLoaded(below); + if (belowState != null && belowState.is(Blocks.LAVA)) { -+ FluidState fluidState = belowState.getFluidState(); ++ net.minecraft.world.level.material.FluidState fluidState = belowState.getFluidState(); + if (fluidState != null && fluidState.isSource()) { + world.setBlock(below, Blocks.AIR.defaultBlockState(), 3); + itemstack = Items.LAVA_BUCKET.getDefaultInstance(); @@ -38,7 +30,7 @@ index a99fe191c429bb528209dd0f31b509acf9cccbb5..ce2c424068001eec16032361baa206f6 boolean flag2 = !((ItemStack) blockEntity.items.get(0)).isEmpty(); boolean flag3 = !itemstack.isEmpty(); -@@ -420,6 +436,7 @@ public abstract class AbstractFurnaceBlockEntity extends BaseContainerBlockEntit +@@ -420,6 +435,7 @@ public abstract class AbstractFurnaceBlockEntity extends BaseContainerBlockEntit setChanged(world, pos, state); } diff --git a/patches/server/0099-Make-entity-breeding-times-configurable.patch b/patches/server/0099-Make-entity-breeding-times-configurable.patch index ed3e0f001..82a6500b8 100644 --- a/patches/server/0099-Make-entity-breeding-times-configurable.patch +++ b/patches/server/0099-Make-entity-breeding-times-configurable.patch @@ -95,10 +95,10 @@ index 14210dac8a4fa8caaf69ec830f83d15525bb1bea..a440e9cc8973d6116652a0871251c421 protected void registerGoals() { this.goalSelector.addGoal(0, new FloatGoal(this)); diff --git a/src/main/java/net/minecraft/world/entity/animal/Cow.java b/src/main/java/net/minecraft/world/entity/animal/Cow.java -index 5710f77389f4dc4c56475d36ac592633486f2ba7..8cb0d645e7d2f477874d4d55dbf7a3bc75fe15dc 100644 +index bf5935fbd8e3edfb1221dd06ea1e1a2c8fb887fd..06014b84e99ce2e8c019de921891590e151b2c56 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Cow.java +++ b/src/main/java/net/minecraft/world/entity/animal/Cow.java -@@ -68,6 +68,11 @@ public class Cow extends Animal { +@@ -66,6 +66,11 @@ public class Cow extends Animal { this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.cowMaxHealth); } @@ -111,10 +111,10 @@ index 5710f77389f4dc4c56475d36ac592633486f2ba7..8cb0d645e7d2f477874d4d55dbf7a3bc 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 d2be8c1c23f291e98b9a31a63ba5fa7d44fc7402..0140dc8a58903bd802ea8ffb029392215e95cdf4 100644 +index d1866f0f07e4d023241229a45b55031a37cc5c99..0f0171c6b34f58ef98ffeb9409f601ea25bbc662 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Fox.java +++ b/src/main/java/net/minecraft/world/entity/animal/Fox.java -@@ -189,6 +189,11 @@ public class Fox extends Animal implements VariantHolder { +@@ -188,6 +188,11 @@ public class Fox extends Animal implements VariantHolder { this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.foxMaxHealth); } @@ -126,7 +126,7 @@ index d2be8c1c23f291e98b9a31a63ba5fa7d44fc7402..0140dc8a58903bd802ea8ffb02939221 @Override protected void defineSynchedData(SynchedEntityData.Builder builder) { super.defineSynchedData(builder); -@@ -991,8 +996,10 @@ public class Fox extends Animal implements VariantHolder { +@@ -990,8 +995,10 @@ public class Fox extends Animal implements VariantHolder { CriteriaTriggers.BRED_ANIMALS.trigger(entityplayer2, this.animal, this.partner, entityfox); } diff --git a/patches/server/0104-Changeable-Mob-Left-Handed-Chance.patch b/patches/server/0104-Changeable-Mob-Left-Handed-Chance.patch index 1fd4f031c..f71b027f0 100644 --- a/patches/server/0104-Changeable-Mob-Left-Handed-Chance.patch +++ b/patches/server/0104-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 e7251ac940b49564c83b4b603e49c3990fc85db1..34d00acc43d2541307aa90a77a3c5d19a3057a94 100644 +index 6415bc82e44629a08a2ec881acaa5d993e48bb9d..24755576d2c0e59fe5ed2d6019dfe33a5d6a64f9 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java -@@ -1438,7 +1438,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Targeti +@@ -1437,7 +1437,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Targeti RandomSource randomsource = world.getRandom(); this.getAttribute(Attributes.FOLLOW_RANGE).addPermanentModifier(new AttributeModifier("Random spawn bonus", randomsource.triangle(0.0D, 0.11485000000000001D), AttributeModifier.Operation.ADD_MULTIPLIED_BASE)); @@ -18,7 +18,7 @@ index e7251ac940b49564c83b4b603e49c3990fc85db1..34d00acc43d2541307aa90a77a3c5d19 } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index f87abb5d0572b8d51c91dd90638e7a728c49a69a..4ac5d5469312b5f9e0203551baa085317189553b 100644 +index 3f3584399f56fd475f1a0baa1e29ecfd188fa469..aba8165029d6b614072f511f45bb16c35988fbfd 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/0110-Configurable-chance-for-wolves-to-spawn-rabid.patch b/patches/server/0110-Configurable-chance-for-wolves-to-spawn-rabid.patch index fe20c8c8d..7c94b2a1d 100644 --- a/patches/server/0110-Configurable-chance-for-wolves-to-spawn-rabid.patch +++ b/patches/server/0110-Configurable-chance-for-wolves-to-spawn-rabid.patch @@ -7,19 +7,10 @@ Configurable chance to spawn a wolf that is rabid. Rabid wolves attack all players, mobs, and animals. diff --git a/src/main/java/net/minecraft/world/entity/animal/Wolf.java b/src/main/java/net/minecraft/world/entity/animal/Wolf.java -index 2267f8da1c27ff54b2ced59ef15eb45357b7075d..74ed226b5037f3258106f07384e14baf087be1c3 100644 +index 2267f8da1c27ff54b2ced59ef15eb45357b7075d..073014d44a3ccfca9bb5a387843e22917de13bb4 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Wolf.java +++ b/src/main/java/net/minecraft/world/entity/animal/Wolf.java -@@ -30,6 +30,8 @@ import net.minecraft.world.DifficultyInstance; - import net.minecraft.world.InteractionHand; - import net.minecraft.world.InteractionResult; - import net.minecraft.world.damagesource.DamageSource; -+import net.minecraft.world.effect.MobEffectInstance; -+import net.minecraft.world.effect.MobEffects; - import net.minecraft.world.entity.AgeableMob; - import net.minecraft.world.entity.Crackiness; - import net.minecraft.world.entity.Entity; -@@ -104,6 +106,37 @@ public class Wolf extends TamableAnimal implements NeutralMob, VariantHolder(this, Llama.class, 24.0F, 1.5D, 1.5D)); @@ -96,7 +87,7 @@ index 2267f8da1c27ff54b2ced59ef15eb45357b7075d..74ed226b5037f3258106f07384e14baf this.goalSelector.addGoal(4, new LeapAtTargetGoal(this, 0.4F)); this.goalSelector.addGoal(5, new MeleeAttackGoal(this, 1.0D, true)); this.goalSelector.addGoal(6, new FollowOwnerGoal(this, 1.0D, 10.0F, 2.0F, false)); -@@ -176,7 +234,7 @@ public class Wolf extends TamableAnimal implements NeutralMob, VariantHolder(this, Player.class, 10, true, false, this::isAngryAt)); @@ -105,7 +96,7 @@ index 2267f8da1c27ff54b2ced59ef15eb45357b7075d..74ed226b5037f3258106f07384e14baf this.targetSelector.addGoal(6, new NonTameRandomTargetGoal<>(this, Turtle.class, false, Turtle.BABY_ON_LAND_SELECTOR)); this.targetSelector.addGoal(7, new NearestAttackableTargetGoal<>(this, AbstractSkeleton.class, false)); this.targetSelector.addGoal(8, new ResetUniversalAngerTargetGoal<>(this, true)); -@@ -219,6 +277,7 @@ public class Wolf extends TamableAnimal implements NeutralMob, VariantHolder 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 0140dc8a58903bd802ea8ffb029392215e95cdf4..c246148b9851654d796f472462677a60498c7b8d 100644 +index 0f0171c6b34f58ef98ffeb9409f601ea25bbc662..63e2f3574b784672688f0c486fa160e5b02b01b3 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 { +@@ -1384,7 +1384,7 @@ public class Fox extends Animal implements VariantHolder { } protected void onReachedTarget() { @@ -131,7 +131,7 @@ index ee4d4a4fe314ee9bce69c96dd65d84ed1ace0543..cdb6657d30d224709aec3921c5fb8380 } 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 f751444603e4a1a2ef53e7232b5abfff82c316e8..0478469343c30d2b8d79bda78aef9ff1348de19b 100644 +index ff2faa3ad719378b21f84a7839b4e0c60ea5f66f..ca26c926a014c985f83cfa376a9e859d0c8b2d6b 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 { @@ -375,7 +375,7 @@ index c7377d04ceac3ea624117439783a443c6d6f6d08..0c732cfbd9ce50198a3f85ae8ef2263d } } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 66c4906cb9c3da6f111b96f0ad6be17772764125..51002cc2901b432123dfc6b3c130e26b3c3486a3 100644 +index 076d26136c46fdf1eba18fde04c0fe8e28efa2bd..aca1e2c31ae757041bbdc12931d1ff0ba6c33b87 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -115,8 +115,11 @@ public class PurpurWorldConfig { diff --git a/patches/server/0124-Toggle-for-water-sensitive-mob-damage.patch b/patches/server/0124-Toggle-for-water-sensitive-mob-damage.patch index f2c61d20d..5c335d141 100644 --- a/patches/server/0124-Toggle-for-water-sensitive-mob-damage.patch +++ b/patches/server/0124-Toggle-for-water-sensitive-mob-damage.patch @@ -110,10 +110,10 @@ index 3d61c2d5da103de68242c16d85c703813979d179..2343325fa9a771de7b9445cda24a2bcd public ItemStack getBucketItemStack() { return new ItemStack(Items.COD_BUCKET); diff --git a/src/main/java/net/minecraft/world/entity/animal/Cow.java b/src/main/java/net/minecraft/world/entity/animal/Cow.java -index 8cb0d645e7d2f477874d4d55dbf7a3bc75fe15dc..3950ee673a8fc4aa1edb8e462cfa72fe40dd0062 100644 +index 06014b84e99ce2e8c019de921891590e151b2c56..c519883f4ed3772378b5563401b8c557dc315ace 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Cow.java +++ b/src/main/java/net/minecraft/world/entity/animal/Cow.java -@@ -73,6 +73,11 @@ public class Cow extends Animal { +@@ -71,6 +71,11 @@ public class Cow extends Animal { return this.level().purpurConfig.cowBreedingTicks; } @@ -142,10 +142,10 @@ index 366d583926e7e33a8c1e5a803bb75a456b4838d0..38112239035b0c66c429c0762199867e @Override public SpawnGroupData finalizeSpawn(ServerLevelAccessor world, DifficultyInstance difficulty, MobSpawnType spawnReason, @Nullable SpawnGroupData entityData) { 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 c246148b9851654d796f472462677a60498c7b8d..ee691437da9571900039f90c1700cd33e31c03bc 100644 +index 63e2f3574b784672688f0c486fa160e5b02b01b3..5807a498b910ad96d7e6f69db5241c925dcdb97c 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Fox.java +++ b/src/main/java/net/minecraft/world/entity/animal/Fox.java -@@ -194,6 +194,11 @@ public class Fox extends Animal implements VariantHolder { +@@ -193,6 +193,11 @@ public class Fox extends Animal implements VariantHolder { return this.level().purpurConfig.foxBreedingTicks; } @@ -395,10 +395,10 @@ index a577ec78b2f5bca0166277c499da4fa7988d5395..b146ac72584d998cee4279133b3b1905 this.entityData.set(Turtle.HOME_POS, pos.immutable()); // Paper - called with mutablepos... } diff --git a/src/main/java/net/minecraft/world/entity/animal/Wolf.java b/src/main/java/net/minecraft/world/entity/animal/Wolf.java -index 580bff2b4308f97acf402c9539755aee7aa8b3d8..db0d71da579752bfb8246f5fa2ec9d360f53c7a8 100644 +index 3b7392852fd8b3c88969b46eeee3aefddde06920..c0a4a6066f7330974971e93a74f9b35d135166e7 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Wolf.java +++ b/src/main/java/net/minecraft/world/entity/animal/Wolf.java -@@ -219,6 +219,11 @@ public class Wolf extends TamableAnimal implements NeutralMob, VariantHolder(this, Player.class, 10, true, false, this::okTarget)); -@@ -174,7 +176,7 @@ public class Drowned extends Zombie implements RangedAttackMob { +@@ -174,7 +175,7 @@ public class Drowned extends Zombie implements RangedAttackMob { @Override public boolean supportsBreakDoorGoal() { @@ -34,7 +26,7 @@ index f037d50f26f7532f11a71790448de7a71644b6ca..2547ac49721e2840da2845076d5e62a1 @Override diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 75903da7236f6f57c4978d33cd8ac15a4f7d7a62..b3a999c8ecaaf9e0dae83d0fe10f9f927f592b58 100644 +index e880950eed7bda56e008c5a365314d175aa8ddb7..a23b90e4beba29adbe36e2dda2f7d85d5fd37693 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -1054,6 +1054,7 @@ public class PurpurWorldConfig { diff --git a/patches/server/0201-Shulker-change-color-with-dye.patch b/patches/server/0201-Shulker-change-color-with-dye.patch index 9bc5a11f2..cce7a90c0 100644 --- a/patches/server/0201-Shulker-change-color-with-dye.patch +++ b/patches/server/0201-Shulker-change-color-with-dye.patch @@ -5,40 +5,22 @@ 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 73063abbd051f1d044a8b2c0530cc8d2a96a6331..687fadf1ef64c5ae7e00c5da15b82245e07d3a39 100644 +index 796f0a3d8dc8faf202e912fe44afb898d286a895..39b980eeb863fda008259a4b52e39393903b4e9c 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Shulker.java +++ b/src/main/java/net/minecraft/world/entity/monster/Shulker.java -@@ -23,6 +23,8 @@ import net.minecraft.tags.DamageTypeTags; - import net.minecraft.util.Mth; - import net.minecraft.world.Difficulty; - import net.minecraft.world.DifficultyInstance; -+import net.minecraft.world.InteractionHand; -+import net.minecraft.world.InteractionResult; - import net.minecraft.world.damagesource.DamageSource; - import net.minecraft.world.entity.Entity; - import net.minecraft.world.entity.EntitySelector; -@@ -48,6 +50,8 @@ import net.minecraft.world.entity.player.Player; - import net.minecraft.world.entity.projectile.AbstractArrow; - import net.minecraft.world.entity.projectile.ShulkerBullet; - import net.minecraft.world.item.DyeColor; -+import net.minecraft.world.item.DyeItem; -+import net.minecraft.world.item.ItemStack; - import net.minecraft.world.level.Level; - import net.minecraft.world.level.ServerLevelAccessor; - import net.minecraft.world.level.block.Blocks; -@@ -124,6 +128,19 @@ public class Shulker extends AbstractGolem implements VariantHolder { - return level().purpurConfig.cowFeedMushrooms > 0 && (itemstack.is(Blocks.RED_MUSHROOM.asItem()) || itemstack.is(Blocks.BROWN_MUSHROOM.asItem())) || itemstack.is(ItemTags.COW_FOOD); // Purpur -@@ -91,6 +100,7 @@ public class Cow extends Animal { + return level().purpurConfig.cowFeedMushrooms > 0 && (itemstack.is(net.minecraft.world.level.block.Blocks.RED_MUSHROOM.asItem()) || itemstack.is(net.minecraft.world.level.block.Blocks.BROWN_MUSHROOM.asItem())) || itemstack.is(ItemTags.COW_FOOD); // Purpur +@@ -89,6 +98,7 @@ public class Cow extends Animal { this.goalSelector.addGoal(5, new WaterAvoidingRandomStrollGoal(this, 1.0D)); this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 6.0F)); this.goalSelector.addGoal(7, new RandomLookAroundGoal(this)); @@ -51,7 +51,7 @@ index 8c908891c6c683332d8877ab3fa084a0849b17a9..541cc6c70178a430ac8e3ab8f6a2250b } @Override -@@ -99,7 +109,7 @@ public class Cow extends Animal { +@@ -97,7 +107,7 @@ public class Cow extends Animal { } public static AttributeSupplier.Builder createAttributes() { @@ -61,7 +61,7 @@ index 8c908891c6c683332d8877ab3fa084a0849b17a9..541cc6c70178a430ac8e3ab8f6a2250b @Override diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index b1a941d2747ca93354c9abb67df8419114f27ff7..0edff6f99dbea98f0d80f2a48d52d86874430ff5 100644 +index 0c705b36e729b45e802770f4e21a7bfbc9919b86..d5e06e7510193239f4e085cb315f736636c690d5 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -1282,7 +1282,14 @@ public class PurpurWorldConfig { diff --git a/patches/server/0219-Mobs-always-drop-experience.patch b/patches/server/0219-Mobs-always-drop-experience.patch index d8c035500..b60580243 100644 --- a/patches/server/0219-Mobs-always-drop-experience.patch +++ b/patches/server/0219-Mobs-always-drop-experience.patch @@ -101,10 +101,10 @@ index 2343325fa9a771de7b9445cda24a2bcd7a7c1761..f0b6118a9995bb41836685bbf94d2e7f public ItemStack getBucketItemStack() { return new ItemStack(Items.COD_BUCKET); diff --git a/src/main/java/net/minecraft/world/entity/animal/Cow.java b/src/main/java/net/minecraft/world/entity/animal/Cow.java -index 541242018890b688033159a72204fa0bd9db5387..4541e72bc93b19df6aecc781b4e381a7224aa4a7 100644 +index 78f00014c034949b6559ca948b1b78fa90f45334..97bdd48d8fa6b04e86f2db2be612dc8af1a4cb90 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Cow.java +++ b/src/main/java/net/minecraft/world/entity/animal/Cow.java -@@ -86,6 +86,11 @@ public class Cow extends Animal { +@@ -84,6 +84,11 @@ public class Cow extends Animal { return super.finalizeSpawn(world, difficulty, spawnReason, entityData); } @@ -133,10 +133,10 @@ index e539eefb6e6d3172611d1f9185a1138001481885..c1a9a87ef0fefc499c0e1edbe1031f47 @Override public SpawnGroupData finalizeSpawn(ServerLevelAccessor world, DifficultyInstance difficulty, MobSpawnType spawnReason, @Nullable SpawnGroupData entityData) { 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 ee691437da9571900039f90c1700cd33e31c03bc..124839f22ed0499ca395a648e858469d81d31f93 100644 +index 5807a498b910ad96d7e6f69db5241c925dcdb97c..80f897007a60eb0cb9d300207b50387e1b377379 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Fox.java +++ b/src/main/java/net/minecraft/world/entity/animal/Fox.java -@@ -199,6 +199,11 @@ public class Fox extends Animal implements VariantHolder { +@@ -198,6 +198,11 @@ public class Fox extends Animal implements VariantHolder { return this.level().purpurConfig.foxTakeDamageFromWater; } @@ -389,10 +389,10 @@ index b146ac72584d998cee4279133b3b19051fbf14c9..01dc59695f295657b1cd7bb015558bfc this.entityData.set(Turtle.HOME_POS, pos.immutable()); // Paper - called with mutablepos... } diff --git a/src/main/java/net/minecraft/world/entity/animal/Wolf.java b/src/main/java/net/minecraft/world/entity/animal/Wolf.java -index 31b5d874fdc6f7d2eaabe877b32b64d360cb48e3..e1f6202df983be2510436538904a45beedbdc9c2 100644 +index 88f34f29f3d18fa0e3ba1ae1d7d983c66609c207..a8193ef23763a11016b9ac8c7dd55b9e240d6039 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Wolf.java +++ b/src/main/java/net/minecraft/world/entity/animal/Wolf.java -@@ -224,6 +224,11 @@ public class Wolf extends TamableAnimal implements NeutralMob, VariantHolder list = this.level().getEntitiesOfClass(ItemEntity.class, this.getBoundingBox().inflate((double) baseblockposition.getX(), (double) baseblockposition.getY(), (double) baseblockposition.getZ())); -@@ -767,7 +767,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Targeti +@@ -766,7 +766,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Targeti } } @@ -1359,7 +1359,7 @@ index 3486c6782f9bbb3477d2fefd1e0a363a5326999f..6cb17876fc0efaf15ab9f54e4c95b9b8 } protected Vec3i getPickupReach() { -@@ -992,44 +992,44 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Targeti +@@ -991,44 +991,44 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Targeti return; } // Paper end - Allow nerfed mobs to jump and float From cc56332b4ee7646907977a89080b35d329b3057d Mon Sep 17 00:00:00 2001 From: granny Date: Thu, 13 Jun 2024 16:27:38 -0700 Subject: [PATCH 044/588] Final 1.20.6 Paper Upstream \o/ Upstream has released updates that appear to apply and compile correctly Paper Changes: PaperMC/Paper@79e2cb6 Update upstream (Bukkit/CraftBukkit/Spigot) (#10875) --- gradle.properties | 2 +- patches/api/0004-Purpur-client-support.patch | 4 +- patches/api/0009-AFK-API.patch | 4 +- patches/api/0011-ExecuteCommandEvent.patch | 6 +-- .../0015-ItemStack-convenience-methods.patch | 8 ++-- ...e-to-recipe-s-ExactChoice-ingredient.patch | 8 ++-- .../0027-Fix-default-permission-system.patch | 10 ++--- ...0029-Clean-up-version-command-output.patch | 6 +-- .../api/0035-Add-local-difficulty-api.patch | 4 +- patches/api/0036-Remove-Timings.patch | 4 +- patches/api/0038-Debug-Marker-API.patch | 12 ++--- patches/api/0039-Add-death-screen-API.patch | 4 +- patches/server/0001-Rebrand.patch | 6 +-- patches/server/0002-Purpur-config-files.patch | 14 +++--- .../server/0003-Purpur-client-support.patch | 6 +-- patches/server/0006-Ridables.patch | 10 ++--- patches/server/0010-AFK-API.patch | 8 ++-- .../server/0011-Bring-back-server-name.patch | 4 +- patches/server/0013-Lagging-threshold.patch | 6 +-- ...-settings-suppressing-pointless-logs.patch | 8 ++-- ...able-loot-drops-on-death-by-cramming.patch | 6 +-- ...urable-void-damage-height-and-damage.patch | 4 +- ...0056-Add-5-second-tps-average-in-tps.patch | 6 +-- .../0057-Implement-elytra-settings.patch | 6 +-- .../0075-Totems-work-in-inventory.patch | 4 +- ...iefing-bypass-to-everything-affected.patch | 4 +- ...169-API-for-any-mob-to-burn-daylight.patch | 4 +- .../0191-Toggle-for-kinetic-damage.patch | 4 +- ...the-ability-to-add-combustible-items.patch | 4 +- ...fig-for-mob-last-hurt-by-player-time.patch | 6 +-- .../0252-Add-local-difficulty-api.patch | 4 +- patches/server/0254-Remove-Timings.patch | 8 ++-- .../server/0255-Remove-Mojang-Profiler.patch | 20 ++++----- patches/server/0258-Debug-Marker-API.patch | 12 ++--- .../server/0261-Add-death-screen-API.patch | 4 +- patches/server/0266-Language-API.patch | 4 +- .../server/0297-Adopt-MaterialRerouting.patch | 45 +++++++++++++++++++ 37 files changed, 162 insertions(+), 117 deletions(-) create mode 100644 patches/server/0297-Adopt-MaterialRerouting.patch diff --git a/gradle.properties b/gradle.properties index 83b68fe1b..5feac6a43 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ group = org.purpurmc.purpur version = 1.20.6-R0.1-SNAPSHOT mcVersion = 1.20.6 -paperCommit = 906df69f05d0779906377abb809bfec9fc3c3546 +paperCommit = 79e2cb620ef03539390d97940824b38b707918f5 org.gradle.caching = true org.gradle.parallel = true diff --git a/patches/api/0004-Purpur-client-support.patch b/patches/api/0004-Purpur-client-support.patch index c5e33fa12..51b04656d 100644 --- a/patches/api/0004-Purpur-client-support.patch +++ b/patches/api/0004-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 6c327a07bf8a6aa11a2d7dad12b2830acc539484..d972cb242102a3ee7c017299aed64340628c79d8 100644 +index eb34f22e973fe46529eb93f435f5bf7f85091404..813096eee6a09419209baca9139d9aac1593d8ca 100644 --- a/src/main/java/org/bukkit/entity/Player.java +++ b/src/main/java/org/bukkit/entity/Player.java -@@ -3806,4 +3806,13 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM +@@ -3854,4 +3854,13 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM @Override Spigot spigot(); // Spigot end diff --git a/patches/api/0009-AFK-API.patch b/patches/api/0009-AFK-API.patch index d805660fb..5500c83f8 100644 --- a/patches/api/0009-AFK-API.patch +++ b/patches/api/0009-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 d972cb242102a3ee7c017299aed64340628c79d8..972cca3e02296f94099f965a4f7662ec63a067ea 100644 +index 813096eee6a09419209baca9139d9aac1593d8ca..a03f473dee39eb160196e2468e4c26c6f8f6ce2a 100644 --- a/src/main/java/org/bukkit/entity/Player.java +++ b/src/main/java/org/bukkit/entity/Player.java -@@ -3814,5 +3814,25 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM +@@ -3862,5 +3862,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-ExecuteCommandEvent.patch b/patches/api/0011-ExecuteCommandEvent.patch index 8fd1af0a7..4d7aa00b8 100644 --- a/patches/api/0011-ExecuteCommandEvent.patch +++ b/patches/api/0011-ExecuteCommandEvent.patch @@ -5,10 +5,10 @@ Subject: [PATCH] ExecuteCommandEvent diff --git a/src/main/java/org/bukkit/command/SimpleCommandMap.java b/src/main/java/org/bukkit/command/SimpleCommandMap.java -index c3a9cf65db73ed534bf20996c7f05b5eb0aaebe1..83f84a76cbfdf5138ecccf3a886d38151a500bf2 100644 +index 5df19bd701c67506689fc7f49d91f99ebfbc83f0..a09b5458191eb5df4787859b72a37fa1fa2bffba 100644 --- a/src/main/java/org/bukkit/command/SimpleCommandMap.java +++ b/src/main/java/org/bukkit/command/SimpleCommandMap.java -@@ -152,6 +152,19 @@ public class SimpleCommandMap implements CommandMap { +@@ -153,6 +153,19 @@ public class SimpleCommandMap implements CommandMap { return false; } @@ -28,7 +28,7 @@ index c3a9cf65db73ed534bf20996c7f05b5eb0aaebe1..83f84a76cbfdf5138ecccf3a886d3815 // Paper start - Plugins do weird things to workaround normal registration if (target.timings == null) { target.timings = co.aikar.timings.TimingsManager.getCommandTiming(null, target); -@@ -161,7 +174,7 @@ public class SimpleCommandMap implements CommandMap { +@@ -162,7 +175,7 @@ public class SimpleCommandMap implements CommandMap { try { try (co.aikar.timings.Timing ignored = target.timings.startTiming()) { // Paper - use try with resources // Note: we don't return the result of target.execute as thats success / failure, we return handled (true) or not handled (false) diff --git a/patches/api/0015-ItemStack-convenience-methods.patch b/patches/api/0015-ItemStack-convenience-methods.patch index 5d52b2610..b61a1dc52 100644 --- a/patches/api/0015-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 4f7f91b5e2903ce3b180c637cb463e01a860271e..5b14cea8d246f31c51b09baa731e673f305aea6e 100644 +index 762216a117145676d3df2b74036799b024461fb7..54c080d650f807b05e5d8347f78e2bc243791172 100644 --- a/src/main/java/org/bukkit/Material.java +++ b/src/main/java/org/bukkit/Material.java -@@ -5733,4 +5733,40 @@ public enum Material implements Keyed, Translatable, net.kyori.adventure.transla +@@ -5764,4 +5764,40 @@ public enum Material implements Keyed, Translatable, net.kyori.adventure.transla } return Registry.BLOCK.get(material.key); } @@ -50,7 +50,7 @@ index 4f7f91b5e2903ce3b180c637cb463e01a860271e..5b14cea8d246f31c51b09baa731e673f + // Purpur end } diff --git a/src/main/java/org/bukkit/inventory/ItemStack.java b/src/main/java/org/bukkit/inventory/ItemStack.java -index c64413a6740b604282984dea2a8430a6e7478d68..5c609d916e2d2f08ba90ebd23f13c5c9a14bc73c 100644 +index 40cde68c7b73a0a92e2a96667a90138d67ce66ff..fee2469bdedff0e55ef4dcda410cac35c6319258 100644 --- a/src/main/java/org/bukkit/inventory/ItemStack.java +++ b/src/main/java/org/bukkit/inventory/ItemStack.java @@ -19,6 +19,17 @@ import org.bukkit.inventory.meta.ItemMeta; @@ -71,7 +71,7 @@ index c64413a6740b604282984dea2a8430a6e7478d68..5c609d916e2d2f08ba90ebd23f13c5c9 /** * Represents a stack of items. -@@ -1079,4 +1090,565 @@ public class ItemStack implements Cloneable, ConfigurationSerializable, Translat +@@ -1081,4 +1092,565 @@ public class ItemStack implements Cloneable, ConfigurationSerializable, Translat return Bukkit.getUnsafe().computeTooltipLines(this, tooltipContext, player); } // Paper end - expose itemstack tooltip lines diff --git a/patches/api/0019-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch b/patches/api/0019-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch index 4e2fba82c..85ddb086f 100644 --- a/patches/api/0019-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch +++ b/patches/api/0019-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/org/bukkit/inventory/RecipeChoice.java b/src/main/java/org/bukkit/inventory/RecipeChoice.java -index 1cd6601c9d2e86ef850011fcb9e59811207b4af7..81c563d44c311ea1b49425d93c57f46beb4a2ef9 100644 +index e7796054f3f65f5bea7f93c75320195f6c2f0561..1b1d05b77e93abe93ed782883f8d791f6559f778 100644 --- a/src/main/java/org/bukkit/inventory/RecipeChoice.java +++ b/src/main/java/org/bukkit/inventory/RecipeChoice.java -@@ -180,6 +180,7 @@ public interface RecipeChoice extends Predicate, Cloneable { +@@ -191,6 +191,7 @@ public interface RecipeChoice extends Predicate, Cloneable { public static class ExactChoice implements RecipeChoice { private List choices; @@ -16,7 +16,7 @@ index 1cd6601c9d2e86ef850011fcb9e59811207b4af7..81c563d44c311ea1b49425d93c57f46b public ExactChoice(@NotNull ItemStack stack) { this(Arrays.asList(stack)); -@@ -229,6 +230,7 @@ public interface RecipeChoice extends Predicate, Cloneable { +@@ -241,6 +242,7 @@ public interface RecipeChoice extends Predicate, Cloneable { @Override public boolean test(@NotNull ItemStack t) { @@ -24,7 +24,7 @@ index 1cd6601c9d2e86ef850011fcb9e59811207b4af7..81c563d44c311ea1b49425d93c57f46b for (ItemStack match : choices) { if (t.isSimilar(match)) { return true; -@@ -238,6 +240,17 @@ public interface RecipeChoice extends Predicate, Cloneable { +@@ -250,6 +252,17 @@ public interface RecipeChoice extends Predicate, Cloneable { return false; } diff --git a/patches/api/0027-Fix-default-permission-system.patch b/patches/api/0027-Fix-default-permission-system.patch index 754c4e1e3..83d8a54ee 100644 --- a/patches/api/0027-Fix-default-permission-system.patch +++ b/patches/api/0027-Fix-default-permission-system.patch @@ -5,25 +5,25 @@ Subject: [PATCH] Fix default permission system diff --git a/src/main/java/org/bukkit/permissions/PermissibleBase.java b/src/main/java/org/bukkit/permissions/PermissibleBase.java -index cd3296fea01648592d2af89b3d80135acb6d0958..45797a6fbae1d8edc4211cb30def24ad4f59bd49 100644 +index 75b77cc4fe189b4b6baa1af3663dc492e992a266..30b98d1645c571ba5c18e5cc93b0bec3f74b1d3b 100644 --- a/src/main/java/org/bukkit/permissions/PermissibleBase.java +++ b/src/main/java/org/bukkit/permissions/PermissibleBase.java -@@ -168,7 +168,7 @@ public class PermissibleBase implements Permissible { +@@ -169,7 +169,7 @@ public class PermissibleBase implements Permissible { for (Permission perm : defaults) { - String name = perm.getName().toLowerCase(java.util.Locale.ENGLISH); + String name = perm.getName().toLowerCase(Locale.ROOT); - permissions.put(name, new PermissionAttachmentInfo(parent, name, null, true)); + permissions.put(name, new PermissionAttachmentInfo(parent, name, null, perm.getDefault().getValue(isOp()))); // Purpur Bukkit.getServer().getPluginManager().subscribeToPermission(name, parent); calculateChildPermissions(perm.getChildren(), false, null); } -@@ -196,7 +196,7 @@ public class PermissibleBase implements Permissible { +@@ -197,7 +197,7 @@ public class PermissibleBase implements Permissible { String name = entry.getKey(); Permission perm = Bukkit.getServer().getPluginManager().getPermission(name); - boolean value = entry.getValue() ^ invert; + boolean value = (entry.getValue() == null && perm != null ? perm.getDefault().getValue(isOp()) : entry.getValue()) ^ invert; // Purpur - String lname = name.toLowerCase(java.util.Locale.ENGLISH); + String lname = name.toLowerCase(Locale.ROOT); permissions.put(lname, new PermissionAttachmentInfo(parent, lname, attachment, value)); diff --git a/src/main/java/org/bukkit/util/permissions/DefaultPermissions.java b/src/main/java/org/bukkit/util/permissions/DefaultPermissions.java diff --git a/patches/api/0029-Clean-up-version-command-output.patch b/patches/api/0029-Clean-up-version-command-output.patch index 5e853fa92..b71081eb6 100644 --- a/patches/api/0029-Clean-up-version-command-output.patch +++ b/patches/api/0029-Clean-up-version-command-output.patch @@ -22,10 +22,10 @@ index a736d7bcdc5861a01b66ba36158db1c716339346..22fc165fd9c95f0f3ae1be7a0857e48c @Override diff --git a/src/main/java/org/bukkit/command/defaults/VersionCommand.java b/src/main/java/org/bukkit/command/defaults/VersionCommand.java -index fd5d9881abfd930bb883120f018f76dc78b62b14..3d29c47ac0620af82d990faf5dfc266c6f0235f1 100644 +index e64bb57f74e6d6f78927be228825b3e0bdf41f48..c880d0010849ab733ad13bbd18fab3c864d0cf61 100644 --- a/src/main/java/org/bukkit/command/defaults/VersionCommand.java +++ b/src/main/java/org/bukkit/command/defaults/VersionCommand.java -@@ -214,7 +214,7 @@ public class VersionCommand extends BukkitCommand { +@@ -215,7 +215,7 @@ public class VersionCommand extends BukkitCommand { String version = Bukkit.getVersion(); // Paper start if (version.startsWith("null")) { // running from ide? @@ -34,7 +34,7 @@ index fd5d9881abfd930bb883120f018f76dc78b62b14..3d29c47ac0620af82d990faf5dfc266c return; } setVersionMessage(getVersionFetcher().getVersionMessage(version)); -@@ -255,9 +255,11 @@ public class VersionCommand extends BukkitCommand { +@@ -256,9 +256,11 @@ public class VersionCommand extends BukkitCommand { // Paper start private void setVersionMessage(final @NotNull Component msg) { lastCheck = System.currentTimeMillis(); diff --git a/patches/api/0035-Add-local-difficulty-api.patch b/patches/api/0035-Add-local-difficulty-api.patch index 46e1e1486..65a45e992 100644 --- a/patches/api/0035-Add-local-difficulty-api.patch +++ b/patches/api/0035-Add-local-difficulty-api.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add local difficulty api diff --git a/src/main/java/org/bukkit/World.java b/src/main/java/org/bukkit/World.java -index 97f97ea5c6aa513c439f86a9c82821e0f7d9cd1e..099516b90c504205b894b387542221e8c0c98b40 100644 +index fdb87adfb8d6eff2bfabe7a41398c53d15d4cd98..25a049040a982194e7337d283898b252568f09e0 100644 --- a/src/main/java/org/bukkit/World.java +++ b/src/main/java/org/bukkit/World.java -@@ -4249,6 +4249,16 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient +@@ -4276,6 +4276,16 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient @Nullable public DragonBattle getEnderDragonBattle(); diff --git a/patches/api/0036-Remove-Timings.patch b/patches/api/0036-Remove-Timings.patch index e6e555809..debc2fc1b 100644 --- a/patches/api/0036-Remove-Timings.patch +++ b/patches/api/0036-Remove-Timings.patch @@ -136,10 +136,10 @@ index e801e79fa57c44b2e5d359647c920f88064826f1..1abfcee0f6d632f4cd8d74b4994a90c9 new ArrayList(TIMINGS_SUBCOMMANDS.size())); } diff --git a/src/main/java/org/bukkit/command/SimpleCommandMap.java b/src/main/java/org/bukkit/command/SimpleCommandMap.java -index 83f84a76cbfdf5138ecccf3a886d38151a500bf2..fdedac32544be6534288c8ba28abe7f5c4c56f3b 100644 +index a09b5458191eb5df4787859b72a37fa1fa2bffba..7740ad53796d08584bb0110f99af5639993e4d71 100644 --- a/src/main/java/org/bukkit/command/SimpleCommandMap.java +++ b/src/main/java/org/bukkit/command/SimpleCommandMap.java -@@ -172,10 +172,10 @@ public class SimpleCommandMap implements CommandMap { +@@ -173,10 +173,10 @@ public class SimpleCommandMap implements CommandMap { // Paper end try { diff --git a/patches/api/0038-Debug-Marker-API.patch b/patches/api/0038-Debug-Marker-API.patch index 7621add2d..13c232987 100644 --- a/patches/api/0038-Debug-Marker-API.patch +++ b/patches/api/0038-Debug-Marker-API.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Debug Marker API diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java -index 0b298161d8b94d655113328ebc0cd19a65619c72..83b979fbb8c0dd64f0a19feef654af2b165bd603 100644 +index ad5f2a8991c3b7925626fd463110765ff964beb9..bb09c468ab1261ea4eaf59012d30a2e45199caf7 100644 --- a/src/main/java/org/bukkit/Bukkit.java +++ b/src/main/java/org/bukkit/Bukkit.java @@ -2951,5 +2951,89 @@ public final class Bukkit { @@ -99,7 +99,7 @@ index 0b298161d8b94d655113328ebc0cd19a65619c72..83b979fbb8c0dd64f0a19feef654af2b // Purpur end } diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java -index cecf7b49e3858359ae7eaa4318180d7f11728a7a..916db0d6096338c4f1b8707048eb38b50a2b027d 100644 +index e75cccea44c9a693dfe52a419c742da9a62da42a..36d8ce7a21513600ab10b7e6f47c9f1d2cc51947 100644 --- a/src/main/java/org/bukkit/Server.java +++ b/src/main/java/org/bukkit/Server.java @@ -2588,5 +2588,75 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi @@ -179,10 +179,10 @@ index cecf7b49e3858359ae7eaa4318180d7f11728a7a..916db0d6096338c4f1b8707048eb38b5 // Purpur end } diff --git a/src/main/java/org/bukkit/World.java b/src/main/java/org/bukkit/World.java -index 099516b90c504205b894b387542221e8c0c98b40..83a5b68c785a88594e6e3824ed282844086f7f1a 100644 +index 25a049040a982194e7337d283898b252568f09e0..0f2f7cb8acb226d6f9a1085ec9cac3f8faa77813 100644 --- a/src/main/java/org/bukkit/World.java +++ b/src/main/java/org/bukkit/World.java -@@ -4257,6 +4257,76 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient +@@ -4284,6 +4284,76 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient * @return The local difficulty */ public float getLocalDifficultyAt(@NotNull Location location); @@ -260,10 +260,10 @@ index 099516b90c504205b894b387542221e8c0c98b40..83a5b68c785a88594e6e3824ed282844 /** diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java -index 972cca3e02296f94099f965a4f7662ec63a067ea..ec49be86fa9b2612ae2853f06f503bffa3a1271d 100644 +index a03f473dee39eb160196e2468e4c26c6f8f6ce2a..2443f32d5a832b8913cd00042b94fda96658a3c2 100644 --- a/src/main/java/org/bukkit/entity/Player.java +++ b/src/main/java/org/bukkit/entity/Player.java -@@ -3834,5 +3834,75 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM +@@ -3882,5 +3882,75 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM * @deprecated Use {@link #resetIdleDuration()} instead */ void resetIdleTimer(); diff --git a/patches/api/0039-Add-death-screen-API.patch b/patches/api/0039-Add-death-screen-API.patch index 68f89598e..30f3605f9 100644 --- a/patches/api/0039-Add-death-screen-API.patch +++ b/patches/api/0039-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 ec49be86fa9b2612ae2853f06f503bffa3a1271d..d057743b8f6a463434c1f76398c7a98614b19d47 100644 +index 2443f32d5a832b8913cd00042b94fda96658a3c2..c41b5e13c519b3f48cbc866ad77b153cdde13136 100644 --- a/src/main/java/org/bukkit/entity/Player.java +++ b/src/main/java/org/bukkit/entity/Player.java -@@ -3904,5 +3904,25 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM +@@ -3952,5 +3952,25 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM * Clears all debug block highlights */ void clearBlockHighlights(); diff --git a/patches/server/0001-Rebrand.patch b/patches/server/0001-Rebrand.patch index 663d5bedd..052131c52 100644 --- a/patches/server/0001-Rebrand.patch +++ b/patches/server/0001-Rebrand.patch @@ -199,7 +199,7 @@ index 4f3cc14d48690bb183d09bb7a5ba1e23e8a0c08a..c366d84518979e842a6f10f969a59515 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 0ed42fa899721f83b598db05be1b5f321af3614a..d42cd000684f6bed26a188bfcf2c633e49b51370 100644 +index 3751c2a077bd13bac330b93c6efc2a640a17f4f2..38d2dfcee9462aaf9aa4954effe2b40242d4bb76 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -956,7 +956,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 1.0E-5F) { -@@ -3484,8 +3485,10 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -3478,8 +3479,10 @@ public abstract class LivingEntity extends Entity implements Attackable { this.pushEntities(); this.level().getProfiler().pop(); // Paper start - Add EntityMoveEvent @@ -245,7 +245,7 @@ index ce01fe82dc1eaaf06ca317ddbc62b7d1b87a48b2..de03ae0d49a9331c6e397c2a26114a93 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()); -@@ -3495,6 +3498,21 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -3489,6 +3492,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()); } } diff --git a/patches/server/0010-AFK-API.patch b/patches/server/0010-AFK-API.patch index fdfa7ea18..25433b8aa 100644 --- a/patches/server/0010-AFK-API.patch +++ b/patches/server/0010-AFK-API.patch @@ -78,7 +78,7 @@ index 5dd8c9f53ba50f160198a09dd2069edbac48230e..70838e5ee30733a71ad73330f69ea093 return this.stats; } diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index a33a724de4c408fcf23b8ec9206311fc25936f1c..d84f083ea335d4bfc021e11cbb86bcc17f9ba76c 100644 +index ac11226ca4b8d730871851d99491d598e41a0de6..5a62fb4e441b251c92534a09b2f4af39a2e8e34c 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java @@ -332,6 +332,20 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl @@ -192,7 +192,7 @@ index d2f0c3b26d4beedb49d86e0242d843590d469d02..7463eefb7d09ea55fe8780210e7e967c 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 a651b1ecca3133876486dab08627c67449b67005..91a52b49141c7d1e5b9553a4a7e33c85b95ce49f 100644 +index 5f87d625be6249c37a7397933b0edb22f67e5c39..7ddc0b1005433ef467e1a086a19acd1ab5c9fc24 100644 --- a/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java @@ -201,6 +201,13 @@ public abstract class Player extends LivingEntity { @@ -223,7 +223,7 @@ index ea0aee88c7d901034427db201c1b2430f8a1d522..1f28bfb435c1e4d97da713f96c452aba if (range < 0.0 || d < range * range) { return true; diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 497439478e20f2207e23e8e556ac7df80eb7e5c7..a0db237d748147280cd4ccfc6eaa601974f1f304 100644 +index 69de5167aeaa6f9cb66fa7c2daa63a2e72c93fd0..5ace17f1bc7b6c5c99849ac5a650de4205c7fbbd 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -574,10 +574,15 @@ public class CraftPlayer extends CraftHumanEntity implements Player { @@ -243,7 +243,7 @@ index 497439478e20f2207e23e8e556ac7df80eb7e5c7..a0db237d748147280cd4ccfc6eaa6019 if (this.getHandle().connection == null) return; // Paper - Updates are possible before the player has fully joined for (ServerPlayer player : (List) this.server.getHandle().players) { if (player.getBukkitEntity().canSee(this)) { -@@ -3525,5 +3530,20 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -3534,5 +3539,20 @@ public class CraftPlayer extends CraftHumanEntity implements Player { public boolean usesPurpurClient() { return getHandle().purpurClient; } diff --git a/patches/server/0011-Bring-back-server-name.patch b/patches/server/0011-Bring-back-server-name.patch index 017be150b..83168c5b1 100644 --- a/patches/server/0011-Bring-back-server-name.patch +++ b/patches/server/0011-Bring-back-server-name.patch @@ -17,10 +17,10 @@ index 9d10cdacb3aed2c00dc60aeb6f2cbeb48905e21f..842f382de43df5d5c321422372ec30cc public final boolean spawnNpcs = this.get("spawn-npcs", true); public final boolean pvp = this.get("pvp", true); diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 934b942d1e8fdd0b9b3c1f704d514f06a9556623..635666762408b9e62ace15703c75f2dbcc768967 100644 +index 987cc39ebc9332ba0c974fb4e8b89ebbe05aff5f..72d3d80d29920fa3f6f98ac0f56ae8550fb69596 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -3272,4 +3272,11 @@ public final class CraftServer implements Server { +@@ -3295,4 +3295,11 @@ public final class CraftServer implements Server { return this.potionBrewer; } // Paper end diff --git a/patches/server/0013-Lagging-threshold.patch b/patches/server/0013-Lagging-threshold.patch index 9a555e3c3..bec2bfcb1 100644 --- a/patches/server/0013-Lagging-threshold.patch +++ b/patches/server/0013-Lagging-threshold.patch @@ -5,7 +5,7 @@ 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 6464cf3cf027d894d18d1a24495952d304151648..87957873de7f8cea2ae84abf04c99a42c8c3a815 100644 +index 51968d23424cf57264fbf343199b3f1f2b00a08a..c167d61c281cd9324c7fd741a5845792bcdbf56a 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -312,6 +312,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 0.0F) { this.playSound(this.getFallDamageSound((int) f3), 1.0F, 1.0F); diff --git a/patches/server/0203-Added-the-ability-to-add-combustible-items.patch b/patches/server/0203-Added-the-ability-to-add-combustible-items.patch index 7e75d9799..74015f81b 100644 --- a/patches/server/0203-Added-the-ability-to-add-combustible-items.patch +++ b/patches/server/0203-Added-the-ability-to-add-combustible-items.patch @@ -51,10 +51,10 @@ index 08ff372334f32b9bfac2e7b7a405e43ecf0df959..d566924cc3f13475769d4c733ea8a779 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 70e252cbd6d516875b0e6de1f51b9afb34c58f48..d78062e40bb4cec0f69c58de305527a640799a53 100644 +index cbe57d7b3282a76a427a64507a10a5aea767ff1c..8cdc91d8306a76514abd76c450044ffed5418787 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -1571,6 +1571,19 @@ public final class CraftServer implements Server { +@@ -1594,6 +1594,19 @@ public final class CraftServer implements Server { return true; } diff --git a/patches/server/0237-Config-for-mob-last-hurt-by-player-time.patch b/patches/server/0237-Config-for-mob-last-hurt-by-player-time.patch index 365c19d2a..d60df3679 100644 --- a/patches/server/0237-Config-for-mob-last-hurt-by-player-time.patch +++ b/patches/server/0237-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 7f717b3e8bb8a8eef98411216823f98ead912408..ceb420d3b9c5d3050b0d72ae612b8003d562202a 100644 +index 4744b0dd3f5e9e5f2d92bd8604610bc133977931..36102a9bafde35d30a5cf78999a1999daa05b7e1 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -1579,13 +1579,13 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -1573,13 +1573,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,7 +25,7 @@ index 7f717b3e8bb8a8eef98411216823f98ead912408..ceb420d3b9c5d3050b0d72ae612b8003 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 fbb1b3672af69306c510f3a629bede548ba7a9fd..1284c941a4c863c287098a0a04efcc723e727bb3 100644 +index b95d355ede8689af1f7f5a0424b5274e38839756..3ed19f30f1cab9df3b1bfdf0b0caf7882a77c5f7 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java @@ -512,7 +512,7 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { diff --git a/patches/server/0252-Add-local-difficulty-api.patch b/patches/server/0252-Add-local-difficulty-api.patch index 512458afe..a83b263a8 100644 --- a/patches/server/0252-Add-local-difficulty-api.patch +++ b/patches/server/0252-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 f2b20ed5063a293f0b464548f590d652170cd1d8..b7a02ae4eda06cab8ffd1220259a061558981dec 100644 +index 6303760f10af17f1da1d92d6c4dc7dd6f5778f94..60924e7fbba91819f0794a44f0777158962f0d3f 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -@@ -2424,6 +2424,12 @@ public class CraftWorld extends CraftRegionAccessor implements World { +@@ -2449,6 +2449,12 @@ public class CraftWorld extends CraftRegionAccessor implements World { return (this.getHandle().getDragonFight() == null) ? null : new CraftDragonBattle(this.getHandle().getDragonFight()); } diff --git a/patches/server/0254-Remove-Timings.patch b/patches/server/0254-Remove-Timings.patch index 44eda155b..bbc010dd8 100644 --- a/patches/server/0254-Remove-Timings.patch +++ b/patches/server/0254-Remove-Timings.patch @@ -80,7 +80,7 @@ index 57e76b53e5e314c3e6b8856010f7a84188121582..8c134a642ccaf3530022f2e675a858d7 } catch (Exception exception) { if (exception instanceof ReportedException) { diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 5b0c0ddd60d133d52b0405ad86cabc1c94ea998c..f91739d3de41c20b352e159c7f4e12e6fdcab794 100644 +index f9d975002b7ed5dc6b31562d05f8be4c96b2d515..bf9e17659305680dc0262a0bc82246ec1f334fb9 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -1477,7 +1477,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop +Date: Thu, 13 Jun 2024 16:00:30 -0700 +Subject: [PATCH] Adopt MaterialRerouting + +Adopts the purpur-api to the material rerouting infrastructure introduced +by upstream's upstream. + +diff --git a/src/main/java/org/bukkit/craftbukkit/legacy/MaterialRerouting.java b/src/main/java/org/bukkit/craftbukkit/legacy/MaterialRerouting.java +index 9c004e7cb46841d874ab997bf2e3b63ae763aec7..36003e5c7c61d964f11e81fa56845a52a8785468 100644 +--- a/src/main/java/org/bukkit/craftbukkit/legacy/MaterialRerouting.java ++++ b/src/main/java/org/bukkit/craftbukkit/legacy/MaterialRerouting.java +@@ -678,4 +678,32 @@ public class MaterialRerouting { + return itemStack.withType(material); + } + // Paper end - register paper API specific material consumers in rerouting ++ // Purpur start ++ // Method added post 1.13, no-op (https://github.com/PurpurMC/Purpur/pull/570) ++ public static void addFuel(Server server, Material material, int burnTime) { ++ server.addFuel(material, burnTime); ++ } ++ ++ // Method added post 1.13, no-op (https://github.com/PurpurMC/Purpur/pull/570) ++ public static void removeFuel(Server server, Material material) { ++ server.removeFuel(material); ++ } ++ ++ // Method added post 1.13, no-op (https://github.com/PurpurMC/Purpur/pull/570) ++ @RerouteStatic("org/bukkit/Bukkit") ++ public static void addFuel(Material material, int burnTime) { ++ Bukkit.addFuel(material, burnTime); ++ } ++ ++ // Method added post 1.13, no-op (https://github.com/PurpurMC/Purpur/pull/570) ++ @RerouteStatic("org/bukkit/Bukkit") ++ public static void removeFuel(Material material) { ++ Bukkit.removeFuel(material); ++ } ++ ++ // Method added post 1.13, no-op (https://github.com/PurpurMC/Purpur/commit/607d909efba516893072b782c0393c53d048210e) ++ public static BlockData getBlockData(ItemStack itemStack, Material material) { ++ return itemStack.getBlockData(MaterialRerouting.transformToBlockType(material)); ++ } ++ // Purpur end + } From f1c87e4fee9a8e7d513f9e284d402a21fd73ec3a Mon Sep 17 00:00:00 2001 From: granny Date: Thu, 13 Jun 2024 17:06:34 -0700 Subject: [PATCH 045/588] add missing armadillo & bogged options, closes #1527 --- patches/server/0006-Ridables.patch | 78 ++++- ...-Configurable-entity-base-attributes.patch | 73 ++++- patches/server/0021-Giants-AI-settings.patch | 6 +- .../0022-Zombie-horse-naturally-spawn.patch | 8 +- ...0023-Charged-creeper-naturally-spawn.patch | 8 +- ...bit-naturally-spawn-toast-and-killer.patch | 6 +- .../server/0026-Tulips-change-fox-type.patch | 6 +- .../server/0027-Breedable-Polar-Bears.patch | 6 +- .../server/0028-Chickens-can-retaliate.patch | 6 +- .../server/0030-Cat-spawning-options.patch | 6 +- patches/server/0031-Cows-eat-mushrooms.patch | 6 +- .../server/0033-Pigs-give-saddle-back.patch | 6 +- ...34-Snowman-drop-and-put-back-pumpkin.patch | 6 +- ...35-Ender-dragon-always-drop-full-exp.patch | 8 +- ...derman-and-creeper-griefing-controls.patch | 10 +- ...0046-Villagers-follow-emerald-blocks.patch | 10 +- .../0047-Allow-leashing-villagers.patch | 12 +- .../0062-Configurable-jockey-options.patch | 22 +- ...ed-to-crystals-and-crystals-shoot-ph.patch | 6 +- .../0064-Add-phantom-spawning-options.patch | 6 +- patches/server/0071-Squid-EAR-immunity.patch | 6 +- .../server/0072-Phantoms-burn-in-light.patch | 6 +- .../0073-Configurable-villager-breeding.patch | 6 +- ...6-Add-vindicator-johnny-spawn-chance.patch | 6 +- ...o-disable-dolphin-treasure-searching.patch | 6 +- ...Stop-squids-floating-on-top-of-water.patch | 8 +- ...stomizable-wither-health-and-healing.patch | 6 +- ...sable-zombie-aggressiveness-towards-.patch | 8 +- patches/server/0091-Flying-squids-Oh-my.patch | 8 +- ...e-entity-breeding-times-configurable.patch | 126 ++++---- ...llowing-Endermen-to-despawn-even-whi.patch | 6 +- .../0106-Snow-Golem-rate-of-fire-config.patch | 6 +- ...Villager-Clerics-to-farm-Nether-Wart.patch | 6 +- ...fied-Piglin-death-always-counting-as.patch | 6 +- ...ble-chance-for-wolves-to-spawn-rabid.patch | 6 +- ...11-Configurable-default-collar-color.patch | 10 +- .../server/0112-Phantom-flames-on-swoop.patch | 6 +- .../0115-Striders-give-saddle-back.patch | 6 +- ...iefing-bypass-to-everything-affected.patch | 60 ++-- ...oggle-for-water-sensitive-mob-damage.patch | 258 ++++++++-------- ...ither-Ender-Dragon-can-ride-vehicles.patch | 12 +- ...an-aggressiveness-towards-Endermites.patch | 6 +- ...-Dragon-Head-wearers-and-stare-aggro.patch | 6 +- ...136-Config-to-disable-Llama-caravans.patch | 6 +- ...ig-to-make-Creepers-explode-on-death.patch | 8 +- ...urable-ravager-griefable-blocks-list.patch | 6 +- ...0141-Add-config-for-villager-trading.patch | 10 +- .../0152-Piglin-portal-spawn-modifier.patch | 6 +- ...4-Config-for-wither-explosion-radius.patch | 6 +- ...h-to-impact-Creeper-explosion-radius.patch | 8 +- .../0161-Iron-golem-calm-anger-options.patch | 6 +- patches/server/0162-Breedable-parrots.patch | 6 +- ...ee-can-work-when-raining-or-at-night.patch | 6 +- ...76-Shulker-spawn-from-bullet-options.patch | 6 +- ...8-Option-to-make-drowned-break-doors.patch | 6 +- ...onfigurable-hunger-starvation-damage.patch | 4 +- ...e-Enderman-teleport-on-projectile-hi.patch | 6 +- ...izeable-Zombie-Villager-curing-times.patch | 6 +- ...0195-Toggle-for-Wither-s-spawn-sound.patch | 6 +- .../0198-Conduit-behavior-configuration.patch | 4 +- .../server/0199-Cauldron-fill-chances.patch | 4 +- .../0201-Shulker-change-color-with-dye.patch | 6 +- ...turally-aggressive-to-players-chance.patch | 6 +- ...turally-aggressive-to-players-chance.patch | 6 +- ...-Halloween-options-and-optimizations.patch | 4 +- ...ion-to-disable-zombie-villagers-cure.patch | 6 +- .../0219-Mobs-always-drop-experience.patch | 276 +++++++++--------- .../0223-Mob-head-visibility-percent.patch | 20 +- ...-Shears-can-have-looting-enchantment.patch | 6 +- ...-Stop-bees-from-dying-after-stinging.patch | 6 +- .../0231-Configurable-phantom-size.patch | 6 +- ...nfigurable-minimum-demand-for-trades.patch | 6 +- .../0234-Lobotomize-stuck-villagers.patch | 6 +- ...tion-for-villager-display-trade-item.patch | 6 +- ...urable-search-radius-for-villagers-t.patch | 6 +- .../0246-Skeletons-eat-wither-roses.patch | 6 +- ...247-Enchantment-Table-Persists-Lapis.patch | 4 +- .../server/0255-Remove-Mojang-Profiler.patch | 4 +- ...260-Add-skeleton-bow-accuracy-option.patch | 6 +- ...low-creeper-to-encircle-target-when-.patch | 6 +- .../server/0285-Shears-can-defuse-TNT.patch | 4 +- ...-Option-Ocelot-Spawn-Under-Sea-Level.patch | 6 +- ...r-piglins-to-ignore-gold-trimmed-arm.patch | 6 +- ...-Configurable-villager-search-radius.patch | 6 +- ...n-to-make-ravagers-afraid-of-rabbits.patch | 6 +- 85 files changed, 772 insertions(+), 633 deletions(-) diff --git a/patches/server/0006-Ridables.patch b/patches/server/0006-Ridables.patch index fc0ad572b..733efce85 100644 --- a/patches/server/0006-Ridables.patch +++ b/patches/server/0006-Ridables.patch @@ -2092,6 +2092,34 @@ index 991e3274091c4e25eebc6debd44653e5b566eedb..09502b15c20f401c3b56ecedc4d3b515 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/armadillo/Armadillo.java b/src/main/java/net/minecraft/world/entity/animal/armadillo/Armadillo.java +index b38281f963377cc82b360e8457da7cad033b8c36..921b545d1abe74b8301dbd56e39b254a14817f77 100644 +--- a/src/main/java/net/minecraft/world/entity/animal/armadillo/Armadillo.java ++++ b/src/main/java/net/minecraft/world/entity/animal/armadillo/Armadillo.java +@@ -77,6 +77,23 @@ public class Armadillo extends Animal { + return Mob.createMobAttributes().add(Attributes.MAX_HEALTH, 12.0D).add(Attributes.MOVEMENT_SPEED, 0.14D); + } + ++ // Purpur start ++ @Override ++ public boolean isRidable() { ++ return level().purpurConfig.armadilloRidable; ++ } ++ ++ @Override ++ public boolean dismountsUnderwater() { ++ return level().purpurConfig.useDismountsUnderwaterTag ? super.dismountsUnderwater() : !level().purpurConfig.armadilloRidableInWater; ++ } ++ ++ @Override ++ public boolean isControllable() { ++ return level().purpurConfig.armadilloControllable; ++ } ++ // Purpur end ++ + @Override + protected void defineSynchedData(SynchedEntityData.Builder builder) { + super.defineSynchedData(builder); 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 a8cc6ddbf45370fe632e5c5fb7ceef3d299e62a4..045ac081120f65987251d04d1522a5b7197e1d88 100644 --- a/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java @@ -3112,6 +3140,34 @@ index aee2fa184bc5723dfd3d54f460a173982d874c8b..0e1aa9a00284ce43436b1290f9ebe243 this.nextHeightOffsetChangeTick--; if (this.nextHeightOffsetChangeTick <= 0) { this.nextHeightOffsetChangeTick = 100; +diff --git a/src/main/java/net/minecraft/world/entity/monster/Bogged.java b/src/main/java/net/minecraft/world/entity/monster/Bogged.java +index e9f9b041ae7195e9d23bd446454b1d8c47a1ace1..a01b87f4adcb868d3cc5c24f2423f58d96ebf7fa 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/Bogged.java ++++ b/src/main/java/net/minecraft/world/entity/monster/Bogged.java +@@ -45,6 +45,23 @@ public class Bogged extends AbstractSkeleton implements Shearable { + super(type, world); + } + ++ // Purpur start ++ @Override ++ public boolean isRidable() { ++ return level().purpurConfig.boggedRidable; ++ } ++ ++ @Override ++ public boolean dismountsUnderwater() { ++ return level().purpurConfig.useDismountsUnderwaterTag ? super.dismountsUnderwater() : !level().purpurConfig.boggedRidableInWater; ++ } ++ ++ @Override ++ public boolean isControllable() { ++ return level().purpurConfig.boggedControllable; ++ } ++ // Purpur end ++ + @Override + protected void defineSynchedData(SynchedEntityData.Builder builder) { + super.defineSynchedData(builder); diff --git a/src/main/java/net/minecraft/world/entity/monster/CaveSpider.java b/src/main/java/net/minecraft/world/entity/monster/CaveSpider.java index 87e4b300ac248f6c13d9b4a8f24fd78b24b565b4..504996c8309fcd11de1dd166dee12d7e7db8db56 100644 --- a/src/main/java/net/minecraft/world/entity/monster/CaveSpider.java @@ -5137,10 +5193,10 @@ index 4f015144be0a7a448c6c2b0765232c02ad405d09..169722178ba7cd9543a029741e81d025 + } } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 5f0732c2b8f85185b6dfc1db3119c22e8be7f5da..3eae97d610d8f61528b87039723ef4ce2dc75c91 100644 +index 5f0732c2b8f85185b6dfc1db3119c22e8be7f5da..bb64706d04fb25dcd564799c26fad231086ff827 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -89,4 +89,726 @@ public class PurpurWorldConfig { +@@ -89,4 +89,744 @@ public class PurpurWorldConfig { final Map value = PurpurConfig.getMap("world-settings." + worldName + "." + path, null); return value.isEmpty() ? fallback : value; } @@ -5165,6 +5221,15 @@ index 5f0732c2b8f85185b6dfc1db3119c22e8be7f5da..3eae97d610d8f61528b87039723ef4ce + allayControllable = getBoolean("mobs.allay.controllable", allayControllable); + } + ++ public boolean armadilloRidable = false; ++ public boolean armadilloRidableInWater = true; ++ public boolean armadilloControllable = true; ++ private void armadilloSettings() { ++ armadilloRidable = getBoolean("mobs.armadillo.ridable", armadilloRidable); ++ armadilloRidableInWater = getBoolean("mobs.armadillo.ridable-in-water", armadilloRidableInWater); ++ armadilloControllable = getBoolean("mobs.armadillo.controllable", armadilloControllable); ++ } ++ + public boolean axolotlRidable = false; + public boolean axolotlControllable = true; + private void axolotlSettings() { @@ -5205,6 +5270,15 @@ index 5f0732c2b8f85185b6dfc1db3119c22e8be7f5da..3eae97d610d8f61528b87039723ef4ce + blazeMaxY = getDouble("mobs.blaze.ridable-max-y", blazeMaxY); + } + ++ public boolean boggedRidable = false; ++ public boolean boggedRidableInWater = true; ++ public boolean boggedControllable = true; ++ private void boggedSettings() { ++ boggedRidable = getBoolean("mobs.bogged.ridable", boggedRidable); ++ boggedRidableInWater = getBoolean("mobs.bogged.ridable-in-water", boggedRidableInWater); ++ boggedControllable = getBoolean("mobs.bogged.controllable", boggedControllable); ++ } ++ + public boolean camelRidableInWater = false; + private void camelSettings() { + camelRidableInWater = getBoolean("mobs.camel.ridable-in-water", camelRidableInWater); diff --git a/patches/server/0007-Configurable-entity-base-attributes.patch b/patches/server/0007-Configurable-entity-base-attributes.patch index ac719cbd3..e385252c9 100644 --- a/patches/server/0007-Configurable-entity-base-attributes.patch +++ b/patches/server/0007-Configurable-entity-base-attributes.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Configurable entity base attributes diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index b976ea5d919f73c406adea90603f4a78b761fd25..28c8860d145eb34911e1a54a15597d8c873df872 100644 +index 757aeb4b715b17d3f239b495899b0d8874811db8..5e9be6af06d02ae46aa51ec24771a92cce443652 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java @@ -163,7 +163,7 @@ import org.bukkit.plugin.PluginManager; @@ -34,7 +34,7 @@ index aa76a24421cdb3908a3544d92eb3d1e3c2ebedc4..8211c152e6f4232e82e452b08047e457 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 f790211062a14b5d70dac178c31bfc7033779222..9ddc0cf7107cff08ac3ae75c51b3119161304820 100644 +index 8623501c6f6567d146f9314f151629b5c25af289..0b542d2cb370b4ca9d04256264c8e8592743aa2f 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java @@ -301,6 +301,7 @@ public abstract class LivingEntity extends Entity implements Attackable { @@ -460,6 +460,22 @@ index 92cc8a9b033052d5f510792d916c60cb2b90f07c..3235ed40d502722e888656776ba1a218 @Override protected void registerGoals() { this.goalSelector.addGoal(1, new FloatGoal(this)); +diff --git a/src/main/java/net/minecraft/world/entity/animal/armadillo/Armadillo.java b/src/main/java/net/minecraft/world/entity/animal/armadillo/Armadillo.java +index 921b545d1abe74b8301dbd56e39b254a14817f77..2c4a353c86521bf3018cd17748c8cb29330732d2 100644 +--- a/src/main/java/net/minecraft/world/entity/animal/armadillo/Armadillo.java ++++ b/src/main/java/net/minecraft/world/entity/animal/armadillo/Armadillo.java +@@ -92,6 +92,11 @@ public class Armadillo extends Animal { + public boolean isControllable() { + return level().purpurConfig.armadilloControllable; + } ++ ++ @Override ++ public void initAttributes() { ++ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.armadilloMaxHealth); ++ } + // Purpur end + + @Override 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 045ac081120f65987251d04d1522a5b7197e1d88..414ff28670c3d36dc78e3df4d39b6d4eb3ec1e77 100644 --- a/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java @@ -817,6 +833,22 @@ index 0e1aa9a00284ce43436b1290f9ebe243c4d09fdc..220deda05517fd200070f823ad7af075 @Override protected void registerGoals() { this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur +diff --git a/src/main/java/net/minecraft/world/entity/monster/Bogged.java b/src/main/java/net/minecraft/world/entity/monster/Bogged.java +index a01b87f4adcb868d3cc5c24f2423f58d96ebf7fa..ebec95ca146591f170d9e31bbc774e88806269a2 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/Bogged.java ++++ b/src/main/java/net/minecraft/world/entity/monster/Bogged.java +@@ -60,6 +60,11 @@ public class Bogged extends AbstractSkeleton implements Shearable { + public boolean isControllable() { + return level().purpurConfig.boggedControllable; + } ++ ++ @Override ++ public void initAttributes() { ++ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.boggedMaxHealth); ++ } + // Purpur end + + @Override diff --git a/src/main/java/net/minecraft/world/entity/monster/CaveSpider.java b/src/main/java/net/minecraft/world/entity/monster/CaveSpider.java index 504996c8309fcd11de1dd166dee12d7e7db8db56..562f73dd5e617c10382c50be86ce88f4de1a4fe1 100644 --- a/src/main/java/net/minecraft/world/entity/monster/CaveSpider.java @@ -1507,10 +1539,20 @@ index 6bdf3d1e3652a661282d61f1dc2bfc2712339953..ac3cca0db4478841f91d966bd49ca4e5 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 3eae97d610d8f61528b87039723ef4ce2dc75c91..e248395ad5f5f012aeefecf367d54f90cade0996 100644 +index bb64706d04fb25dcd564799c26fad231086ff827..767d977cf47b0c7d94c248091f3ce98d6383ae04 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -112,99 +112,190 @@ public class PurpurWorldConfig { +@@ -113,116 +113,211 @@ public class PurpurWorldConfig { + public boolean armadilloRidable = false; + public boolean armadilloRidableInWater = true; + public boolean armadilloControllable = true; ++ public double armadilloMaxHealth = 12.0D; + private void armadilloSettings() { + armadilloRidable = getBoolean("mobs.armadillo.ridable", armadilloRidable); + armadilloRidableInWater = getBoolean("mobs.armadillo.ridable-in-water", armadilloRidableInWater); + armadilloControllable = getBoolean("mobs.armadillo.controllable", armadilloControllable); ++ armadilloMaxHealth = getDouble("mobs.armadillo.attributes.max_health", armadilloMaxHealth); + } public boolean axolotlRidable = false; public boolean axolotlControllable = true; @@ -1589,6 +1631,17 @@ index 3eae97d610d8f61528b87039723ef4ce2dc75c91..e248395ad5f5f012aeefecf367d54f90 + blazeMaxHealth = getDouble("mobs.blaze.attributes.max_health", blazeMaxHealth); } + public boolean boggedRidable = false; + public boolean boggedRidableInWater = true; + public boolean boggedControllable = true; ++ public double boggedMaxHealth = 16.0D; + private void boggedSettings() { + boggedRidable = getBoolean("mobs.bogged.ridable", boggedRidable); + boggedRidableInWater = getBoolean("mobs.bogged.ridable-in-water", boggedRidableInWater); + boggedControllable = getBoolean("mobs.bogged.controllable", boggedControllable); ++ boggedMaxHealth = getDouble("mobs.bogged.attributes.max_health", boggedMaxHealth); + } + public boolean camelRidableInWater = false; + public double camelMaxHealthMin = 32.0D; + public double camelMaxHealthMax = 32.0D; @@ -1701,7 +1754,7 @@ index 3eae97d610d8f61528b87039723ef4ce2dc75c91..e248395ad5f5f012aeefecf367d54f90 } public boolean dolphinRidable = false; -@@ -212,80 +303,161 @@ public class PurpurWorldConfig { +@@ -230,80 +325,161 @@ public class PurpurWorldConfig { public int dolphinSpitCooldown = 20; public float dolphinSpitSpeed = 1.0F; public float dolphinSpitDamage = 2.0F; @@ -1863,7 +1916,7 @@ index 3eae97d610d8f61528b87039723ef4ce2dc75c91..e248395ad5f5f012aeefecf367d54f90 } public boolean frogRidable = false; -@@ -303,147 +475,316 @@ public class PurpurWorldConfig { +@@ -321,147 +497,316 @@ public class PurpurWorldConfig { public boolean ghastRidableInWater = true; public boolean ghastControllable = true; public double ghastMaxY = 320D; @@ -2180,7 +2233,7 @@ index 3eae97d610d8f61528b87039723ef4ce2dc75c91..e248395ad5f5f012aeefecf367d54f90 } public boolean phantomRidable = false; -@@ -453,6 +794,10 @@ public class PurpurWorldConfig { +@@ -471,6 +816,10 @@ public class PurpurWorldConfig { public float phantomFlameDamage = 1.0F; public int phantomFlameFireTime = 8; public boolean phantomAllowGriefing = false; @@ -2191,7 +2244,7 @@ index 3eae97d610d8f61528b87039723ef4ce2dc75c91..e248395ad5f5f012aeefecf367d54f90 private void phantomSettings() { phantomRidable = getBoolean("mobs.phantom.ridable", phantomRidable); phantomRidableInWater = getBoolean("mobs.phantom.ridable-in-water", phantomRidableInWater); -@@ -461,191 +806,363 @@ public class PurpurWorldConfig { +@@ -479,191 +828,363 @@ public class PurpurWorldConfig { phantomFlameDamage = (float) getDouble("mobs.phantom.flames.damage", phantomFlameDamage); phantomFlameFireTime = getInt("mobs.phantom.flames.fire-time", phantomFlameFireTime); phantomAllowGriefing = getBoolean("mobs.phantom.allow-griefing", phantomAllowGriefing); @@ -2555,7 +2608,7 @@ index 3eae97d610d8f61528b87039723ef4ce2dc75c91..e248395ad5f5f012aeefecf367d54f90 } public boolean tadpoleRidable = false; -@@ -660,64 +1177,125 @@ public class PurpurWorldConfig { +@@ -678,64 +1199,125 @@ public class PurpurWorldConfig { public boolean traderLlamaRidable = false; public boolean traderLlamaRidableInWater = false; public boolean traderLlamaControllable = true; @@ -2681,7 +2734,7 @@ index 3eae97d610d8f61528b87039723ef4ce2dc75c91..e248395ad5f5f012aeefecf367d54f90 } public boolean wardenRidable = false; -@@ -732,83 +1310,167 @@ public class PurpurWorldConfig { +@@ -750,83 +1332,167 @@ public class PurpurWorldConfig { public boolean witchRidable = false; public boolean witchRidableInWater = true; public boolean witchControllable = true; diff --git a/patches/server/0021-Giants-AI-settings.patch b/patches/server/0021-Giants-AI-settings.patch index e4ef7500b..779886f0a 100644 --- a/patches/server/0021-Giants-AI-settings.patch +++ b/patches/server/0021-Giants-AI-settings.patch @@ -71,10 +71,10 @@ index 9602e59cbebeedc85ea75d2a41d3e74f0ff45b46..ca53c5b45c119dce1c713dbf931251f8 } } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index ac44ee7789b96e60e6d1d964d64ca33a3d3c2c62..fb61cd498955fee2dec15fa584273a6e19ca58c9 100644 +index aba1a09a949da1e1c70caf665b078c8979a5f746..a4e540f63746bf36d679fd632e0cf9924a0d2370 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 { +@@ -576,6 +576,10 @@ public class PurpurWorldConfig { public double giantMovementSpeed = 0.5D; public double giantAttackDamage = 50.0D; public double giantMaxHealth = 100.0D; @@ -85,7 +85,7 @@ index ac44ee7789b96e60e6d1d964d64ca33a3d3c2c62..fb61cd498955fee2dec15fa584273a6e private void giantSettings() { giantRidable = getBoolean("mobs.giant.ridable", giantRidable); giantRidableInWater = getBoolean("mobs.giant.ridable-in-water", giantRidableInWater); -@@ -570,6 +574,10 @@ public class PurpurWorldConfig { +@@ -592,6 +596,10 @@ public class PurpurWorldConfig { set("mobs.giant.attributes.max_health", oldValue); } giantMaxHealth = getDouble("mobs.giant.attributes.max_health", giantMaxHealth); diff --git a/patches/server/0022-Zombie-horse-naturally-spawn.patch b/patches/server/0022-Zombie-horse-naturally-spawn.patch index 8ff2f18f1..39294b040 100644 --- a/patches/server/0022-Zombie-horse-naturally-spawn.patch +++ b/patches/server/0022-Zombie-horse-naturally-spawn.patch @@ -5,7 +5,7 @@ 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 fc791a66d299905798c2c1ca542467e4c7933caf..b02d9db8442b209a9df27e417be71b11d426878b 100644 +index 6247659f33c3d21d33ec1f510523403616ea9c4f..a95dbe12a188e6bc0e65759a34ccd89cb795a2b8 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java @@ -1006,10 +1006,18 @@ public class ServerLevel extends Level implements WorldGenLevel { @@ -30,10 +30,10 @@ index fc791a66d299905798c2c1ca542467e4c7933caf..b02d9db8442b209a9df27e417be71b11 entityhorseskeleton.setPos((double) blockposition.getX(), (double) blockposition.getY(), (double) blockposition.getZ()); this.addFreshEntity(entityhorseskeleton, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.LIGHTNING); // CraftBukkit diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index fb61cd498955fee2dec15fa584273a6e19ca58c9..41822b9b050f4267cc0151ea85682523f89af57f 100644 +index a4e540f63746bf36d679fd632e0cf9924a0d2370..72172293aedfef696b6649946746d39edf056363 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1487,6 +1487,7 @@ public class PurpurWorldConfig { +@@ -1509,6 +1509,7 @@ public class PurpurWorldConfig { public double zombieHorseJumpStrengthMax = 1.0D; public double zombieHorseMovementSpeedMin = 0.2D; public double zombieHorseMovementSpeedMax = 0.2D; @@ -41,7 +41,7 @@ index fb61cd498955fee2dec15fa584273a6e19ca58c9..41822b9b050f4267cc0151ea85682523 private void zombieHorseSettings() { zombieHorseRidable = getBoolean("mobs.zombie_horse.ridable", zombieHorseRidable); zombieHorseRidableInWater = getBoolean("mobs.zombie_horse.ridable-in-water", zombieHorseRidableInWater); -@@ -1503,6 +1504,7 @@ public class PurpurWorldConfig { +@@ -1525,6 +1526,7 @@ public class PurpurWorldConfig { zombieHorseJumpStrengthMax = getDouble("mobs.zombie_horse.attributes.jump_strength.max", zombieHorseJumpStrengthMax); zombieHorseMovementSpeedMin = getDouble("mobs.zombie_horse.attributes.movement_speed.min", zombieHorseMovementSpeedMin); zombieHorseMovementSpeedMax = getDouble("mobs.zombie_horse.attributes.movement_speed.max", zombieHorseMovementSpeedMax); diff --git a/patches/server/0023-Charged-creeper-naturally-spawn.patch b/patches/server/0023-Charged-creeper-naturally-spawn.patch index 3796f4ab6..dc5d10e50 100644 --- a/patches/server/0023-Charged-creeper-naturally-spawn.patch +++ b/patches/server/0023-Charged-creeper-naturally-spawn.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Charged creeper naturally spawn diff --git a/src/main/java/net/minecraft/world/entity/monster/Creeper.java b/src/main/java/net/minecraft/world/entity/monster/Creeper.java -index 624ae0e10ef9f51d484e45ec9a15e4a120bf2af2..84114356ea4c06998572c03f2e2a75b49e539980 100644 +index c64a544bd267204d963cfa213d832e7cea45a7f3..72152e1c8fcebd9eaf19d9ee2952b7d7348e79d1 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Creeper.java +++ b/src/main/java/net/minecraft/world/entity/monster/Creeper.java @@ -257,6 +257,14 @@ public class Creeper extends Monster implements PowerableMob { @@ -24,10 +24,10 @@ index 624ae0e10ef9f51d484e45ec9a15e4a120bf2af2..84114356ea4c06998572c03f2e2a75b4 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 41822b9b050f4267cc0151ea85682523f89af57f..e033ef722d9b6336f1cbc6bdf404f35c34b45db9 100644 +index 72172293aedfef696b6649946746d39edf056363..4a05d99d81fd487fda33ec2aee7f981bb24766aa 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 { +@@ -367,6 +367,7 @@ public class PurpurWorldConfig { public boolean creeperRidableInWater = true; public boolean creeperControllable = true; public double creeperMaxHealth = 20.0D; @@ -35,7 +35,7 @@ index 41822b9b050f4267cc0151ea85682523f89af57f..e033ef722d9b6336f1cbc6bdf404f35c private void creeperSettings() { creeperRidable = getBoolean("mobs.creeper.ridable", creeperRidable); creeperRidableInWater = getBoolean("mobs.creeper.ridable-in-water", creeperRidableInWater); -@@ -355,6 +356,7 @@ public class PurpurWorldConfig { +@@ -377,6 +378,7 @@ public class PurpurWorldConfig { set("mobs.creeper.attributes.max_health", oldValue); } creeperMaxHealth = getDouble("mobs.creeper.attributes.max_health", creeperMaxHealth); diff --git a/patches/server/0024-Rabbit-naturally-spawn-toast-and-killer.patch b/patches/server/0024-Rabbit-naturally-spawn-toast-and-killer.patch index da9dd0eab..3759a1a9d 100644 --- a/patches/server/0024-Rabbit-naturally-spawn-toast-and-killer.patch +++ b/patches/server/0024-Rabbit-naturally-spawn-toast-and-killer.patch @@ -33,10 +33,10 @@ index 9eb1158213064ddb37ae76e445b5861b963a1f55..4abcde662ed78b16632ee575f695ee43 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 e033ef722d9b6336f1cbc6bdf404f35c34b45db9..a96aa7f127467a6ea8025c09f4e336f1910cc8af 100644 +index 4a05d99d81fd487fda33ec2aee7f981bb24766aa..0a3a3a776e533b56ee3f67fca64bf76f514b1ab0 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 { +@@ -1010,6 +1010,8 @@ public class PurpurWorldConfig { public boolean rabbitRidableInWater = true; public boolean rabbitControllable = true; public double rabbitMaxHealth = 3.0D; @@ -45,7 +45,7 @@ index e033ef722d9b6336f1cbc6bdf404f35c34b45db9..a96aa7f127467a6ea8025c09f4e336f1 private void rabbitSettings() { rabbitRidable = getBoolean("mobs.rabbit.ridable", rabbitRidable); rabbitRidableInWater = getBoolean("mobs.rabbit.ridable-in-water", rabbitRidableInWater); -@@ -998,6 +1000,8 @@ public class PurpurWorldConfig { +@@ -1020,6 +1022,8 @@ public class PurpurWorldConfig { set("mobs.rabbit.attributes.max_health", oldValue); } rabbitMaxHealth = getDouble("mobs.rabbit.attributes.max_health", rabbitMaxHealth); diff --git a/patches/server/0026-Tulips-change-fox-type.patch b/patches/server/0026-Tulips-change-fox-type.patch index 5ffa6e37e..10b41a254 100644 --- a/patches/server/0026-Tulips-change-fox-type.patch +++ b/patches/server/0026-Tulips-change-fox-type.patch @@ -59,10 +59,10 @@ index 8666d82775570b812d5bdd80336c8e14db6ddf47..d1866f0f07e4d023241229a45b55031a // 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 a96aa7f127467a6ea8025c09f4e336f1910cc8af..d084d5ef20b2fb4d3b5479cb51003fb82a0358fc 100644 +index 0a3a3a776e533b56ee3f67fca64bf76f514b1ab0..7d1dd19a08ff1d57f9c9bd4b19851804427d6ef9 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 { +@@ -531,6 +531,7 @@ public class PurpurWorldConfig { public boolean foxRidableInWater = true; public boolean foxControllable = true; public double foxMaxHealth = 10.0D; @@ -70,7 +70,7 @@ index a96aa7f127467a6ea8025c09f4e336f1910cc8af..d084d5ef20b2fb4d3b5479cb51003fb8 private void foxSettings() { foxRidable = getBoolean("mobs.fox.ridable", foxRidable); foxRidableInWater = getBoolean("mobs.fox.ridable-in-water", foxRidableInWater); -@@ -519,6 +520,7 @@ public class PurpurWorldConfig { +@@ -541,6 +542,7 @@ public class PurpurWorldConfig { set("mobs.fox.attributes.max_health", oldValue); } foxMaxHealth = getDouble("mobs.fox.attributes.max_health", foxMaxHealth); diff --git a/patches/server/0027-Breedable-Polar-Bears.patch b/patches/server/0027-Breedable-Polar-Bears.patch index 952012279..dd1213e32 100644 --- a/patches/server/0027-Breedable-Polar-Bears.patch +++ b/patches/server/0027-Breedable-Polar-Bears.patch @@ -59,10 +59,10 @@ index 00afde0ec4811992aac306a42d473026b7e7e468..067bb175c457d6de089f18826dfce6c3 this.goalSelector.addGoal(5, new RandomStrollGoal(this, 1.0)); 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 d084d5ef20b2fb4d3b5479cb51003fb82a0358fc..ae6383c3d8435caba2bae551f36e3562e724361a 100644 +index 7d1dd19a08ff1d57f9c9bd4b19851804427d6ef9..5b161e6d980f44183e3a6c532bb330e82ff228b1 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 { +@@ -982,6 +982,8 @@ public class PurpurWorldConfig { public boolean polarBearRidableInWater = true; public boolean polarBearControllable = true; public double polarBearMaxHealth = 30.0D; @@ -71,7 +71,7 @@ index d084d5ef20b2fb4d3b5479cb51003fb82a0358fc..ae6383c3d8435caba2bae551f36e3562 private void polarBearSettings() { polarBearRidable = getBoolean("mobs.polar_bear.ridable", polarBearRidable); polarBearRidableInWater = getBoolean("mobs.polar_bear.ridable-in-water", polarBearRidableInWater); -@@ -970,6 +972,9 @@ public class PurpurWorldConfig { +@@ -992,6 +994,9 @@ public class PurpurWorldConfig { set("mobs.polar_bear.attributes.max_health", oldValue); } polarBearMaxHealth = getDouble("mobs.polar_bear.attributes.max_health", polarBearMaxHealth); diff --git a/patches/server/0028-Chickens-can-retaliate.patch b/patches/server/0028-Chickens-can-retaliate.patch index b7479c92c..29512745a 100644 --- a/patches/server/0028-Chickens-can-retaliate.patch +++ b/patches/server/0028-Chickens-can-retaliate.patch @@ -51,10 +51,10 @@ index a7c76e1d89f54f0dc3b27a8a8db168ea4570bf60..14210dac8a4fa8caaf69ec830f83d155 @Override diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index ae6383c3d8435caba2bae551f36e3562e724361a..4cd6d9309ed81956d59063fe4d229c6f930922ed 100644 +index 5b161e6d980f44183e3a6c532bb330e82ff228b1..ef4f35a59d716b7927a280c4da372268ad2ff395 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 { +@@ -321,6 +321,7 @@ public class PurpurWorldConfig { public boolean chickenRidableInWater = false; public boolean chickenControllable = true; public double chickenMaxHealth = 4.0D; @@ -62,7 +62,7 @@ index ae6383c3d8435caba2bae551f36e3562e724361a..4cd6d9309ed81956d59063fe4d229c6f private void chickenSettings() { chickenRidable = getBoolean("mobs.chicken.ridable", chickenRidable); chickenRidableInWater = getBoolean("mobs.chicken.ridable-in-water", chickenRidableInWater); -@@ -309,6 +310,7 @@ public class PurpurWorldConfig { +@@ -331,6 +332,7 @@ public class PurpurWorldConfig { set("mobs.chicken.attributes.max_health", oldValue); } chickenMaxHealth = getDouble("mobs.chicken.attributes.max_health", chickenMaxHealth); diff --git a/patches/server/0030-Cat-spawning-options.patch b/patches/server/0030-Cat-spawning-options.patch index 862db1dc6..3ec8a9339 100644 --- a/patches/server/0030-Cat-spawning-options.patch +++ b/patches/server/0030-Cat-spawning-options.patch @@ -46,10 +46,10 @@ index e0e5046c84941a8d17e18c177f3daea9cb631940..d503d7a5837dbeb98e58dbe8f7e5de45 } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 6649787fc15ca06ec2d4e7ac7b0ff061c4d4de82..c9dbbe9dde5b463bdde68604d6e5b1c2902d57fa 100644 +index bc42fbcb073b8b6f278e256ac66fd514e747a1fe..ebf1e3abed78f8a2d90764b8f0c5481bcfbc8de5 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 { +@@ -294,6 +294,9 @@ public class PurpurWorldConfig { public boolean catRidableInWater = true; public boolean catControllable = true; public double catMaxHealth = 10.0D; @@ -59,7 +59,7 @@ index 6649787fc15ca06ec2d4e7ac7b0ff061c4d4de82..c9dbbe9dde5b463bdde68604d6e5b1c2 private void catSettings() { catRidable = getBoolean("mobs.cat.ridable", catRidable); catRidableInWater = getBoolean("mobs.cat.ridable-in-water", catRidableInWater); -@@ -282,6 +285,9 @@ public class PurpurWorldConfig { +@@ -304,6 +307,9 @@ public class PurpurWorldConfig { set("mobs.cat.attributes.max_health", oldValue); } catMaxHealth = getDouble("mobs.cat.attributes.max_health", catMaxHealth); diff --git a/patches/server/0031-Cows-eat-mushrooms.patch b/patches/server/0031-Cows-eat-mushrooms.patch index d3b20b80c..42311fabb 100644 --- a/patches/server/0031-Cows-eat-mushrooms.patch +++ b/patches/server/0031-Cows-eat-mushrooms.patch @@ -99,10 +99,10 @@ index 478663c16a5763dda9a6c3edbafc843b8dfe06f2..bf5935fbd8e3edfb1221dd06ea1e1a2c + // Purpur end } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index c9dbbe9dde5b463bdde68604d6e5b1c2902d57fa..ab5960b9104d362852ee3d6ba151cf78dd58a0ee 100644 +index ebf1e3abed78f8a2d90764b8f0c5481bcfbc8de5..ebffa181f84ed8d2c246e104727186231061b5e2 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 { +@@ -364,6 +364,7 @@ public class PurpurWorldConfig { public boolean cowRidableInWater = true; public boolean cowControllable = true; public double cowMaxHealth = 10.0D; @@ -110,7 +110,7 @@ index c9dbbe9dde5b463bdde68604d6e5b1c2902d57fa..ab5960b9104d362852ee3d6ba151cf78 private void cowSettings() { cowRidable = getBoolean("mobs.cow.ridable", cowRidable); cowRidableInWater = getBoolean("mobs.cow.ridable-in-water", cowRidableInWater); -@@ -352,6 +353,7 @@ public class PurpurWorldConfig { +@@ -374,6 +375,7 @@ public class PurpurWorldConfig { set("mobs.cow.attributes.max_health", oldValue); } cowMaxHealth = getDouble("mobs.cow.attributes.max_health", cowMaxHealth); diff --git a/patches/server/0033-Pigs-give-saddle-back.patch b/patches/server/0033-Pigs-give-saddle-back.patch index 0eb376a50..2120c8b55 100644 --- a/patches/server/0033-Pigs-give-saddle-back.patch +++ b/patches/server/0033-Pigs-give-saddle-back.patch @@ -27,10 +27,10 @@ index a365573c5c5e640f165701bc79f7c605674c5709..4f84406304114abbaff9f96a5df6a486 if (!this.level().isClientSide) { player.startRiding(this); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index ab5960b9104d362852ee3d6ba151cf78dd58a0ee..1c530384c9040236ce525329f37913cdd3e424ff 100644 +index ebffa181f84ed8d2c246e104727186231061b5e2..65924f91027841a91ed10de7301b39646ab1696c 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -911,6 +911,7 @@ public class PurpurWorldConfig { +@@ -933,6 +933,7 @@ public class PurpurWorldConfig { public boolean pigRidableInWater = false; public boolean pigControllable = true; public double pigMaxHealth = 10.0D; @@ -38,7 +38,7 @@ index ab5960b9104d362852ee3d6ba151cf78dd58a0ee..1c530384c9040236ce525329f37913cd private void pigSettings() { pigRidable = getBoolean("mobs.pig.ridable", pigRidable); pigRidableInWater = getBoolean("mobs.pig.ridable-in-water", pigRidableInWater); -@@ -921,6 +922,7 @@ public class PurpurWorldConfig { +@@ -943,6 +944,7 @@ public class PurpurWorldConfig { set("mobs.pig.attributes.max_health", oldValue); } pigMaxHealth = getDouble("mobs.pig.attributes.max_health", pigMaxHealth); diff --git a/patches/server/0034-Snowman-drop-and-put-back-pumpkin.patch b/patches/server/0034-Snowman-drop-and-put-back-pumpkin.patch index 4ac6f1b7e..1319a1674 100644 --- a/patches/server/0034-Snowman-drop-and-put-back-pumpkin.patch +++ b/patches/server/0034-Snowman-drop-and-put-back-pumpkin.patch @@ -24,10 +24,10 @@ index a54893d51cc1ce204e59a6ffe8b84228775af4da..0060414b1d5afde56372ce121e9d37a1 return tryRide(player, hand); // Purpur } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 1c530384c9040236ce525329f37913cdd3e424ff..acec5455e9c16508ae474e1307e3cc234d17e6ee 100644 +index 65924f91027841a91ed10de7301b39646ab1696c..bc428f01d431b9d63d6a64607fa2e294c4b122f3 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1176,6 +1176,7 @@ public class PurpurWorldConfig { +@@ -1198,6 +1198,7 @@ public class PurpurWorldConfig { public boolean snowGolemControllable = true; public boolean snowGolemLeaveTrailWhenRidden = false; public double snowGolemMaxHealth = 4.0D; @@ -35,7 +35,7 @@ index 1c530384c9040236ce525329f37913cdd3e424ff..acec5455e9c16508ae474e1307e3cc23 private void snowGolemSettings() { snowGolemRidable = getBoolean("mobs.snow_golem.ridable", snowGolemRidable); snowGolemRidableInWater = getBoolean("mobs.snow_golem.ridable-in-water", snowGolemRidableInWater); -@@ -1187,6 +1188,7 @@ public class PurpurWorldConfig { +@@ -1209,6 +1210,7 @@ public class PurpurWorldConfig { set("mobs.snow_golem.attributes.max_health", oldValue); } snowGolemMaxHealth = getDouble("mobs.snow_golem.attributes.max_health", snowGolemMaxHealth); diff --git a/patches/server/0035-Ender-dragon-always-drop-full-exp.patch b/patches/server/0035-Ender-dragon-always-drop-full-exp.patch index 2226fff2e..25e590880 100644 --- a/patches/server/0035-Ender-dragon-always-drop-full-exp.patch +++ b/patches/server/0035-Ender-dragon-always-drop-full-exp.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Ender dragon always drop full exp diff --git a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java -index 0a7f87ac09f9ef6ad69974090f0d6f437d232b11..f751444603e4a1a2ef53e7232b5abfff82c316e8 100644 +index ba4c479b68c9b23e2d4f2cffa0cc8dfb12fd8c9e..ff2faa3ad719378b21f84a7839b4e0c60ea5f66f 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 @@ -747,7 +747,7 @@ public class EnderDragon extends Mob implements Enemy { @@ -18,10 +18,10 @@ index 0a7f87ac09f9ef6ad69974090f0d6f437d232b11..f751444603e4a1a2ef53e7232b5abfff } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index acec5455e9c16508ae474e1307e3cc234d17e6ee..a9d6c6713a098ca87d62b43d491bc2d9a8590741 100644 +index bc428f01d431b9d63d6a64607fa2e294c4b122f3..2e851587620aca4366da17f3fe1fd79eb4d48ca0 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -455,6 +455,7 @@ public class PurpurWorldConfig { +@@ -477,6 +477,7 @@ public class PurpurWorldConfig { public boolean enderDragonControllable = true; public double enderDragonMaxY = 320D; public double enderDragonMaxHealth = 200.0D; @@ -29,7 +29,7 @@ index acec5455e9c16508ae474e1307e3cc234d17e6ee..a9d6c6713a098ca87d62b43d491bc2d9 private void enderDragonSettings() { enderDragonRidable = getBoolean("mobs.ender_dragon.ridable", enderDragonRidable); enderDragonRidableInWater = getBoolean("mobs.ender_dragon.ridable-in-water", enderDragonRidableInWater); -@@ -470,6 +471,7 @@ public class PurpurWorldConfig { +@@ -492,6 +493,7 @@ public class PurpurWorldConfig { set("mobs.ender_dragon.attributes.max_health", oldValue); } enderDragonMaxHealth = getDouble("mobs.ender_dragon.attributes.max_health", enderDragonMaxHealth); diff --git a/patches/server/0045-Add-enderman-and-creeper-griefing-controls.patch b/patches/server/0045-Add-enderman-and-creeper-griefing-controls.patch index c9b99a6dc..c47db900f 100644 --- a/patches/server/0045-Add-enderman-and-creeper-griefing-controls.patch +++ b/patches/server/0045-Add-enderman-and-creeper-griefing-controls.patch @@ -38,10 +38,10 @@ index 3abfc4f449552ec60a1f7c4e3faa9fd0ebfdc300..89275ac02fcfab963b520efae6135d6f } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index a5ec746fc30af0093430bb7a7f6848081220ec57..b266fc52508106f1f0f449b8eb900e4c04316fec 100644 +index ce91250794af7d121f6752509135f37d68cd3e7c..d5e4e2fbee5061d4ea267310e0458dff3f905e32 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -437,6 +437,7 @@ public class PurpurWorldConfig { +@@ -459,6 +459,7 @@ public class PurpurWorldConfig { public boolean creeperControllable = true; public double creeperMaxHealth = 20.0D; public double creeperChargedChance = 0.0D; @@ -49,7 +49,7 @@ index a5ec746fc30af0093430bb7a7f6848081220ec57..b266fc52508106f1f0f449b8eb900e4c private void creeperSettings() { creeperRidable = getBoolean("mobs.creeper.ridable", creeperRidable); creeperRidableInWater = getBoolean("mobs.creeper.ridable-in-water", creeperRidableInWater); -@@ -448,6 +449,7 @@ public class PurpurWorldConfig { +@@ -470,6 +471,7 @@ public class PurpurWorldConfig { } creeperMaxHealth = getDouble("mobs.creeper.attributes.max_health", creeperMaxHealth); creeperChargedChance = getDouble("mobs.creeper.naturally-charged-chance", creeperChargedChance); @@ -57,7 +57,7 @@ index a5ec746fc30af0093430bb7a7f6848081220ec57..b266fc52508106f1f0f449b8eb900e4c } public boolean dolphinRidable = false; -@@ -554,6 +556,7 @@ public class PurpurWorldConfig { +@@ -576,6 +578,7 @@ public class PurpurWorldConfig { public boolean endermanRidableInWater = true; public boolean endermanControllable = true; public double endermanMaxHealth = 40.0D; @@ -65,7 +65,7 @@ index a5ec746fc30af0093430bb7a7f6848081220ec57..b266fc52508106f1f0f449b8eb900e4c private void endermanSettings() { endermanRidable = getBoolean("mobs.enderman.ridable", endermanRidable); endermanRidableInWater = getBoolean("mobs.enderman.ridable-in-water", endermanRidableInWater); -@@ -564,6 +567,7 @@ public class PurpurWorldConfig { +@@ -586,6 +589,7 @@ public class PurpurWorldConfig { set("mobs.enderman.attributes.max_health", oldValue); } endermanMaxHealth = getDouble("mobs.enderman.attributes.max_health", endermanMaxHealth); diff --git a/patches/server/0046-Villagers-follow-emerald-blocks.patch b/patches/server/0046-Villagers-follow-emerald-blocks.patch index ca38dbc6b..07485ed53 100644 --- a/patches/server/0046-Villagers-follow-emerald-blocks.patch +++ b/patches/server/0046-Villagers-follow-emerald-blocks.patch @@ -54,10 +54,10 @@ index ac3cca0db4478841f91d966bd49ca4e5b5e91229..30f13bc35a96950f05b065b5c7783083 this.goalSelector.addGoal(8, new WaterAvoidingRandomStrollGoal(this, 0.35D)); this.goalSelector.addGoal(9, new InteractGoal(this, Player.class, 3.0F, 1.0F)); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index b266fc52508106f1f0f449b8eb900e4c04316fec..f42a1205a66f4842ca43aad456dcb42481c041e9 100644 +index d5e4e2fbee5061d4ea267310e0458dff3f905e32..851014c5c02491cdbe778844251d3ec6a4236ff8 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1435,6 +1435,7 @@ public class PurpurWorldConfig { +@@ -1457,6 +1457,7 @@ public class PurpurWorldConfig { public boolean villagerRidableInWater = true; public boolean villagerControllable = true; public double villagerMaxHealth = 20.0D; @@ -65,7 +65,7 @@ index b266fc52508106f1f0f449b8eb900e4c04316fec..f42a1205a66f4842ca43aad456dcb424 private void villagerSettings() { villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); -@@ -1445,6 +1446,7 @@ public class PurpurWorldConfig { +@@ -1467,6 +1468,7 @@ public class PurpurWorldConfig { set("mobs.villager.attributes.max_health", oldValue); } villagerMaxHealth = getDouble("mobs.villager.attributes.max_health", villagerMaxHealth); @@ -73,7 +73,7 @@ index b266fc52508106f1f0f449b8eb900e4c04316fec..f42a1205a66f4842ca43aad456dcb424 } public boolean vindicatorRidable = false; -@@ -1467,6 +1469,7 @@ public class PurpurWorldConfig { +@@ -1489,6 +1491,7 @@ public class PurpurWorldConfig { public boolean wanderingTraderRidableInWater = true; public boolean wanderingTraderControllable = true; public double wanderingTraderMaxHealth = 20.0D; @@ -81,7 +81,7 @@ index b266fc52508106f1f0f449b8eb900e4c04316fec..f42a1205a66f4842ca43aad456dcb424 private void wanderingTraderSettings() { wanderingTraderRidable = getBoolean("mobs.wandering_trader.ridable", wanderingTraderRidable); wanderingTraderRidableInWater = getBoolean("mobs.wandering_trader.ridable-in-water", wanderingTraderRidableInWater); -@@ -1477,6 +1480,7 @@ public class PurpurWorldConfig { +@@ -1499,6 +1502,7 @@ public class PurpurWorldConfig { set("mobs.wandering_trader.attributes.max_health", oldValue); } wanderingTraderMaxHealth = getDouble("mobs.wandering_trader.attributes.max_health", wanderingTraderMaxHealth); diff --git a/patches/server/0047-Allow-leashing-villagers.patch b/patches/server/0047-Allow-leashing-villagers.patch index 33f1f3212..f112b76c1 100644 --- a/patches/server/0047-Allow-leashing-villagers.patch +++ b/patches/server/0047-Allow-leashing-villagers.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Allow leashing villagers diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java -index 26b03594b6ccd69ca35156472e27543d11ba2077..3d5f08d673f6b95c8f87070345f1fb200b5f4bde 100644 +index 3fdb1ba2e9249cda6f09406cfbf4cc677a258f13..a0e0d3ca25bf047a5520a3ed47f93ab97377b8b4 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java @@ -1450,6 +1450,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Targeti @@ -49,10 +49,10 @@ index 30f13bc35a96950f05b065b5c77830834e5792d1..9d5eaaf1869a3ecb61947ab0c09af558 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 f42a1205a66f4842ca43aad456dcb42481c041e9..c07064174a0ef81a9bbe628251ee1346af890ae0 100644 +index 851014c5c02491cdbe778844251d3ec6a4236ff8..28ca277a383eefbc96f07e05d98d4a9f460807af 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1436,6 +1436,7 @@ public class PurpurWorldConfig { +@@ -1458,6 +1458,7 @@ public class PurpurWorldConfig { public boolean villagerControllable = true; public double villagerMaxHealth = 20.0D; public boolean villagerFollowEmeraldBlock = false; @@ -60,7 +60,7 @@ index f42a1205a66f4842ca43aad456dcb42481c041e9..c07064174a0ef81a9bbe628251ee1346 private void villagerSettings() { villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); -@@ -1447,6 +1448,7 @@ public class PurpurWorldConfig { +@@ -1469,6 +1470,7 @@ public class PurpurWorldConfig { } villagerMaxHealth = getDouble("mobs.villager.attributes.max_health", villagerMaxHealth); villagerFollowEmeraldBlock = getBoolean("mobs.villager.follow-emerald-blocks", villagerFollowEmeraldBlock); @@ -68,7 +68,7 @@ index f42a1205a66f4842ca43aad456dcb42481c041e9..c07064174a0ef81a9bbe628251ee1346 } public boolean vindicatorRidable = false; -@@ -1470,6 +1472,7 @@ public class PurpurWorldConfig { +@@ -1492,6 +1494,7 @@ public class PurpurWorldConfig { public boolean wanderingTraderControllable = true; public double wanderingTraderMaxHealth = 20.0D; public boolean wanderingTraderFollowEmeraldBlock = false; @@ -76,7 +76,7 @@ index f42a1205a66f4842ca43aad456dcb42481c041e9..c07064174a0ef81a9bbe628251ee1346 private void wanderingTraderSettings() { wanderingTraderRidable = getBoolean("mobs.wandering_trader.ridable", wanderingTraderRidable); wanderingTraderRidableInWater = getBoolean("mobs.wandering_trader.ridable-in-water", wanderingTraderRidableInWater); -@@ -1481,6 +1484,7 @@ public class PurpurWorldConfig { +@@ -1503,6 +1506,7 @@ public class PurpurWorldConfig { } wanderingTraderMaxHealth = getDouble("mobs.wandering_trader.attributes.max_health", wanderingTraderMaxHealth); wanderingTraderFollowEmeraldBlock = getBoolean("mobs.wandering_trader.follow-emerald-blocks", wanderingTraderFollowEmeraldBlock); diff --git a/patches/server/0062-Configurable-jockey-options.patch b/patches/server/0062-Configurable-jockey-options.patch index 8b8ec6285..f619870e7 100644 --- a/patches/server/0062-Configurable-jockey-options.patch +++ b/patches/server/0062-Configurable-jockey-options.patch @@ -167,10 +167,10 @@ index 138f3f6a9b0754d54e5f8000962bb52b224f677d..75c34d9fcc4b33d30b18f1ce4c8749a0 public void setPersistentAngerTarget(@Nullable UUID angryAt) { this.persistentAngerTarget = angryAt; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 62074152a0a494bbde4c39074942425a8b850ffd..7fabef36d3f9a5294a62ed956010d7ef853e00ab 100644 +index 06acffbb57d961d1c8a48bce5983b063146181f3..803387f232c25ed43c252fa05335e5e1915048ff 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -588,6 +588,9 @@ public class PurpurWorldConfig { +@@ -610,6 +610,9 @@ public class PurpurWorldConfig { public boolean drownedControllable = true; public double drownedMaxHealth = 20.0D; public double drownedSpawnReinforcements = 0.1D; @@ -180,7 +180,7 @@ index 62074152a0a494bbde4c39074942425a8b850ffd..7fabef36d3f9a5294a62ed956010d7ef private void drownedSettings() { drownedRidable = getBoolean("mobs.drowned.ridable", drownedRidable); drownedRidableInWater = getBoolean("mobs.drowned.ridable-in-water", drownedRidableInWater); -@@ -599,6 +602,9 @@ public class PurpurWorldConfig { +@@ -621,6 +624,9 @@ public class PurpurWorldConfig { } drownedMaxHealth = getDouble("mobs.drowned.attributes.max_health", drownedMaxHealth); drownedSpawnReinforcements = getDouble("mobs.drowned.attributes.spawn_reinforcements", drownedSpawnReinforcements); @@ -190,7 +190,7 @@ index 62074152a0a494bbde4c39074942425a8b850ffd..7fabef36d3f9a5294a62ed956010d7ef } public boolean elderGuardianRidable = false; -@@ -847,6 +853,9 @@ public class PurpurWorldConfig { +@@ -869,6 +875,9 @@ public class PurpurWorldConfig { public boolean huskControllable = true; public double huskMaxHealth = 20.0D; public double huskSpawnReinforcements = 0.1D; @@ -200,7 +200,7 @@ index 62074152a0a494bbde4c39074942425a8b850ffd..7fabef36d3f9a5294a62ed956010d7ef private void huskSettings() { huskRidable = getBoolean("mobs.husk.ridable", huskRidable); huskRidableInWater = getBoolean("mobs.husk.ridable-in-water", huskRidableInWater); -@@ -858,6 +867,9 @@ public class PurpurWorldConfig { +@@ -880,6 +889,9 @@ public class PurpurWorldConfig { } huskMaxHealth = getDouble("mobs.husk.attributes.max_health", huskMaxHealth); huskSpawnReinforcements = getDouble("mobs.husk.attributes.spawn_reinforcements", huskSpawnReinforcements); @@ -210,7 +210,7 @@ index 62074152a0a494bbde4c39074942425a8b850ffd..7fabef36d3f9a5294a62ed956010d7ef } public boolean illusionerRidable = false; -@@ -1674,6 +1686,9 @@ public class PurpurWorldConfig { +@@ -1696,6 +1708,9 @@ public class PurpurWorldConfig { public boolean zombieControllable = true; public double zombieMaxHealth = 20.0D; public double zombieSpawnReinforcements = 0.1D; @@ -220,7 +220,7 @@ index 62074152a0a494bbde4c39074942425a8b850ffd..7fabef36d3f9a5294a62ed956010d7ef private void zombieSettings() { zombieRidable = getBoolean("mobs.zombie.ridable", zombieRidable); zombieRidableInWater = getBoolean("mobs.zombie.ridable-in-water", zombieRidableInWater); -@@ -1685,6 +1700,9 @@ public class PurpurWorldConfig { +@@ -1707,6 +1722,9 @@ public class PurpurWorldConfig { } zombieMaxHealth = getDouble("mobs.zombie.attributes.max_health", zombieMaxHealth); zombieSpawnReinforcements = getDouble("mobs.zombie.attributes.spawn_reinforcements", zombieSpawnReinforcements); @@ -230,7 +230,7 @@ index 62074152a0a494bbde4c39074942425a8b850ffd..7fabef36d3f9a5294a62ed956010d7ef } public boolean zombieHorseRidable = false; -@@ -1721,6 +1739,9 @@ public class PurpurWorldConfig { +@@ -1743,6 +1761,9 @@ public class PurpurWorldConfig { public boolean zombieVillagerControllable = true; public double zombieVillagerMaxHealth = 20.0D; public double zombieVillagerSpawnReinforcements = 0.1D; @@ -240,7 +240,7 @@ index 62074152a0a494bbde4c39074942425a8b850ffd..7fabef36d3f9a5294a62ed956010d7ef private void zombieVillagerSettings() { zombieVillagerRidable = getBoolean("mobs.zombie_villager.ridable", zombieVillagerRidable); zombieVillagerRidableInWater = getBoolean("mobs.zombie_villager.ridable-in-water", zombieVillagerRidableInWater); -@@ -1732,6 +1753,9 @@ public class PurpurWorldConfig { +@@ -1754,6 +1775,9 @@ public class PurpurWorldConfig { } zombieVillagerMaxHealth = getDouble("mobs.zombie_villager.attributes.max_health", zombieVillagerMaxHealth); zombieVillagerSpawnReinforcements = getDouble("mobs.zombie_villager.attributes.spawn_reinforcements", zombieVillagerSpawnReinforcements); @@ -250,7 +250,7 @@ index 62074152a0a494bbde4c39074942425a8b850ffd..7fabef36d3f9a5294a62ed956010d7ef } public boolean zombifiedPiglinRidable = false; -@@ -1739,6 +1763,9 @@ public class PurpurWorldConfig { +@@ -1761,6 +1785,9 @@ public class PurpurWorldConfig { public boolean zombifiedPiglinControllable = true; public double zombifiedPiglinMaxHealth = 20.0D; public double zombifiedPiglinSpawnReinforcements = 0.0D; @@ -260,7 +260,7 @@ index 62074152a0a494bbde4c39074942425a8b850ffd..7fabef36d3f9a5294a62ed956010d7ef private void zombifiedPiglinSettings() { zombifiedPiglinRidable = getBoolean("mobs.zombified_piglin.ridable", zombifiedPiglinRidable); zombifiedPiglinRidableInWater = getBoolean("mobs.zombified_piglin.ridable-in-water", zombifiedPiglinRidableInWater); -@@ -1750,5 +1777,8 @@ public class PurpurWorldConfig { +@@ -1772,5 +1799,8 @@ public class PurpurWorldConfig { } zombifiedPiglinMaxHealth = getDouble("mobs.zombified_piglin.attributes.max_health", zombifiedPiglinMaxHealth); zombifiedPiglinSpawnReinforcements = getDouble("mobs.zombified_piglin.attributes.spawn_reinforcements", zombifiedPiglinSpawnReinforcements); diff --git a/patches/server/0063-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch b/patches/server/0063-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch index b8b783a89..e6c3930a9 100644 --- a/patches/server/0063-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch +++ b/patches/server/0063-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch @@ -256,10 +256,10 @@ index 01e8eaecec61e664838b5d7f18a9c3e730f00ddf..e0b1b0106fd3bbb6764d1b0a58ab2810 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 7fabef36d3f9a5294a62ed956010d7ef853e00ab..e1652079b92a5c951b5191997803e9d486892c61 100644 +index 803387f232c25ed43c252fa05335e5e1915048ff..bfa1ed9e0927f919648ab67ae49681fcd1286e3a 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 { +@@ -1087,6 +1087,9 @@ public class PurpurWorldConfig { public String phantomAttackDamage = "6 + size"; public Map phantomMaxHealthCache = new HashMap<>(); public Map phantomAttackDamageCache = new HashMap<>(); @@ -269,7 +269,7 @@ index 7fabef36d3f9a5294a62ed956010d7ef853e00ab..e1652079b92a5c951b5191997803e9d4 private void phantomSettings() { phantomRidable = getBoolean("mobs.phantom.ridable", phantomRidable); phantomRidableInWater = getBoolean("mobs.phantom.ridable-in-water", phantomRidableInWater); -@@ -1086,6 +1089,9 @@ public class PurpurWorldConfig { +@@ -1108,6 +1111,9 @@ public class PurpurWorldConfig { phantomAttackDamage = getString("mobs.phantom.attributes.attack_damage", phantomAttackDamage); phantomMaxHealthCache.clear(); phantomAttackDamageCache.clear(); diff --git a/patches/server/0064-Add-phantom-spawning-options.patch b/patches/server/0064-Add-phantom-spawning-options.patch index 3bd99a5d7..63bf22cea 100644 --- a/patches/server/0064-Add-phantom-spawning-options.patch +++ b/patches/server/0064-Add-phantom-spawning-options.patch @@ -40,10 +40,10 @@ index 1b1b475ca27e799e251d6f8a8c9fe1a4fd8bae83..04f67f7b43d2f461c776c76614dc3e5f for (int l = 0; l < k; ++l) { // Paper start - PhantomPreSpawnEvent diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index e1652079b92a5c951b5191997803e9d486892c61..10de2140aa89f75e7f67b38f6c1286f4330d127b 100644 +index bfa1ed9e0927f919648ab67ae49681fcd1286e3a..07f3b64e5d117957262ce6c8290052d707d17508 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 { +@@ -1090,6 +1090,12 @@ public class PurpurWorldConfig { public double phantomAttackedByCrystalRadius = 0.0D; public float phantomAttackedByCrystalDamage = 1.0F; public double phantomOrbitCrystalRadius = 0.0D; @@ -56,7 +56,7 @@ index e1652079b92a5c951b5191997803e9d486892c61..10de2140aa89f75e7f67b38f6c1286f4 private void phantomSettings() { phantomRidable = getBoolean("mobs.phantom.ridable", phantomRidable); phantomRidableInWater = getBoolean("mobs.phantom.ridable-in-water", phantomRidableInWater); -@@ -1092,6 +1098,12 @@ public class PurpurWorldConfig { +@@ -1114,6 +1120,12 @@ public class PurpurWorldConfig { phantomAttackedByCrystalRadius = getDouble("mobs.phantom.attacked-by-crystal-range", phantomAttackedByCrystalRadius); phantomAttackedByCrystalDamage = (float) getDouble("mobs.phantom.attacked-by-crystal-damage", phantomAttackedByCrystalDamage); phantomOrbitCrystalRadius = getDouble("mobs.phantom.orbit-crystal-radius", phantomOrbitCrystalRadius); diff --git a/patches/server/0071-Squid-EAR-immunity.patch b/patches/server/0071-Squid-EAR-immunity.patch index 891141943..6673d5046 100644 --- a/patches/server/0071-Squid-EAR-immunity.patch +++ b/patches/server/0071-Squid-EAR-immunity.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Squid EAR immunity diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 98e6faaeeaf8a983f9d730591a9d85c314c112d3..27d279d76fd3632fd023edded3b10630629ec132 100644 +index 859ea7beb9f9644d45f805c1ecc18e7b87be67a7..1da67c207b18e4c0eaf9a822360dbbe3215e7a6d 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1453,6 +1453,7 @@ public class PurpurWorldConfig { +@@ -1475,6 +1475,7 @@ public class PurpurWorldConfig { public boolean squidRidable = false; public boolean squidControllable = true; public double squidMaxHealth = 10.0D; @@ -16,7 +16,7 @@ index 98e6faaeeaf8a983f9d730591a9d85c314c112d3..27d279d76fd3632fd023edded3b10630 private void squidSettings() { squidRidable = getBoolean("mobs.squid.ridable", squidRidable); squidControllable = getBoolean("mobs.squid.controllable", squidControllable); -@@ -1462,6 +1463,7 @@ public class PurpurWorldConfig { +@@ -1484,6 +1485,7 @@ public class PurpurWorldConfig { set("mobs.squid.attributes.max_health", oldValue); } squidMaxHealth = getDouble("mobs.squid.attributes.max_health", squidMaxHealth); diff --git a/patches/server/0072-Phantoms-burn-in-light.patch b/patches/server/0072-Phantoms-burn-in-light.patch index d35474462..f998cf89d 100644 --- a/patches/server/0072-Phantoms-burn-in-light.patch +++ b/patches/server/0072-Phantoms-burn-in-light.patch @@ -51,10 +51,10 @@ index e0b1b0106fd3bbb6764d1b0a58ab2810181cac02..1ddccb9fa438682c2ebad7c071c7a4f8 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 27d279d76fd3632fd023edded3b10630629ec132..dcd9f80eb69e34b514f57158568e4cb59e9860ec 100644 +index 1da67c207b18e4c0eaf9a822360dbbe3215e7a6d..2c6167946e8186f378142b0cd02b71abf1780bea 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 { +@@ -1145,6 +1145,9 @@ public class PurpurWorldConfig { public double phantomSpawnLocalDifficultyChance = 3.0D; public int phantomSpawnMinPerAttempt = 1; public int phantomSpawnMaxPerAttempt = -1; @@ -64,7 +64,7 @@ index 27d279d76fd3632fd023edded3b10630629ec132..dcd9f80eb69e34b514f57158568e4cb5 private void phantomSettings() { phantomRidable = getBoolean("mobs.phantom.ridable", phantomRidable); phantomRidableInWater = getBoolean("mobs.phantom.ridable-in-water", phantomRidableInWater); -@@ -1153,6 +1156,9 @@ public class PurpurWorldConfig { +@@ -1175,6 +1178,9 @@ public class PurpurWorldConfig { phantomSpawnLocalDifficultyChance = getDouble("mobs.phantom.spawn.local-difficulty-chance", phantomSpawnLocalDifficultyChance); phantomSpawnMinPerAttempt = getInt("mobs.phantom.spawn.per-attempt.min", phantomSpawnMinPerAttempt); phantomSpawnMaxPerAttempt = getInt("mobs.phantom.spawn.per-attempt.max", phantomSpawnMaxPerAttempt); diff --git a/patches/server/0073-Configurable-villager-breeding.patch b/patches/server/0073-Configurable-villager-breeding.patch index 71c318976..9777a045e 100644 --- a/patches/server/0073-Configurable-villager-breeding.patch +++ b/patches/server/0073-Configurable-villager-breeding.patch @@ -18,10 +18,10 @@ index 051940da69567274f48485f060cbc3ac21a0907f..6de74d992bd8b2845ab98d56201e7eea private boolean hungry() { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index dcd9f80eb69e34b514f57158568e4cb59e9860ec..df4f384032f398fc9852e753dee820ffa33e10bb 100644 +index 2c6167946e8186f378142b0cd02b71abf1780bea..2a8ec23926af200a8bd8d33ecd930387117fc71b 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1611,6 +1611,7 @@ public class PurpurWorldConfig { +@@ -1633,6 +1633,7 @@ public class PurpurWorldConfig { public double villagerMaxHealth = 20.0D; public boolean villagerFollowEmeraldBlock = false; public boolean villagerCanBeLeashed = false; @@ -29,7 +29,7 @@ index dcd9f80eb69e34b514f57158568e4cb59e9860ec..df4f384032f398fc9852e753dee820ff private void villagerSettings() { villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); -@@ -1623,6 +1624,7 @@ public class PurpurWorldConfig { +@@ -1645,6 +1646,7 @@ public class PurpurWorldConfig { villagerMaxHealth = getDouble("mobs.villager.attributes.max_health", villagerMaxHealth); villagerFollowEmeraldBlock = getBoolean("mobs.villager.follow-emerald-blocks", villagerFollowEmeraldBlock); villagerCanBeLeashed = getBoolean("mobs.villager.can-be-leashed", villagerCanBeLeashed); diff --git a/patches/server/0076-Add-vindicator-johnny-spawn-chance.patch b/patches/server/0076-Add-vindicator-johnny-spawn-chance.patch index 34abb4304..44e3cd15b 100644 --- a/patches/server/0076-Add-vindicator-johnny-spawn-chance.patch +++ b/patches/server/0076-Add-vindicator-johnny-spawn-chance.patch @@ -22,10 +22,10 @@ index e270da29fdab5060b6a936bba67c433a78c54b5b..61f1778d454cebaab5580179614ff48a } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index be916fe3a8bc8996be8b0835e3bd8f7920c15055..7b584d5c8460e90dfea250591e4ca36cb1db004a 100644 +index 1c4446ce2ca2e9c9d3d85a38752a6f27f8121d12..8df777ce71b649de697bbf9b77636f3a30df3d1c 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1638,6 +1638,7 @@ public class PurpurWorldConfig { +@@ -1660,6 +1660,7 @@ public class PurpurWorldConfig { public boolean vindicatorRidableInWater = true; public boolean vindicatorControllable = true; public double vindicatorMaxHealth = 24.0D; @@ -33,7 +33,7 @@ index be916fe3a8bc8996be8b0835e3bd8f7920c15055..7b584d5c8460e90dfea250591e4ca36c private void vindicatorSettings() { vindicatorRidable = getBoolean("mobs.vindicator.ridable", vindicatorRidable); vindicatorRidableInWater = getBoolean("mobs.vindicator.ridable-in-water", vindicatorRidableInWater); -@@ -1648,6 +1649,7 @@ public class PurpurWorldConfig { +@@ -1670,6 +1671,7 @@ public class PurpurWorldConfig { set("mobs.vindicator.attributes.max_health", oldValue); } vindicatorMaxHealth = getDouble("mobs.vindicator.attributes.max_health", vindicatorMaxHealth); diff --git a/patches/server/0079-Add-option-to-disable-dolphin-treasure-searching.patch b/patches/server/0079-Add-option-to-disable-dolphin-treasure-searching.patch index 23dbd04de..c2a10a8e2 100644 --- a/patches/server/0079-Add-option-to-disable-dolphin-treasure-searching.patch +++ b/patches/server/0079-Add-option-to-disable-dolphin-treasure-searching.patch @@ -17,10 +17,10 @@ index 4f294b3ecf061f34046b52bf2b6a3d0ff1ed347b..366d583926e7e33a8c1e5a803bb75a45 } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 4c80796777c5a90c5e7a9e8ef0beedfcb49f0aa9..b9faaf71e0cd5918b072d068bbc2096aa2805616 100644 +index d6ebaed09f0b84ec7641ad660f47aed95fdac1b9..dff99dafb0869106fc8f70ee583ba8e269e07777 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 { +@@ -632,6 +632,7 @@ public class PurpurWorldConfig { public float dolphinSpitSpeed = 1.0F; public float dolphinSpitDamage = 2.0F; public double dolphinMaxHealth = 10.0D; @@ -28,7 +28,7 @@ index 4c80796777c5a90c5e7a9e8ef0beedfcb49f0aa9..b9faaf71e0cd5918b072d068bbc2096a private void dolphinSettings() { dolphinRidable = getBoolean("mobs.dolphin.ridable", dolphinRidable); dolphinControllable = getBoolean("mobs.dolphin.controllable", dolphinControllable); -@@ -622,6 +623,7 @@ public class PurpurWorldConfig { +@@ -644,6 +645,7 @@ public class PurpurWorldConfig { set("mobs.dolphin.attributes.max_health", oldValue); } dolphinMaxHealth = getDouble("mobs.dolphin.attributes.max_health", dolphinMaxHealth); diff --git a/patches/server/0081-Stop-squids-floating-on-top-of-water.patch b/patches/server/0081-Stop-squids-floating-on-top-of-water.patch index 1cddbd176..1a87f1d97 100644 --- a/patches/server/0081-Stop-squids-floating-on-top-of-water.patch +++ b/patches/server/0081-Stop-squids-floating-on-top-of-water.patch @@ -5,7 +5,7 @@ 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 9b653134ad71a6d3ff22dfaa15390e3cd7b4453a..b3fe632b18e5dfa18d37ef23a5a62f3a0f9ccf42 100644 +index 6734cc459682328c7bfe8714a190a5765165e17b..44e20e9921f89238088458ba4c22c0997aae899b 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java @@ -4516,6 +4516,12 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess @@ -54,10 +54,10 @@ index 92394960fc76886f393cba02ac33c57739a4b383..494808b7bc2fb296b78e229ce138a937 + // Purpur } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index b9faaf71e0cd5918b072d068bbc2096aa2805616..56f34c0a0f7bc94a90bb1db32f8e30a590a3b38c 100644 +index dff99dafb0869106fc8f70ee583ba8e269e07777..0ca54a08809ff058912a82e3a8e611cbfe61b682 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1478,6 +1478,7 @@ public class PurpurWorldConfig { +@@ -1500,6 +1500,7 @@ public class PurpurWorldConfig { public boolean squidControllable = true; public double squidMaxHealth = 10.0D; public boolean squidImmuneToEAR = true; @@ -65,7 +65,7 @@ index b9faaf71e0cd5918b072d068bbc2096aa2805616..56f34c0a0f7bc94a90bb1db32f8e30a5 private void squidSettings() { squidRidable = getBoolean("mobs.squid.ridable", squidRidable); squidControllable = getBoolean("mobs.squid.controllable", squidControllable); -@@ -1488,6 +1489,7 @@ public class PurpurWorldConfig { +@@ -1510,6 +1511,7 @@ public class PurpurWorldConfig { } squidMaxHealth = getDouble("mobs.squid.attributes.max_health", squidMaxHealth); squidImmuneToEAR = getBoolean("mobs.squid.immune-to-EAR", squidImmuneToEAR); diff --git a/patches/server/0085-Customizable-wither-health-and-healing.patch b/patches/server/0085-Customizable-wither-health-and-healing.patch index 0ce62c319..e6e2a15bc 100644 --- a/patches/server/0085-Customizable-wither-health-and-healing.patch +++ b/patches/server/0085-Customizable-wither-health-and-healing.patch @@ -23,10 +23,10 @@ index 0cc32342cf6c65466dd1e45f9097ca89b01036e4..8d2894bb1ae70f63c8fa67de3e9f7c6a this.bossEvent.setProgress(this.getHealth() / this.getMaxHealth()); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 1f25407aafba71762a482f0b1982302fed14387f..beea39d7cdbca783de7248a5c40ea2c7ab02e5b5 100644 +index 7d08647a6eaf217b3c4504b0953ba1f824104359..ccd5741f4fb91874fdca7c49b9c4c90eefc3b1b1 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1717,6 +1717,8 @@ public class PurpurWorldConfig { +@@ -1739,6 +1739,8 @@ public class PurpurWorldConfig { public boolean witherControllable = true; public double witherMaxY = 320D; public double witherMaxHealth = 300.0D; @@ -35,7 +35,7 @@ index 1f25407aafba71762a482f0b1982302fed14387f..beea39d7cdbca783de7248a5c40ea2c7 private void witherSettings() { witherRidable = getBoolean("mobs.wither.ridable", witherRidable); witherRidableInWater = getBoolean("mobs.wither.ridable-in-water", witherRidableInWater); -@@ -1732,6 +1734,8 @@ public class PurpurWorldConfig { +@@ -1754,6 +1756,8 @@ public class PurpurWorldConfig { set("mobs.wither.attributes.max_health", oldValue); } witherMaxHealth = getDouble("mobs.wither.attributes.max_health", witherMaxHealth); diff --git a/patches/server/0089-Add-option-to-disable-zombie-aggressiveness-towards-.patch b/patches/server/0089-Add-option-to-disable-zombie-aggressiveness-towards-.patch index af48746e7..1ba1b31b8 100644 --- a/patches/server/0089-Add-option-to-disable-zombie-aggressiveness-towards-.patch +++ b/patches/server/0089-Add-option-to-disable-zombie-aggressiveness-towards-.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Add option to disable zombie aggressiveness towards villagers diff --git a/src/main/java/com/destroystokyo/paper/entity/ai/MobGoalHelper.java b/src/main/java/com/destroystokyo/paper/entity/ai/MobGoalHelper.java -index c72d6bccf7d72d08d388c65936a89c92261c7860..ee746753515c9cea8dd246f4f56e6781956726c1 100644 +index 06455d65c4605ce092bf5300d432087f24186741..750fd2809f6d5d5896904cad0f65029b03bda849 100644 --- a/src/main/java/com/destroystokyo/paper/entity/ai/MobGoalHelper.java +++ b/src/main/java/com/destroystokyo/paper/entity/ai/MobGoalHelper.java @@ -137,6 +137,10 @@ public class MobGoalHelper { @@ -70,10 +70,10 @@ index 555b86925b8d848fad40a838dd98607db8741e3b..3d42b2ea26217243dba96174ff0eadbc this.targetSelector.addGoal(5, new NearestAttackableTargetGoal<>(this, Turtle.class, 10, true, false, Turtle.BABY_ON_LAND_SELECTOR)); } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 8a577d78d63adc799de71f96b45320372c346552..69c433dd27be4a67052d73620c80d48ed6566034 100644 +index 047f702ee2600036ac0478eb24fbbe6ba426f5c2..88a4e38445dda48e9f9bcc3c9be6ca9fb5ff5760 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1851,6 +1851,7 @@ public class PurpurWorldConfig { +@@ -1873,6 +1873,7 @@ public class PurpurWorldConfig { public boolean zombieJockeyOnlyBaby = true; public double zombieJockeyChance = 0.05D; public boolean zombieJockeyTryExistingChickens = true; @@ -81,7 +81,7 @@ index 8a577d78d63adc799de71f96b45320372c346552..69c433dd27be4a67052d73620c80d48e private void zombieSettings() { zombieRidable = getBoolean("mobs.zombie.ridable", zombieRidable); zombieRidableInWater = getBoolean("mobs.zombie.ridable-in-water", zombieRidableInWater); -@@ -1865,6 +1866,7 @@ public class PurpurWorldConfig { +@@ -1887,6 +1888,7 @@ public class PurpurWorldConfig { zombieJockeyOnlyBaby = getBoolean("mobs.zombie.jockey.only-babies", zombieJockeyOnlyBaby); zombieJockeyChance = getDouble("mobs.zombie.jockey.chance", zombieJockeyChance); zombieJockeyTryExistingChickens = getBoolean("mobs.zombie.jockey.try-existing-chickens", zombieJockeyTryExistingChickens); diff --git a/patches/server/0091-Flying-squids-Oh-my.patch b/patches/server/0091-Flying-squids-Oh-my.patch index b0907f34a..ca26d5b52 100644 --- a/patches/server/0091-Flying-squids-Oh-my.patch +++ b/patches/server/0091-Flying-squids-Oh-my.patch @@ -58,10 +58,10 @@ index c562eeb5e865a57fbc595de47c5d4e2b90430026..f0261117a4f8ae240b3b991053deaf8d float g = Mth.cos(f) * 0.2F; float h = -0.1F + this.squid.getRandom().nextFloat() * 0.2F; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 69c433dd27be4a67052d73620c80d48ed6566034..636f1a2962ee48a42a644b241569f08e7d57097c 100644 +index 88a4e38445dda48e9f9bcc3c9be6ca9fb5ff5760..935bf96285bd7927f0b2294c7731a865a54e4585 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -903,10 +903,12 @@ public class PurpurWorldConfig { +@@ -925,10 +925,12 @@ public class PurpurWorldConfig { public boolean glowSquidRidable = false; public boolean glowSquidControllable = true; public double glowSquidMaxHealth = 10.0D; @@ -74,7 +74,7 @@ index 69c433dd27be4a67052d73620c80d48ed6566034..636f1a2962ee48a42a644b241569f08e } public boolean goatRidable = false; -@@ -1538,6 +1540,7 @@ public class PurpurWorldConfig { +@@ -1560,6 +1562,7 @@ public class PurpurWorldConfig { public double squidMaxHealth = 10.0D; public boolean squidImmuneToEAR = true; public double squidOffsetWaterCheck = 0.0D; @@ -82,7 +82,7 @@ index 69c433dd27be4a67052d73620c80d48ed6566034..636f1a2962ee48a42a644b241569f08e private void squidSettings() { squidRidable = getBoolean("mobs.squid.ridable", squidRidable); squidControllable = getBoolean("mobs.squid.controllable", squidControllable); -@@ -1549,6 +1552,7 @@ public class PurpurWorldConfig { +@@ -1571,6 +1574,7 @@ public class PurpurWorldConfig { squidMaxHealth = getDouble("mobs.squid.attributes.max_health", squidMaxHealth); squidImmuneToEAR = getBoolean("mobs.squid.immune-to-EAR", squidImmuneToEAR); squidOffsetWaterCheck = getDouble("mobs.squid.water-offset-check", squidOffsetWaterCheck); diff --git a/patches/server/0099-Make-entity-breeding-times-configurable.patch b/patches/server/0099-Make-entity-breeding-times-configurable.patch index 82a6500b8..167cfa681 100644 --- a/patches/server/0099-Make-entity-breeding-times-configurable.patch +++ b/patches/server/0099-Make-entity-breeding-times-configurable.patch @@ -300,21 +300,21 @@ index 3235ed40d502722e888656776ba1a218f198f53e..2267f8da1c27ff54b2ced59ef15eb453 protected void registerGoals() { this.goalSelector.addGoal(1, new FloatGoal(this)); diff --git a/src/main/java/net/minecraft/world/entity/animal/armadillo/Armadillo.java b/src/main/java/net/minecraft/world/entity/animal/armadillo/Armadillo.java -index b38281f963377cc82b360e8457da7cad033b8c36..29412208e329e9fc211b844822a2fc3328a5bc89 100644 +index 2c4a353c86521bf3018cd17748c8cb29330732d2..c9740f5588cf4db0c8257c47e96cef7a743cca45 100644 --- a/src/main/java/net/minecraft/world/entity/animal/armadillo/Armadillo.java +++ b/src/main/java/net/minecraft/world/entity/animal/armadillo/Armadillo.java -@@ -469,4 +469,11 @@ public class Armadillo extends Animal { - return this.animationDuration; - } +@@ -97,6 +97,11 @@ public class Armadillo extends Animal { + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.armadilloMaxHealth); } + -+ // Purpur start + @Override + public int getPurpurBreedTime() { -+ return 6000; ++ return this.level().purpurConfig.armadilloBreedingTicks; + } -+ // Purpur end - } + // Purpur end + + @Override 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 414ff28670c3d36dc78e3df4d39b6d4eb3ec1e77..97ba327398d84db09c81cee860b40642b428ea48 100644 --- a/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java @@ -538,10 +538,22 @@ index 3bfc073fb142e3446044a42c33be6c30587cc3c4..a770ae0e13c4dad296dfb8f33259408e public boolean canBeLeashed(Player player) { return !this.isLeashed(); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 37292c309b465fce3b601a3ff8400e58c5a74308..8ba5fc8813ef1cb34f7df801f6d7b2ed42b1c052 100644 +index b02249716f8a30e520a852ddfb5be645c6102c20..0217eb56c0e7799ac6a07bdfc42396fc9486e9cb 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -502,10 +502,12 @@ public class PurpurWorldConfig { +@@ -503,20 +503,24 @@ public class PurpurWorldConfig { + public boolean armadilloRidableInWater = true; + public boolean armadilloControllable = true; + public double armadilloMaxHealth = 12.0D; ++ public int armadilloBreedingTicks = 6000; + private void armadilloSettings() { + armadilloRidable = getBoolean("mobs.armadillo.ridable", armadilloRidable); + armadilloRidableInWater = getBoolean("mobs.armadillo.ridable-in-water", armadilloRidableInWater); + armadilloControllable = getBoolean("mobs.armadillo.controllable", armadilloControllable); + armadilloMaxHealth = getDouble("mobs.armadillo.attributes.max_health", armadilloMaxHealth); ++ armadilloBreedingTicks = getInt("mobs.armadillo.breeding-delay-ticks", armadilloBreedingTicks); + } + public boolean axolotlRidable = false; public boolean axolotlControllable = true; public double axolotlMaxHealth = 14.0D; @@ -554,7 +566,7 @@ index 37292c309b465fce3b601a3ff8400e58c5a74308..8ba5fc8813ef1cb34f7df801f6d7b2ed } public boolean batRidable = false; -@@ -545,6 +547,7 @@ public class PurpurWorldConfig { +@@ -556,6 +560,7 @@ public class PurpurWorldConfig { public boolean beeControllable = true; public double beeMaxY = 320D; public double beeMaxHealth = 10.0D; @@ -562,7 +574,7 @@ index 37292c309b465fce3b601a3ff8400e58c5a74308..8ba5fc8813ef1cb34f7df801f6d7b2ed private void beeSettings() { beeRidable = getBoolean("mobs.bee.ridable", beeRidable); beeRidableInWater = getBoolean("mobs.bee.ridable-in-water", beeRidableInWater); -@@ -556,6 +559,7 @@ public class PurpurWorldConfig { +@@ -567,6 +572,7 @@ public class PurpurWorldConfig { set("mobs.bee.attributes.max_health", oldValue); } beeMaxHealth = getDouble("mobs.bee.attributes.max_health", beeMaxHealth); @@ -570,7 +582,7 @@ index 37292c309b465fce3b601a3ff8400e58c5a74308..8ba5fc8813ef1cb34f7df801f6d7b2ed } public boolean blazeRidable = false; -@@ -583,6 +587,7 @@ public class PurpurWorldConfig { +@@ -605,6 +611,7 @@ public class PurpurWorldConfig { public double camelJumpStrengthMax = 0.42D; public double camelMovementSpeedMin = 0.09D; public double camelMovementSpeedMax = 0.09D; @@ -578,7 +590,7 @@ index 37292c309b465fce3b601a3ff8400e58c5a74308..8ba5fc8813ef1cb34f7df801f6d7b2ed private void camelSettings() { camelRidableInWater = getBoolean("mobs.camel.ridable-in-water", camelRidableInWater); camelMaxHealthMin = getDouble("mobs.camel.attributes.max_health.min", camelMaxHealthMin); -@@ -591,6 +596,7 @@ public class PurpurWorldConfig { +@@ -613,6 +620,7 @@ public class PurpurWorldConfig { camelJumpStrengthMax = getDouble("mobs.camel.attributes.jump_strength.max", camelJumpStrengthMax); camelMovementSpeedMin = getDouble("mobs.camel.attributes.movement_speed.min", camelMovementSpeedMin); camelMovementSpeedMax = getDouble("mobs.camel.attributes.movement_speed.max", camelMovementSpeedMax); @@ -586,7 +598,7 @@ index 37292c309b465fce3b601a3ff8400e58c5a74308..8ba5fc8813ef1cb34f7df801f6d7b2ed } public boolean catRidable = false; -@@ -600,6 +606,7 @@ public class PurpurWorldConfig { +@@ -622,6 +630,7 @@ public class PurpurWorldConfig { public int catSpawnDelay = 1200; public int catSpawnSwampHutScanRange = 16; public int catSpawnVillageScanRange = 48; @@ -594,7 +606,7 @@ index 37292c309b465fce3b601a3ff8400e58c5a74308..8ba5fc8813ef1cb34f7df801f6d7b2ed private void catSettings() { catRidable = getBoolean("mobs.cat.ridable", catRidable); catRidableInWater = getBoolean("mobs.cat.ridable-in-water", catRidableInWater); -@@ -613,6 +620,7 @@ public class PurpurWorldConfig { +@@ -635,6 +644,7 @@ public class PurpurWorldConfig { catSpawnDelay = getInt("mobs.cat.spawn-delay", catSpawnDelay); catSpawnSwampHutScanRange = getInt("mobs.cat.scan-range-for-other-cats.swamp-hut", catSpawnSwampHutScanRange); catSpawnVillageScanRange = getInt("mobs.cat.scan-range-for-other-cats.village", catSpawnVillageScanRange); @@ -602,7 +614,7 @@ index 37292c309b465fce3b601a3ff8400e58c5a74308..8ba5fc8813ef1cb34f7df801f6d7b2ed } public boolean caveSpiderRidable = false; -@@ -636,6 +644,7 @@ public class PurpurWorldConfig { +@@ -658,6 +668,7 @@ public class PurpurWorldConfig { public boolean chickenControllable = true; public double chickenMaxHealth = 4.0D; public boolean chickenRetaliate = false; @@ -610,7 +622,7 @@ index 37292c309b465fce3b601a3ff8400e58c5a74308..8ba5fc8813ef1cb34f7df801f6d7b2ed private void chickenSettings() { chickenRidable = getBoolean("mobs.chicken.ridable", chickenRidable); chickenRidableInWater = getBoolean("mobs.chicken.ridable-in-water", chickenRidableInWater); -@@ -647,6 +656,7 @@ public class PurpurWorldConfig { +@@ -669,6 +680,7 @@ public class PurpurWorldConfig { } chickenMaxHealth = getDouble("mobs.chicken.attributes.max_health", chickenMaxHealth); chickenRetaliate = getBoolean("mobs.chicken.retaliate", chickenRetaliate); @@ -618,7 +630,7 @@ index 37292c309b465fce3b601a3ff8400e58c5a74308..8ba5fc8813ef1cb34f7df801f6d7b2ed } public boolean codRidable = false; -@@ -668,6 +678,7 @@ public class PurpurWorldConfig { +@@ -690,6 +702,7 @@ public class PurpurWorldConfig { public boolean cowControllable = true; public double cowMaxHealth = 10.0D; public int cowFeedMushrooms = 0; @@ -626,7 +638,7 @@ index 37292c309b465fce3b601a3ff8400e58c5a74308..8ba5fc8813ef1cb34f7df801f6d7b2ed private void cowSettings() { cowRidable = getBoolean("mobs.cow.ridable", cowRidable); cowRidableInWater = getBoolean("mobs.cow.ridable-in-water", cowRidableInWater); -@@ -679,6 +690,7 @@ public class PurpurWorldConfig { +@@ -701,6 +714,7 @@ public class PurpurWorldConfig { } cowMaxHealth = getDouble("mobs.cow.attributes.max_health", cowMaxHealth); cowFeedMushrooms = getInt("mobs.cow.feed-mushrooms-for-mooshroom", cowFeedMushrooms); @@ -634,7 +646,7 @@ index 37292c309b465fce3b601a3ff8400e58c5a74308..8ba5fc8813ef1cb34f7df801f6d7b2ed } public boolean creeperRidable = false; -@@ -730,6 +742,7 @@ public class PurpurWorldConfig { +@@ -752,6 +766,7 @@ public class PurpurWorldConfig { public double donkeyJumpStrengthMax = 0.5D; public double donkeyMovementSpeedMin = 0.175D; public double donkeyMovementSpeedMax = 0.175D; @@ -642,7 +654,7 @@ index 37292c309b465fce3b601a3ff8400e58c5a74308..8ba5fc8813ef1cb34f7df801f6d7b2ed private void donkeySettings() { donkeyRidableInWater = getBoolean("mobs.donkey.ridable-in-water", donkeyRidableInWater); if (PurpurConfig.version < 10) { -@@ -745,6 +758,7 @@ public class PurpurWorldConfig { +@@ -767,6 +782,7 @@ public class PurpurWorldConfig { donkeyJumpStrengthMax = getDouble("mobs.donkey.attributes.jump_strength.max", donkeyJumpStrengthMax); donkeyMovementSpeedMin = getDouble("mobs.donkey.attributes.movement_speed.min", donkeyMovementSpeedMin); donkeyMovementSpeedMax = getDouble("mobs.donkey.attributes.movement_speed.max", donkeyMovementSpeedMax); @@ -650,7 +662,7 @@ index 37292c309b465fce3b601a3ff8400e58c5a74308..8ba5fc8813ef1cb34f7df801f6d7b2ed } public boolean drownedRidable = false; -@@ -864,6 +878,7 @@ public class PurpurWorldConfig { +@@ -886,6 +902,7 @@ public class PurpurWorldConfig { public boolean foxControllable = true; public double foxMaxHealth = 10.0D; public boolean foxTypeChangesWithTulips = false; @@ -658,7 +670,7 @@ index 37292c309b465fce3b601a3ff8400e58c5a74308..8ba5fc8813ef1cb34f7df801f6d7b2ed private void foxSettings() { foxRidable = getBoolean("mobs.fox.ridable", foxRidable); foxRidableInWater = getBoolean("mobs.fox.ridable-in-water", foxRidableInWater); -@@ -875,17 +890,20 @@ public class PurpurWorldConfig { +@@ -897,17 +914,20 @@ public class PurpurWorldConfig { } foxMaxHealth = getDouble("mobs.fox.attributes.max_health", foxMaxHealth); foxTypeChangesWithTulips = getBoolean("mobs.fox.tulips-change-type", foxTypeChangesWithTulips); @@ -679,7 +691,7 @@ index 37292c309b465fce3b601a3ff8400e58c5a74308..8ba5fc8813ef1cb34f7df801f6d7b2ed } public boolean ghastRidable = false; -@@ -953,11 +971,13 @@ public class PurpurWorldConfig { +@@ -975,11 +995,13 @@ public class PurpurWorldConfig { public boolean goatRidableInWater = true; public boolean goatControllable = true; public double goatMaxHealth = 10.0D; @@ -693,7 +705,7 @@ index 37292c309b465fce3b601a3ff8400e58c5a74308..8ba5fc8813ef1cb34f7df801f6d7b2ed } public boolean guardianRidable = false; -@@ -978,6 +998,7 @@ public class PurpurWorldConfig { +@@ -1000,6 +1022,7 @@ public class PurpurWorldConfig { public boolean hoglinRidableInWater = true; public boolean hoglinControllable = true; public double hoglinMaxHealth = 40.0D; @@ -701,7 +713,7 @@ index 37292c309b465fce3b601a3ff8400e58c5a74308..8ba5fc8813ef1cb34f7df801f6d7b2ed private void hoglinSettings() { hoglinRidable = getBoolean("mobs.hoglin.ridable", hoglinRidable); hoglinRidableInWater = getBoolean("mobs.hoglin.ridable-in-water", hoglinRidableInWater); -@@ -988,6 +1009,7 @@ public class PurpurWorldConfig { +@@ -1010,6 +1033,7 @@ public class PurpurWorldConfig { set("mobs.hoglin.attributes.max_health", oldValue); } hoglinMaxHealth = getDouble("mobs.hoglin.attributes.max_health", hoglinMaxHealth); @@ -709,7 +721,7 @@ index 37292c309b465fce3b601a3ff8400e58c5a74308..8ba5fc8813ef1cb34f7df801f6d7b2ed } public boolean horseRidableInWater = false; -@@ -997,6 +1019,7 @@ public class PurpurWorldConfig { +@@ -1019,6 +1043,7 @@ public class PurpurWorldConfig { public double horseJumpStrengthMax = 1.0D; public double horseMovementSpeedMin = 0.1125D; public double horseMovementSpeedMax = 0.3375D; @@ -717,7 +729,7 @@ index 37292c309b465fce3b601a3ff8400e58c5a74308..8ba5fc8813ef1cb34f7df801f6d7b2ed private void horseSettings() { horseRidableInWater = getBoolean("mobs.horse.ridable-in-water", horseRidableInWater); if (PurpurConfig.version < 10) { -@@ -1012,6 +1035,7 @@ public class PurpurWorldConfig { +@@ -1034,6 +1059,7 @@ public class PurpurWorldConfig { horseJumpStrengthMax = getDouble("mobs.horse.attributes.jump_strength.max", horseJumpStrengthMax); horseMovementSpeedMin = getDouble("mobs.horse.attributes.movement_speed.min", horseMovementSpeedMin); horseMovementSpeedMax = getDouble("mobs.horse.attributes.movement_speed.max", horseMovementSpeedMax); @@ -725,7 +737,7 @@ index 37292c309b465fce3b601a3ff8400e58c5a74308..8ba5fc8813ef1cb34f7df801f6d7b2ed } public boolean huskRidable = false; -@@ -1089,6 +1113,7 @@ public class PurpurWorldConfig { +@@ -1111,6 +1137,7 @@ public class PurpurWorldConfig { public double llamaJumpStrengthMax = 0.5D; public double llamaMovementSpeedMin = 0.175D; public double llamaMovementSpeedMax = 0.175D; @@ -733,7 +745,7 @@ index 37292c309b465fce3b601a3ff8400e58c5a74308..8ba5fc8813ef1cb34f7df801f6d7b2ed private void llamaSettings() { llamaRidable = getBoolean("mobs.llama.ridable", llamaRidable); llamaRidableInWater = getBoolean("mobs.llama.ridable-in-water", llamaRidableInWater); -@@ -1106,6 +1131,7 @@ public class PurpurWorldConfig { +@@ -1128,6 +1155,7 @@ public class PurpurWorldConfig { llamaJumpStrengthMax = getDouble("mobs.llama.attributes.jump_strength.max", llamaJumpStrengthMax); llamaMovementSpeedMin = getDouble("mobs.llama.attributes.movement_speed.min", llamaMovementSpeedMin); llamaMovementSpeedMax = getDouble("mobs.llama.attributes.movement_speed.max", llamaMovementSpeedMax); @@ -741,7 +753,7 @@ index 37292c309b465fce3b601a3ff8400e58c5a74308..8ba5fc8813ef1cb34f7df801f6d7b2ed } public boolean magmaCubeRidable = false; -@@ -1134,6 +1160,7 @@ public class PurpurWorldConfig { +@@ -1156,6 +1184,7 @@ public class PurpurWorldConfig { public boolean mooshroomRidableInWater = true; public boolean mooshroomControllable = true; public double mooshroomMaxHealth = 10.0D; @@ -749,7 +761,7 @@ index 37292c309b465fce3b601a3ff8400e58c5a74308..8ba5fc8813ef1cb34f7df801f6d7b2ed private void mooshroomSettings() { mooshroomRidable = getBoolean("mobs.mooshroom.ridable", mooshroomRidable); mooshroomRidableInWater = getBoolean("mobs.mooshroom.ridable-in-water", mooshroomRidableInWater); -@@ -1144,6 +1171,7 @@ public class PurpurWorldConfig { +@@ -1166,6 +1195,7 @@ public class PurpurWorldConfig { set("mobs.mooshroom.attributes.max_health", oldValue); } mooshroomMaxHealth = getDouble("mobs.mooshroom.attributes.max_health", mooshroomMaxHealth); @@ -757,7 +769,7 @@ index 37292c309b465fce3b601a3ff8400e58c5a74308..8ba5fc8813ef1cb34f7df801f6d7b2ed } public boolean muleRidableInWater = false; -@@ -1153,6 +1181,7 @@ public class PurpurWorldConfig { +@@ -1175,6 +1205,7 @@ public class PurpurWorldConfig { public double muleJumpStrengthMax = 0.5D; public double muleMovementSpeedMin = 0.175D; public double muleMovementSpeedMax = 0.175D; @@ -765,7 +777,7 @@ index 37292c309b465fce3b601a3ff8400e58c5a74308..8ba5fc8813ef1cb34f7df801f6d7b2ed private void muleSettings() { muleRidableInWater = getBoolean("mobs.mule.ridable-in-water", muleRidableInWater); if (PurpurConfig.version < 10) { -@@ -1168,12 +1197,14 @@ public class PurpurWorldConfig { +@@ -1190,12 +1221,14 @@ public class PurpurWorldConfig { muleJumpStrengthMax = getDouble("mobs.mule.attributes.jump_strength.max", muleJumpStrengthMax); muleMovementSpeedMin = getDouble("mobs.mule.attributes.movement_speed.min", muleMovementSpeedMin); muleMovementSpeedMax = getDouble("mobs.mule.attributes.movement_speed.max", muleMovementSpeedMax); @@ -780,7 +792,7 @@ index 37292c309b465fce3b601a3ff8400e58c5a74308..8ba5fc8813ef1cb34f7df801f6d7b2ed private void ocelotSettings() { ocelotRidable = getBoolean("mobs.ocelot.ridable", ocelotRidable); ocelotRidableInWater = getBoolean("mobs.ocelot.ridable-in-water", ocelotRidableInWater); -@@ -1184,12 +1215,14 @@ public class PurpurWorldConfig { +@@ -1206,12 +1239,14 @@ public class PurpurWorldConfig { set("mobs.ocelot.attributes.max_health", oldValue); } ocelotMaxHealth = getDouble("mobs.ocelot.attributes.max_health", ocelotMaxHealth); @@ -795,7 +807,7 @@ index 37292c309b465fce3b601a3ff8400e58c5a74308..8ba5fc8813ef1cb34f7df801f6d7b2ed private void pandaSettings() { pandaRidable = getBoolean("mobs.panda.ridable", pandaRidable); pandaRidableInWater = getBoolean("mobs.panda.ridable-in-water", pandaRidableInWater); -@@ -1200,6 +1233,7 @@ public class PurpurWorldConfig { +@@ -1222,6 +1257,7 @@ public class PurpurWorldConfig { set("mobs.panda.attributes.max_health", oldValue); } pandaMaxHealth = getDouble("mobs.panda.attributes.max_health", pandaMaxHealth); @@ -803,7 +815,7 @@ index 37292c309b465fce3b601a3ff8400e58c5a74308..8ba5fc8813ef1cb34f7df801f6d7b2ed } public boolean parrotRidable = false; -@@ -1283,6 +1317,7 @@ public class PurpurWorldConfig { +@@ -1305,6 +1341,7 @@ public class PurpurWorldConfig { public boolean pigControllable = true; public double pigMaxHealth = 10.0D; public boolean pigGiveSaddleBack = false; @@ -811,7 +823,7 @@ index 37292c309b465fce3b601a3ff8400e58c5a74308..8ba5fc8813ef1cb34f7df801f6d7b2ed private void pigSettings() { pigRidable = getBoolean("mobs.pig.ridable", pigRidable); pigRidableInWater = getBoolean("mobs.pig.ridable-in-water", pigRidableInWater); -@@ -1294,6 +1329,7 @@ public class PurpurWorldConfig { +@@ -1316,6 +1353,7 @@ public class PurpurWorldConfig { } pigMaxHealth = getDouble("mobs.pig.attributes.max_health", pigMaxHealth); pigGiveSaddleBack = getBoolean("mobs.pig.give-saddle-back", pigGiveSaddleBack); @@ -819,7 +831,7 @@ index 37292c309b465fce3b601a3ff8400e58c5a74308..8ba5fc8813ef1cb34f7df801f6d7b2ed } public boolean piglinRidable = false; -@@ -1350,6 +1386,7 @@ public class PurpurWorldConfig { +@@ -1372,6 +1410,7 @@ public class PurpurWorldConfig { public double polarBearMaxHealth = 30.0D; public String polarBearBreedableItemString = ""; public Item polarBearBreedableItem = null; @@ -827,7 +839,7 @@ index 37292c309b465fce3b601a3ff8400e58c5a74308..8ba5fc8813ef1cb34f7df801f6d7b2ed private void polarBearSettings() { polarBearRidable = getBoolean("mobs.polar_bear.ridable", polarBearRidable); polarBearRidableInWater = getBoolean("mobs.polar_bear.ridable-in-water", polarBearRidableInWater); -@@ -1363,6 +1400,7 @@ public class PurpurWorldConfig { +@@ -1385,6 +1424,7 @@ public class PurpurWorldConfig { polarBearBreedableItemString = getString("mobs.polar_bear.breedable-item", polarBearBreedableItemString); Item item = BuiltInRegistries.ITEM.get(new ResourceLocation(polarBearBreedableItemString)); if (item != Items.AIR) polarBearBreedableItem = item; @@ -835,7 +847,7 @@ index 37292c309b465fce3b601a3ff8400e58c5a74308..8ba5fc8813ef1cb34f7df801f6d7b2ed } public boolean pufferfishRidable = false; -@@ -1385,6 +1423,7 @@ public class PurpurWorldConfig { +@@ -1407,6 +1447,7 @@ public class PurpurWorldConfig { public double rabbitMaxHealth = 3.0D; public double rabbitNaturalToast = 0.0D; public double rabbitNaturalKiller = 0.0D; @@ -843,7 +855,7 @@ index 37292c309b465fce3b601a3ff8400e58c5a74308..8ba5fc8813ef1cb34f7df801f6d7b2ed private void rabbitSettings() { rabbitRidable = getBoolean("mobs.rabbit.ridable", rabbitRidable); rabbitRidableInWater = getBoolean("mobs.rabbit.ridable-in-water", rabbitRidableInWater); -@@ -1397,6 +1436,7 @@ public class PurpurWorldConfig { +@@ -1419,6 +1460,7 @@ public class PurpurWorldConfig { rabbitMaxHealth = getDouble("mobs.rabbit.attributes.max_health", rabbitMaxHealth); rabbitNaturalToast = getDouble("mobs.rabbit.spawn-toast-chance", rabbitNaturalToast); rabbitNaturalKiller = getDouble("mobs.rabbit.spawn-killer-rabbit-chance", rabbitNaturalKiller); @@ -851,7 +863,7 @@ index 37292c309b465fce3b601a3ff8400e58c5a74308..8ba5fc8813ef1cb34f7df801f6d7b2ed } public boolean ravagerRidable = false; -@@ -1433,6 +1473,7 @@ public class PurpurWorldConfig { +@@ -1455,6 +1497,7 @@ public class PurpurWorldConfig { public boolean sheepRidableInWater = true; public boolean sheepControllable = true; public double sheepMaxHealth = 8.0D; @@ -859,7 +871,7 @@ index 37292c309b465fce3b601a3ff8400e58c5a74308..8ba5fc8813ef1cb34f7df801f6d7b2ed private void sheepSettings() { sheepRidable = getBoolean("mobs.sheep.ridable", sheepRidable); sheepRidableInWater = getBoolean("mobs.sheep.ridable-in-water", sheepRidableInWater); -@@ -1443,6 +1484,7 @@ public class PurpurWorldConfig { +@@ -1465,6 +1508,7 @@ public class PurpurWorldConfig { set("mobs.sheep.attributes.max_health", oldValue); } sheepMaxHealth = getDouble("mobs.sheep.attributes.max_health", sheepMaxHealth); @@ -867,7 +879,7 @@ index 37292c309b465fce3b601a3ff8400e58c5a74308..8ba5fc8813ef1cb34f7df801f6d7b2ed } public boolean shulkerRidable = false; -@@ -1566,11 +1608,13 @@ public class PurpurWorldConfig { +@@ -1588,11 +1632,13 @@ public class PurpurWorldConfig { public boolean snifferRidableInWater = true; public boolean snifferControllable = true; public double snifferMaxHealth = 14.0D; @@ -877,11 +889,11 @@ index 37292c309b465fce3b601a3ff8400e58c5a74308..8ba5fc8813ef1cb34f7df801f6d7b2ed snifferRidableInWater = getBoolean("mobs.sniffer.ridable-in-water", snifferRidableInWater); snifferControllable = getBoolean("mobs.sniffer.controllable", snifferControllable); snifferMaxHealth = getDouble("mobs.sniffer.attributes.max_health", snifferMaxHealth); -+ snifferBreedingTicks = getInt("mobs.sniffer.breeding-delay-ticks", chickenBreedingTicks); ++ snifferBreedingTicks = getInt("mobs.sniffer.breeding-delay-ticks", snifferBreedingTicks); } public boolean squidRidable = false; -@@ -1629,6 +1673,7 @@ public class PurpurWorldConfig { +@@ -1651,6 +1697,7 @@ public class PurpurWorldConfig { public boolean striderRidableInWater = false; public boolean striderControllable = true; public double striderMaxHealth = 20.0D; @@ -889,7 +901,7 @@ index 37292c309b465fce3b601a3ff8400e58c5a74308..8ba5fc8813ef1cb34f7df801f6d7b2ed private void striderSettings() { striderRidable = getBoolean("mobs.strider.ridable", striderRidable); striderRidableInWater = getBoolean("mobs.strider.ridable-in-water", striderRidableInWater); -@@ -1639,6 +1684,7 @@ public class PurpurWorldConfig { +@@ -1661,6 +1708,7 @@ public class PurpurWorldConfig { set("mobs.strider.attributes.max_health", oldValue); } striderMaxHealth = getDouble("mobs.strider.attributes.max_health", striderMaxHealth); @@ -897,7 +909,7 @@ index 37292c309b465fce3b601a3ff8400e58c5a74308..8ba5fc8813ef1cb34f7df801f6d7b2ed } public boolean tadpoleRidable = false; -@@ -1659,6 +1705,7 @@ public class PurpurWorldConfig { +@@ -1681,6 +1729,7 @@ public class PurpurWorldConfig { public double traderLlamaJumpStrengthMax = 0.5D; public double traderLlamaMovementSpeedMin = 0.175D; public double traderLlamaMovementSpeedMax = 0.175D; @@ -905,7 +917,7 @@ index 37292c309b465fce3b601a3ff8400e58c5a74308..8ba5fc8813ef1cb34f7df801f6d7b2ed private void traderLlamaSettings() { traderLlamaRidable = getBoolean("mobs.trader_llama.ridable", traderLlamaRidable); traderLlamaRidableInWater = getBoolean("mobs.trader_llama.ridable-in-water", traderLlamaRidableInWater); -@@ -1676,6 +1723,7 @@ public class PurpurWorldConfig { +@@ -1698,6 +1747,7 @@ public class PurpurWorldConfig { traderLlamaJumpStrengthMax = getDouble("mobs.trader_llama.attributes.jump_strength.max", traderLlamaJumpStrengthMax); traderLlamaMovementSpeedMin = getDouble("mobs.trader_llama.attributes.movement_speed.min", traderLlamaMovementSpeedMin); traderLlamaMovementSpeedMax = getDouble("mobs.trader_llama.attributes.movement_speed.max", traderLlamaMovementSpeedMax); @@ -913,7 +925,7 @@ index 37292c309b465fce3b601a3ff8400e58c5a74308..8ba5fc8813ef1cb34f7df801f6d7b2ed } public boolean tropicalFishRidable = false; -@@ -1696,6 +1744,7 @@ public class PurpurWorldConfig { +@@ -1718,6 +1768,7 @@ public class PurpurWorldConfig { public boolean turtleRidableInWater = true; public boolean turtleControllable = true; public double turtleMaxHealth = 30.0D; @@ -921,7 +933,7 @@ index 37292c309b465fce3b601a3ff8400e58c5a74308..8ba5fc8813ef1cb34f7df801f6d7b2ed private void turtleSettings() { turtleRidable = getBoolean("mobs.turtle.ridable", turtleRidable); turtleRidableInWater = getBoolean("mobs.turtle.ridable-in-water", turtleRidableInWater); -@@ -1706,6 +1755,7 @@ public class PurpurWorldConfig { +@@ -1728,6 +1779,7 @@ public class PurpurWorldConfig { set("mobs.turtle.attributes.max_health", oldValue); } turtleMaxHealth = getDouble("mobs.turtle.attributes.max_health", turtleMaxHealth); @@ -929,7 +941,7 @@ index 37292c309b465fce3b601a3ff8400e58c5a74308..8ba5fc8813ef1cb34f7df801f6d7b2ed } public boolean vexRidable = false; -@@ -1733,6 +1783,7 @@ public class PurpurWorldConfig { +@@ -1755,6 +1807,7 @@ public class PurpurWorldConfig { public boolean villagerFollowEmeraldBlock = false; public boolean villagerCanBeLeashed = false; public boolean villagerCanBreed = true; @@ -937,7 +949,7 @@ index 37292c309b465fce3b601a3ff8400e58c5a74308..8ba5fc8813ef1cb34f7df801f6d7b2ed private void villagerSettings() { villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); -@@ -1746,6 +1797,7 @@ public class PurpurWorldConfig { +@@ -1768,6 +1821,7 @@ public class PurpurWorldConfig { villagerFollowEmeraldBlock = getBoolean("mobs.villager.follow-emerald-blocks", villagerFollowEmeraldBlock); villagerCanBeLeashed = getBoolean("mobs.villager.can-be-leashed", villagerCanBeLeashed); villagerCanBreed = getBoolean("mobs.villager.can-breed", villagerCanBreed); @@ -945,7 +957,7 @@ index 37292c309b465fce3b601a3ff8400e58c5a74308..8ba5fc8813ef1cb34f7df801f6d7b2ed } public boolean vindicatorRidable = false; -@@ -1857,6 +1909,7 @@ public class PurpurWorldConfig { +@@ -1879,6 +1933,7 @@ public class PurpurWorldConfig { public boolean wolfRidableInWater = true; public boolean wolfControllable = true; public double wolfMaxHealth = 8.0D; @@ -953,7 +965,7 @@ index 37292c309b465fce3b601a3ff8400e58c5a74308..8ba5fc8813ef1cb34f7df801f6d7b2ed private void wolfSettings() { wolfRidable = getBoolean("mobs.wolf.ridable", wolfRidable); wolfRidableInWater = getBoolean("mobs.wolf.ridable-in-water", wolfRidableInWater); -@@ -1867,6 +1920,7 @@ public class PurpurWorldConfig { +@@ -1889,6 +1944,7 @@ public class PurpurWorldConfig { set("mobs.wolf.attributes.max_health", oldValue); } wolfMaxHealth = getDouble("mobs.wolf.attributes.max_health", wolfMaxHealth); diff --git a/patches/server/0102-Add-config-for-allowing-Endermen-to-despawn-even-whi.patch b/patches/server/0102-Add-config-for-allowing-Endermen-to-despawn-even-whi.patch index c83b3b0e5..9d94d0c70 100644 --- a/patches/server/0102-Add-config-for-allowing-Endermen-to-despawn-even-whi.patch +++ b/patches/server/0102-Add-config-for-allowing-Endermen-to-despawn-even-whi.patch @@ -21,10 +21,10 @@ index cb307a9419399e33a895376a584456f084691965..052a0c168268b7e788953063f54c3769 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 548ad445ed73c5009c93cadb0ee8e39acdbd737c..2afd56fd352f7a0bd2028a2b9b238f3d1d8fe14a 100644 +index 49d105df72c8f67fe48c39f03d840ccaa90b7c73..7c7b1cba2d50b1a4eda66ee4cde9137f01735e63 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -834,6 +834,7 @@ public class PurpurWorldConfig { +@@ -858,6 +858,7 @@ public class PurpurWorldConfig { public boolean endermanControllable = true; public double endermanMaxHealth = 40.0D; public boolean endermanAllowGriefing = true; @@ -32,7 +32,7 @@ index 548ad445ed73c5009c93cadb0ee8e39acdbd737c..2afd56fd352f7a0bd2028a2b9b238f3d private void endermanSettings() { endermanRidable = getBoolean("mobs.enderman.ridable", endermanRidable); endermanRidableInWater = getBoolean("mobs.enderman.ridable-in-water", endermanRidableInWater); -@@ -845,6 +846,7 @@ public class PurpurWorldConfig { +@@ -869,6 +870,7 @@ public class PurpurWorldConfig { } endermanMaxHealth = getDouble("mobs.enderman.attributes.max_health", endermanMaxHealth); endermanAllowGriefing = getBoolean("mobs.enderman.allow-griefing", endermanAllowGriefing); diff --git a/patches/server/0106-Snow-Golem-rate-of-fire-config.patch b/patches/server/0106-Snow-Golem-rate-of-fire-config.patch index 2c258fc94..a53dcd9c1 100644 --- a/patches/server/0106-Snow-Golem-rate-of-fire-config.patch +++ b/patches/server/0106-Snow-Golem-rate-of-fire-config.patch @@ -23,10 +23,10 @@ index 0060414b1d5afde56372ce121e9d37a1668cd03b..ee4d4a4fe314ee9bce69c96dd65d84ed this.goalSelector.addGoal(3, new LookAtPlayerGoal(this, Player.class, 6.0F)); this.goalSelector.addGoal(4, new RandomLookAroundGoal(this)); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 8a0a018ff9119afe4ada2f30f98b260a523f2e70..51d9cdfce0cdcf2daa882fdcc75123c925396d10 100644 +index 62a56a447e1a5c97e0f1bf6d0901d4ad1e4e6ef7..a51830db95db7256ddefa9da89f39471f2d169ec 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1607,6 +1607,10 @@ public class PurpurWorldConfig { +@@ -1631,6 +1631,10 @@ public class PurpurWorldConfig { public boolean snowGolemLeaveTrailWhenRidden = false; public double snowGolemMaxHealth = 4.0D; public boolean snowGolemPutPumpkinBack = false; @@ -37,7 +37,7 @@ index 8a0a018ff9119afe4ada2f30f98b260a523f2e70..51d9cdfce0cdcf2daa882fdcc75123c9 private void snowGolemSettings() { snowGolemRidable = getBoolean("mobs.snow_golem.ridable", snowGolemRidable); snowGolemRidableInWater = getBoolean("mobs.snow_golem.ridable-in-water", snowGolemRidableInWater); -@@ -1619,6 +1623,10 @@ public class PurpurWorldConfig { +@@ -1643,6 +1647,10 @@ public class PurpurWorldConfig { } snowGolemMaxHealth = getDouble("mobs.snow_golem.attributes.max_health", snowGolemMaxHealth); snowGolemPutPumpkinBack = getBoolean("mobs.snow_golem.pumpkin-can-be-added-back", snowGolemPutPumpkinBack); diff --git a/patches/server/0108-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch b/patches/server/0108-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch index 527b784f4..e0bd732aa 100644 --- a/patches/server/0108-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch +++ b/patches/server/0108-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch @@ -174,10 +174,10 @@ index 1316f4475802e17039800cc6128e1b065328beb7..d02e2d1aceac651e06a3a3698b7ac64d "farmer", PoiTypes.FARMER, diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 51d9cdfce0cdcf2daa882fdcc75123c925396d10..f20f4622871b840ba18a78bb0806028ba706f74e 100644 +index a51830db95db7256ddefa9da89f39471f2d169ec..13cb926fa98b187a0a36beb164179f0085fd8369 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1809,6 +1809,8 @@ public class PurpurWorldConfig { +@@ -1833,6 +1833,8 @@ public class PurpurWorldConfig { public boolean villagerCanBeLeashed = false; public boolean villagerCanBreed = true; public int villagerBreedingTicks = 6000; @@ -186,7 +186,7 @@ index 51d9cdfce0cdcf2daa882fdcc75123c925396d10..f20f4622871b840ba18a78bb0806028b private void villagerSettings() { villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); -@@ -1823,6 +1825,8 @@ public class PurpurWorldConfig { +@@ -1847,6 +1849,8 @@ public class PurpurWorldConfig { villagerCanBeLeashed = getBoolean("mobs.villager.can-be-leashed", villagerCanBeLeashed); villagerCanBreed = getBoolean("mobs.villager.can-breed", villagerCanBreed); villagerBreedingTicks = getInt("mobs.villager.breeding-delay-ticks", villagerBreedingTicks); diff --git a/patches/server/0109-Toggle-for-Zombified-Piglin-death-always-counting-as.patch b/patches/server/0109-Toggle-for-Zombified-Piglin-death-always-counting-as.patch index 2f898ce18..b03480d03 100644 --- a/patches/server/0109-Toggle-for-Zombified-Piglin-death-always-counting-as.patch +++ b/patches/server/0109-Toggle-for-Zombified-Piglin-death-always-counting-as.patch @@ -35,10 +35,10 @@ index 75c34d9fcc4b33d30b18f1ce4c8749a068744abc..6be751e2d434982a35bbbece4f4fc463 } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index f20f4622871b840ba18a78bb0806028ba706f74e..d621f330f954a12635d8c87c5ff66dae7448a856 100644 +index 13cb926fa98b187a0a36beb164179f0085fd8369..43e02a35c742aced64c0b9700da9a71c15532478 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2055,6 +2055,7 @@ public class PurpurWorldConfig { +@@ -2079,6 +2079,7 @@ public class PurpurWorldConfig { public boolean zombifiedPiglinJockeyOnlyBaby = true; public double zombifiedPiglinJockeyChance = 0.05D; public boolean zombifiedPiglinJockeyTryExistingChickens = true; @@ -46,7 +46,7 @@ index f20f4622871b840ba18a78bb0806028ba706f74e..d621f330f954a12635d8c87c5ff66dae private void zombifiedPiglinSettings() { zombifiedPiglinRidable = getBoolean("mobs.zombified_piglin.ridable", zombifiedPiglinRidable); zombifiedPiglinRidableInWater = getBoolean("mobs.zombified_piglin.ridable-in-water", zombifiedPiglinRidableInWater); -@@ -2069,5 +2070,6 @@ public class PurpurWorldConfig { +@@ -2093,5 +2094,6 @@ public class PurpurWorldConfig { zombifiedPiglinJockeyOnlyBaby = getBoolean("mobs.zombified_piglin.jockey.only-babies", zombifiedPiglinJockeyOnlyBaby); zombifiedPiglinJockeyChance = getDouble("mobs.zombified_piglin.jockey.chance", zombifiedPiglinJockeyChance); zombifiedPiglinJockeyTryExistingChickens = getBoolean("mobs.zombified_piglin.jockey.try-existing-chickens", zombifiedPiglinJockeyTryExistingChickens); diff --git a/patches/server/0110-Configurable-chance-for-wolves-to-spawn-rabid.patch b/patches/server/0110-Configurable-chance-for-wolves-to-spawn-rabid.patch index 7c94b2a1d..a69fc887b 100644 --- a/patches/server/0110-Configurable-chance-for-wolves-to-spawn-rabid.patch +++ b/patches/server/0110-Configurable-chance-for-wolves-to-spawn-rabid.patch @@ -182,10 +182,10 @@ index 86574da257731de7646a712ed73384955fe35aa3..e223234dd64b0e41441c3b9f649f0b64 + // Purpur end } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 5dfc4f4144feab63ca2244e2e4a20af9fbd8ef02..89cc7b46a2dd15afd7db711f2e01fa8c7035a5bd 100644 +index 43e02a35c742aced64c0b9700da9a71c15532478..1a82ac75760dbddca5b37cb97b27cee18c831b83 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1938,6 +1938,8 @@ public class PurpurWorldConfig { +@@ -1962,6 +1962,8 @@ public class PurpurWorldConfig { public boolean wolfRidableInWater = true; public boolean wolfControllable = true; public double wolfMaxHealth = 8.0D; @@ -194,7 +194,7 @@ index 5dfc4f4144feab63ca2244e2e4a20af9fbd8ef02..89cc7b46a2dd15afd7db711f2e01fa8c public int wolfBreedingTicks = 6000; private void wolfSettings() { wolfRidable = getBoolean("mobs.wolf.ridable", wolfRidable); -@@ -1949,6 +1951,8 @@ public class PurpurWorldConfig { +@@ -1973,6 +1975,8 @@ public class PurpurWorldConfig { set("mobs.wolf.attributes.max_health", oldValue); } wolfMaxHealth = getDouble("mobs.wolf.attributes.max_health", wolfMaxHealth); diff --git a/patches/server/0111-Configurable-default-collar-color.patch b/patches/server/0111-Configurable-default-collar-color.patch index 99c3c7a80..5b79ea71c 100644 --- a/patches/server/0111-Configurable-default-collar-color.patch +++ b/patches/server/0111-Configurable-default-collar-color.patch @@ -43,10 +43,10 @@ index 073014d44a3ccfca9bb5a387843e22917de13bb4..3b7392852fd8b3c88969b46eeee3aefd protected void registerGoals() { this.goalSelector.addGoal(1, new FloatGoal(this)); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 89cc7b46a2dd15afd7db711f2e01fa8c7035a5bd..ce273c9ae2c6c9a37f288200b32403a9dc7baa49 100644 +index 1a82ac75760dbddca5b37cb97b27cee18c831b83..f31198ce92832670cff37a182cb25ac978fa7347 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -622,6 +622,7 @@ public class PurpurWorldConfig { +@@ -646,6 +646,7 @@ public class PurpurWorldConfig { public int catSpawnSwampHutScanRange = 16; public int catSpawnVillageScanRange = 48; public int catBreedingTicks = 6000; @@ -54,7 +54,7 @@ index 89cc7b46a2dd15afd7db711f2e01fa8c7035a5bd..ce273c9ae2c6c9a37f288200b32403a9 private void catSettings() { catRidable = getBoolean("mobs.cat.ridable", catRidable); catRidableInWater = getBoolean("mobs.cat.ridable-in-water", catRidableInWater); -@@ -636,6 +637,11 @@ public class PurpurWorldConfig { +@@ -660,6 +661,11 @@ public class PurpurWorldConfig { catSpawnSwampHutScanRange = getInt("mobs.cat.scan-range-for-other-cats.swamp-hut", catSpawnSwampHutScanRange); catSpawnVillageScanRange = getInt("mobs.cat.scan-range-for-other-cats.village", catSpawnVillageScanRange); catBreedingTicks = getInt("mobs.cat.breeding-delay-ticks", catBreedingTicks); @@ -66,7 +66,7 @@ index 89cc7b46a2dd15afd7db711f2e01fa8c7035a5bd..ce273c9ae2c6c9a37f288200b32403a9 } public boolean caveSpiderRidable = false; -@@ -1938,6 +1944,7 @@ public class PurpurWorldConfig { +@@ -1962,6 +1968,7 @@ public class PurpurWorldConfig { public boolean wolfRidableInWater = true; public boolean wolfControllable = true; public double wolfMaxHealth = 8.0D; @@ -74,7 +74,7 @@ index 89cc7b46a2dd15afd7db711f2e01fa8c7035a5bd..ce273c9ae2c6c9a37f288200b32403a9 public boolean wolfMilkCuresRabies = true; public double wolfNaturalRabid = 0.0D; public int wolfBreedingTicks = 6000; -@@ -1951,6 +1958,11 @@ public class PurpurWorldConfig { +@@ -1975,6 +1982,11 @@ public class PurpurWorldConfig { set("mobs.wolf.attributes.max_health", oldValue); } wolfMaxHealth = getDouble("mobs.wolf.attributes.max_health", wolfMaxHealth); diff --git a/patches/server/0112-Phantom-flames-on-swoop.patch b/patches/server/0112-Phantom-flames-on-swoop.patch index 2c374a8b6..b25cce0a6 100644 --- a/patches/server/0112-Phantom-flames-on-swoop.patch +++ b/patches/server/0112-Phantom-flames-on-swoop.patch @@ -17,10 +17,10 @@ index 1ddccb9fa438682c2ebad7c071c7a4f8dd00b463..c15d75472d4d92baeb87a147832e17e3 @Override diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index d73268340e5201181f42084fbe47883a22d062cc..4fbd94117f356388a40d1a7f7faf75b08e6b7dbe 100644 +index f31198ce92832670cff37a182cb25ac978fa7347..5a08c6a200dfa721e230aeeb0439301a5ae301d0 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1300,6 +1300,7 @@ public class PurpurWorldConfig { +@@ -1324,6 +1324,7 @@ public class PurpurWorldConfig { public int phantomBurnInLight = 0; public boolean phantomIgnorePlayersWithTorch = false; public boolean phantomBurnInDaylight = true; @@ -28,7 +28,7 @@ index d73268340e5201181f42084fbe47883a22d062cc..4fbd94117f356388a40d1a7f7faf75b0 private void phantomSettings() { phantomRidable = getBoolean("mobs.phantom.ridable", phantomRidable); phantomRidableInWater = getBoolean("mobs.phantom.ridable-in-water", phantomRidableInWater); -@@ -1333,6 +1334,7 @@ public class PurpurWorldConfig { +@@ -1357,6 +1358,7 @@ public class PurpurWorldConfig { phantomBurnInLight = getInt("mobs.phantom.burn-in-light", phantomBurnInLight); phantomBurnInDaylight = getBoolean("mobs.phantom.burn-in-daylight", phantomBurnInDaylight); phantomIgnorePlayersWithTorch = getBoolean("mobs.phantom.ignore-players-with-torch", phantomIgnorePlayersWithTorch); diff --git a/patches/server/0115-Striders-give-saddle-back.patch b/patches/server/0115-Striders-give-saddle-back.patch index 2455ebac4..39c224be1 100644 --- a/patches/server/0115-Striders-give-saddle-back.patch +++ b/patches/server/0115-Striders-give-saddle-back.patch @@ -29,10 +29,10 @@ index 5f1166ccd64509a70323e2713f3ab58674d83105..741eedcd9e0e29b57d2b3caf5aef1aef if (!this.level().isClientSide) { player.startRiding(this); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 50bf456b7e87a77e50b938488abde4cf577d1228..3f83dee1fc6a847d8f56cc230a6de1223d4f3964 100644 +index bcb0780b0f1aa5063a1481031e5fcf8cf3fa4884..91630e23b9568418e74a59958bb8f1728095e6fd 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1712,6 +1712,7 @@ public class PurpurWorldConfig { +@@ -1736,6 +1736,7 @@ public class PurpurWorldConfig { public boolean striderControllable = true; public double striderMaxHealth = 20.0D; public int striderBreedingTicks = 6000; @@ -40,7 +40,7 @@ index 50bf456b7e87a77e50b938488abde4cf577d1228..3f83dee1fc6a847d8f56cc230a6de122 private void striderSettings() { striderRidable = getBoolean("mobs.strider.ridable", striderRidable); striderRidableInWater = getBoolean("mobs.strider.ridable-in-water", striderRidableInWater); -@@ -1723,6 +1724,7 @@ public class PurpurWorldConfig { +@@ -1747,6 +1748,7 @@ public class PurpurWorldConfig { } striderMaxHealth = getDouble("mobs.strider.attributes.max_health", striderMaxHealth); striderBreedingTicks = getInt("mobs.strider.breeding-delay-ticks", striderBreedingTicks); diff --git a/patches/server/0118-Add-mobGriefing-bypass-to-everything-affected.patch b/patches/server/0118-Add-mobGriefing-bypass-to-everything-affected.patch index 23413c21d..e3f73d825 100644 --- a/patches/server/0118-Add-mobGriefing-bypass-to-everything-affected.patch +++ b/patches/server/0118-Add-mobGriefing-bypass-to-everything-affected.patch @@ -375,7 +375,7 @@ index c7377d04ceac3ea624117439783a443c6d6f6d08..0c732cfbd9ce50198a3f85ae8ef2263d } } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 076d26136c46fdf1eba18fde04c0fe8e28efa2bd..aca1e2c31ae757041bbdc12931d1ff0ba6c33b87 100644 +index b6d625af2acb61f867739624b975d369efe547e0..4ee6c06c6e04bb9dd6150fa4a00b5b1787f34072 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -115,8 +115,11 @@ public class PurpurWorldConfig { @@ -439,7 +439,7 @@ index 076d26136c46fdf1eba18fde04c0fe8e28efa2bd..aca1e2c31ae757041bbdc12931d1ff0b } public int waterInfiniteRequiredSources = 2; -@@ -738,6 +753,7 @@ public class PurpurWorldConfig { +@@ -762,6 +777,7 @@ public class PurpurWorldConfig { public double creeperMaxHealth = 20.0D; public double creeperChargedChance = 0.0D; public boolean creeperAllowGriefing = true; @@ -447,7 +447,7 @@ index 076d26136c46fdf1eba18fde04c0fe8e28efa2bd..aca1e2c31ae757041bbdc12931d1ff0b private void creeperSettings() { creeperRidable = getBoolean("mobs.creeper.ridable", creeperRidable); creeperRidableInWater = getBoolean("mobs.creeper.ridable-in-water", creeperRidableInWater); -@@ -750,6 +766,7 @@ public class PurpurWorldConfig { +@@ -774,6 +790,7 @@ public class PurpurWorldConfig { creeperMaxHealth = getDouble("mobs.creeper.attributes.max_health", creeperMaxHealth); creeperChargedChance = getDouble("mobs.creeper.naturally-charged-chance", creeperChargedChance); creeperAllowGriefing = getBoolean("mobs.creeper.allow-griefing", creeperAllowGriefing); @@ -455,7 +455,7 @@ index 076d26136c46fdf1eba18fde04c0fe8e28efa2bd..aca1e2c31ae757041bbdc12931d1ff0b } public boolean dolphinRidable = false; -@@ -844,6 +861,7 @@ public class PurpurWorldConfig { +@@ -868,6 +885,7 @@ public class PurpurWorldConfig { public double enderDragonMaxY = 320D; public double enderDragonMaxHealth = 200.0D; public boolean enderDragonAlwaysDropsFullExp = false; @@ -463,7 +463,7 @@ index 076d26136c46fdf1eba18fde04c0fe8e28efa2bd..aca1e2c31ae757041bbdc12931d1ff0b private void enderDragonSettings() { enderDragonRidable = getBoolean("mobs.ender_dragon.ridable", enderDragonRidable); enderDragonRidableInWater = getBoolean("mobs.ender_dragon.ridable-in-water", enderDragonRidableInWater); -@@ -860,6 +878,7 @@ public class PurpurWorldConfig { +@@ -884,6 +902,7 @@ public class PurpurWorldConfig { } enderDragonMaxHealth = getDouble("mobs.ender_dragon.attributes.max_health", enderDragonMaxHealth); enderDragonAlwaysDropsFullExp = getBoolean("mobs.ender_dragon.always-drop-full-exp", enderDragonAlwaysDropsFullExp); @@ -471,7 +471,7 @@ index 076d26136c46fdf1eba18fde04c0fe8e28efa2bd..aca1e2c31ae757041bbdc12931d1ff0b } public boolean endermanRidable = false; -@@ -868,6 +887,7 @@ public class PurpurWorldConfig { +@@ -892,6 +911,7 @@ public class PurpurWorldConfig { public double endermanMaxHealth = 40.0D; public boolean endermanAllowGriefing = true; public boolean endermanDespawnEvenWithBlock = false; @@ -479,7 +479,7 @@ index 076d26136c46fdf1eba18fde04c0fe8e28efa2bd..aca1e2c31ae757041bbdc12931d1ff0b private void endermanSettings() { endermanRidable = getBoolean("mobs.enderman.ridable", endermanRidable); endermanRidableInWater = getBoolean("mobs.enderman.ridable-in-water", endermanRidableInWater); -@@ -880,6 +900,7 @@ public class PurpurWorldConfig { +@@ -904,6 +924,7 @@ public class PurpurWorldConfig { endermanMaxHealth = getDouble("mobs.enderman.attributes.max_health", endermanMaxHealth); endermanAllowGriefing = getBoolean("mobs.enderman.allow-griefing", endermanAllowGriefing); endermanDespawnEvenWithBlock = getBoolean("mobs.enderman.can-despawn-with-held-block", endermanDespawnEvenWithBlock); @@ -487,7 +487,7 @@ index 076d26136c46fdf1eba18fde04c0fe8e28efa2bd..aca1e2c31ae757041bbdc12931d1ff0b } public boolean endermiteRidable = false; -@@ -902,6 +923,7 @@ public class PurpurWorldConfig { +@@ -926,6 +947,7 @@ public class PurpurWorldConfig { public boolean evokerRidableInWater = true; public boolean evokerControllable = true; public double evokerMaxHealth = 24.0D; @@ -495,7 +495,7 @@ index 076d26136c46fdf1eba18fde04c0fe8e28efa2bd..aca1e2c31ae757041bbdc12931d1ff0b private void evokerSettings() { evokerRidable = getBoolean("mobs.evoker.ridable", evokerRidable); evokerRidableInWater = getBoolean("mobs.evoker.ridable-in-water", evokerRidableInWater); -@@ -912,6 +934,7 @@ public class PurpurWorldConfig { +@@ -936,6 +958,7 @@ public class PurpurWorldConfig { set("mobs.evoker.attributes.max_health", oldValue); } evokerMaxHealth = getDouble("mobs.evoker.attributes.max_health", evokerMaxHealth); @@ -503,7 +503,7 @@ index 076d26136c46fdf1eba18fde04c0fe8e28efa2bd..aca1e2c31ae757041bbdc12931d1ff0b } public boolean foxRidable = false; -@@ -920,6 +943,7 @@ public class PurpurWorldConfig { +@@ -944,6 +967,7 @@ public class PurpurWorldConfig { public double foxMaxHealth = 10.0D; public boolean foxTypeChangesWithTulips = false; public int foxBreedingTicks = 6000; @@ -511,7 +511,7 @@ index 076d26136c46fdf1eba18fde04c0fe8e28efa2bd..aca1e2c31ae757041bbdc12931d1ff0b private void foxSettings() { foxRidable = getBoolean("mobs.fox.ridable", foxRidable); foxRidableInWater = getBoolean("mobs.fox.ridable-in-water", foxRidableInWater); -@@ -932,6 +956,7 @@ public class PurpurWorldConfig { +@@ -956,6 +980,7 @@ public class PurpurWorldConfig { foxMaxHealth = getDouble("mobs.fox.attributes.max_health", foxMaxHealth); foxTypeChangesWithTulips = getBoolean("mobs.fox.tulips-change-type", foxTypeChangesWithTulips); foxBreedingTicks = getInt("mobs.fox.breeding-delay-ticks", foxBreedingTicks); @@ -519,7 +519,7 @@ index 076d26136c46fdf1eba18fde04c0fe8e28efa2bd..aca1e2c31ae757041bbdc12931d1ff0b } public boolean frogRidable = false; -@@ -1379,6 +1404,7 @@ public class PurpurWorldConfig { +@@ -1403,6 +1428,7 @@ public class PurpurWorldConfig { public boolean piglinRidableInWater = true; public boolean piglinControllable = true; public double piglinMaxHealth = 16.0D; @@ -527,7 +527,7 @@ index 076d26136c46fdf1eba18fde04c0fe8e28efa2bd..aca1e2c31ae757041bbdc12931d1ff0b private void piglinSettings() { piglinRidable = getBoolean("mobs.piglin.ridable", piglinRidable); piglinRidableInWater = getBoolean("mobs.piglin.ridable-in-water", piglinRidableInWater); -@@ -1389,6 +1415,7 @@ public class PurpurWorldConfig { +@@ -1413,6 +1439,7 @@ public class PurpurWorldConfig { set("mobs.piglin.attributes.max_health", oldValue); } piglinMaxHealth = getDouble("mobs.piglin.attributes.max_health", piglinMaxHealth); @@ -535,7 +535,7 @@ index 076d26136c46fdf1eba18fde04c0fe8e28efa2bd..aca1e2c31ae757041bbdc12931d1ff0b } public boolean piglinBruteRidable = false; -@@ -1411,6 +1438,7 @@ public class PurpurWorldConfig { +@@ -1435,6 +1462,7 @@ public class PurpurWorldConfig { public boolean pillagerRidableInWater = true; public boolean pillagerControllable = true; public double pillagerMaxHealth = 24.0D; @@ -543,7 +543,7 @@ index 076d26136c46fdf1eba18fde04c0fe8e28efa2bd..aca1e2c31ae757041bbdc12931d1ff0b private void pillagerSettings() { pillagerRidable = getBoolean("mobs.pillager.ridable", pillagerRidable); pillagerRidableInWater = getBoolean("mobs.pillager.ridable-in-water", pillagerRidableInWater); -@@ -1421,6 +1449,7 @@ public class PurpurWorldConfig { +@@ -1445,6 +1473,7 @@ public class PurpurWorldConfig { set("mobs.pillager.attributes.max_health", oldValue); } pillagerMaxHealth = getDouble("mobs.pillager.attributes.max_health", pillagerMaxHealth); @@ -551,7 +551,7 @@ index 076d26136c46fdf1eba18fde04c0fe8e28efa2bd..aca1e2c31ae757041bbdc12931d1ff0b } public boolean polarBearRidable = false; -@@ -1467,6 +1496,7 @@ public class PurpurWorldConfig { +@@ -1491,6 +1520,7 @@ public class PurpurWorldConfig { public double rabbitNaturalToast = 0.0D; public double rabbitNaturalKiller = 0.0D; public int rabbitBreedingTicks = 6000; @@ -559,7 +559,7 @@ index 076d26136c46fdf1eba18fde04c0fe8e28efa2bd..aca1e2c31ae757041bbdc12931d1ff0b private void rabbitSettings() { rabbitRidable = getBoolean("mobs.rabbit.ridable", rabbitRidable); rabbitRidableInWater = getBoolean("mobs.rabbit.ridable-in-water", rabbitRidableInWater); -@@ -1480,12 +1510,14 @@ public class PurpurWorldConfig { +@@ -1504,12 +1534,14 @@ public class PurpurWorldConfig { rabbitNaturalToast = getDouble("mobs.rabbit.spawn-toast-chance", rabbitNaturalToast); rabbitNaturalKiller = getDouble("mobs.rabbit.spawn-killer-rabbit-chance", rabbitNaturalKiller); rabbitBreedingTicks = getInt("mobs.rabbit.breeding-delay-ticks", rabbitBreedingTicks); @@ -574,7 +574,7 @@ index 076d26136c46fdf1eba18fde04c0fe8e28efa2bd..aca1e2c31ae757041bbdc12931d1ff0b private void ravagerSettings() { ravagerRidable = getBoolean("mobs.ravager.ridable", ravagerRidable); ravagerRidableInWater = getBoolean("mobs.ravager.ridable-in-water", ravagerRidableInWater); -@@ -1496,6 +1528,7 @@ public class PurpurWorldConfig { +@@ -1520,6 +1552,7 @@ public class PurpurWorldConfig { set("mobs.ravager.attributes.max_health", oldValue); } ravagerMaxHealth = getDouble("mobs.ravager.attributes.max_health", ravagerMaxHealth); @@ -582,7 +582,7 @@ index 076d26136c46fdf1eba18fde04c0fe8e28efa2bd..aca1e2c31ae757041bbdc12931d1ff0b } public boolean salmonRidable = false; -@@ -1517,6 +1550,7 @@ public class PurpurWorldConfig { +@@ -1541,6 +1574,7 @@ public class PurpurWorldConfig { public boolean sheepControllable = true; public double sheepMaxHealth = 8.0D; public int sheepBreedingTicks = 6000; @@ -590,7 +590,7 @@ index 076d26136c46fdf1eba18fde04c0fe8e28efa2bd..aca1e2c31ae757041bbdc12931d1ff0b private void sheepSettings() { sheepRidable = getBoolean("mobs.sheep.ridable", sheepRidable); sheepRidableInWater = getBoolean("mobs.sheep.ridable-in-water", sheepRidableInWater); -@@ -1528,6 +1562,7 @@ public class PurpurWorldConfig { +@@ -1552,6 +1586,7 @@ public class PurpurWorldConfig { } sheepMaxHealth = getDouble("mobs.sheep.attributes.max_health", sheepMaxHealth); sheepBreedingTicks = getInt("mobs.sheep.breeding-delay-ticks", sheepBreedingTicks); @@ -598,7 +598,7 @@ index 076d26136c46fdf1eba18fde04c0fe8e28efa2bd..aca1e2c31ae757041bbdc12931d1ff0b } public boolean shulkerRidable = false; -@@ -1550,6 +1585,7 @@ public class PurpurWorldConfig { +@@ -1574,6 +1609,7 @@ public class PurpurWorldConfig { public boolean silverfishRidableInWater = true; public boolean silverfishControllable = true; public double silverfishMaxHealth = 8.0D; @@ -606,7 +606,7 @@ index 076d26136c46fdf1eba18fde04c0fe8e28efa2bd..aca1e2c31ae757041bbdc12931d1ff0b private void silverfishSettings() { silverfishRidable = getBoolean("mobs.silverfish.ridable", silverfishRidable); silverfishRidableInWater = getBoolean("mobs.silverfish.ridable-in-water", silverfishRidableInWater); -@@ -1560,6 +1596,7 @@ public class PurpurWorldConfig { +@@ -1584,6 +1620,7 @@ public class PurpurWorldConfig { set("mobs.silverfish.attributes.max_health", oldValue); } silverfishMaxHealth = getDouble("mobs.silverfish.attributes.max_health", silverfishMaxHealth); @@ -614,7 +614,7 @@ index 076d26136c46fdf1eba18fde04c0fe8e28efa2bd..aca1e2c31ae757041bbdc12931d1ff0b } public boolean skeletonRidable = false; -@@ -1637,6 +1674,7 @@ public class PurpurWorldConfig { +@@ -1661,6 +1698,7 @@ public class PurpurWorldConfig { public int snowGolemSnowBallMax = 20; public float snowGolemSnowBallModifier = 10.0F; public double snowGolemAttackDistance = 1.25D; @@ -622,7 +622,7 @@ index 076d26136c46fdf1eba18fde04c0fe8e28efa2bd..aca1e2c31ae757041bbdc12931d1ff0b private void snowGolemSettings() { snowGolemRidable = getBoolean("mobs.snow_golem.ridable", snowGolemRidable); snowGolemRidableInWater = getBoolean("mobs.snow_golem.ridable-in-water", snowGolemRidableInWater); -@@ -1653,6 +1691,7 @@ public class PurpurWorldConfig { +@@ -1677,6 +1715,7 @@ public class PurpurWorldConfig { snowGolemSnowBallMax = getInt("mobs.snow_golem.max-shoot-interval-ticks", snowGolemSnowBallMax); snowGolemSnowBallModifier = (float) getDouble("mobs.snow_golem.snow-ball-modifier", snowGolemSnowBallModifier); snowGolemAttackDistance = getDouble("mobs.snow_golem.attack-distance", snowGolemAttackDistance); @@ -630,7 +630,7 @@ index 076d26136c46fdf1eba18fde04c0fe8e28efa2bd..aca1e2c31ae757041bbdc12931d1ff0b } public boolean snifferRidable = false; -@@ -1839,6 +1878,7 @@ public class PurpurWorldConfig { +@@ -1863,6 +1902,7 @@ public class PurpurWorldConfig { public int villagerBreedingTicks = 6000; public boolean villagerClericsFarmWarts = false; public boolean villagerClericFarmersThrowWarts = true; @@ -638,7 +638,7 @@ index 076d26136c46fdf1eba18fde04c0fe8e28efa2bd..aca1e2c31ae757041bbdc12931d1ff0b private void villagerSettings() { villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); -@@ -1855,6 +1895,7 @@ public class PurpurWorldConfig { +@@ -1879,6 +1919,7 @@ public class PurpurWorldConfig { villagerBreedingTicks = getInt("mobs.villager.breeding-delay-ticks", villagerBreedingTicks); villagerClericsFarmWarts = getBoolean("mobs.villager.clerics-farm-warts", villagerClericsFarmWarts); villagerClericFarmersThrowWarts = getBoolean("mobs.villager.cleric-wart-farmers-throw-warts-at-villagers", villagerClericFarmersThrowWarts); @@ -646,7 +646,7 @@ index 076d26136c46fdf1eba18fde04c0fe8e28efa2bd..aca1e2c31ae757041bbdc12931d1ff0b } public boolean vindicatorRidable = false; -@@ -1927,6 +1968,7 @@ public class PurpurWorldConfig { +@@ -1951,6 +1992,7 @@ public class PurpurWorldConfig { public double witherMaxHealth = 300.0D; public float witherHealthRegenAmount = 1.0f; public int witherHealthRegenDelay = 20; @@ -654,7 +654,7 @@ index 076d26136c46fdf1eba18fde04c0fe8e28efa2bd..aca1e2c31ae757041bbdc12931d1ff0b private void witherSettings() { witherRidable = getBoolean("mobs.wither.ridable", witherRidable); witherRidableInWater = getBoolean("mobs.wither.ridable-in-water", witherRidableInWater); -@@ -1944,6 +1986,7 @@ public class PurpurWorldConfig { +@@ -1968,6 +2010,7 @@ public class PurpurWorldConfig { witherMaxHealth = getDouble("mobs.wither.attributes.max_health", witherMaxHealth); witherHealthRegenAmount = (float) getDouble("mobs.wither.health-regen-amount", witherHealthRegenAmount); witherHealthRegenDelay = getInt("mobs.wither.health-regen-delay", witherHealthRegenDelay); @@ -662,7 +662,7 @@ index 076d26136c46fdf1eba18fde04c0fe8e28efa2bd..aca1e2c31ae757041bbdc12931d1ff0b } public boolean witherSkeletonRidable = false; -@@ -2015,6 +2058,7 @@ public class PurpurWorldConfig { +@@ -2039,6 +2082,7 @@ public class PurpurWorldConfig { public double zombieJockeyChance = 0.05D; public boolean zombieJockeyTryExistingChickens = true; public boolean zombieAggressiveTowardsVillagerWhenLagging = true; @@ -670,7 +670,7 @@ index 076d26136c46fdf1eba18fde04c0fe8e28efa2bd..aca1e2c31ae757041bbdc12931d1ff0b private void zombieSettings() { zombieRidable = getBoolean("mobs.zombie.ridable", zombieRidable); zombieRidableInWater = getBoolean("mobs.zombie.ridable-in-water", zombieRidableInWater); -@@ -2030,6 +2074,7 @@ public class PurpurWorldConfig { +@@ -2054,6 +2098,7 @@ public class PurpurWorldConfig { zombieJockeyChance = getDouble("mobs.zombie.jockey.chance", zombieJockeyChance); zombieJockeyTryExistingChickens = getBoolean("mobs.zombie.jockey.try-existing-chickens", zombieJockeyTryExistingChickens); zombieAggressiveTowardsVillagerWhenLagging = getBoolean("mobs.zombie.aggressive-towards-villager-when-lagging", zombieAggressiveTowardsVillagerWhenLagging); diff --git a/patches/server/0124-Toggle-for-water-sensitive-mob-damage.patch b/patches/server/0124-Toggle-for-water-sensitive-mob-damage.patch index 5c335d141..387ec54b2 100644 --- a/patches/server/0124-Toggle-for-water-sensitive-mob-damage.patch +++ b/patches/server/0124-Toggle-for-water-sensitive-mob-damage.patch @@ -1199,10 +1199,10 @@ index 9d5eaaf1869a3ecb61947ab0c09af558fa1cd283..c192f4cc5fd9cb0cf40083c4297f649a 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 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f518d42e914 100644 +index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be506bfe6626 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -569,11 +569,13 @@ public class PurpurWorldConfig { +@@ -582,11 +582,13 @@ public class PurpurWorldConfig { public boolean axolotlControllable = true; public double axolotlMaxHealth = 14.0D; public int axolotlBreedingTicks = 6000; @@ -1216,7 +1216,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 } public boolean batRidable = false; -@@ -588,6 +590,7 @@ public class PurpurWorldConfig { +@@ -601,6 +603,7 @@ public class PurpurWorldConfig { public double batArmor = 0.0D; public double batArmorToughness = 0.0D; public double batAttackKnockback = 0.0D; @@ -1224,7 +1224,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 private void batSettings() { batRidable = getBoolean("mobs.bat.ridable", batRidable); batRidableInWater = getBoolean("mobs.bat.ridable-in-water", batRidableInWater); -@@ -606,6 +609,7 @@ public class PurpurWorldConfig { +@@ -619,6 +622,7 @@ public class PurpurWorldConfig { batArmor = getDouble("mobs.bat.attributes.armor", batArmor); batArmorToughness = getDouble("mobs.bat.attributes.armor_toughness", batArmorToughness); batAttackKnockback = getDouble("mobs.bat.attributes.attack_knockback", batAttackKnockback); @@ -1232,7 +1232,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 } public boolean beeRidable = false; -@@ -614,6 +618,7 @@ public class PurpurWorldConfig { +@@ -627,6 +631,7 @@ public class PurpurWorldConfig { public double beeMaxY = 320D; public double beeMaxHealth = 10.0D; public int beeBreedingTicks = 6000; @@ -1240,7 +1240,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 private void beeSettings() { beeRidable = getBoolean("mobs.bee.ridable", beeRidable); beeRidableInWater = getBoolean("mobs.bee.ridable-in-water", beeRidableInWater); -@@ -626,6 +631,7 @@ public class PurpurWorldConfig { +@@ -639,6 +644,7 @@ public class PurpurWorldConfig { } beeMaxHealth = getDouble("mobs.bee.attributes.max_health", beeMaxHealth); beeBreedingTicks = getInt("mobs.bee.breeding-delay-ticks", beeBreedingTicks); @@ -1248,7 +1248,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 } public boolean blazeRidable = false; -@@ -633,6 +639,7 @@ public class PurpurWorldConfig { +@@ -646,6 +652,7 @@ public class PurpurWorldConfig { public boolean blazeControllable = true; public double blazeMaxY = 320D; public double blazeMaxHealth = 20.0D; @@ -1256,15 +1256,15 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 private void blazeSettings() { blazeRidable = getBoolean("mobs.blaze.ridable", blazeRidable); blazeRidableInWater = getBoolean("mobs.blaze.ridable-in-water", blazeRidableInWater); -@@ -644,6 +651,7 @@ public class PurpurWorldConfig { +@@ -657,6 +664,7 @@ public class PurpurWorldConfig { set("mobs.blaze.attributes.max_health", oldValue); } blazeMaxHealth = getDouble("mobs.blaze.attributes.max_health", blazeMaxHealth); + blazeTakeDamageFromWater = getBoolean("mobs.blaze.takes-damage-from-water", blazeTakeDamageFromWater); } - public boolean camelRidableInWater = false; -@@ -674,6 +682,7 @@ public class PurpurWorldConfig { + public boolean boggedRidable = false; +@@ -698,6 +706,7 @@ public class PurpurWorldConfig { public int catSpawnVillageScanRange = 48; public int catBreedingTicks = 6000; public DyeColor catDefaultCollarColor = DyeColor.RED; @@ -1272,7 +1272,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 private void catSettings() { catRidable = getBoolean("mobs.cat.ridable", catRidable); catRidableInWater = getBoolean("mobs.cat.ridable-in-water", catRidableInWater); -@@ -693,12 +702,14 @@ public class PurpurWorldConfig { +@@ -717,12 +726,14 @@ public class PurpurWorldConfig { } catch (IllegalArgumentException ignore) { catDefaultCollarColor = DyeColor.RED; } @@ -1287,7 +1287,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 private void caveSpiderSettings() { caveSpiderRidable = getBoolean("mobs.cave_spider.ridable", caveSpiderRidable); caveSpiderRidableInWater = getBoolean("mobs.cave_spider.ridable-in-water", caveSpiderRidableInWater); -@@ -709,6 +720,7 @@ public class PurpurWorldConfig { +@@ -733,6 +744,7 @@ public class PurpurWorldConfig { set("mobs.cave_spider.attributes.max_health", oldValue); } caveSpiderMaxHealth = getDouble("mobs.cave_spider.attributes.max_health", caveSpiderMaxHealth); @@ -1295,7 +1295,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 } public boolean chickenRidable = false; -@@ -717,6 +729,7 @@ public class PurpurWorldConfig { +@@ -741,6 +753,7 @@ public class PurpurWorldConfig { public double chickenMaxHealth = 4.0D; public boolean chickenRetaliate = false; public int chickenBreedingTicks = 6000; @@ -1303,7 +1303,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 private void chickenSettings() { chickenRidable = getBoolean("mobs.chicken.ridable", chickenRidable); chickenRidableInWater = getBoolean("mobs.chicken.ridable-in-water", chickenRidableInWater); -@@ -729,11 +742,13 @@ public class PurpurWorldConfig { +@@ -753,11 +766,13 @@ public class PurpurWorldConfig { chickenMaxHealth = getDouble("mobs.chicken.attributes.max_health", chickenMaxHealth); chickenRetaliate = getBoolean("mobs.chicken.retaliate", chickenRetaliate); chickenBreedingTicks = getInt("mobs.chicken.breeding-delay-ticks", chickenBreedingTicks); @@ -1317,7 +1317,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 private void codSettings() { codRidable = getBoolean("mobs.cod.ridable", codRidable); codControllable = getBoolean("mobs.cod.controllable", codControllable); -@@ -743,6 +758,7 @@ public class PurpurWorldConfig { +@@ -767,6 +782,7 @@ public class PurpurWorldConfig { set("mobs.cod.attributes.max_health", oldValue); } codMaxHealth = getDouble("mobs.cod.attributes.max_health", codMaxHealth); @@ -1325,7 +1325,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 } public boolean cowRidable = false; -@@ -751,6 +767,7 @@ public class PurpurWorldConfig { +@@ -775,6 +791,7 @@ public class PurpurWorldConfig { public double cowMaxHealth = 10.0D; public int cowFeedMushrooms = 0; public int cowBreedingTicks = 6000; @@ -1333,7 +1333,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 private void cowSettings() { cowRidable = getBoolean("mobs.cow.ridable", cowRidable); cowRidableInWater = getBoolean("mobs.cow.ridable-in-water", cowRidableInWater); -@@ -763,6 +780,7 @@ public class PurpurWorldConfig { +@@ -787,6 +804,7 @@ public class PurpurWorldConfig { cowMaxHealth = getDouble("mobs.cow.attributes.max_health", cowMaxHealth); cowFeedMushrooms = getInt("mobs.cow.feed-mushrooms-for-mooshroom", cowFeedMushrooms); cowBreedingTicks = getInt("mobs.cow.breeding-delay-ticks", cowBreedingTicks); @@ -1341,7 +1341,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 } public boolean creeperRidable = false; -@@ -772,6 +790,7 @@ public class PurpurWorldConfig { +@@ -796,6 +814,7 @@ public class PurpurWorldConfig { public double creeperChargedChance = 0.0D; public boolean creeperAllowGriefing = true; public boolean creeperBypassMobGriefing = false; @@ -1349,7 +1349,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 private void creeperSettings() { creeperRidable = getBoolean("mobs.creeper.ridable", creeperRidable); creeperRidableInWater = getBoolean("mobs.creeper.ridable-in-water", creeperRidableInWater); -@@ -785,6 +804,7 @@ public class PurpurWorldConfig { +@@ -809,6 +828,7 @@ public class PurpurWorldConfig { creeperChargedChance = getDouble("mobs.creeper.naturally-charged-chance", creeperChargedChance); creeperAllowGriefing = getBoolean("mobs.creeper.allow-griefing", creeperAllowGriefing); creeperBypassMobGriefing = getBoolean("mobs.creeper.bypass-mob-griefing", creeperBypassMobGriefing); @@ -1357,7 +1357,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 } public boolean dolphinRidable = false; -@@ -794,6 +814,7 @@ public class PurpurWorldConfig { +@@ -818,6 +838,7 @@ public class PurpurWorldConfig { public float dolphinSpitDamage = 2.0F; public double dolphinMaxHealth = 10.0D; public boolean dolphinDisableTreasureSearching = false; @@ -1365,7 +1365,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 private void dolphinSettings() { dolphinRidable = getBoolean("mobs.dolphin.ridable", dolphinRidable); dolphinControllable = getBoolean("mobs.dolphin.controllable", dolphinControllable); -@@ -807,6 +828,7 @@ public class PurpurWorldConfig { +@@ -831,6 +852,7 @@ public class PurpurWorldConfig { } dolphinMaxHealth = getDouble("mobs.dolphin.attributes.max_health", dolphinMaxHealth); dolphinDisableTreasureSearching = getBoolean("mobs.dolphin.disable-treasure-searching", dolphinDisableTreasureSearching); @@ -1373,7 +1373,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 } public boolean donkeyRidableInWater = false; -@@ -817,6 +839,7 @@ public class PurpurWorldConfig { +@@ -841,6 +863,7 @@ public class PurpurWorldConfig { public double donkeyMovementSpeedMin = 0.175D; public double donkeyMovementSpeedMax = 0.175D; public int donkeyBreedingTicks = 6000; @@ -1381,7 +1381,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 private void donkeySettings() { donkeyRidableInWater = getBoolean("mobs.donkey.ridable-in-water", donkeyRidableInWater); if (PurpurConfig.version < 10) { -@@ -833,6 +856,7 @@ public class PurpurWorldConfig { +@@ -857,6 +880,7 @@ public class PurpurWorldConfig { donkeyMovementSpeedMin = getDouble("mobs.donkey.attributes.movement_speed.min", donkeyMovementSpeedMin); donkeyMovementSpeedMax = getDouble("mobs.donkey.attributes.movement_speed.max", donkeyMovementSpeedMax); donkeyBreedingTicks = getInt("mobs.donkey.breeding-delay-ticks", donkeyBreedingTicks); @@ -1389,7 +1389,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 } public boolean drownedRidable = false; -@@ -843,6 +867,7 @@ public class PurpurWorldConfig { +@@ -867,6 +891,7 @@ public class PurpurWorldConfig { public boolean drownedJockeyOnlyBaby = true; public double drownedJockeyChance = 0.05D; public boolean drownedJockeyTryExistingChickens = true; @@ -1397,7 +1397,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 private void drownedSettings() { drownedRidable = getBoolean("mobs.drowned.ridable", drownedRidable); drownedRidableInWater = getBoolean("mobs.drowned.ridable-in-water", drownedRidableInWater); -@@ -857,11 +882,13 @@ public class PurpurWorldConfig { +@@ -881,11 +906,13 @@ public class PurpurWorldConfig { drownedJockeyOnlyBaby = getBoolean("mobs.drowned.jockey.only-babies", drownedJockeyOnlyBaby); drownedJockeyChance = getDouble("mobs.drowned.jockey.chance", drownedJockeyChance); drownedJockeyTryExistingChickens = getBoolean("mobs.drowned.jockey.try-existing-chickens", drownedJockeyTryExistingChickens); @@ -1411,7 +1411,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 private void elderGuardianSettings() { elderGuardianRidable = getBoolean("mobs.elder_guardian.ridable", elderGuardianRidable); elderGuardianControllable = getBoolean("mobs.elder_guardian.controllable", elderGuardianControllable); -@@ -871,6 +898,7 @@ public class PurpurWorldConfig { +@@ -895,6 +922,7 @@ public class PurpurWorldConfig { set("mobs.elder_guardian.attributes.max_health", oldValue); } elderGuardianMaxHealth = getDouble("mobs.elder_guardian.attributes.max_health", elderGuardianMaxHealth); @@ -1419,7 +1419,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 } public boolean enderDragonRidable = false; -@@ -880,6 +908,7 @@ public class PurpurWorldConfig { +@@ -904,6 +932,7 @@ public class PurpurWorldConfig { public double enderDragonMaxHealth = 200.0D; public boolean enderDragonAlwaysDropsFullExp = false; public boolean enderDragonBypassMobGriefing = false; @@ -1427,7 +1427,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 private void enderDragonSettings() { enderDragonRidable = getBoolean("mobs.ender_dragon.ridable", enderDragonRidable); enderDragonRidableInWater = getBoolean("mobs.ender_dragon.ridable-in-water", enderDragonRidableInWater); -@@ -897,6 +926,7 @@ public class PurpurWorldConfig { +@@ -921,6 +950,7 @@ public class PurpurWorldConfig { enderDragonMaxHealth = getDouble("mobs.ender_dragon.attributes.max_health", enderDragonMaxHealth); enderDragonAlwaysDropsFullExp = getBoolean("mobs.ender_dragon.always-drop-full-exp", enderDragonAlwaysDropsFullExp); enderDragonBypassMobGriefing = getBoolean("mobs.ender_dragon.bypass-mob-griefing", enderDragonBypassMobGriefing); @@ -1435,7 +1435,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 } public boolean endermanRidable = false; -@@ -906,6 +936,7 @@ public class PurpurWorldConfig { +@@ -930,6 +960,7 @@ public class PurpurWorldConfig { public boolean endermanAllowGriefing = true; public boolean endermanDespawnEvenWithBlock = false; public boolean endermanBypassMobGriefing = false; @@ -1443,7 +1443,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 private void endermanSettings() { endermanRidable = getBoolean("mobs.enderman.ridable", endermanRidable); endermanRidableInWater = getBoolean("mobs.enderman.ridable-in-water", endermanRidableInWater); -@@ -919,12 +950,14 @@ public class PurpurWorldConfig { +@@ -943,12 +974,14 @@ public class PurpurWorldConfig { endermanAllowGriefing = getBoolean("mobs.enderman.allow-griefing", endermanAllowGriefing); endermanDespawnEvenWithBlock = getBoolean("mobs.enderman.can-despawn-with-held-block", endermanDespawnEvenWithBlock); endermanBypassMobGriefing = getBoolean("mobs.enderman.bypass-mob-griefing", endermanBypassMobGriefing); @@ -1458,7 +1458,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 private void endermiteSettings() { endermiteRidable = getBoolean("mobs.endermite.ridable", endermiteRidable); endermiteRidableInWater = getBoolean("mobs.endermite.ridable-in-water", endermiteRidableInWater); -@@ -935,6 +968,7 @@ public class PurpurWorldConfig { +@@ -959,6 +992,7 @@ public class PurpurWorldConfig { set("mobs.endermite.attributes.max_health", oldValue); } endermiteMaxHealth = getDouble("mobs.endermite.attributes.max_health", endermiteMaxHealth); @@ -1466,7 +1466,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 } public boolean evokerRidable = false; -@@ -942,6 +976,7 @@ public class PurpurWorldConfig { +@@ -966,6 +1000,7 @@ public class PurpurWorldConfig { public boolean evokerControllable = true; public double evokerMaxHealth = 24.0D; public boolean evokerBypassMobGriefing = false; @@ -1474,7 +1474,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 private void evokerSettings() { evokerRidable = getBoolean("mobs.evoker.ridable", evokerRidable); evokerRidableInWater = getBoolean("mobs.evoker.ridable-in-water", evokerRidableInWater); -@@ -953,6 +988,7 @@ public class PurpurWorldConfig { +@@ -977,6 +1012,7 @@ public class PurpurWorldConfig { } evokerMaxHealth = getDouble("mobs.evoker.attributes.max_health", evokerMaxHealth); evokerBypassMobGriefing = getBoolean("mobs.evoker.bypass-mob-griefing", evokerBypassMobGriefing); @@ -1482,7 +1482,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 } public boolean foxRidable = false; -@@ -962,6 +998,7 @@ public class PurpurWorldConfig { +@@ -986,6 +1022,7 @@ public class PurpurWorldConfig { public boolean foxTypeChangesWithTulips = false; public int foxBreedingTicks = 6000; public boolean foxBypassMobGriefing = false; @@ -1490,7 +1490,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 private void foxSettings() { foxRidable = getBoolean("mobs.fox.ridable", foxRidable); foxRidableInWater = getBoolean("mobs.fox.ridable-in-water", foxRidableInWater); -@@ -975,6 +1012,7 @@ public class PurpurWorldConfig { +@@ -999,6 +1036,7 @@ public class PurpurWorldConfig { foxTypeChangesWithTulips = getBoolean("mobs.fox.tulips-change-type", foxTypeChangesWithTulips); foxBreedingTicks = getInt("mobs.fox.breeding-delay-ticks", foxBreedingTicks); foxBypassMobGriefing = getBoolean("mobs.fox.bypass-mob-griefing", foxBypassMobGriefing); @@ -1498,7 +1498,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 } public boolean frogRidable = false; -@@ -995,6 +1033,7 @@ public class PurpurWorldConfig { +@@ -1019,6 +1057,7 @@ public class PurpurWorldConfig { public boolean ghastControllable = true; public double ghastMaxY = 320D; public double ghastMaxHealth = 10.0D; @@ -1506,7 +1506,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 private void ghastSettings() { ghastRidable = getBoolean("mobs.ghast.ridable", ghastRidable); ghastRidableInWater = getBoolean("mobs.ghast.ridable-in-water", ghastRidableInWater); -@@ -1006,6 +1045,7 @@ public class PurpurWorldConfig { +@@ -1030,6 +1069,7 @@ public class PurpurWorldConfig { set("mobs.ghast.attributes.max_health", oldValue); } ghastMaxHealth = getDouble("mobs.ghast.attributes.max_health", ghastMaxHealth); @@ -1514,7 +1514,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 } public boolean giantRidable = false; -@@ -1018,6 +1058,7 @@ public class PurpurWorldConfig { +@@ -1042,6 +1082,7 @@ public class PurpurWorldConfig { public float giantJumpHeight = 1.0F; public boolean giantHaveAI = false; public boolean giantHaveHostileAI = false; @@ -1522,7 +1522,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 private void giantSettings() { giantRidable = getBoolean("mobs.giant.ridable", giantRidable); giantRidableInWater = getBoolean("mobs.giant.ridable-in-water", giantRidableInWater); -@@ -1038,17 +1079,20 @@ public class PurpurWorldConfig { +@@ -1062,17 +1103,20 @@ public class PurpurWorldConfig { giantJumpHeight = (float) getDouble("mobs.giant.jump-height", giantJumpHeight); giantHaveAI = getBoolean("mobs.giant.have-ai", giantHaveAI); giantHaveHostileAI = getBoolean("mobs.giant.have-hostile-ai", giantHaveHostileAI); @@ -1543,7 +1543,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 } public boolean goatRidable = false; -@@ -1056,17 +1100,20 @@ public class PurpurWorldConfig { +@@ -1080,17 +1124,20 @@ public class PurpurWorldConfig { public boolean goatControllable = true; public double goatMaxHealth = 10.0D; public int goatBreedingTicks = 6000; @@ -1564,7 +1564,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 private void guardianSettings() { guardianRidable = getBoolean("mobs.guardian.ridable", guardianRidable); guardianControllable = getBoolean("mobs.guardian.controllable", guardianControllable); -@@ -1076,6 +1123,7 @@ public class PurpurWorldConfig { +@@ -1100,6 +1147,7 @@ public class PurpurWorldConfig { set("mobs.guardian.attributes.max_health", oldValue); } guardianMaxHealth = getDouble("mobs.guardian.attributes.max_health", guardianMaxHealth); @@ -1572,7 +1572,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 } public boolean hoglinRidable = false; -@@ -1083,6 +1131,7 @@ public class PurpurWorldConfig { +@@ -1107,6 +1155,7 @@ public class PurpurWorldConfig { public boolean hoglinControllable = true; public double hoglinMaxHealth = 40.0D; public int hoglinBreedingTicks = 6000; @@ -1580,7 +1580,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 private void hoglinSettings() { hoglinRidable = getBoolean("mobs.hoglin.ridable", hoglinRidable); hoglinRidableInWater = getBoolean("mobs.hoglin.ridable-in-water", hoglinRidableInWater); -@@ -1094,6 +1143,7 @@ public class PurpurWorldConfig { +@@ -1118,6 +1167,7 @@ public class PurpurWorldConfig { } hoglinMaxHealth = getDouble("mobs.hoglin.attributes.max_health", hoglinMaxHealth); hoglinBreedingTicks = getInt("mobs.hoglin.breeding-delay-ticks", hoglinBreedingTicks); @@ -1588,7 +1588,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 } public boolean horseRidableInWater = false; -@@ -1104,6 +1154,7 @@ public class PurpurWorldConfig { +@@ -1128,6 +1178,7 @@ public class PurpurWorldConfig { public double horseMovementSpeedMin = 0.1125D; public double horseMovementSpeedMax = 0.3375D; public int horseBreedingTicks = 6000; @@ -1596,7 +1596,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 private void horseSettings() { horseRidableInWater = getBoolean("mobs.horse.ridable-in-water", horseRidableInWater); if (PurpurConfig.version < 10) { -@@ -1120,6 +1171,7 @@ public class PurpurWorldConfig { +@@ -1144,6 +1195,7 @@ public class PurpurWorldConfig { horseMovementSpeedMin = getDouble("mobs.horse.attributes.movement_speed.min", horseMovementSpeedMin); horseMovementSpeedMax = getDouble("mobs.horse.attributes.movement_speed.max", horseMovementSpeedMax); horseBreedingTicks = getInt("mobs.horse.breeding-delay-ticks", horseBreedingTicks); @@ -1604,7 +1604,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 } public boolean huskRidable = false; -@@ -1130,6 +1182,7 @@ public class PurpurWorldConfig { +@@ -1154,6 +1206,7 @@ public class PurpurWorldConfig { public boolean huskJockeyOnlyBaby = true; public double huskJockeyChance = 0.05D; public boolean huskJockeyTryExistingChickens = true; @@ -1612,7 +1612,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 private void huskSettings() { huskRidable = getBoolean("mobs.husk.ridable", huskRidable); huskRidableInWater = getBoolean("mobs.husk.ridable-in-water", huskRidableInWater); -@@ -1144,6 +1197,7 @@ public class PurpurWorldConfig { +@@ -1168,6 +1221,7 @@ public class PurpurWorldConfig { huskJockeyOnlyBaby = getBoolean("mobs.husk.jockey.only-babies", huskJockeyOnlyBaby); huskJockeyChance = getDouble("mobs.husk.jockey.chance", huskJockeyChance); huskJockeyTryExistingChickens = getBoolean("mobs.husk.jockey.try-existing-chickens", huskJockeyTryExistingChickens); @@ -1620,7 +1620,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 } public boolean illusionerRidable = false; -@@ -1152,6 +1206,7 @@ public class PurpurWorldConfig { +@@ -1176,6 +1230,7 @@ public class PurpurWorldConfig { public double illusionerMovementSpeed = 0.5D; public double illusionerFollowRange = 18.0D; public double illusionerMaxHealth = 32.0D; @@ -1628,7 +1628,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 private void illusionerSettings() { illusionerRidable = getBoolean("mobs.illusioner.ridable", illusionerRidable); illusionerRidableInWater = getBoolean("mobs.illusioner.ridable-in-water", illusionerRidableInWater); -@@ -1168,6 +1223,7 @@ public class PurpurWorldConfig { +@@ -1192,6 +1247,7 @@ public class PurpurWorldConfig { set("mobs.illusioner.attributes.max_health", oldValue); } illusionerMaxHealth = getDouble("mobs.illusioner.attributes.max_health", illusionerMaxHealth); @@ -1636,7 +1636,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 } public boolean ironGolemRidable = false; -@@ -1175,6 +1231,7 @@ public class PurpurWorldConfig { +@@ -1199,6 +1255,7 @@ public class PurpurWorldConfig { public boolean ironGolemControllable = true; public boolean ironGolemCanSwim = false; public double ironGolemMaxHealth = 100.0D; @@ -1644,7 +1644,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 private void ironGolemSettings() { ironGolemRidable = getBoolean("mobs.iron_golem.ridable", ironGolemRidable); ironGolemRidableInWater = getBoolean("mobs.iron_golem.ridable-in-water", ironGolemRidableInWater); -@@ -1186,6 +1243,7 @@ public class PurpurWorldConfig { +@@ -1210,6 +1267,7 @@ public class PurpurWorldConfig { set("mobs.iron_golem.attributes.max_health", oldValue); } ironGolemMaxHealth = getDouble("mobs.iron_golem.attributes.max_health", ironGolemMaxHealth); @@ -1652,7 +1652,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 } public boolean llamaRidable = false; -@@ -1198,6 +1256,7 @@ public class PurpurWorldConfig { +@@ -1222,6 +1280,7 @@ public class PurpurWorldConfig { public double llamaMovementSpeedMin = 0.175D; public double llamaMovementSpeedMax = 0.175D; public int llamaBreedingTicks = 6000; @@ -1660,7 +1660,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 private void llamaSettings() { llamaRidable = getBoolean("mobs.llama.ridable", llamaRidable); llamaRidableInWater = getBoolean("mobs.llama.ridable-in-water", llamaRidableInWater); -@@ -1216,6 +1275,7 @@ public class PurpurWorldConfig { +@@ -1240,6 +1299,7 @@ public class PurpurWorldConfig { llamaMovementSpeedMin = getDouble("mobs.llama.attributes.movement_speed.min", llamaMovementSpeedMin); llamaMovementSpeedMax = getDouble("mobs.llama.attributes.movement_speed.max", llamaMovementSpeedMax); llamaBreedingTicks = getInt("mobs.llama.breeding-delay-ticks", llamaBreedingTicks); @@ -1668,7 +1668,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 } public boolean magmaCubeRidable = false; -@@ -1225,6 +1285,7 @@ public class PurpurWorldConfig { +@@ -1249,6 +1309,7 @@ public class PurpurWorldConfig { public String magmaCubeAttackDamage = "size"; public Map magmaCubeMaxHealthCache = new HashMap<>(); public Map magmaCubeAttackDamageCache = new HashMap<>(); @@ -1676,7 +1676,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 private void magmaCubeSettings() { magmaCubeRidable = getBoolean("mobs.magma_cube.ridable", magmaCubeRidable); magmaCubeRidableInWater = getBoolean("mobs.magma_cube.ridable-in-water", magmaCubeRidableInWater); -@@ -1238,6 +1299,7 @@ public class PurpurWorldConfig { +@@ -1262,6 +1323,7 @@ public class PurpurWorldConfig { magmaCubeAttackDamage = getString("mobs.magma_cube.attributes.attack_damage", magmaCubeAttackDamage); magmaCubeMaxHealthCache.clear(); magmaCubeAttackDamageCache.clear(); @@ -1684,7 +1684,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 } public boolean mooshroomRidable = false; -@@ -1245,6 +1307,7 @@ public class PurpurWorldConfig { +@@ -1269,6 +1331,7 @@ public class PurpurWorldConfig { public boolean mooshroomControllable = true; public double mooshroomMaxHealth = 10.0D; public int mooshroomBreedingTicks = 6000; @@ -1692,7 +1692,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 private void mooshroomSettings() { mooshroomRidable = getBoolean("mobs.mooshroom.ridable", mooshroomRidable); mooshroomRidableInWater = getBoolean("mobs.mooshroom.ridable-in-water", mooshroomRidableInWater); -@@ -1256,6 +1319,7 @@ public class PurpurWorldConfig { +@@ -1280,6 +1343,7 @@ public class PurpurWorldConfig { } mooshroomMaxHealth = getDouble("mobs.mooshroom.attributes.max_health", mooshroomMaxHealth); mooshroomBreedingTicks = getInt("mobs.mooshroom.breeding-delay-ticks", mooshroomBreedingTicks); @@ -1700,7 +1700,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 } public boolean muleRidableInWater = false; -@@ -1266,6 +1330,7 @@ public class PurpurWorldConfig { +@@ -1290,6 +1354,7 @@ public class PurpurWorldConfig { public double muleMovementSpeedMin = 0.175D; public double muleMovementSpeedMax = 0.175D; public int muleBreedingTicks = 6000; @@ -1708,7 +1708,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 private void muleSettings() { muleRidableInWater = getBoolean("mobs.mule.ridable-in-water", muleRidableInWater); if (PurpurConfig.version < 10) { -@@ -1282,6 +1347,7 @@ public class PurpurWorldConfig { +@@ -1306,6 +1371,7 @@ public class PurpurWorldConfig { muleMovementSpeedMin = getDouble("mobs.mule.attributes.movement_speed.min", muleMovementSpeedMin); muleMovementSpeedMax = getDouble("mobs.mule.attributes.movement_speed.max", muleMovementSpeedMax); muleBreedingTicks = getInt("mobs.mule.breeding-delay-ticks", muleBreedingTicks); @@ -1716,7 +1716,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 } public boolean ocelotRidable = false; -@@ -1289,6 +1355,7 @@ public class PurpurWorldConfig { +@@ -1313,6 +1379,7 @@ public class PurpurWorldConfig { public boolean ocelotControllable = true; public double ocelotMaxHealth = 10.0D; public int ocelotBreedingTicks = 6000; @@ -1724,7 +1724,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 private void ocelotSettings() { ocelotRidable = getBoolean("mobs.ocelot.ridable", ocelotRidable); ocelotRidableInWater = getBoolean("mobs.ocelot.ridable-in-water", ocelotRidableInWater); -@@ -1300,6 +1367,7 @@ public class PurpurWorldConfig { +@@ -1324,6 +1391,7 @@ public class PurpurWorldConfig { } ocelotMaxHealth = getDouble("mobs.ocelot.attributes.max_health", ocelotMaxHealth); ocelotBreedingTicks = getInt("mobs.ocelot.breeding-delay-ticks", ocelotBreedingTicks); @@ -1732,7 +1732,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 } public boolean pandaRidable = false; -@@ -1307,6 +1375,7 @@ public class PurpurWorldConfig { +@@ -1331,6 +1399,7 @@ public class PurpurWorldConfig { public boolean pandaControllable = true; public double pandaMaxHealth = 20.0D; public int pandaBreedingTicks = 6000; @@ -1740,7 +1740,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 private void pandaSettings() { pandaRidable = getBoolean("mobs.panda.ridable", pandaRidable); pandaRidableInWater = getBoolean("mobs.panda.ridable-in-water", pandaRidableInWater); -@@ -1318,6 +1387,7 @@ public class PurpurWorldConfig { +@@ -1342,6 +1411,7 @@ public class PurpurWorldConfig { } pandaMaxHealth = getDouble("mobs.panda.attributes.max_health", pandaMaxHealth); pandaBreedingTicks = getInt("mobs.panda.breeding-delay-ticks", pandaBreedingTicks); @@ -1748,7 +1748,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 } public boolean parrotRidable = false; -@@ -1325,6 +1395,7 @@ public class PurpurWorldConfig { +@@ -1349,6 +1419,7 @@ public class PurpurWorldConfig { public boolean parrotControllable = true; public double parrotMaxY = 320D; public double parrotMaxHealth = 6.0D; @@ -1756,7 +1756,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 private void parrotSettings() { parrotRidable = getBoolean("mobs.parrot.ridable", parrotRidable); parrotRidableInWater = getBoolean("mobs.parrot.ridable-in-water", parrotRidableInWater); -@@ -1336,6 +1407,7 @@ public class PurpurWorldConfig { +@@ -1360,6 +1431,7 @@ public class PurpurWorldConfig { set("mobs.parrot.attributes.max_health", oldValue); } parrotMaxHealth = getDouble("mobs.parrot.attributes.max_health", parrotMaxHealth); @@ -1764,7 +1764,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 } public boolean phantomRidable = false; -@@ -1362,6 +1434,7 @@ public class PurpurWorldConfig { +@@ -1386,6 +1458,7 @@ public class PurpurWorldConfig { public boolean phantomIgnorePlayersWithTorch = false; public boolean phantomBurnInDaylight = true; public boolean phantomFlamesOnSwoop = false; @@ -1772,7 +1772,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 private void phantomSettings() { phantomRidable = getBoolean("mobs.phantom.ridable", phantomRidable); phantomRidableInWater = getBoolean("mobs.phantom.ridable-in-water", phantomRidableInWater); -@@ -1396,6 +1469,7 @@ public class PurpurWorldConfig { +@@ -1420,6 +1493,7 @@ public class PurpurWorldConfig { phantomBurnInDaylight = getBoolean("mobs.phantom.burn-in-daylight", phantomBurnInDaylight); phantomIgnorePlayersWithTorch = getBoolean("mobs.phantom.ignore-players-with-torch", phantomIgnorePlayersWithTorch); phantomFlamesOnSwoop = getBoolean("mobs.phantom.flames-on-swoop", phantomFlamesOnSwoop); @@ -1780,7 +1780,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 } public boolean pigRidable = false; -@@ -1404,6 +1478,7 @@ public class PurpurWorldConfig { +@@ -1428,6 +1502,7 @@ public class PurpurWorldConfig { public double pigMaxHealth = 10.0D; public boolean pigGiveSaddleBack = false; public int pigBreedingTicks = 6000; @@ -1788,7 +1788,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 private void pigSettings() { pigRidable = getBoolean("mobs.pig.ridable", pigRidable); pigRidableInWater = getBoolean("mobs.pig.ridable-in-water", pigRidableInWater); -@@ -1416,6 +1491,7 @@ public class PurpurWorldConfig { +@@ -1440,6 +1515,7 @@ public class PurpurWorldConfig { pigMaxHealth = getDouble("mobs.pig.attributes.max_health", pigMaxHealth); pigGiveSaddleBack = getBoolean("mobs.pig.give-saddle-back", pigGiveSaddleBack); pigBreedingTicks = getInt("mobs.pig.breeding-delay-ticks", pigBreedingTicks); @@ -1796,7 +1796,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 } public boolean piglinRidable = false; -@@ -1423,6 +1499,7 @@ public class PurpurWorldConfig { +@@ -1447,6 +1523,7 @@ public class PurpurWorldConfig { public boolean piglinControllable = true; public double piglinMaxHealth = 16.0D; public boolean piglinBypassMobGriefing = false; @@ -1804,7 +1804,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 private void piglinSettings() { piglinRidable = getBoolean("mobs.piglin.ridable", piglinRidable); piglinRidableInWater = getBoolean("mobs.piglin.ridable-in-water", piglinRidableInWater); -@@ -1434,12 +1511,14 @@ public class PurpurWorldConfig { +@@ -1458,12 +1535,14 @@ public class PurpurWorldConfig { } piglinMaxHealth = getDouble("mobs.piglin.attributes.max_health", piglinMaxHealth); piglinBypassMobGriefing = getBoolean("mobs.piglin.bypass-mob-griefing", piglinBypassMobGriefing); @@ -1819,7 +1819,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 private void piglinBruteSettings() { piglinBruteRidable = getBoolean("mobs.piglin_brute.ridable", piglinBruteRidable); piglinBruteRidableInWater = getBoolean("mobs.piglin_brute.ridable-in-water", piglinBruteRidableInWater); -@@ -1450,6 +1529,7 @@ public class PurpurWorldConfig { +@@ -1474,6 +1553,7 @@ public class PurpurWorldConfig { set("mobs.piglin_brute.attributes.max_health", oldValue); } piglinBruteMaxHealth = getDouble("mobs.piglin_brute.attributes.max_health", piglinBruteMaxHealth); @@ -1827,7 +1827,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 } public boolean pillagerRidable = false; -@@ -1457,6 +1537,7 @@ public class PurpurWorldConfig { +@@ -1481,6 +1561,7 @@ public class PurpurWorldConfig { public boolean pillagerControllable = true; public double pillagerMaxHealth = 24.0D; public boolean pillagerBypassMobGriefing = false; @@ -1835,7 +1835,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 private void pillagerSettings() { pillagerRidable = getBoolean("mobs.pillager.ridable", pillagerRidable); pillagerRidableInWater = getBoolean("mobs.pillager.ridable-in-water", pillagerRidableInWater); -@@ -1468,6 +1549,7 @@ public class PurpurWorldConfig { +@@ -1492,6 +1573,7 @@ public class PurpurWorldConfig { } pillagerMaxHealth = getDouble("mobs.pillager.attributes.max_health", pillagerMaxHealth); pillagerBypassMobGriefing = getBoolean("mobs.pillager.bypass-mob-griefing", pillagerBypassMobGriefing); @@ -1843,7 +1843,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 } public boolean polarBearRidable = false; -@@ -1477,6 +1559,7 @@ public class PurpurWorldConfig { +@@ -1501,6 +1583,7 @@ public class PurpurWorldConfig { public String polarBearBreedableItemString = ""; public Item polarBearBreedableItem = null; public int polarBearBreedingTicks = 6000; @@ -1851,7 +1851,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 private void polarBearSettings() { polarBearRidable = getBoolean("mobs.polar_bear.ridable", polarBearRidable); polarBearRidableInWater = getBoolean("mobs.polar_bear.ridable-in-water", polarBearRidableInWater); -@@ -1491,11 +1574,13 @@ public class PurpurWorldConfig { +@@ -1515,11 +1598,13 @@ public class PurpurWorldConfig { Item item = BuiltInRegistries.ITEM.get(new ResourceLocation(polarBearBreedableItemString)); if (item != Items.AIR) polarBearBreedableItem = item; polarBearBreedingTicks = getInt("mobs.polar_bear.breeding-delay-ticks", polarBearBreedingTicks); @@ -1865,7 +1865,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 private void pufferfishSettings() { pufferfishRidable = getBoolean("mobs.pufferfish.ridable", pufferfishRidable); pufferfishControllable = getBoolean("mobs.pufferfish.controllable", pufferfishControllable); -@@ -1505,6 +1590,7 @@ public class PurpurWorldConfig { +@@ -1529,6 +1614,7 @@ public class PurpurWorldConfig { set("mobs.pufferfish.attributes.max_health", oldValue); } pufferfishMaxHealth = getDouble("mobs.pufferfish.attributes.max_health", pufferfishMaxHealth); @@ -1873,7 +1873,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 } public boolean rabbitRidable = false; -@@ -1515,6 +1601,7 @@ public class PurpurWorldConfig { +@@ -1539,6 +1625,7 @@ public class PurpurWorldConfig { public double rabbitNaturalKiller = 0.0D; public int rabbitBreedingTicks = 6000; public boolean rabbitBypassMobGriefing = false; @@ -1881,7 +1881,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 private void rabbitSettings() { rabbitRidable = getBoolean("mobs.rabbit.ridable", rabbitRidable); rabbitRidableInWater = getBoolean("mobs.rabbit.ridable-in-water", rabbitRidableInWater); -@@ -1529,6 +1616,7 @@ public class PurpurWorldConfig { +@@ -1553,6 +1640,7 @@ public class PurpurWorldConfig { rabbitNaturalKiller = getDouble("mobs.rabbit.spawn-killer-rabbit-chance", rabbitNaturalKiller); rabbitBreedingTicks = getInt("mobs.rabbit.breeding-delay-ticks", rabbitBreedingTicks); rabbitBypassMobGriefing = getBoolean("mobs.rabbit.bypass-mob-griefing", rabbitBypassMobGriefing); @@ -1889,7 +1889,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 } public boolean ravagerRidable = false; -@@ -1536,6 +1624,7 @@ public class PurpurWorldConfig { +@@ -1560,6 +1648,7 @@ public class PurpurWorldConfig { public boolean ravagerControllable = true; public double ravagerMaxHealth = 100.0D; public boolean ravagerBypassMobGriefing = false; @@ -1897,7 +1897,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 private void ravagerSettings() { ravagerRidable = getBoolean("mobs.ravager.ridable", ravagerRidable); ravagerRidableInWater = getBoolean("mobs.ravager.ridable-in-water", ravagerRidableInWater); -@@ -1547,11 +1636,13 @@ public class PurpurWorldConfig { +@@ -1571,11 +1660,13 @@ public class PurpurWorldConfig { } ravagerMaxHealth = getDouble("mobs.ravager.attributes.max_health", ravagerMaxHealth); ravagerBypassMobGriefing = getBoolean("mobs.ravager.bypass-mob-griefing", ravagerBypassMobGriefing); @@ -1911,7 +1911,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 private void salmonSettings() { salmonRidable = getBoolean("mobs.salmon.ridable", salmonRidable); salmonControllable = getBoolean("mobs.salmon.controllable", salmonControllable); -@@ -1561,6 +1652,7 @@ public class PurpurWorldConfig { +@@ -1585,6 +1676,7 @@ public class PurpurWorldConfig { set("mobs.salmon.attributes.max_health", oldValue); } salmonMaxHealth = getDouble("mobs.salmon.attributes.max_health", salmonMaxHealth); @@ -1919,7 +1919,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 } public boolean sheepRidable = false; -@@ -1569,6 +1661,7 @@ public class PurpurWorldConfig { +@@ -1593,6 +1685,7 @@ public class PurpurWorldConfig { public double sheepMaxHealth = 8.0D; public int sheepBreedingTicks = 6000; public boolean sheepBypassMobGriefing = false; @@ -1927,7 +1927,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 private void sheepSettings() { sheepRidable = getBoolean("mobs.sheep.ridable", sheepRidable); sheepRidableInWater = getBoolean("mobs.sheep.ridable-in-water", sheepRidableInWater); -@@ -1581,12 +1674,14 @@ public class PurpurWorldConfig { +@@ -1605,12 +1698,14 @@ public class PurpurWorldConfig { sheepMaxHealth = getDouble("mobs.sheep.attributes.max_health", sheepMaxHealth); sheepBreedingTicks = getInt("mobs.sheep.breeding-delay-ticks", sheepBreedingTicks); sheepBypassMobGriefing = getBoolean("mobs.sheep.bypass-mob-griefing", sheepBypassMobGriefing); @@ -1942,7 +1942,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 private void shulkerSettings() { shulkerRidable = getBoolean("mobs.shulker.ridable", shulkerRidable); shulkerRidableInWater = getBoolean("mobs.shulker.ridable-in-water", shulkerRidableInWater); -@@ -1597,6 +1692,7 @@ public class PurpurWorldConfig { +@@ -1621,6 +1716,7 @@ public class PurpurWorldConfig { set("mobs.shulker.attributes.max_health", oldValue); } shulkerMaxHealth = getDouble("mobs.shulker.attributes.max_health", shulkerMaxHealth); @@ -1950,7 +1950,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 } public boolean silverfishRidable = false; -@@ -1604,6 +1700,7 @@ public class PurpurWorldConfig { +@@ -1628,6 +1724,7 @@ public class PurpurWorldConfig { public boolean silverfishControllable = true; public double silverfishMaxHealth = 8.0D; public boolean silverfishBypassMobGriefing = false; @@ -1958,7 +1958,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 private void silverfishSettings() { silverfishRidable = getBoolean("mobs.silverfish.ridable", silverfishRidable); silverfishRidableInWater = getBoolean("mobs.silverfish.ridable-in-water", silverfishRidableInWater); -@@ -1615,12 +1712,14 @@ public class PurpurWorldConfig { +@@ -1639,12 +1736,14 @@ public class PurpurWorldConfig { } silverfishMaxHealth = getDouble("mobs.silverfish.attributes.max_health", silverfishMaxHealth); silverfishBypassMobGriefing = getBoolean("mobs.silverfish.bypass-mob-griefing", silverfishBypassMobGriefing); @@ -1973,7 +1973,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 private void skeletonSettings() { skeletonRidable = getBoolean("mobs.skeleton.ridable", skeletonRidable); skeletonRidableInWater = getBoolean("mobs.skeleton.ridable-in-water", skeletonRidableInWater); -@@ -1631,6 +1730,7 @@ public class PurpurWorldConfig { +@@ -1655,6 +1754,7 @@ public class PurpurWorldConfig { set("mobs.skeleton.attributes.max_health", oldValue); } skeletonMaxHealth = getDouble("mobs.skeleton.attributes.max_health", skeletonMaxHealth); @@ -1981,7 +1981,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 } public boolean skeletonHorseRidable = false; -@@ -1642,6 +1742,7 @@ public class PurpurWorldConfig { +@@ -1666,6 +1766,7 @@ public class PurpurWorldConfig { public double skeletonHorseJumpStrengthMax = 1.0D; public double skeletonHorseMovementSpeedMin = 0.2D; public double skeletonHorseMovementSpeedMax = 0.2D; @@ -1989,7 +1989,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 private void skeletonHorseSettings() { skeletonHorseRidable = getBoolean("mobs.skeleton_horse.ridable", skeletonHorseRidable); skeletonHorseRidableInWater = getBoolean("mobs.skeleton_horse.ridable-in-water", skeletonHorseRidableInWater); -@@ -1658,6 +1759,7 @@ public class PurpurWorldConfig { +@@ -1682,6 +1783,7 @@ public class PurpurWorldConfig { skeletonHorseJumpStrengthMax = getDouble("mobs.skeleton_horse.attributes.jump_strength.max", skeletonHorseJumpStrengthMax); skeletonHorseMovementSpeedMin = getDouble("mobs.skeleton_horse.attributes.movement_speed.min", skeletonHorseMovementSpeedMin); skeletonHorseMovementSpeedMax = getDouble("mobs.skeleton_horse.attributes.movement_speed.max", skeletonHorseMovementSpeedMax); @@ -1997,7 +1997,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 } public boolean slimeRidable = false; -@@ -1667,6 +1769,7 @@ public class PurpurWorldConfig { +@@ -1691,6 +1793,7 @@ public class PurpurWorldConfig { public String slimeAttackDamage = "size"; public Map slimeMaxHealthCache = new HashMap<>(); public Map slimeAttackDamageCache = new HashMap<>(); @@ -2005,7 +2005,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 private void slimeSettings() { slimeRidable = getBoolean("mobs.slime.ridable", slimeRidable); slimeRidableInWater = getBoolean("mobs.slime.ridable-in-water", slimeRidableInWater); -@@ -1680,6 +1783,7 @@ public class PurpurWorldConfig { +@@ -1704,6 +1807,7 @@ public class PurpurWorldConfig { slimeAttackDamage = getString("mobs.slime.attributes.attack_damage", slimeAttackDamage); slimeMaxHealthCache.clear(); slimeAttackDamageCache.clear(); @@ -2013,7 +2013,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 } public boolean snowGolemRidable = false; -@@ -1693,6 +1797,7 @@ public class PurpurWorldConfig { +@@ -1717,6 +1821,7 @@ public class PurpurWorldConfig { public float snowGolemSnowBallModifier = 10.0F; public double snowGolemAttackDistance = 1.25D; public boolean snowGolemBypassMobGriefing = false; @@ -2021,7 +2021,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 private void snowGolemSettings() { snowGolemRidable = getBoolean("mobs.snow_golem.ridable", snowGolemRidable); snowGolemRidableInWater = getBoolean("mobs.snow_golem.ridable-in-water", snowGolemRidableInWater); -@@ -1710,6 +1815,7 @@ public class PurpurWorldConfig { +@@ -1734,6 +1839,7 @@ public class PurpurWorldConfig { snowGolemSnowBallModifier = (float) getDouble("mobs.snow_golem.snow-ball-modifier", snowGolemSnowBallModifier); snowGolemAttackDistance = getDouble("mobs.snow_golem.attack-distance", snowGolemAttackDistance); snowGolemBypassMobGriefing = getBoolean("mobs.snow_golem.bypass-mob-griefing", snowGolemBypassMobGriefing); @@ -2029,7 +2029,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 } public boolean snifferRidable = false; -@@ -1731,6 +1837,7 @@ public class PurpurWorldConfig { +@@ -1755,6 +1861,7 @@ public class PurpurWorldConfig { public boolean squidImmuneToEAR = true; public double squidOffsetWaterCheck = 0.0D; public boolean squidsCanFly = false; @@ -2037,7 +2037,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 private void squidSettings() { squidRidable = getBoolean("mobs.squid.ridable", squidRidable); squidControllable = getBoolean("mobs.squid.controllable", squidControllable); -@@ -1743,12 +1850,14 @@ public class PurpurWorldConfig { +@@ -1767,12 +1874,14 @@ public class PurpurWorldConfig { squidImmuneToEAR = getBoolean("mobs.squid.immune-to-EAR", squidImmuneToEAR); squidOffsetWaterCheck = getDouble("mobs.squid.water-offset-check", squidOffsetWaterCheck); squidsCanFly = getBoolean("mobs.squid.can-fly", squidsCanFly); @@ -2052,7 +2052,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 private void spiderSettings() { spiderRidable = getBoolean("mobs.spider.ridable", spiderRidable); spiderRidableInWater = getBoolean("mobs.spider.ridable-in-water", spiderRidableInWater); -@@ -1759,12 +1868,14 @@ public class PurpurWorldConfig { +@@ -1783,12 +1892,14 @@ public class PurpurWorldConfig { set("mobs.spider.attributes.max_health", oldValue); } spiderMaxHealth = getDouble("mobs.spider.attributes.max_health", spiderMaxHealth); @@ -2067,7 +2067,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 private void straySettings() { strayRidable = getBoolean("mobs.stray.ridable", strayRidable); strayRidableInWater = getBoolean("mobs.stray.ridable-in-water", strayRidableInWater); -@@ -1775,6 +1886,7 @@ public class PurpurWorldConfig { +@@ -1799,6 +1910,7 @@ public class PurpurWorldConfig { set("mobs.stray.attributes.max_health", oldValue); } strayMaxHealth = getDouble("mobs.stray.attributes.max_health", strayMaxHealth); @@ -2075,7 +2075,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 } public boolean striderRidable = false; -@@ -1783,6 +1895,7 @@ public class PurpurWorldConfig { +@@ -1807,6 +1919,7 @@ public class PurpurWorldConfig { public double striderMaxHealth = 20.0D; public int striderBreedingTicks = 6000; public boolean striderGiveSaddleBack = false; @@ -2083,7 +2083,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 private void striderSettings() { striderRidable = getBoolean("mobs.strider.ridable", striderRidable); striderRidableInWater = getBoolean("mobs.strider.ridable-in-water", striderRidableInWater); -@@ -1795,6 +1908,7 @@ public class PurpurWorldConfig { +@@ -1819,6 +1932,7 @@ public class PurpurWorldConfig { striderMaxHealth = getDouble("mobs.strider.attributes.max_health", striderMaxHealth); striderBreedingTicks = getInt("mobs.strider.breeding-delay-ticks", striderBreedingTicks); striderGiveSaddleBack = getBoolean("mobs.strider.give-saddle-back", striderGiveSaddleBack); @@ -2091,7 +2091,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 } public boolean tadpoleRidable = false; -@@ -1816,6 +1930,7 @@ public class PurpurWorldConfig { +@@ -1840,6 +1954,7 @@ public class PurpurWorldConfig { public double traderLlamaMovementSpeedMin = 0.175D; public double traderLlamaMovementSpeedMax = 0.175D; public int traderLlamaBreedingTicks = 6000; @@ -2099,7 +2099,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 private void traderLlamaSettings() { traderLlamaRidable = getBoolean("mobs.trader_llama.ridable", traderLlamaRidable); traderLlamaRidableInWater = getBoolean("mobs.trader_llama.ridable-in-water", traderLlamaRidableInWater); -@@ -1834,11 +1949,13 @@ public class PurpurWorldConfig { +@@ -1858,11 +1973,13 @@ public class PurpurWorldConfig { traderLlamaMovementSpeedMin = getDouble("mobs.trader_llama.attributes.movement_speed.min", traderLlamaMovementSpeedMin); traderLlamaMovementSpeedMax = getDouble("mobs.trader_llama.attributes.movement_speed.max", traderLlamaMovementSpeedMax); traderLlamaBreedingTicks = getInt("mobs.trader_llama.breeding-delay-ticks", traderLlamaBreedingTicks); @@ -2113,7 +2113,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 private void tropicalFishSettings() { tropicalFishRidable = getBoolean("mobs.tropical_fish.ridable", tropicalFishRidable); tropicalFishControllable = getBoolean("mobs.tropical_fish.controllable", tropicalFishControllable); -@@ -1848,6 +1965,7 @@ public class PurpurWorldConfig { +@@ -1872,6 +1989,7 @@ public class PurpurWorldConfig { set("mobs.tropical_fish.attributes.max_health", oldValue); } tropicalFishMaxHealth = getDouble("mobs.tropical_fish.attributes.max_health", tropicalFishMaxHealth); @@ -2121,7 +2121,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 } public boolean turtleRidable = false; -@@ -1855,6 +1973,7 @@ public class PurpurWorldConfig { +@@ -1879,6 +1997,7 @@ public class PurpurWorldConfig { public boolean turtleControllable = true; public double turtleMaxHealth = 30.0D; public int turtleBreedingTicks = 6000; @@ -2129,7 +2129,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 private void turtleSettings() { turtleRidable = getBoolean("mobs.turtle.ridable", turtleRidable); turtleRidableInWater = getBoolean("mobs.turtle.ridable-in-water", turtleRidableInWater); -@@ -1866,6 +1985,7 @@ public class PurpurWorldConfig { +@@ -1890,6 +2009,7 @@ public class PurpurWorldConfig { } turtleMaxHealth = getDouble("mobs.turtle.attributes.max_health", turtleMaxHealth); turtleBreedingTicks = getInt("mobs.turtle.breeding-delay-ticks", turtleBreedingTicks); @@ -2137,7 +2137,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 } public boolean vexRidable = false; -@@ -1873,6 +1993,7 @@ public class PurpurWorldConfig { +@@ -1897,6 +2017,7 @@ public class PurpurWorldConfig { public boolean vexControllable = true; public double vexMaxY = 320D; public double vexMaxHealth = 14.0D; @@ -2145,7 +2145,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 private void vexSettings() { vexRidable = getBoolean("mobs.vex.ridable", vexRidable); vexRidableInWater = getBoolean("mobs.vex.ridable-in-water", vexRidableInWater); -@@ -1884,6 +2005,7 @@ public class PurpurWorldConfig { +@@ -1908,6 +2029,7 @@ public class PurpurWorldConfig { set("mobs.vex.attributes.max_health", oldValue); } vexMaxHealth = getDouble("mobs.vex.attributes.max_health", vexMaxHealth); @@ -2153,7 +2153,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 } public boolean villagerRidable = false; -@@ -1897,6 +2019,7 @@ public class PurpurWorldConfig { +@@ -1921,6 +2043,7 @@ public class PurpurWorldConfig { public boolean villagerClericsFarmWarts = false; public boolean villagerClericFarmersThrowWarts = true; public boolean villagerBypassMobGriefing = false; @@ -2161,7 +2161,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 private void villagerSettings() { villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); -@@ -1914,6 +2037,7 @@ public class PurpurWorldConfig { +@@ -1938,6 +2061,7 @@ public class PurpurWorldConfig { villagerClericsFarmWarts = getBoolean("mobs.villager.clerics-farm-warts", villagerClericsFarmWarts); villagerClericFarmersThrowWarts = getBoolean("mobs.villager.cleric-wart-farmers-throw-warts-at-villagers", villagerClericFarmersThrowWarts); villagerBypassMobGriefing = getBoolean("mobs.villager.bypass-mob-griefing", villagerBypassMobGriefing); @@ -2169,7 +2169,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 } public boolean vindicatorRidable = false; -@@ -1921,6 +2045,7 @@ public class PurpurWorldConfig { +@@ -1945,6 +2069,7 @@ public class PurpurWorldConfig { public boolean vindicatorControllable = true; public double vindicatorMaxHealth = 24.0D; public double vindicatorJohnnySpawnChance = 0D; @@ -2177,7 +2177,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 private void vindicatorSettings() { vindicatorRidable = getBoolean("mobs.vindicator.ridable", vindicatorRidable); vindicatorRidableInWater = getBoolean("mobs.vindicator.ridable-in-water", vindicatorRidableInWater); -@@ -1932,6 +2057,7 @@ public class PurpurWorldConfig { +@@ -1956,6 +2081,7 @@ public class PurpurWorldConfig { } vindicatorMaxHealth = getDouble("mobs.vindicator.attributes.max_health", vindicatorMaxHealth); vindicatorJohnnySpawnChance = getDouble("mobs.vindicator.johnny.spawn-chance", vindicatorJohnnySpawnChance); @@ -2185,7 +2185,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 } public boolean wanderingTraderRidable = false; -@@ -1940,6 +2066,7 @@ public class PurpurWorldConfig { +@@ -1964,6 +2090,7 @@ public class PurpurWorldConfig { public double wanderingTraderMaxHealth = 20.0D; public boolean wanderingTraderFollowEmeraldBlock = false; public boolean wanderingTraderCanBeLeashed = false; @@ -2193,7 +2193,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 private void wanderingTraderSettings() { wanderingTraderRidable = getBoolean("mobs.wandering_trader.ridable", wanderingTraderRidable); wanderingTraderRidableInWater = getBoolean("mobs.wandering_trader.ridable-in-water", wanderingTraderRidableInWater); -@@ -1952,6 +2079,7 @@ public class PurpurWorldConfig { +@@ -1976,6 +2103,7 @@ public class PurpurWorldConfig { wanderingTraderMaxHealth = getDouble("mobs.wandering_trader.attributes.max_health", wanderingTraderMaxHealth); wanderingTraderFollowEmeraldBlock = getBoolean("mobs.wandering_trader.follow-emerald-blocks", wanderingTraderFollowEmeraldBlock); wanderingTraderCanBeLeashed = getBoolean("mobs.wandering_trader.can-be-leashed", wanderingTraderCanBeLeashed); @@ -2201,7 +2201,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 } public boolean wardenRidable = false; -@@ -1967,6 +2095,7 @@ public class PurpurWorldConfig { +@@ -1991,6 +2119,7 @@ public class PurpurWorldConfig { public boolean witchRidableInWater = true; public boolean witchControllable = true; public double witchMaxHealth = 26.0D; @@ -2209,7 +2209,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 private void witchSettings() { witchRidable = getBoolean("mobs.witch.ridable", witchRidable); witchRidableInWater = getBoolean("mobs.witch.ridable-in-water", witchRidableInWater); -@@ -1977,6 +2106,7 @@ public class PurpurWorldConfig { +@@ -2001,6 +2130,7 @@ public class PurpurWorldConfig { set("mobs.witch.attributes.max_health", oldValue); } witchMaxHealth = getDouble("mobs.witch.attributes.max_health", witchMaxHealth); @@ -2217,7 +2217,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 } public boolean witherRidable = false; -@@ -1987,6 +2117,7 @@ public class PurpurWorldConfig { +@@ -2011,6 +2141,7 @@ public class PurpurWorldConfig { public float witherHealthRegenAmount = 1.0f; public int witherHealthRegenDelay = 20; public boolean witherBypassMobGriefing = false; @@ -2225,7 +2225,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 private void witherSettings() { witherRidable = getBoolean("mobs.wither.ridable", witherRidable); witherRidableInWater = getBoolean("mobs.wither.ridable-in-water", witherRidableInWater); -@@ -2005,12 +2136,14 @@ public class PurpurWorldConfig { +@@ -2029,12 +2160,14 @@ public class PurpurWorldConfig { witherHealthRegenAmount = (float) getDouble("mobs.wither.health-regen-amount", witherHealthRegenAmount); witherHealthRegenDelay = getInt("mobs.wither.health-regen-delay", witherHealthRegenDelay); witherBypassMobGriefing = getBoolean("mobs.wither.bypass-mob-griefing", witherBypassMobGriefing); @@ -2240,7 +2240,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 private void witherSkeletonSettings() { witherSkeletonRidable = getBoolean("mobs.wither_skeleton.ridable", witherSkeletonRidable); witherSkeletonRidableInWater = getBoolean("mobs.wither_skeleton.ridable-in-water", witherSkeletonRidableInWater); -@@ -2021,6 +2154,7 @@ public class PurpurWorldConfig { +@@ -2045,6 +2178,7 @@ public class PurpurWorldConfig { set("mobs.wither_skeleton.attributes.max_health", oldValue); } witherSkeletonMaxHealth = getDouble("mobs.wither_skeleton.attributes.max_health", witherSkeletonMaxHealth); @@ -2248,7 +2248,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 } public boolean wolfRidable = false; -@@ -2031,6 +2165,7 @@ public class PurpurWorldConfig { +@@ -2055,6 +2189,7 @@ public class PurpurWorldConfig { public boolean wolfMilkCuresRabies = true; public double wolfNaturalRabid = 0.0D; public int wolfBreedingTicks = 6000; @@ -2256,7 +2256,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 private void wolfSettings() { wolfRidable = getBoolean("mobs.wolf.ridable", wolfRidable); wolfRidableInWater = getBoolean("mobs.wolf.ridable-in-water", wolfRidableInWater); -@@ -2049,12 +2184,14 @@ public class PurpurWorldConfig { +@@ -2073,12 +2208,14 @@ public class PurpurWorldConfig { wolfMilkCuresRabies = getBoolean("mobs.wolf.milk-cures-rabid-wolves", wolfMilkCuresRabies); wolfNaturalRabid = getDouble("mobs.wolf.spawn-rabid-chance", wolfNaturalRabid); wolfBreedingTicks = getInt("mobs.wolf.breeding-delay-ticks", wolfBreedingTicks); @@ -2271,7 +2271,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 private void zoglinSettings() { zoglinRidable = getBoolean("mobs.zoglin.ridable", zoglinRidable); zoglinRidableInWater = getBoolean("mobs.zoglin.ridable-in-water", zoglinRidableInWater); -@@ -2065,6 +2202,7 @@ public class PurpurWorldConfig { +@@ -2089,6 +2226,7 @@ public class PurpurWorldConfig { set("mobs.zoglin.attributes.max_health", oldValue); } zoglinMaxHealth = getDouble("mobs.zoglin.attributes.max_health", zoglinMaxHealth); @@ -2279,7 +2279,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 } public boolean zombieRidable = false; -@@ -2077,6 +2215,7 @@ public class PurpurWorldConfig { +@@ -2101,6 +2239,7 @@ public class PurpurWorldConfig { public boolean zombieJockeyTryExistingChickens = true; public boolean zombieAggressiveTowardsVillagerWhenLagging = true; public boolean zombieBypassMobGriefing = false; @@ -2287,7 +2287,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 private void zombieSettings() { zombieRidable = getBoolean("mobs.zombie.ridable", zombieRidable); zombieRidableInWater = getBoolean("mobs.zombie.ridable-in-water", zombieRidableInWater); -@@ -2093,6 +2232,7 @@ public class PurpurWorldConfig { +@@ -2117,6 +2256,7 @@ public class PurpurWorldConfig { zombieJockeyTryExistingChickens = getBoolean("mobs.zombie.jockey.try-existing-chickens", zombieJockeyTryExistingChickens); zombieAggressiveTowardsVillagerWhenLagging = getBoolean("mobs.zombie.aggressive-towards-villager-when-lagging", zombieAggressiveTowardsVillagerWhenLagging); zombieBypassMobGriefing = getBoolean("mobs.zombie.bypass-mob-griefing", zombieBypassMobGriefing); @@ -2295,7 +2295,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 } public boolean zombieHorseRidable = false; -@@ -2105,6 +2245,7 @@ public class PurpurWorldConfig { +@@ -2129,6 +2269,7 @@ public class PurpurWorldConfig { public double zombieHorseMovementSpeedMin = 0.2D; public double zombieHorseMovementSpeedMax = 0.2D; public double zombieHorseSpawnChance = 0.0D; @@ -2303,7 +2303,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 private void zombieHorseSettings() { zombieHorseRidable = getBoolean("mobs.zombie_horse.ridable", zombieHorseRidable); zombieHorseRidableInWater = getBoolean("mobs.zombie_horse.ridable-in-water", zombieHorseRidableInWater); -@@ -2122,6 +2263,7 @@ public class PurpurWorldConfig { +@@ -2146,6 +2287,7 @@ public class PurpurWorldConfig { zombieHorseMovementSpeedMin = getDouble("mobs.zombie_horse.attributes.movement_speed.min", zombieHorseMovementSpeedMin); zombieHorseMovementSpeedMax = getDouble("mobs.zombie_horse.attributes.movement_speed.max", zombieHorseMovementSpeedMax); zombieHorseSpawnChance = getDouble("mobs.zombie_horse.spawn-chance", zombieHorseSpawnChance); @@ -2311,7 +2311,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 } public boolean zombieVillagerRidable = false; -@@ -2132,6 +2274,7 @@ public class PurpurWorldConfig { +@@ -2156,6 +2298,7 @@ public class PurpurWorldConfig { public boolean zombieVillagerJockeyOnlyBaby = true; public double zombieVillagerJockeyChance = 0.05D; public boolean zombieVillagerJockeyTryExistingChickens = true; @@ -2319,7 +2319,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 private void zombieVillagerSettings() { zombieVillagerRidable = getBoolean("mobs.zombie_villager.ridable", zombieVillagerRidable); zombieVillagerRidableInWater = getBoolean("mobs.zombie_villager.ridable-in-water", zombieVillagerRidableInWater); -@@ -2146,6 +2289,7 @@ public class PurpurWorldConfig { +@@ -2170,6 +2313,7 @@ public class PurpurWorldConfig { zombieVillagerJockeyOnlyBaby = getBoolean("mobs.zombie_villager.jockey.only-babies", zombieVillagerJockeyOnlyBaby); zombieVillagerJockeyChance = getDouble("mobs.zombie_villager.jockey.chance", zombieVillagerJockeyChance); zombieVillagerJockeyTryExistingChickens = getBoolean("mobs.zombie_villager.jockey.try-existing-chickens", zombieVillagerJockeyTryExistingChickens); @@ -2327,7 +2327,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 } public boolean zombifiedPiglinRidable = false; -@@ -2157,6 +2301,7 @@ public class PurpurWorldConfig { +@@ -2181,6 +2325,7 @@ public class PurpurWorldConfig { public double zombifiedPiglinJockeyChance = 0.05D; public boolean zombifiedPiglinJockeyTryExistingChickens = true; public boolean zombifiedPiglinCountAsPlayerKillWhenAngry = true; @@ -2335,7 +2335,7 @@ index 2c4cd5bdc6815d03a5063a38ad913090a2cb5327..56bc524e760de6fa18eab40d1c590f51 private void zombifiedPiglinSettings() { zombifiedPiglinRidable = getBoolean("mobs.zombified_piglin.ridable", zombifiedPiglinRidable); zombifiedPiglinRidableInWater = getBoolean("mobs.zombified_piglin.ridable-in-water", zombifiedPiglinRidableInWater); -@@ -2172,5 +2317,6 @@ public class PurpurWorldConfig { +@@ -2196,5 +2341,6 @@ public class PurpurWorldConfig { zombifiedPiglinJockeyChance = getDouble("mobs.zombified_piglin.jockey.chance", zombifiedPiglinJockeyChance); zombifiedPiglinJockeyTryExistingChickens = getBoolean("mobs.zombified_piglin.jockey.try-existing-chickens", zombifiedPiglinJockeyTryExistingChickens); zombifiedPiglinCountAsPlayerKillWhenAngry = getBoolean("mobs.zombified_piglin.count-as-player-kill-when-angry", zombifiedPiglinCountAsPlayerKillWhenAngry); diff --git a/patches/server/0127-Configs-for-if-Wither-Ender-Dragon-can-ride-vehicles.patch b/patches/server/0127-Configs-for-if-Wither-Ender-Dragon-can-ride-vehicles.patch index 8e440c4a0..d0e9ecdef 100644 --- a/patches/server/0127-Configs-for-if-Wither-Ender-Dragon-can-ride-vehicles.patch +++ b/patches/server/0127-Configs-for-if-Wither-Ender-Dragon-can-ride-vehicles.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Configs for if Wither/Ender Dragon can ride vehicles 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 bf657ed6a27ce5da5621a3e14b0bf41ea0c4c8c9..3da1f7a6e443954e4976dd59391ea19b9c903cf7 100644 +index cf8d41f85bbd89c3fb4613372fd550bda004504b..52e1dd6e064dc03312e18ca515a24e7d3e9be957 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 @@ -1188,6 +1188,7 @@ public class EnderDragon extends Mob implements Enemy { @@ -29,10 +29,10 @@ index 948e5747d8d280695dd903a29b9c9f9dae9a44c1..6752a0039fac041e9bdd25327cdf20d3 } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 9de44dd59e69d709490290cf07b7c75889ac8387..d56aa23ea97e6cd7e1b5824fc46d1b6c0ee23a2d 100644 +index ca36a967a5c3684d7a3410f0c3beab5c72dc42ed..6f1a41c30f78ca88ddd1109889d0afe4aad226a2 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -948,6 +948,7 @@ public class PurpurWorldConfig { +@@ -972,6 +972,7 @@ public class PurpurWorldConfig { public boolean enderDragonAlwaysDropsFullExp = false; public boolean enderDragonBypassMobGriefing = false; public boolean enderDragonTakeDamageFromWater = false; @@ -40,7 +40,7 @@ index 9de44dd59e69d709490290cf07b7c75889ac8387..d56aa23ea97e6cd7e1b5824fc46d1b6c private void enderDragonSettings() { enderDragonRidable = getBoolean("mobs.ender_dragon.ridable", enderDragonRidable); enderDragonRidableInWater = getBoolean("mobs.ender_dragon.ridable-in-water", enderDragonRidableInWater); -@@ -966,6 +967,7 @@ public class PurpurWorldConfig { +@@ -990,6 +991,7 @@ public class PurpurWorldConfig { enderDragonAlwaysDropsFullExp = getBoolean("mobs.ender_dragon.always-drop-full-exp", enderDragonAlwaysDropsFullExp); enderDragonBypassMobGriefing = getBoolean("mobs.ender_dragon.bypass-mob-griefing", enderDragonBypassMobGriefing); enderDragonTakeDamageFromWater = getBoolean("mobs.ender_dragon.takes-damage-from-water", enderDragonTakeDamageFromWater); @@ -48,7 +48,7 @@ index 9de44dd59e69d709490290cf07b7c75889ac8387..d56aa23ea97e6cd7e1b5824fc46d1b6c } public boolean endermanRidable = false; -@@ -2157,6 +2159,7 @@ public class PurpurWorldConfig { +@@ -2181,6 +2183,7 @@ public class PurpurWorldConfig { public int witherHealthRegenDelay = 20; public boolean witherBypassMobGriefing = false; public boolean witherTakeDamageFromWater = false; @@ -56,7 +56,7 @@ index 9de44dd59e69d709490290cf07b7c75889ac8387..d56aa23ea97e6cd7e1b5824fc46d1b6c private void witherSettings() { witherRidable = getBoolean("mobs.wither.ridable", witherRidable); witherRidableInWater = getBoolean("mobs.wither.ridable-in-water", witherRidableInWater); -@@ -2176,6 +2179,7 @@ public class PurpurWorldConfig { +@@ -2200,6 +2203,7 @@ public class PurpurWorldConfig { witherHealthRegenDelay = getInt("mobs.wither.health-regen-delay", witherHealthRegenDelay); witherBypassMobGriefing = getBoolean("mobs.wither.bypass-mob-griefing", witherBypassMobGriefing); witherTakeDamageFromWater = getBoolean("mobs.wither.takes-damage-from-water", witherTakeDamageFromWater); diff --git a/patches/server/0133-Config-Enderman-aggressiveness-towards-Endermites.patch b/patches/server/0133-Config-Enderman-aggressiveness-towards-Endermites.patch index 0ef7d7bfe..6eb82e5d5 100644 --- a/patches/server/0133-Config-Enderman-aggressiveness-towards-Endermites.patch +++ b/patches/server/0133-Config-Enderman-aggressiveness-towards-Endermites.patch @@ -18,10 +18,10 @@ index 17b044e58d2ed33ed16e60f4fd4f63b2ee3f854d..4821aec304399c64cbcff741334567a0 } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index afcde828b7f39affd26cf3a52b744e0b37140694..3736b6a5be1c4eea48416c48822675e394b821f1 100644 +index 39f612bbe47c20e718c82d8259fd784139457608..5ff45015f6a902eacfbd7978d2abdcd64af43e0f 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -998,6 +998,8 @@ public class PurpurWorldConfig { +@@ -1022,6 +1022,8 @@ public class PurpurWorldConfig { public boolean endermanDespawnEvenWithBlock = false; public boolean endermanBypassMobGriefing = false; public boolean endermanTakeDamageFromWater = true; @@ -30,7 +30,7 @@ index afcde828b7f39affd26cf3a52b744e0b37140694..3736b6a5be1c4eea48416c48822675e3 private void endermanSettings() { endermanRidable = getBoolean("mobs.enderman.ridable", endermanRidable); endermanRidableInWater = getBoolean("mobs.enderman.ridable-in-water", endermanRidableInWater); -@@ -1007,11 +1009,17 @@ public class PurpurWorldConfig { +@@ -1031,11 +1033,17 @@ public class PurpurWorldConfig { set("mobs.enderman.attributes.max-health", null); set("mobs.enderman.attributes.max_health", oldValue); } diff --git a/patches/server/0134-Config-to-ignore-Dragon-Head-wearers-and-stare-aggro.patch b/patches/server/0134-Config-to-ignore-Dragon-Head-wearers-and-stare-aggro.patch index 3fc172e84..93a7f0380 100644 --- a/patches/server/0134-Config-to-ignore-Dragon-Head-wearers-and-stare-aggro.patch +++ b/patches/server/0134-Config-to-ignore-Dragon-Head-wearers-and-stare-aggro.patch @@ -20,10 +20,10 @@ index 4821aec304399c64cbcff741334567a08b840c0a..b361c6b4ca17b9d466555037235a5660 } else { Vec3 vec3d = player.getViewVector(1.0F).normalize(); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 3736b6a5be1c4eea48416c48822675e394b821f1..e3e0a5c0f241e7fe1fdd2be1bd1afe7752628b9e 100644 +index 5ff45015f6a902eacfbd7978d2abdcd64af43e0f..55f557d7e2aa8af8ae1ddf7a4225786ec5dca66f 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1000,6 +1000,8 @@ public class PurpurWorldConfig { +@@ -1024,6 +1024,8 @@ public class PurpurWorldConfig { public boolean endermanTakeDamageFromWater = true; public boolean endermanAggroEndermites = true; public boolean endermanAggroEndermitesOnlyIfPlayerSpawned = false; @@ -32,7 +32,7 @@ index 3736b6a5be1c4eea48416c48822675e394b821f1..e3e0a5c0f241e7fe1fdd2be1bd1afe77 private void endermanSettings() { endermanRidable = getBoolean("mobs.enderman.ridable", endermanRidable); endermanRidableInWater = getBoolean("mobs.enderman.ridable-in-water", endermanRidableInWater); -@@ -1020,6 +1022,8 @@ public class PurpurWorldConfig { +@@ -1044,6 +1046,8 @@ public class PurpurWorldConfig { endermanTakeDamageFromWater = getBoolean("mobs.enderman.takes-damage-from-water", endermanTakeDamageFromWater); endermanAggroEndermites = getBoolean("mobs.enderman.aggressive-towards-endermites", endermanAggroEndermites); endermanAggroEndermitesOnlyIfPlayerSpawned = getBoolean("mobs.enderman.aggressive-towards-endermites-only-spawned-by-player-thrown-ender-pearls", endermanAggroEndermitesOnlyIfPlayerSpawned); diff --git a/patches/server/0136-Config-to-disable-Llama-caravans.patch b/patches/server/0136-Config-to-disable-Llama-caravans.patch index ec2ab9567..d261f9a15 100644 --- a/patches/server/0136-Config-to-disable-Llama-caravans.patch +++ b/patches/server/0136-Config-to-disable-Llama-caravans.patch @@ -32,10 +32,10 @@ index 876b06fd6a371caa6cc71026a3b2f7a111c89dc8..6f744c07d01d5e01dda5aa5cdcf9a29f this.caravanHead.caravanTail = this; } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index da536052d5ed82e143081efa954a1ed501ce989b..76d0e6d1982167723e13a6621750730e59a86831 100644 +index dded70c26660fca43ce3972732c8c6d4b97f97d3..00da299988f63aae34c409064074e30fd9bf3aa5 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1332,6 +1332,7 @@ public class PurpurWorldConfig { +@@ -1356,6 +1356,7 @@ public class PurpurWorldConfig { public double llamaMovementSpeedMax = 0.175D; public int llamaBreedingTicks = 6000; public boolean llamaTakeDamageFromWater = false; @@ -43,7 +43,7 @@ index da536052d5ed82e143081efa954a1ed501ce989b..76d0e6d1982167723e13a6621750730e private void llamaSettings() { llamaRidable = getBoolean("mobs.llama.ridable", llamaRidable); llamaRidableInWater = getBoolean("mobs.llama.ridable-in-water", llamaRidableInWater); -@@ -1351,6 +1352,7 @@ public class PurpurWorldConfig { +@@ -1375,6 +1376,7 @@ public class PurpurWorldConfig { llamaMovementSpeedMax = getDouble("mobs.llama.attributes.movement_speed.max", llamaMovementSpeedMax); llamaBreedingTicks = getInt("mobs.llama.breeding-delay-ticks", llamaBreedingTicks); llamaTakeDamageFromWater = getBoolean("mobs.llama.takes-damage-from-water", llamaTakeDamageFromWater); diff --git a/patches/server/0137-Config-to-make-Creepers-explode-on-death.patch b/patches/server/0137-Config-to-make-Creepers-explode-on-death.patch index f5bdb4084..b48905ac6 100644 --- a/patches/server/0137-Config-to-make-Creepers-explode-on-death.patch +++ b/patches/server/0137-Config-to-make-Creepers-explode-on-death.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Config to make Creepers explode on death Creepers exploded after being killed in the alpha days. This brings that back. diff --git a/src/main/java/net/minecraft/world/entity/monster/Creeper.java b/src/main/java/net/minecraft/world/entity/monster/Creeper.java -index a9523b156eb88646ef82ee857d5f68360b12a753..af6f2fd2f2f48b8057cfb0462a0e72a86a1f83e3 100644 +index 1d5fe70f910afa3a21cc0f53327c83fd27d94e0e..4ef5824685f7938f549062a9becf5b7c3c1f7604 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Creeper.java +++ b/src/main/java/net/minecraft/world/entity/monster/Creeper.java @@ -65,6 +65,7 @@ public class Creeper extends Monster implements PowerableMob { @@ -50,10 +50,10 @@ index a9523b156eb88646ef82ee857d5f68360b12a753..af6f2fd2f2f48b8057cfb0462a0e72a8 private void spawnLingeringCloud() { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 3045fff19b9f9c35ed1b2e14894f6b5aa8442817..3a730b7d187ba043fc8f3f0ca7412ec44e352fba 100644 +index 00da299988f63aae34c409064074e30fd9bf3aa5..d0a175c7a42ab8cb11a5b965a5951542b38d054f 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -852,6 +852,7 @@ public class PurpurWorldConfig { +@@ -876,6 +876,7 @@ public class PurpurWorldConfig { public boolean creeperAllowGriefing = true; public boolean creeperBypassMobGriefing = false; public boolean creeperTakeDamageFromWater = false; @@ -61,7 +61,7 @@ index 3045fff19b9f9c35ed1b2e14894f6b5aa8442817..3a730b7d187ba043fc8f3f0ca7412ec4 private void creeperSettings() { creeperRidable = getBoolean("mobs.creeper.ridable", creeperRidable); creeperRidableInWater = getBoolean("mobs.creeper.ridable-in-water", creeperRidableInWater); -@@ -866,6 +867,7 @@ public class PurpurWorldConfig { +@@ -890,6 +891,7 @@ public class PurpurWorldConfig { creeperAllowGriefing = getBoolean("mobs.creeper.allow-griefing", creeperAllowGriefing); creeperBypassMobGriefing = getBoolean("mobs.creeper.bypass-mob-griefing", creeperBypassMobGriefing); creeperTakeDamageFromWater = getBoolean("mobs.creeper.takes-damage-from-water", creeperTakeDamageFromWater); diff --git a/patches/server/0138-Configurable-ravager-griefable-blocks-list.patch b/patches/server/0138-Configurable-ravager-griefable-blocks-list.patch index e4e120f7a..7df6a87e2 100644 --- a/patches/server/0138-Configurable-ravager-griefable-blocks-list.patch +++ b/patches/server/0138-Configurable-ravager-griefable-blocks-list.patch @@ -31,10 +31,10 @@ index 2af4c365743b2956939335512f74e0a1d84298f7..a69e7e8da81bd13578d230cc1e3f0f90 } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 3a730b7d187ba043fc8f3f0ca7412ec44e352fba..9ec5bae4a4caee44d84dd77b8be6b5c4b4b05b3e 100644 +index d0a175c7a42ab8cb11a5b965a5951542b38d054f..8d4b0fdcd40439981723a51759d6e68f0528846f 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1704,6 +1704,7 @@ public class PurpurWorldConfig { +@@ -1728,6 +1728,7 @@ public class PurpurWorldConfig { public double ravagerMaxHealth = 100.0D; public boolean ravagerBypassMobGriefing = false; public boolean ravagerTakeDamageFromWater = false; @@ -42,7 +42,7 @@ index 3a730b7d187ba043fc8f3f0ca7412ec44e352fba..9ec5bae4a4caee44d84dd77b8be6b5c4 private void ravagerSettings() { ravagerRidable = getBoolean("mobs.ravager.ridable", ravagerRidable); ravagerRidableInWater = getBoolean("mobs.ravager.ridable-in-water", ravagerRidableInWater); -@@ -1716,6 +1717,23 @@ public class PurpurWorldConfig { +@@ -1740,6 +1741,23 @@ public class PurpurWorldConfig { ravagerMaxHealth = getDouble("mobs.ravager.attributes.max_health", ravagerMaxHealth); ravagerBypassMobGriefing = getBoolean("mobs.ravager.bypass-mob-griefing", ravagerBypassMobGriefing); ravagerTakeDamageFromWater = getBoolean("mobs.ravager.takes-damage-from-water", ravagerTakeDamageFromWater); diff --git a/patches/server/0141-Add-config-for-villager-trading.patch b/patches/server/0141-Add-config-for-villager-trading.patch index 2a72a25f9..beed408c8 100644 --- a/patches/server/0141-Add-config-for-villager-trading.patch +++ b/patches/server/0141-Add-config-for-villager-trading.patch @@ -31,10 +31,10 @@ index c192f4cc5fd9cb0cf40083c4297f649ab909649d..0d11200ab580cc306602c29c61f76195 this.openTradingScreen(player, this.getDisplayName(), 1); } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 94f0eea598ee9908dd58efd7f4d5f6841bc9a003..9ad20a137f6cf35776e0e9cafe03c0dd475501b0 100644 +index a457b2c3fbf8d8c7c90e4568cd4fbeaa7a59599c..06945b8ffefb2ab8a9a5c6c7623f4a41fc81356c 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2124,6 +2124,7 @@ public class PurpurWorldConfig { +@@ -2148,6 +2148,7 @@ public class PurpurWorldConfig { public boolean villagerClericFarmersThrowWarts = true; public boolean villagerBypassMobGriefing = false; public boolean villagerTakeDamageFromWater = false; @@ -42,7 +42,7 @@ index 94f0eea598ee9908dd58efd7f4d5f6841bc9a003..9ad20a137f6cf35776e0e9cafe03c0dd private void villagerSettings() { villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); -@@ -2142,6 +2143,7 @@ public class PurpurWorldConfig { +@@ -2166,6 +2167,7 @@ public class PurpurWorldConfig { villagerClericFarmersThrowWarts = getBoolean("mobs.villager.cleric-wart-farmers-throw-warts-at-villagers", villagerClericFarmersThrowWarts); villagerBypassMobGriefing = getBoolean("mobs.villager.bypass-mob-griefing", villagerBypassMobGriefing); villagerTakeDamageFromWater = getBoolean("mobs.villager.takes-damage-from-water", villagerTakeDamageFromWater); @@ -50,7 +50,7 @@ index 94f0eea598ee9908dd58efd7f4d5f6841bc9a003..9ad20a137f6cf35776e0e9cafe03c0dd } public boolean vindicatorRidable = false; -@@ -2171,6 +2173,7 @@ public class PurpurWorldConfig { +@@ -2195,6 +2197,7 @@ public class PurpurWorldConfig { public boolean wanderingTraderFollowEmeraldBlock = false; public boolean wanderingTraderCanBeLeashed = false; public boolean wanderingTraderTakeDamageFromWater = false; @@ -58,7 +58,7 @@ index 94f0eea598ee9908dd58efd7f4d5f6841bc9a003..9ad20a137f6cf35776e0e9cafe03c0dd private void wanderingTraderSettings() { wanderingTraderRidable = getBoolean("mobs.wandering_trader.ridable", wanderingTraderRidable); wanderingTraderRidableInWater = getBoolean("mobs.wandering_trader.ridable-in-water", wanderingTraderRidableInWater); -@@ -2184,6 +2187,7 @@ public class PurpurWorldConfig { +@@ -2208,6 +2211,7 @@ public class PurpurWorldConfig { wanderingTraderFollowEmeraldBlock = getBoolean("mobs.wandering_trader.follow-emerald-blocks", wanderingTraderFollowEmeraldBlock); wanderingTraderCanBeLeashed = getBoolean("mobs.wandering_trader.can-be-leashed", wanderingTraderCanBeLeashed); wanderingTraderTakeDamageFromWater = getBoolean("mobs.wandering_trader.takes-damage-from-water", wanderingTraderTakeDamageFromWater); diff --git a/patches/server/0152-Piglin-portal-spawn-modifier.patch b/patches/server/0152-Piglin-portal-spawn-modifier.patch index 1ef7cd6e3..0c349fed8 100644 --- a/patches/server/0152-Piglin-portal-spawn-modifier.patch +++ b/patches/server/0152-Piglin-portal-spawn-modifier.patch @@ -31,10 +31,10 @@ index 67060b7446535fc352d221d9fe3928d1d6ffcf54..8d5e841d8cc69bf09a9f1b6248633a72 pos = pos.below(); } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 57ac8480bc6bb324366bbdd30718eb5df6a7d69b..518973f15f10d68039675dfcedfbeb5d2324a989 100644 +index ff178d4c2db6f4ce600ec0cc7ee2e00994efbc68..a2b832b0cfd2325e1cf6ed7b673a7837c808d419 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1648,6 +1648,7 @@ public class PurpurWorldConfig { +@@ -1672,6 +1672,7 @@ public class PurpurWorldConfig { public double piglinMaxHealth = 16.0D; public boolean piglinBypassMobGriefing = false; public boolean piglinTakeDamageFromWater = false; @@ -42,7 +42,7 @@ index 57ac8480bc6bb324366bbdd30718eb5df6a7d69b..518973f15f10d68039675dfcedfbeb5d private void piglinSettings() { piglinRidable = getBoolean("mobs.piglin.ridable", piglinRidable); piglinRidableInWater = getBoolean("mobs.piglin.ridable-in-water", piglinRidableInWater); -@@ -1660,6 +1661,7 @@ public class PurpurWorldConfig { +@@ -1684,6 +1685,7 @@ public class PurpurWorldConfig { piglinMaxHealth = getDouble("mobs.piglin.attributes.max_health", piglinMaxHealth); piglinBypassMobGriefing = getBoolean("mobs.piglin.bypass-mob-griefing", piglinBypassMobGriefing); piglinTakeDamageFromWater = getBoolean("mobs.piglin.takes-damage-from-water", piglinTakeDamageFromWater); diff --git a/patches/server/0154-Config-for-wither-explosion-radius.patch b/patches/server/0154-Config-for-wither-explosion-radius.patch index 6b368ede8..8186d9e89 100644 --- a/patches/server/0154-Config-for-wither-explosion-radius.patch +++ b/patches/server/0154-Config-for-wither-explosion-radius.patch @@ -18,10 +18,10 @@ index c753f715710ec4bb8337e035ac5a4c11371a84a0..a60d7f7baab005afc532ecec7aa22c53 if (!event.isCancelled()) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 518973f15f10d68039675dfcedfbeb5d2324a989..3a298515545972bb06a2f214aa35fb579bbac3de 100644 +index a2b832b0cfd2325e1cf6ed7b673a7837c808d419..fe8955f3c5891b1127f80744bb7c7418352b246c 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2291,6 +2291,7 @@ public class PurpurWorldConfig { +@@ -2315,6 +2315,7 @@ public class PurpurWorldConfig { public boolean witherBypassMobGriefing = false; public boolean witherTakeDamageFromWater = false; public boolean witherCanRideVehicles = false; @@ -29,7 +29,7 @@ index 518973f15f10d68039675dfcedfbeb5d2324a989..3a298515545972bb06a2f214aa35fb57 private void witherSettings() { witherRidable = getBoolean("mobs.wither.ridable", witherRidable); witherRidableInWater = getBoolean("mobs.wither.ridable-in-water", witherRidableInWater); -@@ -2311,6 +2312,7 @@ public class PurpurWorldConfig { +@@ -2335,6 +2336,7 @@ public class PurpurWorldConfig { witherBypassMobGriefing = getBoolean("mobs.wither.bypass-mob-griefing", witherBypassMobGriefing); witherTakeDamageFromWater = getBoolean("mobs.wither.takes-damage-from-water", witherTakeDamageFromWater); witherCanRideVehicles = getBoolean("mobs.wither.can-ride-vehicles", witherCanRideVehicles); diff --git a/patches/server/0160-Config-for-health-to-impact-Creeper-explosion-radius.patch b/patches/server/0160-Config-for-health-to-impact-Creeper-explosion-radius.patch index 48baffaa1..5802e30d5 100644 --- a/patches/server/0160-Config-for-health-to-impact-Creeper-explosion-radius.patch +++ b/patches/server/0160-Config-for-health-to-impact-Creeper-explosion-radius.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Config for health to impact Creeper explosion radius diff --git a/src/main/java/net/minecraft/world/entity/monster/Creeper.java b/src/main/java/net/minecraft/world/entity/monster/Creeper.java -index af6f2fd2f2f48b8057cfb0462a0e72a86a1f83e3..039ae2b694800e0bcd9844be85ad29a001ce52c0 100644 +index 4ef5824685f7938f549062a9becf5b7c3c1f7604..b029cff4f64c8cb146b2a23fa5d497c8d27134db 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Creeper.java +++ b/src/main/java/net/minecraft/world/entity/monster/Creeper.java @@ -370,9 +370,10 @@ public class Creeper extends Monster implements PowerableMob { @@ -21,10 +21,10 @@ index af6f2fd2f2f48b8057cfb0462a0e72a86a1f83e3..039ae2b694800e0bcd9844be85ad29a0 // 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 bc6d8925d1124a138af8918146764ed2bc7b9f27..77af32b0e98aaf49add6ca97ff00c6024bcc2cfd 100644 +index bbc52aff2bd53b41f3f4156876d332a3df2f8eec..0c8a4ae5aaf472fcabafd9fdcf10aca3d3ba8e82 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -929,6 +929,7 @@ public class PurpurWorldConfig { +@@ -953,6 +953,7 @@ public class PurpurWorldConfig { public boolean creeperBypassMobGriefing = false; public boolean creeperTakeDamageFromWater = false; public boolean creeperExplodeWhenKilled = false; @@ -32,7 +32,7 @@ index bc6d8925d1124a138af8918146764ed2bc7b9f27..77af32b0e98aaf49add6ca97ff00c602 private void creeperSettings() { creeperRidable = getBoolean("mobs.creeper.ridable", creeperRidable); creeperRidableInWater = getBoolean("mobs.creeper.ridable-in-water", creeperRidableInWater); -@@ -944,6 +945,7 @@ public class PurpurWorldConfig { +@@ -968,6 +969,7 @@ public class PurpurWorldConfig { creeperBypassMobGriefing = getBoolean("mobs.creeper.bypass-mob-griefing", creeperBypassMobGriefing); creeperTakeDamageFromWater = getBoolean("mobs.creeper.takes-damage-from-water", creeperTakeDamageFromWater); creeperExplodeWhenKilled = getBoolean("mobs.creeper.explode-when-killed", creeperExplodeWhenKilled); diff --git a/patches/server/0161-Iron-golem-calm-anger-options.patch b/patches/server/0161-Iron-golem-calm-anger-options.patch index 3a31b700a..335a405e2 100644 --- a/patches/server/0161-Iron-golem-calm-anger-options.patch +++ b/patches/server/0161-Iron-golem-calm-anger-options.patch @@ -25,10 +25,10 @@ index 9c86d86a6d89585cfbdace89e66866f496da86cb..fa81b12fc38a20b8ec39155259fb75c1 } } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 77af32b0e98aaf49add6ca97ff00c6024bcc2cfd..0e8829422bd7239523c80048be1aa8c3a17480b1 100644 +index 0c8a4ae5aaf472fcabafd9fdcf10aca3d3ba8e82..77fc605bac101503a763ed4b28a2dc733ef950bb 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1387,6 +1387,8 @@ public class PurpurWorldConfig { +@@ -1411,6 +1411,8 @@ public class PurpurWorldConfig { public boolean ironGolemCanSwim = false; public double ironGolemMaxHealth = 100.0D; public boolean ironGolemTakeDamageFromWater = false; @@ -37,7 +37,7 @@ index 77af32b0e98aaf49add6ca97ff00c6024bcc2cfd..0e8829422bd7239523c80048be1aa8c3 private void ironGolemSettings() { ironGolemRidable = getBoolean("mobs.iron_golem.ridable", ironGolemRidable); ironGolemRidableInWater = getBoolean("mobs.iron_golem.ridable-in-water", ironGolemRidableInWater); -@@ -1399,6 +1401,8 @@ public class PurpurWorldConfig { +@@ -1423,6 +1425,8 @@ public class PurpurWorldConfig { } ironGolemMaxHealth = getDouble("mobs.iron_golem.attributes.max_health", ironGolemMaxHealth); ironGolemTakeDamageFromWater = getBoolean("mobs.iron_golem.takes-damage-from-water", ironGolemTakeDamageFromWater); diff --git a/patches/server/0162-Breedable-parrots.patch b/patches/server/0162-Breedable-parrots.patch index d017c922c..4ea298392 100644 --- a/patches/server/0162-Breedable-parrots.patch +++ b/patches/server/0162-Breedable-parrots.patch @@ -50,10 +50,10 @@ index 490d7f8ac402f50a2f2f90ca032169784a402c0f..65be3dd9bc6994cac828ed45b74a577b @Override diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 0e8829422bd7239523c80048be1aa8c3a17480b1..77f8952da7ee8476b685e6aef1f8e2441bca068e 100644 +index 77fc605bac101503a763ed4b28a2dc733ef950bb..9f784d1523180d7444ea56e1741907c141191b1a 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1557,6 +1557,7 @@ public class PurpurWorldConfig { +@@ -1581,6 +1581,7 @@ public class PurpurWorldConfig { public double parrotMaxY = 320D; public double parrotMaxHealth = 6.0D; public boolean parrotTakeDamageFromWater = false; @@ -61,7 +61,7 @@ index 0e8829422bd7239523c80048be1aa8c3a17480b1..77f8952da7ee8476b685e6aef1f8e244 private void parrotSettings() { parrotRidable = getBoolean("mobs.parrot.ridable", parrotRidable); parrotRidableInWater = getBoolean("mobs.parrot.ridable-in-water", parrotRidableInWater); -@@ -1569,6 +1570,7 @@ public class PurpurWorldConfig { +@@ -1593,6 +1594,7 @@ public class PurpurWorldConfig { } parrotMaxHealth = getDouble("mobs.parrot.attributes.max_health", parrotMaxHealth); parrotTakeDamageFromWater = getBoolean("mobs.parrot.takes-damage-from-water", parrotTakeDamageFromWater); diff --git a/patches/server/0168-Bee-can-work-when-raining-or-at-night.patch b/patches/server/0168-Bee-can-work-when-raining-or-at-night.patch index e5f375fc3..1b08bd099 100644 --- a/patches/server/0168-Bee-can-work-when-raining-or-at-night.patch +++ b/patches/server/0168-Bee-can-work-when-raining-or-at-night.patch @@ -31,10 +31,10 @@ index f52823146944d333f2d050e90261b570ba66f5dd..d8efb00c325448d566c59418fe22268c return false; } else { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 9c9fea719a90e49147b6c2ae342a1437ea8b9be3..b3d24e076aef331f26ed5035f2015680f4a5c732 100644 +index 877084314fa51292ed597b073a2d4ec05854ddb4..e4148482239d8a5db7f02aa5678929b13b58b94d 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -765,6 +765,8 @@ public class PurpurWorldConfig { +@@ -778,6 +778,8 @@ public class PurpurWorldConfig { public double beeMaxHealth = 10.0D; public int beeBreedingTicks = 6000; public boolean beeTakeDamageFromWater = false; @@ -43,7 +43,7 @@ index 9c9fea719a90e49147b6c2ae342a1437ea8b9be3..b3d24e076aef331f26ed5035f2015680 private void beeSettings() { beeRidable = getBoolean("mobs.bee.ridable", beeRidable); beeRidableInWater = getBoolean("mobs.bee.ridable-in-water", beeRidableInWater); -@@ -778,6 +780,8 @@ public class PurpurWorldConfig { +@@ -791,6 +793,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/0176-Shulker-spawn-from-bullet-options.patch b/patches/server/0176-Shulker-spawn-from-bullet-options.patch index 6fb9062f5..86ad1e1f3 100644 --- a/patches/server/0176-Shulker-spawn-from-bullet-options.patch +++ b/patches/server/0176-Shulker-spawn-from-bullet-options.patch @@ -68,10 +68,10 @@ index 2202798612cad53aff28c499b8909a7292a37ad5..5ed2b7d15686fc9aa6dc7c03c337433c + // Purpur end } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 8e92de376b23fc2efcc4e5e65cd988d176399f9f..fbac1586ee666fa9ca22fb0bf2797b0913bf3788 100644 +index 6fdc949215bbc7a0e77dd3b3b5e16e5ecf34b6d8..c61fc22105be2c70a06bb88aa1912fa5349d6f60 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1908,6 +1908,11 @@ public class PurpurWorldConfig { +@@ -1932,6 +1932,11 @@ public class PurpurWorldConfig { public boolean shulkerControllable = true; public double shulkerMaxHealth = 30.0D; public boolean shulkerTakeDamageFromWater = false; @@ -83,7 +83,7 @@ index 8e92de376b23fc2efcc4e5e65cd988d176399f9f..fbac1586ee666fa9ca22fb0bf2797b09 private void shulkerSettings() { shulkerRidable = getBoolean("mobs.shulker.ridable", shulkerRidable); shulkerRidableInWater = getBoolean("mobs.shulker.ridable-in-water", shulkerRidableInWater); -@@ -1919,6 +1924,11 @@ public class PurpurWorldConfig { +@@ -1943,6 +1948,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/0178-Option-to-make-drowned-break-doors.patch b/patches/server/0178-Option-to-make-drowned-break-doors.patch index 006df04df..be15297b7 100644 --- a/patches/server/0178-Option-to-make-drowned-break-doors.patch +++ b/patches/server/0178-Option-to-make-drowned-break-doors.patch @@ -26,10 +26,10 @@ index f037d50f26f7532f11a71790448de7a71644b6ca..b3a79dc4357ad4392101353fbc99aac1 @Override diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index e880950eed7bda56e008c5a365314d175aa8ddb7..a23b90e4beba29adbe36e2dda2f7d85d5fd37693 100644 +index a3f6823471d7d93e2759fc8d905213cb53a01e9c..ab8317fd0b1714ff8c0aa18ddbd2fcd194b5f4d4 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1054,6 +1054,7 @@ public class PurpurWorldConfig { +@@ -1078,6 +1078,7 @@ public class PurpurWorldConfig { public double drownedJockeyChance = 0.05D; public boolean drownedJockeyTryExistingChickens = true; public boolean drownedTakeDamageFromWater = false; @@ -37,7 +37,7 @@ index e880950eed7bda56e008c5a365314d175aa8ddb7..a23b90e4beba29adbe36e2dda2f7d85d private void drownedSettings() { drownedRidable = getBoolean("mobs.drowned.ridable", drownedRidable); drownedRidableInWater = getBoolean("mobs.drowned.ridable-in-water", drownedRidableInWater); -@@ -1069,6 +1070,7 @@ public class PurpurWorldConfig { +@@ -1093,6 +1094,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/0179-Configurable-hunger-starvation-damage.patch b/patches/server/0179-Configurable-hunger-starvation-damage.patch index 0d9d7df22..e4285b825 100644 --- a/patches/server/0179-Configurable-hunger-starvation-damage.patch +++ b/patches/server/0179-Configurable-hunger-starvation-damage.patch @@ -18,10 +18,10 @@ index 08a6cca64ddd49826a0bbddd7711187c73bb4997..dd72d6a79139ff33f26a32b71283ce0b this.tickTimer = 0; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index b3a999c8ecaaf9e0dae83d0fe10f9f927f592b58..a9a2b09b985e3e4eb69d4ae16dfd40f46be936d6 100644 +index ab8317fd0b1714ff8c0aa18ddbd2fcd194b5f4d4..85e32ea2fa7b7da97848e98b398674281e50d3d2 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2567,4 +2567,9 @@ public class PurpurWorldConfig { +@@ -2591,4 +2591,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/0189-Config-to-disable-Enderman-teleport-on-projectile-hi.patch b/patches/server/0189-Config-to-disable-Enderman-teleport-on-projectile-hi.patch index 645ac77ce..ccfcb3ae2 100644 --- a/patches/server/0189-Config-to-disable-Enderman-teleport-on-projectile-hi.patch +++ b/patches/server/0189-Config-to-disable-Enderman-teleport-on-projectile-hi.patch @@ -17,10 +17,10 @@ index b361c6b4ca17b9d466555037235a5660caa5c9bd..21a570d09ad3e19e6c709ff1152db7d2 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 ee356e3174791f3c54abb8ddbf30694a3e9a87dc..ae67aa6cf66e64d5e7506c0ca7193a9ba8a986ce 100644 +index b94ad1875401682430b1336985d1c02c8ee05bef..42b12cadcfa4c8add6fca32db1a4e86c44ea9700 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1425,6 +1425,7 @@ public class PurpurWorldConfig { +@@ -1449,6 +1449,7 @@ public class PurpurWorldConfig { public boolean endermanAggroEndermitesOnlyIfPlayerSpawned = false; public boolean endermanIgnorePlayerDragonHead = false; public boolean endermanDisableStareAggro = false; @@ -28,7 +28,7 @@ index ee356e3174791f3c54abb8ddbf30694a3e9a87dc..ae67aa6cf66e64d5e7506c0ca7193a9b private void endermanSettings() { endermanRidable = getBoolean("mobs.enderman.ridable", endermanRidable); endermanRidableInWater = getBoolean("mobs.enderman.ridable-in-water", endermanRidableInWater); -@@ -1447,6 +1448,7 @@ public class PurpurWorldConfig { +@@ -1471,6 +1472,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/0193-Customizeable-Zombie-Villager-curing-times.patch b/patches/server/0193-Customizeable-Zombie-Villager-curing-times.patch index af8658aac..91eb56d3d 100644 --- a/patches/server/0193-Customizeable-Zombie-Villager-curing-times.patch +++ b/patches/server/0193-Customizeable-Zombie-Villager-curing-times.patch @@ -18,10 +18,10 @@ index 2ec3a09135f85a5de68e77511f3f213adf08712c..d909138942212ee090ff513b1817414c return InteractionResult.SUCCESS; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 4513d3e5441e1b68e890836e168c64e9b363f466..69753e7dc0fbc59a6e9d84479a5141a740e2fd15 100644 +index 3a819f6ca87f4f7e4a2354a273714818009d3bd7..b47a8a0f9da5bb92ed20c9f98c375b2deac826d4 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2828,6 +2828,8 @@ public class PurpurWorldConfig { +@@ -2852,6 +2852,8 @@ public class PurpurWorldConfig { public double zombieVillagerJockeyChance = 0.05D; public boolean zombieVillagerJockeyTryExistingChickens = true; public boolean zombieVillagerTakeDamageFromWater = false; @@ -30,7 +30,7 @@ index 4513d3e5441e1b68e890836e168c64e9b363f466..69753e7dc0fbc59a6e9d84479a5141a7 private void zombieVillagerSettings() { zombieVillagerRidable = getBoolean("mobs.zombie_villager.ridable", zombieVillagerRidable); zombieVillagerRidableInWater = getBoolean("mobs.zombie_villager.ridable-in-water", zombieVillagerRidableInWater); -@@ -2843,6 +2845,8 @@ public class PurpurWorldConfig { +@@ -2867,6 +2869,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/0195-Toggle-for-Wither-s-spawn-sound.patch b/patches/server/0195-Toggle-for-Wither-s-spawn-sound.patch index 104d0fc9d..39002bc9b 100644 --- a/patches/server/0195-Toggle-for-Wither-s-spawn-sound.patch +++ b/patches/server/0195-Toggle-for-Wither-s-spawn-sound.patch @@ -18,10 +18,10 @@ index 01d193d2584b62897687bd088fb590de8a4ab279..a030fe21a88a9486cc8367710a96af67 // 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 b69e224dc04758fec2bd0a2631848f4dc5a67b85..eb64ddde8162833ae522ea88befc2c837a3e6b53 100644 +index b86fe53c03a5af5cf0de6e749345cf86d82b4342..c2a6fa99729edf2926d437c2ef676966445501f2 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2673,6 +2673,7 @@ public class PurpurWorldConfig { +@@ -2697,6 +2697,7 @@ public class PurpurWorldConfig { public boolean witherTakeDamageFromWater = false; public boolean witherCanRideVehicles = false; public float witherExplosionRadius = 1.0F; @@ -29,7 +29,7 @@ index b69e224dc04758fec2bd0a2631848f4dc5a67b85..eb64ddde8162833ae522ea88befc2c83 private void witherSettings() { witherRidable = getBoolean("mobs.wither.ridable", witherRidable); witherRidableInWater = getBoolean("mobs.wither.ridable-in-water", witherRidableInWater); -@@ -2694,6 +2695,7 @@ public class PurpurWorldConfig { +@@ -2718,6 +2719,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/0198-Conduit-behavior-configuration.patch b/patches/server/0198-Conduit-behavior-configuration.patch index 88f09f8d8..713b3e468 100644 --- a/patches/server/0198-Conduit-behavior-configuration.patch +++ b/patches/server/0198-Conduit-behavior-configuration.patch @@ -97,10 +97,10 @@ index c1759aeb3e6ad0e4eb66cba3da1b120dd1dce812..1a91bc2e422db0eba65694ac046f1b36 @Override diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index a673122f46d4e4ad48e8c42e2d50e5ea2870df24..25c361154866194de70c5d2365c25b4c0148e877 100644 +index f24f9d3a1bb5587f26ce396238c5d6f564dda6e7..6ce7f636a24a096e451d31f8ea529e49efb3399a 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2894,4 +2894,27 @@ public class PurpurWorldConfig { +@@ -2918,4 +2918,27 @@ public class PurpurWorldConfig { private void hungerSettings() { hungerStarvationDamage = (float) getDouble("hunger.starvation-damage", hungerStarvationDamage); } diff --git a/patches/server/0199-Cauldron-fill-chances.patch b/patches/server/0199-Cauldron-fill-chances.patch index d7f48bf81..968fcf2e0 100644 --- a/patches/server/0199-Cauldron-fill-chances.patch +++ b/patches/server/0199-Cauldron-fill-chances.patch @@ -47,10 +47,10 @@ index a2bd54dae4b0460d200f6d5300194a7ef5a28830..bf189a171530abfc9bba5db5a305feb3 if (dripChance < f1) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 25c361154866194de70c5d2365c25b4c0148e877..0227caeb0efa2b9aa1d9e8cb1cb13997ebbb7a1c 100644 +index 6ce7f636a24a096e451d31f8ea529e49efb3399a..829bff6c8ba4e97b9ff72847e312c33e4f9c3cfb 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2917,4 +2917,15 @@ public class PurpurWorldConfig { +@@ -2941,4 +2941,15 @@ public class PurpurWorldConfig { }); conduitBlocks = conduitBlockList.toArray(Block[]::new); } diff --git a/patches/server/0201-Shulker-change-color-with-dye.patch b/patches/server/0201-Shulker-change-color-with-dye.patch index cce7a90c0..50c611f37 100644 --- a/patches/server/0201-Shulker-change-color-with-dye.patch +++ b/patches/server/0201-Shulker-change-color-with-dye.patch @@ -29,10 +29,10 @@ index 796f0a3d8dc8faf202e912fe44afb898d286a895..39b980eeb863fda008259a4b52e39393 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 70c7596c3a652ec10a7b744ec9b7d3a736281836..eef92b08d29af3e77821da58ab1910f940bba6ae 100644 +index 3d8064515223bae87f499d2496bc1faf74e77639..594c8834f4c23866862deec2d97ff3a5d35037b0 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2235,6 +2235,7 @@ public class PurpurWorldConfig { +@@ -2259,6 +2259,7 @@ public class PurpurWorldConfig { public double shulkerSpawnFromBulletNearbyRange = 8.0D; public String shulkerSpawnFromBulletNearbyEquation = "(nearby - 1) / 5.0"; public boolean shulkerSpawnFromBulletRandomColor = false; @@ -40,7 +40,7 @@ index 70c7596c3a652ec10a7b744ec9b7d3a736281836..eef92b08d29af3e77821da58ab1910f9 private void shulkerSettings() { shulkerRidable = getBoolean("mobs.shulker.ridable", shulkerRidable); shulkerRidableInWater = getBoolean("mobs.shulker.ridable-in-water", shulkerRidableInWater); -@@ -2251,6 +2252,7 @@ public class PurpurWorldConfig { +@@ -2275,6 +2276,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/0207-Dolphins-naturally-aggressive-to-players-chance.patch b/patches/server/0207-Dolphins-naturally-aggressive-to-players-chance.patch index e75951668..e4eeb086c 100644 --- a/patches/server/0207-Dolphins-naturally-aggressive-to-players-chance.patch +++ b/patches/server/0207-Dolphins-naturally-aggressive-to-players-chance.patch @@ -48,10 +48,10 @@ index 38112239035b0c66c429c0762199867e70e0a67a..e539eefb6e6d3172611d1f9185a11380 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 fb785f51d7774d31ed50f71f8048301fc2561ed0..b1a941d2747ca93354c9abb67df8419114f27ff7 100644 +index 28b497ad67d73a34c1eb09a5a3709d72823f9b5c..49a95c186ae1d2c8cf4474c9009304d3ee575494 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1333,6 +1333,7 @@ public class PurpurWorldConfig { +@@ -1357,6 +1357,7 @@ public class PurpurWorldConfig { public double dolphinMaxHealth = 10.0D; public boolean dolphinDisableTreasureSearching = false; public boolean dolphinTakeDamageFromWater = false; @@ -59,7 +59,7 @@ index fb785f51d7774d31ed50f71f8048301fc2561ed0..b1a941d2747ca93354c9abb67df84191 private void dolphinSettings() { dolphinRidable = getBoolean("mobs.dolphin.ridable", dolphinRidable); dolphinControllable = getBoolean("mobs.dolphin.controllable", dolphinControllable); -@@ -1347,6 +1348,7 @@ public class PurpurWorldConfig { +@@ -1371,6 +1372,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/0208-Cows-naturally-aggressive-to-players-chance.patch b/patches/server/0208-Cows-naturally-aggressive-to-players-chance.patch index 07c6bc04a..455d74123 100644 --- a/patches/server/0208-Cows-naturally-aggressive-to-players-chance.patch +++ b/patches/server/0208-Cows-naturally-aggressive-to-players-chance.patch @@ -61,10 +61,10 @@ index c519883f4ed3772378b5563401b8c557dc315ace..78f00014c034949b6559ca948b1b78fa @Override diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 0c705b36e729b45e802770f4e21a7bfbc9919b86..d5e06e7510193239f4e085cb315f736636c690d5 100644 +index 49a95c186ae1d2c8cf4474c9009304d3ee575494..83e477e180e20bf04ebd926b12aba37792d0e9bd 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1282,7 +1282,14 @@ public class PurpurWorldConfig { +@@ -1306,7 +1306,14 @@ public class PurpurWorldConfig { public int cowFeedMushrooms = 0; public int cowBreedingTicks = 6000; public boolean cowTakeDamageFromWater = false; @@ -79,7 +79,7 @@ index 0c705b36e729b45e802770f4e21a7bfbc9919b86..d5e06e7510193239f4e085cb315f7366 cowRidable = getBoolean("mobs.cow.ridable", cowRidable); cowRidableInWater = getBoolean("mobs.cow.ridable-in-water", cowRidableInWater); cowControllable = getBoolean("mobs.cow.controllable", cowControllable); -@@ -1295,6 +1302,8 @@ public class PurpurWorldConfig { +@@ -1319,6 +1326,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/0210-Halloween-options-and-optimizations.patch b/patches/server/0210-Halloween-options-and-optimizations.patch index 95eff8c09..057d9425f 100644 --- a/patches/server/0210-Halloween-options-and-optimizations.patch +++ b/patches/server/0210-Halloween-options-and-optimizations.patch @@ -60,10 +60,10 @@ index 53f7659aed2378b36f1923a0208c7f86048eb85b..d5a5e51e23328deac09d6990539d8207 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 613dcb1b68169c724dbf63a6327dab5b50dd4a8d..1b7ebd3fe3cefd1ca26957835a93e103641ddb7a 100644 +index 867820c14f2f22ee6dc2c744bf9de109d4d9daff..64276ffc7fb0cb27928442b0b4dc2f6db4ff46b8 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1675,6 +1675,13 @@ public class PurpurWorldConfig { +@@ -1699,6 +1699,13 @@ public class PurpurWorldConfig { guardianTakeDamageFromWater = getBoolean("mobs.guardian.takes-damage-from-water", guardianTakeDamageFromWater); } diff --git a/patches/server/0215-Add-option-to-disable-zombie-villagers-cure.patch b/patches/server/0215-Add-option-to-disable-zombie-villagers-cure.patch index 7fb8dcede..3f9fef356 100644 --- a/patches/server/0215-Add-option-to-disable-zombie-villagers-cure.patch +++ b/patches/server/0215-Add-option-to-disable-zombie-villagers-cure.patch @@ -18,10 +18,10 @@ index d909138942212ee090ff513b1817414c93457425..fe43c744cccdc07d5e449ce3ede85f4c if (!this.level().isClientSide) { this.startConverting(player.getUUID(), this.random.nextInt(level().purpurConfig.zombieVillagerCuringTimeMax - level().purpurConfig.zombieVillagerCuringTimeMin + 1) + level().purpurConfig.zombieVillagerCuringTimeMin); // Purpur diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index d005e045f5fc2a9442fb070ebf984f34785ecc9e..8d4c3c4a06d40841e8446485364393e36e686fdd 100644 +index 89a02d8e24fb8519eea6d25d4f91cef197b2b3cb..2d514ebbde1f97276cbb33bed640ec6adfa4cb5a 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2894,6 +2894,7 @@ public class PurpurWorldConfig { +@@ -2918,6 +2918,7 @@ public class PurpurWorldConfig { public boolean zombieVillagerTakeDamageFromWater = false; public int zombieVillagerCuringTimeMin = 3600; public int zombieVillagerCuringTimeMax = 6000; @@ -29,7 +29,7 @@ index d005e045f5fc2a9442fb070ebf984f34785ecc9e..8d4c3c4a06d40841e8446485364393e3 private void zombieVillagerSettings() { zombieVillagerRidable = getBoolean("mobs.zombie_villager.ridable", zombieVillagerRidable); zombieVillagerRidableInWater = getBoolean("mobs.zombie_villager.ridable-in-water", zombieVillagerRidableInWater); -@@ -2911,6 +2912,7 @@ public class PurpurWorldConfig { +@@ -2935,6 +2936,7 @@ public class PurpurWorldConfig { zombieVillagerTakeDamageFromWater = getBoolean("mobs.zombie_villager.takes-damage-from-water", zombieVillagerTakeDamageFromWater); zombieVillagerCuringTimeMin = getInt("mobs.zombie_villager.curing_time.min", zombieVillagerCuringTimeMin); zombieVillagerCuringTimeMax = getInt("mobs.zombie_villager.curing_time.max", zombieVillagerCuringTimeMax); diff --git a/patches/server/0219-Mobs-always-drop-experience.patch b/patches/server/0219-Mobs-always-drop-experience.patch index b60580243..55192c189 100644 --- a/patches/server/0219-Mobs-always-drop-experience.patch +++ b/patches/server/0219-Mobs-always-drop-experience.patch @@ -1157,10 +1157,10 @@ index 0d11200ab580cc306602c29c61f7619565d8261d..62f5e5cfe5745deced2811d14d0c7ebb 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 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c69d5a31f 100644 +index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522114d29e3 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1108,12 +1108,14 @@ public class PurpurWorldConfig { +@@ -1121,12 +1121,14 @@ public class PurpurWorldConfig { public double axolotlMaxHealth = 14.0D; public int axolotlBreedingTicks = 6000; public boolean axolotlTakeDamageFromWater = false; @@ -1175,7 +1175,7 @@ index 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c } public boolean batRidable = false; -@@ -1129,6 +1131,7 @@ public class PurpurWorldConfig { +@@ -1142,6 +1144,7 @@ public class PurpurWorldConfig { public double batArmorToughness = 0.0D; public double batAttackKnockback = 0.0D; public boolean batTakeDamageFromWater = false; @@ -1183,7 +1183,7 @@ index 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c private void batSettings() { batRidable = getBoolean("mobs.bat.ridable", batRidable); batRidableInWater = getBoolean("mobs.bat.ridable-in-water", batRidableInWater); -@@ -1148,6 +1151,7 @@ public class PurpurWorldConfig { +@@ -1161,6 +1164,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 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c } public boolean beeRidable = false; -@@ -1159,6 +1163,7 @@ public class PurpurWorldConfig { +@@ -1172,6 +1176,7 @@ public class PurpurWorldConfig { public boolean beeTakeDamageFromWater = false; public boolean beeCanWorkAtNight = false; public boolean beeCanWorkInRain = false; @@ -1199,7 +1199,7 @@ index 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c private void beeSettings() { beeRidable = getBoolean("mobs.bee.ridable", beeRidable); beeRidableInWater = getBoolean("mobs.bee.ridable-in-water", beeRidableInWater); -@@ -1174,6 +1179,7 @@ public class PurpurWorldConfig { +@@ -1187,6 +1192,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 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c } public boolean blazeRidable = false; -@@ -1182,6 +1188,7 @@ public class PurpurWorldConfig { +@@ -1195,6 +1201,7 @@ public class PurpurWorldConfig { public double blazeMaxY = 320D; public double blazeMaxHealth = 20.0D; public boolean blazeTakeDamageFromWater = true; @@ -1215,15 +1215,15 @@ index 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c private void blazeSettings() { blazeRidable = getBoolean("mobs.blaze.ridable", blazeRidable); blazeRidableInWater = getBoolean("mobs.blaze.ridable-in-water", blazeRidableInWater); -@@ -1194,6 +1201,7 @@ public class PurpurWorldConfig { +@@ -1207,6 +1214,7 @@ public class PurpurWorldConfig { } blazeMaxHealth = getDouble("mobs.blaze.attributes.max_health", blazeMaxHealth); blazeTakeDamageFromWater = getBoolean("mobs.blaze.takes-damage-from-water", blazeTakeDamageFromWater); + blazeAlwaysDropExp = getBoolean("mobs.blaze.always-drop-exp", blazeAlwaysDropExp); } - public boolean camelRidableInWater = false; -@@ -1225,6 +1233,7 @@ public class PurpurWorldConfig { + public boolean boggedRidable = false; +@@ -1249,6 +1257,7 @@ public class PurpurWorldConfig { public int catBreedingTicks = 6000; public DyeColor catDefaultCollarColor = DyeColor.RED; public boolean catTakeDamageFromWater = false; @@ -1231,7 +1231,7 @@ index 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c private void catSettings() { catRidable = getBoolean("mobs.cat.ridable", catRidable); catRidableInWater = getBoolean("mobs.cat.ridable-in-water", catRidableInWater); -@@ -1245,6 +1254,7 @@ public class PurpurWorldConfig { +@@ -1269,6 +1278,7 @@ public class PurpurWorldConfig { catDefaultCollarColor = DyeColor.RED; } catTakeDamageFromWater = getBoolean("mobs.cat.takes-damage-from-water", catTakeDamageFromWater); @@ -1239,7 +1239,7 @@ index 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c } public boolean caveSpiderRidable = false; -@@ -1252,6 +1262,7 @@ public class PurpurWorldConfig { +@@ -1276,6 +1286,7 @@ public class PurpurWorldConfig { public boolean caveSpiderControllable = true; public double caveSpiderMaxHealth = 12.0D; public boolean caveSpiderTakeDamageFromWater = false; @@ -1247,7 +1247,7 @@ index 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c private void caveSpiderSettings() { caveSpiderRidable = getBoolean("mobs.cave_spider.ridable", caveSpiderRidable); caveSpiderRidableInWater = getBoolean("mobs.cave_spider.ridable-in-water", caveSpiderRidableInWater); -@@ -1263,6 +1274,7 @@ public class PurpurWorldConfig { +@@ -1287,6 +1298,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 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c } public boolean chickenRidable = false; -@@ -1272,6 +1284,7 @@ public class PurpurWorldConfig { +@@ -1296,6 +1308,7 @@ public class PurpurWorldConfig { public boolean chickenRetaliate = false; public int chickenBreedingTicks = 6000; public boolean chickenTakeDamageFromWater = false; @@ -1263,7 +1263,7 @@ index 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c private void chickenSettings() { chickenRidable = getBoolean("mobs.chicken.ridable", chickenRidable); chickenRidableInWater = getBoolean("mobs.chicken.ridable-in-water", chickenRidableInWater); -@@ -1285,12 +1298,14 @@ public class PurpurWorldConfig { +@@ -1309,12 +1322,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 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c private void codSettings() { codRidable = getBoolean("mobs.cod.ridable", codRidable); codControllable = getBoolean("mobs.cod.controllable", codControllable); -@@ -1301,6 +1316,7 @@ public class PurpurWorldConfig { +@@ -1325,6 +1340,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 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c } public boolean cowRidable = false; -@@ -1312,6 +1328,7 @@ public class PurpurWorldConfig { +@@ -1336,6 +1352,7 @@ public class PurpurWorldConfig { public boolean cowTakeDamageFromWater = false; public double cowNaturallyAggressiveToPlayersChance = 0.0D; public double cowNaturallyAggressiveToPlayersDamage = 2.0D; @@ -1294,7 +1294,7 @@ index 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c private void cowSettings() { if (PurpurConfig.version < 22) { double oldValue = getDouble("mobs.cow.naturally-aggressive-to-players-chance", cowNaturallyAggressiveToPlayersChance); -@@ -1332,6 +1349,7 @@ public class PurpurWorldConfig { +@@ -1356,6 +1373,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 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c } public boolean creeperRidable = false; -@@ -1344,6 +1362,7 @@ public class PurpurWorldConfig { +@@ -1368,6 +1386,7 @@ public class PurpurWorldConfig { public boolean creeperTakeDamageFromWater = false; public boolean creeperExplodeWhenKilled = false; public boolean creeperHealthRadius = false; @@ -1310,7 +1310,7 @@ index 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c private void creeperSettings() { creeperRidable = getBoolean("mobs.creeper.ridable", creeperRidable); creeperRidableInWater = getBoolean("mobs.creeper.ridable-in-water", creeperRidableInWater); -@@ -1360,6 +1379,7 @@ public class PurpurWorldConfig { +@@ -1384,6 +1403,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 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c } public boolean dolphinRidable = false; -@@ -1371,6 +1391,7 @@ public class PurpurWorldConfig { +@@ -1395,6 +1415,7 @@ public class PurpurWorldConfig { public boolean dolphinDisableTreasureSearching = false; public boolean dolphinTakeDamageFromWater = false; public double dolphinNaturallyAggressiveToPlayersChance = 0.0D; @@ -1326,7 +1326,7 @@ index 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c private void dolphinSettings() { dolphinRidable = getBoolean("mobs.dolphin.ridable", dolphinRidable); dolphinControllable = getBoolean("mobs.dolphin.controllable", dolphinControllable); -@@ -1386,6 +1407,7 @@ public class PurpurWorldConfig { +@@ -1410,6 +1431,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 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c } public boolean donkeyRidableInWater = false; -@@ -1397,6 +1419,7 @@ public class PurpurWorldConfig { +@@ -1421,6 +1443,7 @@ public class PurpurWorldConfig { public double donkeyMovementSpeedMax = 0.175D; public int donkeyBreedingTicks = 6000; public boolean donkeyTakeDamageFromWater = false; @@ -1342,7 +1342,7 @@ index 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c private void donkeySettings() { donkeyRidableInWater = getBoolean("mobs.donkey.ridable-in-water", donkeyRidableInWater); if (PurpurConfig.version < 10) { -@@ -1414,6 +1437,7 @@ public class PurpurWorldConfig { +@@ -1438,6 +1461,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 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c } public boolean drownedRidable = false; -@@ -1426,6 +1450,7 @@ public class PurpurWorldConfig { +@@ -1450,6 +1474,7 @@ public class PurpurWorldConfig { public boolean drownedJockeyTryExistingChickens = true; public boolean drownedTakeDamageFromWater = false; public boolean drownedBreakDoors = false; @@ -1358,7 +1358,7 @@ index 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c private void drownedSettings() { drownedRidable = getBoolean("mobs.drowned.ridable", drownedRidable); drownedRidableInWater = getBoolean("mobs.drowned.ridable-in-water", drownedRidableInWater); -@@ -1442,12 +1467,14 @@ public class PurpurWorldConfig { +@@ -1466,12 +1491,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 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c private void elderGuardianSettings() { elderGuardianRidable = getBoolean("mobs.elder_guardian.ridable", elderGuardianRidable); elderGuardianControllable = getBoolean("mobs.elder_guardian.controllable", elderGuardianControllable); -@@ -1458,6 +1485,7 @@ public class PurpurWorldConfig { +@@ -1482,6 +1509,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 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c } public boolean enderDragonRidable = false; -@@ -1503,6 +1531,7 @@ public class PurpurWorldConfig { +@@ -1527,6 +1555,7 @@ public class PurpurWorldConfig { public boolean endermanIgnorePlayerDragonHead = false; public boolean endermanDisableStareAggro = false; public boolean endermanIgnoreProjectiles = false; @@ -1389,7 +1389,7 @@ index 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c private void endermanSettings() { endermanRidable = getBoolean("mobs.enderman.ridable", endermanRidable); endermanRidableInWater = getBoolean("mobs.enderman.ridable-in-water", endermanRidableInWater); -@@ -1526,6 +1555,7 @@ public class PurpurWorldConfig { +@@ -1550,6 +1579,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 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c } public boolean endermiteRidable = false; -@@ -1533,6 +1563,7 @@ public class PurpurWorldConfig { +@@ -1557,6 +1587,7 @@ public class PurpurWorldConfig { public boolean endermiteControllable = true; public double endermiteMaxHealth = 8.0D; public boolean endermiteTakeDamageFromWater = false; @@ -1405,7 +1405,7 @@ index 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c private void endermiteSettings() { endermiteRidable = getBoolean("mobs.endermite.ridable", endermiteRidable); endermiteRidableInWater = getBoolean("mobs.endermite.ridable-in-water", endermiteRidableInWater); -@@ -1544,6 +1575,7 @@ public class PurpurWorldConfig { +@@ -1568,6 +1599,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 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c } public boolean evokerRidable = false; -@@ -1552,6 +1584,7 @@ public class PurpurWorldConfig { +@@ -1576,6 +1608,7 @@ public class PurpurWorldConfig { public double evokerMaxHealth = 24.0D; public boolean evokerBypassMobGriefing = false; public boolean evokerTakeDamageFromWater = false; @@ -1421,7 +1421,7 @@ index 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c private void evokerSettings() { evokerRidable = getBoolean("mobs.evoker.ridable", evokerRidable); evokerRidableInWater = getBoolean("mobs.evoker.ridable-in-water", evokerRidableInWater); -@@ -1564,6 +1597,7 @@ public class PurpurWorldConfig { +@@ -1588,6 +1621,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 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c } public boolean foxRidable = false; -@@ -1574,6 +1608,7 @@ public class PurpurWorldConfig { +@@ -1598,6 +1632,7 @@ public class PurpurWorldConfig { public int foxBreedingTicks = 6000; public boolean foxBypassMobGriefing = false; public boolean foxTakeDamageFromWater = false; @@ -1437,7 +1437,7 @@ index 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c private void foxSettings() { foxRidable = getBoolean("mobs.fox.ridable", foxRidable); foxRidableInWater = getBoolean("mobs.fox.ridable-in-water", foxRidableInWater); -@@ -1588,6 +1623,7 @@ public class PurpurWorldConfig { +@@ -1612,6 +1647,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 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c } public boolean frogRidable = false; -@@ -1609,6 +1645,7 @@ public class PurpurWorldConfig { +@@ -1633,6 +1669,7 @@ public class PurpurWorldConfig { public double ghastMaxY = 320D; public double ghastMaxHealth = 10.0D; public boolean ghastTakeDamageFromWater = false; @@ -1453,7 +1453,7 @@ index 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c private void ghastSettings() { ghastRidable = getBoolean("mobs.ghast.ridable", ghastRidable); ghastRidableInWater = getBoolean("mobs.ghast.ridable-in-water", ghastRidableInWater); -@@ -1621,6 +1658,7 @@ public class PurpurWorldConfig { +@@ -1645,6 +1682,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 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c } public boolean giantRidable = false; -@@ -1634,6 +1672,7 @@ public class PurpurWorldConfig { +@@ -1658,6 +1696,7 @@ public class PurpurWorldConfig { public boolean giantHaveAI = false; public boolean giantHaveHostileAI = false; public boolean giantTakeDamageFromWater = false; @@ -1469,7 +1469,7 @@ index 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c private void giantSettings() { giantRidable = getBoolean("mobs.giant.ridable", giantRidable); giantRidableInWater = getBoolean("mobs.giant.ridable-in-water", giantRidableInWater); -@@ -1655,6 +1694,7 @@ public class PurpurWorldConfig { +@@ -1679,6 +1718,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 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c } public boolean glowSquidRidable = false; -@@ -1662,12 +1702,14 @@ public class PurpurWorldConfig { +@@ -1686,12 +1726,14 @@ public class PurpurWorldConfig { public double glowSquidMaxHealth = 10.0D; public boolean glowSquidsCanFly = false; public boolean glowSquidTakeDamageFromWater = false; @@ -1492,7 +1492,7 @@ index 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c } public boolean goatRidable = false; -@@ -1676,6 +1718,7 @@ public class PurpurWorldConfig { +@@ -1700,6 +1742,7 @@ public class PurpurWorldConfig { public double goatMaxHealth = 10.0D; public int goatBreedingTicks = 6000; public boolean goatTakeDamageFromWater = false; @@ -1500,7 +1500,7 @@ index 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c private void goatSettings() { goatRidable = getBoolean("mobs.goat.ridable", goatRidable); goatRidableInWater = getBoolean("mobs.goat.ridable-in-water", goatRidableInWater); -@@ -1683,12 +1726,14 @@ public class PurpurWorldConfig { +@@ -1707,12 +1750,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 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c private void guardianSettings() { guardianRidable = getBoolean("mobs.guardian.ridable", guardianRidable); guardianControllable = getBoolean("mobs.guardian.controllable", guardianControllable); -@@ -1699,6 +1744,7 @@ public class PurpurWorldConfig { +@@ -1723,6 +1768,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 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c } public boolean forceHalloweenSeason = false; -@@ -1714,6 +1760,7 @@ public class PurpurWorldConfig { +@@ -1738,6 +1784,7 @@ public class PurpurWorldConfig { public double hoglinMaxHealth = 40.0D; public int hoglinBreedingTicks = 6000; public boolean hoglinTakeDamageFromWater = false; @@ -1531,7 +1531,7 @@ index 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c private void hoglinSettings() { hoglinRidable = getBoolean("mobs.hoglin.ridable", hoglinRidable); hoglinRidableInWater = getBoolean("mobs.hoglin.ridable-in-water", hoglinRidableInWater); -@@ -1726,6 +1773,7 @@ public class PurpurWorldConfig { +@@ -1750,6 +1797,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 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c } public boolean horseRidableInWater = false; -@@ -1737,6 +1785,7 @@ public class PurpurWorldConfig { +@@ -1761,6 +1809,7 @@ public class PurpurWorldConfig { public double horseMovementSpeedMax = 0.3375D; public int horseBreedingTicks = 6000; public boolean horseTakeDamageFromWater = false; @@ -1547,7 +1547,7 @@ index 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c private void horseSettings() { horseRidableInWater = getBoolean("mobs.horse.ridable-in-water", horseRidableInWater); if (PurpurConfig.version < 10) { -@@ -1754,6 +1803,7 @@ public class PurpurWorldConfig { +@@ -1778,6 +1827,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 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c } public boolean huskRidable = false; -@@ -1765,6 +1815,7 @@ public class PurpurWorldConfig { +@@ -1789,6 +1839,7 @@ public class PurpurWorldConfig { public double huskJockeyChance = 0.05D; public boolean huskJockeyTryExistingChickens = true; public boolean huskTakeDamageFromWater = false; @@ -1563,7 +1563,7 @@ index 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c private void huskSettings() { huskRidable = getBoolean("mobs.husk.ridable", huskRidable); huskRidableInWater = getBoolean("mobs.husk.ridable-in-water", huskRidableInWater); -@@ -1780,6 +1831,7 @@ public class PurpurWorldConfig { +@@ -1804,6 +1855,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 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c } public boolean illusionerRidable = false; -@@ -1789,6 +1841,7 @@ public class PurpurWorldConfig { +@@ -1813,6 +1865,7 @@ public class PurpurWorldConfig { public double illusionerFollowRange = 18.0D; public double illusionerMaxHealth = 32.0D; public boolean illusionerTakeDamageFromWater = false; @@ -1579,7 +1579,7 @@ index 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c private void illusionerSettings() { illusionerRidable = getBoolean("mobs.illusioner.ridable", illusionerRidable); illusionerRidableInWater = getBoolean("mobs.illusioner.ridable-in-water", illusionerRidableInWater); -@@ -1806,6 +1859,7 @@ public class PurpurWorldConfig { +@@ -1830,6 +1883,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 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c } public boolean ironGolemRidable = false; -@@ -1816,6 +1870,7 @@ public class PurpurWorldConfig { +@@ -1840,6 +1894,7 @@ public class PurpurWorldConfig { public boolean ironGolemTakeDamageFromWater = false; public boolean ironGolemPoppyCalm = false; public boolean ironGolemHealCalm = false; @@ -1595,7 +1595,7 @@ index 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c private void ironGolemSettings() { ironGolemRidable = getBoolean("mobs.iron_golem.ridable", ironGolemRidable); ironGolemRidableInWater = getBoolean("mobs.iron_golem.ridable-in-water", ironGolemRidableInWater); -@@ -1830,6 +1885,7 @@ public class PurpurWorldConfig { +@@ -1854,6 +1909,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 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c } public boolean llamaRidable = false; -@@ -1844,6 +1900,7 @@ public class PurpurWorldConfig { +@@ -1868,6 +1924,7 @@ public class PurpurWorldConfig { public int llamaBreedingTicks = 6000; public boolean llamaTakeDamageFromWater = false; public boolean llamaJoinCaravans = true; @@ -1611,7 +1611,7 @@ index 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c private void llamaSettings() { llamaRidable = getBoolean("mobs.llama.ridable", llamaRidable); llamaRidableInWater = getBoolean("mobs.llama.ridable-in-water", llamaRidableInWater); -@@ -1864,6 +1921,7 @@ public class PurpurWorldConfig { +@@ -1888,6 +1945,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 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c } public boolean magmaCubeRidable = false; -@@ -1874,6 +1932,7 @@ public class PurpurWorldConfig { +@@ -1898,6 +1956,7 @@ public class PurpurWorldConfig { public Map magmaCubeMaxHealthCache = new HashMap<>(); public Map magmaCubeAttackDamageCache = new HashMap<>(); public boolean magmaCubeTakeDamageFromWater = false; @@ -1627,7 +1627,7 @@ index 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c private void magmaCubeSettings() { magmaCubeRidable = getBoolean("mobs.magma_cube.ridable", magmaCubeRidable); magmaCubeRidableInWater = getBoolean("mobs.magma_cube.ridable-in-water", magmaCubeRidableInWater); -@@ -1888,6 +1947,7 @@ public class PurpurWorldConfig { +@@ -1912,6 +1971,7 @@ public class PurpurWorldConfig { magmaCubeMaxHealthCache.clear(); magmaCubeAttackDamageCache.clear(); magmaCubeTakeDamageFromWater = getBoolean("mobs.magma_cube.takes-damage-from-water", magmaCubeTakeDamageFromWater); @@ -1635,7 +1635,7 @@ index 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c } public boolean mooshroomRidable = false; -@@ -1896,6 +1956,7 @@ public class PurpurWorldConfig { +@@ -1920,6 +1980,7 @@ public class PurpurWorldConfig { public double mooshroomMaxHealth = 10.0D; public int mooshroomBreedingTicks = 6000; public boolean mooshroomTakeDamageFromWater = false; @@ -1643,7 +1643,7 @@ index 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c private void mooshroomSettings() { mooshroomRidable = getBoolean("mobs.mooshroom.ridable", mooshroomRidable); mooshroomRidableInWater = getBoolean("mobs.mooshroom.ridable-in-water", mooshroomRidableInWater); -@@ -1908,6 +1969,7 @@ public class PurpurWorldConfig { +@@ -1932,6 +1993,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 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c } public boolean muleRidableInWater = false; -@@ -1919,6 +1981,7 @@ public class PurpurWorldConfig { +@@ -1943,6 +2005,7 @@ public class PurpurWorldConfig { public double muleMovementSpeedMax = 0.175D; public int muleBreedingTicks = 6000; public boolean muleTakeDamageFromWater = false; @@ -1659,7 +1659,7 @@ index 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c private void muleSettings() { muleRidableInWater = getBoolean("mobs.mule.ridable-in-water", muleRidableInWater); if (PurpurConfig.version < 10) { -@@ -1936,6 +1999,7 @@ public class PurpurWorldConfig { +@@ -1960,6 +2023,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 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c } public boolean ocelotRidable = false; -@@ -1944,6 +2008,7 @@ public class PurpurWorldConfig { +@@ -1968,6 +2032,7 @@ public class PurpurWorldConfig { public double ocelotMaxHealth = 10.0D; public int ocelotBreedingTicks = 6000; public boolean ocelotTakeDamageFromWater = false; @@ -1675,7 +1675,7 @@ index 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c private void ocelotSettings() { ocelotRidable = getBoolean("mobs.ocelot.ridable", ocelotRidable); ocelotRidableInWater = getBoolean("mobs.ocelot.ridable-in-water", ocelotRidableInWater); -@@ -1956,6 +2021,7 @@ public class PurpurWorldConfig { +@@ -1980,6 +2045,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 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c } public boolean pandaRidable = false; -@@ -1964,6 +2030,7 @@ public class PurpurWorldConfig { +@@ -1988,6 +2054,7 @@ public class PurpurWorldConfig { public double pandaMaxHealth = 20.0D; public int pandaBreedingTicks = 6000; public boolean pandaTakeDamageFromWater = false; @@ -1691,7 +1691,7 @@ index 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c private void pandaSettings() { pandaRidable = getBoolean("mobs.panda.ridable", pandaRidable); pandaRidableInWater = getBoolean("mobs.panda.ridable-in-water", pandaRidableInWater); -@@ -1976,6 +2043,7 @@ public class PurpurWorldConfig { +@@ -2000,6 +2067,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 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c } public boolean parrotRidable = false; -@@ -1985,6 +2053,7 @@ public class PurpurWorldConfig { +@@ -2009,6 +2077,7 @@ public class PurpurWorldConfig { public double parrotMaxHealth = 6.0D; public boolean parrotTakeDamageFromWater = false; public boolean parrotBreedable = false; @@ -1707,7 +1707,7 @@ index 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c private void parrotSettings() { parrotRidable = getBoolean("mobs.parrot.ridable", parrotRidable); parrotRidableInWater = getBoolean("mobs.parrot.ridable-in-water", parrotRidableInWater); -@@ -1998,6 +2067,7 @@ public class PurpurWorldConfig { +@@ -2022,6 +2091,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 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c } public boolean phantomRidable = false; -@@ -2025,6 +2095,7 @@ public class PurpurWorldConfig { +@@ -2049,6 +2119,7 @@ public class PurpurWorldConfig { public boolean phantomBurnInDaylight = true; public boolean phantomFlamesOnSwoop = false; public boolean phantomTakeDamageFromWater = false; @@ -1723,7 +1723,7 @@ index 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c private void phantomSettings() { phantomRidable = getBoolean("mobs.phantom.ridable", phantomRidable); phantomRidableInWater = getBoolean("mobs.phantom.ridable-in-water", phantomRidableInWater); -@@ -2060,6 +2131,7 @@ public class PurpurWorldConfig { +@@ -2084,6 +2155,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 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c } public boolean pigRidable = false; -@@ -2069,6 +2141,7 @@ public class PurpurWorldConfig { +@@ -2093,6 +2165,7 @@ public class PurpurWorldConfig { public boolean pigGiveSaddleBack = false; public int pigBreedingTicks = 6000; public boolean pigTakeDamageFromWater = false; @@ -1739,7 +1739,7 @@ index 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c private void pigSettings() { pigRidable = getBoolean("mobs.pig.ridable", pigRidable); pigRidableInWater = getBoolean("mobs.pig.ridable-in-water", pigRidableInWater); -@@ -2082,6 +2155,7 @@ public class PurpurWorldConfig { +@@ -2106,6 +2179,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 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c } public boolean piglinRidable = false; -@@ -2091,6 +2165,7 @@ public class PurpurWorldConfig { +@@ -2115,6 +2189,7 @@ public class PurpurWorldConfig { public boolean piglinBypassMobGriefing = false; public boolean piglinTakeDamageFromWater = false; public int piglinPortalSpawnModifier = 2000; @@ -1755,7 +1755,7 @@ index 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c private void piglinSettings() { piglinRidable = getBoolean("mobs.piglin.ridable", piglinRidable); piglinRidableInWater = getBoolean("mobs.piglin.ridable-in-water", piglinRidableInWater); -@@ -2104,6 +2179,7 @@ public class PurpurWorldConfig { +@@ -2128,6 +2203,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 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c } public boolean piglinBruteRidable = false; -@@ -2111,6 +2187,7 @@ public class PurpurWorldConfig { +@@ -2135,6 +2211,7 @@ public class PurpurWorldConfig { public boolean piglinBruteControllable = true; public double piglinBruteMaxHealth = 50.0D; public boolean piglinBruteTakeDamageFromWater = false; @@ -1771,7 +1771,7 @@ index 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c private void piglinBruteSettings() { piglinBruteRidable = getBoolean("mobs.piglin_brute.ridable", piglinBruteRidable); piglinBruteRidableInWater = getBoolean("mobs.piglin_brute.ridable-in-water", piglinBruteRidableInWater); -@@ -2122,6 +2199,7 @@ public class PurpurWorldConfig { +@@ -2146,6 +2223,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 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c } public boolean pillagerRidable = false; -@@ -2130,6 +2208,7 @@ public class PurpurWorldConfig { +@@ -2154,6 +2232,7 @@ public class PurpurWorldConfig { public double pillagerMaxHealth = 24.0D; public boolean pillagerBypassMobGriefing = false; public boolean pillagerTakeDamageFromWater = false; @@ -1787,7 +1787,7 @@ index 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c private void pillagerSettings() { pillagerRidable = getBoolean("mobs.pillager.ridable", pillagerRidable); pillagerRidableInWater = getBoolean("mobs.pillager.ridable-in-water", pillagerRidableInWater); -@@ -2142,6 +2221,7 @@ public class PurpurWorldConfig { +@@ -2166,6 +2245,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 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c } public boolean polarBearRidable = false; -@@ -2152,6 +2232,7 @@ public class PurpurWorldConfig { +@@ -2176,6 +2256,7 @@ public class PurpurWorldConfig { public Item polarBearBreedableItem = null; public int polarBearBreedingTicks = 6000; public boolean polarBearTakeDamageFromWater = false; @@ -1803,7 +1803,7 @@ index 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c private void polarBearSettings() { polarBearRidable = getBoolean("mobs.polar_bear.ridable", polarBearRidable); polarBearRidableInWater = getBoolean("mobs.polar_bear.ridable-in-water", polarBearRidableInWater); -@@ -2167,12 +2248,14 @@ public class PurpurWorldConfig { +@@ -2191,12 +2272,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 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c private void pufferfishSettings() { pufferfishRidable = getBoolean("mobs.pufferfish.ridable", pufferfishRidable); pufferfishControllable = getBoolean("mobs.pufferfish.controllable", pufferfishControllable); -@@ -2183,6 +2266,7 @@ public class PurpurWorldConfig { +@@ -2207,6 +2290,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 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c } public boolean rabbitRidable = false; -@@ -2194,6 +2278,7 @@ public class PurpurWorldConfig { +@@ -2218,6 +2302,7 @@ public class PurpurWorldConfig { public int rabbitBreedingTicks = 6000; public boolean rabbitBypassMobGriefing = false; public boolean rabbitTakeDamageFromWater = false; @@ -1834,7 +1834,7 @@ index 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c private void rabbitSettings() { rabbitRidable = getBoolean("mobs.rabbit.ridable", rabbitRidable); rabbitRidableInWater = getBoolean("mobs.rabbit.ridable-in-water", rabbitRidableInWater); -@@ -2209,6 +2294,7 @@ public class PurpurWorldConfig { +@@ -2233,6 +2318,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 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c } public boolean ravagerRidable = false; -@@ -2218,6 +2304,7 @@ public class PurpurWorldConfig { +@@ -2242,6 +2328,7 @@ public class PurpurWorldConfig { public boolean ravagerBypassMobGriefing = false; public boolean ravagerTakeDamageFromWater = false; public List ravagerGriefableBlocks = new ArrayList<>(); @@ -1850,7 +1850,7 @@ index 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c private void ravagerSettings() { ravagerRidable = getBoolean("mobs.ravager.ridable", ravagerRidable); ravagerRidableInWater = getBoolean("mobs.ravager.ridable-in-water", ravagerRidableInWater); -@@ -2247,12 +2334,14 @@ public class PurpurWorldConfig { +@@ -2271,12 +2358,14 @@ public class PurpurWorldConfig { ravagerGriefableBlocks.add(block); } }); @@ -1865,7 +1865,7 @@ index 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c private void salmonSettings() { salmonRidable = getBoolean("mobs.salmon.ridable", salmonRidable); salmonControllable = getBoolean("mobs.salmon.controllable", salmonControllable); -@@ -2263,6 +2352,7 @@ public class PurpurWorldConfig { +@@ -2287,6 +2376,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 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c } public boolean sheepRidable = false; -@@ -2272,6 +2362,7 @@ public class PurpurWorldConfig { +@@ -2296,6 +2386,7 @@ public class PurpurWorldConfig { public int sheepBreedingTicks = 6000; public boolean sheepBypassMobGriefing = false; public boolean sheepTakeDamageFromWater = false; @@ -1881,7 +1881,7 @@ index 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c private void sheepSettings() { sheepRidable = getBoolean("mobs.sheep.ridable", sheepRidable); sheepRidableInWater = getBoolean("mobs.sheep.ridable-in-water", sheepRidableInWater); -@@ -2285,6 +2376,7 @@ public class PurpurWorldConfig { +@@ -2309,6 +2400,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 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c } public boolean shulkerRidable = false; -@@ -2298,6 +2390,7 @@ public class PurpurWorldConfig { +@@ -2322,6 +2414,7 @@ public class PurpurWorldConfig { public String shulkerSpawnFromBulletNearbyEquation = "(nearby - 1) / 5.0"; public boolean shulkerSpawnFromBulletRandomColor = false; public boolean shulkerChangeColorWithDye = false; @@ -1897,7 +1897,7 @@ index 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c private void shulkerSettings() { shulkerRidable = getBoolean("mobs.shulker.ridable", shulkerRidable); shulkerRidableInWater = getBoolean("mobs.shulker.ridable-in-water", shulkerRidableInWater); -@@ -2315,6 +2408,7 @@ public class PurpurWorldConfig { +@@ -2339,6 +2432,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 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c } public boolean silverfishRidable = false; -@@ -2323,6 +2417,7 @@ public class PurpurWorldConfig { +@@ -2347,6 +2441,7 @@ public class PurpurWorldConfig { public double silverfishMaxHealth = 8.0D; public boolean silverfishBypassMobGriefing = false; public boolean silverfishTakeDamageFromWater = false; @@ -1913,7 +1913,7 @@ index 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c private void silverfishSettings() { silverfishRidable = getBoolean("mobs.silverfish.ridable", silverfishRidable); silverfishRidableInWater = getBoolean("mobs.silverfish.ridable-in-water", silverfishRidableInWater); -@@ -2335,6 +2430,7 @@ public class PurpurWorldConfig { +@@ -2359,6 +2454,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 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c } public boolean skeletonRidable = false; -@@ -2342,6 +2438,7 @@ public class PurpurWorldConfig { +@@ -2366,6 +2462,7 @@ public class PurpurWorldConfig { public boolean skeletonControllable = true; public double skeletonMaxHealth = 20.0D; public boolean skeletonTakeDamageFromWater = false; @@ -1929,7 +1929,7 @@ index 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c private void skeletonSettings() { skeletonRidable = getBoolean("mobs.skeleton.ridable", skeletonRidable); skeletonRidableInWater = getBoolean("mobs.skeleton.ridable-in-water", skeletonRidableInWater); -@@ -2353,6 +2450,7 @@ public class PurpurWorldConfig { +@@ -2377,6 +2474,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 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c } public boolean skeletonHorseRidable = false; -@@ -2365,6 +2463,7 @@ public class PurpurWorldConfig { +@@ -2389,6 +2487,7 @@ public class PurpurWorldConfig { public double skeletonHorseMovementSpeedMin = 0.2D; public double skeletonHorseMovementSpeedMax = 0.2D; public boolean skeletonHorseTakeDamageFromWater = false; @@ -1945,7 +1945,7 @@ index 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c private void skeletonHorseSettings() { skeletonHorseRidable = getBoolean("mobs.skeleton_horse.ridable", skeletonHorseRidable); skeletonHorseRidableInWater = getBoolean("mobs.skeleton_horse.ridable-in-water", skeletonHorseRidableInWater); -@@ -2382,6 +2481,7 @@ public class PurpurWorldConfig { +@@ -2406,6 +2505,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 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c } public boolean slimeRidable = false; -@@ -2392,6 +2492,7 @@ public class PurpurWorldConfig { +@@ -2416,6 +2516,7 @@ public class PurpurWorldConfig { public Map slimeMaxHealthCache = new HashMap<>(); public Map slimeAttackDamageCache = new HashMap<>(); public boolean slimeTakeDamageFromWater = false; @@ -1961,7 +1961,7 @@ index 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c private void slimeSettings() { slimeRidable = getBoolean("mobs.slime.ridable", slimeRidable); slimeRidableInWater = getBoolean("mobs.slime.ridable-in-water", slimeRidableInWater); -@@ -2406,6 +2507,7 @@ public class PurpurWorldConfig { +@@ -2430,6 +2531,7 @@ public class PurpurWorldConfig { slimeMaxHealthCache.clear(); slimeAttackDamageCache.clear(); slimeTakeDamageFromWater = getBoolean("mobs.slime.takes-damage-from-water", slimeTakeDamageFromWater); @@ -1969,7 +1969,7 @@ index 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c } public boolean snowGolemRidable = false; -@@ -2420,6 +2522,7 @@ public class PurpurWorldConfig { +@@ -2444,6 +2546,7 @@ public class PurpurWorldConfig { public double snowGolemAttackDistance = 1.25D; public boolean snowGolemBypassMobGriefing = false; public boolean snowGolemTakeDamageFromWater = true; @@ -1977,7 +1977,7 @@ index 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c private void snowGolemSettings() { snowGolemRidable = getBoolean("mobs.snow_golem.ridable", snowGolemRidable); snowGolemRidableInWater = getBoolean("mobs.snow_golem.ridable-in-water", snowGolemRidableInWater); -@@ -2438,6 +2541,7 @@ public class PurpurWorldConfig { +@@ -2462,6 +2565,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 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c } public boolean snifferRidable = false; -@@ -2460,6 +2564,7 @@ public class PurpurWorldConfig { +@@ -2484,6 +2588,7 @@ public class PurpurWorldConfig { public double squidOffsetWaterCheck = 0.0D; public boolean squidsCanFly = false; public boolean squidTakeDamageFromWater = false; @@ -1993,7 +1993,7 @@ index 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c private void squidSettings() { squidRidable = getBoolean("mobs.squid.ridable", squidRidable); squidControllable = getBoolean("mobs.squid.controllable", squidControllable); -@@ -2473,6 +2578,7 @@ public class PurpurWorldConfig { +@@ -2497,6 +2602,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 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c } public boolean spiderRidable = false; -@@ -2480,6 +2586,7 @@ public class PurpurWorldConfig { +@@ -2504,6 +2610,7 @@ public class PurpurWorldConfig { public boolean spiderControllable = true; public double spiderMaxHealth = 16.0D; public boolean spiderTakeDamageFromWater = false; @@ -2009,7 +2009,7 @@ index 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c private void spiderSettings() { spiderRidable = getBoolean("mobs.spider.ridable", spiderRidable); spiderRidableInWater = getBoolean("mobs.spider.ridable-in-water", spiderRidableInWater); -@@ -2491,6 +2598,7 @@ public class PurpurWorldConfig { +@@ -2515,6 +2622,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 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c } public boolean strayRidable = false; -@@ -2498,6 +2606,7 @@ public class PurpurWorldConfig { +@@ -2522,6 +2630,7 @@ public class PurpurWorldConfig { public boolean strayControllable = true; public double strayMaxHealth = 20.0D; public boolean strayTakeDamageFromWater = false; @@ -2025,7 +2025,7 @@ index 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c private void straySettings() { strayRidable = getBoolean("mobs.stray.ridable", strayRidable); strayRidableInWater = getBoolean("mobs.stray.ridable-in-water", strayRidableInWater); -@@ -2509,6 +2618,7 @@ public class PurpurWorldConfig { +@@ -2533,6 +2642,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 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c } public boolean striderRidable = false; -@@ -2518,6 +2628,7 @@ public class PurpurWorldConfig { +@@ -2542,6 +2652,7 @@ public class PurpurWorldConfig { public int striderBreedingTicks = 6000; public boolean striderGiveSaddleBack = false; public boolean striderTakeDamageFromWater = true; @@ -2041,7 +2041,7 @@ index 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c private void striderSettings() { striderRidable = getBoolean("mobs.strider.ridable", striderRidable); striderRidableInWater = getBoolean("mobs.strider.ridable-in-water", striderRidableInWater); -@@ -2531,6 +2642,7 @@ public class PurpurWorldConfig { +@@ -2555,6 +2666,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 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c } public boolean tadpoleRidable = false; -@@ -2553,6 +2665,7 @@ public class PurpurWorldConfig { +@@ -2577,6 +2689,7 @@ public class PurpurWorldConfig { public double traderLlamaMovementSpeedMax = 0.175D; public int traderLlamaBreedingTicks = 6000; public boolean traderLlamaTakeDamageFromWater = false; @@ -2057,7 +2057,7 @@ index 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c private void traderLlamaSettings() { traderLlamaRidable = getBoolean("mobs.trader_llama.ridable", traderLlamaRidable); traderLlamaRidableInWater = getBoolean("mobs.trader_llama.ridable-in-water", traderLlamaRidableInWater); -@@ -2572,12 +2685,14 @@ public class PurpurWorldConfig { +@@ -2596,12 +2709,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 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c private void tropicalFishSettings() { tropicalFishRidable = getBoolean("mobs.tropical_fish.ridable", tropicalFishRidable); tropicalFishControllable = getBoolean("mobs.tropical_fish.controllable", tropicalFishControllable); -@@ -2588,6 +2703,7 @@ public class PurpurWorldConfig { +@@ -2612,6 +2727,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 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c } public boolean turtleRidable = false; -@@ -2596,6 +2712,7 @@ public class PurpurWorldConfig { +@@ -2620,6 +2736,7 @@ public class PurpurWorldConfig { public double turtleMaxHealth = 30.0D; public int turtleBreedingTicks = 6000; public boolean turtleTakeDamageFromWater = false; @@ -2088,7 +2088,7 @@ index 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c private void turtleSettings() { turtleRidable = getBoolean("mobs.turtle.ridable", turtleRidable); turtleRidableInWater = getBoolean("mobs.turtle.ridable-in-water", turtleRidableInWater); -@@ -2608,6 +2725,7 @@ public class PurpurWorldConfig { +@@ -2632,6 +2749,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 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c } public boolean vexRidable = false; -@@ -2616,6 +2734,7 @@ public class PurpurWorldConfig { +@@ -2640,6 +2758,7 @@ public class PurpurWorldConfig { public double vexMaxY = 320D; public double vexMaxHealth = 14.0D; public boolean vexTakeDamageFromWater = false; @@ -2104,7 +2104,7 @@ index 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c private void vexSettings() { vexRidable = getBoolean("mobs.vex.ridable", vexRidable); vexRidableInWater = getBoolean("mobs.vex.ridable-in-water", vexRidableInWater); -@@ -2628,6 +2747,7 @@ public class PurpurWorldConfig { +@@ -2652,6 +2771,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 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c } public boolean villagerRidable = false; -@@ -2643,6 +2763,7 @@ public class PurpurWorldConfig { +@@ -2667,6 +2787,7 @@ public class PurpurWorldConfig { public boolean villagerBypassMobGriefing = false; public boolean villagerTakeDamageFromWater = false; public boolean villagerAllowTrading = true; @@ -2120,7 +2120,7 @@ index 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c private void villagerSettings() { villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); -@@ -2662,6 +2783,7 @@ public class PurpurWorldConfig { +@@ -2686,6 +2807,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 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c } public boolean vindicatorRidable = false; -@@ -2670,6 +2792,7 @@ public class PurpurWorldConfig { +@@ -2694,6 +2816,7 @@ public class PurpurWorldConfig { public double vindicatorMaxHealth = 24.0D; public double vindicatorJohnnySpawnChance = 0D; public boolean vindicatorTakeDamageFromWater = false; @@ -2136,7 +2136,7 @@ index 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c private void vindicatorSettings() { vindicatorRidable = getBoolean("mobs.vindicator.ridable", vindicatorRidable); vindicatorRidableInWater = getBoolean("mobs.vindicator.ridable-in-water", vindicatorRidableInWater); -@@ -2682,6 +2805,7 @@ public class PurpurWorldConfig { +@@ -2706,6 +2829,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 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c } public boolean wanderingTraderRidable = false; -@@ -2692,6 +2816,7 @@ public class PurpurWorldConfig { +@@ -2716,6 +2840,7 @@ public class PurpurWorldConfig { public boolean wanderingTraderCanBeLeashed = false; public boolean wanderingTraderTakeDamageFromWater = false; public boolean wanderingTraderAllowTrading = true; @@ -2152,7 +2152,7 @@ index 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c private void wanderingTraderSettings() { wanderingTraderRidable = getBoolean("mobs.wandering_trader.ridable", wanderingTraderRidable); wanderingTraderRidableInWater = getBoolean("mobs.wandering_trader.ridable-in-water", wanderingTraderRidableInWater); -@@ -2706,6 +2831,7 @@ public class PurpurWorldConfig { +@@ -2730,6 +2855,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 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c } public boolean wardenRidable = false; -@@ -2722,6 +2848,7 @@ public class PurpurWorldConfig { +@@ -2746,6 +2872,7 @@ public class PurpurWorldConfig { public boolean witchControllable = true; public double witchMaxHealth = 26.0D; public boolean witchTakeDamageFromWater = false; @@ -2168,7 +2168,7 @@ index 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c private void witchSettings() { witchRidable = getBoolean("mobs.witch.ridable", witchRidable); witchRidableInWater = getBoolean("mobs.witch.ridable-in-water", witchRidableInWater); -@@ -2733,6 +2860,7 @@ public class PurpurWorldConfig { +@@ -2757,6 +2884,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 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c } public boolean witherRidable = false; -@@ -2747,6 +2875,7 @@ public class PurpurWorldConfig { +@@ -2771,6 +2899,7 @@ public class PurpurWorldConfig { public boolean witherCanRideVehicles = false; public float witherExplosionRadius = 1.0F; public boolean witherPlaySpawnSound = true; @@ -2184,7 +2184,7 @@ index 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c private void witherSettings() { witherRidable = getBoolean("mobs.wither.ridable", witherRidable); witherRidableInWater = getBoolean("mobs.wither.ridable-in-water", witherRidableInWater); -@@ -2769,6 +2898,7 @@ public class PurpurWorldConfig { +@@ -2793,6 +2922,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 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c } public boolean witherSkeletonRidable = false; -@@ -2776,6 +2906,7 @@ public class PurpurWorldConfig { +@@ -2800,6 +2930,7 @@ public class PurpurWorldConfig { public boolean witherSkeletonControllable = true; public double witherSkeletonMaxHealth = 20.0D; public boolean witherSkeletonTakeDamageFromWater = false; @@ -2200,7 +2200,7 @@ index 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c private void witherSkeletonSettings() { witherSkeletonRidable = getBoolean("mobs.wither_skeleton.ridable", witherSkeletonRidable); witherSkeletonRidableInWater = getBoolean("mobs.wither_skeleton.ridable-in-water", witherSkeletonRidableInWater); -@@ -2787,6 +2918,7 @@ public class PurpurWorldConfig { +@@ -2811,6 +2942,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 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c } public boolean wolfRidable = false; -@@ -2798,6 +2930,7 @@ public class PurpurWorldConfig { +@@ -2822,6 +2954,7 @@ public class PurpurWorldConfig { public double wolfNaturalRabid = 0.0D; public int wolfBreedingTicks = 6000; public boolean wolfTakeDamageFromWater = false; @@ -2216,7 +2216,7 @@ index 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c private void wolfSettings() { wolfRidable = getBoolean("mobs.wolf.ridable", wolfRidable); wolfRidableInWater = getBoolean("mobs.wolf.ridable-in-water", wolfRidableInWater); -@@ -2817,6 +2950,7 @@ public class PurpurWorldConfig { +@@ -2841,6 +2974,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 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c } public boolean zoglinRidable = false; -@@ -2824,6 +2958,7 @@ public class PurpurWorldConfig { +@@ -2848,6 +2982,7 @@ public class PurpurWorldConfig { public boolean zoglinControllable = true; public double zoglinMaxHealth = 40.0D; public boolean zoglinTakeDamageFromWater = false; @@ -2232,7 +2232,7 @@ index 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c private void zoglinSettings() { zoglinRidable = getBoolean("mobs.zoglin.ridable", zoglinRidable); zoglinRidableInWater = getBoolean("mobs.zoglin.ridable-in-water", zoglinRidableInWater); -@@ -2835,6 +2970,7 @@ public class PurpurWorldConfig { +@@ -2859,6 +2994,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 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c } public boolean zombieRidable = false; -@@ -2848,6 +2984,7 @@ public class PurpurWorldConfig { +@@ -2872,6 +3008,7 @@ public class PurpurWorldConfig { public boolean zombieAggressiveTowardsVillagerWhenLagging = true; public boolean zombieBypassMobGriefing = false; public boolean zombieTakeDamageFromWater = false; @@ -2248,7 +2248,7 @@ index 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c private void zombieSettings() { zombieRidable = getBoolean("mobs.zombie.ridable", zombieRidable); zombieRidableInWater = getBoolean("mobs.zombie.ridable-in-water", zombieRidableInWater); -@@ -2865,6 +3002,7 @@ public class PurpurWorldConfig { +@@ -2889,6 +3026,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 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c } public boolean zombieHorseRidable = false; -@@ -2878,6 +3016,7 @@ public class PurpurWorldConfig { +@@ -2902,6 +3040,7 @@ public class PurpurWorldConfig { public double zombieHorseMovementSpeedMax = 0.2D; public double zombieHorseSpawnChance = 0.0D; public boolean zombieHorseTakeDamageFromWater = false; @@ -2264,7 +2264,7 @@ index 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c private void zombieHorseSettings() { zombieHorseRidable = getBoolean("mobs.zombie_horse.ridable", zombieHorseRidable); zombieHorseRidableInWater = getBoolean("mobs.zombie_horse.ridable-in-water", zombieHorseRidableInWater); -@@ -2896,6 +3035,7 @@ public class PurpurWorldConfig { +@@ -2920,6 +3059,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 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c } public boolean zombieVillagerRidable = false; -@@ -2910,6 +3050,7 @@ public class PurpurWorldConfig { +@@ -2934,6 +3074,7 @@ public class PurpurWorldConfig { public int zombieVillagerCuringTimeMin = 3600; public int zombieVillagerCuringTimeMax = 6000; public boolean zombieVillagerCureEnabled = true; @@ -2280,7 +2280,7 @@ index 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c private void zombieVillagerSettings() { zombieVillagerRidable = getBoolean("mobs.zombie_villager.ridable", zombieVillagerRidable); zombieVillagerRidableInWater = getBoolean("mobs.zombie_villager.ridable-in-water", zombieVillagerRidableInWater); -@@ -2928,6 +3069,7 @@ public class PurpurWorldConfig { +@@ -2952,6 +3093,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 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c } public boolean zombifiedPiglinRidable = false; -@@ -2940,6 +3082,7 @@ public class PurpurWorldConfig { +@@ -2964,6 +3106,7 @@ public class PurpurWorldConfig { public boolean zombifiedPiglinJockeyTryExistingChickens = true; public boolean zombifiedPiglinCountAsPlayerKillWhenAngry = true; public boolean zombifiedPiglinTakeDamageFromWater = false; @@ -2296,7 +2296,7 @@ index 7c46618ae3934646a2badb94872ad12ad7b020d8..5aa5d792d1084db4141a0b372ea8699c private void zombifiedPiglinSettings() { zombifiedPiglinRidable = getBoolean("mobs.zombified_piglin.ridable", zombifiedPiglinRidable); zombifiedPiglinRidableInWater = getBoolean("mobs.zombified_piglin.ridable-in-water", zombifiedPiglinRidableInWater); -@@ -2956,6 +3099,7 @@ public class PurpurWorldConfig { +@@ -2980,6 +3123,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/0223-Mob-head-visibility-percent.patch b/patches/server/0223-Mob-head-visibility-percent.patch index fb48f5b3b..df84a70d2 100644 --- a/patches/server/0223-Mob-head-visibility-percent.patch +++ b/patches/server/0223-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 549579f2bc2e1fd23ece1ead543e3e5242f52ce0..119d2e57995fa20f34b88963b93c945ff87e0cab 100644 +index c1e275fb53c4c173d80ae27087048f0f3902c2ad..4744b0dd3f5e9e5f2d92bd8604610bc133977931 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java @@ -1071,9 +1071,20 @@ public abstract class LivingEntity extends Entity implements Attackable { @@ -32,10 +32,10 @@ index 549579f2bc2e1fd23ece1ead543e3e5242f52ce0..119d2e57995fa20f34b88963b93c945f // 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 9ed53d42189f7f7562ed96b4af39a02db2cb2ff5..77ee5bc60d953e72c6695ce1ce19276f61ae2057 100644 +index 2bd0a18e58a0b953adaa7d875bf0ae21b472c20a..2e4c53de39c7a439245017bf5cb4c1aec4b5b30b 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 { +@@ -1393,6 +1393,7 @@ public class PurpurWorldConfig { public boolean creeperExplodeWhenKilled = false; public boolean creeperHealthRadius = false; public boolean creeperAlwaysDropExp = false; @@ -43,7 +43,7 @@ index 9ed53d42189f7f7562ed96b4af39a02db2cb2ff5..77ee5bc60d953e72c6695ce1ce19276f private void creeperSettings() { creeperRidable = getBoolean("mobs.creeper.ridable", creeperRidable); creeperRidableInWater = getBoolean("mobs.creeper.ridable-in-water", creeperRidableInWater); -@@ -1386,6 +1387,7 @@ public class PurpurWorldConfig { +@@ -1410,6 +1411,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 9ed53d42189f7f7562ed96b4af39a02db2cb2ff5..77ee5bc60d953e72c6695ce1ce19276f } public boolean dolphinRidable = false; -@@ -2172,6 +2174,7 @@ public class PurpurWorldConfig { +@@ -2196,6 +2198,7 @@ public class PurpurWorldConfig { public boolean piglinTakeDamageFromWater = false; public int piglinPortalSpawnModifier = 2000; public boolean piglinAlwaysDropExp = false; @@ -59,7 +59,7 @@ index 9ed53d42189f7f7562ed96b4af39a02db2cb2ff5..77ee5bc60d953e72c6695ce1ce19276f private void piglinSettings() { piglinRidable = getBoolean("mobs.piglin.ridable", piglinRidable); piglinRidableInWater = getBoolean("mobs.piglin.ridable-in-water", piglinRidableInWater); -@@ -2186,6 +2189,7 @@ public class PurpurWorldConfig { +@@ -2210,6 +2213,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 9ed53d42189f7f7562ed96b4af39a02db2cb2ff5..77ee5bc60d953e72c6695ce1ce19276f } public boolean piglinBruteRidable = false; -@@ -2445,6 +2449,7 @@ public class PurpurWorldConfig { +@@ -2469,6 +2473,7 @@ public class PurpurWorldConfig { public double skeletonMaxHealth = 20.0D; public boolean skeletonTakeDamageFromWater = false; public boolean skeletonAlwaysDropExp = false; @@ -75,7 +75,7 @@ index 9ed53d42189f7f7562ed96b4af39a02db2cb2ff5..77ee5bc60d953e72c6695ce1ce19276f private void skeletonSettings() { skeletonRidable = getBoolean("mobs.skeleton.ridable", skeletonRidable); skeletonRidableInWater = getBoolean("mobs.skeleton.ridable-in-water", skeletonRidableInWater); -@@ -2457,6 +2462,7 @@ public class PurpurWorldConfig { +@@ -2481,6 +2486,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 9ed53d42189f7f7562ed96b4af39a02db2cb2ff5..77ee5bc60d953e72c6695ce1ce19276f } public boolean skeletonHorseRidable = false; -@@ -2991,6 +2997,7 @@ public class PurpurWorldConfig { +@@ -3015,6 +3021,7 @@ public class PurpurWorldConfig { public boolean zombieBypassMobGriefing = false; public boolean zombieTakeDamageFromWater = false; public boolean zombieAlwaysDropExp = false; @@ -91,7 +91,7 @@ index 9ed53d42189f7f7562ed96b4af39a02db2cb2ff5..77ee5bc60d953e72c6695ce1ce19276f private void zombieSettings() { zombieRidable = getBoolean("mobs.zombie.ridable", zombieRidable); zombieRidableInWater = getBoolean("mobs.zombie.ridable-in-water", zombieRidableInWater); -@@ -3009,6 +3016,7 @@ public class PurpurWorldConfig { +@@ -3033,6 +3040,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/0225-Shears-can-have-looting-enchantment.patch b/patches/server/0225-Shears-can-have-looting-enchantment.patch index 059266542..ede10634d 100644 --- a/patches/server/0225-Shears-can-have-looting-enchantment.patch +++ b/patches/server/0225-Shears-can-have-looting-enchantment.patch @@ -126,10 +126,10 @@ index 69cdccca01fe7d10e6d958e16d91efe08f699505..3b74931ae4e3a869d8db38c119e57b44 } diff --git a/src/main/java/net/minecraft/world/entity/monster/Bogged.java b/src/main/java/net/minecraft/world/entity/monster/Bogged.java -index e9f9b041ae7195e9d23bd446454b1d8c47a1ace1..03b1023e182744a84d324bdad082cc1b9e574e30 100644 +index ebec95ca146591f170d9e31bbc774e88806269a2..fed6e686c29ad0117731a80294e6725f41d8bf77 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Bogged.java +++ b/src/main/java/net/minecraft/world/entity/monster/Bogged.java -@@ -159,7 +159,7 @@ public class Bogged extends AbstractSkeleton implements Shearable { +@@ -181,7 +181,7 @@ public class Bogged extends AbstractSkeleton implements Shearable { // Paper start - shear drops API @Override @@ -139,7 +139,7 @@ index e9f9b041ae7195e9d23bd446454b1d8c47a1ace1..03b1023e182744a84d324bdad082cc1b this.generateShearedMushrooms(drops::add); return drops; diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index cd27c2a3343133d688592791bec2a031410ff93f..91d5c175752f6ee850adada6802c8af8f833d9c7 100644 +index 15d6e06c21643eb57386e3f0c0e89fcb7ac77c4b..9f128a6a76ee2297e8efdf9371d74fc7998328ce 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java @@ -391,6 +391,7 @@ public class PurpurConfig { diff --git a/patches/server/0226-Stop-bees-from-dying-after-stinging.patch b/patches/server/0226-Stop-bees-from-dying-after-stinging.patch index 43b8cccca..23846b878 100644 --- a/patches/server/0226-Stop-bees-from-dying-after-stinging.patch +++ b/patches/server/0226-Stop-bees-from-dying-after-stinging.patch @@ -17,10 +17,10 @@ index 926c30db9b28a30fe5d6c8d20f3972dec0d7b4d0..221c0051c7a0e20c1b7a464df26eb63c ++this.timeSinceSting; if (this.timeSinceSting % 5 == 0 && this.random.nextInt(Mth.clamp(1200 - this.timeSinceSting, 1, 1200)) == 0) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 77ee5bc60d953e72c6695ce1ce19276f61ae2057..c57bf82ab2ef1827b76f57ed8aff9aee08706fb3 100644 +index 2e4c53de39c7a439245017bf5cb4c1aec4b5b30b..c1da3aa2ccf8a90bfbbc02ca3b289d99d803be9a 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1170,6 +1170,7 @@ public class PurpurWorldConfig { +@@ -1183,6 +1183,7 @@ public class PurpurWorldConfig { public boolean beeCanWorkAtNight = false; public boolean beeCanWorkInRain = false; public boolean beeAlwaysDropExp = false; @@ -28,7 +28,7 @@ index 77ee5bc60d953e72c6695ce1ce19276f61ae2057..c57bf82ab2ef1827b76f57ed8aff9aee private void beeSettings() { beeRidable = getBoolean("mobs.bee.ridable", beeRidable); beeRidableInWater = getBoolean("mobs.bee.ridable-in-water", beeRidableInWater); -@@ -1186,6 +1187,7 @@ public class PurpurWorldConfig { +@@ -1199,6 +1200,7 @@ public class PurpurWorldConfig { beeCanWorkAtNight = getBoolean("mobs.bee.can-work-at-night", beeCanWorkAtNight); beeCanWorkInRain = getBoolean("mobs.bee.can-work-in-rain", beeCanWorkInRain); beeAlwaysDropExp = getBoolean("mobs.bee.always-drop-exp", beeAlwaysDropExp); diff --git a/patches/server/0231-Configurable-phantom-size.patch b/patches/server/0231-Configurable-phantom-size.patch index be3b119dc..a1a9489c7 100644 --- a/patches/server/0231-Configurable-phantom-size.patch +++ b/patches/server/0231-Configurable-phantom-size.patch @@ -22,10 +22,10 @@ index 0d81540d048cd4a08962bd24d3bdd49db708f83f..26077bd6eeedbdae84613188cb0f336a } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 38f417bde3e05124a9ebc23c2c5ea2f4d9d7cefe..b66b8eda76779e3e5807907dc3ce28e4504299a0 100644 +index d67c94b024ec3769f011b68ce353fc0adb3564a0..c751331118e37df2bab7d8e05e4a3dc9ee95dee4 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2112,6 +2112,8 @@ public class PurpurWorldConfig { +@@ -2136,6 +2136,8 @@ public class PurpurWorldConfig { public boolean phantomFlamesOnSwoop = false; public boolean phantomTakeDamageFromWater = false; public boolean phantomAlwaysDropExp = false; @@ -34,7 +34,7 @@ index 38f417bde3e05124a9ebc23c2c5ea2f4d9d7cefe..b66b8eda76779e3e5807907dc3ce28e4 private void phantomSettings() { phantomRidable = getBoolean("mobs.phantom.ridable", phantomRidable); phantomRidableInWater = getBoolean("mobs.phantom.ridable-in-water", phantomRidableInWater); -@@ -2148,6 +2150,13 @@ public class PurpurWorldConfig { +@@ -2172,6 +2174,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/0233-Configurable-minimum-demand-for-trades.patch b/patches/server/0233-Configurable-minimum-demand-for-trades.patch index 19a768732..6442680b1 100644 --- a/patches/server/0233-Configurable-minimum-demand-for-trades.patch +++ b/patches/server/0233-Configurable-minimum-demand-for-trades.patch @@ -40,10 +40,10 @@ index 0efc8d997b34302c3e0a5d7ec73a11a940dbeefe..af157881d440b34cfe79fbc9b03cc9ef public ItemStack assemble() { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index b66b8eda76779e3e5807907dc3ce28e4504299a0..e9bd0ab6bdfe6662ac26732bb91c3c21e91c4225 100644 +index c751331118e37df2bab7d8e05e4a3dc9ee95dee4..0af1661cd5e8b803430a4adcdeb2275ab4876776 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2793,6 +2793,7 @@ public class PurpurWorldConfig { +@@ -2817,6 +2817,7 @@ public class PurpurWorldConfig { public boolean villagerTakeDamageFromWater = false; public boolean villagerAllowTrading = true; public boolean villagerAlwaysDropExp = false; @@ -51,7 +51,7 @@ index b66b8eda76779e3e5807907dc3ce28e4504299a0..e9bd0ab6bdfe6662ac26732bb91c3c21 private void villagerSettings() { villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); -@@ -2813,6 +2814,7 @@ public class PurpurWorldConfig { +@@ -2837,6 +2838,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/0234-Lobotomize-stuck-villagers.patch b/patches/server/0234-Lobotomize-stuck-villagers.patch index bcb788061..395250db6 100644 --- a/patches/server/0234-Lobotomize-stuck-villagers.patch +++ b/patches/server/0234-Lobotomize-stuck-villagers.patch @@ -104,10 +104,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 e9bd0ab6bdfe6662ac26732bb91c3c21e91c4225..bf5c8eb060d88681166d4fff1704c8c63e6327ab 100644 +index 0af1661cd5e8b803430a4adcdeb2275ab4876776..eb68b8ca8921be15839fae902df4f73cbf754c8a 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2794,6 +2794,9 @@ public class PurpurWorldConfig { +@@ -2818,6 +2818,9 @@ public class PurpurWorldConfig { public boolean villagerAllowTrading = true; public boolean villagerAlwaysDropExp = false; public int villagerMinimumDemand = 0; @@ -117,7 +117,7 @@ index e9bd0ab6bdfe6662ac26732bb91c3c21e91c4225..bf5c8eb060d88681166d4fff1704c8c6 private void villagerSettings() { villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); -@@ -2815,6 +2818,18 @@ public class PurpurWorldConfig { +@@ -2839,6 +2842,18 @@ public class PurpurWorldConfig { villagerAllowTrading = getBoolean("mobs.villager.allow-trading", villagerAllowTrading); villagerAlwaysDropExp = getBoolean("mobs.villager.always-drop-exp", villagerAlwaysDropExp); villagerMinimumDemand = getInt("mobs.villager.minimum-demand", villagerMinimumDemand); diff --git a/patches/server/0235-Option-for-villager-display-trade-item.patch b/patches/server/0235-Option-for-villager-display-trade-item.patch index 2742b5219..ee0efb397 100644 --- a/patches/server/0235-Option-for-villager-display-trade-item.patch +++ b/patches/server/0235-Option-for-villager-display-trade-item.patch @@ -17,10 +17,10 @@ index 18dad0825616c4167a0a7555689ee64910a87e09..6945992491027d43eca4f1ca697ad45c && this.lookTime > 0 && entity.getBrain().getMemory(MemoryModuleType.INTERACTION_TARGET).isPresent(); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index bf5c8eb060d88681166d4fff1704c8c63e6327ab..aec0e4eec5095c12c7f52e5f955a6a04d05c9819 100644 +index eb68b8ca8921be15839fae902df4f73cbf754c8a..7594779136bc9ba3c7ed159bd47f4eac674367c4 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2797,6 +2797,7 @@ public class PurpurWorldConfig { +@@ -2821,6 +2821,7 @@ public class PurpurWorldConfig { public boolean villagerLobotomizeEnabled = false; public int villagerLobotomizeCheckInterval = 100; public boolean villagerLobotomizeWaitUntilTradeLocked = false; @@ -28,7 +28,7 @@ index bf5c8eb060d88681166d4fff1704c8c63e6327ab..aec0e4eec5095c12c7f52e5f955a6a04 private void villagerSettings() { villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); -@@ -2830,6 +2831,7 @@ public class PurpurWorldConfig { +@@ -2854,6 +2855,7 @@ public class PurpurWorldConfig { villagerLobotomizeEnabled = getBoolean("mobs.villager.lobotomize.enabled", villagerLobotomizeEnabled); villagerLobotomizeCheckInterval = getInt("mobs.villager.lobotomize.check-interval", villagerLobotomizeCheckInterval); villagerLobotomizeWaitUntilTradeLocked = getBoolean("mobs.villager.lobotomize.wait-until-trade-locked", villagerLobotomizeWaitUntilTradeLocked); diff --git a/patches/server/0242-Implement-configurable-search-radius-for-villagers-t.patch b/patches/server/0242-Implement-configurable-search-radius-for-villagers-t.patch index fbf0fc98e..e705abaf1 100644 --- a/patches/server/0242-Implement-configurable-search-radius-for-villagers-t.patch +++ b/patches/server/0242-Implement-configurable-search-radius-for-villagers-t.patch @@ -18,10 +18,10 @@ index dd74825c04543ae8c0bb1ab5eef6c8a152b621fd..dcf580d852ede8ea01f5d91944a224ec 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 ebce13b3a25f26c22bbe8a25d38b76027b630401..31497cad3276cc2e9bd5a0e745619eb04fecf25a 100644 +index 1f4a19bc5c2c0e39eb4190b159aa95c147ab61bb..5eda0c83dde230af7b90aa7e630bf988f2a25b02 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2808,6 +2808,8 @@ public class PurpurWorldConfig { +@@ -2832,6 +2832,8 @@ public class PurpurWorldConfig { public int villagerLobotomizeCheckInterval = 100; public boolean villagerLobotomizeWaitUntilTradeLocked = false; public boolean villagerDisplayTradeItem = true; @@ -30,7 +30,7 @@ index ebce13b3a25f26c22bbe8a25d38b76027b630401..31497cad3276cc2e9bd5a0e745619eb0 private void villagerSettings() { villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); -@@ -2842,6 +2844,8 @@ public class PurpurWorldConfig { +@@ -2866,6 +2868,8 @@ public class PurpurWorldConfig { villagerLobotomizeCheckInterval = getInt("mobs.villager.lobotomize.check-interval", villagerLobotomizeCheckInterval); villagerLobotomizeWaitUntilTradeLocked = getBoolean("mobs.villager.lobotomize.wait-until-trade-locked", villagerLobotomizeWaitUntilTradeLocked); villagerDisplayTradeItem = getBoolean("mobs.villager.display-trade-item", villagerDisplayTradeItem); diff --git a/patches/server/0246-Skeletons-eat-wither-roses.patch b/patches/server/0246-Skeletons-eat-wither-roses.patch index 63e86f8d5..6deee552c 100644 --- a/patches/server/0246-Skeletons-eat-wither-roses.patch +++ b/patches/server/0246-Skeletons-eat-wither-roses.patch @@ -94,10 +94,10 @@ index 1aae461eed332fe31c1449c47d0928f655c740da..9eb6ed001bfc578311300977dda6f3f1 + // Purpur end } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 59cabf7be670c05af5c5a24080fb65e318f5a843..e7f825ae88c7752468537c7df8c8fec6c1e0c983 100644 +index 659d2f3981d901ff8b7daa135aa7e449314a669e..1cdda64daf34c72a65bc382d0d2bb17f92e86bed 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2491,6 +2491,7 @@ public class PurpurWorldConfig { +@@ -2515,6 +2515,7 @@ public class PurpurWorldConfig { public boolean skeletonTakeDamageFromWater = false; public boolean skeletonAlwaysDropExp = false; public double skeletonHeadVisibilityPercent = 0.5D; @@ -105,7 +105,7 @@ index 59cabf7be670c05af5c5a24080fb65e318f5a843..e7f825ae88c7752468537c7df8c8fec6 private void skeletonSettings() { skeletonRidable = getBoolean("mobs.skeleton.ridable", skeletonRidable); skeletonRidableInWater = getBoolean("mobs.skeleton.ridable-in-water", skeletonRidableInWater); -@@ -2504,6 +2505,7 @@ public class PurpurWorldConfig { +@@ -2528,6 +2529,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/0247-Enchantment-Table-Persists-Lapis.patch b/patches/server/0247-Enchantment-Table-Persists-Lapis.patch index 5b6752132..61a86d54b 100644 --- a/patches/server/0247-Enchantment-Table-Persists-Lapis.patch +++ b/patches/server/0247-Enchantment-Table-Persists-Lapis.patch @@ -137,10 +137,10 @@ index d47bc2f54c4722a0b8c419b99ee57eb3cb25d750..fdeabdcc781b605d6f3ee18528fd380f + // Purpur } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index e7f825ae88c7752468537c7df8c8fec6c1e0c983..38f161e102c5202c79108ad150ff42af1a75658c 100644 +index 1cdda64daf34c72a65bc382d0d2bb17f92e86bed..43197f65e98c155e40de1e600ab5db747877f0b2 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1528,6 +1528,11 @@ public class PurpurWorldConfig { +@@ -1552,6 +1552,11 @@ public class PurpurWorldConfig { elderGuardianAlwaysDropExp = getBoolean("mobs.elder_guardian.always-drop-exp", elderGuardianAlwaysDropExp); } diff --git a/patches/server/0255-Remove-Mojang-Profiler.patch b/patches/server/0255-Remove-Mojang-Profiler.patch index c0fc0439d..03ef03b3a 100644 --- a/patches/server/0255-Remove-Mojang-Profiler.patch +++ b/patches/server/0255-Remove-Mojang-Profiler.patch @@ -1535,10 +1535,10 @@ index 09502b15c20f401c3b56ecedc4d3b515384d654f..bca7b7192debb3a34a08047010a2438e } diff --git a/src/main/java/net/minecraft/world/entity/animal/armadillo/Armadillo.java b/src/main/java/net/minecraft/world/entity/animal/armadillo/Armadillo.java -index 29412208e329e9fc211b844822a2fc3328a5bc89..f8790ab5b7c1279719271ee57c00f4f2d6ce9714 100644 +index c9740f5588cf4db0c8257c47e96cef7a743cca45..412efb69786e767953864e5f5b44f5cf83a52061 100644 --- a/src/main/java/net/minecraft/world/entity/animal/armadillo/Armadillo.java +++ b/src/main/java/net/minecraft/world/entity/animal/armadillo/Armadillo.java -@@ -130,12 +130,12 @@ public class Armadillo extends Animal { +@@ -157,12 +157,12 @@ public class Armadillo extends Animal { @Override protected void customServerAiStep() { diff --git a/patches/server/0260-Add-skeleton-bow-accuracy-option.patch b/patches/server/0260-Add-skeleton-bow-accuracy-option.patch index 3f012cd02..4038b5b46 100644 --- a/patches/server/0260-Add-skeleton-bow-accuracy-option.patch +++ b/patches/server/0260-Add-skeleton-bow-accuracy-option.patch @@ -18,10 +18,10 @@ index 8515e6360c1630385884a60f652f65fdefeaf540..e80307198b051cbcd9f72b36e4592768 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 8763375984c9cbd9d4862a0130602e11a55292f5..7b028800a99d627a9efcd2a718e281ab7a67cfad 100644 +index 8ba75ecdb350796cf2b5f8b710db78e1f741d390..ed36fe26478af919f7589e3f4543735f332dbea9 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2511,6 +2511,8 @@ public class PurpurWorldConfig { +@@ -2535,6 +2535,8 @@ public class PurpurWorldConfig { public boolean skeletonAlwaysDropExp = false; public double skeletonHeadVisibilityPercent = 0.5D; public int skeletonFeedWitherRoses = 0; @@ -30,7 +30,7 @@ index 8763375984c9cbd9d4862a0130602e11a55292f5..7b028800a99d627a9efcd2a718e281ab private void skeletonSettings() { skeletonRidable = getBoolean("mobs.skeleton.ridable", skeletonRidable); skeletonRidableInWater = getBoolean("mobs.skeleton.ridable-in-water", skeletonRidableInWater); -@@ -2525,6 +2527,18 @@ public class PurpurWorldConfig { +@@ -2549,6 +2551,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/0270-Add-option-to-allow-creeper-to-encircle-target-when-.patch b/patches/server/0270-Add-option-to-allow-creeper-to-encircle-target-when-.patch index 9e62843de..7663270ef 100644 --- a/patches/server/0270-Add-option-to-allow-creeper-to-encircle-target-when-.patch +++ b/patches/server/0270-Add-option-to-allow-creeper-to-encircle-target-when-.patch @@ -24,10 +24,10 @@ index 137ec75ee803789deb7b1ca93dd9369c9af362b9..ca95d25af3e9a0536868b0c7fd8e7d2f } } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index fabe1529ca30dabb93287dfae4cc15ea8c11f69f..6d4d76eff2372edd7ecceb619c3b6650bd779fa2 100644 +index bf3bc461f7ec2ea4f9bf45cc59bd2189708667eb..cac0df286dcdb64a72786a35d7df4e056441d97f 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1418,6 +1418,7 @@ public class PurpurWorldConfig { +@@ -1442,6 +1442,7 @@ public class PurpurWorldConfig { public boolean creeperHealthRadius = false; public boolean creeperAlwaysDropExp = false; public double creeperHeadVisibilityPercent = 0.5D; @@ -35,7 +35,7 @@ index fabe1529ca30dabb93287dfae4cc15ea8c11f69f..6d4d76eff2372edd7ecceb619c3b6650 private void creeperSettings() { creeperRidable = getBoolean("mobs.creeper.ridable", creeperRidable); creeperRidableInWater = getBoolean("mobs.creeper.ridable-in-water", creeperRidableInWater); -@@ -1436,6 +1437,7 @@ public class PurpurWorldConfig { +@@ -1460,6 +1461,7 @@ public class PurpurWorldConfig { creeperHealthRadius = getBoolean("mobs.creeper.health-impacts-explosion", creeperHealthRadius); creeperAlwaysDropExp = getBoolean("mobs.creeper.always-drop-exp", creeperAlwaysDropExp); creeperHeadVisibilityPercent = getDouble("mobs.creeper.head-visibility-percent", creeperHeadVisibilityPercent); diff --git a/patches/server/0285-Shears-can-defuse-TNT.patch b/patches/server/0285-Shears-can-defuse-TNT.patch index 5fb2d5add..7b370fa95 100644 --- a/patches/server/0285-Shears-can-defuse-TNT.patch +++ b/patches/server/0285-Shears-can-defuse-TNT.patch @@ -42,10 +42,10 @@ index f1f352ec0e51f5db59254841a06c176c5a876fc9..dff0e7b08b973a1b29f916e63d3e4778 + // 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 03819b5d991d91c2e7f5e2eae50e1a7e4197336b..bd1ae536d975b5a3c54063834fd05255f15d8dad 100644 +index 1a417bb1f55a1525ec2e80ab9de07412173f31be..9fbe25458260f7a7a71f0684d12756697e7dacb4 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -3282,4 +3282,11 @@ public class PurpurWorldConfig { +@@ -3306,4 +3306,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/0287-Option-Ocelot-Spawn-Under-Sea-Level.patch b/patches/server/0287-Option-Ocelot-Spawn-Under-Sea-Level.patch index 5d79d6bf5..192752846 100644 --- a/patches/server/0287-Option-Ocelot-Spawn-Under-Sea-Level.patch +++ b/patches/server/0287-Option-Ocelot-Spawn-Under-Sea-Level.patch @@ -18,10 +18,10 @@ index 5668aca08732e317c7bccacf1cfaae7d8666bce6..07dc8a43f4e8c54a94696b84896d32f6 } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index bd1ae536d975b5a3c54063834fd05255f15d8dad..0f4a926937d07f76144cd1146b48bfdadaf887b5 100644 +index 9fbe25458260f7a7a71f0684d12756697e7dacb4..8579bc24ff63f42f85791cdc6e167392561b6424 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2097,6 +2097,7 @@ public class PurpurWorldConfig { +@@ -2121,6 +2121,7 @@ public class PurpurWorldConfig { public int ocelotBreedingTicks = 6000; public boolean ocelotTakeDamageFromWater = false; public boolean ocelotAlwaysDropExp = false; @@ -29,7 +29,7 @@ index bd1ae536d975b5a3c54063834fd05255f15d8dad..0f4a926937d07f76144cd1146b48bfda private void ocelotSettings() { ocelotRidable = getBoolean("mobs.ocelot.ridable", ocelotRidable); ocelotRidableInWater = getBoolean("mobs.ocelot.ridable-in-water", ocelotRidableInWater); -@@ -2110,6 +2111,7 @@ public class PurpurWorldConfig { +@@ -2134,6 +2135,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/0288-add-an-option-for-piglins-to-ignore-gold-trimmed-arm.patch b/patches/server/0288-add-an-option-for-piglins-to-ignore-gold-trimmed-arm.patch index 8f0bc4e20..fb0565574 100644 --- a/patches/server/0288-add-an-option-for-piglins-to-ignore-gold-trimmed-arm.patch +++ b/patches/server/0288-add-an-option-for-piglins-to-ignore-gold-trimmed-arm.patch @@ -29,10 +29,10 @@ index e25af9af8f87e6762716749c367658bf6bda9e34..b7d5c0b0e3741fcf04c4bac21a82fc41 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 0f4a926937d07f76144cd1146b48bfdadaf887b5..27eadd84aed6d109e278b0ee450fc2c302f61aba 100644 +index 8579bc24ff63f42f85791cdc6e167392561b6424..6bc41d7c2d395065e5353856ebaee52ded653a22 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2266,6 +2266,7 @@ public class PurpurWorldConfig { +@@ -2290,6 +2290,7 @@ public class PurpurWorldConfig { public int piglinPortalSpawnModifier = 2000; public boolean piglinAlwaysDropExp = false; public double piglinHeadVisibilityPercent = 0.5D; @@ -40,7 +40,7 @@ index 0f4a926937d07f76144cd1146b48bfdadaf887b5..27eadd84aed6d109e278b0ee450fc2c3 private void piglinSettings() { piglinRidable = getBoolean("mobs.piglin.ridable", piglinRidable); piglinRidableInWater = getBoolean("mobs.piglin.ridable-in-water", piglinRidableInWater); -@@ -2281,6 +2282,7 @@ public class PurpurWorldConfig { +@@ -2305,6 +2306,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/0293-Configurable-villager-search-radius.patch b/patches/server/0293-Configurable-villager-search-radius.patch index 819b508a2..a45244984 100644 --- a/patches/server/0293-Configurable-villager-search-radius.patch +++ b/patches/server/0293-Configurable-villager-search-radius.patch @@ -31,10 +31,10 @@ index 92731b6b593289e9f583c9b705b219e81fcd8e73..9104d7010bda6f9f73b478c11490ef9c // Paper end - optimise POI access if (path != null && path.canReach()) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 43d91390274c8cc8863e0aceb20837415b915166..710511db0e882d9795c2a1ff31570fbb05fbb0f1 100644 +index 0bd5657b95fb99e16a04b8de5edb8d8cd481d5aa..93d76ef7483bf8760971abe5803d8afe778792ca 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2896,6 +2896,8 @@ public class PurpurWorldConfig { +@@ -2920,6 +2920,8 @@ public class PurpurWorldConfig { public boolean villagerDisplayTradeItem = true; public int villagerSpawnIronGolemRadius = 0; public int villagerSpawnIronGolemLimit = 0; @@ -43,7 +43,7 @@ index 43d91390274c8cc8863e0aceb20837415b915166..710511db0e882d9795c2a1ff31570fbb private void villagerSettings() { villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); -@@ -2932,6 +2934,8 @@ public class PurpurWorldConfig { +@@ -2956,6 +2958,8 @@ public class PurpurWorldConfig { villagerDisplayTradeItem = getBoolean("mobs.villager.display-trade-item", villagerDisplayTradeItem); villagerSpawnIronGolemRadius = getInt("mobs.villager.spawn-iron-golem.radius", villagerSpawnIronGolemRadius); villagerSpawnIronGolemLimit = getInt("mobs.villager.spawn-iron-golem.limit", villagerSpawnIronGolemLimit); diff --git a/patches/server/0294-option-to-make-ravagers-afraid-of-rabbits.patch b/patches/server/0294-option-to-make-ravagers-afraid-of-rabbits.patch index 765dd9d66..3d0aa1688 100644 --- a/patches/server/0294-option-to-make-ravagers-afraid-of-rabbits.patch +++ b/patches/server/0294-option-to-make-ravagers-afraid-of-rabbits.patch @@ -18,10 +18,10 @@ index 9551bd7c9bed37cf17910e7f71b82ed20fb2d759..dbfcca8adb7afa7a3101f22c2bc48aff this.goalSelector.addGoal(5, new WaterAvoidingRandomStrollGoal(this, 0.4D)); this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 6.0F)); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 710511db0e882d9795c2a1ff31570fbb05fbb0f1..d8de8710d9b8cf2ae5c434b2b0b27e76ffbbe4bf 100644 +index 93d76ef7483bf8760971abe5803d8afe778792ca..d8184b10271eab447b3645c65d19328387cc24d3 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2412,6 +2412,7 @@ public class PurpurWorldConfig { +@@ -2436,6 +2436,7 @@ public class PurpurWorldConfig { public boolean ravagerTakeDamageFromWater = false; public List ravagerGriefableBlocks = new ArrayList<>(); public boolean ravagerAlwaysDropExp = false; @@ -29,7 +29,7 @@ index 710511db0e882d9795c2a1ff31570fbb05fbb0f1..d8de8710d9b8cf2ae5c434b2b0b27e76 private void ravagerSettings() { ravagerRidable = getBoolean("mobs.ravager.ridable", ravagerRidable); ravagerRidableInWater = getBoolean("mobs.ravager.ridable-in-water", ravagerRidableInWater); -@@ -2442,6 +2443,7 @@ public class PurpurWorldConfig { +@@ -2466,6 +2467,7 @@ public class PurpurWorldConfig { } }); ravagerAlwaysDropExp = getBoolean("mobs.ravager.always-drop-exp", ravagerAlwaysDropExp); From d259ed5b4b07f338ef6f41dc247fcc7ba37d8842 Mon Sep 17 00:00:00 2001 From: granny Date: Fri, 14 Jun 2024 13:02:52 -0700 Subject: [PATCH 046/588] prepare for update --- README.md | 6 +++--- gradle.properties | 4 ++-- .../dropped-api/0011-LivingEntity-safeFallDistance.patch | 0 .../dropped-api/0032-Potion-NamespacedKey.patch | 0 .../dropped-api/0041-Add-item-packet-serialize-event.patch | 0 .../{ => 1-20-6}/dropped-api/0049-Add-hover-lines-API.patch | 0 .../dropped-server/0013-LivingEntity-safeFallDistance.patch | 0 .../dropped-server/0220-Potion-NamespacedKey.patch | 0 .../dropped-server/0236-Configurable-food-attributes.patch | 0 .../dropped-server/0255-Send-client-custom-name-of-BE.patch | 0 .../dropped-server/0263-Allay-respect-item-NBT.patch | 0 .../0271-Add-item-packet-serialize-event.patch | 0 .../dropped-server/0292-Add-hover-lines-API.patch | 0 .../unapplied-api/0001-Pufferfish-API-Changes.patch | 0 .../unapplied-api/0002-Fix-pufferfish-issues.patch | 0 .../unapplied-server/0001-Pufferfish-Server-Changes.patch | 0 .../unapplied-server/0003-Fix-pufferfish-issues.patch | 0 .../0269-Make-pufferfish-config-relocatable.patch | 0 patches/{api => unapplied-api}/0001-Rebrand.patch | 0 .../{api => unapplied-api}/0002-Purpur-config-files.patch | 0 .../{api => unapplied-api}/0003-Build-System-Changes.patch | 0 .../{api => unapplied-api}/0004-Purpur-client-support.patch | 0 .../{api => unapplied-api}/0005-Default-permissions.patch | 0 patches/{api => unapplied-api}/0006-Ridables.patch | 0 .../0007-Allow-inventory-resizing.patch | 0 patches/{api => unapplied-api}/0008-Llama-API.patch | 0 patches/{api => unapplied-api}/0009-AFK-API.patch | 0 .../0010-Bring-back-server-name.patch | 0 .../{api => unapplied-api}/0011-ExecuteCommandEvent.patch | 0 patches/{api => unapplied-api}/0012-Lagging-threshold.patch | 0 .../0013-PlayerSetSpawnerTypeWithEggEvent.patch | 0 patches/{api => unapplied-api}/0014-Anvil-API.patch | 0 .../0015-ItemStack-convenience-methods.patch | 0 .../0016-LivingEntity-broadcastItemBreak.patch | 0 .../0017-ChatColor-conveniences.patch | 0 .../0018-Item-entity-immunities.patch | 0 ...9-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch | 0 patches/{api => unapplied-api}/0020-Rabid-Wolf-API.patch | 0 .../0021-PlayerBookTooLargeEvent.patch | 0 .../0022-Full-netherite-armor-grants-fire-resistance.patch | 0 .../0023-Add-EntityTeleportHinderedEvent.patch | 0 ...0024-Add-enchantment-target-for-bows-and-crossbows.patch | 0 .../0025-API-for-any-mob-to-burn-daylight.patch | 0 .../0026-Add-back-player-spawned-endermite-API.patch | 0 .../0027-Fix-default-permission-system.patch | 0 patches/{api => unapplied-api}/0028-Summoner-API.patch | 0 .../0029-Clean-up-version-command-output.patch | 0 .../0030-Extended-OfflinePlayer-API.patch | 0 .../0031-Added-the-ability-to-add-combustible-items.patch | 0 patches/{api => unapplied-api}/0032-Grindstone-API.patch | 0 .../0033-Shears-can-have-looting-enchantment.patch | 0 .../0034-Lobotomize-stuck-villagers.patch | 0 .../0035-Add-local-difficulty-api.patch | 0 patches/{api => unapplied-api}/0036-Remove-Timings.patch | 0 patches/{api => unapplied-api}/0037-Add-Bee-API.patch | 0 patches/{api => unapplied-api}/0038-Debug-Marker-API.patch | 0 .../{api => unapplied-api}/0039-Add-death-screen-API.patch | 0 patches/{api => unapplied-api}/0040-Language-API.patch | 0 .../0041-Add-log-suppression-for-LibraryLoader.patch | 0 patches/{api => unapplied-api}/0042-Fire-Immunity-API.patch | 0 .../{api => unapplied-api}/0043-Added-goat-ram-event.patch | 0 .../{api => unapplied-api}/0044-Add-PreExplodeEvents.patch | 0 patches/{api => unapplied-api}/0045-Stored-Bee-API.patch | 0 patches/{api => unapplied-api}/0046-Explorer-Map-API.patch | 0 .../{api => unapplied-api}/0047-Stonecutter-damage.patch | 0 .../0001-Ridables.patch | 0 ...antoms-attracted-to-crystals-and-crystals-shoot-ph.patch | 0 ...d-option-to-disable-zombie-aggressiveness-towards-.patch | 0 .../0004-Rabid-Wolf-API.patch | 0 .../0005-Iron-golem-poppy-calms-anger.patch | 0 patches/{server => unapplied-server}/0001-Rebrand.patch | 0 .../0002-Purpur-config-files.patch | 0 .../0003-Purpur-client-support.patch | 0 .../0004-Fix-decompile-errors.patch | 0 .../0005-Component-related-conveniences.patch | 0 patches/{server => unapplied-server}/0006-Ridables.patch | 0 .../0007-Configurable-entity-base-attributes.patch | 0 .../0008-Barrels-and-enderchests-6-rows.patch | 0 patches/{server => unapplied-server}/0009-Llama-API.patch | 0 patches/{server => unapplied-server}/0010-AFK-API.patch | 0 .../0011-Bring-back-server-name.patch | 0 .../0012-Configurable-server-mod-name.patch | 0 .../0013-Lagging-threshold.patch | 0 .../0014-PlayerSetSpawnerTypeWithEggEvent.patch | 0 patches/{server => unapplied-server}/0015-Anvil-API.patch | 0 .../0016-Alternative-Keepalive-Handling.patch | 0 .../0017-Silk-touch-spawners.patch | 0 .../0018-Add-turtle-egg-block-options.patch | 0 .../0019-Logger-settings-suppressing-pointless-logs.patch | 0 .../0020-Disable-outdated-build-check.patch | 0 .../0021-Giants-AI-settings.patch | 0 .../0022-Zombie-horse-naturally-spawn.patch | 0 .../0023-Charged-creeper-naturally-spawn.patch | 0 .../0024-Rabbit-naturally-spawn-toast-and-killer.patch | 0 ...x-outdated-server-showing-in-ping-before-server-fu.patch | 0 .../0026-Tulips-change-fox-type.patch | 0 .../0027-Breedable-Polar-Bears.patch | 0 .../0028-Chickens-can-retaliate.patch | 0 .../0029-Add-option-to-set-armorstand-step-height.patch | 0 .../0030-Cat-spawning-options.patch | 0 .../0031-Cows-eat-mushrooms.patch | 0 .../0032-Fix-cow-rotation-when-shearing-mooshroom.patch | 0 .../0033-Pigs-give-saddle-back.patch | 0 .../0034-Snowman-drop-and-put-back-pumpkin.patch | 0 .../0035-Ender-dragon-always-drop-full-exp.patch | 0 ...Allow-soil-to-moisten-from-water-directly-under-it.patch | 0 .../0037-Minecart-settings-and-WASD-controls.patch | 0 .../0038-Disable-loot-drops-on-death-by-cramming.patch | 0 .../0039-Option-to-toggle-milk-curing-bad-omen.patch | 0 ...-End-gateway-should-check-if-entity-can-use-portal.patch | 0 .../0041-Skip-events-if-there-s-no-listeners.patch | 0 .../0042-Add-permission-for-F3-N-debug.patch | 0 .../0043-Configurable-TPS-Catchup.patch | 0 ...d-option-to-allow-loyalty-on-tridents-to-work-in-t.patch | 0 .../0045-Add-enderman-and-creeper-griefing-controls.patch | 0 .../0046-Villagers-follow-emerald-blocks.patch | 0 .../0047-Allow-leashing-villagers.patch | 0 .../0048-Implement-infinite-liquids.patch | 0 .../0049-Make-lava-flow-speed-configurable.patch | 0 .../0050-Add-player-death-exp-control-options.patch | 0 .../0051-Configurable-void-damage-height-and-damage.patch | 0 .../0052-Add-canSaveToDisk-to-Entity.patch | 0 .../0053-Dispenser-curse-of-binding-protection.patch | 0 ...0054-Add-option-for-boats-to-eject-players-on-land.patch | 0 .../0055-Mending-mends-most-damages-equipment-first.patch | 0 .../0056-Add-5-second-tps-average-in-tps.patch | 0 .../0057-Implement-elytra-settings.patch | 0 .../0058-Item-entity-immunities.patch | 0 .../0059-Add-ping-command.patch | 0 .../0060-Add-demo-command.patch | 0 .../0061-Add-credits-command.patch | 0 .../0062-Configurable-jockey-options.patch | 0 ...antoms-attracted-to-crystals-and-crystals-shoot-ph.patch | 0 .../0064-Add-phantom-spawning-options.patch | 0 .../0065-Implement-bed-explosion-options.patch | 0 .../0066-Implement-respawn-anchor-explosion-options.patch | 0 .../0067-Add-allow-water-in-end-world-option.patch | 0 .../0068-Allow-color-codes-in-books.patch | 0 .../{server => unapplied-server}/0069-Entity-lifespan.patch | 0 ...d-option-to-teleport-to-spawn-if-outside-world-bor.patch | 0 .../0071-Squid-EAR-immunity.patch | 0 .../0072-Phantoms-burn-in-light.patch | 0 .../0073-Configurable-villager-breeding.patch | 0 .../0074-Redstone-deactivates-spawners.patch | 0 .../0075-Totems-work-in-inventory.patch | 0 .../0076-Add-vindicator-johnny-spawn-chance.patch | 0 .../0077-Dispensers-place-anvils-option.patch | 0 .../0078-Allow-anvil-colors.patch | 0 ...9-Add-option-to-disable-dolphin-treasure-searching.patch | 0 .../0080-Short-enderman-height.patch | 0 .../0081-Stop-squids-floating-on-top-of-water.patch | 0 .../0082-Crying-obsidian-valid-for-portal-frames.patch | 0 .../0083-Entities-can-use-portals-configuration.patch | 0 .../0084-LivingEntity-broadcastItemBreak.patch | 0 .../0085-Customizable-wither-health-and-healing.patch | 0 .../0086-Allow-toggling-special-MobSpawners-per-world.patch | 0 .../0087-Raid-cooldown-setting.patch | 0 ...88-Despawn-rate-config-options-per-projectile-type.patch | 0 ...d-option-to-disable-zombie-aggressiveness-towards-.patch | 0 ...0-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch | 0 .../0091-Flying-squids-Oh-my.patch | 0 .../0092-Infinity-bow-settings.patch | 0 .../0093-Configurable-daylight-cycle.patch | 0 ...4-Allow-infinite-and-mending-enchantments-together.patch | 0 .../0095-Furnace-uses-lava-from-underneath.patch | 0 .../0096-Arrows-should-not-reset-despawn-counter.patch | 0 ...97-Ability-to-re-add-farmland-mechanics-from-Alpha.patch | 0 .../0098-Add-adjustable-breeding-cooldown-to-config.patch | 0 .../0099-Make-entity-breeding-times-configurable.patch | 0 ...ply-display-names-from-item-forms-of-entities-to-e.patch | 0 ...t-name-visible-when-using-a-Name-Tag-on-an-Armor-S.patch | 0 ...d-config-for-allowing-Endermen-to-despawn-even-whi.patch | 0 .../0103-Add-configurable-snowball-damage.patch | 0 .../0104-Changeable-Mob-Left-Handed-Chance.patch | 0 .../0105-Add-boat-fall-damage-config.patch | 0 .../0106-Snow-Golem-rate-of-fire-config.patch | 0 .../0107-EMC-Configurable-disable-give-dropping.patch | 0 ...08-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch | 0 ...ggle-for-Zombified-Piglin-death-always-counting-as.patch | 0 ...0110-Configurable-chance-for-wolves-to-spawn-rabid.patch | 0 .../0111-Configurable-default-collar-color.patch | 0 .../0112-Phantom-flames-on-swoop.patch | 0 ...tion-for-chests-to-open-even-with-a-solid-block-on.patch | 0 .../0114-Implement-TPSBar.patch | 0 .../0115-Striders-give-saddle-back.patch | 0 .../0116-PlayerBookTooLargeEvent.patch | 0 .../0117-Full-netherite-armor-grants-fire-resistance.patch | 0 ...0118-Add-mobGriefing-bypass-to-everything-affected.patch | 0 ...119-Config-to-allow-Note-Block-sounds-when-blocked.patch | 0 .../0120-Add-EntityTeleportHinderedEvent.patch | 0 .../0121-Farmland-trampling-changes.patch | 0 .../0122-Movement-options-for-armor-stands.patch | 0 .../0123-Fix-stuck-in-portals.patch | 0 .../0124-Toggle-for-water-sensitive-mob-damage.patch | 0 .../0125-Config-to-always-tame-in-Creative.patch | 0 .../0126-End-crystal-explosion-options.patch | 0 ...nfigs-for-if-Wither-Ender-Dragon-can-ride-vehicles.patch | 0 .../0128-Dont-run-with-scissors.patch | 0 .../{server => unapplied-server}/0129-One-Punch-Man.patch | 0 ...nfigurable-Ender-Pearl-cooldown-damage-and-Endermi.patch | 0 .../0131-Config-to-ignore-nearby-mobs-when-sleeping.patch | 0 .../0132-Add-back-player-spawned-endermite-API.patch | 0 ...-Config-Enderman-aggressiveness-towards-Endermites.patch | 0 ...nfig-to-ignore-Dragon-Head-wearers-and-stare-aggro.patch | 0 .../0135-Tick-fluids-config.patch | 0 .../0136-Config-to-disable-Llama-caravans.patch | 0 .../0137-Config-to-make-Creepers-explode-on-death.patch | 0 .../0138-Configurable-ravager-griefable-blocks-list.patch | 0 .../0139-Sneak-to-bulk-process-composter.patch | 0 .../0140-Config-for-skipping-night.patch | 0 .../0141-Add-config-for-villager-trading.patch | 0 .../0142-Allow-infinity-on-crossbows.patch | 0 .../0143-Drowning-Settings.patch | 0 .../0144-Break-individual-slabs-when-sneaking.patch | 0 .../0145-Config-to-disable-hostile-mob-spawn-on-ice.patch | 0 .../0146-Config-to-show-Armor-Stand-arms-on-spawn.patch | 0 .../0147-Option-to-make-doors-require-redstone.patch | 0 .../0148-Config-to-allow-for-unsafe-enchants.patch | 0 .../0149-Configurable-sponge-absorption.patch | 0 .../0150-Projectile-offset-config.patch | 0 .../0151-Config-for-powered-rail-activation-distance.patch | 0 .../0152-Piglin-portal-spawn-modifier.patch | 0 .../0153-Config-to-change-max-number-of-bees.patch | 0 .../0154-Config-for-wither-explosion-radius.patch | 0 .../0155-Gamemode-extra-permissions.patch | 0 .../0156-Configurable-piston-push-limit.patch | 0 .../0157-Configurable-broadcast-settings.patch | 0 .../0158-Configurable-mob-blindness.patch | 0 .../0159-Hide-hidden-players-from-entity-selector.patch | 0 ...nfig-for-health-to-impact-Creeper-explosion-radius.patch | 0 .../0161-Iron-golem-calm-anger-options.patch | 0 .../0162-Breedable-parrots.patch | 0 .../0163-Configurable-powered-rail-boost-modifier.patch | 0 ...Add-config-change-multiplier-critical-damage-value.patch | 0 .../0165-Option-to-disable-dragon-egg-teleporting.patch | 0 .../0166-Config-for-unverified-username-message.patch | 0 .../0167-Make-anvil-cumulative-cost-configurable.patch | 0 .../0168-Bee-can-work-when-raining-or-at-night.patch | 0 .../0169-API-for-any-mob-to-burn-daylight.patch | 0 .../0170-Config-MobEffect-by-world.patch | 0 .../0171-Beacon-Activation-Range-Configurable.patch | 0 .../0172-Make-lightning-rod-range-configurable.patch | 0 ...rp-delay-burp-after-eating-food-fills-hunger-bar-c.patch | 0 .../0174-Allow-player-join-full-server-by-permission.patch | 0 .../0175-Add-portal-permission-bypass.patch | 0 .../0176-Shulker-spawn-from-bullet-options.patch | 0 .../0177-Eating-glow-berries-adds-glow-effect.patch | 0 .../0178-Option-to-make-drowned-break-doors.patch | 0 .../0179-Configurable-hunger-starvation-damage.patch | 0 .../0180-Enhance-SysoutCatcher.patch | 0 .../0181-Add-uptime-command.patch | 0 .../0182-Tool-actionable-options.patch | 0 .../0183-Store-placer-on-Block-when-placed.patch | 0 .../{server => unapplied-server}/0184-Summoner-API.patch | 0 .../0185-Customizable-sleeping-actionbar-messages.patch | 0 ...tion-to-disable-shulker-box-items-from-dropping-co.patch | 0 .../0187-Big-dripleaf-tilt-delay.patch | 0 .../0188-Player-ridable-in-water-option.patch | 0 ...nfig-to-disable-Enderman-teleport-on-projectile-hi.patch | 0 .../0190-Add-compass-command.patch | 0 .../0191-Toggle-for-kinetic-damage.patch | 0 .../0192-Add-Option-for-disable-observer-clocks.patch | 0 .../0193-Customizeable-Zombie-Villager-curing-times.patch | 0 .../0194-Option-for-sponges-to-work-on-lava-and-mud.patch | 0 .../0195-Toggle-for-Wither-s-spawn-sound.patch | 0 .../0196-Cactus-breaks-from-solid-neighbors-config.patch | 0 ...97-Config-to-remove-curse-of-binding-with-weakness.patch | 0 .../0198-Conduit-behavior-configuration.patch | 0 .../0199-Cauldron-fill-chances.patch | 0 .../0200-Config-to-allow-mobs-to-pathfind-over-rails.patch | 0 .../0201-Shulker-change-color-with-dye.patch | 0 .../0202-Extended-OfflinePlayer-API.patch | 0 .../0203-Added-the-ability-to-add-combustible-items.patch | 0 ...ption-for-if-rain-and-thunder-should-stop-on-sleep.patch | 0 ...ance-for-azalea-blocks-to-grow-into-trees-naturall.patch | 0 .../0206-Shift-right-click-to-use-exp-for-mending.patch | 0 ...07-Dolphins-naturally-aggressive-to-players-chance.patch | 0 .../0208-Cows-naturally-aggressive-to-players-chance.patch | 0 .../0209-Option-for-beds-to-explode-on-villager-sleep.patch | 0 .../0210-Halloween-options-and-optimizations.patch | 0 .../0211-Config-for-grindstones.patch | 0 .../0212-UPnP-Port-Forwarding.patch | 0 .../0213-Campfire-option-for-lit-when-placed.patch | 0 ...4-options-to-extinguish-fire-blocks-with-snowballs.patch | 0 .../0215-Add-option-to-disable-zombie-villagers-cure.patch | 0 .../0216-Persistent-BlockEntity-Lore-and-DisplayName.patch | 0 .../0217-Signs-allow-color-codes.patch | 0 ...lp-cave-weeping-and-twisting-vines-configurable-ma.patch | 0 .../0219-Mobs-always-drop-experience.patch | 0 .../{server => unapplied-server}/0220-Grindstone-API.patch | 0 ...-Ability-for-hoe-to-replant-crops-and-nether-warts.patch | 0 .../0222-Turtle-eggs-random-tick-crack-chance.patch | 0 .../0223-Mob-head-visibility-percent.patch | 0 .../0224-Configurable-valid-characters-for-usernames.patch | 0 .../0225-Shears-can-have-looting-enchantment.patch | 0 .../0226-Stop-bees-from-dying-after-stinging.patch | 0 ...0227-Give-bee-counts-in-beehives-to-Purpur-clients.patch | 0 .../0228-Configurable-farmland-trample-height.patch | 0 .../0229-Configurable-player-pickup-exp-delay.patch | 0 .../0230-Allow-void-trading.patch | 0 .../0231-Configurable-phantom-size.patch | 0 .../0232-Max-joins-per-second.patch | 0 .../0233-Configurable-minimum-demand-for-trades.patch | 0 .../0234-Lobotomize-stuck-villagers.patch | 0 .../0235-Option-for-villager-display-trade-item.patch | 0 ...-238526-Fix-spawner-not-spawning-water-animals-cor.patch | 0 .../0237-Config-for-mob-last-hurt-by-player-time.patch | 0 .../0238-Anvil-repair-damage-options.patch | 0 ...tion-to-disable-turtle-egg-trampling-with-feather-.patch | 0 .../0240-Add-toggle-for-enchant-level-clamping.patch | 0 .../0241-Skip-junit-tests-for-purpur-commands.patch | 0 ...plement-configurable-search-radius-for-villagers-t.patch | 0 .../0243-Stonecutter-damage.patch | 0 ...0244-Configurable-damage-settings-for-magma-blocks.patch | 0 .../0245-Add-config-for-snow-on-blue-ice.patch | 0 .../0246-Skeletons-eat-wither-roses.patch | 0 .../0247-Enchantment-Table-Persists-Lapis.patch | 0 .../{server => unapplied-server}/0248-Spark-Profiler.patch | 0 .../0249-Option-to-disable-kick-for-out-of-order-chat.patch | 0 .../0250-Config-for-sculk-shrieker-can_summon-state.patch | 0 .../0251-Config-to-not-let-coral-die.patch | 0 .../0252-Add-local-difficulty-api.patch | 0 .../0253-Add-toggle-for-RNG-manipulation.patch | 0 .../{server => unapplied-server}/0254-Remove-Timings.patch | 0 .../0255-Remove-Mojang-Profiler.patch | 0 ...-Add-more-logger-output-for-invalid-movement-kicks.patch | 0 patches/{server => unapplied-server}/0257-Add-Bee-API.patch | 0 .../0258-Debug-Marker-API.patch | 0 ...259-mob-spawning-option-to-ignore-creative-players.patch | 0 .../0260-Add-skeleton-bow-accuracy-option.patch | 0 .../0261-Add-death-screen-API.patch | 0 .../0262-Implement-ram-and-rambar-commands.patch | 0 ...63-Add-an-option-to-fix-MC-3304-projectile-looting.patch | 0 .../0264-Configurable-block-blast-resistance.patch | 0 .../0265-Configurable-block-fall-damage-modifiers.patch | 0 .../{server => unapplied-server}/0266-Language-API.patch | 0 .../0267-Milk-Keeps-Beneficial-Effects.patch | 0 ...-121706-Fix-mobs-not-looking-up-and-down-when-stra.patch | 0 .../0269-Add-log-suppression-for-LibraryLoader.patch | 0 ...d-option-to-allow-creeper-to-encircle-target-when-.patch | 0 .../0271-Fire-Immunity-API.patch | 0 ...d-option-to-teleport-to-spawn-on-nether-ceiling-da.patch | 0 .../0273-Added-got-ram-event.patch | 0 .../0274-Log-skipped-entity-s-position.patch | 0 .../0275-End-Crystal-Cramming.patch | 0 ...tion-to-allow-beacon-effects-when-covered-by-tinte.patch | 0 ...0277-Add-attribute-clamping-and-armor-limit-config.patch | 0 .../0278-Config-to-remove-explosion-radius-clamp.patch | 0 .../0279-bonemealable-sugarcane-cactus-and-netherwart.patch | 0 .../0280-Add-PreExplodeEvents.patch | 0 .../0281-Improve-output-of-plugins-command.patch | 0 .../0282-Add-mending-multiplier.patch | 0 .../0283-Make-GUI-Great-Again.patch | 0 .../{server => unapplied-server}/0284-Stored-Bee-API.patch | 0 .../0285-Shears-can-defuse-TNT.patch | 0 .../0286-Explorer-Map-API.patch | 0 .../0287-Option-Ocelot-Spawn-Under-Sea-Level.patch | 0 ...d-an-option-for-piglins-to-ignore-gold-trimmed-arm.patch | 0 ...d-option-for-always-showing-item-in-player-death-m.patch | 0 .../0290-place-end-crystal-on-any-block.patch | 0 ...d-option-to-disable-the-copper-oxidation-proximity.patch | 0 .../0292-register-minecraft-debug-commands.patch | 0 .../0293-Configurable-villager-search-radius.patch | 0 .../0294-option-to-make-ravagers-afraid-of-rabbits.patch | 0 .../0295-config-for-startup-commands.patch | 0 .../0296-Config-to-reverse-bubble-column-flow.patch | 0 .../0297-Adopt-MaterialRerouting.patch | 0 367 files changed, 5 insertions(+), 5 deletions(-) rename patches/{ => 1-20-6}/dropped-api/0011-LivingEntity-safeFallDistance.patch (100%) rename patches/{ => 1-20-6}/dropped-api/0032-Potion-NamespacedKey.patch (100%) rename patches/{ => 1-20-6}/dropped-api/0041-Add-item-packet-serialize-event.patch (100%) rename patches/{ => 1-20-6}/dropped-api/0049-Add-hover-lines-API.patch (100%) rename patches/{ => 1-20-6}/dropped-server/0013-LivingEntity-safeFallDistance.patch (100%) rename patches/{ => 1-20-6}/dropped-server/0220-Potion-NamespacedKey.patch (100%) rename patches/{ => 1-20-6}/dropped-server/0236-Configurable-food-attributes.patch (100%) rename patches/{ => 1-20-6}/dropped-server/0255-Send-client-custom-name-of-BE.patch (100%) rename patches/{ => 1-20-6}/dropped-server/0263-Allay-respect-item-NBT.patch (100%) rename patches/{ => 1-20-6}/dropped-server/0271-Add-item-packet-serialize-event.patch (100%) rename patches/{ => 1-20-6}/dropped-server/0292-Add-hover-lines-API.patch (100%) rename patches/{ => 1-20-6}/unapplied-api/0001-Pufferfish-API-Changes.patch (100%) rename patches/{ => 1-20-6}/unapplied-api/0002-Fix-pufferfish-issues.patch (100%) rename patches/{ => 1-20-6}/unapplied-server/0001-Pufferfish-Server-Changes.patch (100%) rename patches/{ => 1-20-6}/unapplied-server/0003-Fix-pufferfish-issues.patch (100%) rename patches/{ => 1-20-6}/unapplied-server/0269-Make-pufferfish-config-relocatable.patch (100%) rename patches/{api => unapplied-api}/0001-Rebrand.patch (100%) rename patches/{api => unapplied-api}/0002-Purpur-config-files.patch (100%) rename patches/{api => unapplied-api}/0003-Build-System-Changes.patch (100%) rename patches/{api => unapplied-api}/0004-Purpur-client-support.patch (100%) rename patches/{api => unapplied-api}/0005-Default-permissions.patch (100%) rename patches/{api => unapplied-api}/0006-Ridables.patch (100%) rename patches/{api => unapplied-api}/0007-Allow-inventory-resizing.patch (100%) rename patches/{api => unapplied-api}/0008-Llama-API.patch (100%) rename patches/{api => unapplied-api}/0009-AFK-API.patch (100%) rename patches/{api => unapplied-api}/0010-Bring-back-server-name.patch (100%) rename patches/{api => unapplied-api}/0011-ExecuteCommandEvent.patch (100%) rename patches/{api => unapplied-api}/0012-Lagging-threshold.patch (100%) rename patches/{api => unapplied-api}/0013-PlayerSetSpawnerTypeWithEggEvent.patch (100%) rename patches/{api => unapplied-api}/0014-Anvil-API.patch (100%) rename patches/{api => unapplied-api}/0015-ItemStack-convenience-methods.patch (100%) rename patches/{api => unapplied-api}/0016-LivingEntity-broadcastItemBreak.patch (100%) rename patches/{api => unapplied-api}/0017-ChatColor-conveniences.patch (100%) rename patches/{api => unapplied-api}/0018-Item-entity-immunities.patch (100%) rename patches/{api => unapplied-api}/0019-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch (100%) rename patches/{api => unapplied-api}/0020-Rabid-Wolf-API.patch (100%) rename patches/{api => unapplied-api}/0021-PlayerBookTooLargeEvent.patch (100%) rename patches/{api => unapplied-api}/0022-Full-netherite-armor-grants-fire-resistance.patch (100%) rename patches/{api => unapplied-api}/0023-Add-EntityTeleportHinderedEvent.patch (100%) rename patches/{api => unapplied-api}/0024-Add-enchantment-target-for-bows-and-crossbows.patch (100%) rename patches/{api => unapplied-api}/0025-API-for-any-mob-to-burn-daylight.patch (100%) rename patches/{api => unapplied-api}/0026-Add-back-player-spawned-endermite-API.patch (100%) rename patches/{api => unapplied-api}/0027-Fix-default-permission-system.patch (100%) rename patches/{api => unapplied-api}/0028-Summoner-API.patch (100%) rename patches/{api => unapplied-api}/0029-Clean-up-version-command-output.patch (100%) rename patches/{api => unapplied-api}/0030-Extended-OfflinePlayer-API.patch (100%) rename patches/{api => unapplied-api}/0031-Added-the-ability-to-add-combustible-items.patch (100%) rename patches/{api => unapplied-api}/0032-Grindstone-API.patch (100%) rename patches/{api => unapplied-api}/0033-Shears-can-have-looting-enchantment.patch (100%) rename patches/{api => unapplied-api}/0034-Lobotomize-stuck-villagers.patch (100%) rename patches/{api => unapplied-api}/0035-Add-local-difficulty-api.patch (100%) rename patches/{api => unapplied-api}/0036-Remove-Timings.patch (100%) rename patches/{api => unapplied-api}/0037-Add-Bee-API.patch (100%) rename patches/{api => unapplied-api}/0038-Debug-Marker-API.patch (100%) rename patches/{api => unapplied-api}/0039-Add-death-screen-API.patch (100%) rename patches/{api => unapplied-api}/0040-Language-API.patch (100%) rename patches/{api => unapplied-api}/0041-Add-log-suppression-for-LibraryLoader.patch (100%) rename patches/{api => unapplied-api}/0042-Fire-Immunity-API.patch (100%) rename patches/{api => unapplied-api}/0043-Added-goat-ram-event.patch (100%) rename patches/{api => unapplied-api}/0044-Add-PreExplodeEvents.patch (100%) rename patches/{api => unapplied-api}/0045-Stored-Bee-API.patch (100%) rename patches/{api => unapplied-api}/0046-Explorer-Map-API.patch (100%) rename patches/{api => unapplied-api}/0047-Stonecutter-damage.patch (100%) rename patches/{generated-api => unapplied-generated-api}/0001-Ridables.patch (100%) rename patches/{generated-api => unapplied-generated-api}/0002-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch (100%) rename patches/{generated-api => unapplied-generated-api}/0003-Add-option-to-disable-zombie-aggressiveness-towards-.patch (100%) rename patches/{generated-api => unapplied-generated-api}/0004-Rabid-Wolf-API.patch (100%) rename patches/{generated-api => unapplied-generated-api}/0005-Iron-golem-poppy-calms-anger.patch (100%) rename patches/{server => unapplied-server}/0001-Rebrand.patch (100%) rename patches/{server => unapplied-server}/0002-Purpur-config-files.patch (100%) rename patches/{server => unapplied-server}/0003-Purpur-client-support.patch (100%) rename patches/{server => unapplied-server}/0004-Fix-decompile-errors.patch (100%) rename patches/{server => unapplied-server}/0005-Component-related-conveniences.patch (100%) rename patches/{server => unapplied-server}/0006-Ridables.patch (100%) rename patches/{server => unapplied-server}/0007-Configurable-entity-base-attributes.patch (100%) rename patches/{server => unapplied-server}/0008-Barrels-and-enderchests-6-rows.patch (100%) rename patches/{server => unapplied-server}/0009-Llama-API.patch (100%) rename patches/{server => unapplied-server}/0010-AFK-API.patch (100%) rename patches/{server => unapplied-server}/0011-Bring-back-server-name.patch (100%) rename patches/{server => unapplied-server}/0012-Configurable-server-mod-name.patch (100%) rename patches/{server => unapplied-server}/0013-Lagging-threshold.patch (100%) rename patches/{server => unapplied-server}/0014-PlayerSetSpawnerTypeWithEggEvent.patch (100%) rename patches/{server => unapplied-server}/0015-Anvil-API.patch (100%) rename patches/{server => unapplied-server}/0016-Alternative-Keepalive-Handling.patch (100%) rename patches/{server => unapplied-server}/0017-Silk-touch-spawners.patch (100%) rename patches/{server => unapplied-server}/0018-Add-turtle-egg-block-options.patch (100%) rename patches/{server => unapplied-server}/0019-Logger-settings-suppressing-pointless-logs.patch (100%) rename patches/{server => unapplied-server}/0020-Disable-outdated-build-check.patch (100%) rename patches/{server => unapplied-server}/0021-Giants-AI-settings.patch (100%) rename patches/{server => unapplied-server}/0022-Zombie-horse-naturally-spawn.patch (100%) rename patches/{server => unapplied-server}/0023-Charged-creeper-naturally-spawn.patch (100%) rename patches/{server => unapplied-server}/0024-Rabbit-naturally-spawn-toast-and-killer.patch (100%) rename patches/{server => unapplied-server}/0025-Fix-outdated-server-showing-in-ping-before-server-fu.patch (100%) rename patches/{server => unapplied-server}/0026-Tulips-change-fox-type.patch (100%) rename patches/{server => unapplied-server}/0027-Breedable-Polar-Bears.patch (100%) rename patches/{server => unapplied-server}/0028-Chickens-can-retaliate.patch (100%) rename patches/{server => unapplied-server}/0029-Add-option-to-set-armorstand-step-height.patch (100%) rename patches/{server => unapplied-server}/0030-Cat-spawning-options.patch (100%) rename patches/{server => unapplied-server}/0031-Cows-eat-mushrooms.patch (100%) rename patches/{server => unapplied-server}/0032-Fix-cow-rotation-when-shearing-mooshroom.patch (100%) rename patches/{server => unapplied-server}/0033-Pigs-give-saddle-back.patch (100%) rename patches/{server => unapplied-server}/0034-Snowman-drop-and-put-back-pumpkin.patch (100%) rename patches/{server => unapplied-server}/0035-Ender-dragon-always-drop-full-exp.patch (100%) rename patches/{server => unapplied-server}/0036-Allow-soil-to-moisten-from-water-directly-under-it.patch (100%) rename patches/{server => unapplied-server}/0037-Minecart-settings-and-WASD-controls.patch (100%) rename patches/{server => unapplied-server}/0038-Disable-loot-drops-on-death-by-cramming.patch (100%) rename patches/{server => unapplied-server}/0039-Option-to-toggle-milk-curing-bad-omen.patch (100%) rename patches/{server => unapplied-server}/0040-End-gateway-should-check-if-entity-can-use-portal.patch (100%) rename patches/{server => unapplied-server}/0041-Skip-events-if-there-s-no-listeners.patch (100%) rename patches/{server => unapplied-server}/0042-Add-permission-for-F3-N-debug.patch (100%) rename patches/{server => unapplied-server}/0043-Configurable-TPS-Catchup.patch (100%) rename patches/{server => unapplied-server}/0044-Add-option-to-allow-loyalty-on-tridents-to-work-in-t.patch (100%) rename patches/{server => unapplied-server}/0045-Add-enderman-and-creeper-griefing-controls.patch (100%) rename patches/{server => unapplied-server}/0046-Villagers-follow-emerald-blocks.patch (100%) rename patches/{server => unapplied-server}/0047-Allow-leashing-villagers.patch (100%) rename patches/{server => unapplied-server}/0048-Implement-infinite-liquids.patch (100%) rename patches/{server => unapplied-server}/0049-Make-lava-flow-speed-configurable.patch (100%) rename patches/{server => unapplied-server}/0050-Add-player-death-exp-control-options.patch (100%) rename patches/{server => unapplied-server}/0051-Configurable-void-damage-height-and-damage.patch (100%) rename patches/{server => unapplied-server}/0052-Add-canSaveToDisk-to-Entity.patch (100%) rename patches/{server => unapplied-server}/0053-Dispenser-curse-of-binding-protection.patch (100%) rename patches/{server => unapplied-server}/0054-Add-option-for-boats-to-eject-players-on-land.patch (100%) rename patches/{server => unapplied-server}/0055-Mending-mends-most-damages-equipment-first.patch (100%) rename patches/{server => unapplied-server}/0056-Add-5-second-tps-average-in-tps.patch (100%) rename patches/{server => unapplied-server}/0057-Implement-elytra-settings.patch (100%) rename patches/{server => unapplied-server}/0058-Item-entity-immunities.patch (100%) rename patches/{server => unapplied-server}/0059-Add-ping-command.patch (100%) rename patches/{server => unapplied-server}/0060-Add-demo-command.patch (100%) rename patches/{server => unapplied-server}/0061-Add-credits-command.patch (100%) rename patches/{server => unapplied-server}/0062-Configurable-jockey-options.patch (100%) rename patches/{server => unapplied-server}/0063-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch (100%) rename patches/{server => unapplied-server}/0064-Add-phantom-spawning-options.patch (100%) rename patches/{server => unapplied-server}/0065-Implement-bed-explosion-options.patch (100%) rename patches/{server => unapplied-server}/0066-Implement-respawn-anchor-explosion-options.patch (100%) rename patches/{server => unapplied-server}/0067-Add-allow-water-in-end-world-option.patch (100%) rename patches/{server => unapplied-server}/0068-Allow-color-codes-in-books.patch (100%) rename patches/{server => unapplied-server}/0069-Entity-lifespan.patch (100%) rename patches/{server => unapplied-server}/0070-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch (100%) rename patches/{server => unapplied-server}/0071-Squid-EAR-immunity.patch (100%) rename patches/{server => unapplied-server}/0072-Phantoms-burn-in-light.patch (100%) rename patches/{server => unapplied-server}/0073-Configurable-villager-breeding.patch (100%) rename patches/{server => unapplied-server}/0074-Redstone-deactivates-spawners.patch (100%) rename patches/{server => unapplied-server}/0075-Totems-work-in-inventory.patch (100%) rename patches/{server => unapplied-server}/0076-Add-vindicator-johnny-spawn-chance.patch (100%) rename patches/{server => unapplied-server}/0077-Dispensers-place-anvils-option.patch (100%) rename patches/{server => unapplied-server}/0078-Allow-anvil-colors.patch (100%) rename patches/{server => unapplied-server}/0079-Add-option-to-disable-dolphin-treasure-searching.patch (100%) rename patches/{server => unapplied-server}/0080-Short-enderman-height.patch (100%) rename patches/{server => unapplied-server}/0081-Stop-squids-floating-on-top-of-water.patch (100%) rename patches/{server => unapplied-server}/0082-Crying-obsidian-valid-for-portal-frames.patch (100%) rename patches/{server => unapplied-server}/0083-Entities-can-use-portals-configuration.patch (100%) rename patches/{server => unapplied-server}/0084-LivingEntity-broadcastItemBreak.patch (100%) rename patches/{server => unapplied-server}/0085-Customizable-wither-health-and-healing.patch (100%) rename patches/{server => unapplied-server}/0086-Allow-toggling-special-MobSpawners-per-world.patch (100%) rename patches/{server => unapplied-server}/0087-Raid-cooldown-setting.patch (100%) rename patches/{server => unapplied-server}/0088-Despawn-rate-config-options-per-projectile-type.patch (100%) rename patches/{server => unapplied-server}/0089-Add-option-to-disable-zombie-aggressiveness-towards-.patch (100%) rename patches/{server => unapplied-server}/0090-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch (100%) rename patches/{server => unapplied-server}/0091-Flying-squids-Oh-my.patch (100%) rename patches/{server => unapplied-server}/0092-Infinity-bow-settings.patch (100%) rename patches/{server => unapplied-server}/0093-Configurable-daylight-cycle.patch (100%) rename patches/{server => unapplied-server}/0094-Allow-infinite-and-mending-enchantments-together.patch (100%) rename patches/{server => unapplied-server}/0095-Furnace-uses-lava-from-underneath.patch (100%) rename patches/{server => unapplied-server}/0096-Arrows-should-not-reset-despawn-counter.patch (100%) rename patches/{server => unapplied-server}/0097-Ability-to-re-add-farmland-mechanics-from-Alpha.patch (100%) rename patches/{server => unapplied-server}/0098-Add-adjustable-breeding-cooldown-to-config.patch (100%) rename patches/{server => unapplied-server}/0099-Make-entity-breeding-times-configurable.patch (100%) rename patches/{server => unapplied-server}/0100-Apply-display-names-from-item-forms-of-entities-to-e.patch (100%) rename patches/{server => unapplied-server}/0101-Set-name-visible-when-using-a-Name-Tag-on-an-Armor-S.patch (100%) rename patches/{server => unapplied-server}/0102-Add-config-for-allowing-Endermen-to-despawn-even-whi.patch (100%) rename patches/{server => unapplied-server}/0103-Add-configurable-snowball-damage.patch (100%) rename patches/{server => unapplied-server}/0104-Changeable-Mob-Left-Handed-Chance.patch (100%) rename patches/{server => unapplied-server}/0105-Add-boat-fall-damage-config.patch (100%) rename patches/{server => unapplied-server}/0106-Snow-Golem-rate-of-fire-config.patch (100%) rename patches/{server => unapplied-server}/0107-EMC-Configurable-disable-give-dropping.patch (100%) rename patches/{server => unapplied-server}/0108-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch (100%) rename patches/{server => unapplied-server}/0109-Toggle-for-Zombified-Piglin-death-always-counting-as.patch (100%) rename patches/{server => unapplied-server}/0110-Configurable-chance-for-wolves-to-spawn-rabid.patch (100%) rename patches/{server => unapplied-server}/0111-Configurable-default-collar-color.patch (100%) rename patches/{server => unapplied-server}/0112-Phantom-flames-on-swoop.patch (100%) rename patches/{server => unapplied-server}/0113-Option-for-chests-to-open-even-with-a-solid-block-on.patch (100%) rename patches/{server => unapplied-server}/0114-Implement-TPSBar.patch (100%) rename patches/{server => unapplied-server}/0115-Striders-give-saddle-back.patch (100%) rename patches/{server => unapplied-server}/0116-PlayerBookTooLargeEvent.patch (100%) rename patches/{server => unapplied-server}/0117-Full-netherite-armor-grants-fire-resistance.patch (100%) rename patches/{server => unapplied-server}/0118-Add-mobGriefing-bypass-to-everything-affected.patch (100%) rename patches/{server => unapplied-server}/0119-Config-to-allow-Note-Block-sounds-when-blocked.patch (100%) rename patches/{server => unapplied-server}/0120-Add-EntityTeleportHinderedEvent.patch (100%) rename patches/{server => unapplied-server}/0121-Farmland-trampling-changes.patch (100%) rename patches/{server => unapplied-server}/0122-Movement-options-for-armor-stands.patch (100%) rename patches/{server => unapplied-server}/0123-Fix-stuck-in-portals.patch (100%) rename patches/{server => unapplied-server}/0124-Toggle-for-water-sensitive-mob-damage.patch (100%) rename patches/{server => unapplied-server}/0125-Config-to-always-tame-in-Creative.patch (100%) rename patches/{server => unapplied-server}/0126-End-crystal-explosion-options.patch (100%) rename patches/{server => unapplied-server}/0127-Configs-for-if-Wither-Ender-Dragon-can-ride-vehicles.patch (100%) rename patches/{server => unapplied-server}/0128-Dont-run-with-scissors.patch (100%) rename patches/{server => unapplied-server}/0129-One-Punch-Man.patch (100%) rename patches/{server => unapplied-server}/0130-Configurable-Ender-Pearl-cooldown-damage-and-Endermi.patch (100%) rename patches/{server => unapplied-server}/0131-Config-to-ignore-nearby-mobs-when-sleeping.patch (100%) rename patches/{server => unapplied-server}/0132-Add-back-player-spawned-endermite-API.patch (100%) rename patches/{server => unapplied-server}/0133-Config-Enderman-aggressiveness-towards-Endermites.patch (100%) rename patches/{server => unapplied-server}/0134-Config-to-ignore-Dragon-Head-wearers-and-stare-aggro.patch (100%) rename patches/{server => unapplied-server}/0135-Tick-fluids-config.patch (100%) rename patches/{server => unapplied-server}/0136-Config-to-disable-Llama-caravans.patch (100%) rename patches/{server => unapplied-server}/0137-Config-to-make-Creepers-explode-on-death.patch (100%) rename patches/{server => unapplied-server}/0138-Configurable-ravager-griefable-blocks-list.patch (100%) rename patches/{server => unapplied-server}/0139-Sneak-to-bulk-process-composter.patch (100%) rename patches/{server => unapplied-server}/0140-Config-for-skipping-night.patch (100%) rename patches/{server => unapplied-server}/0141-Add-config-for-villager-trading.patch (100%) rename patches/{server => unapplied-server}/0142-Allow-infinity-on-crossbows.patch (100%) rename patches/{server => unapplied-server}/0143-Drowning-Settings.patch (100%) rename patches/{server => unapplied-server}/0144-Break-individual-slabs-when-sneaking.patch (100%) rename patches/{server => unapplied-server}/0145-Config-to-disable-hostile-mob-spawn-on-ice.patch (100%) rename patches/{server => unapplied-server}/0146-Config-to-show-Armor-Stand-arms-on-spawn.patch (100%) rename patches/{server => unapplied-server}/0147-Option-to-make-doors-require-redstone.patch (100%) rename patches/{server => unapplied-server}/0148-Config-to-allow-for-unsafe-enchants.patch (100%) rename patches/{server => unapplied-server}/0149-Configurable-sponge-absorption.patch (100%) rename patches/{server => unapplied-server}/0150-Projectile-offset-config.patch (100%) rename patches/{server => unapplied-server}/0151-Config-for-powered-rail-activation-distance.patch (100%) rename patches/{server => unapplied-server}/0152-Piglin-portal-spawn-modifier.patch (100%) rename patches/{server => unapplied-server}/0153-Config-to-change-max-number-of-bees.patch (100%) rename patches/{server => unapplied-server}/0154-Config-for-wither-explosion-radius.patch (100%) rename patches/{server => unapplied-server}/0155-Gamemode-extra-permissions.patch (100%) rename patches/{server => unapplied-server}/0156-Configurable-piston-push-limit.patch (100%) rename patches/{server => unapplied-server}/0157-Configurable-broadcast-settings.patch (100%) rename patches/{server => unapplied-server}/0158-Configurable-mob-blindness.patch (100%) rename patches/{server => unapplied-server}/0159-Hide-hidden-players-from-entity-selector.patch (100%) rename patches/{server => unapplied-server}/0160-Config-for-health-to-impact-Creeper-explosion-radius.patch (100%) rename patches/{server => unapplied-server}/0161-Iron-golem-calm-anger-options.patch (100%) rename patches/{server => unapplied-server}/0162-Breedable-parrots.patch (100%) rename patches/{server => unapplied-server}/0163-Configurable-powered-rail-boost-modifier.patch (100%) rename patches/{server => unapplied-server}/0164-Add-config-change-multiplier-critical-damage-value.patch (100%) rename patches/{server => unapplied-server}/0165-Option-to-disable-dragon-egg-teleporting.patch (100%) rename patches/{server => unapplied-server}/0166-Config-for-unverified-username-message.patch (100%) rename patches/{server => unapplied-server}/0167-Make-anvil-cumulative-cost-configurable.patch (100%) rename patches/{server => unapplied-server}/0168-Bee-can-work-when-raining-or-at-night.patch (100%) rename patches/{server => unapplied-server}/0169-API-for-any-mob-to-burn-daylight.patch (100%) rename patches/{server => unapplied-server}/0170-Config-MobEffect-by-world.patch (100%) rename patches/{server => unapplied-server}/0171-Beacon-Activation-Range-Configurable.patch (100%) rename patches/{server => unapplied-server}/0172-Make-lightning-rod-range-configurable.patch (100%) rename patches/{server => unapplied-server}/0173-Burp-delay-burp-after-eating-food-fills-hunger-bar-c.patch (100%) rename patches/{server => unapplied-server}/0174-Allow-player-join-full-server-by-permission.patch (100%) rename patches/{server => unapplied-server}/0175-Add-portal-permission-bypass.patch (100%) rename patches/{server => unapplied-server}/0176-Shulker-spawn-from-bullet-options.patch (100%) rename patches/{server => unapplied-server}/0177-Eating-glow-berries-adds-glow-effect.patch (100%) rename patches/{server => unapplied-server}/0178-Option-to-make-drowned-break-doors.patch (100%) rename patches/{server => unapplied-server}/0179-Configurable-hunger-starvation-damage.patch (100%) rename patches/{server => unapplied-server}/0180-Enhance-SysoutCatcher.patch (100%) rename patches/{server => unapplied-server}/0181-Add-uptime-command.patch (100%) rename patches/{server => unapplied-server}/0182-Tool-actionable-options.patch (100%) rename patches/{server => unapplied-server}/0183-Store-placer-on-Block-when-placed.patch (100%) rename patches/{server => unapplied-server}/0184-Summoner-API.patch (100%) rename patches/{server => unapplied-server}/0185-Customizable-sleeping-actionbar-messages.patch (100%) rename patches/{server => unapplied-server}/0186-option-to-disable-shulker-box-items-from-dropping-co.patch (100%) rename patches/{server => unapplied-server}/0187-Big-dripleaf-tilt-delay.patch (100%) rename patches/{server => unapplied-server}/0188-Player-ridable-in-water-option.patch (100%) rename patches/{server => unapplied-server}/0189-Config-to-disable-Enderman-teleport-on-projectile-hi.patch (100%) rename patches/{server => unapplied-server}/0190-Add-compass-command.patch (100%) rename patches/{server => unapplied-server}/0191-Toggle-for-kinetic-damage.patch (100%) rename patches/{server => unapplied-server}/0192-Add-Option-for-disable-observer-clocks.patch (100%) rename patches/{server => unapplied-server}/0193-Customizeable-Zombie-Villager-curing-times.patch (100%) rename patches/{server => unapplied-server}/0194-Option-for-sponges-to-work-on-lava-and-mud.patch (100%) rename patches/{server => unapplied-server}/0195-Toggle-for-Wither-s-spawn-sound.patch (100%) rename patches/{server => unapplied-server}/0196-Cactus-breaks-from-solid-neighbors-config.patch (100%) rename patches/{server => unapplied-server}/0197-Config-to-remove-curse-of-binding-with-weakness.patch (100%) rename patches/{server => unapplied-server}/0198-Conduit-behavior-configuration.patch (100%) rename patches/{server => unapplied-server}/0199-Cauldron-fill-chances.patch (100%) rename patches/{server => unapplied-server}/0200-Config-to-allow-mobs-to-pathfind-over-rails.patch (100%) rename patches/{server => unapplied-server}/0201-Shulker-change-color-with-dye.patch (100%) rename patches/{server => unapplied-server}/0202-Extended-OfflinePlayer-API.patch (100%) rename patches/{server => unapplied-server}/0203-Added-the-ability-to-add-combustible-items.patch (100%) rename patches/{server => unapplied-server}/0204-Option-for-if-rain-and-thunder-should-stop-on-sleep.patch (100%) rename patches/{server => unapplied-server}/0205-Chance-for-azalea-blocks-to-grow-into-trees-naturall.patch (100%) rename patches/{server => unapplied-server}/0206-Shift-right-click-to-use-exp-for-mending.patch (100%) rename patches/{server => unapplied-server}/0207-Dolphins-naturally-aggressive-to-players-chance.patch (100%) rename patches/{server => unapplied-server}/0208-Cows-naturally-aggressive-to-players-chance.patch (100%) rename patches/{server => unapplied-server}/0209-Option-for-beds-to-explode-on-villager-sleep.patch (100%) rename patches/{server => unapplied-server}/0210-Halloween-options-and-optimizations.patch (100%) rename patches/{server => unapplied-server}/0211-Config-for-grindstones.patch (100%) rename patches/{server => unapplied-server}/0212-UPnP-Port-Forwarding.patch (100%) rename patches/{server => unapplied-server}/0213-Campfire-option-for-lit-when-placed.patch (100%) rename patches/{server => unapplied-server}/0214-options-to-extinguish-fire-blocks-with-snowballs.patch (100%) rename patches/{server => unapplied-server}/0215-Add-option-to-disable-zombie-villagers-cure.patch (100%) rename patches/{server => unapplied-server}/0216-Persistent-BlockEntity-Lore-and-DisplayName.patch (100%) rename patches/{server => unapplied-server}/0217-Signs-allow-color-codes.patch (100%) rename patches/{server => unapplied-server}/0218-Kelp-cave-weeping-and-twisting-vines-configurable-ma.patch (100%) rename patches/{server => unapplied-server}/0219-Mobs-always-drop-experience.patch (100%) rename patches/{server => unapplied-server}/0220-Grindstone-API.patch (100%) rename patches/{server => unapplied-server}/0221-Ability-for-hoe-to-replant-crops-and-nether-warts.patch (100%) rename patches/{server => unapplied-server}/0222-Turtle-eggs-random-tick-crack-chance.patch (100%) rename patches/{server => unapplied-server}/0223-Mob-head-visibility-percent.patch (100%) rename patches/{server => unapplied-server}/0224-Configurable-valid-characters-for-usernames.patch (100%) rename patches/{server => unapplied-server}/0225-Shears-can-have-looting-enchantment.patch (100%) rename patches/{server => unapplied-server}/0226-Stop-bees-from-dying-after-stinging.patch (100%) rename patches/{server => unapplied-server}/0227-Give-bee-counts-in-beehives-to-Purpur-clients.patch (100%) rename patches/{server => unapplied-server}/0228-Configurable-farmland-trample-height.patch (100%) rename patches/{server => unapplied-server}/0229-Configurable-player-pickup-exp-delay.patch (100%) rename patches/{server => unapplied-server}/0230-Allow-void-trading.patch (100%) rename patches/{server => unapplied-server}/0231-Configurable-phantom-size.patch (100%) rename patches/{server => unapplied-server}/0232-Max-joins-per-second.patch (100%) rename patches/{server => unapplied-server}/0233-Configurable-minimum-demand-for-trades.patch (100%) rename patches/{server => unapplied-server}/0234-Lobotomize-stuck-villagers.patch (100%) rename patches/{server => unapplied-server}/0235-Option-for-villager-display-trade-item.patch (100%) rename patches/{server => unapplied-server}/0236-MC-238526-Fix-spawner-not-spawning-water-animals-cor.patch (100%) rename patches/{server => unapplied-server}/0237-Config-for-mob-last-hurt-by-player-time.patch (100%) rename patches/{server => unapplied-server}/0238-Anvil-repair-damage-options.patch (100%) rename patches/{server => unapplied-server}/0239-Option-to-disable-turtle-egg-trampling-with-feather-.patch (100%) rename patches/{server => unapplied-server}/0240-Add-toggle-for-enchant-level-clamping.patch (100%) rename patches/{server => unapplied-server}/0241-Skip-junit-tests-for-purpur-commands.patch (100%) rename patches/{server => unapplied-server}/0242-Implement-configurable-search-radius-for-villagers-t.patch (100%) rename patches/{server => unapplied-server}/0243-Stonecutter-damage.patch (100%) rename patches/{server => unapplied-server}/0244-Configurable-damage-settings-for-magma-blocks.patch (100%) rename patches/{server => unapplied-server}/0245-Add-config-for-snow-on-blue-ice.patch (100%) rename patches/{server => unapplied-server}/0246-Skeletons-eat-wither-roses.patch (100%) rename patches/{server => unapplied-server}/0247-Enchantment-Table-Persists-Lapis.patch (100%) rename patches/{server => unapplied-server}/0248-Spark-Profiler.patch (100%) rename patches/{server => unapplied-server}/0249-Option-to-disable-kick-for-out-of-order-chat.patch (100%) rename patches/{server => unapplied-server}/0250-Config-for-sculk-shrieker-can_summon-state.patch (100%) rename patches/{server => unapplied-server}/0251-Config-to-not-let-coral-die.patch (100%) rename patches/{server => unapplied-server}/0252-Add-local-difficulty-api.patch (100%) rename patches/{server => unapplied-server}/0253-Add-toggle-for-RNG-manipulation.patch (100%) rename patches/{server => unapplied-server}/0254-Remove-Timings.patch (100%) rename patches/{server => unapplied-server}/0255-Remove-Mojang-Profiler.patch (100%) rename patches/{server => unapplied-server}/0256-Add-more-logger-output-for-invalid-movement-kicks.patch (100%) rename patches/{server => unapplied-server}/0257-Add-Bee-API.patch (100%) rename patches/{server => unapplied-server}/0258-Debug-Marker-API.patch (100%) rename patches/{server => unapplied-server}/0259-mob-spawning-option-to-ignore-creative-players.patch (100%) rename patches/{server => unapplied-server}/0260-Add-skeleton-bow-accuracy-option.patch (100%) rename patches/{server => unapplied-server}/0261-Add-death-screen-API.patch (100%) rename patches/{server => unapplied-server}/0262-Implement-ram-and-rambar-commands.patch (100%) rename patches/{server => unapplied-server}/0263-Add-an-option-to-fix-MC-3304-projectile-looting.patch (100%) rename patches/{server => unapplied-server}/0264-Configurable-block-blast-resistance.patch (100%) rename patches/{server => unapplied-server}/0265-Configurable-block-fall-damage-modifiers.patch (100%) rename patches/{server => unapplied-server}/0266-Language-API.patch (100%) rename patches/{server => unapplied-server}/0267-Milk-Keeps-Beneficial-Effects.patch (100%) rename patches/{server => unapplied-server}/0268-MC-121706-Fix-mobs-not-looking-up-and-down-when-stra.patch (100%) rename patches/{server => unapplied-server}/0269-Add-log-suppression-for-LibraryLoader.patch (100%) rename patches/{server => unapplied-server}/0270-Add-option-to-allow-creeper-to-encircle-target-when-.patch (100%) rename patches/{server => unapplied-server}/0271-Fire-Immunity-API.patch (100%) rename patches/{server => unapplied-server}/0272-Add-option-to-teleport-to-spawn-on-nether-ceiling-da.patch (100%) rename patches/{server => unapplied-server}/0273-Added-got-ram-event.patch (100%) rename patches/{server => unapplied-server}/0274-Log-skipped-entity-s-position.patch (100%) rename patches/{server => unapplied-server}/0275-End-Crystal-Cramming.patch (100%) rename patches/{server => unapplied-server}/0276-Option-to-allow-beacon-effects-when-covered-by-tinte.patch (100%) rename patches/{server => unapplied-server}/0277-Add-attribute-clamping-and-armor-limit-config.patch (100%) rename patches/{server => unapplied-server}/0278-Config-to-remove-explosion-radius-clamp.patch (100%) rename patches/{server => unapplied-server}/0279-bonemealable-sugarcane-cactus-and-netherwart.patch (100%) rename patches/{server => unapplied-server}/0280-Add-PreExplodeEvents.patch (100%) rename patches/{server => unapplied-server}/0281-Improve-output-of-plugins-command.patch (100%) rename patches/{server => unapplied-server}/0282-Add-mending-multiplier.patch (100%) rename patches/{server => unapplied-server}/0283-Make-GUI-Great-Again.patch (100%) rename patches/{server => unapplied-server}/0284-Stored-Bee-API.patch (100%) rename patches/{server => unapplied-server}/0285-Shears-can-defuse-TNT.patch (100%) rename patches/{server => unapplied-server}/0286-Explorer-Map-API.patch (100%) rename patches/{server => unapplied-server}/0287-Option-Ocelot-Spawn-Under-Sea-Level.patch (100%) rename patches/{server => unapplied-server}/0288-add-an-option-for-piglins-to-ignore-gold-trimmed-arm.patch (100%) rename patches/{server => unapplied-server}/0289-Add-option-for-always-showing-item-in-player-death-m.patch (100%) rename patches/{server => unapplied-server}/0290-place-end-crystal-on-any-block.patch (100%) rename patches/{server => unapplied-server}/0291-Add-option-to-disable-the-copper-oxidation-proximity.patch (100%) rename patches/{server => unapplied-server}/0292-register-minecraft-debug-commands.patch (100%) rename patches/{server => unapplied-server}/0293-Configurable-villager-search-radius.patch (100%) rename patches/{server => unapplied-server}/0294-option-to-make-ravagers-afraid-of-rabbits.patch (100%) rename patches/{server => unapplied-server}/0295-config-for-startup-commands.patch (100%) rename patches/{server => unapplied-server}/0296-Config-to-reverse-bubble-column-flow.patch (100%) rename patches/{server => unapplied-server}/0297-Adopt-MaterialRerouting.patch (100%) diff --git a/README.md b/README.md index df4b3919b..ab83fa4b8 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ Join us on Discord: ## Downloads Downloads can be obtained from the [downloads page](https://purpurmc.org/downloads/) or the [downloads API](https://api.purpurmc.org). -[![Build Status](https://img.shields.io/github/actions/workflow/status/PurpurMC/Purpur/build.yml?branch=ver%2F1.20.6&event=push&label=Downloads&logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABhWlDQ1BJQ0MgcHJvZmlsZQAAKJF9kT1Iw0AcxV9bxSIVh1YQcYhQnSyIiuimVShChVArtOpgcukXNGlIUlwcBdeCgx+LVQcXZ10dXAVB8APE0clJ0UVK/F9SaBHjwXE/3t173L0D/PUyU82OMUDVLCOViAuZ7KrQ9YogwujDEGYkZupzopiE5/i6h4+vdzGe5X3uz9Gj5EwG+ATiWaYbFvEG8dSmpXPeJ46woqQQnxOPGnRB4keuyy6/cS447OeZESOdmieOEAuFNpbbmBUNlXiSOKqoGuX7My4rnLc4q+Uqa96TvzCU01aWuU5zEAksYgkiBMioooQyLMRo1UgxkaL9uId/wPGL5JLJVQIjxwIqUCE5fvA/+N2tmZ8Yd5NCcaDzxbY/hoGuXaBRs+3vY9tunACBZ+BKa/krdWD6k/RaS4seAb3bwMV1S5P3gMsdoP9JlwzJkQI0/fk88H5G35QFwrdA95rbW3Mfpw9AmrpK3gAHh8BIgbLXPd4dbO/t3zPN/n4Ax9dyyerighsAAAAGYktHRAAAAAAAAPlDu38AAAAJcEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfmCBMWBjFhOpnxAAACyklEQVQ4y32TXWgdZRCGn8k5Z3e/bzcJRFuoDRqIIPGniaSl1qgXKYhiLUgleFESW1qQ4g94oVKQJmga0ILRBuvfheJFIbY3SmzRFsWgQrTQFlRoKSVXgcMxJiS7++1ukvHiNKGU6FzNDO8MMw8zwn9Yz5c6anKeChxiMk599aq8sZ5Obk3sGNd7G5aZCHJ+Oj8gAwD9I3rSJmyvzLHz+HG5frO+vOaNa3NXiUkKQj9hQ1jQgWrlyCCV6gIdtmBjoJwbPqgL+R08PDQkCUADwD0TerqzxFTJY++vz0l7c0q/F7P5+aNUqyvM2CU2RAV7hsek3XPs3/QHF7/YrSfrDVQrxrErdESNNTYByAp3NmWUTYaGGSuho+QltAGYRdqilChMeKbO4Ijang5+CVJmbcr20PG3n9NiY6ZOvCW9ACMHdDLIeDDIqTWmtAQJV6OMyhOTsqWBQQo/hvP7pFcWeDxwtAQxGqbEq3isI7EOjRy3NyuPPHtOur0UXWMQZXgAX78uP3sJpTBmyHfsGDmotdF+rQWObq/gnSCm9PQ3chnA3qgRgL5jmjXlTM/n7Ny8yJXRY2IA3tur0yaHF8blLoAzj2kaNNBpZvk2iGntuiZBHWLOtXJC3hbzV5SxtDq6yZmzCXOrsRezHNa4YBzlKGN6bQXryD96W+4PU14zGbw/oLMf79EPbAI2g7M9+smP3fqPKVAT81LnFWnzM1y9gYC9gWtwTD6MEsq+Y8Lm7DMZ7cZxt5/T5xd8Fy5SfuC6fA4QZjdd8eEX9eLwAZ1StHKiT1MARStnHtWZH7bpjKIVgKutmipq50O94Mr6+9oKR8ekyy7x5qd9/NmYslynK4WfUjWOqiAFgElZmY+41BTzcrAkW9d9ptO9etgU7I8S3vVyDtkY/JzPwoxXzCJjt6Uy+r/fuGq/3affezkPRSniJ0y2zsqT6+n+BfRHKWgwbKNIAAAAAElFTkSuQmCC)](https://purpurmc.org/downloads/) +[![Build Status](https://img.shields.io/github/actions/workflow/status/PurpurMC/Purpur/build.yml?branch=ver%2F1.21&event=push&label=Downloads&logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABhWlDQ1BJQ0MgcHJvZmlsZQAAKJF9kT1Iw0AcxV9bxSIVh1YQcYhQnSyIiuimVShChVArtOpgcukXNGlIUlwcBdeCgx+LVQcXZ10dXAVB8APE0clJ0UVK/F9SaBHjwXE/3t173L0D/PUyU82OMUDVLCOViAuZ7KrQ9YogwujDEGYkZupzopiE5/i6h4+vdzGe5X3uz9Gj5EwG+ATiWaYbFvEG8dSmpXPeJ46woqQQnxOPGnRB4keuyy6/cS447OeZESOdmieOEAuFNpbbmBUNlXiSOKqoGuX7My4rnLc4q+Uqa96TvzCU01aWuU5zEAksYgkiBMioooQyLMRo1UgxkaL9uId/wPGL5JLJVQIjxwIqUCE5fvA/+N2tmZ8Yd5NCcaDzxbY/hoGuXaBRs+3vY9tunACBZ+BKa/krdWD6k/RaS4seAb3bwMV1S5P3gMsdoP9JlwzJkQI0/fk88H5G35QFwrdA95rbW3Mfpw9AmrpK3gAHh8BIgbLXPd4dbO/t3zPN/n4Ax9dyyerighsAAAAGYktHRAAAAAAAAPlDu38AAAAJcEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfmCBMWBjFhOpnxAAACyklEQVQ4y32TXWgdZRCGn8k5Z3e/bzcJRFuoDRqIIPGniaSl1qgXKYhiLUgleFESW1qQ4g94oVKQJmga0ILRBuvfheJFIbY3SmzRFsWgQrTQFlRoKSVXgcMxJiS7++1ukvHiNKGU6FzNDO8MMw8zwn9Yz5c6anKeChxiMk599aq8sZ5Obk3sGNd7G5aZCHJ+Oj8gAwD9I3rSJmyvzLHz+HG5frO+vOaNa3NXiUkKQj9hQ1jQgWrlyCCV6gIdtmBjoJwbPqgL+R08PDQkCUADwD0TerqzxFTJY++vz0l7c0q/F7P5+aNUqyvM2CU2RAV7hsek3XPs3/QHF7/YrSfrDVQrxrErdESNNTYByAp3NmWUTYaGGSuho+QltAGYRdqilChMeKbO4Ijang5+CVJmbcr20PG3n9NiY6ZOvCW9ACMHdDLIeDDIqTWmtAQJV6OMyhOTsqWBQQo/hvP7pFcWeDxwtAQxGqbEq3isI7EOjRy3NyuPPHtOur0UXWMQZXgAX78uP3sJpTBmyHfsGDmotdF+rQWObq/gnSCm9PQ3chnA3qgRgL5jmjXlTM/n7Ny8yJXRY2IA3tur0yaHF8blLoAzj2kaNNBpZvk2iGntuiZBHWLOtXJC3hbzV5SxtDq6yZmzCXOrsRezHNa4YBzlKGN6bQXryD96W+4PU14zGbw/oLMf79EPbAI2g7M9+smP3fqPKVAT81LnFWnzM1y9gYC9gWtwTD6MEsq+Y8Lm7DMZ7cZxt5/T5xd8Fy5SfuC6fA4QZjdd8eEX9eLwAZ1StHKiT1MARStnHtWZH7bpjKIVgKutmipq50O94Mr6+9oKR8ekyy7x5qd9/NmYslynK4WfUjWOqiAFgElZmY+41BTzcrAkW9d9ptO9etgU7I8S3vVyDtkY/JzPwoxXzCJjt6Uy+r/fuGq/3affezkPRSniJ0y2zsqT6+n+BfRHKWgwbKNIAAAAAElFTkSuQmCC)](https://purpurmc.org/downloads/) Downloads API endpoints: * List versions of Minecraft with builds available: @@ -67,7 +67,7 @@ Maven org.purpurmc.purpur purpur-api - 1.20.6-R0.1-SNAPSHOT + 1.21-R0.1-SNAPSHOT provided ``` @@ -80,7 +80,7 @@ repositories { ``` ```kotlin dependencies { - compileOnly("org.purpurmc.purpur:purpur-api:1.20.6-R0.1-SNAPSHOT") + compileOnly("org.purpurmc.purpur:purpur-api:1.21-R0.1-SNAPSHOT") } ``` diff --git a/gradle.properties b/gradle.properties index 5feac6a43..9df1dfa36 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,7 +1,7 @@ group = org.purpurmc.purpur -version = 1.20.6-R0.1-SNAPSHOT +version = 1.21-R0.1-SNAPSHOT -mcVersion = 1.20.6 +mcVersion = 1.21 paperCommit = 79e2cb620ef03539390d97940824b38b707918f5 org.gradle.caching = true diff --git a/patches/dropped-api/0011-LivingEntity-safeFallDistance.patch b/patches/1-20-6/dropped-api/0011-LivingEntity-safeFallDistance.patch similarity index 100% rename from patches/dropped-api/0011-LivingEntity-safeFallDistance.patch rename to patches/1-20-6/dropped-api/0011-LivingEntity-safeFallDistance.patch diff --git a/patches/dropped-api/0032-Potion-NamespacedKey.patch b/patches/1-20-6/dropped-api/0032-Potion-NamespacedKey.patch similarity index 100% rename from patches/dropped-api/0032-Potion-NamespacedKey.patch rename to patches/1-20-6/dropped-api/0032-Potion-NamespacedKey.patch diff --git a/patches/dropped-api/0041-Add-item-packet-serialize-event.patch b/patches/1-20-6/dropped-api/0041-Add-item-packet-serialize-event.patch similarity index 100% rename from patches/dropped-api/0041-Add-item-packet-serialize-event.patch rename to patches/1-20-6/dropped-api/0041-Add-item-packet-serialize-event.patch diff --git a/patches/dropped-api/0049-Add-hover-lines-API.patch b/patches/1-20-6/dropped-api/0049-Add-hover-lines-API.patch similarity index 100% rename from patches/dropped-api/0049-Add-hover-lines-API.patch rename to patches/1-20-6/dropped-api/0049-Add-hover-lines-API.patch diff --git a/patches/dropped-server/0013-LivingEntity-safeFallDistance.patch b/patches/1-20-6/dropped-server/0013-LivingEntity-safeFallDistance.patch similarity index 100% rename from patches/dropped-server/0013-LivingEntity-safeFallDistance.patch rename to patches/1-20-6/dropped-server/0013-LivingEntity-safeFallDistance.patch diff --git a/patches/dropped-server/0220-Potion-NamespacedKey.patch b/patches/1-20-6/dropped-server/0220-Potion-NamespacedKey.patch similarity index 100% rename from patches/dropped-server/0220-Potion-NamespacedKey.patch rename to patches/1-20-6/dropped-server/0220-Potion-NamespacedKey.patch diff --git a/patches/dropped-server/0236-Configurable-food-attributes.patch b/patches/1-20-6/dropped-server/0236-Configurable-food-attributes.patch similarity index 100% rename from patches/dropped-server/0236-Configurable-food-attributes.patch rename to patches/1-20-6/dropped-server/0236-Configurable-food-attributes.patch diff --git a/patches/dropped-server/0255-Send-client-custom-name-of-BE.patch b/patches/1-20-6/dropped-server/0255-Send-client-custom-name-of-BE.patch similarity index 100% rename from patches/dropped-server/0255-Send-client-custom-name-of-BE.patch rename to patches/1-20-6/dropped-server/0255-Send-client-custom-name-of-BE.patch diff --git a/patches/dropped-server/0263-Allay-respect-item-NBT.patch b/patches/1-20-6/dropped-server/0263-Allay-respect-item-NBT.patch similarity index 100% rename from patches/dropped-server/0263-Allay-respect-item-NBT.patch rename to patches/1-20-6/dropped-server/0263-Allay-respect-item-NBT.patch diff --git a/patches/dropped-server/0271-Add-item-packet-serialize-event.patch b/patches/1-20-6/dropped-server/0271-Add-item-packet-serialize-event.patch similarity index 100% rename from patches/dropped-server/0271-Add-item-packet-serialize-event.patch rename to patches/1-20-6/dropped-server/0271-Add-item-packet-serialize-event.patch diff --git a/patches/dropped-server/0292-Add-hover-lines-API.patch b/patches/1-20-6/dropped-server/0292-Add-hover-lines-API.patch similarity index 100% rename from patches/dropped-server/0292-Add-hover-lines-API.patch rename to patches/1-20-6/dropped-server/0292-Add-hover-lines-API.patch diff --git a/patches/unapplied-api/0001-Pufferfish-API-Changes.patch b/patches/1-20-6/unapplied-api/0001-Pufferfish-API-Changes.patch similarity index 100% rename from patches/unapplied-api/0001-Pufferfish-API-Changes.patch rename to patches/1-20-6/unapplied-api/0001-Pufferfish-API-Changes.patch diff --git a/patches/unapplied-api/0002-Fix-pufferfish-issues.patch b/patches/1-20-6/unapplied-api/0002-Fix-pufferfish-issues.patch similarity index 100% rename from patches/unapplied-api/0002-Fix-pufferfish-issues.patch rename to patches/1-20-6/unapplied-api/0002-Fix-pufferfish-issues.patch diff --git a/patches/unapplied-server/0001-Pufferfish-Server-Changes.patch b/patches/1-20-6/unapplied-server/0001-Pufferfish-Server-Changes.patch similarity index 100% rename from patches/unapplied-server/0001-Pufferfish-Server-Changes.patch rename to patches/1-20-6/unapplied-server/0001-Pufferfish-Server-Changes.patch diff --git a/patches/unapplied-server/0003-Fix-pufferfish-issues.patch b/patches/1-20-6/unapplied-server/0003-Fix-pufferfish-issues.patch similarity index 100% rename from patches/unapplied-server/0003-Fix-pufferfish-issues.patch rename to patches/1-20-6/unapplied-server/0003-Fix-pufferfish-issues.patch diff --git a/patches/unapplied-server/0269-Make-pufferfish-config-relocatable.patch b/patches/1-20-6/unapplied-server/0269-Make-pufferfish-config-relocatable.patch similarity index 100% rename from patches/unapplied-server/0269-Make-pufferfish-config-relocatable.patch rename to patches/1-20-6/unapplied-server/0269-Make-pufferfish-config-relocatable.patch diff --git a/patches/api/0001-Rebrand.patch b/patches/unapplied-api/0001-Rebrand.patch similarity index 100% rename from patches/api/0001-Rebrand.patch rename to patches/unapplied-api/0001-Rebrand.patch diff --git a/patches/api/0002-Purpur-config-files.patch b/patches/unapplied-api/0002-Purpur-config-files.patch similarity index 100% rename from patches/api/0002-Purpur-config-files.patch rename to patches/unapplied-api/0002-Purpur-config-files.patch diff --git a/patches/api/0003-Build-System-Changes.patch b/patches/unapplied-api/0003-Build-System-Changes.patch similarity index 100% rename from patches/api/0003-Build-System-Changes.patch rename to patches/unapplied-api/0003-Build-System-Changes.patch diff --git a/patches/api/0004-Purpur-client-support.patch b/patches/unapplied-api/0004-Purpur-client-support.patch similarity index 100% rename from patches/api/0004-Purpur-client-support.patch rename to patches/unapplied-api/0004-Purpur-client-support.patch diff --git a/patches/api/0005-Default-permissions.patch b/patches/unapplied-api/0005-Default-permissions.patch similarity index 100% rename from patches/api/0005-Default-permissions.patch rename to patches/unapplied-api/0005-Default-permissions.patch diff --git a/patches/api/0006-Ridables.patch b/patches/unapplied-api/0006-Ridables.patch similarity index 100% rename from patches/api/0006-Ridables.patch rename to patches/unapplied-api/0006-Ridables.patch diff --git a/patches/api/0007-Allow-inventory-resizing.patch b/patches/unapplied-api/0007-Allow-inventory-resizing.patch similarity index 100% rename from patches/api/0007-Allow-inventory-resizing.patch rename to patches/unapplied-api/0007-Allow-inventory-resizing.patch diff --git a/patches/api/0008-Llama-API.patch b/patches/unapplied-api/0008-Llama-API.patch similarity index 100% rename from patches/api/0008-Llama-API.patch rename to patches/unapplied-api/0008-Llama-API.patch diff --git a/patches/api/0009-AFK-API.patch b/patches/unapplied-api/0009-AFK-API.patch similarity index 100% rename from patches/api/0009-AFK-API.patch rename to patches/unapplied-api/0009-AFK-API.patch diff --git a/patches/api/0010-Bring-back-server-name.patch b/patches/unapplied-api/0010-Bring-back-server-name.patch similarity index 100% rename from patches/api/0010-Bring-back-server-name.patch rename to patches/unapplied-api/0010-Bring-back-server-name.patch diff --git a/patches/api/0011-ExecuteCommandEvent.patch b/patches/unapplied-api/0011-ExecuteCommandEvent.patch similarity index 100% rename from patches/api/0011-ExecuteCommandEvent.patch rename to patches/unapplied-api/0011-ExecuteCommandEvent.patch diff --git a/patches/api/0012-Lagging-threshold.patch b/patches/unapplied-api/0012-Lagging-threshold.patch similarity index 100% rename from patches/api/0012-Lagging-threshold.patch rename to patches/unapplied-api/0012-Lagging-threshold.patch diff --git a/patches/api/0013-PlayerSetSpawnerTypeWithEggEvent.patch b/patches/unapplied-api/0013-PlayerSetSpawnerTypeWithEggEvent.patch similarity index 100% rename from patches/api/0013-PlayerSetSpawnerTypeWithEggEvent.patch rename to patches/unapplied-api/0013-PlayerSetSpawnerTypeWithEggEvent.patch diff --git a/patches/api/0014-Anvil-API.patch b/patches/unapplied-api/0014-Anvil-API.patch similarity index 100% rename from patches/api/0014-Anvil-API.patch rename to patches/unapplied-api/0014-Anvil-API.patch diff --git a/patches/api/0015-ItemStack-convenience-methods.patch b/patches/unapplied-api/0015-ItemStack-convenience-methods.patch similarity index 100% rename from patches/api/0015-ItemStack-convenience-methods.patch rename to patches/unapplied-api/0015-ItemStack-convenience-methods.patch diff --git a/patches/api/0016-LivingEntity-broadcastItemBreak.patch b/patches/unapplied-api/0016-LivingEntity-broadcastItemBreak.patch similarity index 100% rename from patches/api/0016-LivingEntity-broadcastItemBreak.patch rename to patches/unapplied-api/0016-LivingEntity-broadcastItemBreak.patch diff --git a/patches/api/0017-ChatColor-conveniences.patch b/patches/unapplied-api/0017-ChatColor-conveniences.patch similarity index 100% rename from patches/api/0017-ChatColor-conveniences.patch rename to patches/unapplied-api/0017-ChatColor-conveniences.patch diff --git a/patches/api/0018-Item-entity-immunities.patch b/patches/unapplied-api/0018-Item-entity-immunities.patch similarity index 100% rename from patches/api/0018-Item-entity-immunities.patch rename to patches/unapplied-api/0018-Item-entity-immunities.patch diff --git a/patches/api/0019-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch b/patches/unapplied-api/0019-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch similarity index 100% rename from patches/api/0019-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch rename to patches/unapplied-api/0019-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch diff --git a/patches/api/0020-Rabid-Wolf-API.patch b/patches/unapplied-api/0020-Rabid-Wolf-API.patch similarity index 100% rename from patches/api/0020-Rabid-Wolf-API.patch rename to patches/unapplied-api/0020-Rabid-Wolf-API.patch diff --git a/patches/api/0021-PlayerBookTooLargeEvent.patch b/patches/unapplied-api/0021-PlayerBookTooLargeEvent.patch similarity index 100% rename from patches/api/0021-PlayerBookTooLargeEvent.patch rename to patches/unapplied-api/0021-PlayerBookTooLargeEvent.patch diff --git a/patches/api/0022-Full-netherite-armor-grants-fire-resistance.patch b/patches/unapplied-api/0022-Full-netherite-armor-grants-fire-resistance.patch similarity index 100% rename from patches/api/0022-Full-netherite-armor-grants-fire-resistance.patch rename to patches/unapplied-api/0022-Full-netherite-armor-grants-fire-resistance.patch diff --git a/patches/api/0023-Add-EntityTeleportHinderedEvent.patch b/patches/unapplied-api/0023-Add-EntityTeleportHinderedEvent.patch similarity index 100% rename from patches/api/0023-Add-EntityTeleportHinderedEvent.patch rename to patches/unapplied-api/0023-Add-EntityTeleportHinderedEvent.patch diff --git a/patches/api/0024-Add-enchantment-target-for-bows-and-crossbows.patch b/patches/unapplied-api/0024-Add-enchantment-target-for-bows-and-crossbows.patch similarity index 100% rename from patches/api/0024-Add-enchantment-target-for-bows-and-crossbows.patch rename to patches/unapplied-api/0024-Add-enchantment-target-for-bows-and-crossbows.patch diff --git a/patches/api/0025-API-for-any-mob-to-burn-daylight.patch b/patches/unapplied-api/0025-API-for-any-mob-to-burn-daylight.patch similarity index 100% rename from patches/api/0025-API-for-any-mob-to-burn-daylight.patch rename to patches/unapplied-api/0025-API-for-any-mob-to-burn-daylight.patch diff --git a/patches/api/0026-Add-back-player-spawned-endermite-API.patch b/patches/unapplied-api/0026-Add-back-player-spawned-endermite-API.patch similarity index 100% rename from patches/api/0026-Add-back-player-spawned-endermite-API.patch rename to patches/unapplied-api/0026-Add-back-player-spawned-endermite-API.patch diff --git a/patches/api/0027-Fix-default-permission-system.patch b/patches/unapplied-api/0027-Fix-default-permission-system.patch similarity index 100% rename from patches/api/0027-Fix-default-permission-system.patch rename to patches/unapplied-api/0027-Fix-default-permission-system.patch diff --git a/patches/api/0028-Summoner-API.patch b/patches/unapplied-api/0028-Summoner-API.patch similarity index 100% rename from patches/api/0028-Summoner-API.patch rename to patches/unapplied-api/0028-Summoner-API.patch diff --git a/patches/api/0029-Clean-up-version-command-output.patch b/patches/unapplied-api/0029-Clean-up-version-command-output.patch similarity index 100% rename from patches/api/0029-Clean-up-version-command-output.patch rename to patches/unapplied-api/0029-Clean-up-version-command-output.patch diff --git a/patches/api/0030-Extended-OfflinePlayer-API.patch b/patches/unapplied-api/0030-Extended-OfflinePlayer-API.patch similarity index 100% rename from patches/api/0030-Extended-OfflinePlayer-API.patch rename to patches/unapplied-api/0030-Extended-OfflinePlayer-API.patch diff --git a/patches/api/0031-Added-the-ability-to-add-combustible-items.patch b/patches/unapplied-api/0031-Added-the-ability-to-add-combustible-items.patch similarity index 100% rename from patches/api/0031-Added-the-ability-to-add-combustible-items.patch rename to patches/unapplied-api/0031-Added-the-ability-to-add-combustible-items.patch diff --git a/patches/api/0032-Grindstone-API.patch b/patches/unapplied-api/0032-Grindstone-API.patch similarity index 100% rename from patches/api/0032-Grindstone-API.patch rename to patches/unapplied-api/0032-Grindstone-API.patch diff --git a/patches/api/0033-Shears-can-have-looting-enchantment.patch b/patches/unapplied-api/0033-Shears-can-have-looting-enchantment.patch similarity index 100% rename from patches/api/0033-Shears-can-have-looting-enchantment.patch rename to patches/unapplied-api/0033-Shears-can-have-looting-enchantment.patch diff --git a/patches/api/0034-Lobotomize-stuck-villagers.patch b/patches/unapplied-api/0034-Lobotomize-stuck-villagers.patch similarity index 100% rename from patches/api/0034-Lobotomize-stuck-villagers.patch rename to patches/unapplied-api/0034-Lobotomize-stuck-villagers.patch diff --git a/patches/api/0035-Add-local-difficulty-api.patch b/patches/unapplied-api/0035-Add-local-difficulty-api.patch similarity index 100% rename from patches/api/0035-Add-local-difficulty-api.patch rename to patches/unapplied-api/0035-Add-local-difficulty-api.patch diff --git a/patches/api/0036-Remove-Timings.patch b/patches/unapplied-api/0036-Remove-Timings.patch similarity index 100% rename from patches/api/0036-Remove-Timings.patch rename to patches/unapplied-api/0036-Remove-Timings.patch diff --git a/patches/api/0037-Add-Bee-API.patch b/patches/unapplied-api/0037-Add-Bee-API.patch similarity index 100% rename from patches/api/0037-Add-Bee-API.patch rename to patches/unapplied-api/0037-Add-Bee-API.patch diff --git a/patches/api/0038-Debug-Marker-API.patch b/patches/unapplied-api/0038-Debug-Marker-API.patch similarity index 100% rename from patches/api/0038-Debug-Marker-API.patch rename to patches/unapplied-api/0038-Debug-Marker-API.patch diff --git a/patches/api/0039-Add-death-screen-API.patch b/patches/unapplied-api/0039-Add-death-screen-API.patch similarity index 100% rename from patches/api/0039-Add-death-screen-API.patch rename to patches/unapplied-api/0039-Add-death-screen-API.patch diff --git a/patches/api/0040-Language-API.patch b/patches/unapplied-api/0040-Language-API.patch similarity index 100% rename from patches/api/0040-Language-API.patch rename to patches/unapplied-api/0040-Language-API.patch diff --git a/patches/api/0041-Add-log-suppression-for-LibraryLoader.patch b/patches/unapplied-api/0041-Add-log-suppression-for-LibraryLoader.patch similarity index 100% rename from patches/api/0041-Add-log-suppression-for-LibraryLoader.patch rename to patches/unapplied-api/0041-Add-log-suppression-for-LibraryLoader.patch diff --git a/patches/api/0042-Fire-Immunity-API.patch b/patches/unapplied-api/0042-Fire-Immunity-API.patch similarity index 100% rename from patches/api/0042-Fire-Immunity-API.patch rename to patches/unapplied-api/0042-Fire-Immunity-API.patch diff --git a/patches/api/0043-Added-goat-ram-event.patch b/patches/unapplied-api/0043-Added-goat-ram-event.patch similarity index 100% rename from patches/api/0043-Added-goat-ram-event.patch rename to patches/unapplied-api/0043-Added-goat-ram-event.patch diff --git a/patches/api/0044-Add-PreExplodeEvents.patch b/patches/unapplied-api/0044-Add-PreExplodeEvents.patch similarity index 100% rename from patches/api/0044-Add-PreExplodeEvents.patch rename to patches/unapplied-api/0044-Add-PreExplodeEvents.patch diff --git a/patches/api/0045-Stored-Bee-API.patch b/patches/unapplied-api/0045-Stored-Bee-API.patch similarity index 100% rename from patches/api/0045-Stored-Bee-API.patch rename to patches/unapplied-api/0045-Stored-Bee-API.patch diff --git a/patches/api/0046-Explorer-Map-API.patch b/patches/unapplied-api/0046-Explorer-Map-API.patch similarity index 100% rename from patches/api/0046-Explorer-Map-API.patch rename to patches/unapplied-api/0046-Explorer-Map-API.patch diff --git a/patches/api/0047-Stonecutter-damage.patch b/patches/unapplied-api/0047-Stonecutter-damage.patch similarity index 100% rename from patches/api/0047-Stonecutter-damage.patch rename to patches/unapplied-api/0047-Stonecutter-damage.patch diff --git a/patches/generated-api/0001-Ridables.patch b/patches/unapplied-generated-api/0001-Ridables.patch similarity index 100% rename from patches/generated-api/0001-Ridables.patch rename to patches/unapplied-generated-api/0001-Ridables.patch diff --git a/patches/generated-api/0002-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch b/patches/unapplied-generated-api/0002-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch similarity index 100% rename from patches/generated-api/0002-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch rename to patches/unapplied-generated-api/0002-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch diff --git a/patches/generated-api/0003-Add-option-to-disable-zombie-aggressiveness-towards-.patch b/patches/unapplied-generated-api/0003-Add-option-to-disable-zombie-aggressiveness-towards-.patch similarity index 100% rename from patches/generated-api/0003-Add-option-to-disable-zombie-aggressiveness-towards-.patch rename to patches/unapplied-generated-api/0003-Add-option-to-disable-zombie-aggressiveness-towards-.patch diff --git a/patches/generated-api/0004-Rabid-Wolf-API.patch b/patches/unapplied-generated-api/0004-Rabid-Wolf-API.patch similarity index 100% rename from patches/generated-api/0004-Rabid-Wolf-API.patch rename to patches/unapplied-generated-api/0004-Rabid-Wolf-API.patch diff --git a/patches/generated-api/0005-Iron-golem-poppy-calms-anger.patch b/patches/unapplied-generated-api/0005-Iron-golem-poppy-calms-anger.patch similarity index 100% rename from patches/generated-api/0005-Iron-golem-poppy-calms-anger.patch rename to patches/unapplied-generated-api/0005-Iron-golem-poppy-calms-anger.patch diff --git a/patches/server/0001-Rebrand.patch b/patches/unapplied-server/0001-Rebrand.patch similarity index 100% rename from patches/server/0001-Rebrand.patch rename to patches/unapplied-server/0001-Rebrand.patch diff --git a/patches/server/0002-Purpur-config-files.patch b/patches/unapplied-server/0002-Purpur-config-files.patch similarity index 100% rename from patches/server/0002-Purpur-config-files.patch rename to patches/unapplied-server/0002-Purpur-config-files.patch diff --git a/patches/server/0003-Purpur-client-support.patch b/patches/unapplied-server/0003-Purpur-client-support.patch similarity index 100% rename from patches/server/0003-Purpur-client-support.patch rename to patches/unapplied-server/0003-Purpur-client-support.patch diff --git a/patches/server/0004-Fix-decompile-errors.patch b/patches/unapplied-server/0004-Fix-decompile-errors.patch similarity index 100% rename from patches/server/0004-Fix-decompile-errors.patch rename to patches/unapplied-server/0004-Fix-decompile-errors.patch diff --git a/patches/server/0005-Component-related-conveniences.patch b/patches/unapplied-server/0005-Component-related-conveniences.patch similarity index 100% rename from patches/server/0005-Component-related-conveniences.patch rename to patches/unapplied-server/0005-Component-related-conveniences.patch diff --git a/patches/server/0006-Ridables.patch b/patches/unapplied-server/0006-Ridables.patch similarity index 100% rename from patches/server/0006-Ridables.patch rename to patches/unapplied-server/0006-Ridables.patch diff --git a/patches/server/0007-Configurable-entity-base-attributes.patch b/patches/unapplied-server/0007-Configurable-entity-base-attributes.patch similarity index 100% rename from patches/server/0007-Configurable-entity-base-attributes.patch rename to patches/unapplied-server/0007-Configurable-entity-base-attributes.patch diff --git a/patches/server/0008-Barrels-and-enderchests-6-rows.patch b/patches/unapplied-server/0008-Barrels-and-enderchests-6-rows.patch similarity index 100% rename from patches/server/0008-Barrels-and-enderchests-6-rows.patch rename to patches/unapplied-server/0008-Barrels-and-enderchests-6-rows.patch diff --git a/patches/server/0009-Llama-API.patch b/patches/unapplied-server/0009-Llama-API.patch similarity index 100% rename from patches/server/0009-Llama-API.patch rename to patches/unapplied-server/0009-Llama-API.patch diff --git a/patches/server/0010-AFK-API.patch b/patches/unapplied-server/0010-AFK-API.patch similarity index 100% rename from patches/server/0010-AFK-API.patch rename to patches/unapplied-server/0010-AFK-API.patch diff --git a/patches/server/0011-Bring-back-server-name.patch b/patches/unapplied-server/0011-Bring-back-server-name.patch similarity index 100% rename from patches/server/0011-Bring-back-server-name.patch rename to patches/unapplied-server/0011-Bring-back-server-name.patch diff --git a/patches/server/0012-Configurable-server-mod-name.patch b/patches/unapplied-server/0012-Configurable-server-mod-name.patch similarity index 100% rename from patches/server/0012-Configurable-server-mod-name.patch rename to patches/unapplied-server/0012-Configurable-server-mod-name.patch diff --git a/patches/server/0013-Lagging-threshold.patch b/patches/unapplied-server/0013-Lagging-threshold.patch similarity index 100% rename from patches/server/0013-Lagging-threshold.patch rename to patches/unapplied-server/0013-Lagging-threshold.patch diff --git a/patches/server/0014-PlayerSetSpawnerTypeWithEggEvent.patch b/patches/unapplied-server/0014-PlayerSetSpawnerTypeWithEggEvent.patch similarity index 100% rename from patches/server/0014-PlayerSetSpawnerTypeWithEggEvent.patch rename to patches/unapplied-server/0014-PlayerSetSpawnerTypeWithEggEvent.patch diff --git a/patches/server/0015-Anvil-API.patch b/patches/unapplied-server/0015-Anvil-API.patch similarity index 100% rename from patches/server/0015-Anvil-API.patch rename to patches/unapplied-server/0015-Anvil-API.patch diff --git a/patches/server/0016-Alternative-Keepalive-Handling.patch b/patches/unapplied-server/0016-Alternative-Keepalive-Handling.patch similarity index 100% rename from patches/server/0016-Alternative-Keepalive-Handling.patch rename to patches/unapplied-server/0016-Alternative-Keepalive-Handling.patch diff --git a/patches/server/0017-Silk-touch-spawners.patch b/patches/unapplied-server/0017-Silk-touch-spawners.patch similarity index 100% rename from patches/server/0017-Silk-touch-spawners.patch rename to patches/unapplied-server/0017-Silk-touch-spawners.patch diff --git a/patches/server/0018-Add-turtle-egg-block-options.patch b/patches/unapplied-server/0018-Add-turtle-egg-block-options.patch similarity index 100% rename from patches/server/0018-Add-turtle-egg-block-options.patch rename to patches/unapplied-server/0018-Add-turtle-egg-block-options.patch diff --git a/patches/server/0019-Logger-settings-suppressing-pointless-logs.patch b/patches/unapplied-server/0019-Logger-settings-suppressing-pointless-logs.patch similarity index 100% rename from patches/server/0019-Logger-settings-suppressing-pointless-logs.patch rename to patches/unapplied-server/0019-Logger-settings-suppressing-pointless-logs.patch diff --git a/patches/server/0020-Disable-outdated-build-check.patch b/patches/unapplied-server/0020-Disable-outdated-build-check.patch similarity index 100% rename from patches/server/0020-Disable-outdated-build-check.patch rename to patches/unapplied-server/0020-Disable-outdated-build-check.patch diff --git a/patches/server/0021-Giants-AI-settings.patch b/patches/unapplied-server/0021-Giants-AI-settings.patch similarity index 100% rename from patches/server/0021-Giants-AI-settings.patch rename to patches/unapplied-server/0021-Giants-AI-settings.patch diff --git a/patches/server/0022-Zombie-horse-naturally-spawn.patch b/patches/unapplied-server/0022-Zombie-horse-naturally-spawn.patch similarity index 100% rename from patches/server/0022-Zombie-horse-naturally-spawn.patch rename to patches/unapplied-server/0022-Zombie-horse-naturally-spawn.patch diff --git a/patches/server/0023-Charged-creeper-naturally-spawn.patch b/patches/unapplied-server/0023-Charged-creeper-naturally-spawn.patch similarity index 100% rename from patches/server/0023-Charged-creeper-naturally-spawn.patch rename to patches/unapplied-server/0023-Charged-creeper-naturally-spawn.patch diff --git a/patches/server/0024-Rabbit-naturally-spawn-toast-and-killer.patch b/patches/unapplied-server/0024-Rabbit-naturally-spawn-toast-and-killer.patch similarity index 100% rename from patches/server/0024-Rabbit-naturally-spawn-toast-and-killer.patch rename to patches/unapplied-server/0024-Rabbit-naturally-spawn-toast-and-killer.patch diff --git a/patches/server/0025-Fix-outdated-server-showing-in-ping-before-server-fu.patch b/patches/unapplied-server/0025-Fix-outdated-server-showing-in-ping-before-server-fu.patch similarity index 100% rename from patches/server/0025-Fix-outdated-server-showing-in-ping-before-server-fu.patch rename to patches/unapplied-server/0025-Fix-outdated-server-showing-in-ping-before-server-fu.patch diff --git a/patches/server/0026-Tulips-change-fox-type.patch b/patches/unapplied-server/0026-Tulips-change-fox-type.patch similarity index 100% rename from patches/server/0026-Tulips-change-fox-type.patch rename to patches/unapplied-server/0026-Tulips-change-fox-type.patch diff --git a/patches/server/0027-Breedable-Polar-Bears.patch b/patches/unapplied-server/0027-Breedable-Polar-Bears.patch similarity index 100% rename from patches/server/0027-Breedable-Polar-Bears.patch rename to patches/unapplied-server/0027-Breedable-Polar-Bears.patch diff --git a/patches/server/0028-Chickens-can-retaliate.patch b/patches/unapplied-server/0028-Chickens-can-retaliate.patch similarity index 100% rename from patches/server/0028-Chickens-can-retaliate.patch rename to patches/unapplied-server/0028-Chickens-can-retaliate.patch diff --git a/patches/server/0029-Add-option-to-set-armorstand-step-height.patch b/patches/unapplied-server/0029-Add-option-to-set-armorstand-step-height.patch similarity index 100% rename from patches/server/0029-Add-option-to-set-armorstand-step-height.patch rename to patches/unapplied-server/0029-Add-option-to-set-armorstand-step-height.patch diff --git a/patches/server/0030-Cat-spawning-options.patch b/patches/unapplied-server/0030-Cat-spawning-options.patch similarity index 100% rename from patches/server/0030-Cat-spawning-options.patch rename to patches/unapplied-server/0030-Cat-spawning-options.patch diff --git a/patches/server/0031-Cows-eat-mushrooms.patch b/patches/unapplied-server/0031-Cows-eat-mushrooms.patch similarity index 100% rename from patches/server/0031-Cows-eat-mushrooms.patch rename to patches/unapplied-server/0031-Cows-eat-mushrooms.patch diff --git a/patches/server/0032-Fix-cow-rotation-when-shearing-mooshroom.patch b/patches/unapplied-server/0032-Fix-cow-rotation-when-shearing-mooshroom.patch similarity index 100% rename from patches/server/0032-Fix-cow-rotation-when-shearing-mooshroom.patch rename to patches/unapplied-server/0032-Fix-cow-rotation-when-shearing-mooshroom.patch diff --git a/patches/server/0033-Pigs-give-saddle-back.patch b/patches/unapplied-server/0033-Pigs-give-saddle-back.patch similarity index 100% rename from patches/server/0033-Pigs-give-saddle-back.patch rename to patches/unapplied-server/0033-Pigs-give-saddle-back.patch diff --git a/patches/server/0034-Snowman-drop-and-put-back-pumpkin.patch b/patches/unapplied-server/0034-Snowman-drop-and-put-back-pumpkin.patch similarity index 100% rename from patches/server/0034-Snowman-drop-and-put-back-pumpkin.patch rename to patches/unapplied-server/0034-Snowman-drop-and-put-back-pumpkin.patch diff --git a/patches/server/0035-Ender-dragon-always-drop-full-exp.patch b/patches/unapplied-server/0035-Ender-dragon-always-drop-full-exp.patch similarity index 100% rename from patches/server/0035-Ender-dragon-always-drop-full-exp.patch rename to patches/unapplied-server/0035-Ender-dragon-always-drop-full-exp.patch diff --git a/patches/server/0036-Allow-soil-to-moisten-from-water-directly-under-it.patch b/patches/unapplied-server/0036-Allow-soil-to-moisten-from-water-directly-under-it.patch similarity index 100% rename from patches/server/0036-Allow-soil-to-moisten-from-water-directly-under-it.patch rename to patches/unapplied-server/0036-Allow-soil-to-moisten-from-water-directly-under-it.patch diff --git a/patches/server/0037-Minecart-settings-and-WASD-controls.patch b/patches/unapplied-server/0037-Minecart-settings-and-WASD-controls.patch similarity index 100% rename from patches/server/0037-Minecart-settings-and-WASD-controls.patch rename to patches/unapplied-server/0037-Minecart-settings-and-WASD-controls.patch diff --git a/patches/server/0038-Disable-loot-drops-on-death-by-cramming.patch b/patches/unapplied-server/0038-Disable-loot-drops-on-death-by-cramming.patch similarity index 100% rename from patches/server/0038-Disable-loot-drops-on-death-by-cramming.patch rename to patches/unapplied-server/0038-Disable-loot-drops-on-death-by-cramming.patch diff --git a/patches/server/0039-Option-to-toggle-milk-curing-bad-omen.patch b/patches/unapplied-server/0039-Option-to-toggle-milk-curing-bad-omen.patch similarity index 100% rename from patches/server/0039-Option-to-toggle-milk-curing-bad-omen.patch rename to patches/unapplied-server/0039-Option-to-toggle-milk-curing-bad-omen.patch diff --git a/patches/server/0040-End-gateway-should-check-if-entity-can-use-portal.patch b/patches/unapplied-server/0040-End-gateway-should-check-if-entity-can-use-portal.patch similarity index 100% rename from patches/server/0040-End-gateway-should-check-if-entity-can-use-portal.patch rename to patches/unapplied-server/0040-End-gateway-should-check-if-entity-can-use-portal.patch diff --git a/patches/server/0041-Skip-events-if-there-s-no-listeners.patch b/patches/unapplied-server/0041-Skip-events-if-there-s-no-listeners.patch similarity index 100% rename from patches/server/0041-Skip-events-if-there-s-no-listeners.patch rename to patches/unapplied-server/0041-Skip-events-if-there-s-no-listeners.patch diff --git a/patches/server/0042-Add-permission-for-F3-N-debug.patch b/patches/unapplied-server/0042-Add-permission-for-F3-N-debug.patch similarity index 100% rename from patches/server/0042-Add-permission-for-F3-N-debug.patch rename to patches/unapplied-server/0042-Add-permission-for-F3-N-debug.patch diff --git a/patches/server/0043-Configurable-TPS-Catchup.patch b/patches/unapplied-server/0043-Configurable-TPS-Catchup.patch similarity index 100% rename from patches/server/0043-Configurable-TPS-Catchup.patch rename to patches/unapplied-server/0043-Configurable-TPS-Catchup.patch diff --git a/patches/server/0044-Add-option-to-allow-loyalty-on-tridents-to-work-in-t.patch b/patches/unapplied-server/0044-Add-option-to-allow-loyalty-on-tridents-to-work-in-t.patch similarity index 100% rename from patches/server/0044-Add-option-to-allow-loyalty-on-tridents-to-work-in-t.patch rename to patches/unapplied-server/0044-Add-option-to-allow-loyalty-on-tridents-to-work-in-t.patch diff --git a/patches/server/0045-Add-enderman-and-creeper-griefing-controls.patch b/patches/unapplied-server/0045-Add-enderman-and-creeper-griefing-controls.patch similarity index 100% rename from patches/server/0045-Add-enderman-and-creeper-griefing-controls.patch rename to patches/unapplied-server/0045-Add-enderman-and-creeper-griefing-controls.patch diff --git a/patches/server/0046-Villagers-follow-emerald-blocks.patch b/patches/unapplied-server/0046-Villagers-follow-emerald-blocks.patch similarity index 100% rename from patches/server/0046-Villagers-follow-emerald-blocks.patch rename to patches/unapplied-server/0046-Villagers-follow-emerald-blocks.patch diff --git a/patches/server/0047-Allow-leashing-villagers.patch b/patches/unapplied-server/0047-Allow-leashing-villagers.patch similarity index 100% rename from patches/server/0047-Allow-leashing-villagers.patch rename to patches/unapplied-server/0047-Allow-leashing-villagers.patch diff --git a/patches/server/0048-Implement-infinite-liquids.patch b/patches/unapplied-server/0048-Implement-infinite-liquids.patch similarity index 100% rename from patches/server/0048-Implement-infinite-liquids.patch rename to patches/unapplied-server/0048-Implement-infinite-liquids.patch diff --git a/patches/server/0049-Make-lava-flow-speed-configurable.patch b/patches/unapplied-server/0049-Make-lava-flow-speed-configurable.patch similarity index 100% rename from patches/server/0049-Make-lava-flow-speed-configurable.patch rename to patches/unapplied-server/0049-Make-lava-flow-speed-configurable.patch diff --git a/patches/server/0050-Add-player-death-exp-control-options.patch b/patches/unapplied-server/0050-Add-player-death-exp-control-options.patch similarity index 100% rename from patches/server/0050-Add-player-death-exp-control-options.patch rename to patches/unapplied-server/0050-Add-player-death-exp-control-options.patch diff --git a/patches/server/0051-Configurable-void-damage-height-and-damage.patch b/patches/unapplied-server/0051-Configurable-void-damage-height-and-damage.patch similarity index 100% rename from patches/server/0051-Configurable-void-damage-height-and-damage.patch rename to patches/unapplied-server/0051-Configurable-void-damage-height-and-damage.patch diff --git a/patches/server/0052-Add-canSaveToDisk-to-Entity.patch b/patches/unapplied-server/0052-Add-canSaveToDisk-to-Entity.patch similarity index 100% rename from patches/server/0052-Add-canSaveToDisk-to-Entity.patch rename to patches/unapplied-server/0052-Add-canSaveToDisk-to-Entity.patch diff --git a/patches/server/0053-Dispenser-curse-of-binding-protection.patch b/patches/unapplied-server/0053-Dispenser-curse-of-binding-protection.patch similarity index 100% rename from patches/server/0053-Dispenser-curse-of-binding-protection.patch rename to patches/unapplied-server/0053-Dispenser-curse-of-binding-protection.patch diff --git a/patches/server/0054-Add-option-for-boats-to-eject-players-on-land.patch b/patches/unapplied-server/0054-Add-option-for-boats-to-eject-players-on-land.patch similarity index 100% rename from patches/server/0054-Add-option-for-boats-to-eject-players-on-land.patch rename to patches/unapplied-server/0054-Add-option-for-boats-to-eject-players-on-land.patch diff --git a/patches/server/0055-Mending-mends-most-damages-equipment-first.patch b/patches/unapplied-server/0055-Mending-mends-most-damages-equipment-first.patch similarity index 100% rename from patches/server/0055-Mending-mends-most-damages-equipment-first.patch rename to patches/unapplied-server/0055-Mending-mends-most-damages-equipment-first.patch diff --git a/patches/server/0056-Add-5-second-tps-average-in-tps.patch b/patches/unapplied-server/0056-Add-5-second-tps-average-in-tps.patch similarity index 100% rename from patches/server/0056-Add-5-second-tps-average-in-tps.patch rename to patches/unapplied-server/0056-Add-5-second-tps-average-in-tps.patch diff --git a/patches/server/0057-Implement-elytra-settings.patch b/patches/unapplied-server/0057-Implement-elytra-settings.patch similarity index 100% rename from patches/server/0057-Implement-elytra-settings.patch rename to patches/unapplied-server/0057-Implement-elytra-settings.patch diff --git a/patches/server/0058-Item-entity-immunities.patch b/patches/unapplied-server/0058-Item-entity-immunities.patch similarity index 100% rename from patches/server/0058-Item-entity-immunities.patch rename to patches/unapplied-server/0058-Item-entity-immunities.patch diff --git a/patches/server/0059-Add-ping-command.patch b/patches/unapplied-server/0059-Add-ping-command.patch similarity index 100% rename from patches/server/0059-Add-ping-command.patch rename to patches/unapplied-server/0059-Add-ping-command.patch diff --git a/patches/server/0060-Add-demo-command.patch b/patches/unapplied-server/0060-Add-demo-command.patch similarity index 100% rename from patches/server/0060-Add-demo-command.patch rename to patches/unapplied-server/0060-Add-demo-command.patch diff --git a/patches/server/0061-Add-credits-command.patch b/patches/unapplied-server/0061-Add-credits-command.patch similarity index 100% rename from patches/server/0061-Add-credits-command.patch rename to patches/unapplied-server/0061-Add-credits-command.patch diff --git a/patches/server/0062-Configurable-jockey-options.patch b/patches/unapplied-server/0062-Configurable-jockey-options.patch similarity index 100% rename from patches/server/0062-Configurable-jockey-options.patch rename to patches/unapplied-server/0062-Configurable-jockey-options.patch diff --git a/patches/server/0063-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch b/patches/unapplied-server/0063-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch similarity index 100% rename from patches/server/0063-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch rename to patches/unapplied-server/0063-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch diff --git a/patches/server/0064-Add-phantom-spawning-options.patch b/patches/unapplied-server/0064-Add-phantom-spawning-options.patch similarity index 100% rename from patches/server/0064-Add-phantom-spawning-options.patch rename to patches/unapplied-server/0064-Add-phantom-spawning-options.patch diff --git a/patches/server/0065-Implement-bed-explosion-options.patch b/patches/unapplied-server/0065-Implement-bed-explosion-options.patch similarity index 100% rename from patches/server/0065-Implement-bed-explosion-options.patch rename to patches/unapplied-server/0065-Implement-bed-explosion-options.patch diff --git a/patches/server/0066-Implement-respawn-anchor-explosion-options.patch b/patches/unapplied-server/0066-Implement-respawn-anchor-explosion-options.patch similarity index 100% rename from patches/server/0066-Implement-respawn-anchor-explosion-options.patch rename to patches/unapplied-server/0066-Implement-respawn-anchor-explosion-options.patch diff --git a/patches/server/0067-Add-allow-water-in-end-world-option.patch b/patches/unapplied-server/0067-Add-allow-water-in-end-world-option.patch similarity index 100% rename from patches/server/0067-Add-allow-water-in-end-world-option.patch rename to patches/unapplied-server/0067-Add-allow-water-in-end-world-option.patch diff --git a/patches/server/0068-Allow-color-codes-in-books.patch b/patches/unapplied-server/0068-Allow-color-codes-in-books.patch similarity index 100% rename from patches/server/0068-Allow-color-codes-in-books.patch rename to patches/unapplied-server/0068-Allow-color-codes-in-books.patch diff --git a/patches/server/0069-Entity-lifespan.patch b/patches/unapplied-server/0069-Entity-lifespan.patch similarity index 100% rename from patches/server/0069-Entity-lifespan.patch rename to patches/unapplied-server/0069-Entity-lifespan.patch diff --git a/patches/server/0070-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch b/patches/unapplied-server/0070-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch similarity index 100% rename from patches/server/0070-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch rename to patches/unapplied-server/0070-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch diff --git a/patches/server/0071-Squid-EAR-immunity.patch b/patches/unapplied-server/0071-Squid-EAR-immunity.patch similarity index 100% rename from patches/server/0071-Squid-EAR-immunity.patch rename to patches/unapplied-server/0071-Squid-EAR-immunity.patch diff --git a/patches/server/0072-Phantoms-burn-in-light.patch b/patches/unapplied-server/0072-Phantoms-burn-in-light.patch similarity index 100% rename from patches/server/0072-Phantoms-burn-in-light.patch rename to patches/unapplied-server/0072-Phantoms-burn-in-light.patch diff --git a/patches/server/0073-Configurable-villager-breeding.patch b/patches/unapplied-server/0073-Configurable-villager-breeding.patch similarity index 100% rename from patches/server/0073-Configurable-villager-breeding.patch rename to patches/unapplied-server/0073-Configurable-villager-breeding.patch diff --git a/patches/server/0074-Redstone-deactivates-spawners.patch b/patches/unapplied-server/0074-Redstone-deactivates-spawners.patch similarity index 100% rename from patches/server/0074-Redstone-deactivates-spawners.patch rename to patches/unapplied-server/0074-Redstone-deactivates-spawners.patch diff --git a/patches/server/0075-Totems-work-in-inventory.patch b/patches/unapplied-server/0075-Totems-work-in-inventory.patch similarity index 100% rename from patches/server/0075-Totems-work-in-inventory.patch rename to patches/unapplied-server/0075-Totems-work-in-inventory.patch diff --git a/patches/server/0076-Add-vindicator-johnny-spawn-chance.patch b/patches/unapplied-server/0076-Add-vindicator-johnny-spawn-chance.patch similarity index 100% rename from patches/server/0076-Add-vindicator-johnny-spawn-chance.patch rename to patches/unapplied-server/0076-Add-vindicator-johnny-spawn-chance.patch diff --git a/patches/server/0077-Dispensers-place-anvils-option.patch b/patches/unapplied-server/0077-Dispensers-place-anvils-option.patch similarity index 100% rename from patches/server/0077-Dispensers-place-anvils-option.patch rename to patches/unapplied-server/0077-Dispensers-place-anvils-option.patch diff --git a/patches/server/0078-Allow-anvil-colors.patch b/patches/unapplied-server/0078-Allow-anvil-colors.patch similarity index 100% rename from patches/server/0078-Allow-anvil-colors.patch rename to patches/unapplied-server/0078-Allow-anvil-colors.patch diff --git a/patches/server/0079-Add-option-to-disable-dolphin-treasure-searching.patch b/patches/unapplied-server/0079-Add-option-to-disable-dolphin-treasure-searching.patch similarity index 100% rename from patches/server/0079-Add-option-to-disable-dolphin-treasure-searching.patch rename to patches/unapplied-server/0079-Add-option-to-disable-dolphin-treasure-searching.patch diff --git a/patches/server/0080-Short-enderman-height.patch b/patches/unapplied-server/0080-Short-enderman-height.patch similarity index 100% rename from patches/server/0080-Short-enderman-height.patch rename to patches/unapplied-server/0080-Short-enderman-height.patch diff --git a/patches/server/0081-Stop-squids-floating-on-top-of-water.patch b/patches/unapplied-server/0081-Stop-squids-floating-on-top-of-water.patch similarity index 100% rename from patches/server/0081-Stop-squids-floating-on-top-of-water.patch rename to patches/unapplied-server/0081-Stop-squids-floating-on-top-of-water.patch diff --git a/patches/server/0082-Crying-obsidian-valid-for-portal-frames.patch b/patches/unapplied-server/0082-Crying-obsidian-valid-for-portal-frames.patch similarity index 100% rename from patches/server/0082-Crying-obsidian-valid-for-portal-frames.patch rename to patches/unapplied-server/0082-Crying-obsidian-valid-for-portal-frames.patch diff --git a/patches/server/0083-Entities-can-use-portals-configuration.patch b/patches/unapplied-server/0083-Entities-can-use-portals-configuration.patch similarity index 100% rename from patches/server/0083-Entities-can-use-portals-configuration.patch rename to patches/unapplied-server/0083-Entities-can-use-portals-configuration.patch diff --git a/patches/server/0084-LivingEntity-broadcastItemBreak.patch b/patches/unapplied-server/0084-LivingEntity-broadcastItemBreak.patch similarity index 100% rename from patches/server/0084-LivingEntity-broadcastItemBreak.patch rename to patches/unapplied-server/0084-LivingEntity-broadcastItemBreak.patch diff --git a/patches/server/0085-Customizable-wither-health-and-healing.patch b/patches/unapplied-server/0085-Customizable-wither-health-and-healing.patch similarity index 100% rename from patches/server/0085-Customizable-wither-health-and-healing.patch rename to patches/unapplied-server/0085-Customizable-wither-health-and-healing.patch diff --git a/patches/server/0086-Allow-toggling-special-MobSpawners-per-world.patch b/patches/unapplied-server/0086-Allow-toggling-special-MobSpawners-per-world.patch similarity index 100% rename from patches/server/0086-Allow-toggling-special-MobSpawners-per-world.patch rename to patches/unapplied-server/0086-Allow-toggling-special-MobSpawners-per-world.patch diff --git a/patches/server/0087-Raid-cooldown-setting.patch b/patches/unapplied-server/0087-Raid-cooldown-setting.patch similarity index 100% rename from patches/server/0087-Raid-cooldown-setting.patch rename to patches/unapplied-server/0087-Raid-cooldown-setting.patch diff --git a/patches/server/0088-Despawn-rate-config-options-per-projectile-type.patch b/patches/unapplied-server/0088-Despawn-rate-config-options-per-projectile-type.patch similarity index 100% rename from patches/server/0088-Despawn-rate-config-options-per-projectile-type.patch rename to patches/unapplied-server/0088-Despawn-rate-config-options-per-projectile-type.patch diff --git a/patches/server/0089-Add-option-to-disable-zombie-aggressiveness-towards-.patch b/patches/unapplied-server/0089-Add-option-to-disable-zombie-aggressiveness-towards-.patch similarity index 100% rename from patches/server/0089-Add-option-to-disable-zombie-aggressiveness-towards-.patch rename to patches/unapplied-server/0089-Add-option-to-disable-zombie-aggressiveness-towards-.patch diff --git a/patches/server/0090-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch b/patches/unapplied-server/0090-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch similarity index 100% rename from patches/server/0090-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch rename to patches/unapplied-server/0090-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch diff --git a/patches/server/0091-Flying-squids-Oh-my.patch b/patches/unapplied-server/0091-Flying-squids-Oh-my.patch similarity index 100% rename from patches/server/0091-Flying-squids-Oh-my.patch rename to patches/unapplied-server/0091-Flying-squids-Oh-my.patch diff --git a/patches/server/0092-Infinity-bow-settings.patch b/patches/unapplied-server/0092-Infinity-bow-settings.patch similarity index 100% rename from patches/server/0092-Infinity-bow-settings.patch rename to patches/unapplied-server/0092-Infinity-bow-settings.patch diff --git a/patches/server/0093-Configurable-daylight-cycle.patch b/patches/unapplied-server/0093-Configurable-daylight-cycle.patch similarity index 100% rename from patches/server/0093-Configurable-daylight-cycle.patch rename to patches/unapplied-server/0093-Configurable-daylight-cycle.patch diff --git a/patches/server/0094-Allow-infinite-and-mending-enchantments-together.patch b/patches/unapplied-server/0094-Allow-infinite-and-mending-enchantments-together.patch similarity index 100% rename from patches/server/0094-Allow-infinite-and-mending-enchantments-together.patch rename to patches/unapplied-server/0094-Allow-infinite-and-mending-enchantments-together.patch diff --git a/patches/server/0095-Furnace-uses-lava-from-underneath.patch b/patches/unapplied-server/0095-Furnace-uses-lava-from-underneath.patch similarity index 100% rename from patches/server/0095-Furnace-uses-lava-from-underneath.patch rename to patches/unapplied-server/0095-Furnace-uses-lava-from-underneath.patch diff --git a/patches/server/0096-Arrows-should-not-reset-despawn-counter.patch b/patches/unapplied-server/0096-Arrows-should-not-reset-despawn-counter.patch similarity index 100% rename from patches/server/0096-Arrows-should-not-reset-despawn-counter.patch rename to patches/unapplied-server/0096-Arrows-should-not-reset-despawn-counter.patch diff --git a/patches/server/0097-Ability-to-re-add-farmland-mechanics-from-Alpha.patch b/patches/unapplied-server/0097-Ability-to-re-add-farmland-mechanics-from-Alpha.patch similarity index 100% rename from patches/server/0097-Ability-to-re-add-farmland-mechanics-from-Alpha.patch rename to patches/unapplied-server/0097-Ability-to-re-add-farmland-mechanics-from-Alpha.patch diff --git a/patches/server/0098-Add-adjustable-breeding-cooldown-to-config.patch b/patches/unapplied-server/0098-Add-adjustable-breeding-cooldown-to-config.patch similarity index 100% rename from patches/server/0098-Add-adjustable-breeding-cooldown-to-config.patch rename to patches/unapplied-server/0098-Add-adjustable-breeding-cooldown-to-config.patch diff --git a/patches/server/0099-Make-entity-breeding-times-configurable.patch b/patches/unapplied-server/0099-Make-entity-breeding-times-configurable.patch similarity index 100% rename from patches/server/0099-Make-entity-breeding-times-configurable.patch rename to patches/unapplied-server/0099-Make-entity-breeding-times-configurable.patch diff --git a/patches/server/0100-Apply-display-names-from-item-forms-of-entities-to-e.patch b/patches/unapplied-server/0100-Apply-display-names-from-item-forms-of-entities-to-e.patch similarity index 100% rename from patches/server/0100-Apply-display-names-from-item-forms-of-entities-to-e.patch rename to patches/unapplied-server/0100-Apply-display-names-from-item-forms-of-entities-to-e.patch diff --git a/patches/server/0101-Set-name-visible-when-using-a-Name-Tag-on-an-Armor-S.patch b/patches/unapplied-server/0101-Set-name-visible-when-using-a-Name-Tag-on-an-Armor-S.patch similarity index 100% rename from patches/server/0101-Set-name-visible-when-using-a-Name-Tag-on-an-Armor-S.patch rename to patches/unapplied-server/0101-Set-name-visible-when-using-a-Name-Tag-on-an-Armor-S.patch diff --git a/patches/server/0102-Add-config-for-allowing-Endermen-to-despawn-even-whi.patch b/patches/unapplied-server/0102-Add-config-for-allowing-Endermen-to-despawn-even-whi.patch similarity index 100% rename from patches/server/0102-Add-config-for-allowing-Endermen-to-despawn-even-whi.patch rename to patches/unapplied-server/0102-Add-config-for-allowing-Endermen-to-despawn-even-whi.patch diff --git a/patches/server/0103-Add-configurable-snowball-damage.patch b/patches/unapplied-server/0103-Add-configurable-snowball-damage.patch similarity index 100% rename from patches/server/0103-Add-configurable-snowball-damage.patch rename to patches/unapplied-server/0103-Add-configurable-snowball-damage.patch diff --git a/patches/server/0104-Changeable-Mob-Left-Handed-Chance.patch b/patches/unapplied-server/0104-Changeable-Mob-Left-Handed-Chance.patch similarity index 100% rename from patches/server/0104-Changeable-Mob-Left-Handed-Chance.patch rename to patches/unapplied-server/0104-Changeable-Mob-Left-Handed-Chance.patch diff --git a/patches/server/0105-Add-boat-fall-damage-config.patch b/patches/unapplied-server/0105-Add-boat-fall-damage-config.patch similarity index 100% rename from patches/server/0105-Add-boat-fall-damage-config.patch rename to patches/unapplied-server/0105-Add-boat-fall-damage-config.patch diff --git a/patches/server/0106-Snow-Golem-rate-of-fire-config.patch b/patches/unapplied-server/0106-Snow-Golem-rate-of-fire-config.patch similarity index 100% rename from patches/server/0106-Snow-Golem-rate-of-fire-config.patch rename to patches/unapplied-server/0106-Snow-Golem-rate-of-fire-config.patch diff --git a/patches/server/0107-EMC-Configurable-disable-give-dropping.patch b/patches/unapplied-server/0107-EMC-Configurable-disable-give-dropping.patch similarity index 100% rename from patches/server/0107-EMC-Configurable-disable-give-dropping.patch rename to patches/unapplied-server/0107-EMC-Configurable-disable-give-dropping.patch diff --git a/patches/server/0108-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch b/patches/unapplied-server/0108-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch similarity index 100% rename from patches/server/0108-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch rename to patches/unapplied-server/0108-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch diff --git a/patches/server/0109-Toggle-for-Zombified-Piglin-death-always-counting-as.patch b/patches/unapplied-server/0109-Toggle-for-Zombified-Piglin-death-always-counting-as.patch similarity index 100% rename from patches/server/0109-Toggle-for-Zombified-Piglin-death-always-counting-as.patch rename to patches/unapplied-server/0109-Toggle-for-Zombified-Piglin-death-always-counting-as.patch diff --git a/patches/server/0110-Configurable-chance-for-wolves-to-spawn-rabid.patch b/patches/unapplied-server/0110-Configurable-chance-for-wolves-to-spawn-rabid.patch similarity index 100% rename from patches/server/0110-Configurable-chance-for-wolves-to-spawn-rabid.patch rename to patches/unapplied-server/0110-Configurable-chance-for-wolves-to-spawn-rabid.patch diff --git a/patches/server/0111-Configurable-default-collar-color.patch b/patches/unapplied-server/0111-Configurable-default-collar-color.patch similarity index 100% rename from patches/server/0111-Configurable-default-collar-color.patch rename to patches/unapplied-server/0111-Configurable-default-collar-color.patch diff --git a/patches/server/0112-Phantom-flames-on-swoop.patch b/patches/unapplied-server/0112-Phantom-flames-on-swoop.patch similarity index 100% rename from patches/server/0112-Phantom-flames-on-swoop.patch rename to patches/unapplied-server/0112-Phantom-flames-on-swoop.patch diff --git a/patches/server/0113-Option-for-chests-to-open-even-with-a-solid-block-on.patch b/patches/unapplied-server/0113-Option-for-chests-to-open-even-with-a-solid-block-on.patch similarity index 100% rename from patches/server/0113-Option-for-chests-to-open-even-with-a-solid-block-on.patch rename to patches/unapplied-server/0113-Option-for-chests-to-open-even-with-a-solid-block-on.patch diff --git a/patches/server/0114-Implement-TPSBar.patch b/patches/unapplied-server/0114-Implement-TPSBar.patch similarity index 100% rename from patches/server/0114-Implement-TPSBar.patch rename to patches/unapplied-server/0114-Implement-TPSBar.patch diff --git a/patches/server/0115-Striders-give-saddle-back.patch b/patches/unapplied-server/0115-Striders-give-saddle-back.patch similarity index 100% rename from patches/server/0115-Striders-give-saddle-back.patch rename to patches/unapplied-server/0115-Striders-give-saddle-back.patch diff --git a/patches/server/0116-PlayerBookTooLargeEvent.patch b/patches/unapplied-server/0116-PlayerBookTooLargeEvent.patch similarity index 100% rename from patches/server/0116-PlayerBookTooLargeEvent.patch rename to patches/unapplied-server/0116-PlayerBookTooLargeEvent.patch diff --git a/patches/server/0117-Full-netherite-armor-grants-fire-resistance.patch b/patches/unapplied-server/0117-Full-netherite-armor-grants-fire-resistance.patch similarity index 100% rename from patches/server/0117-Full-netherite-armor-grants-fire-resistance.patch rename to patches/unapplied-server/0117-Full-netherite-armor-grants-fire-resistance.patch diff --git a/patches/server/0118-Add-mobGriefing-bypass-to-everything-affected.patch b/patches/unapplied-server/0118-Add-mobGriefing-bypass-to-everything-affected.patch similarity index 100% rename from patches/server/0118-Add-mobGriefing-bypass-to-everything-affected.patch rename to patches/unapplied-server/0118-Add-mobGriefing-bypass-to-everything-affected.patch diff --git a/patches/server/0119-Config-to-allow-Note-Block-sounds-when-blocked.patch b/patches/unapplied-server/0119-Config-to-allow-Note-Block-sounds-when-blocked.patch similarity index 100% rename from patches/server/0119-Config-to-allow-Note-Block-sounds-when-blocked.patch rename to patches/unapplied-server/0119-Config-to-allow-Note-Block-sounds-when-blocked.patch diff --git a/patches/server/0120-Add-EntityTeleportHinderedEvent.patch b/patches/unapplied-server/0120-Add-EntityTeleportHinderedEvent.patch similarity index 100% rename from patches/server/0120-Add-EntityTeleportHinderedEvent.patch rename to patches/unapplied-server/0120-Add-EntityTeleportHinderedEvent.patch diff --git a/patches/server/0121-Farmland-trampling-changes.patch b/patches/unapplied-server/0121-Farmland-trampling-changes.patch similarity index 100% rename from patches/server/0121-Farmland-trampling-changes.patch rename to patches/unapplied-server/0121-Farmland-trampling-changes.patch diff --git a/patches/server/0122-Movement-options-for-armor-stands.patch b/patches/unapplied-server/0122-Movement-options-for-armor-stands.patch similarity index 100% rename from patches/server/0122-Movement-options-for-armor-stands.patch rename to patches/unapplied-server/0122-Movement-options-for-armor-stands.patch diff --git a/patches/server/0123-Fix-stuck-in-portals.patch b/patches/unapplied-server/0123-Fix-stuck-in-portals.patch similarity index 100% rename from patches/server/0123-Fix-stuck-in-portals.patch rename to patches/unapplied-server/0123-Fix-stuck-in-portals.patch diff --git a/patches/server/0124-Toggle-for-water-sensitive-mob-damage.patch b/patches/unapplied-server/0124-Toggle-for-water-sensitive-mob-damage.patch similarity index 100% rename from patches/server/0124-Toggle-for-water-sensitive-mob-damage.patch rename to patches/unapplied-server/0124-Toggle-for-water-sensitive-mob-damage.patch diff --git a/patches/server/0125-Config-to-always-tame-in-Creative.patch b/patches/unapplied-server/0125-Config-to-always-tame-in-Creative.patch similarity index 100% rename from patches/server/0125-Config-to-always-tame-in-Creative.patch rename to patches/unapplied-server/0125-Config-to-always-tame-in-Creative.patch diff --git a/patches/server/0126-End-crystal-explosion-options.patch b/patches/unapplied-server/0126-End-crystal-explosion-options.patch similarity index 100% rename from patches/server/0126-End-crystal-explosion-options.patch rename to patches/unapplied-server/0126-End-crystal-explosion-options.patch diff --git a/patches/server/0127-Configs-for-if-Wither-Ender-Dragon-can-ride-vehicles.patch b/patches/unapplied-server/0127-Configs-for-if-Wither-Ender-Dragon-can-ride-vehicles.patch similarity index 100% rename from patches/server/0127-Configs-for-if-Wither-Ender-Dragon-can-ride-vehicles.patch rename to patches/unapplied-server/0127-Configs-for-if-Wither-Ender-Dragon-can-ride-vehicles.patch diff --git a/patches/server/0128-Dont-run-with-scissors.patch b/patches/unapplied-server/0128-Dont-run-with-scissors.patch similarity index 100% rename from patches/server/0128-Dont-run-with-scissors.patch rename to patches/unapplied-server/0128-Dont-run-with-scissors.patch diff --git a/patches/server/0129-One-Punch-Man.patch b/patches/unapplied-server/0129-One-Punch-Man.patch similarity index 100% rename from patches/server/0129-One-Punch-Man.patch rename to patches/unapplied-server/0129-One-Punch-Man.patch diff --git a/patches/server/0130-Configurable-Ender-Pearl-cooldown-damage-and-Endermi.patch b/patches/unapplied-server/0130-Configurable-Ender-Pearl-cooldown-damage-and-Endermi.patch similarity index 100% rename from patches/server/0130-Configurable-Ender-Pearl-cooldown-damage-and-Endermi.patch rename to patches/unapplied-server/0130-Configurable-Ender-Pearl-cooldown-damage-and-Endermi.patch diff --git a/patches/server/0131-Config-to-ignore-nearby-mobs-when-sleeping.patch b/patches/unapplied-server/0131-Config-to-ignore-nearby-mobs-when-sleeping.patch similarity index 100% rename from patches/server/0131-Config-to-ignore-nearby-mobs-when-sleeping.patch rename to patches/unapplied-server/0131-Config-to-ignore-nearby-mobs-when-sleeping.patch diff --git a/patches/server/0132-Add-back-player-spawned-endermite-API.patch b/patches/unapplied-server/0132-Add-back-player-spawned-endermite-API.patch similarity index 100% rename from patches/server/0132-Add-back-player-spawned-endermite-API.patch rename to patches/unapplied-server/0132-Add-back-player-spawned-endermite-API.patch diff --git a/patches/server/0133-Config-Enderman-aggressiveness-towards-Endermites.patch b/patches/unapplied-server/0133-Config-Enderman-aggressiveness-towards-Endermites.patch similarity index 100% rename from patches/server/0133-Config-Enderman-aggressiveness-towards-Endermites.patch rename to patches/unapplied-server/0133-Config-Enderman-aggressiveness-towards-Endermites.patch diff --git a/patches/server/0134-Config-to-ignore-Dragon-Head-wearers-and-stare-aggro.patch b/patches/unapplied-server/0134-Config-to-ignore-Dragon-Head-wearers-and-stare-aggro.patch similarity index 100% rename from patches/server/0134-Config-to-ignore-Dragon-Head-wearers-and-stare-aggro.patch rename to patches/unapplied-server/0134-Config-to-ignore-Dragon-Head-wearers-and-stare-aggro.patch diff --git a/patches/server/0135-Tick-fluids-config.patch b/patches/unapplied-server/0135-Tick-fluids-config.patch similarity index 100% rename from patches/server/0135-Tick-fluids-config.patch rename to patches/unapplied-server/0135-Tick-fluids-config.patch diff --git a/patches/server/0136-Config-to-disable-Llama-caravans.patch b/patches/unapplied-server/0136-Config-to-disable-Llama-caravans.patch similarity index 100% rename from patches/server/0136-Config-to-disable-Llama-caravans.patch rename to patches/unapplied-server/0136-Config-to-disable-Llama-caravans.patch diff --git a/patches/server/0137-Config-to-make-Creepers-explode-on-death.patch b/patches/unapplied-server/0137-Config-to-make-Creepers-explode-on-death.patch similarity index 100% rename from patches/server/0137-Config-to-make-Creepers-explode-on-death.patch rename to patches/unapplied-server/0137-Config-to-make-Creepers-explode-on-death.patch diff --git a/patches/server/0138-Configurable-ravager-griefable-blocks-list.patch b/patches/unapplied-server/0138-Configurable-ravager-griefable-blocks-list.patch similarity index 100% rename from patches/server/0138-Configurable-ravager-griefable-blocks-list.patch rename to patches/unapplied-server/0138-Configurable-ravager-griefable-blocks-list.patch diff --git a/patches/server/0139-Sneak-to-bulk-process-composter.patch b/patches/unapplied-server/0139-Sneak-to-bulk-process-composter.patch similarity index 100% rename from patches/server/0139-Sneak-to-bulk-process-composter.patch rename to patches/unapplied-server/0139-Sneak-to-bulk-process-composter.patch diff --git a/patches/server/0140-Config-for-skipping-night.patch b/patches/unapplied-server/0140-Config-for-skipping-night.patch similarity index 100% rename from patches/server/0140-Config-for-skipping-night.patch rename to patches/unapplied-server/0140-Config-for-skipping-night.patch diff --git a/patches/server/0141-Add-config-for-villager-trading.patch b/patches/unapplied-server/0141-Add-config-for-villager-trading.patch similarity index 100% rename from patches/server/0141-Add-config-for-villager-trading.patch rename to patches/unapplied-server/0141-Add-config-for-villager-trading.patch diff --git a/patches/server/0142-Allow-infinity-on-crossbows.patch b/patches/unapplied-server/0142-Allow-infinity-on-crossbows.patch similarity index 100% rename from patches/server/0142-Allow-infinity-on-crossbows.patch rename to patches/unapplied-server/0142-Allow-infinity-on-crossbows.patch diff --git a/patches/server/0143-Drowning-Settings.patch b/patches/unapplied-server/0143-Drowning-Settings.patch similarity index 100% rename from patches/server/0143-Drowning-Settings.patch rename to patches/unapplied-server/0143-Drowning-Settings.patch diff --git a/patches/server/0144-Break-individual-slabs-when-sneaking.patch b/patches/unapplied-server/0144-Break-individual-slabs-when-sneaking.patch similarity index 100% rename from patches/server/0144-Break-individual-slabs-when-sneaking.patch rename to patches/unapplied-server/0144-Break-individual-slabs-when-sneaking.patch diff --git a/patches/server/0145-Config-to-disable-hostile-mob-spawn-on-ice.patch b/patches/unapplied-server/0145-Config-to-disable-hostile-mob-spawn-on-ice.patch similarity index 100% rename from patches/server/0145-Config-to-disable-hostile-mob-spawn-on-ice.patch rename to patches/unapplied-server/0145-Config-to-disable-hostile-mob-spawn-on-ice.patch diff --git a/patches/server/0146-Config-to-show-Armor-Stand-arms-on-spawn.patch b/patches/unapplied-server/0146-Config-to-show-Armor-Stand-arms-on-spawn.patch similarity index 100% rename from patches/server/0146-Config-to-show-Armor-Stand-arms-on-spawn.patch rename to patches/unapplied-server/0146-Config-to-show-Armor-Stand-arms-on-spawn.patch diff --git a/patches/server/0147-Option-to-make-doors-require-redstone.patch b/patches/unapplied-server/0147-Option-to-make-doors-require-redstone.patch similarity index 100% rename from patches/server/0147-Option-to-make-doors-require-redstone.patch rename to patches/unapplied-server/0147-Option-to-make-doors-require-redstone.patch diff --git a/patches/server/0148-Config-to-allow-for-unsafe-enchants.patch b/patches/unapplied-server/0148-Config-to-allow-for-unsafe-enchants.patch similarity index 100% rename from patches/server/0148-Config-to-allow-for-unsafe-enchants.patch rename to patches/unapplied-server/0148-Config-to-allow-for-unsafe-enchants.patch diff --git a/patches/server/0149-Configurable-sponge-absorption.patch b/patches/unapplied-server/0149-Configurable-sponge-absorption.patch similarity index 100% rename from patches/server/0149-Configurable-sponge-absorption.patch rename to patches/unapplied-server/0149-Configurable-sponge-absorption.patch diff --git a/patches/server/0150-Projectile-offset-config.patch b/patches/unapplied-server/0150-Projectile-offset-config.patch similarity index 100% rename from patches/server/0150-Projectile-offset-config.patch rename to patches/unapplied-server/0150-Projectile-offset-config.patch diff --git a/patches/server/0151-Config-for-powered-rail-activation-distance.patch b/patches/unapplied-server/0151-Config-for-powered-rail-activation-distance.patch similarity index 100% rename from patches/server/0151-Config-for-powered-rail-activation-distance.patch rename to patches/unapplied-server/0151-Config-for-powered-rail-activation-distance.patch diff --git a/patches/server/0152-Piglin-portal-spawn-modifier.patch b/patches/unapplied-server/0152-Piglin-portal-spawn-modifier.patch similarity index 100% rename from patches/server/0152-Piglin-portal-spawn-modifier.patch rename to patches/unapplied-server/0152-Piglin-portal-spawn-modifier.patch diff --git a/patches/server/0153-Config-to-change-max-number-of-bees.patch b/patches/unapplied-server/0153-Config-to-change-max-number-of-bees.patch similarity index 100% rename from patches/server/0153-Config-to-change-max-number-of-bees.patch rename to patches/unapplied-server/0153-Config-to-change-max-number-of-bees.patch diff --git a/patches/server/0154-Config-for-wither-explosion-radius.patch b/patches/unapplied-server/0154-Config-for-wither-explosion-radius.patch similarity index 100% rename from patches/server/0154-Config-for-wither-explosion-radius.patch rename to patches/unapplied-server/0154-Config-for-wither-explosion-radius.patch diff --git a/patches/server/0155-Gamemode-extra-permissions.patch b/patches/unapplied-server/0155-Gamemode-extra-permissions.patch similarity index 100% rename from patches/server/0155-Gamemode-extra-permissions.patch rename to patches/unapplied-server/0155-Gamemode-extra-permissions.patch diff --git a/patches/server/0156-Configurable-piston-push-limit.patch b/patches/unapplied-server/0156-Configurable-piston-push-limit.patch similarity index 100% rename from patches/server/0156-Configurable-piston-push-limit.patch rename to patches/unapplied-server/0156-Configurable-piston-push-limit.patch diff --git a/patches/server/0157-Configurable-broadcast-settings.patch b/patches/unapplied-server/0157-Configurable-broadcast-settings.patch similarity index 100% rename from patches/server/0157-Configurable-broadcast-settings.patch rename to patches/unapplied-server/0157-Configurable-broadcast-settings.patch diff --git a/patches/server/0158-Configurable-mob-blindness.patch b/patches/unapplied-server/0158-Configurable-mob-blindness.patch similarity index 100% rename from patches/server/0158-Configurable-mob-blindness.patch rename to patches/unapplied-server/0158-Configurable-mob-blindness.patch diff --git a/patches/server/0159-Hide-hidden-players-from-entity-selector.patch b/patches/unapplied-server/0159-Hide-hidden-players-from-entity-selector.patch similarity index 100% rename from patches/server/0159-Hide-hidden-players-from-entity-selector.patch rename to patches/unapplied-server/0159-Hide-hidden-players-from-entity-selector.patch diff --git a/patches/server/0160-Config-for-health-to-impact-Creeper-explosion-radius.patch b/patches/unapplied-server/0160-Config-for-health-to-impact-Creeper-explosion-radius.patch similarity index 100% rename from patches/server/0160-Config-for-health-to-impact-Creeper-explosion-radius.patch rename to patches/unapplied-server/0160-Config-for-health-to-impact-Creeper-explosion-radius.patch diff --git a/patches/server/0161-Iron-golem-calm-anger-options.patch b/patches/unapplied-server/0161-Iron-golem-calm-anger-options.patch similarity index 100% rename from patches/server/0161-Iron-golem-calm-anger-options.patch rename to patches/unapplied-server/0161-Iron-golem-calm-anger-options.patch diff --git a/patches/server/0162-Breedable-parrots.patch b/patches/unapplied-server/0162-Breedable-parrots.patch similarity index 100% rename from patches/server/0162-Breedable-parrots.patch rename to patches/unapplied-server/0162-Breedable-parrots.patch diff --git a/patches/server/0163-Configurable-powered-rail-boost-modifier.patch b/patches/unapplied-server/0163-Configurable-powered-rail-boost-modifier.patch similarity index 100% rename from patches/server/0163-Configurable-powered-rail-boost-modifier.patch rename to patches/unapplied-server/0163-Configurable-powered-rail-boost-modifier.patch diff --git a/patches/server/0164-Add-config-change-multiplier-critical-damage-value.patch b/patches/unapplied-server/0164-Add-config-change-multiplier-critical-damage-value.patch similarity index 100% rename from patches/server/0164-Add-config-change-multiplier-critical-damage-value.patch rename to patches/unapplied-server/0164-Add-config-change-multiplier-critical-damage-value.patch diff --git a/patches/server/0165-Option-to-disable-dragon-egg-teleporting.patch b/patches/unapplied-server/0165-Option-to-disable-dragon-egg-teleporting.patch similarity index 100% rename from patches/server/0165-Option-to-disable-dragon-egg-teleporting.patch rename to patches/unapplied-server/0165-Option-to-disable-dragon-egg-teleporting.patch diff --git a/patches/server/0166-Config-for-unverified-username-message.patch b/patches/unapplied-server/0166-Config-for-unverified-username-message.patch similarity index 100% rename from patches/server/0166-Config-for-unverified-username-message.patch rename to patches/unapplied-server/0166-Config-for-unverified-username-message.patch diff --git a/patches/server/0167-Make-anvil-cumulative-cost-configurable.patch b/patches/unapplied-server/0167-Make-anvil-cumulative-cost-configurable.patch similarity index 100% rename from patches/server/0167-Make-anvil-cumulative-cost-configurable.patch rename to patches/unapplied-server/0167-Make-anvil-cumulative-cost-configurable.patch diff --git a/patches/server/0168-Bee-can-work-when-raining-or-at-night.patch b/patches/unapplied-server/0168-Bee-can-work-when-raining-or-at-night.patch similarity index 100% rename from patches/server/0168-Bee-can-work-when-raining-or-at-night.patch rename to patches/unapplied-server/0168-Bee-can-work-when-raining-or-at-night.patch diff --git a/patches/server/0169-API-for-any-mob-to-burn-daylight.patch b/patches/unapplied-server/0169-API-for-any-mob-to-burn-daylight.patch similarity index 100% rename from patches/server/0169-API-for-any-mob-to-burn-daylight.patch rename to patches/unapplied-server/0169-API-for-any-mob-to-burn-daylight.patch diff --git a/patches/server/0170-Config-MobEffect-by-world.patch b/patches/unapplied-server/0170-Config-MobEffect-by-world.patch similarity index 100% rename from patches/server/0170-Config-MobEffect-by-world.patch rename to patches/unapplied-server/0170-Config-MobEffect-by-world.patch diff --git a/patches/server/0171-Beacon-Activation-Range-Configurable.patch b/patches/unapplied-server/0171-Beacon-Activation-Range-Configurable.patch similarity index 100% rename from patches/server/0171-Beacon-Activation-Range-Configurable.patch rename to patches/unapplied-server/0171-Beacon-Activation-Range-Configurable.patch diff --git a/patches/server/0172-Make-lightning-rod-range-configurable.patch b/patches/unapplied-server/0172-Make-lightning-rod-range-configurable.patch similarity index 100% rename from patches/server/0172-Make-lightning-rod-range-configurable.patch rename to patches/unapplied-server/0172-Make-lightning-rod-range-configurable.patch diff --git a/patches/server/0173-Burp-delay-burp-after-eating-food-fills-hunger-bar-c.patch b/patches/unapplied-server/0173-Burp-delay-burp-after-eating-food-fills-hunger-bar-c.patch similarity index 100% rename from patches/server/0173-Burp-delay-burp-after-eating-food-fills-hunger-bar-c.patch rename to patches/unapplied-server/0173-Burp-delay-burp-after-eating-food-fills-hunger-bar-c.patch diff --git a/patches/server/0174-Allow-player-join-full-server-by-permission.patch b/patches/unapplied-server/0174-Allow-player-join-full-server-by-permission.patch similarity index 100% rename from patches/server/0174-Allow-player-join-full-server-by-permission.patch rename to patches/unapplied-server/0174-Allow-player-join-full-server-by-permission.patch diff --git a/patches/server/0175-Add-portal-permission-bypass.patch b/patches/unapplied-server/0175-Add-portal-permission-bypass.patch similarity index 100% rename from patches/server/0175-Add-portal-permission-bypass.patch rename to patches/unapplied-server/0175-Add-portal-permission-bypass.patch diff --git a/patches/server/0176-Shulker-spawn-from-bullet-options.patch b/patches/unapplied-server/0176-Shulker-spawn-from-bullet-options.patch similarity index 100% rename from patches/server/0176-Shulker-spawn-from-bullet-options.patch rename to patches/unapplied-server/0176-Shulker-spawn-from-bullet-options.patch diff --git a/patches/server/0177-Eating-glow-berries-adds-glow-effect.patch b/patches/unapplied-server/0177-Eating-glow-berries-adds-glow-effect.patch similarity index 100% rename from patches/server/0177-Eating-glow-berries-adds-glow-effect.patch rename to patches/unapplied-server/0177-Eating-glow-berries-adds-glow-effect.patch diff --git a/patches/server/0178-Option-to-make-drowned-break-doors.patch b/patches/unapplied-server/0178-Option-to-make-drowned-break-doors.patch similarity index 100% rename from patches/server/0178-Option-to-make-drowned-break-doors.patch rename to patches/unapplied-server/0178-Option-to-make-drowned-break-doors.patch diff --git a/patches/server/0179-Configurable-hunger-starvation-damage.patch b/patches/unapplied-server/0179-Configurable-hunger-starvation-damage.patch similarity index 100% rename from patches/server/0179-Configurable-hunger-starvation-damage.patch rename to patches/unapplied-server/0179-Configurable-hunger-starvation-damage.patch diff --git a/patches/server/0180-Enhance-SysoutCatcher.patch b/patches/unapplied-server/0180-Enhance-SysoutCatcher.patch similarity index 100% rename from patches/server/0180-Enhance-SysoutCatcher.patch rename to patches/unapplied-server/0180-Enhance-SysoutCatcher.patch diff --git a/patches/server/0181-Add-uptime-command.patch b/patches/unapplied-server/0181-Add-uptime-command.patch similarity index 100% rename from patches/server/0181-Add-uptime-command.patch rename to patches/unapplied-server/0181-Add-uptime-command.patch diff --git a/patches/server/0182-Tool-actionable-options.patch b/patches/unapplied-server/0182-Tool-actionable-options.patch similarity index 100% rename from patches/server/0182-Tool-actionable-options.patch rename to patches/unapplied-server/0182-Tool-actionable-options.patch diff --git a/patches/server/0183-Store-placer-on-Block-when-placed.patch b/patches/unapplied-server/0183-Store-placer-on-Block-when-placed.patch similarity index 100% rename from patches/server/0183-Store-placer-on-Block-when-placed.patch rename to patches/unapplied-server/0183-Store-placer-on-Block-when-placed.patch diff --git a/patches/server/0184-Summoner-API.patch b/patches/unapplied-server/0184-Summoner-API.patch similarity index 100% rename from patches/server/0184-Summoner-API.patch rename to patches/unapplied-server/0184-Summoner-API.patch diff --git a/patches/server/0185-Customizable-sleeping-actionbar-messages.patch b/patches/unapplied-server/0185-Customizable-sleeping-actionbar-messages.patch similarity index 100% rename from patches/server/0185-Customizable-sleeping-actionbar-messages.patch rename to patches/unapplied-server/0185-Customizable-sleeping-actionbar-messages.patch diff --git a/patches/server/0186-option-to-disable-shulker-box-items-from-dropping-co.patch b/patches/unapplied-server/0186-option-to-disable-shulker-box-items-from-dropping-co.patch similarity index 100% rename from patches/server/0186-option-to-disable-shulker-box-items-from-dropping-co.patch rename to patches/unapplied-server/0186-option-to-disable-shulker-box-items-from-dropping-co.patch diff --git a/patches/server/0187-Big-dripleaf-tilt-delay.patch b/patches/unapplied-server/0187-Big-dripleaf-tilt-delay.patch similarity index 100% rename from patches/server/0187-Big-dripleaf-tilt-delay.patch rename to patches/unapplied-server/0187-Big-dripleaf-tilt-delay.patch diff --git a/patches/server/0188-Player-ridable-in-water-option.patch b/patches/unapplied-server/0188-Player-ridable-in-water-option.patch similarity index 100% rename from patches/server/0188-Player-ridable-in-water-option.patch rename to patches/unapplied-server/0188-Player-ridable-in-water-option.patch diff --git a/patches/server/0189-Config-to-disable-Enderman-teleport-on-projectile-hi.patch b/patches/unapplied-server/0189-Config-to-disable-Enderman-teleport-on-projectile-hi.patch similarity index 100% rename from patches/server/0189-Config-to-disable-Enderman-teleport-on-projectile-hi.patch rename to patches/unapplied-server/0189-Config-to-disable-Enderman-teleport-on-projectile-hi.patch diff --git a/patches/server/0190-Add-compass-command.patch b/patches/unapplied-server/0190-Add-compass-command.patch similarity index 100% rename from patches/server/0190-Add-compass-command.patch rename to patches/unapplied-server/0190-Add-compass-command.patch diff --git a/patches/server/0191-Toggle-for-kinetic-damage.patch b/patches/unapplied-server/0191-Toggle-for-kinetic-damage.patch similarity index 100% rename from patches/server/0191-Toggle-for-kinetic-damage.patch rename to patches/unapplied-server/0191-Toggle-for-kinetic-damage.patch diff --git a/patches/server/0192-Add-Option-for-disable-observer-clocks.patch b/patches/unapplied-server/0192-Add-Option-for-disable-observer-clocks.patch similarity index 100% rename from patches/server/0192-Add-Option-for-disable-observer-clocks.patch rename to patches/unapplied-server/0192-Add-Option-for-disable-observer-clocks.patch diff --git a/patches/server/0193-Customizeable-Zombie-Villager-curing-times.patch b/patches/unapplied-server/0193-Customizeable-Zombie-Villager-curing-times.patch similarity index 100% rename from patches/server/0193-Customizeable-Zombie-Villager-curing-times.patch rename to patches/unapplied-server/0193-Customizeable-Zombie-Villager-curing-times.patch diff --git a/patches/server/0194-Option-for-sponges-to-work-on-lava-and-mud.patch b/patches/unapplied-server/0194-Option-for-sponges-to-work-on-lava-and-mud.patch similarity index 100% rename from patches/server/0194-Option-for-sponges-to-work-on-lava-and-mud.patch rename to patches/unapplied-server/0194-Option-for-sponges-to-work-on-lava-and-mud.patch diff --git a/patches/server/0195-Toggle-for-Wither-s-spawn-sound.patch b/patches/unapplied-server/0195-Toggle-for-Wither-s-spawn-sound.patch similarity index 100% rename from patches/server/0195-Toggle-for-Wither-s-spawn-sound.patch rename to patches/unapplied-server/0195-Toggle-for-Wither-s-spawn-sound.patch diff --git a/patches/server/0196-Cactus-breaks-from-solid-neighbors-config.patch b/patches/unapplied-server/0196-Cactus-breaks-from-solid-neighbors-config.patch similarity index 100% rename from patches/server/0196-Cactus-breaks-from-solid-neighbors-config.patch rename to patches/unapplied-server/0196-Cactus-breaks-from-solid-neighbors-config.patch diff --git a/patches/server/0197-Config-to-remove-curse-of-binding-with-weakness.patch b/patches/unapplied-server/0197-Config-to-remove-curse-of-binding-with-weakness.patch similarity index 100% rename from patches/server/0197-Config-to-remove-curse-of-binding-with-weakness.patch rename to patches/unapplied-server/0197-Config-to-remove-curse-of-binding-with-weakness.patch diff --git a/patches/server/0198-Conduit-behavior-configuration.patch b/patches/unapplied-server/0198-Conduit-behavior-configuration.patch similarity index 100% rename from patches/server/0198-Conduit-behavior-configuration.patch rename to patches/unapplied-server/0198-Conduit-behavior-configuration.patch diff --git a/patches/server/0199-Cauldron-fill-chances.patch b/patches/unapplied-server/0199-Cauldron-fill-chances.patch similarity index 100% rename from patches/server/0199-Cauldron-fill-chances.patch rename to patches/unapplied-server/0199-Cauldron-fill-chances.patch diff --git a/patches/server/0200-Config-to-allow-mobs-to-pathfind-over-rails.patch b/patches/unapplied-server/0200-Config-to-allow-mobs-to-pathfind-over-rails.patch similarity index 100% rename from patches/server/0200-Config-to-allow-mobs-to-pathfind-over-rails.patch rename to patches/unapplied-server/0200-Config-to-allow-mobs-to-pathfind-over-rails.patch diff --git a/patches/server/0201-Shulker-change-color-with-dye.patch b/patches/unapplied-server/0201-Shulker-change-color-with-dye.patch similarity index 100% rename from patches/server/0201-Shulker-change-color-with-dye.patch rename to patches/unapplied-server/0201-Shulker-change-color-with-dye.patch diff --git a/patches/server/0202-Extended-OfflinePlayer-API.patch b/patches/unapplied-server/0202-Extended-OfflinePlayer-API.patch similarity index 100% rename from patches/server/0202-Extended-OfflinePlayer-API.patch rename to patches/unapplied-server/0202-Extended-OfflinePlayer-API.patch diff --git a/patches/server/0203-Added-the-ability-to-add-combustible-items.patch b/patches/unapplied-server/0203-Added-the-ability-to-add-combustible-items.patch similarity index 100% rename from patches/server/0203-Added-the-ability-to-add-combustible-items.patch rename to patches/unapplied-server/0203-Added-the-ability-to-add-combustible-items.patch diff --git a/patches/server/0204-Option-for-if-rain-and-thunder-should-stop-on-sleep.patch b/patches/unapplied-server/0204-Option-for-if-rain-and-thunder-should-stop-on-sleep.patch similarity index 100% rename from patches/server/0204-Option-for-if-rain-and-thunder-should-stop-on-sleep.patch rename to patches/unapplied-server/0204-Option-for-if-rain-and-thunder-should-stop-on-sleep.patch diff --git a/patches/server/0205-Chance-for-azalea-blocks-to-grow-into-trees-naturall.patch b/patches/unapplied-server/0205-Chance-for-azalea-blocks-to-grow-into-trees-naturall.patch similarity index 100% rename from patches/server/0205-Chance-for-azalea-blocks-to-grow-into-trees-naturall.patch rename to patches/unapplied-server/0205-Chance-for-azalea-blocks-to-grow-into-trees-naturall.patch diff --git a/patches/server/0206-Shift-right-click-to-use-exp-for-mending.patch b/patches/unapplied-server/0206-Shift-right-click-to-use-exp-for-mending.patch similarity index 100% rename from patches/server/0206-Shift-right-click-to-use-exp-for-mending.patch rename to patches/unapplied-server/0206-Shift-right-click-to-use-exp-for-mending.patch diff --git a/patches/server/0207-Dolphins-naturally-aggressive-to-players-chance.patch b/patches/unapplied-server/0207-Dolphins-naturally-aggressive-to-players-chance.patch similarity index 100% rename from patches/server/0207-Dolphins-naturally-aggressive-to-players-chance.patch rename to patches/unapplied-server/0207-Dolphins-naturally-aggressive-to-players-chance.patch diff --git a/patches/server/0208-Cows-naturally-aggressive-to-players-chance.patch b/patches/unapplied-server/0208-Cows-naturally-aggressive-to-players-chance.patch similarity index 100% rename from patches/server/0208-Cows-naturally-aggressive-to-players-chance.patch rename to patches/unapplied-server/0208-Cows-naturally-aggressive-to-players-chance.patch diff --git a/patches/server/0209-Option-for-beds-to-explode-on-villager-sleep.patch b/patches/unapplied-server/0209-Option-for-beds-to-explode-on-villager-sleep.patch similarity index 100% rename from patches/server/0209-Option-for-beds-to-explode-on-villager-sleep.patch rename to patches/unapplied-server/0209-Option-for-beds-to-explode-on-villager-sleep.patch diff --git a/patches/server/0210-Halloween-options-and-optimizations.patch b/patches/unapplied-server/0210-Halloween-options-and-optimizations.patch similarity index 100% rename from patches/server/0210-Halloween-options-and-optimizations.patch rename to patches/unapplied-server/0210-Halloween-options-and-optimizations.patch diff --git a/patches/server/0211-Config-for-grindstones.patch b/patches/unapplied-server/0211-Config-for-grindstones.patch similarity index 100% rename from patches/server/0211-Config-for-grindstones.patch rename to patches/unapplied-server/0211-Config-for-grindstones.patch diff --git a/patches/server/0212-UPnP-Port-Forwarding.patch b/patches/unapplied-server/0212-UPnP-Port-Forwarding.patch similarity index 100% rename from patches/server/0212-UPnP-Port-Forwarding.patch rename to patches/unapplied-server/0212-UPnP-Port-Forwarding.patch diff --git a/patches/server/0213-Campfire-option-for-lit-when-placed.patch b/patches/unapplied-server/0213-Campfire-option-for-lit-when-placed.patch similarity index 100% rename from patches/server/0213-Campfire-option-for-lit-when-placed.patch rename to patches/unapplied-server/0213-Campfire-option-for-lit-when-placed.patch diff --git a/patches/server/0214-options-to-extinguish-fire-blocks-with-snowballs.patch b/patches/unapplied-server/0214-options-to-extinguish-fire-blocks-with-snowballs.patch similarity index 100% rename from patches/server/0214-options-to-extinguish-fire-blocks-with-snowballs.patch rename to patches/unapplied-server/0214-options-to-extinguish-fire-blocks-with-snowballs.patch diff --git a/patches/server/0215-Add-option-to-disable-zombie-villagers-cure.patch b/patches/unapplied-server/0215-Add-option-to-disable-zombie-villagers-cure.patch similarity index 100% rename from patches/server/0215-Add-option-to-disable-zombie-villagers-cure.patch rename to patches/unapplied-server/0215-Add-option-to-disable-zombie-villagers-cure.patch diff --git a/patches/server/0216-Persistent-BlockEntity-Lore-and-DisplayName.patch b/patches/unapplied-server/0216-Persistent-BlockEntity-Lore-and-DisplayName.patch similarity index 100% rename from patches/server/0216-Persistent-BlockEntity-Lore-and-DisplayName.patch rename to patches/unapplied-server/0216-Persistent-BlockEntity-Lore-and-DisplayName.patch diff --git a/patches/server/0217-Signs-allow-color-codes.patch b/patches/unapplied-server/0217-Signs-allow-color-codes.patch similarity index 100% rename from patches/server/0217-Signs-allow-color-codes.patch rename to patches/unapplied-server/0217-Signs-allow-color-codes.patch diff --git a/patches/server/0218-Kelp-cave-weeping-and-twisting-vines-configurable-ma.patch b/patches/unapplied-server/0218-Kelp-cave-weeping-and-twisting-vines-configurable-ma.patch similarity index 100% rename from patches/server/0218-Kelp-cave-weeping-and-twisting-vines-configurable-ma.patch rename to patches/unapplied-server/0218-Kelp-cave-weeping-and-twisting-vines-configurable-ma.patch diff --git a/patches/server/0219-Mobs-always-drop-experience.patch b/patches/unapplied-server/0219-Mobs-always-drop-experience.patch similarity index 100% rename from patches/server/0219-Mobs-always-drop-experience.patch rename to patches/unapplied-server/0219-Mobs-always-drop-experience.patch diff --git a/patches/server/0220-Grindstone-API.patch b/patches/unapplied-server/0220-Grindstone-API.patch similarity index 100% rename from patches/server/0220-Grindstone-API.patch rename to patches/unapplied-server/0220-Grindstone-API.patch diff --git a/patches/server/0221-Ability-for-hoe-to-replant-crops-and-nether-warts.patch b/patches/unapplied-server/0221-Ability-for-hoe-to-replant-crops-and-nether-warts.patch similarity index 100% rename from patches/server/0221-Ability-for-hoe-to-replant-crops-and-nether-warts.patch rename to patches/unapplied-server/0221-Ability-for-hoe-to-replant-crops-and-nether-warts.patch diff --git a/patches/server/0222-Turtle-eggs-random-tick-crack-chance.patch b/patches/unapplied-server/0222-Turtle-eggs-random-tick-crack-chance.patch similarity index 100% rename from patches/server/0222-Turtle-eggs-random-tick-crack-chance.patch rename to patches/unapplied-server/0222-Turtle-eggs-random-tick-crack-chance.patch diff --git a/patches/server/0223-Mob-head-visibility-percent.patch b/patches/unapplied-server/0223-Mob-head-visibility-percent.patch similarity index 100% rename from patches/server/0223-Mob-head-visibility-percent.patch rename to patches/unapplied-server/0223-Mob-head-visibility-percent.patch diff --git a/patches/server/0224-Configurable-valid-characters-for-usernames.patch b/patches/unapplied-server/0224-Configurable-valid-characters-for-usernames.patch similarity index 100% rename from patches/server/0224-Configurable-valid-characters-for-usernames.patch rename to patches/unapplied-server/0224-Configurable-valid-characters-for-usernames.patch diff --git a/patches/server/0225-Shears-can-have-looting-enchantment.patch b/patches/unapplied-server/0225-Shears-can-have-looting-enchantment.patch similarity index 100% rename from patches/server/0225-Shears-can-have-looting-enchantment.patch rename to patches/unapplied-server/0225-Shears-can-have-looting-enchantment.patch diff --git a/patches/server/0226-Stop-bees-from-dying-after-stinging.patch b/patches/unapplied-server/0226-Stop-bees-from-dying-after-stinging.patch similarity index 100% rename from patches/server/0226-Stop-bees-from-dying-after-stinging.patch rename to patches/unapplied-server/0226-Stop-bees-from-dying-after-stinging.patch diff --git a/patches/server/0227-Give-bee-counts-in-beehives-to-Purpur-clients.patch b/patches/unapplied-server/0227-Give-bee-counts-in-beehives-to-Purpur-clients.patch similarity index 100% rename from patches/server/0227-Give-bee-counts-in-beehives-to-Purpur-clients.patch rename to patches/unapplied-server/0227-Give-bee-counts-in-beehives-to-Purpur-clients.patch diff --git a/patches/server/0228-Configurable-farmland-trample-height.patch b/patches/unapplied-server/0228-Configurable-farmland-trample-height.patch similarity index 100% rename from patches/server/0228-Configurable-farmland-trample-height.patch rename to patches/unapplied-server/0228-Configurable-farmland-trample-height.patch diff --git a/patches/server/0229-Configurable-player-pickup-exp-delay.patch b/patches/unapplied-server/0229-Configurable-player-pickup-exp-delay.patch similarity index 100% rename from patches/server/0229-Configurable-player-pickup-exp-delay.patch rename to patches/unapplied-server/0229-Configurable-player-pickup-exp-delay.patch diff --git a/patches/server/0230-Allow-void-trading.patch b/patches/unapplied-server/0230-Allow-void-trading.patch similarity index 100% rename from patches/server/0230-Allow-void-trading.patch rename to patches/unapplied-server/0230-Allow-void-trading.patch diff --git a/patches/server/0231-Configurable-phantom-size.patch b/patches/unapplied-server/0231-Configurable-phantom-size.patch similarity index 100% rename from patches/server/0231-Configurable-phantom-size.patch rename to patches/unapplied-server/0231-Configurable-phantom-size.patch diff --git a/patches/server/0232-Max-joins-per-second.patch b/patches/unapplied-server/0232-Max-joins-per-second.patch similarity index 100% rename from patches/server/0232-Max-joins-per-second.patch rename to patches/unapplied-server/0232-Max-joins-per-second.patch diff --git a/patches/server/0233-Configurable-minimum-demand-for-trades.patch b/patches/unapplied-server/0233-Configurable-minimum-demand-for-trades.patch similarity index 100% rename from patches/server/0233-Configurable-minimum-demand-for-trades.patch rename to patches/unapplied-server/0233-Configurable-minimum-demand-for-trades.patch diff --git a/patches/server/0234-Lobotomize-stuck-villagers.patch b/patches/unapplied-server/0234-Lobotomize-stuck-villagers.patch similarity index 100% rename from patches/server/0234-Lobotomize-stuck-villagers.patch rename to patches/unapplied-server/0234-Lobotomize-stuck-villagers.patch diff --git a/patches/server/0235-Option-for-villager-display-trade-item.patch b/patches/unapplied-server/0235-Option-for-villager-display-trade-item.patch similarity index 100% rename from patches/server/0235-Option-for-villager-display-trade-item.patch rename to patches/unapplied-server/0235-Option-for-villager-display-trade-item.patch diff --git a/patches/server/0236-MC-238526-Fix-spawner-not-spawning-water-animals-cor.patch b/patches/unapplied-server/0236-MC-238526-Fix-spawner-not-spawning-water-animals-cor.patch similarity index 100% rename from patches/server/0236-MC-238526-Fix-spawner-not-spawning-water-animals-cor.patch rename to patches/unapplied-server/0236-MC-238526-Fix-spawner-not-spawning-water-animals-cor.patch diff --git a/patches/server/0237-Config-for-mob-last-hurt-by-player-time.patch b/patches/unapplied-server/0237-Config-for-mob-last-hurt-by-player-time.patch similarity index 100% rename from patches/server/0237-Config-for-mob-last-hurt-by-player-time.patch rename to patches/unapplied-server/0237-Config-for-mob-last-hurt-by-player-time.patch diff --git a/patches/server/0238-Anvil-repair-damage-options.patch b/patches/unapplied-server/0238-Anvil-repair-damage-options.patch similarity index 100% rename from patches/server/0238-Anvil-repair-damage-options.patch rename to patches/unapplied-server/0238-Anvil-repair-damage-options.patch diff --git a/patches/server/0239-Option-to-disable-turtle-egg-trampling-with-feather-.patch b/patches/unapplied-server/0239-Option-to-disable-turtle-egg-trampling-with-feather-.patch similarity index 100% rename from patches/server/0239-Option-to-disable-turtle-egg-trampling-with-feather-.patch rename to patches/unapplied-server/0239-Option-to-disable-turtle-egg-trampling-with-feather-.patch diff --git a/patches/server/0240-Add-toggle-for-enchant-level-clamping.patch b/patches/unapplied-server/0240-Add-toggle-for-enchant-level-clamping.patch similarity index 100% rename from patches/server/0240-Add-toggle-for-enchant-level-clamping.patch rename to patches/unapplied-server/0240-Add-toggle-for-enchant-level-clamping.patch diff --git a/patches/server/0241-Skip-junit-tests-for-purpur-commands.patch b/patches/unapplied-server/0241-Skip-junit-tests-for-purpur-commands.patch similarity index 100% rename from patches/server/0241-Skip-junit-tests-for-purpur-commands.patch rename to patches/unapplied-server/0241-Skip-junit-tests-for-purpur-commands.patch diff --git a/patches/server/0242-Implement-configurable-search-radius-for-villagers-t.patch b/patches/unapplied-server/0242-Implement-configurable-search-radius-for-villagers-t.patch similarity index 100% rename from patches/server/0242-Implement-configurable-search-radius-for-villagers-t.patch rename to patches/unapplied-server/0242-Implement-configurable-search-radius-for-villagers-t.patch diff --git a/patches/server/0243-Stonecutter-damage.patch b/patches/unapplied-server/0243-Stonecutter-damage.patch similarity index 100% rename from patches/server/0243-Stonecutter-damage.patch rename to patches/unapplied-server/0243-Stonecutter-damage.patch diff --git a/patches/server/0244-Configurable-damage-settings-for-magma-blocks.patch b/patches/unapplied-server/0244-Configurable-damage-settings-for-magma-blocks.patch similarity index 100% rename from patches/server/0244-Configurable-damage-settings-for-magma-blocks.patch rename to patches/unapplied-server/0244-Configurable-damage-settings-for-magma-blocks.patch diff --git a/patches/server/0245-Add-config-for-snow-on-blue-ice.patch b/patches/unapplied-server/0245-Add-config-for-snow-on-blue-ice.patch similarity index 100% rename from patches/server/0245-Add-config-for-snow-on-blue-ice.patch rename to patches/unapplied-server/0245-Add-config-for-snow-on-blue-ice.patch diff --git a/patches/server/0246-Skeletons-eat-wither-roses.patch b/patches/unapplied-server/0246-Skeletons-eat-wither-roses.patch similarity index 100% rename from patches/server/0246-Skeletons-eat-wither-roses.patch rename to patches/unapplied-server/0246-Skeletons-eat-wither-roses.patch diff --git a/patches/server/0247-Enchantment-Table-Persists-Lapis.patch b/patches/unapplied-server/0247-Enchantment-Table-Persists-Lapis.patch similarity index 100% rename from patches/server/0247-Enchantment-Table-Persists-Lapis.patch rename to patches/unapplied-server/0247-Enchantment-Table-Persists-Lapis.patch diff --git a/patches/server/0248-Spark-Profiler.patch b/patches/unapplied-server/0248-Spark-Profiler.patch similarity index 100% rename from patches/server/0248-Spark-Profiler.patch rename to patches/unapplied-server/0248-Spark-Profiler.patch diff --git a/patches/server/0249-Option-to-disable-kick-for-out-of-order-chat.patch b/patches/unapplied-server/0249-Option-to-disable-kick-for-out-of-order-chat.patch similarity index 100% rename from patches/server/0249-Option-to-disable-kick-for-out-of-order-chat.patch rename to patches/unapplied-server/0249-Option-to-disable-kick-for-out-of-order-chat.patch diff --git a/patches/server/0250-Config-for-sculk-shrieker-can_summon-state.patch b/patches/unapplied-server/0250-Config-for-sculk-shrieker-can_summon-state.patch similarity index 100% rename from patches/server/0250-Config-for-sculk-shrieker-can_summon-state.patch rename to patches/unapplied-server/0250-Config-for-sculk-shrieker-can_summon-state.patch diff --git a/patches/server/0251-Config-to-not-let-coral-die.patch b/patches/unapplied-server/0251-Config-to-not-let-coral-die.patch similarity index 100% rename from patches/server/0251-Config-to-not-let-coral-die.patch rename to patches/unapplied-server/0251-Config-to-not-let-coral-die.patch diff --git a/patches/server/0252-Add-local-difficulty-api.patch b/patches/unapplied-server/0252-Add-local-difficulty-api.patch similarity index 100% rename from patches/server/0252-Add-local-difficulty-api.patch rename to patches/unapplied-server/0252-Add-local-difficulty-api.patch diff --git a/patches/server/0253-Add-toggle-for-RNG-manipulation.patch b/patches/unapplied-server/0253-Add-toggle-for-RNG-manipulation.patch similarity index 100% rename from patches/server/0253-Add-toggle-for-RNG-manipulation.patch rename to patches/unapplied-server/0253-Add-toggle-for-RNG-manipulation.patch diff --git a/patches/server/0254-Remove-Timings.patch b/patches/unapplied-server/0254-Remove-Timings.patch similarity index 100% rename from patches/server/0254-Remove-Timings.patch rename to patches/unapplied-server/0254-Remove-Timings.patch diff --git a/patches/server/0255-Remove-Mojang-Profiler.patch b/patches/unapplied-server/0255-Remove-Mojang-Profiler.patch similarity index 100% rename from patches/server/0255-Remove-Mojang-Profiler.patch rename to patches/unapplied-server/0255-Remove-Mojang-Profiler.patch diff --git a/patches/server/0256-Add-more-logger-output-for-invalid-movement-kicks.patch b/patches/unapplied-server/0256-Add-more-logger-output-for-invalid-movement-kicks.patch similarity index 100% rename from patches/server/0256-Add-more-logger-output-for-invalid-movement-kicks.patch rename to patches/unapplied-server/0256-Add-more-logger-output-for-invalid-movement-kicks.patch diff --git a/patches/server/0257-Add-Bee-API.patch b/patches/unapplied-server/0257-Add-Bee-API.patch similarity index 100% rename from patches/server/0257-Add-Bee-API.patch rename to patches/unapplied-server/0257-Add-Bee-API.patch diff --git a/patches/server/0258-Debug-Marker-API.patch b/patches/unapplied-server/0258-Debug-Marker-API.patch similarity index 100% rename from patches/server/0258-Debug-Marker-API.patch rename to patches/unapplied-server/0258-Debug-Marker-API.patch diff --git a/patches/server/0259-mob-spawning-option-to-ignore-creative-players.patch b/patches/unapplied-server/0259-mob-spawning-option-to-ignore-creative-players.patch similarity index 100% rename from patches/server/0259-mob-spawning-option-to-ignore-creative-players.patch rename to patches/unapplied-server/0259-mob-spawning-option-to-ignore-creative-players.patch diff --git a/patches/server/0260-Add-skeleton-bow-accuracy-option.patch b/patches/unapplied-server/0260-Add-skeleton-bow-accuracy-option.patch similarity index 100% rename from patches/server/0260-Add-skeleton-bow-accuracy-option.patch rename to patches/unapplied-server/0260-Add-skeleton-bow-accuracy-option.patch diff --git a/patches/server/0261-Add-death-screen-API.patch b/patches/unapplied-server/0261-Add-death-screen-API.patch similarity index 100% rename from patches/server/0261-Add-death-screen-API.patch rename to patches/unapplied-server/0261-Add-death-screen-API.patch diff --git a/patches/server/0262-Implement-ram-and-rambar-commands.patch b/patches/unapplied-server/0262-Implement-ram-and-rambar-commands.patch similarity index 100% rename from patches/server/0262-Implement-ram-and-rambar-commands.patch rename to patches/unapplied-server/0262-Implement-ram-and-rambar-commands.patch diff --git a/patches/server/0263-Add-an-option-to-fix-MC-3304-projectile-looting.patch b/patches/unapplied-server/0263-Add-an-option-to-fix-MC-3304-projectile-looting.patch similarity index 100% rename from patches/server/0263-Add-an-option-to-fix-MC-3304-projectile-looting.patch rename to patches/unapplied-server/0263-Add-an-option-to-fix-MC-3304-projectile-looting.patch diff --git a/patches/server/0264-Configurable-block-blast-resistance.patch b/patches/unapplied-server/0264-Configurable-block-blast-resistance.patch similarity index 100% rename from patches/server/0264-Configurable-block-blast-resistance.patch rename to patches/unapplied-server/0264-Configurable-block-blast-resistance.patch diff --git a/patches/server/0265-Configurable-block-fall-damage-modifiers.patch b/patches/unapplied-server/0265-Configurable-block-fall-damage-modifiers.patch similarity index 100% rename from patches/server/0265-Configurable-block-fall-damage-modifiers.patch rename to patches/unapplied-server/0265-Configurable-block-fall-damage-modifiers.patch diff --git a/patches/server/0266-Language-API.patch b/patches/unapplied-server/0266-Language-API.patch similarity index 100% rename from patches/server/0266-Language-API.patch rename to patches/unapplied-server/0266-Language-API.patch diff --git a/patches/server/0267-Milk-Keeps-Beneficial-Effects.patch b/patches/unapplied-server/0267-Milk-Keeps-Beneficial-Effects.patch similarity index 100% rename from patches/server/0267-Milk-Keeps-Beneficial-Effects.patch rename to patches/unapplied-server/0267-Milk-Keeps-Beneficial-Effects.patch diff --git a/patches/server/0268-MC-121706-Fix-mobs-not-looking-up-and-down-when-stra.patch b/patches/unapplied-server/0268-MC-121706-Fix-mobs-not-looking-up-and-down-when-stra.patch similarity index 100% rename from patches/server/0268-MC-121706-Fix-mobs-not-looking-up-and-down-when-stra.patch rename to patches/unapplied-server/0268-MC-121706-Fix-mobs-not-looking-up-and-down-when-stra.patch diff --git a/patches/server/0269-Add-log-suppression-for-LibraryLoader.patch b/patches/unapplied-server/0269-Add-log-suppression-for-LibraryLoader.patch similarity index 100% rename from patches/server/0269-Add-log-suppression-for-LibraryLoader.patch rename to patches/unapplied-server/0269-Add-log-suppression-for-LibraryLoader.patch diff --git a/patches/server/0270-Add-option-to-allow-creeper-to-encircle-target-when-.patch b/patches/unapplied-server/0270-Add-option-to-allow-creeper-to-encircle-target-when-.patch similarity index 100% rename from patches/server/0270-Add-option-to-allow-creeper-to-encircle-target-when-.patch rename to patches/unapplied-server/0270-Add-option-to-allow-creeper-to-encircle-target-when-.patch diff --git a/patches/server/0271-Fire-Immunity-API.patch b/patches/unapplied-server/0271-Fire-Immunity-API.patch similarity index 100% rename from patches/server/0271-Fire-Immunity-API.patch rename to patches/unapplied-server/0271-Fire-Immunity-API.patch diff --git a/patches/server/0272-Add-option-to-teleport-to-spawn-on-nether-ceiling-da.patch b/patches/unapplied-server/0272-Add-option-to-teleport-to-spawn-on-nether-ceiling-da.patch similarity index 100% rename from patches/server/0272-Add-option-to-teleport-to-spawn-on-nether-ceiling-da.patch rename to patches/unapplied-server/0272-Add-option-to-teleport-to-spawn-on-nether-ceiling-da.patch diff --git a/patches/server/0273-Added-got-ram-event.patch b/patches/unapplied-server/0273-Added-got-ram-event.patch similarity index 100% rename from patches/server/0273-Added-got-ram-event.patch rename to patches/unapplied-server/0273-Added-got-ram-event.patch diff --git a/patches/server/0274-Log-skipped-entity-s-position.patch b/patches/unapplied-server/0274-Log-skipped-entity-s-position.patch similarity index 100% rename from patches/server/0274-Log-skipped-entity-s-position.patch rename to patches/unapplied-server/0274-Log-skipped-entity-s-position.patch diff --git a/patches/server/0275-End-Crystal-Cramming.patch b/patches/unapplied-server/0275-End-Crystal-Cramming.patch similarity index 100% rename from patches/server/0275-End-Crystal-Cramming.patch rename to patches/unapplied-server/0275-End-Crystal-Cramming.patch diff --git a/patches/server/0276-Option-to-allow-beacon-effects-when-covered-by-tinte.patch b/patches/unapplied-server/0276-Option-to-allow-beacon-effects-when-covered-by-tinte.patch similarity index 100% rename from patches/server/0276-Option-to-allow-beacon-effects-when-covered-by-tinte.patch rename to patches/unapplied-server/0276-Option-to-allow-beacon-effects-when-covered-by-tinte.patch diff --git a/patches/server/0277-Add-attribute-clamping-and-armor-limit-config.patch b/patches/unapplied-server/0277-Add-attribute-clamping-and-armor-limit-config.patch similarity index 100% rename from patches/server/0277-Add-attribute-clamping-and-armor-limit-config.patch rename to patches/unapplied-server/0277-Add-attribute-clamping-and-armor-limit-config.patch diff --git a/patches/server/0278-Config-to-remove-explosion-radius-clamp.patch b/patches/unapplied-server/0278-Config-to-remove-explosion-radius-clamp.patch similarity index 100% rename from patches/server/0278-Config-to-remove-explosion-radius-clamp.patch rename to patches/unapplied-server/0278-Config-to-remove-explosion-radius-clamp.patch diff --git a/patches/server/0279-bonemealable-sugarcane-cactus-and-netherwart.patch b/patches/unapplied-server/0279-bonemealable-sugarcane-cactus-and-netherwart.patch similarity index 100% rename from patches/server/0279-bonemealable-sugarcane-cactus-and-netherwart.patch rename to patches/unapplied-server/0279-bonemealable-sugarcane-cactus-and-netherwart.patch diff --git a/patches/server/0280-Add-PreExplodeEvents.patch b/patches/unapplied-server/0280-Add-PreExplodeEvents.patch similarity index 100% rename from patches/server/0280-Add-PreExplodeEvents.patch rename to patches/unapplied-server/0280-Add-PreExplodeEvents.patch diff --git a/patches/server/0281-Improve-output-of-plugins-command.patch b/patches/unapplied-server/0281-Improve-output-of-plugins-command.patch similarity index 100% rename from patches/server/0281-Improve-output-of-plugins-command.patch rename to patches/unapplied-server/0281-Improve-output-of-plugins-command.patch diff --git a/patches/server/0282-Add-mending-multiplier.patch b/patches/unapplied-server/0282-Add-mending-multiplier.patch similarity index 100% rename from patches/server/0282-Add-mending-multiplier.patch rename to patches/unapplied-server/0282-Add-mending-multiplier.patch diff --git a/patches/server/0283-Make-GUI-Great-Again.patch b/patches/unapplied-server/0283-Make-GUI-Great-Again.patch similarity index 100% rename from patches/server/0283-Make-GUI-Great-Again.patch rename to patches/unapplied-server/0283-Make-GUI-Great-Again.patch diff --git a/patches/server/0284-Stored-Bee-API.patch b/patches/unapplied-server/0284-Stored-Bee-API.patch similarity index 100% rename from patches/server/0284-Stored-Bee-API.patch rename to patches/unapplied-server/0284-Stored-Bee-API.patch diff --git a/patches/server/0285-Shears-can-defuse-TNT.patch b/patches/unapplied-server/0285-Shears-can-defuse-TNT.patch similarity index 100% rename from patches/server/0285-Shears-can-defuse-TNT.patch rename to patches/unapplied-server/0285-Shears-can-defuse-TNT.patch diff --git a/patches/server/0286-Explorer-Map-API.patch b/patches/unapplied-server/0286-Explorer-Map-API.patch similarity index 100% rename from patches/server/0286-Explorer-Map-API.patch rename to patches/unapplied-server/0286-Explorer-Map-API.patch diff --git a/patches/server/0287-Option-Ocelot-Spawn-Under-Sea-Level.patch b/patches/unapplied-server/0287-Option-Ocelot-Spawn-Under-Sea-Level.patch similarity index 100% rename from patches/server/0287-Option-Ocelot-Spawn-Under-Sea-Level.patch rename to patches/unapplied-server/0287-Option-Ocelot-Spawn-Under-Sea-Level.patch diff --git a/patches/server/0288-add-an-option-for-piglins-to-ignore-gold-trimmed-arm.patch b/patches/unapplied-server/0288-add-an-option-for-piglins-to-ignore-gold-trimmed-arm.patch similarity index 100% rename from patches/server/0288-add-an-option-for-piglins-to-ignore-gold-trimmed-arm.patch rename to patches/unapplied-server/0288-add-an-option-for-piglins-to-ignore-gold-trimmed-arm.patch diff --git a/patches/server/0289-Add-option-for-always-showing-item-in-player-death-m.patch b/patches/unapplied-server/0289-Add-option-for-always-showing-item-in-player-death-m.patch similarity index 100% rename from patches/server/0289-Add-option-for-always-showing-item-in-player-death-m.patch rename to patches/unapplied-server/0289-Add-option-for-always-showing-item-in-player-death-m.patch diff --git a/patches/server/0290-place-end-crystal-on-any-block.patch b/patches/unapplied-server/0290-place-end-crystal-on-any-block.patch similarity index 100% rename from patches/server/0290-place-end-crystal-on-any-block.patch rename to patches/unapplied-server/0290-place-end-crystal-on-any-block.patch diff --git a/patches/server/0291-Add-option-to-disable-the-copper-oxidation-proximity.patch b/patches/unapplied-server/0291-Add-option-to-disable-the-copper-oxidation-proximity.patch similarity index 100% rename from patches/server/0291-Add-option-to-disable-the-copper-oxidation-proximity.patch rename to patches/unapplied-server/0291-Add-option-to-disable-the-copper-oxidation-proximity.patch diff --git a/patches/server/0292-register-minecraft-debug-commands.patch b/patches/unapplied-server/0292-register-minecraft-debug-commands.patch similarity index 100% rename from patches/server/0292-register-minecraft-debug-commands.patch rename to patches/unapplied-server/0292-register-minecraft-debug-commands.patch diff --git a/patches/server/0293-Configurable-villager-search-radius.patch b/patches/unapplied-server/0293-Configurable-villager-search-radius.patch similarity index 100% rename from patches/server/0293-Configurable-villager-search-radius.patch rename to patches/unapplied-server/0293-Configurable-villager-search-radius.patch diff --git a/patches/server/0294-option-to-make-ravagers-afraid-of-rabbits.patch b/patches/unapplied-server/0294-option-to-make-ravagers-afraid-of-rabbits.patch similarity index 100% rename from patches/server/0294-option-to-make-ravagers-afraid-of-rabbits.patch rename to patches/unapplied-server/0294-option-to-make-ravagers-afraid-of-rabbits.patch diff --git a/patches/server/0295-config-for-startup-commands.patch b/patches/unapplied-server/0295-config-for-startup-commands.patch similarity index 100% rename from patches/server/0295-config-for-startup-commands.patch rename to patches/unapplied-server/0295-config-for-startup-commands.patch diff --git a/patches/server/0296-Config-to-reverse-bubble-column-flow.patch b/patches/unapplied-server/0296-Config-to-reverse-bubble-column-flow.patch similarity index 100% rename from patches/server/0296-Config-to-reverse-bubble-column-flow.patch rename to patches/unapplied-server/0296-Config-to-reverse-bubble-column-flow.patch diff --git a/patches/server/0297-Adopt-MaterialRerouting.patch b/patches/unapplied-server/0297-Adopt-MaterialRerouting.patch similarity index 100% rename from patches/server/0297-Adopt-MaterialRerouting.patch rename to patches/unapplied-server/0297-Adopt-MaterialRerouting.patch From 1544081d588b972fd28d8e83f4524b9a8886fdff Mon Sep 17 00:00:00 2001 From: granny Date: Fri, 14 Jun 2024 13:13:38 -0700 Subject: [PATCH 047/588] Updated Upstream (Paper) Upstream has released updates that appear to apply and compile correctly Paper Changes: PaperMC/Paper@7fbb827 Finish API patches PaperMC/Paper@8a37f93 62 PaperMC/Paper@2055809 117 PaperMC/Paper@0b75522 194 PaperMC/Paper@ec05cb8 279 PaperMC/Paper@0bc9aee 385 PaperMC/Paper@27e29cc 487/1053 PaperMC/Paper@083bd9e 531/1053 PaperMC/Paper@ed2ea45 538 PaperMC/Paper@ba163e1 585/1053 PaperMC/Paper@8731266 650/1053 PaperMC/Paper@52b49fb 788/1053 PaperMC/Paper@33b36cd update some patches PaperMC/Paper@14c0336 922 PaperMC/Paper@a399f23 956 PaperMC/Paper@4140de2 960 PaperMC/Paper@6d4e235 988 PaperMC/Paper@6a34750 Move unapplied patches to the back PaperMC/Paper@3c04f9f Fix a few compile errors PaperMC/Paper@0d3ce2d Fix more compile issues PaperMC/Paper@a308c7c Fix more compile issues PaperMC/Paper@69d1d0a Pretend to fix compile errors PaperMC/Paper@547f09d Some work on the ItemMend events PaperMC/Paper@184a943 Adopt previous commit changes in API PaperMC/Paper@5442bff Make it compile PaperMC/Paper@038f8d9 Fixup and deprecate player profiles in ping event PaperMC/Paper@66f7b67 Fix body equipmentslot and effect enum PaperMC/Paper@38b3182 Updated Upstream (Bukkit/CraftBukkit) PaperMC/Paper@df633e5 DataConverter 1.21 PaperMC/Paper@f569389 Update ConcurrentUtil --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 9df1dfa36..e13d4b3ca 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ group = org.purpurmc.purpur version = 1.21-R0.1-SNAPSHOT mcVersion = 1.21 -paperCommit = 79e2cb620ef03539390d97940824b38b707918f5 +paperCommit = f5693896c5d0a3116efedcc730896be2c727038d org.gradle.caching = true org.gradle.parallel = true From e2b5e14236dcf608c736525939f8aed1bdc744c5 Mon Sep 17 00:00:00 2001 From: granny Date: Fri, 14 Jun 2024 13:17:10 -0700 Subject: [PATCH 048/588] apply API patches --- patches/{unapplied-api => api}/0001-Rebrand.patch | 0 .../0002-Purpur-config-files.patch | 4 ++-- .../0003-Build-System-Changes.patch | 0 .../0004-Purpur-client-support.patch | 4 ++-- .../0005-Default-permissions.patch | 0 patches/{unapplied-api => api}/0006-Ridables.patch | 0 .../0007-Allow-inventory-resizing.patch | 4 ++-- patches/{unapplied-api => api}/0008-Llama-API.patch | 0 patches/{unapplied-api => api}/0009-AFK-API.patch | 4 ++-- .../0010-Bring-back-server-name.patch | 8 ++++---- .../0011-ExecuteCommandEvent.patch | 0 .../0012-Lagging-threshold.patch | 8 ++++---- .../0013-PlayerSetSpawnerTypeWithEggEvent.patch | 0 patches/{unapplied-api => api}/0014-Anvil-API.patch | 0 .../0015-ItemStack-convenience-methods.patch | 8 ++++---- .../0016-LivingEntity-broadcastItemBreak.patch | 2 +- .../0017-ChatColor-conveniences.patch | 0 .../0018-Item-entity-immunities.patch | 0 ...redicate-to-recipe-s-ExactChoice-ingredient.patch | 0 .../{unapplied-api => api}/0020-Rabid-Wolf-API.patch | 0 .../0021-PlayerBookTooLargeEvent.patch | 0 ...Full-netherite-armor-grants-fire-resistance.patch | 0 .../0023-Add-EntityTeleportHinderedEvent.patch | 0 ...d-enchantment-target-for-bows-and-crossbows.patch | 0 .../0025-API-for-any-mob-to-burn-daylight.patch | 2 +- .../0026-Add-back-player-spawned-endermite-API.patch | 0 .../0027-Fix-default-permission-system.patch | 0 .../{unapplied-api => api}/0028-Summoner-API.patch | 0 .../0029-Clean-up-version-command-output.patch | 0 .../0030-Extended-OfflinePlayer-API.patch | 2 +- ...-Added-the-ability-to-add-combustible-items.patch | 8 ++++---- .../{unapplied-api => api}/0032-Grindstone-API.patch | 0 .../0033-Shears-can-have-looting-enchantment.patch | 0 .../0034-Lobotomize-stuck-villagers.patch | 0 .../0035-Add-local-difficulty-api.patch | 0 .../{unapplied-api => api}/0036-Remove-Timings.patch | 0 .../{unapplied-api => api}/0037-Add-Bee-API.patch | 0 .../0038-Debug-Marker-API.patch | 12 ++++++------ .../0039-Add-death-screen-API.patch | 4 ++-- .../{unapplied-api => api}/0040-Language-API.patch | 0 .../0041-Add-log-suppression-for-LibraryLoader.patch | 0 .../0042-Fire-Immunity-API.patch | 0 .../0043-Added-goat-ram-event.patch | 0 .../0044-Add-PreExplodeEvents.patch | 0 .../{unapplied-api => api}/0045-Stored-Bee-API.patch | 0 .../0046-Explorer-Map-API.patch | 0 .../0047-Stonecutter-damage.patch | 2 +- 47 files changed, 36 insertions(+), 36 deletions(-) rename patches/{unapplied-api => api}/0001-Rebrand.patch (100%) rename patches/{unapplied-api => api}/0002-Purpur-config-files.patch (85%) rename patches/{unapplied-api => api}/0003-Build-System-Changes.patch (100%) rename patches/{unapplied-api => api}/0004-Purpur-client-support.patch (82%) rename patches/{unapplied-api => api}/0005-Default-permissions.patch (100%) rename patches/{unapplied-api => api}/0006-Ridables.patch (100%) rename patches/{unapplied-api => api}/0007-Allow-inventory-resizing.patch (83%) rename patches/{unapplied-api => api}/0008-Llama-API.patch (100%) rename patches/{unapplied-api => api}/0009-AFK-API.patch (95%) rename patches/{unapplied-api => api}/0010-Bring-back-server-name.patch (79%) rename patches/{unapplied-api => api}/0011-ExecuteCommandEvent.patch (100%) rename patches/{unapplied-api => api}/0012-Lagging-threshold.patch (79%) rename patches/{unapplied-api => api}/0013-PlayerSetSpawnerTypeWithEggEvent.patch (100%) rename patches/{unapplied-api => api}/0014-Anvil-API.patch (100%) rename patches/{unapplied-api => api}/0015-ItemStack-convenience-methods.patch (98%) rename patches/{unapplied-api => api}/0016-LivingEntity-broadcastItemBreak.patch (90%) rename patches/{unapplied-api => api}/0017-ChatColor-conveniences.patch (100%) rename patches/{unapplied-api => api}/0018-Item-entity-immunities.patch (100%) rename patches/{unapplied-api => api}/0019-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch (100%) rename patches/{unapplied-api => api}/0020-Rabid-Wolf-API.patch (100%) rename patches/{unapplied-api => api}/0021-PlayerBookTooLargeEvent.patch (100%) rename patches/{unapplied-api => api}/0022-Full-netherite-armor-grants-fire-resistance.patch (100%) rename patches/{unapplied-api => api}/0023-Add-EntityTeleportHinderedEvent.patch (100%) rename patches/{unapplied-api => api}/0024-Add-enchantment-target-for-bows-and-crossbows.patch (100%) rename patches/{unapplied-api => api}/0025-API-for-any-mob-to-burn-daylight.patch (94%) rename patches/{unapplied-api => api}/0026-Add-back-player-spawned-endermite-API.patch (100%) rename patches/{unapplied-api => api}/0027-Fix-default-permission-system.patch (100%) rename patches/{unapplied-api => api}/0028-Summoner-API.patch (100%) rename patches/{unapplied-api => api}/0029-Clean-up-version-command-output.patch (100%) rename patches/{unapplied-api => api}/0030-Extended-OfflinePlayer-API.patch (97%) rename patches/{unapplied-api => api}/0031-Added-the-ability-to-add-combustible-items.patch (85%) rename patches/{unapplied-api => api}/0032-Grindstone-API.patch (100%) rename patches/{unapplied-api => api}/0033-Shears-can-have-looting-enchantment.patch (100%) rename patches/{unapplied-api => api}/0034-Lobotomize-stuck-villagers.patch (100%) rename patches/{unapplied-api => api}/0035-Add-local-difficulty-api.patch (100%) rename patches/{unapplied-api => api}/0036-Remove-Timings.patch (100%) rename patches/{unapplied-api => api}/0037-Add-Bee-API.patch (100%) rename patches/{unapplied-api => api}/0038-Debug-Marker-API.patch (97%) rename patches/{unapplied-api => api}/0039-Add-death-screen-API.patch (89%) rename patches/{unapplied-api => api}/0040-Language-API.patch (100%) rename patches/{unapplied-api => api}/0041-Add-log-suppression-for-LibraryLoader.patch (100%) rename patches/{unapplied-api => api}/0042-Fire-Immunity-API.patch (100%) rename patches/{unapplied-api => api}/0043-Added-goat-ram-event.patch (100%) rename patches/{unapplied-api => api}/0044-Add-PreExplodeEvents.patch (100%) rename patches/{unapplied-api => api}/0045-Stored-Bee-API.patch (100%) rename patches/{unapplied-api => api}/0046-Explorer-Map-API.patch (100%) rename patches/{unapplied-api => api}/0047-Stonecutter-damage.patch (90%) diff --git a/patches/unapplied-api/0001-Rebrand.patch b/patches/api/0001-Rebrand.patch similarity index 100% rename from patches/unapplied-api/0001-Rebrand.patch rename to patches/api/0001-Rebrand.patch diff --git a/patches/unapplied-api/0002-Purpur-config-files.patch b/patches/api/0002-Purpur-config-files.patch similarity index 85% rename from patches/unapplied-api/0002-Purpur-config-files.patch rename to patches/api/0002-Purpur-config-files.patch index da3a1e3c3..7bb973e55 100644 --- a/patches/unapplied-api/0002-Purpur-config-files.patch +++ b/patches/api/0002-Purpur-config-files.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Purpur config files diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java -index c8595ffcfcbdd79794d464415287d46acef72b72..607ba7cb902d7053cb570d8f3676ecbadbe56daf 100644 +index bbc4d7d3ca84642828f9a3f788ca26bba900d15b..205b684223cfa4cf0b3938e11926e854509bb7c9 100644 --- a/src/main/java/org/bukkit/Server.java +++ b/src/main/java/org/bukkit/Server.java -@@ -2257,6 +2257,18 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi +@@ -2251,6 +2251,18 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi } // Paper end diff --git a/patches/unapplied-api/0003-Build-System-Changes.patch b/patches/api/0003-Build-System-Changes.patch similarity index 100% rename from patches/unapplied-api/0003-Build-System-Changes.patch rename to patches/api/0003-Build-System-Changes.patch diff --git a/patches/unapplied-api/0004-Purpur-client-support.patch b/patches/api/0004-Purpur-client-support.patch similarity index 82% rename from patches/unapplied-api/0004-Purpur-client-support.patch rename to patches/api/0004-Purpur-client-support.patch index 51b04656d..f284f16d7 100644 --- a/patches/unapplied-api/0004-Purpur-client-support.patch +++ b/patches/api/0004-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 eb34f22e973fe46529eb93f435f5bf7f85091404..813096eee6a09419209baca9139d9aac1593d8ca 100644 +index 7c56182acaf827f4b1a986a61cea8e9960604c98..72680755962efb542cbb3c0aa079af061496b6ff 100644 --- a/src/main/java/org/bukkit/entity/Player.java +++ b/src/main/java/org/bukkit/entity/Player.java -@@ -3854,4 +3854,13 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM +@@ -3859,4 +3859,13 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM @Override Spigot spigot(); // Spigot end diff --git a/patches/unapplied-api/0005-Default-permissions.patch b/patches/api/0005-Default-permissions.patch similarity index 100% rename from patches/unapplied-api/0005-Default-permissions.patch rename to patches/api/0005-Default-permissions.patch diff --git a/patches/unapplied-api/0006-Ridables.patch b/patches/api/0006-Ridables.patch similarity index 100% rename from patches/unapplied-api/0006-Ridables.patch rename to patches/api/0006-Ridables.patch diff --git a/patches/unapplied-api/0007-Allow-inventory-resizing.patch b/patches/api/0007-Allow-inventory-resizing.patch similarity index 83% rename from patches/unapplied-api/0007-Allow-inventory-resizing.patch rename to patches/api/0007-Allow-inventory-resizing.patch index 6b3fad2ac..4b1a9dd6b 100644 --- a/patches/unapplied-api/0007-Allow-inventory-resizing.patch +++ b/patches/api/0007-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 59b375569a75cb1e1f7c610f96078e102ec0d3ed..a3f74891abbdc51dbbddaeb511f2754e0603c904 100644 +index 851e40dc8af6dcb5670785e006b078af7e72fb76..e814e4f9cf12cd7c783981278f110ccf144263b2 100644 --- a/src/main/java/org/bukkit/event/inventory/InventoryType.java +++ b/src/main/java/org/bukkit/event/inventory/InventoryType.java -@@ -166,7 +166,7 @@ public enum InventoryType { +@@ -163,7 +163,7 @@ public enum InventoryType { SMITHING_NEW(4, "Upgrade Gear"), ; diff --git a/patches/unapplied-api/0008-Llama-API.patch b/patches/api/0008-Llama-API.patch similarity index 100% rename from patches/unapplied-api/0008-Llama-API.patch rename to patches/api/0008-Llama-API.patch diff --git a/patches/unapplied-api/0009-AFK-API.patch b/patches/api/0009-AFK-API.patch similarity index 95% rename from patches/unapplied-api/0009-AFK-API.patch rename to patches/api/0009-AFK-API.patch index 5500c83f8..196ff8c31 100644 --- a/patches/unapplied-api/0009-AFK-API.patch +++ b/patches/api/0009-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 813096eee6a09419209baca9139d9aac1593d8ca..a03f473dee39eb160196e2468e4c26c6f8f6ce2a 100644 +index 72680755962efb542cbb3c0aa079af061496b6ff..36d73f14d70c4b1768f3b7dfa235a6a2411e4687 100644 --- a/src/main/java/org/bukkit/entity/Player.java +++ b/src/main/java/org/bukkit/entity/Player.java -@@ -3862,5 +3862,25 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM +@@ -3867,5 +3867,25 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM * @return True if Player uses Purpur Client */ public boolean usesPurpurClient(); diff --git a/patches/unapplied-api/0010-Bring-back-server-name.patch b/patches/api/0010-Bring-back-server-name.patch similarity index 79% rename from patches/unapplied-api/0010-Bring-back-server-name.patch rename to patches/api/0010-Bring-back-server-name.patch index 939ac10be..646286183 100644 --- a/patches/unapplied-api/0010-Bring-back-server-name.patch +++ b/patches/api/0010-Bring-back-server-name.patch @@ -5,10 +5,10 @@ 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 9a219b255b63f10005fc68faacb771dd32f61ac2..203581e1b00241c519f20dac4936d06f95122ea4 100644 +index b9b751ea0d11381e846d5f35f39f285c075c171a..6ee89d60fa560b38cef94d4516fe861f2776bf34 100644 --- a/src/main/java/org/bukkit/Bukkit.java +++ b/src/main/java/org/bukkit/Bukkit.java -@@ -2913,4 +2913,15 @@ public final class Bukkit { +@@ -2907,4 +2907,15 @@ public final class Bukkit { public static Server.Spigot spigot() { return server.spigot(); } @@ -25,10 +25,10 @@ index 9a219b255b63f10005fc68faacb771dd32f61ac2..203581e1b00241c519f20dac4936d06f + // Purpur end } diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java -index bb96d4266f83029eda3e847860302cd9d14e852e..ae752aebf35d0f1a861086c56d30e6c86c43b599 100644 +index 205b684223cfa4cf0b3938e11926e854509bb7c9..6ed3d3108f3124151c863448c01a2d2e6c0ef53d 100644 --- a/src/main/java/org/bukkit/Server.java +++ b/src/main/java/org/bukkit/Server.java -@@ -2558,4 +2558,13 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi +@@ -2552,4 +2552,13 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi */ boolean isOwnedByCurrentRegion(@NotNull Entity entity); // Paper end - Folia region threading API diff --git a/patches/unapplied-api/0011-ExecuteCommandEvent.patch b/patches/api/0011-ExecuteCommandEvent.patch similarity index 100% rename from patches/unapplied-api/0011-ExecuteCommandEvent.patch rename to patches/api/0011-ExecuteCommandEvent.patch diff --git a/patches/unapplied-api/0012-Lagging-threshold.patch b/patches/api/0012-Lagging-threshold.patch similarity index 79% rename from patches/unapplied-api/0012-Lagging-threshold.patch rename to patches/api/0012-Lagging-threshold.patch index ab3349f93..e35b684c7 100644 --- a/patches/unapplied-api/0012-Lagging-threshold.patch +++ b/patches/api/0012-Lagging-threshold.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Lagging threshold diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java -index 203581e1b00241c519f20dac4936d06f95122ea4..49bf78441db33ad0fbc1ca5dfb42859727ea23f8 100644 +index 6ee89d60fa560b38cef94d4516fe861f2776bf34..7c57fe9ce3ee80816a4d2bfe5af6920cebe39c85 100644 --- a/src/main/java/org/bukkit/Bukkit.java +++ b/src/main/java/org/bukkit/Bukkit.java -@@ -2923,5 +2923,14 @@ public final class Bukkit { +@@ -2917,5 +2917,14 @@ public final class Bukkit { public static String getServerName() { return server.getServerName(); } @@ -24,10 +24,10 @@ index 203581e1b00241c519f20dac4936d06f95122ea4..49bf78441db33ad0fbc1ca5dfb428597 // Purpur end } diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java -index ae752aebf35d0f1a861086c56d30e6c86c43b599..86fceb2ad3ba00400f65493d669fd4f4423d45ac 100644 +index 6ed3d3108f3124151c863448c01a2d2e6c0ef53d..1cc70661901834cc4c00e8772ae57743d6007b74 100644 --- a/src/main/java/org/bukkit/Server.java +++ b/src/main/java/org/bukkit/Server.java -@@ -2566,5 +2566,12 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi +@@ -2560,5 +2560,12 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi */ @NotNull String getServerName(); diff --git a/patches/unapplied-api/0013-PlayerSetSpawnerTypeWithEggEvent.patch b/patches/api/0013-PlayerSetSpawnerTypeWithEggEvent.patch similarity index 100% rename from patches/unapplied-api/0013-PlayerSetSpawnerTypeWithEggEvent.patch rename to patches/api/0013-PlayerSetSpawnerTypeWithEggEvent.patch diff --git a/patches/unapplied-api/0014-Anvil-API.patch b/patches/api/0014-Anvil-API.patch similarity index 100% rename from patches/unapplied-api/0014-Anvil-API.patch rename to patches/api/0014-Anvil-API.patch diff --git a/patches/unapplied-api/0015-ItemStack-convenience-methods.patch b/patches/api/0015-ItemStack-convenience-methods.patch similarity index 98% rename from patches/unapplied-api/0015-ItemStack-convenience-methods.patch rename to patches/api/0015-ItemStack-convenience-methods.patch index b61a1dc52..0d3405100 100644 --- a/patches/unapplied-api/0015-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 762216a117145676d3df2b74036799b024461fb7..54c080d650f807b05e5d8347f78e2bc243791172 100644 +index 54704da43cf9c429f3914f0580246dde99aa93c0..e1a677cfde05aba487a09e34e170fea61a125e7d 100644 --- a/src/main/java/org/bukkit/Material.java +++ b/src/main/java/org/bukkit/Material.java -@@ -5764,4 +5764,40 @@ public enum Material implements Keyed, Translatable, net.kyori.adventure.transla +@@ -5622,4 +5622,40 @@ public enum Material implements Keyed, Translatable, net.kyori.adventure.transla } return Registry.BLOCK.get(material.key); } @@ -50,7 +50,7 @@ index 762216a117145676d3df2b74036799b024461fb7..54c080d650f807b05e5d8347f78e2bc2 + // Purpur end } diff --git a/src/main/java/org/bukkit/inventory/ItemStack.java b/src/main/java/org/bukkit/inventory/ItemStack.java -index 40cde68c7b73a0a92e2a96667a90138d67ce66ff..fee2469bdedff0e55ef4dcda410cac35c6319258 100644 +index 7f5633e7689b82b937d5b985c3e6ae15dc94a20f..e77842896654088cedc19822a99361778336057a 100644 --- a/src/main/java/org/bukkit/inventory/ItemStack.java +++ b/src/main/java/org/bukkit/inventory/ItemStack.java @@ -19,6 +19,17 @@ import org.bukkit.inventory.meta.ItemMeta; @@ -71,7 +71,7 @@ index 40cde68c7b73a0a92e2a96667a90138d67ce66ff..fee2469bdedff0e55ef4dcda410cac35 /** * Represents a stack of items. -@@ -1081,4 +1092,565 @@ public class ItemStack implements Cloneable, ConfigurationSerializable, Translat +@@ -1089,4 +1100,565 @@ public class ItemStack implements Cloneable, ConfigurationSerializable, Translat return Bukkit.getUnsafe().computeTooltipLines(this, tooltipContext, player); } // Paper end - expose itemstack tooltip lines diff --git a/patches/unapplied-api/0016-LivingEntity-broadcastItemBreak.patch b/patches/api/0016-LivingEntity-broadcastItemBreak.patch similarity index 90% rename from patches/unapplied-api/0016-LivingEntity-broadcastItemBreak.patch rename to patches/api/0016-LivingEntity-broadcastItemBreak.patch index 439fc7df5..7157d3d5f 100644 --- a/patches/unapplied-api/0016-LivingEntity-broadcastItemBreak.patch +++ b/patches/api/0016-LivingEntity-broadcastItemBreak.patch @@ -5,7 +5,7 @@ Subject: [PATCH] LivingEntity#broadcastItemBreak diff --git a/src/main/java/org/bukkit/entity/LivingEntity.java b/src/main/java/org/bukkit/entity/LivingEntity.java -index b777e530122549455dcce6fac8d4a151c1c0af42..aba9952b2256b058eb413ce93f3305c861a200db 100644 +index 5c29956c6db53440322330ff723c7087193641f1..e1079c5c4be99e75a646c090189678dd131f210e 100644 --- a/src/main/java/org/bukkit/entity/LivingEntity.java +++ b/src/main/java/org/bukkit/entity/LivingEntity.java @@ -1447,4 +1447,13 @@ public interface LivingEntity extends Attributable, Damageable, ProjectileSource diff --git a/patches/unapplied-api/0017-ChatColor-conveniences.patch b/patches/api/0017-ChatColor-conveniences.patch similarity index 100% rename from patches/unapplied-api/0017-ChatColor-conveniences.patch rename to patches/api/0017-ChatColor-conveniences.patch diff --git a/patches/unapplied-api/0018-Item-entity-immunities.patch b/patches/api/0018-Item-entity-immunities.patch similarity index 100% rename from patches/unapplied-api/0018-Item-entity-immunities.patch rename to patches/api/0018-Item-entity-immunities.patch diff --git a/patches/unapplied-api/0019-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch b/patches/api/0019-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch similarity index 100% rename from patches/unapplied-api/0019-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch rename to patches/api/0019-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch diff --git a/patches/unapplied-api/0020-Rabid-Wolf-API.patch b/patches/api/0020-Rabid-Wolf-API.patch similarity index 100% rename from patches/unapplied-api/0020-Rabid-Wolf-API.patch rename to patches/api/0020-Rabid-Wolf-API.patch diff --git a/patches/unapplied-api/0021-PlayerBookTooLargeEvent.patch b/patches/api/0021-PlayerBookTooLargeEvent.patch similarity index 100% rename from patches/unapplied-api/0021-PlayerBookTooLargeEvent.patch rename to patches/api/0021-PlayerBookTooLargeEvent.patch diff --git a/patches/unapplied-api/0022-Full-netherite-armor-grants-fire-resistance.patch b/patches/api/0022-Full-netherite-armor-grants-fire-resistance.patch similarity index 100% rename from patches/unapplied-api/0022-Full-netherite-armor-grants-fire-resistance.patch rename to patches/api/0022-Full-netherite-armor-grants-fire-resistance.patch diff --git a/patches/unapplied-api/0023-Add-EntityTeleportHinderedEvent.patch b/patches/api/0023-Add-EntityTeleportHinderedEvent.patch similarity index 100% rename from patches/unapplied-api/0023-Add-EntityTeleportHinderedEvent.patch rename to patches/api/0023-Add-EntityTeleportHinderedEvent.patch diff --git a/patches/unapplied-api/0024-Add-enchantment-target-for-bows-and-crossbows.patch b/patches/api/0024-Add-enchantment-target-for-bows-and-crossbows.patch similarity index 100% rename from patches/unapplied-api/0024-Add-enchantment-target-for-bows-and-crossbows.patch rename to patches/api/0024-Add-enchantment-target-for-bows-and-crossbows.patch diff --git a/patches/unapplied-api/0025-API-for-any-mob-to-burn-daylight.patch b/patches/api/0025-API-for-any-mob-to-burn-daylight.patch similarity index 94% rename from patches/unapplied-api/0025-API-for-any-mob-to-burn-daylight.patch rename to patches/api/0025-API-for-any-mob-to-burn-daylight.patch index fdb5da886..7e51c8eea 100644 --- a/patches/unapplied-api/0025-API-for-any-mob-to-burn-daylight.patch +++ b/patches/api/0025-API-for-any-mob-to-burn-daylight.patch @@ -23,7 +23,7 @@ index 514611cf71cafc8e7e07ef901c2ccad03cd5f31b..8c9c4183785a47b64f084f4b8cdac53d // Purpur end } diff --git a/src/main/java/org/bukkit/entity/LivingEntity.java b/src/main/java/org/bukkit/entity/LivingEntity.java -index aba9952b2256b058eb413ce93f3305c861a200db..61a046584acf48693489ff551a0dd4c4b16af9ff 100644 +index e1079c5c4be99e75a646c090189678dd131f210e..544b1d8aa5665fd2567605014adee6222d2cb312 100644 --- a/src/main/java/org/bukkit/entity/LivingEntity.java +++ b/src/main/java/org/bukkit/entity/LivingEntity.java @@ -1455,5 +1455,19 @@ public interface LivingEntity extends Attributable, Damageable, ProjectileSource diff --git a/patches/unapplied-api/0026-Add-back-player-spawned-endermite-API.patch b/patches/api/0026-Add-back-player-spawned-endermite-API.patch similarity index 100% rename from patches/unapplied-api/0026-Add-back-player-spawned-endermite-API.patch rename to patches/api/0026-Add-back-player-spawned-endermite-API.patch diff --git a/patches/unapplied-api/0027-Fix-default-permission-system.patch b/patches/api/0027-Fix-default-permission-system.patch similarity index 100% rename from patches/unapplied-api/0027-Fix-default-permission-system.patch rename to patches/api/0027-Fix-default-permission-system.patch diff --git a/patches/unapplied-api/0028-Summoner-API.patch b/patches/api/0028-Summoner-API.patch similarity index 100% rename from patches/unapplied-api/0028-Summoner-API.patch rename to patches/api/0028-Summoner-API.patch diff --git a/patches/unapplied-api/0029-Clean-up-version-command-output.patch b/patches/api/0029-Clean-up-version-command-output.patch similarity index 100% rename from patches/unapplied-api/0029-Clean-up-version-command-output.patch rename to patches/api/0029-Clean-up-version-command-output.patch diff --git a/patches/unapplied-api/0030-Extended-OfflinePlayer-API.patch b/patches/api/0030-Extended-OfflinePlayer-API.patch similarity index 97% rename from patches/unapplied-api/0030-Extended-OfflinePlayer-API.patch rename to patches/api/0030-Extended-OfflinePlayer-API.patch index af97d3dd0..583ed5e63 100644 --- a/patches/unapplied-api/0030-Extended-OfflinePlayer-API.patch +++ b/patches/api/0030-Extended-OfflinePlayer-API.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Extended OfflinePlayer API diff --git a/src/main/java/org/bukkit/OfflinePlayer.java b/src/main/java/org/bukkit/OfflinePlayer.java -index 30298a629b39bd43ce14b414fc697b2dfcbea89c..ce00af9121de7a910aaea4e0685a06d4cf31b4e3 100644 +index 3993fecec5b4c2bbd77e175a168afcad571ce4d1..d0206c9c2f423a9b77237d9a005b9ee139dae70f 100644 --- a/src/main/java/org/bukkit/OfflinePlayer.java +++ b/src/main/java/org/bukkit/OfflinePlayer.java @@ -557,4 +557,106 @@ public interface OfflinePlayer extends ServerOperator, AnimalTamer, Configuratio diff --git a/patches/unapplied-api/0031-Added-the-ability-to-add-combustible-items.patch b/patches/api/0031-Added-the-ability-to-add-combustible-items.patch similarity index 85% rename from patches/unapplied-api/0031-Added-the-ability-to-add-combustible-items.patch rename to patches/api/0031-Added-the-ability-to-add-combustible-items.patch index 617e78ecc..ccff23472 100644 --- a/patches/unapplied-api/0031-Added-the-ability-to-add-combustible-items.patch +++ b/patches/api/0031-Added-the-ability-to-add-combustible-items.patch @@ -5,10 +5,10 @@ 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 49bf78441db33ad0fbc1ca5dfb42859727ea23f8..0b298161d8b94d655113328ebc0cd19a65619c72 100644 +index 7c57fe9ce3ee80816a4d2bfe5af6920cebe39c85..11c99892e9537e4e84b598ee082cef1afe56f33a 100644 --- a/src/main/java/org/bukkit/Bukkit.java +++ b/src/main/java/org/bukkit/Bukkit.java -@@ -2932,5 +2932,24 @@ public final class Bukkit { +@@ -2926,5 +2926,24 @@ public final class Bukkit { public static boolean isLagging() { return server.isLagging(); } @@ -34,10 +34,10 @@ index 49bf78441db33ad0fbc1ca5dfb42859727ea23f8..0b298161d8b94d655113328ebc0cd19a // Purpur end } diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java -index 86fceb2ad3ba00400f65493d669fd4f4423d45ac..cecf7b49e3858359ae7eaa4318180d7f11728a7a 100644 +index 1cc70661901834cc4c00e8772ae57743d6007b74..cb20702273cfb21dbd00f93138c166f018d75971 100644 --- a/src/main/java/org/bukkit/Server.java +++ b/src/main/java/org/bukkit/Server.java -@@ -2573,5 +2573,20 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi +@@ -2567,5 +2567,20 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi * @return True if lagging */ boolean isLagging(); diff --git a/patches/unapplied-api/0032-Grindstone-API.patch b/patches/api/0032-Grindstone-API.patch similarity index 100% rename from patches/unapplied-api/0032-Grindstone-API.patch rename to patches/api/0032-Grindstone-API.patch diff --git a/patches/unapplied-api/0033-Shears-can-have-looting-enchantment.patch b/patches/api/0033-Shears-can-have-looting-enchantment.patch similarity index 100% rename from patches/unapplied-api/0033-Shears-can-have-looting-enchantment.patch rename to patches/api/0033-Shears-can-have-looting-enchantment.patch diff --git a/patches/unapplied-api/0034-Lobotomize-stuck-villagers.patch b/patches/api/0034-Lobotomize-stuck-villagers.patch similarity index 100% rename from patches/unapplied-api/0034-Lobotomize-stuck-villagers.patch rename to patches/api/0034-Lobotomize-stuck-villagers.patch diff --git a/patches/unapplied-api/0035-Add-local-difficulty-api.patch b/patches/api/0035-Add-local-difficulty-api.patch similarity index 100% rename from patches/unapplied-api/0035-Add-local-difficulty-api.patch rename to patches/api/0035-Add-local-difficulty-api.patch diff --git a/patches/unapplied-api/0036-Remove-Timings.patch b/patches/api/0036-Remove-Timings.patch similarity index 100% rename from patches/unapplied-api/0036-Remove-Timings.patch rename to patches/api/0036-Remove-Timings.patch diff --git a/patches/unapplied-api/0037-Add-Bee-API.patch b/patches/api/0037-Add-Bee-API.patch similarity index 100% rename from patches/unapplied-api/0037-Add-Bee-API.patch rename to patches/api/0037-Add-Bee-API.patch diff --git a/patches/unapplied-api/0038-Debug-Marker-API.patch b/patches/api/0038-Debug-Marker-API.patch similarity index 97% rename from patches/unapplied-api/0038-Debug-Marker-API.patch rename to patches/api/0038-Debug-Marker-API.patch index 13c232987..d8134fd7b 100644 --- a/patches/unapplied-api/0038-Debug-Marker-API.patch +++ b/patches/api/0038-Debug-Marker-API.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Debug Marker API diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java -index ad5f2a8991c3b7925626fd463110765ff964beb9..bb09c468ab1261ea4eaf59012d30a2e45199caf7 100644 +index 11c99892e9537e4e84b598ee082cef1afe56f33a..0430e8238609336a4fa0bd220a7c44f6af264945 100644 --- a/src/main/java/org/bukkit/Bukkit.java +++ b/src/main/java/org/bukkit/Bukkit.java -@@ -2951,5 +2951,89 @@ public final class Bukkit { +@@ -2945,5 +2945,89 @@ public final class Bukkit { public static void removeFuel(@NotNull Material material) { server.removeFuel(material); } @@ -99,10 +99,10 @@ index ad5f2a8991c3b7925626fd463110765ff964beb9..bb09c468ab1261ea4eaf59012d30a2e4 // Purpur end } diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java -index e75cccea44c9a693dfe52a419c742da9a62da42a..36d8ce7a21513600ab10b7e6f47c9f1d2cc51947 100644 +index cb20702273cfb21dbd00f93138c166f018d75971..ceb81148f5fd17f00d1a0fb2df1f31c45aa6807d 100644 --- a/src/main/java/org/bukkit/Server.java +++ b/src/main/java/org/bukkit/Server.java -@@ -2588,5 +2588,75 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi +@@ -2582,5 +2582,75 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi * @param material The material that will no longer be a fuel */ public void removeFuel(@NotNull Material material); @@ -260,10 +260,10 @@ index 25a049040a982194e7337d283898b252568f09e0..0f2f7cb8acb226d6f9a1085ec9cac3f8 /** diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java -index a03f473dee39eb160196e2468e4c26c6f8f6ce2a..2443f32d5a832b8913cd00042b94fda96658a3c2 100644 +index 36d73f14d70c4b1768f3b7dfa235a6a2411e4687..cdc0f844c1c2f7c8f0faee9112750354762ec5de 100644 --- a/src/main/java/org/bukkit/entity/Player.java +++ b/src/main/java/org/bukkit/entity/Player.java -@@ -3882,5 +3882,75 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM +@@ -3887,5 +3887,75 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM * @deprecated Use {@link #resetIdleDuration()} instead */ void resetIdleTimer(); diff --git a/patches/unapplied-api/0039-Add-death-screen-API.patch b/patches/api/0039-Add-death-screen-API.patch similarity index 89% rename from patches/unapplied-api/0039-Add-death-screen-API.patch rename to patches/api/0039-Add-death-screen-API.patch index 30f3605f9..e130f9931 100644 --- a/patches/unapplied-api/0039-Add-death-screen-API.patch +++ b/patches/api/0039-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 2443f32d5a832b8913cd00042b94fda96658a3c2..c41b5e13c519b3f48cbc866ad77b153cdde13136 100644 +index cdc0f844c1c2f7c8f0faee9112750354762ec5de..eb79e62e753524d6782842c662b0a50ab5ac0811 100644 --- a/src/main/java/org/bukkit/entity/Player.java +++ b/src/main/java/org/bukkit/entity/Player.java -@@ -3952,5 +3952,25 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM +@@ -3957,5 +3957,25 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM * Clears all debug block highlights */ void clearBlockHighlights(); diff --git a/patches/unapplied-api/0040-Language-API.patch b/patches/api/0040-Language-API.patch similarity index 100% rename from patches/unapplied-api/0040-Language-API.patch rename to patches/api/0040-Language-API.patch diff --git a/patches/unapplied-api/0041-Add-log-suppression-for-LibraryLoader.patch b/patches/api/0041-Add-log-suppression-for-LibraryLoader.patch similarity index 100% rename from patches/unapplied-api/0041-Add-log-suppression-for-LibraryLoader.patch rename to patches/api/0041-Add-log-suppression-for-LibraryLoader.patch diff --git a/patches/unapplied-api/0042-Fire-Immunity-API.patch b/patches/api/0042-Fire-Immunity-API.patch similarity index 100% rename from patches/unapplied-api/0042-Fire-Immunity-API.patch rename to patches/api/0042-Fire-Immunity-API.patch diff --git a/patches/unapplied-api/0043-Added-goat-ram-event.patch b/patches/api/0043-Added-goat-ram-event.patch similarity index 100% rename from patches/unapplied-api/0043-Added-goat-ram-event.patch rename to patches/api/0043-Added-goat-ram-event.patch diff --git a/patches/unapplied-api/0044-Add-PreExplodeEvents.patch b/patches/api/0044-Add-PreExplodeEvents.patch similarity index 100% rename from patches/unapplied-api/0044-Add-PreExplodeEvents.patch rename to patches/api/0044-Add-PreExplodeEvents.patch diff --git a/patches/unapplied-api/0045-Stored-Bee-API.patch b/patches/api/0045-Stored-Bee-API.patch similarity index 100% rename from patches/unapplied-api/0045-Stored-Bee-API.patch rename to patches/api/0045-Stored-Bee-API.patch diff --git a/patches/unapplied-api/0046-Explorer-Map-API.patch b/patches/api/0046-Explorer-Map-API.patch similarity index 100% rename from patches/unapplied-api/0046-Explorer-Map-API.patch rename to patches/api/0046-Explorer-Map-API.patch diff --git a/patches/unapplied-api/0047-Stonecutter-damage.patch b/patches/api/0047-Stonecutter-damage.patch similarity index 90% rename from patches/unapplied-api/0047-Stonecutter-damage.patch rename to patches/api/0047-Stonecutter-damage.patch index 8d0888381..e80a56e87 100644 --- a/patches/unapplied-api/0047-Stonecutter-damage.patch +++ b/patches/api/0047-Stonecutter-damage.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Stonecutter damage diff --git a/src/main/java/org/bukkit/event/entity/EntityDamageEvent.java b/src/main/java/org/bukkit/event/entity/EntityDamageEvent.java -index 446b3ffd5caca5344be1c250475679834cd0d4a2..3da8d3d8925cd7a111c0c357bceecfd3a801c8eb 100644 +index ca634147935c3bda8abad5dc73327e51381793a8..02c6a087dc41ffb004bcc20284135844188f8142 100644 --- a/src/main/java/org/bukkit/event/entity/EntityDamageEvent.java +++ b/src/main/java/org/bukkit/event/entity/EntityDamageEvent.java @@ -303,7 +303,8 @@ public class EntityDamageEvent extends EntityEvent implements Cancellable { From 7c38d970d104501d56c35a99e06b1d4724a63b95 Mon Sep 17 00:00:00 2001 From: granny Date: Fri, 14 Jun 2024 13:28:44 -0700 Subject: [PATCH 049/588] first 5 patches! --- .../0001-Rebrand.patch | 55 +++++++------------ .../0002-Purpur-config-files.patch | 34 ++++++------ .../0003-Purpur-client-support.patch | 26 ++++----- .../0004-Fix-decompile-errors.patch | 0 .../0005-Component-related-conveniences.patch | 16 +++--- 5 files changed, 58 insertions(+), 73 deletions(-) rename patches/{unapplied-server => server}/0001-Rebrand.patch (95%) rename patches/{unapplied-server => server}/0002-Purpur-config-files.patch (94%) rename patches/{unapplied-server => server}/0003-Purpur-client-support.patch (69%) rename patches/{unapplied-server => server}/0004-Fix-decompile-errors.patch (100%) rename patches/{unapplied-server => server}/0005-Component-related-conveniences.patch (87%) diff --git a/patches/unapplied-server/0001-Rebrand.patch b/patches/server/0001-Rebrand.patch similarity index 95% rename from patches/unapplied-server/0001-Rebrand.patch rename to patches/server/0001-Rebrand.patch index 052131c52..3c52b047a 100644 --- a/patches/unapplied-server/0001-Rebrand.patch +++ b/patches/server/0001-Rebrand.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Rebrand diff --git a/build.gradle.kts b/build.gradle.kts -index 4998aff0b7cb084dcda15c6a18bbe45e99b6000a..d23ecfabf6bf1e355fb2efe5abd80236259ce3c4 100644 +index b06f38b87765d084565bc11cf5da6076562b6be8..5353a88c2667513a6c47cf1545d5a5726aae774d 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -13,7 +13,7 @@ configurations.named(log4jPlugins.compileClasspathConfigurationName) { @@ -17,7 +17,7 @@ index 4998aff0b7cb084dcda15c6a18bbe45e99b6000a..d23ecfabf6bf1e355fb2efe5abd80236 // Paper start implementation("org.jline:jline-terminal-jansi:3.21.0") implementation("net.minecrell:terminalconsoleappender:1.3.0") -@@ -47,6 +47,10 @@ dependencies { +@@ -42,6 +42,10 @@ dependencies { runtimeOnly("org.apache.maven.resolver:maven-resolver-connector-basic:1.9.18") runtimeOnly("org.apache.maven.resolver:maven-resolver-transport-http:1.9.18") @@ -28,7 +28,7 @@ index 4998aff0b7cb084dcda15c6a18bbe45e99b6000a..d23ecfabf6bf1e355fb2efe5abd80236 testImplementation("io.github.classgraph:classgraph:4.8.47") // Paper - mob goal test testImplementation("org.junit.jupiter:junit-jupiter:5.10.2") testImplementation("org.hamcrest:hamcrest:2.2") -@@ -80,14 +84,14 @@ tasks.jar { +@@ -75,14 +79,14 @@ tasks.jar { val gitBranch = git("rev-parse", "--abbrev-ref", "HEAD").getText().trim() // Paper attributes( "Main-Class" to "org.bukkit.craftbukkit.Main", @@ -48,7 +48,7 @@ index 4998aff0b7cb084dcda15c6a18bbe45e99b6000a..d23ecfabf6bf1e355fb2efe5abd80236 "Build-Number" to (build ?: ""), "Build-Time" to Instant.now().toString(), "Git-Branch" to gitBranch, // Paper -@@ -144,7 +148,7 @@ fun TaskContainer.registerRunTask( +@@ -139,7 +143,7 @@ fun TaskContainer.registerRunTask( name: String, block: JavaExec.() -> Unit ): TaskProvider = register(name) { @@ -184,33 +184,18 @@ index 790bad0494454ca12ee152e3de6da3da634d9b20..a6e5950b5875cafd734300cdfbf58f5d @Override diff --git a/src/main/java/net/minecraft/CrashReport.java b/src/main/java/net/minecraft/CrashReport.java -index 4f3cc14d48690bb183d09bb7a5ba1e23e8a0c08a..c366d84518979e842a6f10f969a5951539ecac93 100644 +index 589a8bf75be6ccc59f1e5dd5d8d9afed41c4772d..fea76d9d0b2a75d6a0b39cafafcb11c5a8d7d447 100644 --- a/src/main/java/net/minecraft/CrashReport.java +++ b/src/main/java/net/minecraft/CrashReport.java -@@ -125,6 +125,10 @@ public class CrashReport { +@@ -124,7 +124,7 @@ public class CrashReport { + public String getFriendlyReport(ReportType type, List extraInfo) { StringBuilder stringbuilder = new StringBuilder(); - stringbuilder.append("---- Minecraft Crash Report ----\n"); -+ // Purpur start -+ stringbuilder.append("// "); -+ stringbuilder.append("// DO NOT REPORT THIS TO PAPER! REPORT TO PURPUR INSTEAD!"); -+ // Purpur end - stringbuilder.append("// "); - 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 3751c2a077bd13bac330b93c6efc2a640a17f4f2..38d2dfcee9462aaf9aa4954effe2b40242d4bb76 100644 ---- a/src/main/java/net/minecraft/server/MinecraftServer.java -+++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -956,7 +956,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop { String minecraftVersion = Bukkit.getVersion(); -@@ -602,16 +602,8 @@ public class Metrics { +@@ -597,16 +597,8 @@ public class Metrics { })); metrics.addCustomChart(new Metrics.SingleLineChart("players", () -> Bukkit.getOnlinePlayers().size())); @@ -37,7 +37,7 @@ index 4b002e8b75d117b726b0de274a76d3596fce015b..8cde30544e14f8fc2dac32966ae3c21f 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 59d7e8a3d83d3ab7aa28606401bb129ccaeff240..b51850c0368b0fa2c9eb4ca44b9c931eb46478fc 100644 +index 4017b82e72fefd6685e9250a936686fd8a0891f1..c98247a6ccc015f1da2c11995fb392b24197e888 100644 --- a/src/main/java/net/minecraft/commands/CommandSourceStack.java +++ b/src/main/java/net/minecraft/commands/CommandSourceStack.java @@ -310,6 +310,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 - create paper world config; Async-Anti-Xray: Pass executor +@@ -202,6 +203,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { + protected Level(WritableLevelData worlddatamutable, ResourceKey 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) { // Paper - create paper world config this.spigotConfig = new org.spigotmc.SpigotWorldConfig(((net.minecraft.world.level.storage.PrimaryLevelData) worlddatamutable).getLevelName()); // Spigot this.paperConfig = paperWorldConfigCreator.apply(this.spigotConfig); // Paper - create paper world config + this.purpurConfig = new org.purpurmc.purpur.PurpurWorldConfig(((net.minecraft.world.level.storage.PrimaryLevelData) worlddatamutable).getLevelName(), env); // Purpur @@ -112,10 +112,10 @@ index 14281a4e72f49dc4eb2ca3da8479c1f81a3a175d..be8bc5b5d5fdf41da40fb5aef9e6bb16 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 5db08432b6afd3639688830e717f40ceaf599248..987cc39ebc9332ba0c974fb4e8b89ebbe05aff5f 100644 +index 77f3ac4e45a691181a94831cf49f7840c9f88e3a..0d40596884f3b9ecfe3e7267e204f4003c50cab2 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -1056,6 +1056,7 @@ public final class CraftServer implements Server { +@@ -1059,6 +1059,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 5db08432b6afd3639688830e717f40ceaf599248..987cc39ebc9332ba0c974fb4e8b89ebb 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)) -@@ -1071,6 +1072,7 @@ public final class CraftServer implements Server { +@@ -1074,6 +1075,7 @@ public final class CraftServer implements Server { } } world.spigotConfig.init(); // Spigot @@ -131,7 +131,7 @@ index 5db08432b6afd3639688830e717f40ceaf599248..987cc39ebc9332ba0c974fb4e8b89ebb } Plugin[] pluginClone = pluginManager.getPlugins().clone(); // Paper -@@ -1087,6 +1089,7 @@ public final class CraftServer implements Server { +@@ -1090,6 +1092,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 5db08432b6afd3639688830e717f40ceaf599248..987cc39ebc9332ba0c974fb4e8b89ebb this.overrideAllCommandBlockCommands = this.commandsConfiguration.getStringList("command-block-overrides").contains("*"); this.ignoreVanillaPermissions = this.commandsConfiguration.getBoolean("ignore-vanilla-permissions"); -@@ -3053,6 +3056,18 @@ public final class CraftServer implements Server { +@@ -2978,6 +2981,18 @@ public final class CraftServer implements Server { return CraftServer.this.console.paperConfigurations.createLegacyObject(CraftServer.this.console); } @@ -159,7 +159,7 @@ index 5db08432b6afd3639688830e717f40ceaf599248..987cc39ebc9332ba0c974fb4e8b89ebb 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 b86ba59158964f73abd6622341a9acb98a33fa44..af153da19fadf3020191e1de7d10d6688bf8c2d8 100644 +index 6e1f92b45504cef0c4dcbbebf3df339ef4cad0a1..48e8b7405270632130721e87579ee2438a0f0b75 100644 --- a/src/main/java/org/bukkit/craftbukkit/Main.java +++ b/src/main/java/org/bukkit/craftbukkit/Main.java @@ -176,6 +176,14 @@ public class Main { diff --git a/patches/unapplied-server/0003-Purpur-client-support.patch b/patches/server/0003-Purpur-client-support.patch similarity index 69% rename from patches/unapplied-server/0003-Purpur-client-support.patch rename to patches/server/0003-Purpur-client-support.patch index 638ca8728..6ba5cb0a2 100644 --- a/patches/unapplied-server/0003-Purpur-client-support.patch +++ b/patches/server/0003-Purpur-client-support.patch @@ -5,32 +5,32 @@ 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 6a4637eef14cbd84bbe26ef16f004b8f93367a3d..32c02333eee85dd3e90f259873bf8bbb4c9177a7 100644 +index 40b5d379e917771b30d888eb390f5d5698a34ffb..922ff0589cfde06b3e9abab60c7fd051465bb413 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -298,6 +298,7 @@ public class ServerPlayer extends Player { +@@ -296,6 +296,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player { public com.destroystokyo.paper.event.entity.PlayerNaturallySpawnCreaturesEvent playerNaturallySpawnedEvent; // Paper - PlayerNaturallySpawnCreaturesEvent public @Nullable String clientBrandName = null; // Paper - Brand support public org.bukkit.event.player.PlayerQuitEvent.QuitReason quitReason = null; // Paper - Add API for quit reason; there are a lot of changes to do if we change all methods leading to the event + public boolean purpurClient = false; // Purpur - // 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)); + public ServerPlayer(MinecraftServer server, ServerLevel world, GameProfile profile, ClientInformation clientOptions) { + super(world, world.getSharedSpawnPos(), world.getSharedSpawnAngle(), profile); diff --git a/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java -index 308aef9c4933b2bcdd622a34b68efab4a220fe4d..a8edeb5a40cd9aac933805259407e32c544d181e 100644 +index b43f87ff4b9853b5d4bbea5ff9686d64d9d0d26b..b66d4047b5e529f5f737efb0ff1edda805de1316 100644 --- a/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java -@@ -78,6 +78,7 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack +@@ -79,6 +79,7 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack public final java.util.Map packCallbacks = new java.util.concurrent.ConcurrentHashMap<>(); // Paper - adventure resource pack callbacks private static final long KEEPALIVE_LIMIT = Long.getLong("paper.playerconnection.keepalive", 30) * 1000; // Paper - provide property to set keepalive limit - protected static final ResourceLocation MINECRAFT_BRAND = new ResourceLocation("brand"); // Paper - Brand support -+ protected static final ResourceLocation PURPUR_CLIENT = new ResourceLocation("purpur", "client"); // Purpur + protected static final ResourceLocation MINECRAFT_BRAND = ResourceLocation.withDefaultNamespace("brand"); // Paper - Brand support ++ protected static final ResourceLocation PURPUR_CLIENT = ResourceLocation.fromNamespaceAndPath("purpur", "client"); // Purpur public ServerCommonPacketListenerImpl(MinecraftServer minecraftserver, Connection networkmanager, CommonListenerCookie commonlistenercookie, ServerPlayer player) { // CraftBukkit this.server = minecraftserver; -@@ -170,6 +171,13 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack +@@ -171,6 +172,13 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack ServerGamePacketListenerImpl.LOGGER.error("Couldn\'t register custom payload", ex); - this.disconnect("Invalid payload REGISTER!", org.bukkit.event.player.PlayerKickEvent.Cause.INVALID_PAYLOAD); // Paper - kick event cause + this.disconnect(Component.literal("Invalid payload REGISTER!"), PlayerKickEvent.Cause.INVALID_PAYLOAD); // Paper - kick event cause } + // Purpur start + } else if (identifier.equals(PURPUR_CLIENT)) { @@ -43,12 +43,12 @@ index 308aef9c4933b2bcdd622a34b68efab4a220fe4d..a8edeb5a40cd9aac933805259407e32c 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 40155cc70ba959eea8011626a30e26f44298c99d..69de5167aeaa6f9cb66fa7c2daa63a2e72c93fd0 100644 +index fc7fa260bb55ae28b17a3ea05682a51ad4fa39df..e2c3a8f14d0d48bc756c6845be652eefde58a85d 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -3528,4 +3528,11 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -3534,4 +3534,11 @@ public class CraftPlayer extends CraftHumanEntity implements Player { public void setSendViewDistance(final int viewDistance) { - this.getHandle().setSendViewDistance(viewDistance); + throw new UnsupportedOperationException("Not implemented yet"); } + + // Purpur start diff --git a/patches/unapplied-server/0004-Fix-decompile-errors.patch b/patches/server/0004-Fix-decompile-errors.patch similarity index 100% rename from patches/unapplied-server/0004-Fix-decompile-errors.patch rename to patches/server/0004-Fix-decompile-errors.patch diff --git a/patches/unapplied-server/0005-Component-related-conveniences.patch b/patches/server/0005-Component-related-conveniences.patch similarity index 87% rename from patches/unapplied-server/0005-Component-related-conveniences.patch rename to patches/server/0005-Component-related-conveniences.patch index d47604210..25b17035e 100644 --- a/patches/unapplied-server/0005-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 32c02333eee85dd3e90f259873bf8bbb4c9177a7..8a183fc9d0a79dd9a952bc1759c53da286908188 100644 +index 922ff0589cfde06b3e9abab60c7fd051465bb413..2c02e1ccc8005c1bff952d4aa17557002c7e3d84 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -1979,6 +1979,26 @@ public class ServerPlayer extends Player { +@@ -1969,6 +1969,26 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player { this.lastSentExp = -1; // CraftBukkit - Added to reset } @@ -36,10 +36,10 @@ index 32c02333eee85dd3e90f259873bf8bbb4c9177a7..8a183fc9d0a79dd9a952bc1759c53da2 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 a2142930b4d4b05987c90496fb9d733d99040aa0..2d6b6795703431939005aa09d1ed590c3f755163 100644 +index 8ba99f6ef2b50ceb8e279ed559a375ada6877576..ab3cdaecf0e5e45acd3ac19be590c863cba9019a 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -1063,6 +1063,20 @@ public abstract class PlayerList { +@@ -1015,6 +1015,20 @@ public abstract class PlayerList { } // CraftBukkit end @@ -61,10 +61,10 @@ index a2142930b4d4b05987c90496fb9d733d99040aa0..2d6b6795703431939005aa09d1ed590c Iterator iterator = this.players.iterator(); diff --git a/src/main/java/net/minecraft/world/damagesource/DamageSource.java b/src/main/java/net/minecraft/world/damagesource/DamageSource.java -index dd9638bdb228a53e72820e0e7cf6fe6fcc08fe4b..bc5071efe710614309308dad5b6d9c56197ee888 100644 +index bb1a60180e58c1333e7bb33e8acf1b0225eda8a8..c83e80ebdbbfb2d0e08561a44486a308d16f50af 100644 --- a/src/main/java/net/minecraft/world/damagesource/DamageSource.java +++ b/src/main/java/net/minecraft/world/damagesource/DamageSource.java -@@ -193,6 +193,15 @@ public class DamageSource { +@@ -198,6 +198,15 @@ public class DamageSource { } } @@ -81,10 +81,10 @@ index dd9638bdb228a53e72820e0e7cf6fe6fcc08fe4b..bc5071efe710614309308dad5b6d9c56 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 4ee843dfd826772c9157ca421d8fe1f36f814b51..ffcd965586acc5993c8122336ea2ec661932d4b7 100644 +index 8779d54c816bb97ccdeb268d1929f693d322ee14..6735bea3a56e0b44eb22dcd403a6b937e31b45c7 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -4195,6 +4195,20 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3913,6 +3913,20 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess return SlotAccess.NULL; } From 0ab775669f602e04f7d4ef705e00300593fd22e1 Mon Sep 17 00:00:00 2001 From: granny Date: Fri, 14 Jun 2024 13:44:55 -0700 Subject: [PATCH 050/588] ridables patch \o/ --- .../0006-Ridables.patch | 535 ++++++++---------- 1 file changed, 250 insertions(+), 285 deletions(-) rename patches/{unapplied-server => server}/0006-Ridables.patch (93%) diff --git a/patches/unapplied-server/0006-Ridables.patch b/patches/server/0006-Ridables.patch similarity index 93% rename from patches/unapplied-server/0006-Ridables.patch rename to patches/server/0006-Ridables.patch index 733efce85..5a03b4a38 100644 --- a/patches/unapplied-server/0006-Ridables.patch +++ b/patches/server/0006-Ridables.patch @@ -5,12 +5,12 @@ Subject: [PATCH] Ridables diff --git a/src/main/java/net/minecraft/core/BlockPos.java b/src/main/java/net/minecraft/core/BlockPos.java -index 665e88b2dedf9d5bb50914d5f3d377f2d19f40b0..f70a80b496bd1498778e82fc221c3b1b39308b75 100644 +index 12ff8886bb53ca15db745989c25b9bd2f45335e4..c86f669448b5ec93c54784192b470c7ebce8cfa2 100644 --- a/src/main/java/net/minecraft/core/BlockPos.java +++ b/src/main/java/net/minecraft/core/BlockPos.java -@@ -61,6 +61,12 @@ public class BlockPos extends Vec3i { - private static final int X_OFFSET = 38; - // Paper end - Optimize Bit Operations by inlining +@@ -60,6 +60,12 @@ public class BlockPos extends Vec3i { + private static final int Z_OFFSET = PACKED_Y_LENGTH; + private static final int X_OFFSET = PACKED_Y_LENGTH + PACKED_Z_LENGTH; + // Purpur start + public BlockPos(net.minecraft.world.entity.Entity entity) { @@ -22,34 +22,34 @@ index 665e88b2dedf9d5bb50914d5f3d377f2d19f40b0..f70a80b496bd1498778e82fc221c3b1b 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 38d2dfcee9462aaf9aa4954effe2b40242d4bb76..389ecd3db65fa2eba09b500ab7c59ebeac4f159f 100644 +index 6915522f669631779c1fb8a8e2db330f4b9fb921..1d934bf1fbd1c439ad40e7dbc86b29349ef21457 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1758,6 +1758,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 0; // Paper - BlockPhysicsEvent worldserver.hasEntityMoveEvent = io.papermc.paper.event.entity.EntityMoveEvent.getHandlerList().getRegisteredListeners().length > 0; // Paper - Add EntityMoveEvent - net.minecraft.world.level.block.entity.HopperBlockEntity.skipHopperEvents = worldserver.paperConfig().hopper.disableMoveEvent || org.bukkit.event.inventory.InventoryMoveItemEvent.getHandlerList().getRegisteredListeners().length == 0; // Paper - Perf: Optimize Hoppers - worldserver.updateLagCompensationTick(); // Paper - lag compensation + worldserver.hasRidableMoveEvent = org.purpurmc.purpur.event.entity.RidableMoveEvent.getHandlerList().getRegisteredListeners().length > 0; // Purpur this.profiler.push(() -> { String s = String.valueOf(worldserver); diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index ca56a0b596976448da6bb2a0e82b3d5cd4133e12..6247659f33c3d21d33ec1f510523403616ea9c4f 100644 +index 3f17212fc814156e2d3e8c7d4cf40680ab5cdbb5..2e3e9f572c0d29dfd9544c41b2f02f34d6b50786 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java @@ -229,6 +229,7 @@ public class ServerLevel extends Level implements WorldGenLevel { + public final UUID uuid; public boolean hasPhysicsEvent = true; // Paper - BlockPhysicsEvent public boolean hasEntityMoveEvent; // Paper - Add EntityMoveEvent - private final alternate.current.wire.WireHandler wireHandler = new alternate.current.wire.WireHandler(this); // Paper - optimize redstone (Alternate Current) + public boolean hasRidableMoveEvent = false; // Purpur public LevelChunk getChunkIfLoaded(int x, int z) { return this.chunkSource.getChunkAtIfLoadedImmediately(x, z); // Paper - Use getChunkIfLoadedImmediately diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 8a183fc9d0a79dd9a952bc1759c53da286908188..5dd8c9f53ba50f160198a09dd2069edbac48230e 100644 +index 2c02e1ccc8005c1bff952d4aa17557002c7e3d84..720f96ab9fd525f5a97302da24b68509fb45eb84 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -815,6 +815,15 @@ public class ServerPlayer extends Player { +@@ -771,6 +771,15 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player { this.trackEnteredOrExitedLavaOnVehicle(); this.updatePlayerAttributes(); this.advancements.flushDirty(this); @@ -66,10 +66,10 @@ index 8a183fc9d0a79dd9a952bc1759c53da286908188..5dd8c9f53ba50f160198a09dd2069edb private void updatePlayerAttributes() { diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 4ae88bfcead40cd05f9514a48a922a37767cb3cf..ac11226ca4b8d730871851d99491d598e41a0de6 100644 +index 60f6f17aea41ffaa277bff380924cc752eb3e62a..78181ad76f9835f900f7583bdefb0e7e56f863f3 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -2772,6 +2772,8 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -2716,6 +2716,8 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl ServerGamePacketListenerImpl.this.cserver.getPluginManager().callEvent(event); @@ -77,12 +77,12 @@ index 4ae88bfcead40cd05f9514a48a922a37767cb3cf..ac11226ca4b8d730871851d99491d598 + // Entity in bucket - SPIGOT-4048 and SPIGOT-6859a if ((entity instanceof Bucketable && entity instanceof LivingEntity && origItem != null && origItem.asItem() == Items.WATER_BUCKET) && (event.isCancelled() || ServerGamePacketListenerImpl.this.player.getInventory().getSelected() == null || ServerGamePacketListenerImpl.this.player.getInventory().getSelected().getItem() != origItem)) { - entity.resendPossiblyDesyncedEntityData(ServerGamePacketListenerImpl.this.player); // Paper - The entire mob gets deleted, so resend it. + entity.getBukkitEntity().update(ServerGamePacketListenerImpl.this.player); diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 0766292235c04662ce9a5f94d11f9617f563031d..757aeb4b715b17d3f239b495899b0d8874811db8 100644 +index 6735bea3a56e0b44eb22dcd403a6b937e31b45c7..4454f9b41c3ebeb98d71b9b891e657b4a80c1601 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -380,7 +380,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -383,7 +383,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess private final Set tags; private final double[] pistonDeltas; private long pistonDeltasGameTime; @@ -91,7 +91,7 @@ index 0766292235c04662ce9a5f94d11f9617f563031d..757aeb4b715b17d3f239b495899b0d88 private float eyeHeight; public boolean isInPowderSnow; public boolean wasInPowderSnow; -@@ -3085,6 +3085,13 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -2851,6 +2851,13 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess this.passengers = ImmutableList.copyOf(list); } @@ -105,7 +105,7 @@ index 0766292235c04662ce9a5f94d11f9617f563031d..757aeb4b715b17d3f239b495899b0d88 this.gameEvent(GameEvent.ENTITY_MOUNT, passenger); } } -@@ -3124,6 +3131,14 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -2890,6 +2897,14 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess return false; } // CraftBukkit end @@ -120,7 +120,7 @@ index 0766292235c04662ce9a5f94d11f9617f563031d..757aeb4b715b17d3f239b495899b0d88 if (this.passengers.size() == 1 && this.passengers.get(0) == entity) { this.passengers = ImmutableList.of(); } else { -@@ -5014,4 +5029,44 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -4717,4 +4732,44 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess return ((net.minecraft.server.level.ServerChunkCache) level.getChunkSource()).isPositionTicking(this); } // Paper end - Expose entity id counter @@ -190,10 +190,10 @@ index 09fdea983772612ef3fff6b2da3cf469a34e4ec0..aa76a24421cdb3908a3544d92eb3d1e3 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 21e61bb75ac7ce468bc757633ce678b21bcb9deb..8623501c6f6567d146f9314f151629b5c25af289 100644 +index 23ce3f5fefceaeff5011f91f04ec8b200a503d21..fcc73ac45c963bd18f1658149295c672598f3ddd 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -229,9 +229,9 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -237,9 +237,9 @@ public abstract class LivingEntity extends Entity implements Attackable { protected int deathScore; public float lastHurt; public boolean jumping; @@ -206,33 +206,24 @@ index 21e61bb75ac7ce468bc757633ce678b21bcb9deb..8623501c6f6567d146f9314f151629b5 protected int lerpSteps; protected double lerpX; protected double lerpY; -@@ -300,7 +300,7 @@ public abstract class LivingEntity extends Entity implements Attackable { - this.useItem = ItemStack.EMPTY; +@@ -313,7 +313,7 @@ public abstract class LivingEntity extends Entity implements Attackable { this.lastClimbablePos = Optional.empty(); + this.activeLocationDependentEnchantments = new Reference2ObjectArrayMap(); this.appliedScale = 1.0F; - this.attributes = new AttributeMap(DefaultAttributes.getSupplier(type)); + this.attributes = new AttributeMap(DefaultAttributes.getSupplier(type), this); // Purpur this.craftAttributes = new CraftAttributeMap(this.attributes); // CraftBukkit // CraftBukkit - setHealth(getMaxHealth()) inlined and simplified to skip the instanceof check for EntityPlayer, as getBukkitEntity() is not initialized in constructor this.entityData.set(LivingEntity.DATA_HEALTH_ID, (float) this.getAttribute(Attributes.MAX_HEALTH).getValue()); -@@ -350,6 +350,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -363,6 +363,7 @@ public abstract class LivingEntity extends Entity implements Attackable { public static AttributeSupplier.Builder createLivingAttributes() { - return AttributeSupplier.builder().add(Attributes.MAX_HEALTH).add(Attributes.KNOCKBACK_RESISTANCE).add(Attributes.MOVEMENT_SPEED).add(Attributes.ARMOR).add(Attributes.ARMOR_TOUGHNESS).add(Attributes.MAX_ABSORPTION).add(Attributes.STEP_HEIGHT).add(Attributes.SCALE).add(Attributes.GRAVITY).add(Attributes.SAFE_FALL_DISTANCE).add(Attributes.FALL_DAMAGE_MULTIPLIER).add(Attributes.JUMP_STRENGTH); + return AttributeSupplier.builder().add(Attributes.MAX_HEALTH).add(Attributes.KNOCKBACK_RESISTANCE).add(Attributes.MOVEMENT_SPEED).add(Attributes.ARMOR).add(Attributes.ARMOR_TOUGHNESS).add(Attributes.MAX_ABSORPTION).add(Attributes.STEP_HEIGHT).add(Attributes.SCALE).add(Attributes.GRAVITY).add(Attributes.SAFE_FALL_DISTANCE).add(Attributes.FALL_DAMAGE_MULTIPLIER).add(Attributes.JUMP_STRENGTH).add(Attributes.OXYGEN_BONUS).add(Attributes.BURNING_TIME).add(Attributes.EXPLOSION_KNOCKBACK_RESISTANCE).add(Attributes.WATER_MOVEMENT_EFFICIENCY).add(Attributes.MOVEMENT_EFFICIENCY).add(Attributes.ATTACK_KNOCKBACK); } + public boolean shouldSendAttribute(Attribute attribute) { return true; } // Purpur @Override protected void checkFallDamage(double heightDifference, boolean onGround, BlockState state, BlockPos landedPosition) { -@@ -2765,7 +2766,7 @@ public abstract class LivingEntity extends Entity implements Attackable { - } - - protected long lastJumpTime = 0L; // Paper - Prevent excessive velocity through repeated crits -- protected void jumpFromGround() { -+ public void jumpFromGround() { // Purpur - protected -> public - float f = this.getJumpPower(); - - if (f > 1.0E-5F) { -@@ -3478,8 +3479,10 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -3498,8 +3499,10 @@ public abstract class LivingEntity extends Entity implements Attackable { this.pushEntities(); this.level().getProfiler().pop(); // Paper start - Add EntityMoveEvent @@ -245,7 +236,7 @@ index 21e61bb75ac7ce468bc757633ce678b21bcb9deb..8623501c6f6567d146f9314f151629b5 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()); -@@ -3489,6 +3492,21 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -3509,6 +3512,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()); } } @@ -268,10 +259,10 @@ index 21e61bb75ac7ce468bc757633ce678b21bcb9deb..8623501c6f6567d146f9314f151629b5 // Paper end - Add EntityMoveEvent 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 8b612b772ca87c852d0b108c2afd6785c261c9b9..3fdb1ba2e9249cda6f09406cfbf4cc677a258f13 100644 +index 5bac748649f43d74b13e7c0b4d355e67654ad59e..ec3e0e076cb9f2b5160988ab78d6ab7b33f9490f 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java -@@ -165,8 +165,8 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Targeti +@@ -160,8 +160,8 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab this.restrictRadius = -1.0F; this.goalSelector = new GoalSelector(world.getProfilerSupplier()); this.targetSelector = new GoalSelector(world.getProfilerSupplier()); @@ -282,7 +273,7 @@ index 8b612b772ca87c852d0b108c2afd6785c261c9b9..3fdb1ba2e9249cda6f09406cfbf4cc67 this.jumpControl = new JumpControl(this); this.bodyRotationControl = this.createBodyControl(); this.navigation = this.createNavigation(world); -@@ -1525,7 +1525,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Targeti +@@ -1493,7 +1493,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab protected void onOffspringSpawnedFromEgg(Player player, Mob child) {} protected InteractionResult mobInteract(Player player, InteractionHand hand) { @@ -291,7 +282,7 @@ index 8b612b772ca87c852d0b108c2afd6785c261c9b9..3fdb1ba2e9249cda6f09406cfbf4cc67 } public boolean isWithinRestriction() { -@@ -1902,4 +1902,56 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Targeti +@@ -1791,4 +1791,56 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab return itemmonsteregg == null ? null : new ItemStack(itemmonsteregg); } @@ -349,12 +340,12 @@ index 8b612b772ca87c852d0b108c2afd6785c261c9b9..3fdb1ba2e9249cda6f09406cfbf4cc67 + // 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 9ef8f014af332da129bfcd3370da983ec035ecc6..c51b429822d56761f69c49ecd4addfab7b90bad8 100644 +index 69992ebc999ea3ff9e47e4e049bcc514c01150ca..1ec4ba9799cccb6337a63d8287e269b102f59aa1 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 -@@ -22,13 +22,20 @@ public class AttributeMap { - private final Map, AttributeInstance> attributes = new Object2ObjectOpenHashMap<>(); - private final Set dirtyAttributes = new ObjectOpenHashSet<>(); +@@ -23,14 +23,21 @@ public class AttributeMap { + private final Set attributesToSync = new ObjectOpenHashSet<>(); + private final Set attributesToUpdate = new ObjectOpenHashSet<>(); private final AttributeSupplier supplier; + private final net.minecraft.world.entity.LivingEntity entity; // Purpur @@ -369,12 +360,13 @@ index 9ef8f014af332da129bfcd3370da983ec035ecc6..c51b429822d56761f69c49ecd4addfab } private void onAttributeModified(AttributeInstance instance) { + this.attributesToUpdate.add(instance); - if (instance.getAttribute().value().isClientSyncable()) { + if (instance.getAttribute().value().isClientSyncable() && (entity == null || entity.shouldSendAttribute(instance.getAttribute().value()))) { // Purpur - this.dirtyAttributes.add(instance); + this.attributesToSync.add(instance); } } -@@ -38,7 +45,7 @@ public class AttributeMap { +@@ -44,7 +51,7 @@ public class AttributeMap { } public Collection getSyncableAttributes() { @@ -587,10 +579,10 @@ index 3231eaa6af2ddfe4095ff2d650f580ebd4d43aea..e8cb124d232f7316cc8c35dd8bd12f79 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 0dfb8109fd8c022b079da00f6a0e3fc85b57bf7a..4b84cf76d052112e00cd13c330182abfbe618820 100644 +index 1b3978f4ea7e8491e0c0cb6de23c141f44fab414..f7ff98245583ab471ce1fa2f84f4684e195cdacc 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Bee.java +++ b/src/main/java/net/minecraft/world/entity/animal/Bee.java -@@ -143,6 +143,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { +@@ -144,6 +144,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { public Bee(EntityType type, Level world) { super(type, world); this.remainingCooldownBeforeLocatingNewFlower = Mth.nextInt(this.random, 20, 60); @@ -598,7 +590,7 @@ index 0dfb8109fd8c022b079da00f6a0e3fc85b57bf7a..4b84cf76d052112e00cd13c330182abf // Paper start - Fix MC-167279 class BeeFlyingMoveControl extends FlyingMoveControl { public BeeFlyingMoveControl(final Mob entity, final int maxPitchChange, final boolean noGravity) { -@@ -151,11 +152,24 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { +@@ -152,11 +153,24 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { @Override public void tick() { @@ -623,7 +615,7 @@ index 0dfb8109fd8c022b079da00f6a0e3fc85b57bf7a..4b84cf76d052112e00cd13c330182abf } this.moveControl = new BeeFlyingMoveControl(this, 20, true); // Paper end - Fix MC-167279 -@@ -167,6 +181,40 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { +@@ -168,6 +182,40 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { this.setPathfindingMalus(PathType.FENCE, -1.0F); } @@ -664,7 +656,7 @@ index 0dfb8109fd8c022b079da00f6a0e3fc85b57bf7a..4b84cf76d052112e00cd13c330182abf @Override protected void defineSynchedData(SynchedEntityData.Builder builder) { super.defineSynchedData(builder); -@@ -181,6 +229,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { +@@ -182,6 +230,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { @Override protected void registerGoals() { @@ -672,7 +664,7 @@ index 0dfb8109fd8c022b079da00f6a0e3fc85b57bf7a..4b84cf76d052112e00cd13c330182abf this.goalSelector.addGoal(0, new Bee.BeeAttackGoal(this, 1.399999976158142D, true)); this.goalSelector.addGoal(1, new Bee.BeeEnterHiveGoal()); this.goalSelector.addGoal(2, new BreedGoal(this, 1.0D)); -@@ -198,6 +247,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { +@@ -199,6 +248,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { this.goalSelector.addGoal(7, new Bee.BeeGrowCropGoal()); this.goalSelector.addGoal(8, new Bee.BeeWanderGoal()); this.goalSelector.addGoal(9, new FloatGoal(this)); @@ -680,7 +672,7 @@ index 0dfb8109fd8c022b079da00f6a0e3fc85b57bf7a..4b84cf76d052112e00cd13c330182abf 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)); -@@ -872,16 +922,16 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { +@@ -883,16 +933,16 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { } } @@ -701,10 +693,10 @@ index 0dfb8109fd8c022b079da00f6a0e3fc85b57bf7a..4b84cf76d052112e00cd13c330182abf } diff --git a/src/main/java/net/minecraft/world/entity/animal/Cat.java b/src/main/java/net/minecraft/world/entity/animal/Cat.java -index 07559b9629d4ecb40b511256f400a781e39820e0..3826c794ddde6b915e233e2d0395557e3ea867e0 100644 +index 23d4dcc82115fd1a0a77565a0472304042d5f12d..07f0ca108d515df1ff97ba79265bbf2c8bfbc8a5 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Cat.java +++ b/src/main/java/net/minecraft/world/entity/animal/Cat.java -@@ -104,6 +104,31 @@ public class Cat extends TamableAnimal implements VariantHolder(this, Rabbit.class, false, (Predicate) null)); this.targetSelector.addGoal(1, new NonTameRandomTargetGoal<>(this, Turtle.class, false, Turtle.BABY_ON_LAND_SELECTOR)); } -@@ -377,6 +404,7 @@ public class Cat extends TamableAnimal implements VariantHolder { @@ -1095,10 +1087,10 @@ index e705449496b1a06270ecbc13f4dce5357479845b..935dff4d167d8b6ef4b7cdc95bf000a2 } diff --git a/src/main/java/net/minecraft/world/entity/animal/IronGolem.java b/src/main/java/net/minecraft/world/entity/animal/IronGolem.java -index 932fae98c551052cadba4c6fc6e575fc30a25d58..4cc9138201b08aff8bb47720c6fe1e3447f03967 100644 +index 1807da10d07d1f6e4ddbc0fa1b8da34a688d67c3..1cecb12d9c9958239a71a8599fcd787d07953c76 100644 --- a/src/main/java/net/minecraft/world/entity/animal/IronGolem.java +++ b/src/main/java/net/minecraft/world/entity/animal/IronGolem.java -@@ -61,8 +61,27 @@ public class IronGolem extends AbstractGolem implements NeutralMob { +@@ -62,8 +62,27 @@ public class IronGolem extends AbstractGolem implements NeutralMob { super(type, world); } @@ -1126,7 +1118,7 @@ index 932fae98c551052cadba4c6fc6e575fc30a25d58..4cc9138201b08aff8bb47720c6fe1e34 this.goalSelector.addGoal(1, new MeleeAttackGoal(this, 1.0D, true)); this.goalSelector.addGoal(2, new MoveTowardsTargetGoal(this, 0.9D, 32.0F)); this.goalSelector.addGoal(2, new MoveBackToVillageGoal(this, 0.6D, false)); -@@ -70,6 +89,7 @@ public class IronGolem extends AbstractGolem implements NeutralMob { +@@ -71,6 +90,7 @@ public class IronGolem extends AbstractGolem implements NeutralMob { this.goalSelector.addGoal(5, new OfferFlowerGoal(this)); this.goalSelector.addGoal(7, new LookAtPlayerGoal(this, Player.class, 6.0F)); this.goalSelector.addGoal(8, new RandomLookAroundGoal(this)); @@ -1134,7 +1126,7 @@ index 932fae98c551052cadba4c6fc6e575fc30a25d58..4cc9138201b08aff8bb47720c6fe1e34 this.targetSelector.addGoal(1, new DefendVillageTargetGoal(this)); this.targetSelector.addGoal(2, new HurtByTargetGoal(this, new Class[0])); this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, Player.class, 10, true, false, this::isAngryAt)); -@@ -265,13 +285,13 @@ public class IronGolem extends AbstractGolem implements NeutralMob { +@@ -273,13 +293,13 @@ public class IronGolem extends AbstractGolem implements NeutralMob { ItemStack itemstack = player.getItemInHand(hand); if (!itemstack.is(Items.IRON_INGOT)) { @@ -1197,7 +1189,7 @@ index 0c21959f57ae88fcd0a4d6dc911c1ce347c96528..11944ee34fc7e3e5551b9e18a563164f itemstack.consume(1, player); diff --git a/src/main/java/net/minecraft/world/entity/animal/Ocelot.java b/src/main/java/net/minecraft/world/entity/animal/Ocelot.java -index 2c7491edbb60e7ec6a208ea7292cd28a3f8f9e31..2b074f68c1be2ff591543685bbb4e7ea1c7784f8 100644 +index 97f4cc522706ec5914672aa4fdfbc35edc94aeb6..0083119b44ef10e8ebc4414828f0d5fd6f68a830 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Ocelot.java +++ b/src/main/java/net/minecraft/world/entity/animal/Ocelot.java @@ -66,6 +66,23 @@ public class Ocelot extends Animal { @@ -1240,10 +1232,10 @@ index 2c7491edbb60e7ec6a208ea7292cd28a3f8f9e31..2b074f68c1be2ff591543685bbb4e7ea this.targetSelector.addGoal(1, new NearestAttackableTargetGoal<>(this, Turtle.class, 10, false, false, Turtle.BABY_ON_LAND_SELECTOR)); } diff --git a/src/main/java/net/minecraft/world/entity/animal/Panda.java b/src/main/java/net/minecraft/world/entity/animal/Panda.java -index db60b91c2b26ca8cdb66e05deab7742ffe212767..5f9b7ae2ed4acff0fa7cfee07a29a28b5c0d67f8 100644 +index e108f876d3f129c6287f13d68427aed2a6f0c5b1..fff8abfe14be823867aa9bd145146763cfe83148 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Panda.java +++ b/src/main/java/net/minecraft/world/entity/animal/Panda.java -@@ -120,6 +120,32 @@ public class Panda extends Animal { +@@ -121,6 +121,32 @@ public class Panda extends Animal { } @@ -1275,8 +1267,8 @@ index db60b91c2b26ca8cdb66e05deab7742ffe212767..5f9b7ae2ed4acff0fa7cfee07a29a28b + @Override public boolean canTakeItem(ItemStack stack) { - EquipmentSlot enumitemslot = Mob.getEquipmentSlotForItem(stack); -@@ -281,6 +307,7 @@ public class Panda extends Animal { + EquipmentSlot enumitemslot = this.getEquipmentSlotForItem(stack); +@@ -282,6 +308,7 @@ public class Panda extends Animal { @Override protected void registerGoals() { this.goalSelector.addGoal(0, new FloatGoal(this)); @@ -1284,7 +1276,7 @@ index db60b91c2b26ca8cdb66e05deab7742ffe212767..5f9b7ae2ed4acff0fa7cfee07a29a28b this.goalSelector.addGoal(2, new Panda.PandaPanicGoal(this, 2.0D)); this.goalSelector.addGoal(2, new Panda.PandaBreedGoal(this, 1.0D)); this.goalSelector.addGoal(3, new Panda.PandaAttackGoal(this, 1.2000000476837158D, true)); -@@ -298,6 +325,7 @@ public class Panda extends Animal { +@@ -299,6 +326,7 @@ public class Panda extends Animal { this.goalSelector.addGoal(12, new Panda.PandaRollGoal(this)); this.goalSelector.addGoal(13, new FollowParentGoal(this, 1.25D)); this.goalSelector.addGoal(14, new WaterAvoidingRandomStrollGoal(this, 1.0D)); @@ -1292,7 +1284,7 @@ index db60b91c2b26ca8cdb66e05deab7742ffe212767..5f9b7ae2ed4acff0fa7cfee07a29a28b this.targetSelector.addGoal(1, (new Panda.PandaHurtByTargetGoal(this, new Class[0])).setAlertOthers(new Class[0])); } -@@ -655,7 +683,7 @@ public class Panda extends Animal { +@@ -660,7 +688,7 @@ public class Panda extends Animal { ItemStack itemstack = player.getItemInHand(hand); if (this.isScared()) { @@ -1301,7 +1293,7 @@ index db60b91c2b26ca8cdb66e05deab7742ffe212767..5f9b7ae2ed4acff0fa7cfee07a29a28b } else if (this.isOnBack()) { this.setOnBack(false); return InteractionResult.sidedSuccess(this.level().isClientSide); -@@ -673,7 +701,7 @@ public class Panda extends Animal { +@@ -678,7 +706,7 @@ public class Panda extends Animal { this.setInLove(player, breedCopy); // Paper - Fix EntityBreedEvent copying } else { if (this.level().isClientSide || this.isSitting() || this.isInWater()) { @@ -1310,7 +1302,7 @@ index db60b91c2b26ca8cdb66e05deab7742ffe212767..5f9b7ae2ed4acff0fa7cfee07a29a28b } this.tryToSit(); -@@ -692,7 +720,7 @@ public class Panda extends Animal { +@@ -697,7 +725,7 @@ public class Panda extends Animal { return InteractionResult.SUCCESS; } else { @@ -1319,7 +1311,7 @@ index db60b91c2b26ca8cdb66e05deab7742ffe212767..5f9b7ae2ed4acff0fa7cfee07a29a28b } } -@@ -737,7 +765,7 @@ public class Panda extends Animal { +@@ -742,7 +770,7 @@ public class Panda extends Animal { return this.isBaby() ? Panda.BABY_DIMENSIONS : super.getDefaultDimensions(pose); } @@ -1328,7 +1320,7 @@ index db60b91c2b26ca8cdb66e05deab7742ffe212767..5f9b7ae2ed4acff0fa7cfee07a29a28b private final Panda panda; -@@ -747,9 +775,9 @@ public class Panda extends Animal { +@@ -752,9 +780,9 @@ public class Panda extends Animal { } @Override @@ -1341,7 +1333,7 @@ index db60b91c2b26ca8cdb66e05deab7742ffe212767..5f9b7ae2ed4acff0fa7cfee07a29a28b } } 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 5ca96541abbb754f4d9fbe01f37ebaf19c532bbb..12200cca54304d567a1880527a49f3e26ad08c7b 100644 +index 97931bfd360725945ab9606ff698b518ae101076..0549fafbd6e76cf1b0d4e56e4fc745c4773f4c5d 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Parrot.java +++ b/src/main/java/net/minecraft/world/entity/animal/Parrot.java @@ -124,12 +124,68 @@ public class Parrot extends ShoulderRidingEntity implements VariantHolder { diff --git a/src/main/java/net/minecraft/world/entity/animal/PolarBear.java b/src/main/java/net/minecraft/world/entity/animal/PolarBear.java -index c87a57e8ceac32a6c8a603aa24f8cb053610e47c..d97314380b69ea2ad83b86c0f1bcaaccd4a1644f 100644 +index b69a2144769e598f0d70b0d5dfeb8af01ad740ca..5aeeb7b57a37ea49a28b2e244fb99a78320ed006 100644 --- a/src/main/java/net/minecraft/world/entity/animal/PolarBear.java +++ b/src/main/java/net/minecraft/world/entity/animal/PolarBear.java @@ -59,11 +59,40 @@ public class PolarBear extends Animal implements NeutralMob { @@ -1503,14 +1495,15 @@ index c87a57e8ceac32a6c8a603aa24f8cb053610e47c..d97314380b69ea2ad83b86c0f1bcaacc @Nullable @Override public AgeableMob getBreedOffspring(ServerLevel world, AgeableMob entity) { -@@ -79,12 +108,14 @@ public class PolarBear extends Animal implements NeutralMob { +@@ -79,6 +108,7 @@ public class PolarBear extends Animal implements NeutralMob { protected void registerGoals() { super.registerGoals(); this.goalSelector.addGoal(0, new FloatGoal(this)); + this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur this.goalSelector.addGoal(1, new PolarBear.PolarBearMeleeAttackGoal()); - this.goalSelector.addGoal(1, new PolarBear.PolarBearPanicGoal()); - this.goalSelector.addGoal(4, new FollowParentGoal(this, 1.25)); + this.goalSelector + .addGoal(1, new PanicGoal(this, 2.0, polarBear -> polarBear.isBaby() ? DamageTypeTags.PANIC_CAUSES : DamageTypeTags.PANIC_ENVIRONMENTAL_CAUSES)); +@@ -86,6 +116,7 @@ public class PolarBear extends Animal implements NeutralMob { this.goalSelector.addGoal(5, new RandomStrollGoal(this, 1.0)); this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 6.0F)); this.goalSelector.addGoal(7, new RandomLookAroundGoal(this)); @@ -1518,7 +1511,7 @@ index c87a57e8ceac32a6c8a603aa24f8cb053610e47c..d97314380b69ea2ad83b86c0f1bcaacc this.targetSelector.addGoal(1, new PolarBear.PolarBearHurtByTargetGoal()); this.targetSelector.addGoal(2, new PolarBear.PolarBearAttackPlayersGoal()); this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, Player.class, 10, true, false, this::isAngryAt)); -@@ -201,6 +232,12 @@ public class PolarBear extends Animal implements NeutralMob { +@@ -202,6 +233,12 @@ public class PolarBear extends Animal implements NeutralMob { if (!this.level().isClientSide) { this.updatePersistentAnger((ServerLevel)this.level(), true); } @@ -1531,7 +1524,7 @@ index c87a57e8ceac32a6c8a603aa24f8cb053610e47c..d97314380b69ea2ad83b86c0f1bcaacc } @Override -@@ -230,6 +267,7 @@ public class PolarBear extends Animal implements NeutralMob { +@@ -221,6 +258,7 @@ public class PolarBear extends Animal implements NeutralMob { public void setStanding(boolean warning) { this.entityData.set(DATA_STANDING_ID, warning); @@ -1563,10 +1556,10 @@ index 3f0fad476fe573c3ba946a9436d1b3f7c5260ee2..d75016647c513841358d08e5931821ec protected void defineSynchedData(SynchedEntityData.Builder builder) { super.defineSynchedData(builder); diff --git a/src/main/java/net/minecraft/world/entity/animal/Rabbit.java b/src/main/java/net/minecraft/world/entity/animal/Rabbit.java -index b58300e114e2e27ac68d7a9489bc52b127c9bc17..ba408a4195e03b484f143fbe66d5d3b13ebb8f11 100644 +index 0109c8ed8bf6a053674456fa4473934e028ca418..ee13da112fb4f9b4f8543cd72485d39d2450b9e5 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Rabbit.java +++ b/src/main/java/net/minecraft/world/entity/animal/Rabbit.java -@@ -86,6 +86,7 @@ public class Rabbit extends Animal implements VariantHolder { +@@ -89,6 +89,7 @@ public class Rabbit extends Animal implements VariantHolder { private boolean wasOnGround; private int jumpDelayTicks; public int moreCarrotTicks; @@ -1574,7 +1567,7 @@ index b58300e114e2e27ac68d7a9489bc52b127c9bc17..ba408a4195e03b484f143fbe66d5d3b1 public Rabbit(EntityType type, Level world) { super(type, world); -@@ -93,9 +94,55 @@ public class Rabbit extends Animal implements VariantHolder { +@@ -96,9 +97,55 @@ public class Rabbit extends Animal implements VariantHolder { this.moveControl = new Rabbit.RabbitMoveControl(this); } @@ -1630,7 +1623,7 @@ index b58300e114e2e27ac68d7a9489bc52b127c9bc17..ba408a4195e03b484f143fbe66d5d3b1 this.goalSelector.addGoal(1, new ClimbOnTopOfPowderSnowGoal(this, this.level())); this.goalSelector.addGoal(1, new Rabbit.RabbitPanicGoal(this, 2.2D)); this.goalSelector.addGoal(2, new BreedGoal(this, 0.8D)); -@@ -112,6 +159,14 @@ public class Rabbit extends Animal implements VariantHolder { +@@ -115,6 +162,14 @@ public class Rabbit extends Animal implements VariantHolder { @Override protected float getJumpPower() { @@ -1645,16 +1638,7 @@ index b58300e114e2e27ac68d7a9489bc52b127c9bc17..ba408a4195e03b484f143fbe66d5d3b1 float f = 0.3F; if (this.horizontalCollision || this.moveControl.hasWanted() && this.moveControl.getWantedY() > this.getY() + 0.5D) { -@@ -136,7 +191,7 @@ public class Rabbit extends Animal implements VariantHolder { - } - - @Override -- protected void jumpFromGround() { -+ public void jumpFromGround() { // Purpur - protected -> public - super.jumpFromGround(); - double d0 = this.moveControl.getSpeedModifier(); - -@@ -186,6 +241,13 @@ public class Rabbit extends Animal implements VariantHolder { +@@ -189,6 +244,13 @@ public class Rabbit extends Animal implements VariantHolder { @Override public void customServerAiStep() { @@ -1668,7 +1652,7 @@ index b58300e114e2e27ac68d7a9489bc52b127c9bc17..ba408a4195e03b484f143fbe66d5d3b1 if (this.jumpDelayTicks > 0) { --this.jumpDelayTicks; } -@@ -466,7 +528,7 @@ public class Rabbit extends Animal implements VariantHolder { +@@ -470,7 +532,7 @@ public class Rabbit extends Animal implements VariantHolder { } } @@ -1677,7 +1661,7 @@ index b58300e114e2e27ac68d7a9489bc52b127c9bc17..ba408a4195e03b484f143fbe66d5d3b1 private final Rabbit rabbit; private double nextJumpSpeed; -@@ -477,14 +539,14 @@ public class Rabbit extends Animal implements VariantHolder { +@@ -481,14 +543,14 @@ public class Rabbit extends Animal implements VariantHolder { } @Override @@ -1718,10 +1702,10 @@ index 0af79daa357f53a8871e293b57e16c099e5d3f64..87c442fb198cad8671ad1419e589a5a6 public int getMaxSchoolSize() { return 5; diff --git a/src/main/java/net/minecraft/world/entity/animal/Sheep.java b/src/main/java/net/minecraft/world/entity/animal/Sheep.java -index 3ce86f952a18cae7fda1903916903b31a63a40b4..7c1da46554aefde8e5e2b33a3644c9cbd771d7bc 100644 +index 38ac2759894660be1ee7ba59b0bd1270158e9232..c70c78d7aa046995e77eadf348d434bd131c2380 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Sheep.java +++ b/src/main/java/net/minecraft/world/entity/animal/Sheep.java -@@ -117,10 +117,28 @@ public class Sheep extends Animal implements Shearable { +@@ -115,10 +115,28 @@ public class Sheep extends Animal implements Shearable { super(type, world); } @@ -1813,10 +1797,10 @@ index 5c2ed3c39c8eb850f3be1e2ea5b5a7ea266e16d1..d51b486afb83bf3e12046ed5e61e73ee } 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 43b4ea96c5c4a6234e5b83d41db9b85c1fe27b8f..37402f7df48f04a6df2211e079519ed95d3735bc 100644 +index 42f4e544fe7fbc342f15eacb5e38d40849e3c419..fddd8693858f9b1d15b0fddeacc030339ac39c0d 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Squid.java +++ b/src/main/java/net/minecraft/world/entity/animal/Squid.java -@@ -46,9 +46,32 @@ public class Squid extends WaterAnimal { +@@ -45,9 +45,32 @@ public class Squid extends WaterAnimal { this.tentacleSpeed = 1.0F / (this.random.nextFloat() + 1.0F) * 0.2F; } @@ -1849,7 +1833,7 @@ index 43b4ea96c5c4a6234e5b83d41db9b85c1fe27b8f..37402f7df48f04a6df2211e079519ed9 this.goalSelector.addGoal(1, new Squid.SquidFleeGoal()); } -@@ -290,6 +313,37 @@ public class Squid extends WaterAnimal { +@@ -289,6 +312,37 @@ public class Squid extends WaterAnimal { @Override public void tick() { @@ -1911,7 +1895,7 @@ index 3d03ffe2e12eca82dfa2f414471d12bb362d4552..18dcb67d246b63637d8c948b6c3f48c5 return "entity.minecraft.tropical_fish.predefined." + variant; } diff --git a/src/main/java/net/minecraft/world/entity/animal/Turtle.java b/src/main/java/net/minecraft/world/entity/animal/Turtle.java -index 30b87b5cb18c25cdd04eab64cfbe5acd6c1b6d84..4742d90ca38c1d8034b0cfcf7f336e225fade197 100644 +index 4bfa947531c4a67989e18032754dabf4c69e989c..960eaebcb12d32bc51026c48e4b5e09effb66dda 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Turtle.java +++ b/src/main/java/net/minecraft/world/entity/animal/Turtle.java @@ -87,6 +87,23 @@ public class Turtle extends Animal { @@ -1936,7 +1920,7 @@ index 30b87b5cb18c25cdd04eab64cfbe5acd6c1b6d84..4742d90ca38c1d8034b0cfcf7f336e22 + // Purpur end + public void setHomePos(BlockPos pos) { - this.entityData.set(Turtle.HOME_POS, pos.immutable()); // Paper - called with mutablepos... + this.entityData.set(Turtle.HOME_POS, pos); } @@ -189,6 +206,7 @@ public class Turtle extends Animal { @@ -1982,10 +1966,10 @@ index 30b87b5cb18c25cdd04eab64cfbe5acd6c1b6d84..4742d90ca38c1d8034b0cfcf7f336e22 this.turtle.setSpeed(Mth.lerp(0.125F, this.turtle.getSpeed(), f1)); this.turtle.setDeltaMovement(this.turtle.getDeltaMovement().add(0.0D, (double) this.turtle.getSpeed() * d1 * 0.1D, 0.0D)); diff --git a/src/main/java/net/minecraft/world/entity/animal/Wolf.java b/src/main/java/net/minecraft/world/entity/animal/Wolf.java -index cebbb7341f86b13dcbfc3a41cbe264e9d4b68d60..92cc8a9b033052d5f510792d916c60cb2b90f07c 100644 +index c382a8f95f612db881b9cdbd07316d1ca1cd9c4b..1ae38914582cfb17da882304c8bcba84a7793f79 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Wolf.java +++ b/src/main/java/net/minecraft/world/entity/animal/Wolf.java -@@ -124,9 +124,32 @@ public class Wolf extends TamableAnimal implements NeutralMob, VariantHolder(this, Llama.class, 24.0F, 1.5D, 1.5D)); -@@ -138,6 +161,7 @@ public class Wolf extends TamableAnimal implements NeutralMob, VariantHolder brainProvider() { return Brain.provider(Allay.MEMORY_TYPES, Allay.SENSOR_TYPES); -@@ -218,6 +253,7 @@ public class Allay extends PathfinderMob implements InventoryCarrier, VibrationS +@@ -220,6 +255,7 @@ public class Allay extends PathfinderMob implements InventoryCarrier, VibrationS @Override protected void customServerAiStep() { this.level().getProfiler().push("allayBrain"); @@ -2093,10 +2077,10 @@ index 991e3274091c4e25eebc6debd44653e5b566eedb..09502b15c20f401c3b56ecedc4d3b515 this.level().getProfiler().pop(); this.level().getProfiler().push("allayActivityUpdate"); diff --git a/src/main/java/net/minecraft/world/entity/animal/armadillo/Armadillo.java b/src/main/java/net/minecraft/world/entity/animal/armadillo/Armadillo.java -index b38281f963377cc82b360e8457da7cad033b8c36..921b545d1abe74b8301dbd56e39b254a14817f77 100644 +index 792d9039ac0561464c666977ff8308e4c629e5eb..6af72246e7f9bb845a497ef0f3394e634996fd40 100644 --- a/src/main/java/net/minecraft/world/entity/animal/armadillo/Armadillo.java +++ b/src/main/java/net/minecraft/world/entity/animal/armadillo/Armadillo.java -@@ -77,6 +77,23 @@ public class Armadillo extends Animal { +@@ -78,6 +78,23 @@ public class Armadillo extends Animal { return Mob.createMobAttributes().add(Attributes.MAX_HEALTH, 12.0D).add(Attributes.MOVEMENT_SPEED, 0.14D); } @@ -2121,10 +2105,10 @@ index b38281f963377cc82b360e8457da7cad033b8c36..921b545d1abe74b8301dbd56e39b254a protected void defineSynchedData(SynchedEntityData.Builder builder) { super.defineSynchedData(builder); 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 a8cc6ddbf45370fe632e5c5fb7ceef3d299e62a4..045ac081120f65987251d04d1522a5b7197e1d88 100644 +index 01a0731e92d39c8718538244e34a271fb8717fc2..384fb16dac5eede49d89ad9fdcddcec442f0e7ca 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 -@@ -96,6 +96,23 @@ public class Axolotl extends Animal implements LerpingModel, VariantHolder getModelRotationValues() { return this.modelRotationValues; -@@ -271,6 +288,7 @@ public class Axolotl extends Animal implements LerpingModel, VariantHolder type, Level world) { super(type, world); @@ -2421,7 +2405,7 @@ index 9357cf0179d19fbdfe76413e909a99b924c85780..12a137665f93d992094e86327a496057 this.goalSelector.addGoal(1, new PanicGoal(this, 1.2D)); this.goalSelector.addGoal(1, new RunAroundLikeCrazyGoal(this, 1.2D)); this.goalSelector.addGoal(2, new BreedGoal(this, 1.0D, AbstractHorse.class)); -@@ -232,6 +242,7 @@ public abstract class AbstractHorse extends Animal implements ContainerListener, +@@ -234,6 +244,7 @@ public abstract class AbstractHorse extends Animal implements ContainerListener, if (this.canPerformRearing()) { this.goalSelector.addGoal(9, new RandomStandGoal(this)); } @@ -2448,10 +2432,10 @@ index ff02169ba14f5264cea8beaf1779e2890c5d74b8..1febe8e173886d501e40331c12261701 protected SoundEvent getAmbientSound() { return SoundEvents.DONKEY_AMBIENT; diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/Horse.java b/src/main/java/net/minecraft/world/entity/animal/horse/Horse.java -index 6e299770fca78699f7e1988db4cdef37b99d74c1..816c698a81a77f217a606468aa157bdaed779479 100644 +index b1188d05700cafc3a6956171bacde4962d6659be..91bee4729074fdabadd40641050e49ef0d0c760e 100644 --- a/src/main/java/net/minecraft/world/entity/animal/horse/Horse.java +++ b/src/main/java/net/minecraft/world/entity/animal/horse/Horse.java -@@ -44,6 +44,13 @@ public class Horse extends AbstractHorse implements VariantHolder { +@@ -45,6 +45,13 @@ public class Horse extends AbstractHorse implements VariantHolder { super(type, world); } @@ -2466,7 +2450,7 @@ index 6e299770fca78699f7e1988db4cdef37b99d74c1..816c698a81a77f217a606468aa157bda protected void randomizeAttributes(RandomSource random) { this.getAttribute(Attributes.MAX_HEALTH).setBaseValue((double)generateMaxHealth(random::nextInt)); 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 36d654073ab4058db54830d9447d7d959a0b25f1..1564d1327e4b735461e41a7a876f63a9943d2675 100644 +index cf6a3a63b6f2b96943c0f399e8c82d293fee31ba..b339f61e15f29666ca7ff2d820bc22723738f422 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 @@ -79,7 +79,51 @@ public class Llama extends AbstractChestedHorse implements VariantHolder public - super.jumpFromGround(); - double d0 = this.moveControl.getSpeedModifier(); - diff --git a/src/main/java/net/minecraft/world/entity/boss/EnderDragonPart.java b/src/main/java/net/minecraft/world/entity/boss/EnderDragonPart.java -index 6725013c608e9321ce0d088059672af4412cf6db..1c8ac6b9603a6e282c5bbe8cdcc61046c9efe41e 100644 +index ca4486844a3125626e949d26fa03c325ef33343f..677ef269bb1206254d000cdbe621bfd926bddd4f 100644 --- a/src/main/java/net/minecraft/world/entity/boss/EnderDragonPart.java +++ b/src/main/java/net/minecraft/world/entity/boss/EnderDragonPart.java -@@ -25,6 +25,13 @@ public class EnderDragonPart extends Entity { +@@ -26,6 +26,13 @@ public class EnderDragonPart extends Entity { this.name = name; } @@ -2704,10 +2679,10 @@ index 6725013c608e9321ce0d088059672af4412cf6db..1c8ac6b9603a6e282c5bbe8cdcc61046 protected void defineSynchedData(SynchedEntityData.Builder builder) { } diff --git a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java -index 0e797e2714a2fd103cbd51548764577fd9b6412d..14ac30d43eaa550eef1b0c339de2034c51e28d9d 100644 +index 4d2fbade3a01ca26ff107f1323ae23db6dad8ef8..bc2bcae9e18f76c2db1a75b4db9bd9874b9f79cf 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 -@@ -106,6 +106,7 @@ public class EnderDragon extends Mob implements Enemy { +@@ -107,6 +107,7 @@ public class EnderDragon extends Mob implements Enemy { @Nullable private BlockPos podium; // Paper end - Allow changing the EnderDragon podium @@ -2715,7 +2690,7 @@ index 0e797e2714a2fd103cbd51548764577fd9b6412d..14ac30d43eaa550eef1b0c339de2034c public EnderDragon(EntityType entitytypes, Level world) { super(EntityType.ENDER_DRAGON, world); -@@ -128,6 +129,37 @@ public class EnderDragon extends Mob implements Enemy { +@@ -129,6 +130,37 @@ 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, ParticleTypes.EXPLOSION, ParticleTypes.EXPLOSION_EMITTER, SoundEvents.GENERIC_EXPLODE); // CraftBukkit @@ -2753,7 +2728,7 @@ index 0e797e2714a2fd103cbd51548764577fd9b6412d..14ac30d43eaa550eef1b0c339de2034c } public void setDragonFight(EndDragonFight fight) { -@@ -142,6 +174,17 @@ public class EnderDragon extends Mob implements Enemy { +@@ -143,6 +175,17 @@ public class EnderDragon extends Mob implements Enemy { return this.fightOrigin; } @@ -2771,7 +2746,7 @@ index 0e797e2714a2fd103cbd51548764577fd9b6412d..14ac30d43eaa550eef1b0c339de2034c public static AttributeSupplier.Builder createAttributes() { return Mob.createMobAttributes().add(Attributes.MAX_HEALTH, 200.0D); } -@@ -203,6 +246,37 @@ public class EnderDragon extends Mob implements Enemy { +@@ -204,6 +247,37 @@ public class EnderDragon extends Mob implements Enemy { @Override public void aiStep() { @@ -2809,7 +2784,7 @@ index 0e797e2714a2fd103cbd51548764577fd9b6412d..14ac30d43eaa550eef1b0c339de2034c this.processFlappingMovement(); if (this.level().isClientSide) { this.setHealth(this.getHealth()); -@@ -229,6 +303,8 @@ public class EnderDragon extends Mob implements Enemy { +@@ -230,6 +304,8 @@ public class EnderDragon extends Mob implements Enemy { float f; if (this.isDeadOrDying()) { @@ -2818,7 +2793,7 @@ index 0e797e2714a2fd103cbd51548764577fd9b6412d..14ac30d43eaa550eef1b0c339de2034c float f1 = (this.random.nextFloat() - 0.5F) * 8.0F; f = (this.random.nextFloat() - 0.5F) * 4.0F; -@@ -241,9 +317,9 @@ public class EnderDragon extends Mob implements Enemy { +@@ -242,9 +318,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); @@ -2830,7 +2805,7 @@ index 0e797e2714a2fd103cbd51548764577fd9b6412d..14ac30d43eaa550eef1b0c339de2034c this.flapTime += f * 0.5F; } else { this.flapTime += f; -@@ -277,7 +353,7 @@ public class EnderDragon extends Mob implements Enemy { +@@ -278,7 +354,7 @@ public class EnderDragon extends Mob implements Enemy { } this.phaseManager.getCurrentPhase().doClientTick(); @@ -2839,16 +2814,16 @@ index 0e797e2714a2fd103cbd51548764577fd9b6412d..14ac30d43eaa550eef1b0c339de2034c DragonPhaseInstance idragoncontroller = this.phaseManager.getCurrentPhase(); idragoncontroller.doServerTick(); -@@ -346,7 +422,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)); -- if (!this.level().isClientSide && this.hurtTime == 0) { -+ if (!hasRider && !this.level().isClientSide && this.hurtTime == 0) { // Purpur - 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)); -@@ -390,7 +466,7 @@ public class EnderDragon extends Mob implements Enemy { +@@ -352,7 +428,7 @@ public class EnderDragon extends Mob implements Enemy { + if (world1 instanceof ServerLevel) { + ServerLevel worldserver1 = (ServerLevel) world1; + +- if (this.hurtTime == 0) { ++ if (!hasRider && this.hurtTime == 0) { // Purpur + this.knockBack(worldserver1, worldserver1.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(worldserver1, worldserver1.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(worldserver1.getEntities((Entity) this, this.head.getBoundingBox().inflate(1.0D), EntitySelector.NO_CREATIVE_OR_SPECTATOR)); +@@ -397,7 +473,7 @@ public class EnderDragon extends Mob implements Enemy { } if (!this.level().isClientSide) { @@ -2858,7 +2833,7 @@ index 0e797e2714a2fd103cbd51548764577fd9b6412d..14ac30d43eaa550eef1b0c339de2034c 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 7ddca52f7fe3f289b4b867e134326b1ead1a2aee..14f9ded1b44d05d69f1a9394fdacab5b145e4c45 100644 +index d3b4d492aee380dc17f4232d90eaae4f07bb9f86..57a91dc073739b81d5acb973bf8c9c74a4a825cd 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 @@ -88,16 +88,30 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob @@ -3039,10 +3014,10 @@ index 7ddca52f7fe3f289b4b867e134326b1ead1a2aee..14f9ded1b44d05d69f1a9394fdacab5b @Override diff --git a/src/main/java/net/minecraft/world/entity/monster/AbstractSkeleton.java b/src/main/java/net/minecraft/world/entity/monster/AbstractSkeleton.java -index 0c5fe46d2da113beff3e220843593d616e37d4ca..8f71739a4b23bc53994f1cbff8500b6bad288a42 100644 +index 3b5cf6ffb74d11bea5eb21bd66d679734ff5000c..5c1aa5859ac411098054be9f52bac0860ee667a5 100644 --- a/src/main/java/net/minecraft/world/entity/monster/AbstractSkeleton.java +++ b/src/main/java/net/minecraft/world/entity/monster/AbstractSkeleton.java -@@ -69,12 +69,14 @@ public abstract class AbstractSkeleton extends Monster implements RangedAttackMo +@@ -70,12 +70,14 @@ public abstract class AbstractSkeleton extends Monster implements RangedAttackMo @Override protected void registerGoals() { @@ -3058,7 +3033,7 @@ index 0c5fe46d2da113beff3e220843593d616e37d4ca..8f71739a4b23bc53994f1cbff8500b6b this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true)); this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, IronGolem.class, true)); diff --git a/src/main/java/net/minecraft/world/entity/monster/Blaze.java b/src/main/java/net/minecraft/world/entity/monster/Blaze.java -index aee2fa184bc5723dfd3d54f460a173982d874c8b..0e1aa9a00284ce43436b1290f9ebe243c4d09fdc 100644 +index 61004bb35b0edcc4578b8a9c1b280096466ba279..d4aac30f9c9b356cec9fc1450a9e684faf030391 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Blaze.java +++ b/src/main/java/net/minecraft/world/entity/monster/Blaze.java @@ -32,6 +32,7 @@ public class Blaze extends Monster { @@ -3141,7 +3116,7 @@ index aee2fa184bc5723dfd3d54f460a173982d874c8b..0e1aa9a00284ce43436b1290f9ebe243 if (this.nextHeightOffsetChangeTick <= 0) { this.nextHeightOffsetChangeTick = 100; diff --git a/src/main/java/net/minecraft/world/entity/monster/Bogged.java b/src/main/java/net/minecraft/world/entity/monster/Bogged.java -index e9f9b041ae7195e9d23bd446454b1d8c47a1ace1..a01b87f4adcb868d3cc5c24f2423f58d96ebf7fa 100644 +index 6e290d67b00c88ecd2cf2ce5f612f52ebda9e280..3fc3ab534b00f26cf2f1a79c20909f25021164a1 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Bogged.java +++ b/src/main/java/net/minecraft/world/entity/monster/Bogged.java @@ -45,6 +45,23 @@ public class Bogged extends AbstractSkeleton implements Shearable { @@ -3197,7 +3172,7 @@ index 87e4b300ac248f6c13d9b4a8f24fd78b24b565b4..504996c8309fcd11de1dd166dee12d7e public boolean doHurtTarget(Entity target) { if (super.doHurtTarget(target)) { diff --git a/src/main/java/net/minecraft/world/entity/monster/Creeper.java b/src/main/java/net/minecraft/world/entity/monster/Creeper.java -index 0ae4ba060b2ce2c79e1235c939f3c1926eb6e33e..cd4da06183fa84e3aa7567866b28ad915eadafe6 100644 +index cb1b19e2e0d8f0744b2355b8f4da0206b196b19c..bc9db0ebd4280fe4dcb43bc47d5b7fc1f831394b 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Creeper.java +++ b/src/main/java/net/minecraft/world/entity/monster/Creeper.java @@ -61,21 +61,98 @@ public class Creeper extends Monster implements PowerableMob { @@ -3299,7 +3274,7 @@ index 0ae4ba060b2ce2c79e1235c939f3c1926eb6e33e..cd4da06183fa84e3aa7567866b28ad91 this.targetSelector.addGoal(1, new NearestAttackableTargetGoal<>(this, Player.class, true)); this.targetSelector.addGoal(2, new HurtByTargetGoal(this, new Class[0])); } -@@ -323,6 +400,7 @@ public class Creeper extends Monster implements PowerableMob { +@@ -324,6 +401,7 @@ public class Creeper extends Monster implements PowerableMob { com.destroystokyo.paper.event.entity.CreeperIgniteEvent event = new com.destroystokyo.paper.event.entity.CreeperIgniteEvent((org.bukkit.entity.Creeper) getBukkitEntity(), ignited); if (event.callEvent()) { this.entityData.set(Creeper.DATA_IS_IGNITED, event.isIgnited()); @@ -3396,10 +3371,10 @@ index fd995b1f29c47884e9db2cb92f1dd615d62ae032..430899602940aa04c21d45ae94bcc506 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 260202fab3ac300552c557b44dcf251f083c6a78..0c1e3b00bdc1e6b033e6e9e37400a475cee2500e 100644 +index 828c51477cd8f35d591367b30bf4feef6a250292..d77e4a354983b6d6c4d5bbc37d886193af396dff 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java +++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java -@@ -93,9 +93,27 @@ public class EnderMan extends Monster implements NeutralMob { +@@ -95,9 +95,27 @@ public class EnderMan extends Monster implements NeutralMob { this.setPathfindingMalus(PathType.WATER, -1.0F); } @@ -3427,7 +3402,7 @@ index 260202fab3ac300552c557b44dcf251f083c6a78..0c1e3b00bdc1e6b033e6e9e37400a475 this.goalSelector.addGoal(1, new EnderMan.EndermanFreezeWhenLookedAt(this)); this.goalSelector.addGoal(2, new MeleeAttackGoal(this, 1.0D, false)); this.goalSelector.addGoal(7, new WaterAvoidingRandomStrollGoal(this, 1.0D, 0.0F)); -@@ -103,6 +121,7 @@ public class EnderMan extends Monster implements NeutralMob { +@@ -105,6 +123,7 @@ public class EnderMan extends Monster implements NeutralMob { this.goalSelector.addGoal(8, new RandomLookAroundGoal(this)); this.goalSelector.addGoal(10, new EnderMan.EndermanLeaveBlockGoal(this)); this.goalSelector.addGoal(11, new EnderMan.EndermanTakeBlockGoal(this)); @@ -3435,7 +3410,7 @@ index 260202fab3ac300552c557b44dcf251f083c6a78..0c1e3b00bdc1e6b033e6e9e37400a475 this.targetSelector.addGoal(1, new EnderMan.EndermanLookForPlayerGoal(this, this::isAngryAt)); this.targetSelector.addGoal(2, new HurtByTargetGoal(this, new Class[0])); this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, Endermite.class, true, false)); -@@ -279,7 +298,7 @@ public class EnderMan extends Monster implements NeutralMob { +@@ -281,7 +300,7 @@ public class EnderMan extends Monster implements NeutralMob { @Override protected void customServerAiStep() { @@ -3444,7 +3419,7 @@ index 260202fab3ac300552c557b44dcf251f083c6a78..0c1e3b00bdc1e6b033e6e9e37400a475 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 - EndermanEscapeEvent -@@ -394,6 +413,7 @@ public class EnderMan extends Monster implements NeutralMob { +@@ -396,6 +415,7 @@ public class EnderMan extends Monster implements NeutralMob { public boolean hurt(DamageSource source, float amount) { if (this.isInvulnerableTo(source)) { return false; @@ -3491,7 +3466,7 @@ index 9c78905762d9a484878fa9cf03a2ca3850e7e613..ee88933c7baba3bc82c6dc9d52291d5f 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 38e866571c35ebc4843a8d4fa39691902a5fcc91..0d1931398f1f6bad941ff133a0d872ffabb00bd3 100644 +index 627cf7ba8f512285228121e46208fff51f22b563..fb2409536741e814f20fa6793003c38ed898e443 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Evoker.java +++ b/src/main/java/net/minecraft/world/entity/monster/Evoker.java @@ -52,10 +52,28 @@ public class Evoker extends SpellcasterIllager { @@ -3532,7 +3507,7 @@ index 38e866571c35ebc4843a8d4fa39691902a5fcc91..0d1931398f1f6bad941ff133a0d872ff this.targetSelector.addGoal(2, (new NearestAttackableTargetGoal<>(this, Player.class, true)).setUnseenMemoryTicks(300)); this.targetSelector.addGoal(3, (new NearestAttackableTargetGoal<>(this, AbstractVillager.class, false)).setUnseenMemoryTicks(300)); diff --git a/src/main/java/net/minecraft/world/entity/monster/Ghast.java b/src/main/java/net/minecraft/world/entity/monster/Ghast.java -index 373a4f036157017b0d95e8f1849780582235a549..862ad83b536fd0b5eb38ac0f2940cc46aed1fba2 100644 +index a836a902bebf318ceabaed4e98fab1141b46a28b..24384a8bba59d335949ca641f8b2b599f769b316 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Ghast.java +++ b/src/main/java/net/minecraft/world/entity/monster/Ghast.java @@ -43,11 +43,47 @@ public class Ghast extends FlyingMob implements Enemy { @@ -3645,7 +3620,7 @@ index 118521ae54254b0a73bb7cba7b2871c9c26f89fc..868e8383a890d76b4cfeac8b77b06e8f return Monster.createMonsterAttributes().add(Attributes.MAX_HEALTH, 100.0).add(Attributes.MOVEMENT_SPEED, 0.5).add(Attributes.ATTACK_DAMAGE, 50.0); } 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 6c2e2fd5826a5f8070502e20d1d140c3d70bd0d3..9a1b1a1b0b6d59d599a2ab87f047121f47cf2bec 100644 +index 5df07b59ff6e39687e361d89d7764381ca3ce9ca..8fd7d578c4875ab1d6059dc445734e378c82b40f 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Guardian.java +++ b/src/main/java/net/minecraft/world/entity/monster/Guardian.java @@ -66,15 +66,36 @@ public class Guardian extends Monster { @@ -3768,10 +3743,10 @@ index c34c8483a026f61fe20935697d321d7ef5d8dfbc..20ea3187626a667815245974df88189f 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 a7964208c952cb4e34916ae6523850fc3921b07e..bef63bb69ea81298a1021eadd6c260943e18eba7 100644 +index c858556ea457931aa14e338e20672cb50cb19f0e..58e9bf99ace27a59df56a378e25d9156e71aa313 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Illusioner.java +++ b/src/main/java/net/minecraft/world/entity/monster/Illusioner.java -@@ -56,10 +56,28 @@ public class Illusioner extends SpellcasterIllager implements RangedAttackMob { +@@ -57,10 +57,28 @@ public class Illusioner extends SpellcasterIllager implements RangedAttackMob { } @@ -3800,7 +3775,7 @@ index a7964208c952cb4e34916ae6523850fc3921b07e..bef63bb69ea81298a1021eadd6c26094 this.goalSelector.addGoal(1, new SpellcasterIllager.SpellcasterCastingSpellGoal()); this.goalSelector.addGoal(4, new Illusioner.IllusionerMirrorSpellGoal()); this.goalSelector.addGoal(5, new Illusioner.IllusionerBlindnessSpellGoal()); -@@ -67,6 +85,7 @@ public class Illusioner extends SpellcasterIllager implements RangedAttackMob { +@@ -68,6 +86,7 @@ public class Illusioner extends SpellcasterIllager implements RangedAttackMob { 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)); @@ -3809,7 +3784,7 @@ index a7964208c952cb4e34916ae6523850fc3921b07e..bef63bb69ea81298a1021eadd6c26094 this.targetSelector.addGoal(2, (new NearestAttackableTargetGoal<>(this, Player.class, true)).setUnseenMemoryTicks(300)); this.targetSelector.addGoal(3, (new NearestAttackableTargetGoal<>(this, AbstractVillager.class, false)).setUnseenMemoryTicks(300)); diff --git a/src/main/java/net/minecraft/world/entity/monster/MagmaCube.java b/src/main/java/net/minecraft/world/entity/monster/MagmaCube.java -index 7be2393dc3cb79556d9767b09f43be0f81308a12..6a03a5f1c209d248207b6835ba1d7c0f59dec557 100644 +index d85a1587a11e735b97107c53ac540cdbe2923ed0..d8501995801f636173a46481268d602f028dd034 100644 --- a/src/main/java/net/minecraft/world/entity/monster/MagmaCube.java +++ b/src/main/java/net/minecraft/world/entity/monster/MagmaCube.java @@ -24,6 +24,28 @@ public class MagmaCube extends Slime { @@ -3841,13 +3816,7 @@ index 7be2393dc3cb79556d9767b09f43be0f81308a12..6a03a5f1c209d248207b6835ba1d7c0f public static AttributeSupplier.Builder createAttributes() { return Monster.createMonsterAttributes().add(Attributes.MOVEMENT_SPEED, 0.2F); } -@@ -64,11 +86,12 @@ public class MagmaCube extends Slime { - } - - @Override -- protected void jumpFromGround() { -+ public void jumpFromGround() { // Purpur - protected -> public - Vec3 vec3 = this.getDeltaMovement(); +@@ -69,6 +91,7 @@ public class MagmaCube extends Slime { float f = (float)this.getSize() * 0.1F; this.setDeltaMovement(vec3.x, (double)(this.getJumpPower() + f), vec3.z); this.hasImpulse = true; @@ -3856,7 +3825,7 @@ index 7be2393dc3cb79556d9767b09f43be0f81308a12..6a03a5f1c209d248207b6835ba1d7c0f @Override diff --git a/src/main/java/net/minecraft/world/entity/monster/Phantom.java b/src/main/java/net/minecraft/world/entity/monster/Phantom.java -index 68f8945292753535a3b73acb9f48c1594f0789a4..03c873b830f45d848af076ac7921fc4d019f69c8 100644 +index c277dac448a64809e93dd7a447ee3dc2a86c860e..e02992d97f552ecc8ce48e0c2e981d771dfabf19 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Phantom.java +++ b/src/main/java/net/minecraft/world/entity/monster/Phantom.java @@ -59,6 +59,64 @@ public class Phantom extends FlyingMob implements Enemy { @@ -3941,7 +3910,7 @@ index 68f8945292753535a3b73acb9f48c1594f0789a4..03c873b830f45d848af076ac7921fc4d public void aiStep() { if (this.isAlive() && this.shouldBurnInDay && this.isSunBurnTick()) { // Paper - shouldBurnInDay API + if (getRider() == null || !this.isControllable()) // Purpur - this.igniteForSeconds(8); + this.igniteForSeconds(8.0F); } @@ -254,7 +315,7 @@ public class Phantom extends FlyingMob implements Enemy { @@ -3998,10 +3967,10 @@ index 68f8945292753535a3b73acb9f48c1594f0789a4..03c873b830f45d848af076ac7921fc4d private class PhantomBodyRotationControl extends BodyRotationControl { diff --git a/src/main/java/net/minecraft/world/entity/monster/Pillager.java b/src/main/java/net/minecraft/world/entity/monster/Pillager.java -index ac411202c0029052a962b51b015da191b124de5f..6bfe582390dcb6111dcaf8325bd2773b9f5fd6a9 100644 +index 4b4dcee6abe7a6db43638d04665125eec560496e..adacd02cabde55a305b3643b6060f1792e122b1c 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Pillager.java +++ b/src/main/java/net/minecraft/world/entity/monster/Pillager.java -@@ -58,15 +58,34 @@ public class Pillager extends AbstractIllager implements CrossbowAttackMob, Inve +@@ -62,15 +62,34 @@ public class Pillager extends AbstractIllager implements CrossbowAttackMob, Inve super(type, world); } @@ -4037,10 +4006,10 @@ index ac411202c0029052a962b51b015da191b124de5f..6bfe582390dcb6111dcaf8325bd2773b this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true)); this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, AbstractVillager.class, false)); diff --git a/src/main/java/net/minecraft/world/entity/monster/Ravager.java b/src/main/java/net/minecraft/world/entity/monster/Ravager.java -index 2d7b7c949faaaaae94c0043132a4a822f55df104..1248a48c0146258d14efcaa805a82ce1a79c623d 100644 +index 212d341425c0f93bba0376de69bea61ffcf4dbd6..9af3d05206ae64cfffbfb3fa89318e6184469204 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Ravager.java +++ b/src/main/java/net/minecraft/world/entity/monster/Ravager.java -@@ -68,14 +68,39 @@ public class Ravager extends Raider { +@@ -69,14 +69,39 @@ public class Ravager extends Raider { this.setPathfindingMalus(PathType.LEAVES, 0.0F); } @@ -4080,7 +4049,7 @@ index 2d7b7c949faaaaae94c0043132a4a822f55df104..1248a48c0146258d14efcaa805a82ce1 this.targetSelector.addGoal(2, (new HurtByTargetGoal(this, new Class[]{Raider.class})).setAlertOthers()); this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, Player.class, true)); this.targetSelector.addGoal(4, new NearestAttackableTargetGoal<>(this, AbstractVillager.class, true, (entityliving) -> { -@@ -128,7 +153,7 @@ public class Ravager extends Raider { +@@ -129,7 +154,7 @@ public class Ravager extends Raider { @Override public void aiStep() { super.aiStep(); @@ -4090,7 +4059,7 @@ index 2d7b7c949faaaaae94c0043132a4a822f55df104..1248a48c0146258d14efcaa805a82ce1 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 e03119f88719c8d6d44793a6b3706ae97b2da307..803a5c71f7712ac004990419131757d17ad685bf 100644 +index 920c7a92643e83598f39bf984cca430d9deed2cd..f36ccb36753d1b1a6c7706729e598078f4467644 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, true)); } diff --git a/src/main/java/net/minecraft/world/entity/monster/Skeleton.java b/src/main/java/net/minecraft/world/entity/monster/Skeleton.java -index 5642bddc8268d70e5bb5446b65be1d8ce34feb9b..2f4f38fe7b7640b6658884b826d7f7a335370bd3 100644 +index cee42ae2b75c29c89e7fc5b1c77d3b45ce40e9ba..8b40824f974bba1dae9166c2425be3d5d74a5ffd 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Skeleton.java +++ b/src/main/java/net/minecraft/world/entity/monster/Skeleton.java -@@ -26,6 +26,23 @@ public class Skeleton extends AbstractSkeleton { +@@ -27,6 +27,23 @@ public class Skeleton extends AbstractSkeleton { super(type, world); } @@ -4201,10 +4170,10 @@ index 5642bddc8268d70e5bb5446b65be1d8ce34feb9b..2f4f38fe7b7640b6658884b826d7f7a3 protected void defineSynchedData(SynchedEntityData.Builder builder) { super.defineSynchedData(builder); diff --git a/src/main/java/net/minecraft/world/entity/monster/Slime.java b/src/main/java/net/minecraft/world/entity/monster/Slime.java -index f223e78eb1204bbf5f2de38a7ce5b663800f7dc4..2c73e80d916529cb0433846a2e57bc845bf7f3d4 100644 +index adebb66e550f805f444bec22e9a4dd575a642b43..d34892ac85b08f017221c5bb98c7442a8017afbe 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Slime.java +++ b/src/main/java/net/minecraft/world/entity/monster/Slime.java -@@ -61,6 +61,7 @@ public class Slime extends Mob implements Enemy { +@@ -63,6 +63,7 @@ public class Slime extends Mob implements Enemy { public float squish; public float oSquish; private boolean wasOnGround; @@ -4212,7 +4181,7 @@ index f223e78eb1204bbf5f2de38a7ce5b663800f7dc4..2c73e80d916529cb0433846a2e57bc84 public Slime(EntityType type, Level world) { super(type, world); -@@ -68,12 +69,48 @@ public class Slime extends Mob implements Enemy { +@@ -70,12 +71,48 @@ public class Slime extends Mob implements Enemy { this.moveControl = new Slime.SlimeMoveControl(this); } @@ -4261,13 +4230,7 @@ index f223e78eb1204bbf5f2de38a7ce5b663800f7dc4..2c73e80d916529cb0433846a2e57bc84 this.targetSelector.addGoal(1, new NearestAttackableTargetGoal<>(this, Player.class, 10, true, false, (entityliving) -> { return Math.abs(entityliving.getY() - this.getY()) <= 4.0D; })); -@@ -382,11 +419,12 @@ public class Slime extends Mob implements Enemy { - } - - @Override -- protected void jumpFromGround() { -+ public void jumpFromGround() { // Purpur - protected -> public - Vec3 vec3d = this.getDeltaMovement(); +@@ -395,6 +432,7 @@ public class Slime extends Mob implements Enemy { this.setDeltaMovement(vec3d.x, (double) this.getJumpPower(), vec3d.z); this.hasImpulse = true; @@ -4275,7 +4238,7 @@ index f223e78eb1204bbf5f2de38a7ce5b663800f7dc4..2c73e80d916529cb0433846a2e57bc84 } @Nullable -@@ -420,7 +458,7 @@ public class Slime extends Mob implements Enemy { +@@ -428,7 +466,7 @@ public class Slime extends Mob implements Enemy { return super.getDefaultDimensions(pose).scale((float) this.getSize()); } @@ -4284,7 +4247,7 @@ index f223e78eb1204bbf5f2de38a7ce5b663800f7dc4..2c73e80d916529cb0433846a2e57bc84 private float yRot; private int jumpDelay; -@@ -439,21 +477,33 @@ public class Slime extends Mob implements Enemy { +@@ -447,21 +485,33 @@ public class Slime extends Mob implements Enemy { } public void setWantedMovement(double speed) { @@ -4321,7 +4284,7 @@ index f223e78eb1204bbf5f2de38a7ce5b663800f7dc4..2c73e80d916529cb0433846a2e57bc84 if (this.jumpDelay-- <= 0) { this.jumpDelay = this.slime.getJumpDelay(); if (this.isAggressive) { -@@ -470,7 +520,7 @@ public class Slime extends Mob implements Enemy { +@@ -478,7 +528,7 @@ public class Slime extends Mob implements Enemy { this.mob.setSpeed(0.0F); } } else { @@ -4331,7 +4294,7 @@ index f223e78eb1204bbf5f2de38a7ce5b663800f7dc4..2c73e80d916529cb0433846a2e57bc84 } diff --git a/src/main/java/net/minecraft/world/entity/monster/Spider.java b/src/main/java/net/minecraft/world/entity/monster/Spider.java -index fa0316e9d2a4cf213982994dc8bf310299cca984..87f63373ccef3de9ce77a92933ff332be4fd6305 100644 +index e675f1e3e5b6f9e1aa0d928ebb9abe76458edb38..93d7cd8fe60b0c0bc3620bca2fe2cfbbee2e9421 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Spider.java +++ b/src/main/java/net/minecraft/world/entity/monster/Spider.java @@ -51,9 +51,27 @@ public class Spider extends Monster { @@ -4371,10 +4334,10 @@ index fa0316e9d2a4cf213982994dc8bf310299cca984..87f63373ccef3de9ce77a92933ff332b 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 207a649d737adff440bd3f7cba15b0dbca338a35..44006bcb7d70661a6990e3fc4375dd6da34517e0 100644 +index 1b8ab3f1090ea78bdba97265e05576c9a3e2deb3..c47fb4577d31583806584dffe2b0b7674c5565af 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 { +@@ -22,6 +22,23 @@ public class Stray extends AbstractSkeleton { super(type, world); } @@ -4399,7 +4362,7 @@ index 207a649d737adff440bd3f7cba15b0dbca338a35..44006bcb7d70661a6990e3fc4375dd6d BlockPos blockPos = pos; diff --git a/src/main/java/net/minecraft/world/entity/monster/Strider.java b/src/main/java/net/minecraft/world/entity/monster/Strider.java -index fe85900a610afd0b237d8b5a164181c03afbdfc7..7e5ad9d52db7a39be60e0b2f24e13e8ed82785e1 100644 +index 2c5bfad3c1ae9a19b4762831a3abdd5e89ba24b3..cc8a169858709cf3c63bd4973018b4c40429784a 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Strider.java +++ b/src/main/java/net/minecraft/world/entity/monster/Strider.java @@ -97,6 +97,23 @@ public class Strider extends Animal implements ItemSteerable, Saddleable { @@ -4444,7 +4407,7 @@ index fe85900a610afd0b237d8b5a164181c03afbdfc7..7e5ad9d52db7a39be60e0b2f24e13e8e 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 fd3b37dde54623ba38186efb2a64d364c86b81d2..98c9d7080595a5d9ffa3d65a153780b68aec0e47 100644 +index 2985296a9a034e535157f55e322fc8c107827752..34e88c071b5cedf0a66d5a81e70cccdb0768962e 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Vex.java +++ b/src/main/java/net/minecraft/world/entity/monster/Vex.java @@ -60,6 +60,50 @@ public class Vex extends Monster implements TraceableEntity { @@ -4555,10 +4518,10 @@ index fd3b37dde54623ba38186efb2a64d364c86b81d2..98c9d7080595a5d9ffa3d65a153780b6 Vec3 vec3d1 = Vex.this.getDeltaMovement(); diff --git a/src/main/java/net/minecraft/world/entity/monster/Vindicator.java b/src/main/java/net/minecraft/world/entity/monster/Vindicator.java -index b3da310d6fd1d533da805c38c2f449cf06d01492..c6d12c939cd3fbd9facf88cdc0c7c51744089484 100644 +index 0615bb305d70f660a6baa7f78078990d6db227d3..fa7af386c89f5f9181d345191dc545674a257996 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Vindicator.java +++ b/src/main/java/net/minecraft/world/entity/monster/Vindicator.java -@@ -50,14 +50,33 @@ public class Vindicator extends AbstractIllager { +@@ -53,14 +53,33 @@ public class Vindicator extends AbstractIllager { super(type, world); } @@ -4593,10 +4556,10 @@ index b3da310d6fd1d533da805c38c2f449cf06d01492..c6d12c939cd3fbd9facf88cdc0c7c517 this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true)); this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, AbstractVillager.class, true)); diff --git a/src/main/java/net/minecraft/world/entity/monster/Witch.java b/src/main/java/net/minecraft/world/entity/monster/Witch.java -index 5803c1d36b769f0186baa0665976749765b4cb61..b5f44495f0a384c8a7d8d96e3a0f16999fba86fe 100644 +index b8ff1e3d280171378fe383bcc7c6a855d20ae5d1..cd299591c00c1860b252c7abfdd2afa2abcbd537 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Witch.java +++ b/src/main/java/net/minecraft/world/entity/monster/Witch.java -@@ -55,6 +55,23 @@ public class Witch extends Raider implements RangedAttackMob { +@@ -56,6 +56,23 @@ public class Witch extends Raider implements RangedAttackMob { super(type, world); } @@ -4620,7 +4583,7 @@ index 5803c1d36b769f0186baa0665976749765b4cb61..b5f44495f0a384c8a7d8d96e3a0f1699 @Override protected void registerGoals() { super.registerGoals(); -@@ -63,10 +80,12 @@ public class Witch extends Raider implements RangedAttackMob { +@@ -64,10 +81,12 @@ public class Witch extends Raider implements RangedAttackMob { }); this.attackPlayersGoal = new NearestAttackableWitchTargetGoal<>(this, Player.class, 10, true, false, (Predicate) null); this.goalSelector.addGoal(1, new FloatGoal(this)); @@ -4634,10 +4597,10 @@ index 5803c1d36b769f0186baa0665976749765b4cb61..b5f44495f0a384c8a7d8d96e3a0f1699 this.targetSelector.addGoal(2, this.healRaidersGoal); this.targetSelector.addGoal(3, this.attackPlayersGoal); diff --git a/src/main/java/net/minecraft/world/entity/monster/WitherSkeleton.java b/src/main/java/net/minecraft/world/entity/monster/WitherSkeleton.java -index 3f1191795e58f31b7e2fe34ef2774df13b9a789f..355ed17da77256c84d8ba7d4d99b5c73d729a48d 100644 +index bb2e7cee612dc1fafa042674a0b0d07d7165b54c..09f7277283bf6ec44d3f1cc068893e0e1155eb61 100644 --- a/src/main/java/net/minecraft/world/entity/monster/WitherSkeleton.java +++ b/src/main/java/net/minecraft/world/entity/monster/WitherSkeleton.java -@@ -32,6 +32,23 @@ public class WitherSkeleton extends AbstractSkeleton { +@@ -33,6 +33,23 @@ public class WitherSkeleton extends AbstractSkeleton { this.setPathfindingMalus(PathType.LAVA, 8.0F); } @@ -4662,10 +4625,10 @@ index 3f1191795e58f31b7e2fe34ef2774df13b9a789f..355ed17da77256c84d8ba7d4d99b5c73 protected void registerGoals() { this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, AbstractPiglin.class, true)); diff --git a/src/main/java/net/minecraft/world/entity/monster/Zoglin.java b/src/main/java/net/minecraft/world/entity/monster/Zoglin.java -index cfdb2b793f11544ec5e2d1e726134089994b2b0f..2cb65bc3e2a2f990f4036f4f0418d9cd5226381e 100644 +index aa458ede5bd645ebf524238179edb33f41bd683f..e683b14ed7bc0284fbbe93dedf6ab8c0423e0764 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Zoglin.java +++ b/src/main/java/net/minecraft/world/entity/monster/Zoglin.java -@@ -80,6 +80,23 @@ public class Zoglin extends Monster implements Enemy, HoglinBase { +@@ -79,6 +79,23 @@ public class Zoglin extends Monster implements Enemy, HoglinBase { this.xpReward = 5; } @@ -4689,7 +4652,7 @@ index cfdb2b793f11544ec5e2d1e726134089994b2b0f..2cb65bc3e2a2f990f4036f4f0418d9cd @Override protected Brain.Provider brainProvider() { return Brain.provider(MEMORY_TYPES, SENSOR_TYPES); -@@ -235,6 +252,7 @@ public class Zoglin extends Monster implements Enemy, HoglinBase { +@@ -234,6 +251,7 @@ public class Zoglin extends Monster implements Enemy, HoglinBase { @Override protected void customServerAiStep() { this.level().getProfiler().push("zoglinBrain"); @@ -4698,10 +4661,10 @@ index cfdb2b793f11544ec5e2d1e726134089994b2b0f..2cb65bc3e2a2f990f4036f4f0418d9cd 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 e42dfc62bb179be1ab01b0096c05c6549d38abbc..7c78b243164a517818565845b1a6c7d40c8839d8 100644 +index 2280004638fd19ed018cb3e77d53a018b34ec516..ba630beb18830e92432669f643dfd4cf8d2386fb 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Zombie.java +++ b/src/main/java/net/minecraft/world/entity/monster/Zombie.java -@@ -104,11 +104,30 @@ public class Zombie extends Monster { +@@ -108,11 +108,30 @@ public class Zombie extends Monster { this(EntityType.ZOMBIE, world); } @@ -4733,10 +4696,10 @@ index e42dfc62bb179be1ab01b0096c05c6549d38abbc..7c78b243164a517818565845b1a6c7d4 } diff --git a/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java b/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java -index f38acc96f71298e40ce9433e7759fd223ca55e48..cc3d9f47ef6d1efa589c8bed5c51ed9e61d7c07d 100644 +index e0dabbf6d7a87b8722769c78ef0d2ba4353ed2cb..778edd9a723459ae41f521e953ea97eeac123c5f 100644 --- a/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java +++ b/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java -@@ -80,6 +80,23 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { +@@ -83,6 +83,23 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { }); } @@ -4761,10 +4724,10 @@ index f38acc96f71298e40ce9433e7759fd223ca55e48..cc3d9f47ef6d1efa589c8bed5c51ed9e protected void defineSynchedData(SynchedEntityData.Builder builder) { super.defineSynchedData(builder); diff --git a/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java b/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java -index a6def4133f06c41be287e9942643e80a7b8e8218..2ff0ce04ce210b77c555f59967182ed4dd3fe9aa 100644 +index 10388cf33f6f33070aa84b3b2d7bd14fc50ceea8..18e6a56da9f714f4e5b78ec63df6cf310deb1247 100644 --- a/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java +++ b/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java -@@ -62,6 +62,23 @@ public class ZombifiedPiglin extends Zombie implements NeutralMob { +@@ -63,6 +63,23 @@ public class ZombifiedPiglin extends Zombie implements NeutralMob { this.setPathfindingMalus(PathType.LAVA, 8.0F); } @@ -4789,7 +4752,7 @@ index a6def4133f06c41be287e9942643e80a7b8e8218..2ff0ce04ce210b77c555f59967182ed4 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 c583d883118ded5e1884c757427dc5e73c10dd27..6e86e0597af66bad8f2e97661b588e950b2679ba 100644 +index d5e0c493f4c348724958193795ceb987765a465f..a2c0f73c84651f713781deaaa588a3c704eb32b3 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 @@ -90,6 +90,23 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { @@ -4814,8 +4777,8 @@ index c583d883118ded5e1884c757427dc5e73c10dd27..6e86e0597af66bad8f2e97661b588e95 + // Purpur end + @Override - public boolean canBeLeashed(Player player) { - return !this.isLeashed(); + public boolean canBeLeashed() { + return true; @@ -156,6 +173,7 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { @Override protected void customServerAiStep() { @@ -4825,10 +4788,10 @@ index c583d883118ded5e1884c757427dc5e73c10dd27..6e86e0597af66bad8f2e97661b588e95 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 a8ab486c7e11ec137da48174af6f1030dfd48056..6632cab4ed43bbfd10b4d8f3b2c447a35eba735e 100644 +index bc58323801ee16fe9b63c21332144ec002a902f2..a8df353eef6ab0dc2a6bd4242f6b85af91444ae9 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 -@@ -94,6 +94,23 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento +@@ -93,6 +93,23 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento this.xpReward = 5; } @@ -4852,7 +4815,7 @@ index a8ab486c7e11ec137da48174af6f1030dfd48056..6632cab4ed43bbfd10b4d8f3b2c447a3 @Override public void addAdditionalSaveData(CompoundTag nbt) { super.addAdditionalSaveData(nbt); -@@ -297,6 +314,7 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento +@@ -296,6 +313,7 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento @Override protected void customServerAiStep() { this.level().getProfiler().push("piglinBrain"); @@ -4897,10 +4860,10 @@ index fcadd7f28ccb81bbb36e97d8b8d8a8ba3f3d6a16..17e2457bc83e7ee4402c10ee7d2ef5aa 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 ddd60be52dce5773c80934be5aa5705db239e3dd..9f5325444cc4f64fc88f85794fbad09ddd4f7860 100644 +index 38bf417a9ad4647f4af24d969f3bf4fed9c4bad7..ba560ab0340c06614547dcddbdcbd1bbda44bb79 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 -@@ -123,8 +123,32 @@ public class Warden extends Monster implements VibrationSystem { +@@ -124,8 +124,32 @@ public class Warden extends Monster implements VibrationSystem { this.setPathfindingMalus(PathType.LAVA, 8.0F); this.setPathfindingMalus(PathType.DAMAGE_FIRE, 0.0F); this.setPathfindingMalus(PathType.DANGER_FIRE, 0.0F); @@ -4931,9 +4894,9 @@ index ddd60be52dce5773c80934be5aa5705db239e3dd..9f5325444cc4f64fc88f85794fbad09d + // Purpur end + @Override - public Packet getAddEntityPacket() { - return new ClientboundAddEntityPacket(this, this.hasPose(Pose.EMERGING) ? 1 : 0); -@@ -392,17 +416,14 @@ public class Warden extends Monster implements VibrationSystem { + public Packet getAddEntityPacket(ServerEntity entityTrackerEntry) { + return new ClientboundAddEntityPacket(this, entityTrackerEntry, this.hasPose(Pose.EMERGING) ? 1 : 0); +@@ -393,17 +417,14 @@ public class Warden extends Monster implements VibrationSystem { @Contract("null->false") public boolean canTargetEntity(@Nullable Entity entity) { @@ -4955,7 +4918,7 @@ index ddd60be52dce5773c80934be5aa5705db239e3dd..9f5325444cc4f64fc88f85794fbad09d 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 a7930f9875aa4aca997caaead46ecdc21e5e11d7..980f48b546f0da5696c110357ea42352a48fbd42 100644 +index 393588661c41b490ee6bce2f687962f7ddeff7d4..d7545f978cde231e9c154631ab7f225e6ea579ff 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java @@ -156,6 +156,28 @@ public class Villager extends AbstractVillager implements ReputationEventHandler @@ -4987,11 +4950,11 @@ index a7930f9875aa4aca997caaead46ecdc21e5e11d7..980f48b546f0da5696c110357ea42352 @Override public Brain getBrain() { return (Brain) super.getBrain(); // CraftBukkit - decompile error -@@ -256,6 +278,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler - // Paper end +@@ -239,6 +261,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler + protected void customServerAiStep() { this.level().getProfiler().push("villagerBrain"); - if (!inactive) this.getBrain().tick((ServerLevel) this.level(), this); // Paper -+ /*// Purpur start // Purpur - TODO: Pufferfish + this.getBrain().tick((ServerLevel) this.level(), this); ++ /*// Purpur start // Purpur - TODO: Pufferfish + 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 + } @@ -4999,28 +4962,29 @@ index a7930f9875aa4aca997caaead46ecdc21e5e11d7..980f48b546f0da5696c110357ea42352 this.level().getProfiler().pop(); if (this.assignProfessionWhenSpawned) { this.assignProfessionWhenSpawned = false; -@@ -312,7 +339,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -294,7 +321,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(); - return InteractionResult.sidedSuccess(this.level().isClientSide); + return tryRide(player, hand, InteractionResult.sidedSuccess(this.level().isClientSide)); // Purpur } else { - boolean flag = this.getOffers().isEmpty(); + if (!this.level().isClientSide) { + boolean flag = this.getOffers().isEmpty(); +@@ -308,9 +335,10 @@ public class Villager extends AbstractVillager implements ReputationEventHandler + } -@@ -325,8 +352,9 @@ public class Villager extends AbstractVillager implements ReputationEventHandler + if (flag) { +- return InteractionResult.CONSUME; ++ return tryRide(player, hand, InteractionResult.CONSUME); // Purpur + } + ++ if (level().purpurConfig.villagerRidable && itemstack.isEmpty()) return tryRide(player, hand); // Purpur + this.startTrading(player); } - if (flag) { -- return InteractionResult.sidedSuccess(this.level().isClientSide); -+ return tryRide(player, hand, InteractionResult.sidedSuccess(this.level().isClientSide)); // Purpur - } else { -+ if (level().purpurConfig.villagerRidable && itemstack.isEmpty()) return tryRide(player, hand); // Purpur - if (!this.level().isClientSide && !this.offers.isEmpty()) { - this.startTrading(player); - } 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 0854e9b7ee2e6b23b6c1ee6a324a5a253c9d4679..6bdf3d1e3652a661282d61f1dc2bfc2712339953 100644 +index 0af34e0f9c9696fbcb11b12fb27472ef17ad532a..d514faecb9e6b244aa043383fa072316da939518 100644 --- a/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java +++ b/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java @@ -71,6 +71,23 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill @@ -5047,22 +5011,23 @@ index 0854e9b7ee2e6b23b6c1ee6a324a5a253c9d4679..6bdf3d1e3652a661282d61f1dc2bfc27 @Override protected void registerGoals() { this.goalSelector.addGoal(0, new FloatGoal(this)); -@@ -118,8 +135,9 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill - } +@@ -119,9 +136,9 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill - if (this.getOffers().isEmpty()) { -- return InteractionResult.sidedSuccess(this.level().isClientSide); -+ return tryRide(player, hand, InteractionResult.sidedSuccess(this.level().isClientSide)); // Purpur - } else { + if (!this.level().isClientSide) { + if (this.getOffers().isEmpty()) { +- return InteractionResult.CONSUME; ++ return tryRide(player, hand, InteractionResult.CONSUME); // Purpur + } +- + if (level().purpurConfig.wanderingTraderRidable && itemstack.isEmpty()) return tryRide(player, hand); // Purpur - if (!this.level().isClientSide) { - this.setTradingPlayer(player); - this.openTradingScreen(player, this.getDisplayName(), 1); + 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 25595bef64199c4ddbe69c65fd149eec33e778ad..2455ea05bbe00ad939e45d2faa9b7a9a8c932aae 100644 +index ffb888262ba81073062f6f513c36108688d0f158..6506e5b2165cabcc27543beeae83812dd108a252 100644 --- a/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java -@@ -206,6 +206,19 @@ public abstract class Player extends LivingEntity { +@@ -207,6 +207,19 @@ public abstract class Player extends LivingEntity { } // CraftBukkit end @@ -5083,10 +5048,10 @@ index 25595bef64199c4ddbe69c65fd149eec33e778ad..2455ea05bbe00ad939e45d2faa9b7a9a super(EntityType.PLAYER, world); this.lastItemInMainHand = ItemStack.EMPTY; diff --git a/src/main/java/net/minecraft/world/entity/projectile/LlamaSpit.java b/src/main/java/net/minecraft/world/entity/projectile/LlamaSpit.java -index ffd01d24cbfc90e2a8807757e61b2cf20a944354..a419820d5001079ed839e67c757bc8fa591a20b3 100644 +index 8575941fd238750c5d56843989a48bcbde2d8a88..b4ed2df8d0795409808df0205edce6da682c3981 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/LlamaSpit.java +++ b/src/main/java/net/minecraft/world/entity/projectile/LlamaSpit.java -@@ -30,6 +30,12 @@ public class LlamaSpit extends Projectile { +@@ -33,6 +33,12 @@ public class LlamaSpit extends Projectile { this.setPos(owner.getX() - (double) (owner.getBbWidth() + 1.0F) * 0.5D * (double) Mth.sin(owner.yBodyRot * 0.017453292F), owner.getEyeY() - 0.10000000149011612D, owner.getZ() + (double) (owner.getBbWidth() + 1.0F) * 0.5D * (double) Mth.cos(owner.yBodyRot * 0.017453292F)); } @@ -5100,10 +5065,10 @@ index ffd01d24cbfc90e2a8807757e61b2cf20a944354..a419820d5001079ed839e67c757bc8fa protected double getDefaultGravity() { return 0.06D; 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 55b4b5ad5f084c9a271a716d076672478d6486ba..4117260538e47c978ea31c76f439d43369ebedfb 100644 +index 55fd997a4e894eeab24de269d59e486196ffbe8d..63f48841c849ff49d9d43efc5de8952c5a9bba3a 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/WitherSkull.java +++ b/src/main/java/net/minecraft/world/entity/projectile/WitherSkull.java -@@ -111,6 +111,14 @@ public class WitherSkull extends AbstractHurtingProjectile { +@@ -115,6 +115,14 @@ public class WitherSkull extends AbstractHurtingProjectile { } @@ -5119,10 +5084,10 @@ index 55b4b5ad5f084c9a271a716d076672478d6486ba..4117260538e47c978ea31c76f439d433 public boolean hurt(DamageSource source, float amount) { 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 a2d336ceb52b63db5c03432ee7bc94dc6a742b82..a6268b3df9691278606501284b5504da718703c2 100644 +index b8eb9166e44da8745a056bf68f2f9316ce25d7a7..3629a6f99e99ca686446a23eea0329771c4d11cc 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java -@@ -1280,4 +1280,27 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { +@@ -1293,4 +1293,27 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { return this.getHandle().getScoreboardName(); } // Paper end - entity scoreboard name @@ -5151,10 +5116,10 @@ index a2d336ceb52b63db5c03432ee7bc94dc6a742b82..a6268b3df9691278606501284b5504da + // 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 dfbe0914ab2771ac632fd064719878ac47559e9f..1a6ab0a29546e39b4df1dc76952488edb0aa6e38 100644 +index bd6fee3e3ad9116802ff8bb57bfa741b881c4057..9e5d4e8a70aec8619db68d75ef3447cf39e239b9 100644 --- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -@@ -592,6 +592,15 @@ public class CraftEventFactory { +@@ -593,6 +593,15 @@ public class CraftEventFactory { // Paper end craftServer.getPluginManager().callEvent(event); @@ -5170,7 +5135,7 @@ index dfbe0914ab2771ac632fd064719878ac47559e9f..1a6ab0a29546e39b4df1dc76952488ed return event; } -@@ -1181,6 +1190,7 @@ public class CraftEventFactory { +@@ -1184,6 +1193,7 @@ public class CraftEventFactory { EntityDamageEvent event; if (damager != null) { event = new EntityDamageByEntityEvent(damager.getBukkitEntity(), damagee.getBukkitEntity(), cause, bukkitDamageSource, modifiers, modifierFunctions, critical); From 085de5a829696772a138947f07ef583363f307ec Mon Sep 17 00:00:00 2001 From: granny Date: Fri, 14 Jun 2024 14:12:27 -0700 Subject: [PATCH 051/588] first 50 patches \o/ --- ...-Configurable-entity-base-attributes.patch | 204 +++++++++--------- .../0008-Barrels-and-enderchests-6-rows.patch | 14 +- .../0009-Llama-API.patch | 6 +- .../0010-AFK-API.patch | 43 ++-- .../0011-Bring-back-server-name.patch | 6 +- .../0012-Configurable-server-mod-name.patch | 4 +- .../0013-Lagging-threshold.patch | 14 +- ...014-PlayerSetSpawnerTypeWithEggEvent.patch | 2 +- .../0015-Anvil-API.patch | 8 +- .../0016-Alternative-Keepalive-Handling.patch | 10 +- .../0017-Silk-touch-spawners.patch | 6 +- .../0018-Add-turtle-egg-block-options.patch | 2 +- ...-settings-suppressing-pointless-logs.patch | 12 +- .../0020-Disable-outdated-build-check.patch | 4 +- .../0021-Giants-AI-settings.patch | 0 .../0022-Zombie-horse-naturally-spawn.patch | 4 +- ...0023-Charged-creeper-naturally-spawn.patch | 2 +- ...bit-naturally-spawn-toast-and-killer.patch | 4 +- ...ver-showing-in-ping-before-server-fu.patch | 4 +- .../0026-Tulips-change-fox-type.patch | 4 +- .../0027-Breedable-Polar-Bears.patch | 8 +- .../0028-Chickens-can-retaliate.patch | 2 +- ...option-to-set-armorstand-step-height.patch | 12 +- .../0030-Cat-spawning-options.patch | 0 .../0031-Cows-eat-mushrooms.patch | 0 ...cow-rotation-when-shearing-mooshroom.patch | 0 .../0033-Pigs-give-saddle-back.patch | 2 +- ...34-Snowman-drop-and-put-back-pumpkin.patch | 0 ...35-Ender-dragon-always-drop-full-exp.patch | 4 +- ...moisten-from-water-directly-under-it.patch | 2 +- ...-Minecart-settings-and-WASD-controls.patch | 12 +- ...able-loot-drops-on-death-by-cramming.patch | 20 +- ...ption-to-toggle-milk-curing-bad-omen.patch | 10 +- ...Skip-events-if-there-s-no-listeners.patch} | 6 +- .../0041-Add-permission-for-F3-N-debug.patch} | 4 +- .../0042-Configurable-TPS-Catchup.patch} | 4 +- ...ow-loyalty-on-tridents-to-work-in-t.patch} | 6 +- ...erman-and-creeper-griefing-controls.patch} | 12 +- ...045-Villagers-follow-emerald-blocks.patch} | 6 +- .../0046-Implement-infinite-liquids.patch} | 6 +- ...7-Make-lava-flow-speed-configurable.patch} | 2 +- ...dd-player-death-exp-control-options.patch} | 8 +- 42 files changed, 242 insertions(+), 237 deletions(-) rename patches/{unapplied-server => server}/0007-Configurable-entity-base-attributes.patch (94%) rename patches/{unapplied-server => server}/0008-Barrels-and-enderchests-6-rows.patch (96%) rename patches/{unapplied-server => server}/0009-Llama-API.patch (95%) rename patches/{unapplied-server => server}/0010-AFK-API.patch (90%) rename patches/{unapplied-server => server}/0011-Bring-back-server-name.patch (86%) rename patches/{unapplied-server => server}/0012-Configurable-server-mod-name.patch (91%) rename patches/{unapplied-server => server}/0013-Lagging-threshold.patch (82%) rename patches/{unapplied-server => server}/0014-PlayerSetSpawnerTypeWithEggEvent.patch (97%) rename patches/{unapplied-server => server}/0015-Anvil-API.patch (95%) rename patches/{unapplied-server => server}/0016-Alternative-Keepalive-Handling.patch (91%) rename patches/{unapplied-server => server}/0017-Silk-touch-spawners.patch (98%) rename patches/{unapplied-server => server}/0018-Add-turtle-egg-block-options.patch (96%) rename patches/{unapplied-server => server}/0019-Logger-settings-suppressing-pointless-logs.patch (88%) rename patches/{unapplied-server => server}/0020-Disable-outdated-build-check.patch (89%) rename patches/{unapplied-server => server}/0021-Giants-AI-settings.patch (100%) rename patches/{unapplied-server => server}/0022-Zombie-horse-naturally-spawn.patch (95%) rename patches/{unapplied-server => server}/0023-Charged-creeper-naturally-spawn.patch (96%) rename patches/{unapplied-server => server}/0024-Rabbit-naturally-spawn-toast-and-killer.patch (94%) rename patches/{unapplied-server => server}/0025-Fix-outdated-server-showing-in-ping-before-server-fu.patch (87%) rename patches/{unapplied-server => server}/0026-Tulips-change-fox-type.patch (96%) rename patches/{unapplied-server => server}/0027-Breedable-Polar-Bears.patch (92%) rename patches/{unapplied-server => server}/0028-Chickens-can-retaliate.patch (97%) rename patches/{unapplied-server => server}/0029-Add-option-to-set-armorstand-step-height.patch (82%) rename patches/{unapplied-server => server}/0030-Cat-spawning-options.patch (100%) rename patches/{unapplied-server => server}/0031-Cows-eat-mushrooms.patch (100%) rename patches/{unapplied-server => server}/0032-Fix-cow-rotation-when-shearing-mooshroom.patch (100%) rename patches/{unapplied-server => server}/0033-Pigs-give-saddle-back.patch (96%) rename patches/{unapplied-server => server}/0034-Snowman-drop-and-put-back-pumpkin.patch (100%) rename patches/{unapplied-server => server}/0035-Ender-dragon-always-drop-full-exp.patch (93%) rename patches/{unapplied-server => server}/0036-Allow-soil-to-moisten-from-water-directly-under-it.patch (94%) rename patches/{unapplied-server => server}/0037-Minecart-settings-and-WASD-controls.patch (95%) rename patches/{unapplied-server => server}/0038-Disable-loot-drops-on-death-by-cramming.patch (67%) rename patches/{unapplied-server => server}/0039-Option-to-toggle-milk-curing-bad-omen.patch (82%) rename patches/{unapplied-server/0041-Skip-events-if-there-s-no-listeners.patch => server/0040-Skip-events-if-there-s-no-listeners.patch} (88%) rename patches/{unapplied-server/0042-Add-permission-for-F3-N-debug.patch => server/0041-Add-permission-for-F3-N-debug.patch} (83%) rename patches/{unapplied-server/0043-Configurable-TPS-Catchup.patch => server/0042-Configurable-TPS-Catchup.patch} (92%) rename patches/{unapplied-server/0044-Add-option-to-allow-loyalty-on-tridents-to-work-in-t.patch => server/0043-Add-option-to-allow-loyalty-on-tridents-to-work-in-t.patch} (89%) rename patches/{unapplied-server/0045-Add-enderman-and-creeper-griefing-controls.patch => server/0044-Add-enderman-and-creeper-griefing-controls.patch} (92%) rename patches/{unapplied-server/0046-Villagers-follow-emerald-blocks.patch => server/0045-Villagers-follow-emerald-blocks.patch} (95%) rename patches/{unapplied-server/0048-Implement-infinite-liquids.patch => server/0046-Implement-infinite-liquids.patch} (94%) rename patches/{unapplied-server/0049-Make-lava-flow-speed-configurable.patch => server/0047-Make-lava-flow-speed-configurable.patch} (95%) rename patches/{unapplied-server/0050-Add-player-death-exp-control-options.patch => server/0048-Add-player-death-exp-control-options.patch} (90%) diff --git a/patches/unapplied-server/0007-Configurable-entity-base-attributes.patch b/patches/server/0007-Configurable-entity-base-attributes.patch similarity index 94% rename from patches/unapplied-server/0007-Configurable-entity-base-attributes.patch rename to patches/server/0007-Configurable-entity-base-attributes.patch index e385252c9..c3d714604 100644 --- a/patches/unapplied-server/0007-Configurable-entity-base-attributes.patch +++ b/patches/server/0007-Configurable-entity-base-attributes.patch @@ -5,10 +5,10 @@ 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 757aeb4b715b17d3f239b495899b0d8874811db8..5e9be6af06d02ae46aa51ec24771a92cce443652 100644 +index 4454f9b41c3ebeb98d71b9b891e657b4a80c1601..1e274b44ab975afb522874f073469bd10a68a404 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -163,7 +163,7 @@ import org.bukkit.plugin.PluginManager; +@@ -168,7 +168,7 @@ import org.bukkit.plugin.PluginManager; // CraftBukkit end public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess, CommandSource, ScoreHolder { @@ -34,18 +34,18 @@ index aa76a24421cdb3908a3544d92eb3d1e3c2ebedc4..8211c152e6f4232e82e452b08047e457 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 8623501c6f6567d146f9314f151629b5c25af289..0b542d2cb370b4ca9d04256264c8e8592743aa2f 100644 +index fcc73ac45c963bd18f1658149295c672598f3ddd..8f9756736b08fbaa78b7cff9fa78657c9877e89d 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -301,6 +301,7 @@ public abstract class LivingEntity extends Entity implements Attackable { - this.lastClimbablePos = Optional.empty(); +@@ -314,6 +314,7 @@ public abstract class LivingEntity extends Entity implements Attackable { + this.activeLocationDependentEnchantments = new Reference2ObjectArrayMap(); this.appliedScale = 1.0F; this.attributes = new AttributeMap(DefaultAttributes.getSupplier(type), this); // Purpur + this.initAttributes(); // Purpur this.craftAttributes = new CraftAttributeMap(this.attributes); // CraftBukkit // CraftBukkit - setHealth(getMaxHealth()) inlined and simplified to skip the instanceof check for EntityPlayer, as getBukkitEntity() is not initialized in constructor this.entityData.set(LivingEntity.DATA_HEALTH_ID, (float) this.getAttribute(Attributes.MAX_HEALTH).getValue()); -@@ -315,6 +316,8 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -328,6 +329,8 @@ public abstract class LivingEntity extends Entity implements Attackable { this.brain = this.makeBrain(new Dynamic(dynamicopsnbt, (Tag) dynamicopsnbt.createMap((Map) ImmutableMap.of(dynamicopsnbt.createString("memories"), (Tag) dynamicopsnbt.emptyMap())))); } @@ -78,10 +78,10 @@ index c4a09778ca6bf5c15b588234bcadec3496017e3d..49adf3f230fa34289a2ce09a9d829f5d 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 4b84cf76d052112e00cd13c330182abfbe618820..ae4b53f4cdd78368deb7d510be4936ffefce4d9c 100644 +index f7ff98245583ab471ce1fa2f84f4684e195cdacc..3a7e413ba17901ed8e4ef0299555305c62f0d303 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Bee.java +++ b/src/main/java/net/minecraft/world/entity/animal/Bee.java -@@ -467,6 +467,11 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { +@@ -478,6 +478,11 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { } } @@ -94,10 +94,10 @@ index 4b84cf76d052112e00cd13c330182abfbe618820..ae4b53f4cdd78368deb7d510be4936ff public int getRemainingPersistentAngerTime() { return (Integer) this.entityData.get(Bee.DATA_REMAINING_ANGER_TIME); diff --git a/src/main/java/net/minecraft/world/entity/animal/Cat.java b/src/main/java/net/minecraft/world/entity/animal/Cat.java -index 3826c794ddde6b915e233e2d0395557e3ea867e0..7930e9735abf8357df737798e80b08295c2e06ec 100644 +index 07f0ca108d515df1ff97ba79265bbf2c8bfbc8a5..5d89b2c9bd6ee2d0d5176c93988b97ff2e913e83 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Cat.java +++ b/src/main/java/net/minecraft/world/entity/animal/Cat.java -@@ -129,6 +129,13 @@ public class Cat extends TamableAnimal implements VariantHolder { @@ -192,10 +192,10 @@ index 935dff4d167d8b6ef4b7cdc95bf000a2ce761f92..8666d82775570b812d5bdd80336c8e14 protected void defineSynchedData(SynchedEntityData.Builder builder) { super.defineSynchedData(builder); diff --git a/src/main/java/net/minecraft/world/entity/animal/IronGolem.java b/src/main/java/net/minecraft/world/entity/animal/IronGolem.java -index 4cc9138201b08aff8bb47720c6fe1e3447f03967..2919d055e2136a956aa038bd0bf4c1a2ff5afa2f 100644 +index 1cecb12d9c9958239a71a8599fcd787d07953c76..9ea96c02d08b342b42b5600acc703be359023dbe 100644 --- a/src/main/java/net/minecraft/world/entity/animal/IronGolem.java +++ b/src/main/java/net/minecraft/world/entity/animal/IronGolem.java -@@ -76,6 +76,11 @@ public class IronGolem extends AbstractGolem implements NeutralMob { +@@ -77,6 +77,11 @@ public class IronGolem extends AbstractGolem implements NeutralMob { public boolean isControllable() { return level().purpurConfig.ironGolemControllable; } @@ -224,7 +224,7 @@ index 11944ee34fc7e3e5551b9e18a563164f96898a54..b47dddb2fc6058a90665ccbd362088d9 public float getWalkTargetValue(BlockPos pos, LevelReader world) { return world.getBlockState(pos.below()).is(Blocks.MYCELIUM) ? 10.0F : world.getPathfindingCostFromLightLevels(pos); diff --git a/src/main/java/net/minecraft/world/entity/animal/Ocelot.java b/src/main/java/net/minecraft/world/entity/animal/Ocelot.java -index 2b074f68c1be2ff591543685bbb4e7ea1c7784f8..31f3982359a00f55a7fc053becc4043dcf423c50 100644 +index 0083119b44ef10e8ebc4414828f0d5fd6f68a830..0ef3fee057d7dd0b5d9d4a38953617bac3f49c7b 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Ocelot.java +++ b/src/main/java/net/minecraft/world/entity/animal/Ocelot.java @@ -83,6 +83,11 @@ public class Ocelot extends Animal { @@ -240,10 +240,10 @@ index 2b074f68c1be2ff591543685bbb4e7ea1c7784f8..31f3982359a00f55a7fc053becc4043d return (Boolean) this.entityData.get(Ocelot.DATA_TRUSTING); } diff --git a/src/main/java/net/minecraft/world/entity/animal/Panda.java b/src/main/java/net/minecraft/world/entity/animal/Panda.java -index 5f9b7ae2ed4acff0fa7cfee07a29a28b5c0d67f8..d2410da0b453e0128ff8b00956cae89cabff1d5d 100644 +index fff8abfe14be823867aa9bd145146763cfe83148..0fd0358d287604d0ff1f52f0c71633586d100e3e 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Panda.java +++ b/src/main/java/net/minecraft/world/entity/animal/Panda.java -@@ -146,6 +146,12 @@ public class Panda extends Animal { +@@ -147,6 +147,12 @@ public class Panda extends Animal { } // Purpur end @@ -255,8 +255,8 @@ index 5f9b7ae2ed4acff0fa7cfee07a29a28b5c0d67f8..d2410da0b453e0128ff8b00956cae89c + @Override public boolean canTakeItem(ItemStack stack) { - EquipmentSlot enumitemslot = Mob.getEquipmentSlotForItem(stack); -@@ -660,7 +666,10 @@ public class Panda extends Animal { + EquipmentSlot enumitemslot = this.getEquipmentSlotForItem(stack); +@@ -665,7 +671,10 @@ public class Panda extends Animal { public void setAttributes() { if (this.isWeak()) { @@ -269,7 +269,7 @@ index 5f9b7ae2ed4acff0fa7cfee07a29a28b5c0d67f8..d2410da0b453e0128ff8b00956cae89c if (this.isLazy()) { 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 12200cca54304d567a1880527a49f3e26ad08c7b..04507e05b499e536faa3c55179bb91913f7cda81 100644 +index 0549fafbd6e76cf1b0d4e56e4fc745c4773f4c5d..17983481386709110b7c4749ec8432866454492d 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Parrot.java +++ b/src/main/java/net/minecraft/world/entity/animal/Parrot.java @@ -186,6 +186,11 @@ public class Parrot extends ShoulderRidingEntity implements VariantHolder { +@@ -140,6 +140,11 @@ public class Rabbit extends Animal implements VariantHolder { } wasOnGround = onGround; } @@ -365,10 +365,10 @@ index 87c442fb198cad8671ad1419e589a5a67c4fdca8..742805994f29a18af444912b10af631d public int getMaxSchoolSize() { return 5; diff --git a/src/main/java/net/minecraft/world/entity/animal/Sheep.java b/src/main/java/net/minecraft/world/entity/animal/Sheep.java -index 7c1da46554aefde8e5e2b33a3644c9cbd771d7bc..b68886cc72d3055e7745fe4a955192bbad90dc13 100644 +index c70c78d7aa046995e77eadf348d434bd131c2380..90dff2e658e8b77d37952080d389e1f2db47264f 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Sheep.java +++ b/src/main/java/net/minecraft/world/entity/animal/Sheep.java -@@ -134,6 +134,11 @@ public class Sheep extends Animal implements Shearable { +@@ -132,6 +132,11 @@ public class Sheep extends Animal implements Shearable { } // Purpur end @@ -397,10 +397,10 @@ index d51b486afb83bf3e12046ed5e61e73eec5bd7c7c..a54893d51cc1ce204e59a6ffe8b84228 protected void registerGoals() { this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur diff --git a/src/main/java/net/minecraft/world/entity/animal/Squid.java b/src/main/java/net/minecraft/world/entity/animal/Squid.java -index 37402f7df48f04a6df2211e079519ed95d3735bc..e38416189d9dc72f0b5951a1f6430dbc4578c422 100644 +index fddd8693858f9b1d15b0fddeacc030339ac39c0d..eb85356f0e2d1dc2eeecb30a36f88df900eb5caa 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Squid.java +++ b/src/main/java/net/minecraft/world/entity/animal/Squid.java -@@ -68,6 +68,11 @@ public class Squid extends WaterAnimal { +@@ -67,6 +67,11 @@ public class Squid extends WaterAnimal { } // Purpur end @@ -429,7 +429,7 @@ index 18dcb67d246b63637d8c948b6c3f48c58d71c339..327b1805d9d4069212a8772ff189c9ab return "entity.minecraft.tropical_fish.predefined." + variant; } diff --git a/src/main/java/net/minecraft/world/entity/animal/Turtle.java b/src/main/java/net/minecraft/world/entity/animal/Turtle.java -index 4742d90ca38c1d8034b0cfcf7f336e225fade197..b8dcf3d632c79585ec7e9f50fa040fa9fac5d7c5 100644 +index 960eaebcb12d32bc51026c48e4b5e09effb66dda..d24697dc1e3cdc5eb61632935e81e25b1e341287 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Turtle.java +++ b/src/main/java/net/minecraft/world/entity/animal/Turtle.java @@ -104,6 +104,11 @@ public class Turtle extends Animal { @@ -442,13 +442,13 @@ index 4742d90ca38c1d8034b0cfcf7f336e225fade197..b8dcf3d632c79585ec7e9f50fa040fa9 + } + public void setHomePos(BlockPos pos) { - this.entityData.set(Turtle.HOME_POS, pos.immutable()); // Paper - called with mutablepos... + this.entityData.set(Turtle.HOME_POS, pos); } diff --git a/src/main/java/net/minecraft/world/entity/animal/Wolf.java b/src/main/java/net/minecraft/world/entity/animal/Wolf.java -index 92cc8a9b033052d5f510792d916c60cb2b90f07c..3235ed40d502722e888656776ba1a218f198f53e 100644 +index 1ae38914582cfb17da882304c8bcba84a7793f79..81ca20878d552d9b674c638dbd8cdebe9e666ec5 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Wolf.java +++ b/src/main/java/net/minecraft/world/entity/animal/Wolf.java -@@ -146,6 +146,11 @@ public class Wolf extends TamableAnimal implements NeutralMob, VariantHolder getModelRotationValues() { return this.modelRotationValues; diff --git a/src/main/java/net/minecraft/world/entity/animal/camel/Camel.java b/src/main/java/net/minecraft/world/entity/animal/camel/Camel.java -index 4477f201ff02a5e0758af5431b7d9b7c5e11d642..07a5599a9370ba167e985006d74caa3c80288e28 100644 +index 32c10771db71c1cd190769614edd1c24762d32c6..e0c981cef6992c4a83813c6f77fe11841fe11c1c 100644 --- a/src/main/java/net/minecraft/world/entity/animal/camel/Camel.java +++ b/src/main/java/net/minecraft/world/entity/animal/camel/Camel.java @@ -316,6 +316,23 @@ public class Camel extends AbstractHorse implements PlayerRideableJumping, Saddl @@ -521,10 +521,10 @@ index 4477f201ff02a5e0758af5431b7d9b7c5e11d642..07a5599a9370ba167e985006d74caa3c protected SoundEvent getAmbientSound() { return SoundEvents.CAMEL_AMBIENT; 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 12a137665f93d992094e86327a496057890d1018..59829fb7342696d29aa709d392f89bf263257fd3 100644 +index 28b5bda64b5f7a5b1ac8551bb05bf3f6fa522364..4eec1fe4e5996817c26c4f7e701e97fd5d8dcf60 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 -@@ -229,6 +229,44 @@ public abstract class AbstractHorse extends Animal implements ContainerListener, +@@ -231,6 +231,44 @@ public abstract class AbstractHorse extends Animal implements ContainerListener, } // Purpur end @@ -569,7 +569,7 @@ index 12a137665f93d992094e86327a496057890d1018..59829fb7342696d29aa709d392f89bf2 @Override protected void registerGoals() { this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HorseHasRider(this)); // Purpur -@@ -1260,7 +1298,7 @@ public abstract class AbstractHorse extends Animal implements ContainerListener, +@@ -1261,7 +1299,7 @@ public abstract class AbstractHorse extends Animal implements ContainerListener, entityData = new AgeableMob.AgeableMobGroupData(0.2F); } @@ -605,10 +605,10 @@ index 1febe8e173886d501e40331c12261701bd36b0f6..b47a72ffb8b947cea5d4bc6ee37b824c protected SoundEvent getAmbientSound() { return SoundEvents.DONKEY_AMBIENT; diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/Horse.java b/src/main/java/net/minecraft/world/entity/animal/horse/Horse.java -index 816c698a81a77f217a606468aa157bdaed779479..9ad0d3972d1970b11687da174a83e3a0a4180c0e 100644 +index 91bee4729074fdabadd40641050e49ef0d0c760e..273365b9bca6e26760f45a794c1ebef1f9118c43 100644 --- a/src/main/java/net/minecraft/world/entity/animal/horse/Horse.java +++ b/src/main/java/net/minecraft/world/entity/animal/horse/Horse.java -@@ -51,6 +51,21 @@ public class Horse extends AbstractHorse implements VariantHolder { +@@ -52,6 +52,21 @@ public class Horse extends AbstractHorse implements VariantHolder { } // Purpur end @@ -631,7 +631,7 @@ index 816c698a81a77f217a606468aa157bdaed779479..9ad0d3972d1970b11687da174a83e3a0 protected void randomizeAttributes(RandomSource random) { this.getAttribute(Attributes.MAX_HEALTH).setBaseValue((double)generateMaxHealth(random::nextInt)); 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 1564d1327e4b735461e41a7a876f63a9943d2675..df4943e0a75d084a1c0ae6c12ade533b3c4206fc 100644 +index b339f61e15f29666ca7ff2d820bc22723738f422..6098251783c7c24fe2510c170d628462023d8ab2 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 @@ -125,6 +125,21 @@ public class Llama extends AbstractChestedHorse implements VariantHolder(this, AbstractPiglin.class, true)); diff --git a/src/main/java/net/minecraft/world/entity/monster/Zoglin.java b/src/main/java/net/minecraft/world/entity/monster/Zoglin.java -index 2cb65bc3e2a2f990f4036f4f0418d9cd5226381e..698076b0e958aadf9736d7753df64a73dd3c17cd 100644 +index e683b14ed7bc0284fbbe93dedf6ab8c0423e0764..4bdbcb59051cc4bbc44aca2f70318275d4267b14 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Zoglin.java +++ b/src/main/java/net/minecraft/world/entity/monster/Zoglin.java -@@ -97,6 +97,11 @@ public class Zoglin extends Monster implements Enemy, HoglinBase { +@@ -96,6 +96,11 @@ public class Zoglin extends Monster implements Enemy, HoglinBase { } // Purpur end @@ -1388,10 +1388,10 @@ index 2cb65bc3e2a2f990f4036f4f0418d9cd5226381e..698076b0e958aadf9736d7753df64a73 protected Brain.Provider 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 7c78b243164a517818565845b1a6c7d40c8839d8..9af1c4b794ddaf8640076f172cf0317acad6bcb2 100644 +index ba630beb18830e92432669f643dfd4cf8d2386fb..28587e17b15748880576f7a71e71a05c9c1bcf78 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Zombie.java +++ b/src/main/java/net/minecraft/world/entity/monster/Zombie.java -@@ -121,6 +121,11 @@ public class Zombie extends Monster { +@@ -125,6 +125,11 @@ public class Zombie extends Monster { } // Purpur end @@ -1403,7 +1403,7 @@ index 7c78b243164a517818565845b1a6c7d40c8839d8..9af1c4b794ddaf8640076f172cf0317a @Override protected void registerGoals() { this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur -@@ -596,7 +601,7 @@ public class Zombie extends Monster { +@@ -607,7 +612,7 @@ public class Zombie extends Monster { } protected void randomizeReinforcementsChance() { @@ -1413,10 +1413,10 @@ index 7c78b243164a517818565845b1a6c7d40c8839d8..9af1c4b794ddaf8640076f172cf0317a @Override diff --git a/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java b/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java -index cc3d9f47ef6d1efa589c8bed5c51ed9e61d7c07d..8e7f0f2069c3382f3a7b08b80f829398e62377f7 100644 +index 778edd9a723459ae41f521e953ea97eeac123c5f..199770256cf7f838228b5263ec9af8c6b18f30fb 100644 --- a/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java +++ b/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java -@@ -97,6 +97,16 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { +@@ -100,6 +100,16 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { } // Purpur end @@ -1434,10 +1434,10 @@ index cc3d9f47ef6d1efa589c8bed5c51ed9e61d7c07d..8e7f0f2069c3382f3a7b08b80f829398 protected void defineSynchedData(SynchedEntityData.Builder builder) { super.defineSynchedData(builder); diff --git a/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java b/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java -index 2ff0ce04ce210b77c555f59967182ed4dd3fe9aa..138f3f6a9b0754d54e5f8000962bb52b224f677d 100644 +index 18e6a56da9f714f4e5b78ec63df6cf310deb1247..883cd9a96a1d4276ca10c5558b553c36a1bb0d79 100644 --- a/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java +++ b/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java -@@ -79,6 +79,11 @@ public class ZombifiedPiglin extends Zombie implements NeutralMob { +@@ -80,6 +80,11 @@ public class ZombifiedPiglin extends Zombie implements NeutralMob { } // Purpur end @@ -1449,7 +1449,7 @@ index 2ff0ce04ce210b77c555f59967182ed4dd3fe9aa..138f3f6a9b0754d54e5f8000962bb52b @Override public void setPersistentAngerTarget(@Nullable UUID angryAt) { this.persistentAngerTarget = angryAt; -@@ -261,7 +266,7 @@ public class ZombifiedPiglin extends Zombie implements NeutralMob { +@@ -262,7 +267,7 @@ public class ZombifiedPiglin extends Zombie implements NeutralMob { @Override protected void randomizeReinforcementsChance() { @@ -1459,26 +1459,26 @@ index 2ff0ce04ce210b77c555f59967182ed4dd3fe9aa..138f3f6a9b0754d54e5f8000962bb52b @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 6e86e0597af66bad8f2e97661b588e950b2679ba..3bfc073fb142e3446044a42c33be6c30587cc3c4 100644 +index a2c0f73c84651f713781deaaa588a3c704eb32b3..373bf138f8b77413e6c29724e01572f64e0bc005 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 -@@ -107,6 +107,11 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { +@@ -105,6 +105,11 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { + public boolean isControllable() { + return level().purpurConfig.hoglinControllable; } - // Purpur end - ++ + @Override + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.hoglinMaxHealth); + } -+ + // Purpur end + @Override - 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 6632cab4ed43bbfd10b4d8f3b2c447a35eba735e..06e0f737615c90bd733a89a731156598ccfe447f 100644 +index a8df353eef6ab0dc2a6bd4242f6b85af91444ae9..faf5889c040a6c8fbac61a1d02036d32601f3d24 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 -@@ -111,6 +111,11 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento +@@ -110,6 +110,11 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento } // Purpur end @@ -1507,7 +1507,7 @@ index 17e2457bc83e7ee4402c10ee7d2ef5aa36901565..362f3fddd8090799278f4b4e58c5af5d return Monster.createMonsterAttributes().add(Attributes.MAX_HEALTH, 50.0).add(Attributes.MOVEMENT_SPEED, 0.35F).add(Attributes.ATTACK_DAMAGE, 7.0); } diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java -index 980f48b546f0da5696c110357ea42352a48fbd42..ff86c7d4878e43fc9d375b9b60213a2271b92cff 100644 +index d7545f978cde231e9c154631ab7f225e6ea579ff..cd024c26d0658aa150a7d516b9b447eb72ebf26a 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java @@ -178,6 +178,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler @@ -1523,7 +1523,7 @@ index 980f48b546f0da5696c110357ea42352a48fbd42..ff86c7d4878e43fc9d375b9b60213a22 public Brain getBrain() { return (Brain) super.getBrain(); // CraftBukkit - decompile error 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 6bdf3d1e3652a661282d61f1dc2bfc2712339953..ac3cca0db4478841f91d966bd49ca4e5b5e91229 100644 +index d514faecb9e6b244aa043383fa072316da939518..a4ca761f6e8e6e8f86fc20ce5e3dcf92a66b3f2a 100644 --- a/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java +++ b/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java @@ -88,6 +88,11 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill diff --git a/patches/unapplied-server/0008-Barrels-and-enderchests-6-rows.patch b/patches/server/0008-Barrels-and-enderchests-6-rows.patch similarity index 96% rename from patches/unapplied-server/0008-Barrels-and-enderchests-6-rows.patch rename to patches/server/0008-Barrels-and-enderchests-6-rows.patch index c21c377e1..15ad52dd3 100644 --- a/patches/unapplied-server/0008-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 2d6b6795703431939005aa09d1ed590c3f755163..f10dcc0debcdd2077ee53cb1aefca8abd12f3ecd 100644 +index ab3cdaecf0e5e45acd3ac19be590c863cba9019a..27391592eca984295c648edefce50f3360f5be1e 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -1188,6 +1188,27 @@ public abstract class PlayerList { +@@ -1140,6 +1140,27 @@ public abstract class PlayerList { player.getBukkitEntity().recalculatePermissions(); // CraftBukkit this.server.getCommands().sendCommands(player); } // Paper - Add sendOpLevel API @@ -37,11 +37,11 @@ index 2d6b6795703431939005aa09d1ed590c3f755163..f10dcc0debcdd2077ee53cb1aefca8ab 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 90e44c7281935bc7ceb3b220bbcd73187fed44fb..0641e448e0e98694976b820c2e9c4868f2b76909 100644 +index 6506e5b2165cabcc27543beeae83812dd108a252..89bc21020704dc78b85f345a82e31a54a9a234df 100644 --- a/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java -@@ -195,6 +195,7 @@ public abstract class Player extends LivingEntity { - public boolean ignoreFallDamageFromCurrentImpulse; +@@ -196,6 +196,7 @@ public abstract class Player extends LivingEntity { + private int currentImpulseContextResetGraceTime; public boolean affectsSpawning = true; // Paper - Affects Spawning API public net.kyori.adventure.util.TriState flyingFallDamage = net.kyori.adventure.util.TriState.NOT_SET; // Paper - flying fall damage + public int sixRowEnderchestSlotCount = -1; // Purpur @@ -108,7 +108,7 @@ index a15d5ff872dbd77f3c3145e0328f3d02e431ff8c..1dcf36d502990d32fc4cd3ea69c3ea33 this.activeChest = blockEntity; } diff --git a/src/main/java/net/minecraft/world/level/block/EnderChestBlock.java b/src/main/java/net/minecraft/world/level/block/EnderChestBlock.java -index 5f9858ef8d0ec1a74d469ab4426eb1db068873fd..d7ef772444b301d0a3f167679027195e4150b064 100644 +index ca92d49ef2010ba00c623491671dcde8ebe697c1..bd65df4588584b8bb001e9dc3656a14e381a0b6d 100644 --- a/src/main/java/net/minecraft/world/level/block/EnderChestBlock.java +++ b/src/main/java/net/minecraft/world/level/block/EnderChestBlock.java @@ -91,7 +91,7 @@ public class EnderChestBlock extends AbstractChestBlock i @@ -253,7 +253,7 @@ index af1ae3dacb628da23f7d2988c6e76d3fb2d64103..4ee2d501f882279b48edb4b8bf082458 for (int i = 0; i < this.getSize(); i++) { if (i >= items.length) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index 463af65182c0894a75a138df8100f3f616143f4c..a0eb18409f72afe393581e6dc8e2260b3a25197f 100644 +index 169722178ba7cd9543a029741e81d025a659ffe2..db0d57060cae1f5fd51087a15134ca5f389511bc 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java @@ -177,4 +177,39 @@ public class PurpurConfig { diff --git a/patches/unapplied-server/0009-Llama-API.patch b/patches/server/0009-Llama-API.patch similarity index 95% rename from patches/unapplied-server/0009-Llama-API.patch rename to patches/server/0009-Llama-API.patch index 150148a94..5faea2a42 100644 --- a/patches/unapplied-server/0009-Llama-API.patch +++ b/patches/server/0009-Llama-API.patch @@ -25,7 +25,7 @@ index df695b444fa2a993d381e2f197182c3e91a68502..eb0faf58fa1a408f294fc62120b140de double d = this.llama.distanceToSqr(this.llama.getCaravanHead()); if (d > 676.0) { 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 df4943e0a75d084a1c0ae6c12ade533b3c4206fc..9ed11bf6420e4ea8ea78cec641a7e37327301ae1 100644 +index 6098251783c7c24fe2510c170d628462023d8ab2..09c400ce06003139de84e22313354ed6199da761 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) this.server.getHandle().players) { if (player.getBukkitEntity().canSee(this)) { -@@ -3534,5 +3539,20 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -3540,5 +3545,20 @@ public class CraftPlayer extends CraftHumanEntity implements Player { public boolean usesPurpurClient() { return getHandle().purpurClient; } @@ -288,7 +288,7 @@ index db0d57060cae1f5fd51087a15134ca5f389511bc..d2f3e864aa4d1c5d3ee8bb8f1e36787b public static int barrelRows = 3; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index e248395ad5f5f012aeefecf367d54f90cade0996..70f53ccb22de2c05c9ead68f8bd29d0b69d0993f 100644 +index 767d977cf47b0c7d94c248091f3ce98d6383ae04..2f2986f9f7a241c4d7a1e065126dbbae601f7fe5 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -90,6 +90,24 @@ public class PurpurWorldConfig { @@ -317,14 +317,15 @@ 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 3283ed99c35ffed6805567705e0518d9f84feedc..a9a39f0da7b09410d8171172a4219c7d509fdb99 100644 +index 9fb9fa62c32445ac3c3883a6433759c86dcfc428..0a237d1adeecba0059589ea2f4772f27100dae0f 100644 --- a/src/main/java/org/spigotmc/ActivationRange.java +++ b/src/main/java/org/spigotmc/ActivationRange.java -@@ -201,6 +201,7 @@ public class ActivationRange +@@ -132,6 +132,8 @@ public class ActivationRange continue; } + if (!player.level().purpurConfig.idleTimeoutTickNearbyEntities && player.isAfk()) continue; // Purpur - // Paper start - int worldHeight = world.getHeight(); - ActivationRange.maxBB = player.getBoundingBox().inflate( maxRange, worldHeight, maxRange ); ++ + ActivationRange.maxBB = player.getBoundingBox().inflate( maxRange, 256, maxRange ); + ActivationType.MISC.boundingBox = player.getBoundingBox().inflate( miscActivationRange, 256, miscActivationRange ); + ActivationType.RAIDER.boundingBox = player.getBoundingBox().inflate( raiderActivationRange, 256, raiderActivationRange ); diff --git a/patches/unapplied-server/0011-Bring-back-server-name.patch b/patches/server/0011-Bring-back-server-name.patch similarity index 86% rename from patches/unapplied-server/0011-Bring-back-server-name.patch rename to patches/server/0011-Bring-back-server-name.patch index 83168c5b1..114499aae 100644 --- a/patches/unapplied-server/0011-Bring-back-server-name.patch +++ b/patches/server/0011-Bring-back-server-name.patch @@ -5,7 +5,7 @@ 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 9d10cdacb3aed2c00dc60aeb6f2cbeb48905e21f..842f382de43df5d5c321422372ec30ccdd7859d7 100644 +index d6431376184e5650b370cbab204e28bc31f4dac6..9ebe1f1797b5be562bc4f6d92b9a4d6022ca2151 100644 --- a/src/main/java/net/minecraft/server/dedicated/DedicatedServerProperties.java +++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServerProperties.java @@ -56,6 +56,7 @@ public class DedicatedServerProperties extends Settings S spin(Function serverFactory) { + AtomicReference atomicreference = new AtomicReference(); +@@ -1183,6 +1184,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop implements FeatureElement, EntityTypeT diff --git a/patches/unapplied-server/0015-Anvil-API.patch b/patches/server/0015-Anvil-API.patch similarity index 95% rename from patches/unapplied-server/0015-Anvil-API.patch rename to patches/server/0015-Anvil-API.patch index 588aaa9d2..d824ef17e 100644 --- a/patches/unapplied-server/0015-Anvil-API.patch +++ b/patches/server/0015-Anvil-API.patch @@ -17,7 +17,7 @@ index 32910f677b0522ac8ec513fa0d00b714b52cfae4..f85eef14b91a0ada1f6f4b13ab3966f0 // CraftBukkit start public boolean checkReachable = true; diff --git a/src/main/java/net/minecraft/world/inventory/AnvilMenu.java b/src/main/java/net/minecraft/world/inventory/AnvilMenu.java -index 2bd91b48eaa06f85a5b9b1ae052c70e966ae8e4c..9036426256f87b3ba4a78e6fa2cea4e028f84481 100644 +index 7198dc9ffc9a37dab3654e12aa497c442a9993c5..2348ee0065367ade5354d54aac53ab23d43d0622 100644 --- a/src/main/java/net/minecraft/world/inventory/AnvilMenu.java +++ b/src/main/java/net/minecraft/world/inventory/AnvilMenu.java @@ -25,6 +25,13 @@ import org.slf4j.Logger; @@ -82,11 +82,13 @@ index 2bd91b48eaa06f85a5b9b1ae052c70e966ae8e4c..9036426256f87b3ba4a78e6fa2cea4e0 ItemStack itemstack1 = itemstack.copy(); ItemStack itemstack2 = this.inputSlots.getItem(1); ItemEnchantments.Mutable itemenchantments_a = new ItemEnchantments.Mutable(EnchantmentHelper.getEnchantmentsForCrafting(itemstack1)); -@@ -222,7 +240,7 @@ public class AnvilMenu extends ItemCombinerMenu { +@@ -221,8 +239,8 @@ public class AnvilMenu extends ItemCombinerMenu { + while (iterator1.hasNext()) { Holder holder1 = (Holder) iterator1.next(); - if (!holder1.equals(holder) && !enchantment.isCompatibleWith((Enchantment) holder1.value())) { +- if (!holder1.equals(holder) && !Enchantment.areCompatible(holder, holder1)) { - flag3 = false; ++ if (!holder1.equals(holder) && !enchantment.isCompatibleWith((Enchantment) holder1.value())) { + flag3 = canDoUnsafeEnchants; // Purpur ++i; } diff --git a/patches/unapplied-server/0016-Alternative-Keepalive-Handling.patch b/patches/server/0016-Alternative-Keepalive-Handling.patch similarity index 91% rename from patches/unapplied-server/0016-Alternative-Keepalive-Handling.patch rename to patches/server/0016-Alternative-Keepalive-Handling.patch index 7e82316a3..43382c339 100644 --- a/patches/unapplied-server/0016-Alternative-Keepalive-Handling.patch +++ b/patches/server/0016-Alternative-Keepalive-Handling.patch @@ -5,10 +5,10 @@ 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 a8edeb5a40cd9aac933805259407e32c544d181e..a30435cdc62d4947596b9cee3b114f7cb1349769 100644 +index b66d4047b5e529f5f737efb0ff1edda805de1316..e7075e0c59fe99229142ecb518fadc5b481886fb 100644 --- a/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java -@@ -73,6 +73,7 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack +@@ -74,6 +74,7 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack private long keepAliveChallenge; private long closedListenerTime; private boolean closed = false; @@ -16,7 +16,7 @@ index a8edeb5a40cd9aac933805259407e32c544d181e..a30435cdc62d4947596b9cee3b114f7c private int latency; private volatile boolean suspendFlushingOnServerThread = false; public final java.util.Map packCallbacks = new java.util.concurrent.ConcurrentHashMap<>(); // Paper - adventure resource pack callbacks -@@ -124,6 +125,16 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack +@@ -125,6 +126,16 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack @Override public void handleKeepAlive(ServerboundKeepAlivePacket packet) { @@ -33,7 +33,7 @@ index a8edeb5a40cd9aac933805259407e32c544d181e..a30435cdc62d4947596b9cee3b114f7c //PacketUtils.ensureRunningOnSameThread(packet, this, this.player.serverLevel()); // CraftBukkit // Paper - handle ServerboundKeepAlivePacket async if (this.keepAlivePending && packet.getId() == this.keepAliveChallenge) { int i = (int) (Util.getMillis() - this.keepAliveTime); -@@ -260,6 +271,21 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack +@@ -261,6 +272,21 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack long currentTime = Util.getMillis(); long elapsedTime = currentTime - this.keepAliveTime; @@ -54,7 +54,7 @@ index a8edeb5a40cd9aac933805259407e32c544d181e..a30435cdc62d4947596b9cee3b114f7c + if (!this.isSingleplayerOwner() && elapsedTime >= 15000L) { // Paper - use vanilla's 15000L between keep alive packets if (this.keepAlivePending && !this.processedDisconnect && elapsedTime >= KEEPALIVE_LIMIT) { // Paper - check keepalive limit, don't fire if already disconnected - this.disconnect(ServerCommonPacketListenerImpl.TIMEOUT_DISCONNECTION_MESSAGE, org.bukkit.event.player.PlayerKickEvent.Cause.TIMEOUT); // Paper - kick event cause + this.disconnect(ServerCommonPacketListenerImpl.TIMEOUT_DISCONNECTION_MESSAGE, PlayerKickEvent.Cause.TIMEOUT); // Paper - kick event cause diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java index f80414b9bb7fb1f2849749481209648516fb28fb..e4c01fc54f832f895adec75ac855b614ff77d19a 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java diff --git a/patches/unapplied-server/0017-Silk-touch-spawners.patch b/patches/server/0017-Silk-touch-spawners.patch similarity index 98% rename from patches/unapplied-server/0017-Silk-touch-spawners.patch rename to patches/server/0017-Silk-touch-spawners.patch index d1ee5a1b5..44c5985f2 100644 --- a/patches/unapplied-server/0017-Silk-touch-spawners.patch +++ b/patches/server/0017-Silk-touch-spawners.patch @@ -17,10 +17,10 @@ index 96fb69ec6db2e7c8c728435f0c537b076259b2fb..3253361d91e2a2e68d354eaf3dd3e3cd } diff --git a/src/main/java/net/minecraft/world/item/Items.java b/src/main/java/net/minecraft/world/item/Items.java -index d00b59efb754594cf532f8598f4b6d3b29693232..6467358f5fdf4cd4f7c1e2cc65c834a9da39596a 100644 +index 07315232192f6e09910a028c4643d7f0544c62e3..4eef61323ba54f513e6f251ef7c804b2c91ff477 100644 --- a/src/main/java/net/minecraft/world/item/Items.java +++ b/src/main/java/net/minecraft/world/item/Items.java -@@ -338,7 +338,7 @@ public class Items { +@@ -337,7 +337,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); @@ -100,7 +100,7 @@ index 4f190a40b8474aa06a92c8afcc06d0044120ff7b..66c17bdfecdfbcfb2d853e561432dd51 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 70f53ccb22de2c05c9ead68f8bd29d0b69d0993f..d4bca5b5f3d10c3a04befd8c365f46433491f299 100644 +index 2f2986f9f7a241c4d7a1e065126dbbae601f7fe5..4beb1df3b5bdeb2e3de7f8e7ca9a53bf0f6be277 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/unapplied-server/0018-Add-turtle-egg-block-options.patch b/patches/server/0018-Add-turtle-egg-block-options.patch similarity index 96% rename from patches/unapplied-server/0018-Add-turtle-egg-block-options.patch rename to patches/server/0018-Add-turtle-egg-block-options.patch index efb936f2b..42a33af4c 100644 --- a/patches/unapplied-server/0018-Add-turtle-egg-block-options.patch +++ b/patches/server/0018-Add-turtle-egg-block-options.patch @@ -36,7 +36,7 @@ index a6f408e56fa6c9de82fd93555fe21e1b11ce1022..c7377d04ceac3ea624117439783a443c } } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index d4bca5b5f3d10c3a04befd8c365f46433491f299..ac44ee7789b96e60e6d1d964d64ca33a3d3c2c62 100644 +index 4beb1df3b5bdeb2e3de7f8e7ca9a53bf0f6be277..aba1a09a949da1e1c70caf665b078c8979a5f746 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/unapplied-server/0019-Logger-settings-suppressing-pointless-logs.patch b/patches/server/0019-Logger-settings-suppressing-pointless-logs.patch similarity index 88% rename from patches/unapplied-server/0019-Logger-settings-suppressing-pointless-logs.patch rename to patches/server/0019-Logger-settings-suppressing-pointless-logs.patch index 362ab1bdc..3b4e10afa 100644 --- a/patches/unapplied-server/0019-Logger-settings-suppressing-pointless-logs.patch +++ b/patches/server/0019-Logger-settings-suppressing-pointless-logs.patch @@ -5,7 +5,7 @@ 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 c7e1f2bac3eca9bb72bf1f8c26cccb2905e1ddfc..94893039363b5fe2d7d0622d0592bce2c867b1c3 100644 +index 9fabf9322acd663c4452b562494e74aa42eb19da..b286b157bba78021efa18f01bc91b067b0bd5874 100644 --- a/src/main/java/net/minecraft/server/PlayerAdvancements.java +++ b/src/main/java/net/minecraft/server/PlayerAdvancements.java @@ -199,6 +199,7 @@ public class PlayerAdvancements { @@ -17,19 +17,19 @@ index c7e1f2bac3eca9bb72bf1f8c26cccb2905e1ddfc..94893039363b5fe2d7d0622d0592bce2 } 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 a6c31a558794a6e626e83176a1cbe78b6bd90f6e..8487a793e7bb2f491f47a061f413246387bc25b0 100644 +index b26a4a38144ec1b171db911bbf949b53ed35708f..b324f442106767eb70be2dec224ac4f8b6302e2c 100644 --- a/src/main/java/net/minecraft/server/level/WorldGenRegion.java +++ b/src/main/java/net/minecraft/server/level/WorldGenRegion.java -@@ -326,6 +326,7 @@ public class WorldGenRegion implements WorldGenLevel { +@@ -306,6 +306,7 @@ public class WorldGenRegion implements WorldGenLevel { return true; } else { // Paper start - Buffer OOB setBlock calls + if (!org.purpurmc.purpur.PurpurConfig.loggerSuppressSetBlockFarChunk) // Purpur if (!hasSetFarWarned) { - Util.logAndPauseIfInIde("Detected setBlock in a far chunk [" + i + ", " + j + "], pos: " + String.valueOf(pos) + ", status: " + String.valueOf(this.generatingStatus) + (this.currentlyGenerating == null ? "" : ", currently generating: " + (String) this.currentlyGenerating.get())); + Util.logAndPauseIfInIde("Detected setBlock in a far chunk [" + i + ", " + j + "], pos: " + String.valueOf(pos) + ", status: " + String.valueOf(this.generatingStep.targetStatus()) + (this.currentlyGenerating == null ? "" : ", currently generating: " + (String) this.currentlyGenerating.get())); hasSetFarWarned = true; diff --git a/src/main/java/net/minecraft/stats/ServerRecipeBook.java b/src/main/java/net/minecraft/stats/ServerRecipeBook.java -index 4103ddf16164e3992fef0765d368282572537e29..a0cb49233b1dbf53ce9d1bcc52b8967829d0530e 100644 +index 8a2584deccbf19de8a18fcfcb9c65318b60afe57..6146ca9fef0e33601c132d4867c9399e7f8f807c 100644 --- a/src/main/java/net/minecraft/stats/ServerRecipeBook.java +++ b/src/main/java/net/minecraft/stats/ServerRecipeBook.java @@ -125,6 +125,7 @@ public class ServerRecipeBook extends RecipeBook { @@ -41,7 +41,7 @@ index 4103ddf16164e3992fef0765d368282572537e29..a0cb49233b1dbf53ce9d1bcc52b89678 } else { handler.accept((RecipeHolder) optional.get()); diff --git a/src/main/java/org/bukkit/craftbukkit/legacy/CraftLegacy.java b/src/main/java/org/bukkit/craftbukkit/legacy/CraftLegacy.java -index 62f4835309df2b2deeb799609f9b1b325bf58af3..53f2ab5b380649fca95b92948e6fb64aaf66c143 100644 +index dc591702d1ad41209bb80e8d05f4ca11f20816f2..a63f090e75cf7d6561276c4297305d92cb5bbdb5 100644 --- a/src/main/java/org/bukkit/craftbukkit/legacy/CraftLegacy.java +++ b/src/main/java/org/bukkit/craftbukkit/legacy/CraftLegacy.java @@ -265,6 +265,7 @@ public final class CraftLegacy { diff --git a/patches/unapplied-server/0020-Disable-outdated-build-check.patch b/patches/server/0020-Disable-outdated-build-check.patch similarity index 89% rename from patches/unapplied-server/0020-Disable-outdated-build-check.patch rename to patches/server/0020-Disable-outdated-build-check.patch index cdb00c57f..1b8652e88 100644 --- a/patches/unapplied-server/0020-Disable-outdated-build-check.patch +++ b/patches/server/0020-Disable-outdated-build-check.patch @@ -5,10 +5,10 @@ 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 fe181ec5f8e968ff78e694f7a213c7aac718704c..6d8e9cf4ee496b8748654e792ce438f512c3d946 100644 +index 48e8b7405270632130721e87579ee2438a0f0b75..930614ebfd3d6b6e011a58bbd5310620c02582db 100644 --- a/src/main/java/org/bukkit/craftbukkit/Main.java +++ b/src/main/java/org/bukkit/craftbukkit/Main.java -@@ -303,7 +303,7 @@ public class Main { +@@ -273,7 +273,7 @@ public class Main { System.setProperty(net.minecrell.terminalconsole.TerminalConsoleAppender.JLINE_OVERRIDE_PROPERTY, "false"); // Paper } diff --git a/patches/unapplied-server/0021-Giants-AI-settings.patch b/patches/server/0021-Giants-AI-settings.patch similarity index 100% rename from patches/unapplied-server/0021-Giants-AI-settings.patch rename to patches/server/0021-Giants-AI-settings.patch diff --git a/patches/unapplied-server/0022-Zombie-horse-naturally-spawn.patch b/patches/server/0022-Zombie-horse-naturally-spawn.patch similarity index 95% rename from patches/unapplied-server/0022-Zombie-horse-naturally-spawn.patch rename to patches/server/0022-Zombie-horse-naturally-spawn.patch index 39294b040..71e0acc6a 100644 --- a/patches/unapplied-server/0022-Zombie-horse-naturally-spawn.patch +++ b/patches/server/0022-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 6247659f33c3d21d33ec1f510523403616ea9c4f..a95dbe12a188e6bc0e65759a34ccd89cb795a2b8 100644 +index 2e3e9f572c0d29dfd9544c41b2f02f34d6b50786..521b4b0a767e06db540dc73ff5c8b114813d3168 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -1006,10 +1006,18 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -643,10 +643,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 - Configurable spawn chances for skeleton horses if (flag1) { diff --git a/patches/unapplied-server/0023-Charged-creeper-naturally-spawn.patch b/patches/server/0023-Charged-creeper-naturally-spawn.patch similarity index 96% rename from patches/unapplied-server/0023-Charged-creeper-naturally-spawn.patch rename to patches/server/0023-Charged-creeper-naturally-spawn.patch index dc5d10e50..33380e4a7 100644 --- a/patches/unapplied-server/0023-Charged-creeper-naturally-spawn.patch +++ b/patches/server/0023-Charged-creeper-naturally-spawn.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Charged creeper naturally spawn diff --git a/src/main/java/net/minecraft/world/entity/monster/Creeper.java b/src/main/java/net/minecraft/world/entity/monster/Creeper.java -index c64a544bd267204d963cfa213d832e7cea45a7f3..72152e1c8fcebd9eaf19d9ee2952b7d7348e79d1 100644 +index 4cb68050f93027225b63176724b2c882902d8b71..a3b8b874dba75b0b2dfb89d8a31f875c396c9a9a 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Creeper.java +++ b/src/main/java/net/minecraft/world/entity/monster/Creeper.java @@ -257,6 +257,14 @@ public class Creeper extends Monster implements PowerableMob { diff --git a/patches/unapplied-server/0024-Rabbit-naturally-spawn-toast-and-killer.patch b/patches/server/0024-Rabbit-naturally-spawn-toast-and-killer.patch similarity index 94% rename from patches/unapplied-server/0024-Rabbit-naturally-spawn-toast-and-killer.patch rename to patches/server/0024-Rabbit-naturally-spawn-toast-and-killer.patch index 3759a1a9d..f551a7d70 100644 --- a/patches/unapplied-server/0024-Rabbit-naturally-spawn-toast-and-killer.patch +++ b/patches/server/0024-Rabbit-naturally-spawn-toast-and-killer.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Rabbit naturally spawn toast and killer diff --git a/src/main/java/net/minecraft/world/entity/animal/Rabbit.java b/src/main/java/net/minecraft/world/entity/animal/Rabbit.java -index 9eb1158213064ddb37ae76e445b5861b963a1f55..4abcde662ed78b16632ee575f695ee4329f11b2f 100644 +index 826484123d864172a73e3d0d6e16923533748ea1..6cb70392a86b166c8f8a8f3944f7abe8521e620f 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Rabbit.java +++ b/src/main/java/net/minecraft/world/entity/animal/Rabbit.java -@@ -466,10 +466,23 @@ public class Rabbit extends Animal implements VariantHolder { +@@ -470,10 +470,23 @@ public class Rabbit extends Animal implements VariantHolder { } this.setVariant(entityrabbit_variant); diff --git a/patches/unapplied-server/0025-Fix-outdated-server-showing-in-ping-before-server-fu.patch b/patches/server/0025-Fix-outdated-server-showing-in-ping-before-server-fu.patch similarity index 87% rename from patches/unapplied-server/0025-Fix-outdated-server-showing-in-ping-before-server-fu.patch rename to patches/server/0025-Fix-outdated-server-showing-in-ping-before-server-fu.patch index 7699f3fc7..0a78e0ffd 100644 --- a/patches/unapplied-server/0025-Fix-outdated-server-showing-in-ping-before-server-fu.patch +++ b/patches/server/0025-Fix-outdated-server-showing-in-ping-before-server-fu.patch @@ -6,10 +6,10 @@ 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 6f1c9fa89e718cbc01a8d72de34154f49c5f46db..2455f8e9679914660ec4fcd081138dabfe9c225b 100644 +index 385457c7151f7e636e1ea2e38ef983f4f532b9b5..1a44694f4792b57a39f55065a3fbc9d06be15f55 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 +@@ -154,6 +154,7 @@ public class ServerStatusPacketListenerImpl implements ServerStatusPacketListene this.connection.send(new ClientboundStatusResponsePacket(ping)); // CraftBukkit end */ diff --git a/patches/unapplied-server/0026-Tulips-change-fox-type.patch b/patches/server/0026-Tulips-change-fox-type.patch similarity index 96% rename from patches/unapplied-server/0026-Tulips-change-fox-type.patch rename to patches/server/0026-Tulips-change-fox-type.patch index 10b41a254..a790148c9 100644 --- a/patches/unapplied-server/0026-Tulips-change-fox-type.patch +++ b/patches/server/0026-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 8666d82775570b812d5bdd80336c8e14db6ddf47..d1866f0f07e4d023241229a45b55031a37cc5c99 100644 +index 473c857b83b87d824800eb91b2019bcf106189ae..52c11b3621a9b834de8305ff98ad7671b7905055 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Fox.java +++ b/src/main/java/net/minecraft/world/entity/animal/Fox.java @@ -389,6 +389,11 @@ public class Fox extends Animal implements VariantHolder { @@ -57,7 +57,7 @@ index 8666d82775570b812d5bdd80336c8e14db6ddf47..d1866f0f07e4d023241229a45b55031a + @Override // Paper start - Cancellable death event - protected org.bukkit.event.entity.EntityDeathEvent dropAllDeathLoot(DamageSource source) { + protected org.bukkit.event.entity.EntityDeathEvent dropAllDeathLoot(ServerLevel world, DamageSource damageSource) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java index 0a3a3a776e533b56ee3f67fca64bf76f514b1ab0..7d1dd19a08ff1d57f9c9bd4b19851804427d6ef9 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java diff --git a/patches/unapplied-server/0027-Breedable-Polar-Bears.patch b/patches/server/0027-Breedable-Polar-Bears.patch similarity index 92% rename from patches/unapplied-server/0027-Breedable-Polar-Bears.patch rename to patches/server/0027-Breedable-Polar-Bears.patch index dd1213e32..5d01a3431 100644 --- a/patches/unapplied-server/0027-Breedable-Polar-Bears.patch +++ b/patches/server/0027-Breedable-Polar-Bears.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Breedable Polar Bears diff --git a/src/main/java/net/minecraft/world/entity/animal/PolarBear.java b/src/main/java/net/minecraft/world/entity/animal/PolarBear.java -index 00afde0ec4811992aac306a42d473026b7e7e468..067bb175c457d6de089f18826dfce6c3661dad67 100644 +index 9bb4fd13e3c60ed889f4acd941b48922c9a4e8df..590b015102bd1ea22da34448de2f1b7581836325 100644 --- a/src/main/java/net/minecraft/world/entity/animal/PolarBear.java +++ b/src/main/java/net/minecraft/world/entity/animal/PolarBear.java @@ -98,6 +98,27 @@ public class PolarBear extends Animal implements NeutralMob { @@ -45,10 +45,10 @@ index 00afde0ec4811992aac306a42d473026b7e7e468..067bb175c457d6de089f18826dfce6c3 } @Override -@@ -116,6 +137,12 @@ public class PolarBear extends Animal implements NeutralMob { - this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur +@@ -117,6 +138,12 @@ public class PolarBear extends Animal implements NeutralMob { this.goalSelector.addGoal(1, new PolarBear.PolarBearMeleeAttackGoal()); - this.goalSelector.addGoal(1, new PolarBear.PolarBearPanicGoal()); + this.goalSelector + .addGoal(1, new PanicGoal(this, 2.0, polarBear -> polarBear.isBaby() ? DamageTypeTags.PANIC_CAUSES : DamageTypeTags.PANIC_ENVIRONMENTAL_CAUSES)); + // Purpur start + if (level().purpurConfig.polarBearBreedableItem != null) { + this.goalSelector.addGoal(2, new net.minecraft.world.entity.ai.goal.BreedGoal(this, 1.0D)); diff --git a/patches/unapplied-server/0028-Chickens-can-retaliate.patch b/patches/server/0028-Chickens-can-retaliate.patch similarity index 97% rename from patches/unapplied-server/0028-Chickens-can-retaliate.patch rename to patches/server/0028-Chickens-can-retaliate.patch index 29512745a..917b03726 100644 --- a/patches/unapplied-server/0028-Chickens-can-retaliate.patch +++ b/patches/server/0028-Chickens-can-retaliate.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Chickens can retaliate diff --git a/src/main/java/net/minecraft/world/entity/animal/Chicken.java b/src/main/java/net/minecraft/world/entity/animal/Chicken.java -index a7c76e1d89f54f0dc3b27a8a8db168ea4570bf60..14210dac8a4fa8caaf69ec830f83d15525bb1bea 100644 +index ca213cb0b8618b85c67066236eaba87c0439376f..1ff256f2a40403f0fbefc714e3609890be3d60b6 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Chicken.java +++ b/src/main/java/net/minecraft/world/entity/animal/Chicken.java @@ -74,13 +74,16 @@ public class Chicken extends Animal { diff --git a/patches/unapplied-server/0029-Add-option-to-set-armorstand-step-height.patch b/patches/server/0029-Add-option-to-set-armorstand-step-height.patch similarity index 82% rename from patches/unapplied-server/0029-Add-option-to-set-armorstand-step-height.patch rename to patches/server/0029-Add-option-to-set-armorstand-step-height.patch index f9f6dc0b3..a61a59f39 100644 --- a/patches/unapplied-server/0029-Add-option-to-set-armorstand-step-height.patch +++ b/patches/server/0029-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 28c8860d145eb34911e1a54a15597d8c873df872..5ebf68635f868c17bc56a3397e3ceed7b7507aa6 100644 +index 1e274b44ab975afb522874f073469bd10a68a404..55d5ab1582ea9f2bbc9c053d981da456e93c3264 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -339,6 +339,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -343,6 +343,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess public double xOld; public double yOld; public double zOld; @@ -16,7 +16,7 @@ index 28c8860d145eb34911e1a54a15597d8c873df872..5ebf68635f868c17bc56a3397e3ceed7 public boolean noPhysics; public final RandomSource random; public int tickCount; -@@ -4857,7 +4858,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -4546,7 +4547,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } public float maxUpStep() { @@ -26,10 +26,10 @@ index 28c8860d145eb34911e1a54a15597d8c873df872..5ebf68635f868c17bc56a3397e3ceed7 public void onExplosionHit(@Nullable Entity entity) {} 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 a02ca704e98ef42f32c3c50b111ee3537f60bf7b..ebf1d6e3431e36811f14ed09d3b891a074fbdaf2 100644 +index 2f398750bfee5758ad8b1367b6fc14364e4de776..9e6e29b9eddc94b50a32713e8ba1a53deebf02f6 100644 --- a/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java +++ b/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java -@@ -676,6 +676,7 @@ public class ArmorStand extends LivingEntity { +@@ -683,6 +683,7 @@ public class ArmorStand extends LivingEntity { @Override public void tick() { @@ -38,7 +38,7 @@ index a02ca704e98ef42f32c3c50b111ee3537f60bf7b..ebf1d6e3431e36811f14ed09d3b891a0 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 4cd6d9309ed81956d59063fe4d229c6f930922ed..6649787fc15ca06ec2d4e7ac7b0ff061c4d4de82 100644 +index ef4f35a59d716b7927a280c4da372268ad2ff395..bc42fbcb073b8b6f278e256ac66fd514e747a1fe 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/unapplied-server/0030-Cat-spawning-options.patch b/patches/server/0030-Cat-spawning-options.patch similarity index 100% rename from patches/unapplied-server/0030-Cat-spawning-options.patch rename to patches/server/0030-Cat-spawning-options.patch diff --git a/patches/unapplied-server/0031-Cows-eat-mushrooms.patch b/patches/server/0031-Cows-eat-mushrooms.patch similarity index 100% rename from patches/unapplied-server/0031-Cows-eat-mushrooms.patch rename to patches/server/0031-Cows-eat-mushrooms.patch diff --git a/patches/unapplied-server/0032-Fix-cow-rotation-when-shearing-mooshroom.patch b/patches/server/0032-Fix-cow-rotation-when-shearing-mooshroom.patch similarity index 100% rename from patches/unapplied-server/0032-Fix-cow-rotation-when-shearing-mooshroom.patch rename to patches/server/0032-Fix-cow-rotation-when-shearing-mooshroom.patch diff --git a/patches/unapplied-server/0033-Pigs-give-saddle-back.patch b/patches/server/0033-Pigs-give-saddle-back.patch similarity index 96% rename from patches/unapplied-server/0033-Pigs-give-saddle-back.patch rename to patches/server/0033-Pigs-give-saddle-back.patch index 2120c8b55..1c8f7d8f4 100644 --- a/patches/unapplied-server/0033-Pigs-give-saddle-back.patch +++ b/patches/server/0033-Pigs-give-saddle-back.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Pigs give saddle back diff --git a/src/main/java/net/minecraft/world/entity/animal/Pig.java b/src/main/java/net/minecraft/world/entity/animal/Pig.java -index a365573c5c5e640f165701bc79f7c605674c5709..4f84406304114abbaff9f96a5df6a48616983fa9 100644 +index 0f7e77e4f72be611a34ebe00d9979179519c54d9..7b5080993904a41083aa534a87a6eed29afe520c 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Pig.java +++ b/src/main/java/net/minecraft/world/entity/animal/Pig.java @@ -178,6 +178,17 @@ public class Pig extends Animal implements ItemSteerable, Saddleable { diff --git a/patches/unapplied-server/0034-Snowman-drop-and-put-back-pumpkin.patch b/patches/server/0034-Snowman-drop-and-put-back-pumpkin.patch similarity index 100% rename from patches/unapplied-server/0034-Snowman-drop-and-put-back-pumpkin.patch rename to patches/server/0034-Snowman-drop-and-put-back-pumpkin.patch diff --git a/patches/unapplied-server/0035-Ender-dragon-always-drop-full-exp.patch b/patches/server/0035-Ender-dragon-always-drop-full-exp.patch similarity index 93% rename from patches/unapplied-server/0035-Ender-dragon-always-drop-full-exp.patch rename to patches/server/0035-Ender-dragon-always-drop-full-exp.patch index 25e590880..184f5f011 100644 --- a/patches/unapplied-server/0035-Ender-dragon-always-drop-full-exp.patch +++ b/patches/server/0035-Ender-dragon-always-drop-full-exp.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Ender dragon always drop full exp diff --git a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java -index ba4c479b68c9b23e2d4f2cffa0cc8dfb12fd8c9e..ff2faa3ad719378b21f84a7839b4e0c60ea5f66f 100644 +index 4218c84f3bef499bd6ebd4df224d4dcc95f5ce6c..bf2591f163b8482d35a6e532004677199685a593 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 -@@ -747,7 +747,7 @@ public class EnderDragon extends Mob implements Enemy { +@@ -764,7 +764,7 @@ public class EnderDragon extends Mob implements Enemy { boolean flag = this.level().getGameRules().getBoolean(GameRules.RULE_DOMOBLOOT); short short0 = 500; diff --git a/patches/unapplied-server/0036-Allow-soil-to-moisten-from-water-directly-under-it.patch b/patches/server/0036-Allow-soil-to-moisten-from-water-directly-under-it.patch similarity index 94% rename from patches/unapplied-server/0036-Allow-soil-to-moisten-from-water-directly-under-it.patch rename to patches/server/0036-Allow-soil-to-moisten-from-water-directly-under-it.patch index 184d03b5d..e230dff25 100644 --- a/patches/unapplied-server/0036-Allow-soil-to-moisten-from-water-directly-under-it.patch +++ b/patches/server/0036-Allow-soil-to-moisten-from-water-directly-under-it.patch @@ -18,7 +18,7 @@ index d59e33e7326489c6d55d316d0130f22235f4c63c..da85fabd75e9bd5ebece7127ef5b512d } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index a9d6c6713a098ca87d62b43d491bc2d9a8590741..41b804abeab390a259eb0c8ed72f75ad403471dd 100644 +index 2e851587620aca4366da17f3fe1fd79eb4d48ca0..8665e24197df9001c58389c8b79716510d17743b 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -145,6 +145,11 @@ public class PurpurWorldConfig { diff --git a/patches/unapplied-server/0037-Minecart-settings-and-WASD-controls.patch b/patches/server/0037-Minecart-settings-and-WASD-controls.patch similarity index 95% rename from patches/unapplied-server/0037-Minecart-settings-and-WASD-controls.patch rename to patches/server/0037-Minecart-settings-and-WASD-controls.patch index ddbbcbe87..124faa058 100644 --- a/patches/unapplied-server/0037-Minecart-settings-and-WASD-controls.patch +++ b/patches/server/0037-Minecart-settings-and-WASD-controls.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Minecart settings and WASD controls diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 70838e5ee30733a71ad73330f69ea093f73b4bd2..65fa71b587bd14494c71ae265e56de768d6b8219 100644 +index 152b80e1c7402dd02c71ca7c6f6e70bdab6bd88b..b86bdf61be2776352dd6c59b66ecfcee269f8e51 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -1190,6 +1190,7 @@ public class ServerPlayer extends Player { +@@ -1146,6 +1146,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player { if (this.isInvulnerableTo(source)) { return false; } else { @@ -17,7 +17,7 @@ index 70838e5ee30733a71ad73330f69ea093f73b4bd2..65fa71b587bd14494c71ae265e56de76 if (!flag && this.spawnInvulnerableTime > 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 4d7454e5a64fc18e63793a221daa94617f17c666..97172e9c53c381d451111227feb4d1fa19d38ad8 100644 +index f403fc311a974558233028663dbe14c27b27d3f9..9ad276a73cba04edbe48f828031a15727d768a5b 100644 --- a/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecart.java +++ b/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecart.java @@ -102,12 +102,14 @@ public abstract class AbstractMinecart extends VehicleEntity { @@ -136,10 +136,10 @@ index d524fcc191cb95d6ec7f12ae7fceeb8077bb08fc..4b8cebb321eddc852b4ec7def7f51d78 } } 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 2034ca2edd3aff61d94416266e75402babd3e741..3c1091f2a729b7d06ba6e21c37f788edb2ad1775 100644 +index 6c4a339be29bb9c07b741a1ca12de2217c8687ba..52bd9fa49649ede9d29e1c0d348cb13abf2ef1b1 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 -@@ -94,7 +94,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; @@ -149,7 +149,7 @@ index 2034ca2edd3aff61d94416266e75402babd3e741..3c1091f2a729b7d06ba6e21c37f788ed protected ResourceKey drops; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 41b804abeab390a259eb0c8ed72f75ad403471dd..755d53e04bb0ed678bebc3497476e252dd5a736e 100644 +index 8665e24197df9001c58389c8b79716510d17743b..ce11e8ffb0853a4d1beb91248b255d785138893b 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -95,6 +95,68 @@ public class PurpurWorldConfig { diff --git a/patches/unapplied-server/0038-Disable-loot-drops-on-death-by-cramming.patch b/patches/server/0038-Disable-loot-drops-on-death-by-cramming.patch similarity index 67% rename from patches/unapplied-server/0038-Disable-loot-drops-on-death-by-cramming.patch rename to patches/server/0038-Disable-loot-drops-on-death-by-cramming.patch index ab8b80324..b98bd3801 100644 --- a/patches/unapplied-server/0038-Disable-loot-drops-on-death-by-cramming.patch +++ b/patches/server/0038-Disable-loot-drops-on-death-by-cramming.patch @@ -5,27 +5,29 @@ 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 0b542d2cb370b4ca9d04256264c8e8592743aa2f..6bdb919fa0977e8fffab63f556d5409db5d56e8f 100644 +index 8f9756736b08fbaa78b7cff9fa78657c9877e89d..fa30e935c939c3aa7dab562a25aefb8370155da3 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -1858,6 +1858,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -1831,7 +1831,8 @@ public abstract class LivingEntity extends Entity implements Attackable { + boolean flag = this.lastHurtByPlayerTime > 0; this.dropEquipment(); // CraftBukkit - from below - if (this.shouldDropLoot() && this.level().getGameRules().getBoolean(GameRules.RULE_DOMOBLOOT)) { -+ if (!(source.is(net.minecraft.world.damagesource.DamageTypes.CRAMMING) && level().purpurConfig.disableDropsOnCrammingDeath)) { // Purpur - this.dropFromLootTable(source, flag); +- if (this.shouldDropLoot() && world.getGameRules().getBoolean(GameRules.RULE_DOMOBLOOT)) { ++ if (this.shouldDropLoot() && this.level().getGameRules().getBoolean(GameRules.RULE_DOMOBLOOT)) { ++ if (!(damageSource.is(net.minecraft.world.damagesource.DamageTypes.CRAMMING) && level().purpurConfig.disableDropsOnCrammingDeath)) { // Purpur + this.dropFromLootTable(damageSource, flag); // Paper start final boolean prev = this.clearEquipmentSlots; -@@ -1866,6 +1867,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -1840,6 +1841,7 @@ public abstract class LivingEntity extends Entity implements Attackable { // Paper end - this.dropCustomDeathLoot(source, i, flag); + this.dropCustomDeathLoot(world, damageSource, flag); this.clearEquipmentSlots = prev; // Paper + } // Purpur } // CraftBukkit start - Call death event // Paper start - call advancement triggers with correct entity equipment - org.bukkit.event.entity.EntityDeathEvent deathEvent = CraftEventFactory.callEntityDeathEvent(this, source, this.drops, () -> { + org.bukkit.event.entity.EntityDeathEvent deathEvent = CraftEventFactory.callEntityDeathEvent(this, damageSource, this.drops, () -> { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 755d53e04bb0ed678bebc3497476e252dd5a736e..b7bf1a6e59e33d13887ae3d98f37658f52030e37 100644 +index ce11e8ffb0853a4d1beb91248b255d785138893b..aec526d7d148c815cd724ea886486ac7508f4440 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -95,6 +95,11 @@ public class PurpurWorldConfig { diff --git a/patches/unapplied-server/0039-Option-to-toggle-milk-curing-bad-omen.patch b/patches/server/0039-Option-to-toggle-milk-curing-bad-omen.patch similarity index 82% rename from patches/unapplied-server/0039-Option-to-toggle-milk-curing-bad-omen.patch rename to patches/server/0039-Option-to-toggle-milk-curing-bad-omen.patch index 90595d0c8..816792061 100644 --- a/patches/unapplied-server/0039-Option-to-toggle-milk-curing-bad-omen.patch +++ b/patches/server/0039-Option-to-toggle-milk-curing-bad-omen.patch @@ -5,21 +5,21 @@ Subject: [PATCH] Option to toggle milk curing bad omen diff --git a/src/main/java/net/minecraft/world/item/MilkBucketItem.java b/src/main/java/net/minecraft/world/item/MilkBucketItem.java -index 0f83ae4b0d5f52ff9ccfff6bbcc31153d45bd619..d0751274e89042715cab8e9e72387042356e3244 100644 +index 43c9dea6b0db7f8d6070dedcb472883ab46d9eaf..15a1f9ffbf640bffadca97e28f72b6a5d43c65d7 100644 --- a/src/main/java/net/minecraft/world/item/MilkBucketItem.java +++ b/src/main/java/net/minecraft/world/item/MilkBucketItem.java -@@ -26,7 +26,9 @@ public class MilkBucketItem extends Item { +@@ -25,7 +25,9 @@ public class MilkBucketItem extends Item { + } - stack.consume(1, user); if (!world.isClientSide) { + net.minecraft.world.effect.MobEffectInstance badOmen = user.getEffect(net.minecraft.world.effect.MobEffects.BAD_OMEN); // Purpur user.removeAllEffects(org.bukkit.event.entity.EntityPotionEffectEvent.Cause.MILK); // CraftBukkit + if (!world.purpurConfig.milkCuresBadOmen && badOmen != null) user.addEffect(badOmen); // Purpur } - return stack.isEmpty() ? new ItemStack(Items.BUCKET) : stack; + if (user instanceof Player entityhuman) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index b7bf1a6e59e33d13887ae3d98f37658f52030e37..40493cbb1b14f16549b95aa439e4c25c04a0627c 100644 +index aec526d7d148c815cd724ea886486ac7508f4440..8f219c6074c2ee882686f59ef5128e94d2e61578 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/unapplied-server/0041-Skip-events-if-there-s-no-listeners.patch b/patches/server/0040-Skip-events-if-there-s-no-listeners.patch similarity index 88% rename from patches/unapplied-server/0041-Skip-events-if-there-s-no-listeners.patch rename to patches/server/0040-Skip-events-if-there-s-no-listeners.patch index ae08f77b2..b4b8bc2aa 100644 --- a/patches/unapplied-server/0041-Skip-events-if-there-s-no-listeners.patch +++ b/patches/server/0040-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 0126906e2afc8dd525f27a0c5e82116075c9d352..758fe6a1d197cf9ea1f1c959eb6bf8091fe2cccf 100644 +index d0a2581bc87df5335c064fa7854caf0bab512e91..f12f208c1c4669b0aae35cb86b122bbf06fd884a 100644 --- a/src/main/java/net/minecraft/commands/Commands.java +++ b/src/main/java/net/minecraft/commands/Commands.java -@@ -520,6 +520,7 @@ public class Commands { +@@ -518,6 +518,7 @@ public class Commands { private void runSync(ServerPlayer player, Collection bukkit, RootCommandNode rootcommandnode) { // Paper end - Perf: Async command map building new com.destroystokyo.paper.event.brigadier.AsyncPlayerSendCommandsEvent(player.getBukkitEntity(), (RootCommandNode) rootcommandnode, false).callEvent(); // Paper - Brigadier API @@ -16,7 +16,7 @@ index 0126906e2afc8dd525f27a0c5e82116075c9d352..758fe6a1d197cf9ea1f1c959eb6bf809 PlayerCommandSendEvent event = new PlayerCommandSendEvent(player.getBukkitEntity(), new LinkedHashSet<>(bukkit)); event.getPlayer().getServer().getPluginManager().callEvent(event); -@@ -530,6 +531,7 @@ public class Commands { +@@ -528,6 +529,7 @@ public class Commands { } } // CraftBukkit end diff --git a/patches/unapplied-server/0042-Add-permission-for-F3-N-debug.patch b/patches/server/0041-Add-permission-for-F3-N-debug.patch similarity index 83% rename from patches/unapplied-server/0042-Add-permission-for-F3-N-debug.patch rename to patches/server/0041-Add-permission-for-F3-N-debug.patch index 8b2ac074b..411826e8d 100644 --- a/patches/unapplied-server/0042-Add-permission-for-F3-N-debug.patch +++ b/patches/server/0041-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 f10dcc0debcdd2077ee53cb1aefca8abd12f3ecd..338808ba1138f62d89f3f1338a4c5068426df0e4 100644 +index 27391592eca984295c648edefce50f3360f5be1e..09595bbd536fc84d309163923317a860f606ea7c 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -1180,6 +1180,7 @@ public abstract class PlayerList { +@@ -1132,6 +1132,7 @@ public abstract class PlayerList { } else { b0 = (byte) (24 + permissionLevel); } diff --git a/patches/unapplied-server/0043-Configurable-TPS-Catchup.patch b/patches/server/0042-Configurable-TPS-Catchup.patch similarity index 92% rename from patches/unapplied-server/0043-Configurable-TPS-Catchup.patch rename to patches/server/0042-Configurable-TPS-Catchup.patch index ed3578771..0b6fab963 100644 --- a/patches/unapplied-server/0043-Configurable-TPS-Catchup.patch +++ b/patches/server/0042-Configurable-TPS-Catchup.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Configurable TPS Catchup diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 87957873de7f8cea2ae84abf04c99a42c8c3a815..843169bf1600d2edcaad8eb6c8036be20ffc3d37 100644 +index dc6271173e27df036a264ba78b31d65ae6cfede8..75ef804dda665c19e54be32ad28370c5d7158902 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1236,6 +1236,12 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop Date: Fri, 14 Jun 2024 14:54:29 -0700 Subject: [PATCH 052/588] 100 patches \o/ --- ...tities-can-use-portals-configuration.patch | 0 ...te-and-mending-enchantments-together.patch | 0 ...rable-void-damage-height-and-damage.patch} | 8 +- .../0050-Add-canSaveToDisk-to-Entity.patch} | 39 ++-- ...spenser-curse-of-binding-protection.patch} | 14 +- ...-for-boats-to-eject-players-on-land.patch} | 6 +- ...-mends-most-damages-equipment-first.patch} | 48 +++-- ...054-Add-5-second-tps-average-in-tps.patch} | 12 +- .../0055-Implement-elytra-settings.patch} | 69 ++++--- .../0056-Item-entity-immunities.patch} | 12 +- .../0057-Add-ping-command.patch} | 4 +- .../0058-Add-demo-command.patch} | 6 +- .../0059-Add-credits-command.patch} | 6 +- .../0060-Configurable-jockey-options.patch} | 30 +-- ...d-to-crystals-and-crystals-shoot-ph.patch} | 8 +- .../0062-Add-phantom-spawning-options.patch} | 2 +- ...063-Implement-bed-explosion-options.patch} | 2 +- ...nt-respawn-anchor-explosion-options.patch} | 2 +- ...Add-allow-water-in-end-world-option.patch} | 18 +- .../0066-Allow-color-codes-in-books.patch} | 12 +- .../0067-Entity-lifespan.patch} | 22 +-- ...eport-to-spawn-if-outside-world-bor.patch} | 10 +- .../0069-Squid-EAR-immunity.patch} | 6 +- .../0070-Phantoms-burn-in-light.patch} | 6 +- ...0071-Configurable-villager-breeding.patch} | 14 +- .../0072-Redstone-deactivates-spawners.patch} | 2 +- .../0073-Totems-work-in-inventory.patch} | 6 +- ...-Add-vindicator-johnny-spawn-chance.patch} | 13 +- ...0075-Dispensers-place-anvils-option.patch} | 6 +- .../0076-Allow-anvil-colors.patch} | 4 +- ...-disable-dolphin-treasure-searching.patch} | 6 +- .../0078-Short-enderman-height.patch} | 8 +- ...top-squids-floating-on-top-of-water.patch} | 16 +- ...ng-obsidian-valid-for-portal-frames.patch} | 6 +- ...081-LivingEntity-broadcastItemBreak.patch} | 4 +- ...tomizable-wither-health-and-healing.patch} | 8 +- ...gling-special-MobSpawners-per-world.patch} | 8 +- .../0084-Raid-cooldown-setting.patch} | 6 +- ...-config-options-per-projectile-type.patch} | 4 +- ...able-zombie-aggressiveness-towards-.patch} | 10 +- ...-to-recipe-s-ExactChoice-ingredient.patch} | 0 .../0088-Flying-squids-Oh-my.patch} | 16 +- .../0089-Configurable-daylight-cycle.patch} | 26 +-- ...0-Furnace-uses-lava-from-underneath.patch} | 12 +- ...ws-should-not-reset-despawn-counter.patch} | 6 +- ...e-add-farmland-mechanics-from-Alpha.patch} | 4 +- ...ustable-breeding-cooldown-to-config.patch} | 14 +- ...-entity-breeding-times-configurable.patch} | 172 +++++++++--------- ...es-from-item-forms-of-entities-to-e.patch} | 38 ++-- 49 files changed, 383 insertions(+), 368 deletions(-) rename patches/{unapplied-server => dropped-server}/0083-Entities-can-use-portals-configuration.patch (100%) rename patches/{unapplied-server => dropped-server}/0094-Allow-infinite-and-mending-enchantments-together.patch (100%) rename patches/{unapplied-server/0051-Configurable-void-damage-height-and-damage.patch => server/0049-Configurable-void-damage-height-and-damage.patch} (89%) rename patches/{unapplied-server/0052-Add-canSaveToDisk-to-Entity.patch => server/0050-Add-canSaveToDisk-to-Entity.patch} (70%) rename patches/{unapplied-server/0053-Dispenser-curse-of-binding-protection.patch => server/0051-Dispenser-curse-of-binding-protection.patch} (76%) rename patches/{unapplied-server/0054-Add-option-for-boats-to-eject-players-on-land.patch => server/0052-Add-option-for-boats-to-eject-players-on-land.patch} (87%) rename patches/{unapplied-server/0055-Mending-mends-most-damages-equipment-first.patch => server/0053-Mending-mends-most-damages-equipment-first.patch} (65%) rename patches/{unapplied-server/0056-Add-5-second-tps-average-in-tps.patch => server/0054-Add-5-second-tps-average-in-tps.patch} (93%) rename patches/{unapplied-server/0057-Implement-elytra-settings.patch => server/0055-Implement-elytra-settings.patch} (68%) rename patches/{unapplied-server/0058-Item-entity-immunities.patch => server/0056-Item-entity-immunities.patch} (94%) rename patches/{unapplied-server/0059-Add-ping-command.patch => server/0057-Add-ping-command.patch} (96%) rename patches/{unapplied-server/0060-Add-demo-command.patch => server/0058-Add-demo-command.patch} (94%) rename patches/{unapplied-server/0061-Add-credits-command.patch => server/0059-Add-credits-command.patch} (95%) rename patches/{unapplied-server/0062-Configurable-jockey-options.patch => server/0060-Configurable-jockey-options.patch} (93%) rename patches/{unapplied-server/0063-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch => server/0061-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch} (97%) rename patches/{unapplied-server/0064-Add-phantom-spawning-options.patch => server/0062-Add-phantom-spawning-options.patch} (98%) rename patches/{unapplied-server/0065-Implement-bed-explosion-options.patch => server/0063-Implement-bed-explosion-options.patch} (97%) rename patches/{unapplied-server/0066-Implement-respawn-anchor-explosion-options.patch => server/0064-Implement-respawn-anchor-explosion-options.patch} (97%) rename patches/{unapplied-server/0067-Add-allow-water-in-end-world-option.patch => server/0065-Add-allow-water-in-end-world-option.patch} (87%) rename patches/{unapplied-server/0068-Allow-color-codes-in-books.patch => server/0066-Allow-color-codes-in-books.patch} (92%) rename patches/{unapplied-server/0069-Entity-lifespan.patch => server/0067-Entity-lifespan.patch} (81%) rename patches/{unapplied-server/0070-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch => server/0068-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch} (89%) rename patches/{unapplied-server/0071-Squid-EAR-immunity.patch => server/0069-Squid-EAR-immunity.patch} (88%) rename patches/{unapplied-server/0072-Phantoms-burn-in-light.patch => server/0070-Phantoms-burn-in-light.patch} (95%) rename patches/{unapplied-server/0073-Configurable-villager-breeding.patch => server/0071-Configurable-villager-breeding.patch} (78%) rename patches/{unapplied-server/0074-Redstone-deactivates-spawners.patch => server/0072-Redstone-deactivates-spawners.patch} (94%) rename patches/{unapplied-server/0075-Totems-work-in-inventory.patch => server/0073-Totems-work-in-inventory.patch} (91%) rename patches/{unapplied-server/0076-Add-vindicator-johnny-spawn-chance.patch => server/0074-Add-vindicator-johnny-spawn-chance.patch} (80%) rename patches/{unapplied-server/0077-Dispensers-place-anvils-option.patch => server/0075-Dispensers-place-anvils-option.patch} (90%) rename patches/{unapplied-server/0078-Allow-anvil-colors.patch => server/0076-Allow-anvil-colors.patch} (96%) rename patches/{unapplied-server/0079-Add-option-to-disable-dolphin-treasure-searching.patch => server/0077-Add-option-to-disable-dolphin-treasure-searching.patch} (88%) rename patches/{unapplied-server/0080-Short-enderman-height.patch => server/0078-Short-enderman-height.patch} (88%) rename patches/{unapplied-server/0081-Stop-squids-floating-on-top-of-water.patch => server/0079-Stop-squids-floating-on-top-of-water.patch} (84%) rename patches/{unapplied-server/0082-Crying-obsidian-valid-for-portal-frames.patch => server/0080-Crying-obsidian-valid-for-portal-frames.patch} (90%) rename patches/{unapplied-server/0084-LivingEntity-broadcastItemBreak.patch => server/0081-LivingEntity-broadcastItemBreak.patch} (85%) rename patches/{unapplied-server/0085-Customizable-wither-health-and-healing.patch => server/0082-Customizable-wither-health-and-healing.patch} (89%) rename patches/{unapplied-server/0086-Allow-toggling-special-MobSpawners-per-world.patch => server/0083-Allow-toggling-special-MobSpawners-per-world.patch} (94%) rename patches/{unapplied-server/0087-Raid-cooldown-setting.patch => server/0084-Raid-cooldown-setting.patch} (95%) rename patches/{unapplied-server/0088-Despawn-rate-config-options-per-projectile-type.patch => server/0085-Despawn-rate-config-options-per-projectile-type.patch} (94%) rename patches/{unapplied-server/0089-Add-option-to-disable-zombie-aggressiveness-towards-.patch => server/0086-Add-option-to-disable-zombie-aggressiveness-towards-.patch} (94%) rename patches/{unapplied-server/0090-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch => server/0087-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch} (100%) rename patches/{unapplied-server/0091-Flying-squids-Oh-my.patch => server/0088-Flying-squids-Oh-my.patch} (89%) rename patches/{unapplied-server/0093-Configurable-daylight-cycle.patch => server/0089-Configurable-daylight-cycle.patch} (81%) rename patches/{unapplied-server/0095-Furnace-uses-lava-from-underneath.patch => server/0090-Furnace-uses-lava-from-underneath.patch} (88%) rename patches/{unapplied-server/0096-Arrows-should-not-reset-despawn-counter.patch => server/0091-Arrows-should-not-reset-despawn-counter.patch} (88%) rename patches/{unapplied-server/0097-Ability-to-re-add-farmland-mechanics-from-Alpha.patch => server/0092-Ability-to-re-add-farmland-mechanics-from-Alpha.patch} (92%) rename patches/{unapplied-server/0098-Add-adjustable-breeding-cooldown-to-config.patch => server/0093-Add-adjustable-breeding-cooldown-to-config.patch} (93%) rename patches/{unapplied-server/0099-Make-entity-breeding-times-configurable.patch => server/0094-Make-entity-breeding-times-configurable.patch} (88%) rename patches/{unapplied-server/0100-Apply-display-names-from-item-forms-of-entities-to-e.patch => server/0095-Apply-display-names-from-item-forms-of-entities-to-e.patch} (85%) diff --git a/patches/unapplied-server/0083-Entities-can-use-portals-configuration.patch b/patches/dropped-server/0083-Entities-can-use-portals-configuration.patch similarity index 100% rename from patches/unapplied-server/0083-Entities-can-use-portals-configuration.patch rename to patches/dropped-server/0083-Entities-can-use-portals-configuration.patch diff --git a/patches/unapplied-server/0094-Allow-infinite-and-mending-enchantments-together.patch b/patches/dropped-server/0094-Allow-infinite-and-mending-enchantments-together.patch similarity index 100% rename from patches/unapplied-server/0094-Allow-infinite-and-mending-enchantments-together.patch rename to patches/dropped-server/0094-Allow-infinite-and-mending-enchantments-together.patch diff --git a/patches/unapplied-server/0051-Configurable-void-damage-height-and-damage.patch b/patches/server/0049-Configurable-void-damage-height-and-damage.patch similarity index 89% rename from patches/unapplied-server/0051-Configurable-void-damage-height-and-damage.patch rename to patches/server/0049-Configurable-void-damage-height-and-damage.patch index 49ed2e380..66d2498be 100644 --- a/patches/unapplied-server/0051-Configurable-void-damage-height-and-damage.patch +++ b/patches/server/0049-Configurable-void-damage-height-and-damage.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Configurable void damage height and damage diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 8feace82105dccd2db3872a7e735ce376397abc8..90788e4ffdc6f38675aa859e3b2ff185046ac3fc 100644 +index 55d5ab1582ea9f2bbc9c053d981da456e93c3264..83ea9c2456ccf3d92efb2361768a65f2a1bbf745 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -947,7 +947,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -808,7 +808,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess public void checkBelowWorld() { // Paper start - Configurable nether ceiling damage @@ -18,7 +18,7 @@ index 8feace82105dccd2db3872a7e735ce376397abc8..90788e4ffdc6f38675aa859e3b2ff185 && (!(this instanceof Player player) || !player.getAbilities().invulnerable))) { // Paper end - Configurable nether ceiling damage diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 6bdb919fa0977e8fffab63f556d5409db5d56e8f..1ebf980eaf233f828dda11e5ec1a12e604f08a96 100644 +index fa30e935c939c3aa7dab562a25aefb8370155da3..f35663c26b17a5c89cd4dbb3c9d1a439018b3b07 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java @@ -2576,7 +2576,7 @@ public abstract class LivingEntity extends Entity implements Attackable { @@ -31,7 +31,7 @@ index 6bdb919fa0977e8fffab63f556d5409db5d56e8f..1ebf980eaf233f828dda11e5ec1a12e6 protected void updateSwingTime() { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 66e12893bb9d8984a8cd2916834c5e86058f47bb..03c35e455b405517114ffc043732359c112e343f 100644 +index ea0268f2b8a3fc7c1b25c8d80e98096cc607031e..d9b3dacbb61027437dae8a2afec396cd9b484f6e 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -98,10 +98,14 @@ public class PurpurWorldConfig { diff --git a/patches/unapplied-server/0052-Add-canSaveToDisk-to-Entity.patch b/patches/server/0050-Add-canSaveToDisk-to-Entity.patch similarity index 70% rename from patches/unapplied-server/0052-Add-canSaveToDisk-to-Entity.patch rename to patches/server/0050-Add-canSaveToDisk-to-Entity.patch index f6bac21c2..9202b1e88 100644 --- a/patches/unapplied-server/0052-Add-canSaveToDisk-to-Entity.patch +++ b/patches/server/0050-Add-canSaveToDisk-to-Entity.patch @@ -5,25 +5,26 @@ Subject: [PATCH] Add canSaveToDisk to Entity diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index e4e240b227fbde9dee03d7a3fa8364e3b129da88..9b653134ad71a6d3ff22dfaa15390e3cd7b4453a 100644 +index 83ea9c2456ccf3d92efb2361768a65f2a1bbf745..b0c65f5a6cf79f22603d3dd93fffac435686b41c 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -557,6 +557,10 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess - return false; +@@ -457,6 +457,11 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess + return this.dimensions.makeBoundingBox(x, y, z); } - + // Paper end ++ // Purpur start + public boolean canSaveToDisk() { + return true; + } -+ - public final boolean hardCollides() { - return this.hardCollides; - } ++ // Purpur end + + public Entity(EntityType type, Level world) { + this.id = Entity.ENTITY_COUNTER.incrementAndGet(); 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 4117260538e47c978ea31c76f439d43369ebedfb..c753f715710ec4bb8337e035ac5a4c11371a84a0 100644 +index 63f48841c849ff49d9d43efc5de8952c5a9bba3a..e472df057d087fe46bd40b798c050ed6e38a283c 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/WitherSkull.java +++ b/src/main/java/net/minecraft/world/entity/projectile/WitherSkull.java -@@ -117,6 +117,11 @@ public class WitherSkull extends AbstractHurtingProjectile { +@@ -121,6 +121,11 @@ public class WitherSkull extends AbstractHurtingProjectile { // do not hit rider return target != this.getRider() && super.canHitEntity(target); } @@ -36,17 +37,17 @@ index 4117260538e47c978ea31c76f439d43369ebedfb..c753f715710ec4bb8337e035ac5a4c11 @Override diff --git a/src/main/java/net/minecraft/world/level/chunk/storage/EntityStorage.java b/src/main/java/net/minecraft/world/level/chunk/storage/EntityStorage.java -index bee39dee1b96023c907407877aedf3aafaf5e1b8..5b6bc200381a486c99061f9f5b7121c2c355b477 100644 +index 36b8a9ac385e43f3212aca1b1f5bd7115bd00431..8097ff9264b94caad0b4727f2c2d93870c21ba2c 100644 --- a/src/main/java/net/minecraft/world/level/chunk/storage/EntityStorage.java +++ b/src/main/java/net/minecraft/world/level/chunk/storage/EntityStorage.java -@@ -107,6 +107,7 @@ public class EntityStorage implements EntityPersistentStorage { - ListTag listTag = new ListTag(); - final java.util.Map, Integer> savedEntityCounts = new java.util.HashMap<>(); // Paper - Entity load/save limit per chunk - entities.forEach((entity) -> { // diff here: use entities parameter -+ if (!entity.canSaveToDisk()) return; // Purpur - // Paper start - Entity load/save limit per chunk - final EntityType entityType = entity.getType(); - final int saveLimit = level.paperConfig().chunks.entityPerChunkSaveLimit.getOrDefault(entityType, -1); +@@ -94,6 +94,7 @@ public class EntityStorage implements EntityPersistentStorage { + ListTag listTag = new ListTag(); + dataList.getEntities().forEach(entity -> { + CompoundTag compoundTagx = new CompoundTag(); ++ if (!entity.canSaveToDisk()) return; // Purpur + if (entity.save(compoundTagx)) { + listTag.add(compoundTagx); + } diff --git a/src/main/java/org/purpurmc/purpur/entity/DolphinSpit.java b/src/main/java/org/purpurmc/purpur/entity/DolphinSpit.java index 89c476c740b4efb4f44c1dcd384b908626d96780..f25abee6dbf99c8d08f8e09db02b41df86115faa 100644 --- a/src/main/java/org/purpurmc/purpur/entity/DolphinSpit.java diff --git a/patches/unapplied-server/0053-Dispenser-curse-of-binding-protection.patch b/patches/server/0051-Dispenser-curse-of-binding-protection.patch similarity index 76% rename from patches/unapplied-server/0053-Dispenser-curse-of-binding-protection.patch rename to patches/server/0051-Dispenser-curse-of-binding-protection.patch index 903c7f4ef..931e92db3 100644 --- a/patches/unapplied-server/0053-Dispenser-curse-of-binding-protection.patch +++ b/patches/server/0051-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 a0e0d3ca25bf047a5520a3ed47f93ab97377b8b4..49422ea596125ee669bdc66d88f084b692acaca7 100644 +index ec3e0e076cb9f2b5160988ab78d6ab7b33f9490f..cc326c3b6a78755b7bc17ebf864cc9c99ec38c1a 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java -@@ -1309,6 +1309,12 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Targeti +@@ -1294,6 +1294,12 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab } @@ -22,20 +22,20 @@ index a0e0d3ca25bf047a5520a3ed47f93ab97377b8b4..49422ea596125ee669bdc66d88f084b6 public static Item getEquipmentForSlot(EquipmentSlot equipmentSlot, int equipmentLevel) { switch (equipmentSlot) { diff --git a/src/main/java/net/minecraft/world/item/ArmorItem.java b/src/main/java/net/minecraft/world/item/ArmorItem.java -index 786e4a8700cb84b16dd9b8892a0d1d5803924d81..b108ca4c7900ccf6a14ebea01c21c103459054f8 100644 +index 647a4601deace52f8d855f512a73671f82b4762a..d6bdd6313e0e5be3ddfa04f40cf035e72e09f1ea 100644 --- a/src/main/java/net/minecraft/world/item/ArmorItem.java +++ b/src/main/java/net/minecraft/world/item/ArmorItem.java -@@ -69,7 +69,7 @@ public class ArmorItem extends Item implements Equipable { +@@ -60,7 +60,7 @@ public class ArmorItem extends Item implements Equipable { return false; } else { LivingEntity entityliving = (LivingEntity) list.get(0); -- EquipmentSlot enumitemslot = Mob.getEquipmentSlotForItem(armor); -+ EquipmentSlot enumitemslot = pointer.level().purpurConfig.dispenserApplyCursedArmor ? Mob.getEquipmentSlotForItem(armor) : Mob.getSlotForDispenser(armor); if (enumitemslot == null) return false; // Purpur +- EquipmentSlot enumitemslot = entityliving.getEquipmentSlotForItem(armor); ++ EquipmentSlot enumitemslot = pointer.level().purpurConfig.dispenserApplyCursedArmor ? entityliving.getEquipmentSlotForItem(armor) : Mob.getSlotForDispenser(armor); if (enumitemslot == null) return false; // Purpur ItemStack itemstack1 = armor.copyWithCount(1); // Paper - shrink below and single item in event // 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 03c35e455b405517114ffc043732359c112e343f..27c1f09be7d664073263a02a8854ff1e8c6f9ab1 100644 +index d9b3dacbb61027437dae8a2afec396cd9b484f6e..55b8f6d46637b56a6f175649a5fdfbe3154b6323 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/unapplied-server/0054-Add-option-for-boats-to-eject-players-on-land.patch b/patches/server/0052-Add-option-for-boats-to-eject-players-on-land.patch similarity index 87% rename from patches/unapplied-server/0054-Add-option-for-boats-to-eject-players-on-land.patch rename to patches/server/0052-Add-option-for-boats-to-eject-players-on-land.patch index dfbc74be0..5f0d77abe 100644 --- a/patches/unapplied-server/0054-Add-option-for-boats-to-eject-players-on-land.patch +++ b/patches/server/0052-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 b068cff9b5aa457d65b679529956e8210296d799..0b23e05f936cab7a9867828c2d69417cfde1d2ce 100644 +index 907f751c859855484151fb5d607acee2f2a35076..4e1b2d65182f7d562a8470449b9f7c2ef6ab6445 100644 --- a/src/main/java/net/minecraft/world/entity/vehicle/Boat.java +++ b/src/main/java/net/minecraft/world/entity/vehicle/Boat.java -@@ -514,6 +514,7 @@ public class Boat extends VehicleEntity implements VariantHolder { +@@ -543,6 +543,7 @@ public class Boat extends VehicleEntity implements Leashable, VariantHolder 0.0F) { this.landFriction = f; @@ -17,7 +17,7 @@ index b068cff9b5aa457d65b679529956e8210296d799..0b23e05f936cab7a9867828c2d69417c } 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 27c1f09be7d664073263a02a8854ff1e8c6f9ab1..76c1cfc35b598eab2ca27656feeb17f79dde7e00 100644 +index 55b8f6d46637b56a6f175649a5fdfbe3154b6323..e6333a4177e5e3bde40fa66d57299e676b8aebef 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/unapplied-server/0055-Mending-mends-most-damages-equipment-first.patch b/patches/server/0053-Mending-mends-most-damages-equipment-first.patch similarity index 65% rename from patches/unapplied-server/0055-Mending-mends-most-damages-equipment-first.patch rename to patches/server/0053-Mending-mends-most-damages-equipment-first.patch index 2f5754062..f080fefdb 100644 --- a/patches/unapplied-server/0055-Mending-mends-most-damages-equipment-first.patch +++ b/patches/server/0053-Mending-mends-most-damages-equipment-first.patch @@ -5,23 +5,31 @@ 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 46d8bcad1545953757659870901cbbdf3340bc15..45fda4c03c6fe586d26638f0a2a1d26db807e52c 100644 +index 15844971ce2cca8c679ad3aaa2dfe160e6d0b564..6598a737db11fb0c7e7a95b9bbfaabd75895cbdd 100644 --- a/src/main/java/net/minecraft/world/entity/ExperienceOrb.java +++ b/src/main/java/net/minecraft/world/entity/ExperienceOrb.java -@@ -344,7 +344,7 @@ public class ExperienceOrb extends Entity { +@@ -20,6 +20,7 @@ import net.minecraft.world.item.ItemStack; + import net.minecraft.world.item.enchantment.EnchantedItemInUse; + import net.minecraft.world.item.enchantment.EnchantmentEffectComponents; + import net.minecraft.world.item.enchantment.EnchantmentHelper; ++import net.minecraft.world.item.enchantment.Enchantments; + import net.minecraft.world.level.Level; + import net.minecraft.world.level.entity.EntityTypeTest; + import net.minecraft.world.phys.AABB; +@@ -347,7 +348,7 @@ public class ExperienceOrb extends Entity { } - private int repairPlayerItems(Player player, int amount) { -- Entry entry = EnchantmentHelper.getRandomItemWith(Enchantments.MENDING, player, ItemStack::isDamaged); -+ Entry entry = level().purpurConfig.useBetterMending ? EnchantmentHelper.getMostDamagedEquipment(Enchantments.MENDING, player) : EnchantmentHelper.getRandomItemWith(Enchantments.MENDING, player, ItemStack::isDamaged); // Purpur + private int repairPlayerItems(ServerPlayer player, int amount) { +- Optional optional = EnchantmentHelper.getRandomItemWith(EnchantmentEffectComponents.REPAIR_WITH_XP, player, ItemStack::isDamaged); ++ Optional optional = level().purpurConfig.useBetterMending ? EnchantmentHelper.getMostDamagedEquipment(Enchantments.MENDING, player) : EnchantmentHelper.getRandomItemWith(EnchantmentEffectComponents.REPAIR_WITH_XP, player, ItemStack::isDamaged); // Purpur - if (entry != null) { - ItemStack itemstack = (ItemStack) entry.getValue(); + if (optional.isPresent()) { + ItemStack itemstack = ((EnchantedItemInUse) optional.get()).itemStack(); diff --git a/src/main/java/net/minecraft/world/item/ItemStack.java b/src/main/java/net/minecraft/world/item/ItemStack.java -index 58c38bc4361ddf24716f326b0c6fc626d434756e..6ab9bc3da937f259b4d5b4ef69c011170b1f6783 100644 +index 86197725f0f2ac1e650297ae7a79907578e0e8f1..5e86f7d7d7594bd82c50db6d17763a50dc58e7a5 100644 --- a/src/main/java/net/minecraft/world/item/ItemStack.java +++ b/src/main/java/net/minecraft/world/item/ItemStack.java -@@ -638,6 +638,16 @@ public final class ItemStack implements DataComponentHolder { +@@ -643,6 +643,16 @@ public final class ItemStack implements DataComponentHolder { return this.isDamageableItem() && this.getDamageValue() > 0; } @@ -39,11 +47,19 @@ index 58c38bc4361ddf24716f326b0c6fc626d434756e..6ab9bc3da937f259b4d5b4ef69c01117 return Mth.clamp((Integer) this.getOrDefault(DataComponents.DAMAGE, 0), 0, this.getMaxDamage()); } diff --git a/src/main/java/net/minecraft/world/item/enchantment/EnchantmentHelper.java b/src/main/java/net/minecraft/world/item/enchantment/EnchantmentHelper.java -index d2f0463b0e74983eb2e3dfca9a268e9502b86257..6d0363cec691996be416ab22ef9d825196399158 100644 +index fce49b17905ab97e691aa8499a5dfed67adf0c40..5ef8f69a4271c0a70380b5bd321735ff3e2b8cdd 100644 --- a/src/main/java/net/minecraft/world/item/enchantment/EnchantmentHelper.java +++ b/src/main/java/net/minecraft/world/item/enchantment/EnchantmentHelper.java -@@ -237,6 +237,29 @@ public class EnchantmentHelper { - return getItemEnchantmentLevel(Enchantments.CHANNELING, stack) > 0; +@@ -6,6 +6,7 @@ import it.unimi.dsi.fastutil.objects.Object2IntMap.Entry; + import java.util.ArrayList; + import java.util.Collection; + import java.util.List; ++import java.util.Map; + import java.util.Optional; + import java.util.function.BiConsumer; + import java.util.function.Consumer; +@@ -380,6 +381,29 @@ public class EnchantmentHelper { + return false; } + // Purpur start @@ -69,11 +85,11 @@ index d2f0463b0e74983eb2e3dfca9a268e9502b86257..6d0363cec691996be416ab22ef9d8251 + } + // Purpur end + - @Nullable - public static java.util.Map.Entry getRandomItemWith(Enchantment enchantment, LivingEntity entity) { - return getRandomItemWith(enchantment, entity, stack -> true); + public static boolean has(ItemStack stack, DataComponentType componentType) { + MutableBoolean mutableBoolean = new MutableBoolean(false); + runIterationOnItem(stack, (enchantment, level) -> { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 76c1cfc35b598eab2ca27656feeb17f79dde7e00..6705d722e1abe678a5cb90503904dc7888bf55ee 100644 +index e6333a4177e5e3bde40fa66d57299e676b8aebef..69df43378e11579715fac8afbed3207892d69242 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -95,6 +95,7 @@ public class PurpurWorldConfig { diff --git a/patches/unapplied-server/0056-Add-5-second-tps-average-in-tps.patch b/patches/server/0054-Add-5-second-tps-average-in-tps.patch similarity index 93% rename from patches/unapplied-server/0056-Add-5-second-tps-average-in-tps.patch rename to patches/server/0054-Add-5-second-tps-average-in-tps.patch index da28a5f4e..45dc4af23 100644 --- a/patches/unapplied-server/0056-Add-5-second-tps-average-in-tps.patch +++ b/patches/server/0054-Add-5-second-tps-average-in-tps.patch @@ -18,10 +18,10 @@ index 039a86034928a5eb7aaa2d7ca76a7bddcca346bd..308f67d0616e2d6bb135258f1fda53cc } diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index e2c0857e9628cca3aeef99c8e351281c7777415a..f98b2cd4e0b59fdd64934a1b83403d6124e4a97f 100644 +index 75ef804dda665c19e54be32ad28370c5d7158902..0ce81b0d621d2914903c4325f2e602a246544890 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -307,7 +307,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 0) { + int originalDamage = amount; // Paper - Expand PlayerItemDamageEvent ++ // (getItem() == Items.ELYTRA && player != null && player.level().purpurConfig.elytraIgnoreUnbreaking) ? 0 : // Purpur + amount = EnchantmentHelper.processDurabilityChange(world, this, amount); + // CraftBukkit start + if (player instanceof ServerPlayer serverPlayer) { // Paper - Add EntityDamageItemEvent +@@ -740,6 +741,12 @@ public final class ItemStack implements DataComponentHolder { + } - if (amount > 0) { -- j = EnchantmentHelper.getItemEnchantmentLevel(Enchantments.UNBREAKING, this); -+ j = (getItem() == Items.ELYTRA && player != null && player.level().purpurConfig.elytraIgnoreUnbreaking) ? 0 : EnchantmentHelper.getItemEnchantmentLevel(Enchantments.UNBREAKING, this); - int k = 0; - - for (int l = 0; j > 0 && l < amount; ++l) { -@@ -748,6 +748,12 @@ public final class ItemStack implements DataComponentHolder { - this.hurtAndBreak(amount, randomsource, entity, () -> { // Paper - Add EntityDamageItemEvent - if (slot != null) entity.broadcastBreakEvent(slot); // Paper - ItemStack damage API - slot is nullable - Item item = this.getItem(); -+ // Purpur start -+ if (item == Items.ELYTRA) { -+ setDamageValue(getMaxDamage() - 1); -+ return; -+ } + this.hurtAndBreak(amount, worldserver, entity, (item) -> { // Paper - Add EntityDamageItemEvent ++ // Purpur start - TODO: 1-21: check later ++ // if (item == Items.ELYTRA) { ++ // setDamageValue(getMaxDamage() - 1); ++ // return; ++ // } + // Purpur end // CraftBukkit start - Check for item breaking 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 47de500fddb0716d142f8f5876a82a95afaa06fa..b094f4ec513194e10442156d8f7f2205da2384ac 100644 +index f1b2d388a1a40a1d909a2e726f32d6c15e1eb0eb..4934bae61114b49a9f8d0ed044fbb881210df32a 100644 --- a/src/main/java/net/minecraft/world/item/TridentItem.java +++ b/src/main/java/net/minecraft/world/item/TridentItem.java -@@ -123,6 +123,14 @@ public class TridentItem extends Item implements ProjectileItem { - f3 *= f6 / f5; - f4 *= f6 / f5; - org.bukkit.craftbukkit.event.CraftEventFactory.callPlayerRiptideEvent(entityhuman, stack, f2, f3, f4); // CraftBukkit +@@ -127,6 +127,14 @@ public class TridentItem extends Item implements ProjectileItem { + f4 *= f / f6; + f5 *= f / f6; + org.bukkit.craftbukkit.event.CraftEventFactory.callPlayerRiptideEvent(entityhuman, stack, f3, f4, f5); // CraftBukkit + -+ // Purpur start -+ ItemStack chestItem = entityhuman.getItemBySlot(EquipmentSlot.CHEST); -+ if (chestItem.getItem() == Items.ELYTRA && world.purpurConfig.elytraDamagePerTridentBoost > 0) { -+ chestItem.hurtAndBreak(world.purpurConfig.elytraDamagePerTridentBoost, entityhuman, EquipmentSlot.CHEST); -+ } -+ // Purpur end ++ // Purpur start ++ ItemStack chestItem = entityhuman.getItemBySlot(EquipmentSlot.CHEST); ++ if (chestItem.getItem() == Items.ELYTRA && world.purpurConfig.elytraDamagePerTridentBoost > 0) { ++ chestItem.hurtAndBreak(world.purpurConfig.elytraDamagePerTridentBoost, entityhuman, EquipmentSlot.CHEST); ++ } ++ // Purpur end + - entityhuman.push((double) f2, (double) f3, (double) f4); - entityhuman.startAutoSpinAttack(20); - if (entityhuman.onGround()) { + entityhuman.push((double) f3, (double) f4, (double) f5); + entityhuman.startAutoSpinAttack(20, 8.0F, stack); + if (entityhuman.onGround()) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 6705d722e1abe678a5cb90503904dc7888bf55ee..88aabe09118cbbad3add3cee44e237580294f685 100644 +index 69df43378e11579715fac8afbed3207892d69242..b1f8030868c938525916011b8a207058b702d4b8 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -112,6 +112,19 @@ public class PurpurWorldConfig { diff --git a/patches/unapplied-server/0058-Item-entity-immunities.patch b/patches/server/0056-Item-entity-immunities.patch similarity index 94% rename from patches/unapplied-server/0058-Item-entity-immunities.patch rename to patches/server/0056-Item-entity-immunities.patch index c45cb2d67..8f7f8edcc 100644 --- a/patches/unapplied-server/0058-Item-entity-immunities.patch +++ b/patches/server/0056-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 4f103f731623a8570238a6867fda1c5f83fca4e4..39e7dcf3c92c9203c190782be401c00c010b8aeb 100644 +index 1d849ce4e2c85f149af25318b8ffb6dcef6c6788..b38207981751d96a7e769f7afb352a4540b18440 100644 --- a/src/main/java/net/minecraft/server/level/ServerEntity.java +++ b/src/main/java/net/minecraft/server/level/ServerEntity.java @@ -77,7 +77,7 @@ public class ServerEntity { @@ -18,10 +18,10 @@ index 4f103f731623a8570238a6867fda1c5f83fca4e4..39e7dcf3c92c9203c190782be401c00c 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 8fd3845c4965843be9c37498760d93f1ebdff541..7dae2a7c759fc3e004f806c59e083f52c3a460b2 100644 +index ea0d9335446b20073b9aafb9de453097355db79c..499646ad26d148953abf241d90e053870fedb708 100644 --- a/src/main/java/net/minecraft/world/entity/item/ItemEntity.java +++ b/src/main/java/net/minecraft/world/entity/item/ItemEntity.java -@@ -63,6 +63,12 @@ public class ItemEntity extends Entity implements TraceableEntity { +@@ -64,6 +64,12 @@ public class ItemEntity extends Entity implements TraceableEntity { public boolean canMobPickup = true; // Paper - Item#canEntityPickup private int despawnRate = -1; // Paper - Alternative item-despawn-rate public net.kyori.adventure.util.TriState frictionState = net.kyori.adventure.util.TriState.NOT_SET; // Paper - Friction API @@ -34,7 +34,7 @@ index 8fd3845c4965843be9c37498760d93f1ebdff541..7dae2a7c759fc3e004f806c59e083f52 public ItemEntity(EntityType type, Level world) { super(type, world); -@@ -371,7 +377,16 @@ public class ItemEntity extends Entity implements TraceableEntity { +@@ -372,7 +378,16 @@ public class ItemEntity extends Entity implements TraceableEntity { @Override public boolean hurt(DamageSource source, float amount) { @@ -52,7 +52,7 @@ index 8fd3845c4965843be9c37498760d93f1ebdff541..7dae2a7c759fc3e004f806c59e083f52 return false; } else if (!this.getItem().isEmpty() && this.getItem().is(Items.NETHER_STAR) && source.is(DamageTypeTags.IS_EXPLOSION)) { return false; -@@ -579,6 +594,12 @@ public class ItemEntity extends Entity implements TraceableEntity { +@@ -580,6 +595,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 - Alternative item-despawn-rate @@ -117,7 +117,7 @@ index 30d62ee4d5cd2ddacb8783b5bbbf475d592b3e02..01e4395f1669d21c30465aa1366bd2f1 + // Purpur end } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 88aabe09118cbbad3add3cee44e237580294f685..62074152a0a494bbde4c39074942425a8b850ffd 100644 +index b1f8030868c938525916011b8a207058b702d4b8..1c8ce9506007cdd68f314af866ea99a7cf1fc2e9 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/unapplied-server/0059-Add-ping-command.patch b/patches/server/0057-Add-ping-command.patch similarity index 96% rename from patches/unapplied-server/0059-Add-ping-command.patch rename to patches/server/0057-Add-ping-command.patch index b6c61a022..28f0ecd98 100644 --- a/patches/unapplied-server/0059-Add-ping-command.patch +++ b/patches/server/0057-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 6b95a810c2fa17f18bd911dba2c5544caa39173d..5473408750eb39c1e05c0fa9ba0c1ff1818553ee 100644 +index f12f208c1c4669b0aae35cb86b122bbf06fd884a..7af65fb843142ae1dbc4bc3a3b449f2463e5da55 100644 --- a/src/main/java/net/minecraft/commands/Commands.java +++ b/src/main/java/net/minecraft/commands/Commands.java -@@ -252,6 +252,7 @@ public class Commands { +@@ -250,6 +250,7 @@ public class Commands { StopCommand.register(this.dispatcher); TransferCommand.register(this.dispatcher); WhitelistCommand.register(this.dispatcher); diff --git a/patches/unapplied-server/0060-Add-demo-command.patch b/patches/server/0058-Add-demo-command.patch similarity index 94% rename from patches/unapplied-server/0060-Add-demo-command.patch rename to patches/server/0058-Add-demo-command.patch index 0b3873fc7..255c73c3d 100644 --- a/patches/unapplied-server/0060-Add-demo-command.patch +++ b/patches/server/0058-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 a5f1bfd8a6a6c374fbb72ea7957dd7d05073b93d..4568c4b02a87deb299ffd77b8e76329bb2b1dd70 100644 +index 7af65fb843142ae1dbc4bc3a3b449f2463e5da55..df5343bb6c4987e2c81b3eb33f131e2db93f9ddd 100644 --- a/src/main/java/net/minecraft/commands/Commands.java +++ b/src/main/java/net/minecraft/commands/Commands.java -@@ -252,6 +252,7 @@ public class Commands { +@@ -250,6 +250,7 @@ public class Commands { StopCommand.register(this.dispatcher); TransferCommand.register(this.dispatcher); WhitelistCommand.register(this.dispatcher); @@ -17,7 +17,7 @@ index a5f1bfd8a6a6c374fbb72ea7957dd7d05073b93d..4568c4b02a87deb299ffd77b8e76329b } diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index e8160e63470cf2f3d15eeb2e7f83d3694cfc4db8..994da2c5bbba190507bbcee7029bee974eb3c641 100644 +index d6a1e2c21fb3b09e602ac6abe267c752d1f742eb..6d266f2096deca638ceebd2ca1fd4dce83e1e9a8 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java @@ -179,6 +179,7 @@ public class PurpurConfig { diff --git a/patches/unapplied-server/0061-Add-credits-command.patch b/patches/server/0059-Add-credits-command.patch similarity index 95% rename from patches/unapplied-server/0061-Add-credits-command.patch rename to patches/server/0059-Add-credits-command.patch index 9f08a380f..d8935f0e2 100644 --- a/patches/unapplied-server/0061-Add-credits-command.patch +++ b/patches/server/0059-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 4568c4b02a87deb299ffd77b8e76329bb2b1dd70..6af3e1e08048869ac28ab4a93e03d086872f866b 100644 +index df5343bb6c4987e2c81b3eb33f131e2db93f9ddd..a8f81bcbfccbce42ca4d194fcaa35222c0a547cb 100644 --- a/src/main/java/net/minecraft/commands/Commands.java +++ b/src/main/java/net/minecraft/commands/Commands.java -@@ -252,6 +252,7 @@ public class Commands { +@@ -250,6 +250,7 @@ public class Commands { StopCommand.register(this.dispatcher); TransferCommand.register(this.dispatcher); WhitelistCommand.register(this.dispatcher); @@ -17,7 +17,7 @@ index 4568c4b02a87deb299ffd77b8e76329bb2b1dd70..6af3e1e08048869ac28ab4a93e03d086 org.purpurmc.purpur.command.PingCommand.register(this.dispatcher); // Purpur } diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index 994da2c5bbba190507bbcee7029bee974eb3c641..2e78d67201e66c1f3fd1f45ed625e682ea074848 100644 +index 6d266f2096deca638ceebd2ca1fd4dce83e1e9a8..7ed1b8048c6f1f198c45337ae5f9ddd2de5c02ab 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java @@ -179,6 +179,7 @@ public class PurpurConfig { diff --git a/patches/unapplied-server/0062-Configurable-jockey-options.patch b/patches/server/0060-Configurable-jockey-options.patch similarity index 93% rename from patches/unapplied-server/0062-Configurable-jockey-options.patch rename to patches/server/0060-Configurable-jockey-options.patch index f619870e7..505b055f5 100644 --- a/patches/unapplied-server/0062-Configurable-jockey-options.patch +++ b/patches/server/0060-Configurable-jockey-options.patch @@ -57,10 +57,10 @@ index 805bfee8b061445de5b5d8aeb13c792178e25f7b..6673c0bff3a4e3d11a09e9dc8aeb0c24 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 9af1c4b794ddaf8640076f172cf0317acad6bcb2..555b86925b8d848fad40a838dd98607db8741e3b 100644 +index 28587e17b15748880576f7a71e71a05c9c1bcf78..43c48bb14957b93ee3b0191360c09f710bc008e0 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Zombie.java +++ b/src/main/java/net/minecraft/world/entity/monster/Zombie.java -@@ -126,6 +126,18 @@ public class Zombie extends Monster { +@@ -130,6 +130,18 @@ public class Zombie extends Monster { this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.zombieMaxHealth); } @@ -79,7 +79,7 @@ index 9af1c4b794ddaf8640076f172cf0317acad6bcb2..555b86925b8d848fad40a838dd98607d @Override protected void registerGoals() { this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur -@@ -533,19 +545,20 @@ public class Zombie extends Monster { +@@ -544,19 +556,20 @@ public class Zombie extends Monster { } if (object instanceof Zombie.ZombieGroupData entityzombie_groupdatazombie) { @@ -106,7 +106,7 @@ index 9af1c4b794ddaf8640076f172cf0317acad6bcb2..555b86925b8d848fad40a838dd98607d Chicken entitychicken1 = (Chicken) EntityType.CHICKEN.create(this.level()); if (entitychicken1 != null) { -@@ -555,6 +568,7 @@ public class Zombie extends Monster { +@@ -566,6 +579,7 @@ public class Zombie extends Monster { this.startRiding(entitychicken1); world.addFreshEntity(entitychicken1, CreatureSpawnEvent.SpawnReason.MOUNT); // CraftBukkit } @@ -115,10 +115,10 @@ index 9af1c4b794ddaf8640076f172cf0317acad6bcb2..555b86925b8d848fad40a838dd98607d } } diff --git a/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java b/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java -index 8e7f0f2069c3382f3a7b08b80f829398e62377f7..ffe2144e307acebd4a8bed043db0ee0bb6bf611c 100644 +index 199770256cf7f838228b5263ec9af8c6b18f30fb..cdf6753b6bb2bbb4f3ab21792bd3153988b26b75 100644 --- a/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java +++ b/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java -@@ -107,6 +107,21 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { +@@ -110,6 +110,21 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { this.getAttribute(net.minecraft.world.entity.ai.attributes.Attributes.SPAWN_REINFORCEMENTS_CHANCE).setBaseValue(this.random.nextDouble() * this.level().purpurConfig.zombieVillagerSpawnReinforcements); } @@ -141,10 +141,10 @@ index 8e7f0f2069c3382f3a7b08b80f829398e62377f7..ffe2144e307acebd4a8bed043db0ee0b protected void defineSynchedData(SynchedEntityData.Builder builder) { super.defineSynchedData(builder); diff --git a/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java b/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java -index 138f3f6a9b0754d54e5f8000962bb52b224f677d..75c34d9fcc4b33d30b18f1ce4c8749a068744abc 100644 +index 883cd9a96a1d4276ca10c5558b553c36a1bb0d79..0dcf5638e12c7670e6a5e577210e2542de1fd38b 100644 --- a/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java +++ b/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java -@@ -84,6 +84,21 @@ public class ZombifiedPiglin extends Zombie implements NeutralMob { +@@ -85,6 +85,21 @@ public class ZombifiedPiglin extends Zombie implements NeutralMob { this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.zombifiedPiglinMaxHealth); } @@ -167,7 +167,7 @@ index 138f3f6a9b0754d54e5f8000962bb52b224f677d..75c34d9fcc4b33d30b18f1ce4c8749a0 public void setPersistentAngerTarget(@Nullable UUID angryAt) { this.persistentAngerTarget = angryAt; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 06acffbb57d961d1c8a48bce5983b063146181f3..803387f232c25ed43c252fa05335e5e1915048ff 100644 +index 1c8ce9506007cdd68f314af866ea99a7cf1fc2e9..5f72a1a5a4f26d2a6fa595c72e3557a10a3f5107 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -610,6 +610,9 @@ public class PurpurWorldConfig { @@ -210,7 +210,7 @@ index 06acffbb57d961d1c8a48bce5983b063146181f3..803387f232c25ed43c252fa05335e5e1 } public boolean illusionerRidable = false; -@@ -1696,6 +1708,9 @@ public class PurpurWorldConfig { +@@ -1692,6 +1704,9 @@ public class PurpurWorldConfig { public boolean zombieControllable = true; public double zombieMaxHealth = 20.0D; public double zombieSpawnReinforcements = 0.1D; @@ -220,7 +220,7 @@ index 06acffbb57d961d1c8a48bce5983b063146181f3..803387f232c25ed43c252fa05335e5e1 private void zombieSettings() { zombieRidable = getBoolean("mobs.zombie.ridable", zombieRidable); zombieRidableInWater = getBoolean("mobs.zombie.ridable-in-water", zombieRidableInWater); -@@ -1707,6 +1722,9 @@ public class PurpurWorldConfig { +@@ -1703,6 +1718,9 @@ public class PurpurWorldConfig { } zombieMaxHealth = getDouble("mobs.zombie.attributes.max_health", zombieMaxHealth); zombieSpawnReinforcements = getDouble("mobs.zombie.attributes.spawn_reinforcements", zombieSpawnReinforcements); @@ -230,7 +230,7 @@ index 06acffbb57d961d1c8a48bce5983b063146181f3..803387f232c25ed43c252fa05335e5e1 } public boolean zombieHorseRidable = false; -@@ -1743,6 +1761,9 @@ public class PurpurWorldConfig { +@@ -1739,6 +1757,9 @@ public class PurpurWorldConfig { public boolean zombieVillagerControllable = true; public double zombieVillagerMaxHealth = 20.0D; public double zombieVillagerSpawnReinforcements = 0.1D; @@ -240,7 +240,7 @@ index 06acffbb57d961d1c8a48bce5983b063146181f3..803387f232c25ed43c252fa05335e5e1 private void zombieVillagerSettings() { zombieVillagerRidable = getBoolean("mobs.zombie_villager.ridable", zombieVillagerRidable); zombieVillagerRidableInWater = getBoolean("mobs.zombie_villager.ridable-in-water", zombieVillagerRidableInWater); -@@ -1754,6 +1775,9 @@ public class PurpurWorldConfig { +@@ -1750,6 +1771,9 @@ public class PurpurWorldConfig { } zombieVillagerMaxHealth = getDouble("mobs.zombie_villager.attributes.max_health", zombieVillagerMaxHealth); zombieVillagerSpawnReinforcements = getDouble("mobs.zombie_villager.attributes.spawn_reinforcements", zombieVillagerSpawnReinforcements); @@ -250,7 +250,7 @@ index 06acffbb57d961d1c8a48bce5983b063146181f3..803387f232c25ed43c252fa05335e5e1 } public boolean zombifiedPiglinRidable = false; -@@ -1761,6 +1785,9 @@ public class PurpurWorldConfig { +@@ -1757,6 +1781,9 @@ public class PurpurWorldConfig { public boolean zombifiedPiglinControllable = true; public double zombifiedPiglinMaxHealth = 20.0D; public double zombifiedPiglinSpawnReinforcements = 0.0D; @@ -260,7 +260,7 @@ index 06acffbb57d961d1c8a48bce5983b063146181f3..803387f232c25ed43c252fa05335e5e1 private void zombifiedPiglinSettings() { zombifiedPiglinRidable = getBoolean("mobs.zombified_piglin.ridable", zombifiedPiglinRidable); zombifiedPiglinRidableInWater = getBoolean("mobs.zombified_piglin.ridable-in-water", zombifiedPiglinRidableInWater); -@@ -1772,5 +1799,8 @@ public class PurpurWorldConfig { +@@ -1768,5 +1795,8 @@ public class PurpurWorldConfig { } zombifiedPiglinMaxHealth = getDouble("mobs.zombified_piglin.attributes.max_health", zombifiedPiglinMaxHealth); zombifiedPiglinSpawnReinforcements = getDouble("mobs.zombified_piglin.attributes.spawn_reinforcements", zombifiedPiglinSpawnReinforcements); diff --git a/patches/unapplied-server/0063-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch b/patches/server/0061-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch similarity index 97% rename from patches/unapplied-server/0063-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch rename to patches/server/0061-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch index e6c3930a9..f99ae775e 100644 --- a/patches/unapplied-server/0063-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch +++ b/patches/server/0061-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Phantoms attracted to crystals and crystals shoot phantoms diff --git a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EndCrystal.java b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EndCrystal.java -index d8e440e14b72dc48ae97244f1bed2c06abd997ab..2bac39e5ba09e08d23d2a4be37f7fe0da0ce71a6 100644 +index a33d89fe9ca9e343edab8bb1cc88c54130ddb4a7..72122333cf0247e4a8511ac633487f170b89586c 100644 --- a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EndCrystal.java +++ b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EndCrystal.java @@ -31,6 +31,12 @@ public class EndCrystal extends Entity { @@ -21,7 +21,7 @@ index d8e440e14b72dc48ae97244f1bed2c06abd997ab..2bac39e5ba09e08d23d2a4be37f7fe0d public EndCrystal(EntityType type, Level world) { super(type, world); -@@ -80,6 +86,49 @@ public class EndCrystal extends Entity { +@@ -82,6 +88,49 @@ public class EndCrystal extends Entity { // Paper end - Fix invulnerable end crystals } @@ -72,7 +72,7 @@ index d8e440e14b72dc48ae97244f1bed2c06abd997ab..2bac39e5ba09e08d23d2a4be37f7fe0d @Override diff --git a/src/main/java/net/minecraft/world/entity/monster/Phantom.java b/src/main/java/net/minecraft/world/entity/monster/Phantom.java -index 01e8eaecec61e664838b5d7f18a9c3e730f00ddf..e0b1b0106fd3bbb6764d1b0a58ab2810181cac02 100644 +index 4dea7aed072caf383986e09ead8ee790b35d9706..7a80cb45ff5d96380755d37ff43ddeac2cd451e1 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Phantom.java +++ b/src/main/java/net/minecraft/world/entity/monster/Phantom.java @@ -48,6 +48,7 @@ public class Phantom extends FlyingMob implements Enemy { @@ -256,7 +256,7 @@ index 01e8eaecec61e664838b5d7f18a9c3e730f00ddf..e0b1b0106fd3bbb6764d1b0a58ab2810 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 803387f232c25ed43c252fa05335e5e1915048ff..bfa1ed9e0927f919648ab67ae49681fcd1286e3a 100644 +index 5f72a1a5a4f26d2a6fa595c72e3557a10a3f5107..b9b9d23929cc390ebb97e93758f6b746606edc95 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -1087,6 +1087,9 @@ public class PurpurWorldConfig { diff --git a/patches/unapplied-server/0064-Add-phantom-spawning-options.patch b/patches/server/0062-Add-phantom-spawning-options.patch similarity index 98% rename from patches/unapplied-server/0064-Add-phantom-spawning-options.patch rename to patches/server/0062-Add-phantom-spawning-options.patch index 63bf22cea..926490bad 100644 --- a/patches/unapplied-server/0064-Add-phantom-spawning-options.patch +++ b/patches/server/0062-Add-phantom-spawning-options.patch @@ -40,7 +40,7 @@ index 1b1b475ca27e799e251d6f8a8c9fe1a4fd8bae83..04f67f7b43d2f461c776c76614dc3e5f for (int l = 0; l < k; ++l) { // Paper start - PhantomPreSpawnEvent diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index bfa1ed9e0927f919648ab67ae49681fcd1286e3a..07f3b64e5d117957262ce6c8290052d707d17508 100644 +index b9b9d23929cc390ebb97e93758f6b746606edc95..1ce621db17377c3f35151096db9bca048161981c 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -1090,6 +1090,12 @@ public class PurpurWorldConfig { diff --git a/patches/unapplied-server/0065-Implement-bed-explosion-options.patch b/patches/server/0063-Implement-bed-explosion-options.patch similarity index 97% rename from patches/unapplied-server/0065-Implement-bed-explosion-options.patch rename to patches/server/0063-Implement-bed-explosion-options.patch index 631432c6d..19cae2047 100644 --- a/patches/unapplied-server/0065-Implement-bed-explosion-options.patch +++ b/patches/server/0063-Implement-bed-explosion-options.patch @@ -27,7 +27,7 @@ index 85d598c3354ee62f0fd1b26e485e0084967c0380..b59dd6b512021c335f3c21999958e2ea } } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 10de2140aa89f75e7f67b38f6c1286f4330d127b..95f016b7c127129b71e266a3daefd55502fdb299 100644 +index 1ce621db17377c3f35151096db9bca048161981c..ff9d6c6b5e999c61f450d90327dff9461b7bc34a 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/unapplied-server/0066-Implement-respawn-anchor-explosion-options.patch b/patches/server/0064-Implement-respawn-anchor-explosion-options.patch similarity index 97% rename from patches/unapplied-server/0066-Implement-respawn-anchor-explosion-options.patch rename to patches/server/0064-Implement-respawn-anchor-explosion-options.patch index d8e9593ca..9086ff605 100644 --- a/patches/unapplied-server/0066-Implement-respawn-anchor-explosion-options.patch +++ b/patches/server/0064-Implement-respawn-anchor-explosion-options.patch @@ -18,7 +18,7 @@ index 94d067e9eeee73183de25165d8c97043fe256103..00b6941951e1af9993f8f6da5425d31b 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 95f016b7c127129b71e266a3daefd55502fdb299..55ae989ae13ae9c0730f6f8df5f7eba52a560b1f 100644 +index ff9d6c6b5e999c61f450d90327dff9461b7bc34a..a922ae826a3c542094eacd551a9aa04cd81fd02b 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/unapplied-server/0067-Add-allow-water-in-end-world-option.patch b/patches/server/0065-Add-allow-water-in-end-world-option.patch similarity index 87% rename from patches/unapplied-server/0067-Add-allow-water-in-end-world-option.patch rename to patches/server/0065-Add-allow-water-in-end-world-option.patch index d0fe3fe2a..854a31397 100644 --- a/patches/unapplied-server/0067-Add-allow-water-in-end-world-option.patch +++ b/patches/server/0065-Add-allow-water-in-end-world-option.patch @@ -5,10 +5,10 @@ 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 49557d6f22c5725c663a231deab019d4f6fe95fa..046652e8f9c5dcdf7c90acb9391214cac46bd7d8 100644 +index 321188173918d0d60858a258400dfd682ccdb21c..af47074f3a61a8518697d7851e43d5436fec5d57 100644 --- a/src/main/java/net/minecraft/world/item/BucketItem.java +++ b/src/main/java/net/minecraft/world/item/BucketItem.java -@@ -194,7 +194,7 @@ public class BucketItem extends Item implements DispensibleContainerItem { +@@ -196,7 +196,7 @@ public class BucketItem extends Item implements DispensibleContainerItem { // CraftBukkit end if (!flag2) { return movingobjectpositionblock != null && this.emptyContents(entityhuman, world, movingobjectpositionblock.getBlockPos().relative(movingobjectpositionblock.getDirection()), (BlockHitResult) null, enumdirection, clicked, itemstack, enumhand); // CraftBukkit @@ -17,7 +17,7 @@ index 49557d6f22c5725c663a231deab019d4f6fe95fa..046652e8f9c5dcdf7c90acb9391214ca int i = blockposition.getX(); int j = blockposition.getY(); int k = blockposition.getZ(); -@@ -202,7 +202,7 @@ public class BucketItem extends Item implements DispensibleContainerItem { +@@ -204,7 +204,7 @@ public class BucketItem extends Item implements DispensibleContainerItem { world.playSound(entityhuman, blockposition, SoundEvents.FIRE_EXTINGUISH, SoundSource.BLOCKS, 0.5F, 2.6F + (world.random.nextFloat() - world.random.nextFloat()) * 0.8F); for (int l = 0; l < 8; ++l) { @@ -27,13 +27,13 @@ index 49557d6f22c5725c663a231deab019d4f6fe95fa..046652e8f9c5dcdf7c90acb9391214ca 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 be8bc5b5d5fdf41da40fb5aef9e6bb16f2af0ba0..a0a0ccd06cf8de4a379d9fbb89865bae8feeedc6 100644 +index 9ee0a4368fa69a66a6da9809c9885460e85c5804..df7ae03f3162c15ef5f5b9647c7d5d6182638257 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java -@@ -1894,4 +1894,13 @@ public abstract class Level implements LevelAccessor, AutoCloseable { - return null; +@@ -1407,4 +1407,13 @@ public abstract class Level implements LevelAccessor, AutoCloseable { + } } - // Paper end - optimize redstone (Alternate Current) + // Paper end - notify observers even if grow failed + // Purpur start + public boolean isNether() { + return getWorld().getEnvironment() == org.bukkit.World.Environment.NETHER; @@ -45,13 +45,13 @@ index be8bc5b5d5fdf41da40fb5aef9e6bb16f2af0ba0..a0a0ccd06cf8de4a379d9fbb89865bae + // 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 013302623d3ca3ff88f242d740af935dcf4844a6..13dd8bc7d2f6b71a5f1779dde53c5c84d83538ce 100644 +index ac775afb265430ac202cfa3900a036d11a308b1e..87ce003dfeca975d8e6af26fd341f3abe66dc185 100644 --- a/src/main/java/net/minecraft/world/level/block/IceBlock.java +++ b/src/main/java/net/minecraft/world/level/block/IceBlock.java @@ -41,7 +41,7 @@ public class IceBlock extends HalfTransparentBlock { public void afterDestroy(Level world, BlockPos pos, ItemStack tool) { // Paper end - Improve Block#breakNaturally API - if (EnchantmentHelper.getItemEnchantmentLevel(Enchantments.SILK_TOUCH, tool) == 0) { + if (!EnchantmentHelper.hasTag(tool, EnchantmentTags.PREVENTS_ICE_MELTING)) { - if (world.dimensionType().ultraWarm()) { + if (world.isNether() || (world.isTheEnd() && !org.purpurmc.purpur.PurpurConfig.allowWaterPlacementInTheEnd)) { // Purpur world.removeBlock(pos, false); diff --git a/patches/unapplied-server/0068-Allow-color-codes-in-books.patch b/patches/server/0066-Allow-color-codes-in-books.patch similarity index 92% rename from patches/unapplied-server/0068-Allow-color-codes-in-books.patch rename to patches/server/0066-Allow-color-codes-in-books.patch index 2122c64dd..5d0976102 100644 --- a/patches/unapplied-server/0068-Allow-color-codes-in-books.patch +++ b/patches/server/0066-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 510a4391463026dd0c896027a579a94174c24299..c647629ef404e983240577c87306bb76bf0cc4a5 100644 +index 58e3f6f0febff3956b80ebeab387c46deb5fe8ae..9d5c044ec96be46c8ad32579e9a719fccf9f17f5 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -1234,10 +1234,14 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -1203,10 +1203,14 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl Objects.requireNonNull(list); stream.forEach(list::add); @@ -25,7 +25,7 @@ index 510a4391463026dd0c896027a579a94174c24299..c647629ef404e983240577c87306bb76 }; this.filterTextPacket((List) list).thenAcceptAsync(consumer, this.server); -@@ -1245,13 +1249,18 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -1214,13 +1218,18 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl } private void updateBookContents(List pages, int slotId) { @@ -45,7 +45,7 @@ index 510a4391463026dd0c896027a579a94174c24299..c647629ef404e983240577c87306bb76 itemstack.set(DataComponents.WRITABLE_BOOK_CONTENT, new WritableBookContent(list1)); this.player.getInventory().setItem(slotId, CraftEventFactory.handleEditBookEvent(this.player, slotId, handItem, itemstack)); // CraftBukkit // Paper - Don't ignore result (see other callsite for handleEditBookEvent) -@@ -1259,6 +1268,11 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -1228,6 +1237,11 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl } private void signBook(FilteredText title, List pages, int slotId) { @@ -57,7 +57,7 @@ index 510a4391463026dd0c896027a579a94174c24299..c647629ef404e983240577c87306bb76 ItemStack itemstack = this.player.getInventory().getItem(slotId); if (itemstack.is(Items.WRITABLE_BOOK)) { -@@ -1266,10 +1280,10 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -1235,10 +1249,10 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl itemstack1.remove(DataComponents.WRITABLE_BOOK_CONTENT); List> list1 = (List>) (List) pages.stream().map((filteredtext1) -> { // CraftBukkit - decompile error @@ -70,7 +70,7 @@ index 510a4391463026dd0c896027a579a94174c24299..c647629ef404e983240577c87306bb76 CraftEventFactory.handleEditBookEvent(this.player, slotId, itemstack, itemstack1); // CraftBukkit this.player.getInventory().setItem(slotId, itemstack); // CraftBukkit - event factory updates the hand book } -@@ -1279,6 +1293,16 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -1248,6 +1262,16 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl return this.player.isTextFilteringEnabled() ? Filterable.passThrough(message.filteredOrEmpty()) : Filterable.from(message); } diff --git a/patches/unapplied-server/0069-Entity-lifespan.patch b/patches/server/0067-Entity-lifespan.patch similarity index 81% rename from patches/unapplied-server/0069-Entity-lifespan.patch rename to patches/server/0067-Entity-lifespan.patch index efb2f5207..e3cdec015 100644 --- a/patches/unapplied-server/0069-Entity-lifespan.patch +++ b/patches/server/0067-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 1d09fe4cc604e5ccebe32fde9e2f7c008bb10a72..96019786b27e2f017239b765724257bebee73cb9 100644 +index 9d5c044ec96be46c8ad32579e9a719fccf9f17f5..3de25a0f8e8242986c9fc8660ca9d0af976d9088 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -2807,6 +2807,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -2751,6 +2751,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl AABB axisalignedbb = entity.getBoundingBox(); if (this.player.canInteractWithEntity(axisalignedbb, 1.0D)) { @@ -17,10 +17,10 @@ index 1d09fe4cc604e5ccebe32fde9e2f7c008bb10a72..96019786b27e2f017239b765724257be 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 49422ea596125ee669bdc66d88f084b692acaca7..6415bc82e44629a08a2ec881acaa5d993e48bb9d 100644 +index cc326c3b6a78755b7bc17ebf864cc9c99ec38c1a..94508891d9ea3806c66b020fec4c97297dd558d8 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java -@@ -151,6 +151,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Targeti +@@ -146,6 +146,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab private BlockPos restrictCenter; private float restrictRadius; @@ -28,7 +28,7 @@ index 49422ea596125ee669bdc66d88f084b692acaca7..6415bc82e44629a08a2ec881acaa5d99 public boolean aware = true; // CraftBukkit protected Mob(EntityType type, Level world) { -@@ -338,6 +339,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Targeti +@@ -320,6 +321,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab entityliving = null; } } @@ -36,7 +36,7 @@ index 49422ea596125ee669bdc66d88f084b692acaca7..6415bc82e44629a08a2ec881acaa5d99 this.target = entityliving; return true; // CraftBukkit end -@@ -380,8 +382,28 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Targeti +@@ -362,8 +364,28 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab } this.level().getProfiler().pop(); @@ -65,7 +65,7 @@ index 49422ea596125ee669bdc66d88f084b692acaca7..6415bc82e44629a08a2ec881acaa5d99 @Override protected void playHurtSound(DamageSource damageSource) { this.resetAmbientSoundTime(); -@@ -584,6 +606,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Targeti +@@ -538,6 +560,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab } nbt.putBoolean("Bukkit.Aware", this.aware); // CraftBukkit @@ -73,7 +73,7 @@ index 49422ea596125ee669bdc66d88f084b692acaca7..6415bc82e44629a08a2ec881acaa5d99 } @Override -@@ -668,6 +691,11 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Targeti +@@ -615,6 +638,11 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab this.aware = nbt.getBoolean("Bukkit.Aware"); } // CraftBukkit end @@ -85,8 +85,8 @@ index 49422ea596125ee669bdc66d88f084b692acaca7..6415bc82e44629a08a2ec881acaa5d99 } @Override -@@ -1847,6 +1875,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Targeti - this.setLastHurtMob(target); +@@ -1738,6 +1766,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab + this.playAttackSound(); } + if (target instanceof ServerPlayer) this.ticksSinceLastInteraction = 0; // Purpur @@ -94,7 +94,7 @@ index 49422ea596125ee669bdc66d88f084b692acaca7..6415bc82e44629a08a2ec881acaa5d99 } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 55ae989ae13ae9c0730f6f8df5f7eba52a560b1f..9ba3a90e1af9c733949c52988c56c05af46356e8 100644 +index a922ae826a3c542094eacd551a9aa04cd81fd02b..f601c4b0c40706a241ca2906f07dfcd869afe9cd 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/unapplied-server/0070-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch b/patches/server/0068-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch similarity index 89% rename from patches/unapplied-server/0070-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch rename to patches/server/0068-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch index 7682b42d2..7940c3d17 100644 --- a/patches/unapplied-server/0070-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch +++ b/patches/server/0068-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 65fa71b587bd14494c71ae265e56de768d6b8219..a11dd0a2f302f1ff64c3ca92d55d6a8ef28398b7 100644 +index b86bdf61be2776352dd6c59b66ecfcee269f8e51..ec77e834d5f21c64aaf5ac8425fb1b42859b22e8 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -2963,4 +2963,26 @@ public class ServerPlayer extends Player { +@@ -2992,4 +2992,26 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player { return (CraftPlayer) super.getBukkitEntity(); } // CraftBukkit end @@ -36,10 +36,10 @@ index 65fa71b587bd14494c71ae265e56de768d6b8219..a11dd0a2f302f1ff64c3ca92d55d6a8e + // 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 72eb43102ddf8349c4a376ed66ef016dc3bf52eb..c5aa3104c6b9377422ab36dca73d8179a3af7f13 100644 +index 6f6427b47d5ec64fedcc9c50ee9e11618ba8a672..7ac62e6ada528e6efe1ea49db1a40edc891d74a8 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -440,6 +440,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -462,6 +462,7 @@ public abstract class LivingEntity extends Entity implements Attackable { double d1 = this.level().getWorldBorder().getDamagePerBlock(); if (d1 > 0.0D) { @@ -48,7 +48,7 @@ index 72eb43102ddf8349c4a376ed66ef016dc3bf52eb..c5aa3104c6b9377422ab36dca73d8179 } } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 9ba3a90e1af9c733949c52988c56c05af46356e8..98e6faaeeaf8a983f9d730591a9d85c314c112d3 100644 +index f601c4b0c40706a241ca2906f07dfcd869afe9cd..efc357e2a4eb33a8e77c84599d88103b29542dca 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -242,6 +242,7 @@ public class PurpurWorldConfig { diff --git a/patches/unapplied-server/0071-Squid-EAR-immunity.patch b/patches/server/0069-Squid-EAR-immunity.patch similarity index 88% rename from patches/unapplied-server/0071-Squid-EAR-immunity.patch rename to patches/server/0069-Squid-EAR-immunity.patch index 6673d5046..f1b5b757a 100644 --- a/patches/unapplied-server/0071-Squid-EAR-immunity.patch +++ b/patches/server/0069-Squid-EAR-immunity.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Squid EAR immunity diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 859ea7beb9f9644d45f805c1ecc18e7b87be67a7..1da67c207b18e4c0eaf9a822360dbbe3215e7a6d 100644 +index efc357e2a4eb33a8e77c84599d88103b29542dca..9873f78eb7f4739c65014b0a0c63c328813c0d9c 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -1475,6 +1475,7 @@ public class PurpurWorldConfig { @@ -25,10 +25,10 @@ index 859ea7beb9f9644d45f805c1ecc18e7b87be67a7..1da67c207b18e4c0eaf9a822360dbbe3 public boolean spiderRidable = false; diff --git a/src/main/java/org/spigotmc/ActivationRange.java b/src/main/java/org/spigotmc/ActivationRange.java -index a9a39f0da7b09410d8171172a4219c7d509fdb99..2ed85c0aa7d3053e338927fa308b86bcbf9eb7b6 100644 +index 0a237d1adeecba0059589ea2f4772f27100dae0f..9dbcc2f963035ad592870e55f7b1a549b8f96d8d 100644 --- a/src/main/java/org/spigotmc/ActivationRange.java +++ b/src/main/java/org/spigotmc/ActivationRange.java -@@ -380,6 +380,7 @@ public class ActivationRange +@@ -237,6 +237,7 @@ public class ActivationRange */ public static boolean checkIfActive(Entity entity) { diff --git a/patches/unapplied-server/0072-Phantoms-burn-in-light.patch b/patches/server/0070-Phantoms-burn-in-light.patch similarity index 95% rename from patches/unapplied-server/0072-Phantoms-burn-in-light.patch rename to patches/server/0070-Phantoms-burn-in-light.patch index f998cf89d..cb7813195 100644 --- a/patches/unapplied-server/0072-Phantoms-burn-in-light.patch +++ b/patches/server/0070-Phantoms-burn-in-light.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Phantoms burn in light diff --git a/src/main/java/net/minecraft/world/entity/monster/Phantom.java b/src/main/java/net/minecraft/world/entity/monster/Phantom.java -index e0b1b0106fd3bbb6764d1b0a58ab2810181cac02..1ddccb9fa438682c2ebad7c071c7a4f8dd00b463 100644 +index 7a80cb45ff5d96380755d37ff43ddeac2cd451e1..8f221fe016ea7221eb3a2116a2213139cf961797 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Phantom.java +++ b/src/main/java/net/minecraft/world/entity/monster/Phantom.java @@ -48,6 +48,7 @@ public class Phantom extends FlyingMob implements Enemy { @@ -27,7 +27,7 @@ index e0b1b0106fd3bbb6764d1b0a58ab2810181cac02..1ddccb9fa438682c2ebad7c071c7a4f8 + if (this.isAlive() && (burnFromDaylight || burnFromLightSource)) { // Paper - shouldBurnInDay API + // Purpur end if (getRider() == null || !this.isControllable()) // Purpur - this.igniteForSeconds(8); + this.igniteForSeconds(8.0F); } @@ -641,6 +646,12 @@ public class Phantom extends FlyingMob implements Enemy { return false; @@ -51,7 +51,7 @@ index e0b1b0106fd3bbb6764d1b0a58ab2810181cac02..1ddccb9fa438682c2ebad7c071c7a4f8 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 1da67c207b18e4c0eaf9a822360dbbe3215e7a6d..2c6167946e8186f378142b0cd02b71abf1780bea 100644 +index 9873f78eb7f4739c65014b0a0c63c328813c0d9c..42ca14fb05af1c3088143aab064ea6fc594ade6e 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -1145,6 +1145,9 @@ public class PurpurWorldConfig { diff --git a/patches/unapplied-server/0073-Configurable-villager-breeding.patch b/patches/server/0071-Configurable-villager-breeding.patch similarity index 78% rename from patches/unapplied-server/0073-Configurable-villager-breeding.patch rename to patches/server/0071-Configurable-villager-breeding.patch index 9777a045e..ff28a8c1c 100644 --- a/patches/unapplied-server/0073-Configurable-villager-breeding.patch +++ b/patches/server/0071-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 051940da69567274f48485f060cbc3ac21a0907f..6de74d992bd8b2845ab98d56201e7eeabd1dfc6b 100644 +index 4a8da72d81a1938fa82dd1d2d861defd2bdac4b7..f07379734f7c131e1ad3e22062f2deac4a0a342e 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java -@@ -777,7 +777,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -756,7 +756,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler @Override public boolean canBreed() { @@ -18,21 +18,21 @@ index 051940da69567274f48485f060cbc3ac21a0907f..6de74d992bd8b2845ab98d56201e7eea private boolean hungry() { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 2c6167946e8186f378142b0cd02b71abf1780bea..2a8ec23926af200a8bd8d33ecd930387117fc71b 100644 +index 42ca14fb05af1c3088143aab064ea6fc594ade6e..e45b2ec9d119623ec53104a602aadc0ad4949f1d 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1633,6 +1633,7 @@ public class PurpurWorldConfig { +@@ -1632,6 +1632,7 @@ public class PurpurWorldConfig { + public boolean villagerControllable = true; public double villagerMaxHealth = 20.0D; public boolean villagerFollowEmeraldBlock = false; - public boolean villagerCanBeLeashed = false; + public boolean villagerCanBreed = true; private void villagerSettings() { villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); -@@ -1645,6 +1646,7 @@ public class PurpurWorldConfig { +@@ -1643,6 +1644,7 @@ public class PurpurWorldConfig { + } villagerMaxHealth = getDouble("mobs.villager.attributes.max_health", villagerMaxHealth); villagerFollowEmeraldBlock = getBoolean("mobs.villager.follow-emerald-blocks", villagerFollowEmeraldBlock); - villagerCanBeLeashed = getBoolean("mobs.villager.can-be-leashed", villagerCanBeLeashed); + villagerCanBreed = getBoolean("mobs.villager.can-breed", villagerCanBreed); } diff --git a/patches/unapplied-server/0074-Redstone-deactivates-spawners.patch b/patches/server/0072-Redstone-deactivates-spawners.patch similarity index 94% rename from patches/unapplied-server/0074-Redstone-deactivates-spawners.patch rename to patches/server/0072-Redstone-deactivates-spawners.patch index 41653f9a7..b1fec444e 100644 --- a/patches/unapplied-server/0074-Redstone-deactivates-spawners.patch +++ b/patches/server/0072-Redstone-deactivates-spawners.patch @@ -17,7 +17,7 @@ index f57e1b78204dff661ad5d3ee93a88a00330af2dc..967af8771ff8564c715d89f4b4b69b16 } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index df4f384032f398fc9852e753dee820ffa33e10bb..85d2030c58fb97be82c97a042bc5d73e76274268 100644 +index e45b2ec9d119623ec53104a602aadc0ad4949f1d..41c097246b84920187969e4cac72d6d025a2a926 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -352,6 +352,11 @@ public class PurpurWorldConfig { diff --git a/patches/unapplied-server/0075-Totems-work-in-inventory.patch b/patches/server/0073-Totems-work-in-inventory.patch similarity index 91% rename from patches/unapplied-server/0075-Totems-work-in-inventory.patch rename to patches/server/0073-Totems-work-in-inventory.patch index 57abca151..bda1a71a6 100644 --- a/patches/unapplied-server/0075-Totems-work-in-inventory.patch +++ b/patches/server/0073-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 740fc4e4b4b6023d3b3a66c13e689f54f1d32aad..bc410b94c479e9acf969b21c920db0f616342591 100644 +index 7ac62e6ada528e6efe1ea49db1a40edc891d74a8..d7175268bf615e20a7e14ad024ab5e3843c91f64 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -1647,6 +1647,18 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -1630,6 +1630,18 @@ public abstract class LivingEntity extends Entity implements Attackable { } } @@ -28,7 +28,7 @@ index 740fc4e4b4b6023d3b3a66c13e689f54f1d32aad..bc410b94c479e9acf969b21c920db0f6 EntityResurrectEvent event = new EntityResurrectEvent((org.bukkit.entity.LivingEntity) this.getBukkitEntity(), handSlot); event.setCancelled(itemstack == null); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 85d2030c58fb97be82c97a042bc5d73e76274268..be916fe3a8bc8996be8b0835e3bd8f7920c15055 100644 +index 41c097246b84920187969e4cac72d6d025a2a926..5f0610d06902aa1fea9cd130ea2724b809790e0e 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -243,6 +243,7 @@ public class PurpurWorldConfig { diff --git a/patches/unapplied-server/0076-Add-vindicator-johnny-spawn-chance.patch b/patches/server/0074-Add-vindicator-johnny-spawn-chance.patch similarity index 80% rename from patches/unapplied-server/0076-Add-vindicator-johnny-spawn-chance.patch rename to patches/server/0074-Add-vindicator-johnny-spawn-chance.patch index 44e3cd15b..899ff3440 100644 --- a/patches/unapplied-server/0076-Add-vindicator-johnny-spawn-chance.patch +++ b/patches/server/0074-Add-vindicator-johnny-spawn-chance.patch @@ -5,15 +5,14 @@ Subject: [PATCH] Add vindicator johnny spawn chance diff --git a/src/main/java/net/minecraft/world/entity/monster/Vindicator.java b/src/main/java/net/minecraft/world/entity/monster/Vindicator.java -index e270da29fdab5060b6a936bba67c433a78c54b5b..61f1778d454cebaab5580179614ff48ab67b8fe6 100644 +index eb6dce8b2dcc7f4e63c69cfa6acbd9b36a923706..feb7eb93bd20e141ff86ed2e91b9cd0fa3f1d154 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Vindicator.java +++ b/src/main/java/net/minecraft/world/entity/monster/Vindicator.java -@@ -148,6 +148,12 @@ public class Vindicator extends AbstractIllager { +@@ -151,6 +151,11 @@ public class Vindicator extends AbstractIllager { RandomSource randomSource = world.getRandom(); this.populateDefaultEquipmentSlots(randomSource, difficulty); - this.populateDefaultEquipmentEnchantments(randomSource, difficulty); + this.populateDefaultEquipmentEnchantments(world, randomSource, difficulty); + // Purpur start -+ Level level = world.getMinecraftWorld(); + if (level().purpurConfig.vindicatorJohnnySpawnChance > 0D && random.nextDouble() <= level().purpurConfig.vindicatorJohnnySpawnChance) { + setCustomName(Component.translatable("Johnny")); + } @@ -22,10 +21,10 @@ index e270da29fdab5060b6a936bba67c433a78c54b5b..61f1778d454cebaab5580179614ff48a } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 1c4446ce2ca2e9c9d3d85a38752a6f27f8121d12..8df777ce71b649de697bbf9b77636f3a30df3d1c 100644 +index 5f0610d06902aa1fea9cd130ea2724b809790e0e..c5c7ba3449fea61b8a94a99e97867f5d47be5c38 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1660,6 +1660,7 @@ public class PurpurWorldConfig { +@@ -1658,6 +1658,7 @@ public class PurpurWorldConfig { public boolean vindicatorRidableInWater = true; public boolean vindicatorControllable = true; public double vindicatorMaxHealth = 24.0D; @@ -33,7 +32,7 @@ index 1c4446ce2ca2e9c9d3d85a38752a6f27f8121d12..8df777ce71b649de697bbf9b77636f3a private void vindicatorSettings() { vindicatorRidable = getBoolean("mobs.vindicator.ridable", vindicatorRidable); vindicatorRidableInWater = getBoolean("mobs.vindicator.ridable-in-water", vindicatorRidableInWater); -@@ -1670,6 +1671,7 @@ public class PurpurWorldConfig { +@@ -1668,6 +1669,7 @@ public class PurpurWorldConfig { set("mobs.vindicator.attributes.max_health", oldValue); } vindicatorMaxHealth = getDouble("mobs.vindicator.attributes.max_health", vindicatorMaxHealth); diff --git a/patches/unapplied-server/0077-Dispensers-place-anvils-option.patch b/patches/server/0075-Dispensers-place-anvils-option.patch similarity index 90% rename from patches/unapplied-server/0077-Dispensers-place-anvils-option.patch rename to patches/server/0075-Dispensers-place-anvils-option.patch index 0dbf632e9..b95656d4e 100644 --- a/patches/unapplied-server/0077-Dispensers-place-anvils-option.patch +++ b/patches/server/0075-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 5dab1e10303177e5a4d97a91ee46ede66f30ae35..68236139e3571791b891dbbef6e3ee20031e16d9 100644 +index 9d71388c6e8ff56228afbf8cb18c37f861d0b246..b659f413d8c771e4b3b2e79a03ca21b72fba98a1 100644 --- a/src/main/java/net/minecraft/core/dispenser/DispenseItemBehavior.java +++ b/src/main/java/net/minecraft/core/dispenser/DispenseItemBehavior.java -@@ -1048,5 +1048,22 @@ public interface DispenseItemBehavior { +@@ -1015,5 +1015,22 @@ public interface DispenseItemBehavior { } } }); @@ -32,7 +32,7 @@ index 5dab1e10303177e5a4d97a91ee46ede66f30ae35..68236139e3571791b891dbbef6e3ee20 } } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 7b584d5c8460e90dfea250591e4ca36cb1db004a..00c4cda4ca21195c4fbfeb47f92e197be18aa4c6 100644 +index c5c7ba3449fea61b8a94a99e97867f5d47be5c38..3d5c523611532b35453b86524af80d66879638c4 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/unapplied-server/0078-Allow-anvil-colors.patch b/patches/server/0076-Allow-anvil-colors.patch similarity index 96% rename from patches/unapplied-server/0078-Allow-anvil-colors.patch rename to patches/server/0076-Allow-anvil-colors.patch index cdcf19f9a..c66485794 100644 --- a/patches/unapplied-server/0078-Allow-anvil-colors.patch +++ b/patches/server/0076-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 9036426256f87b3ba4a78e6fa2cea4e028f84481..5cadd69bcae33b1de58806fcf40533850d976154 100644 +index 2348ee0065367ade5354d54aac53ab23d43d0622..48d803a3e8419a04fce934263f7a01dbfd335e2e 100644 --- a/src/main/java/net/minecraft/world/inventory/AnvilMenu.java +++ b/src/main/java/net/minecraft/world/inventory/AnvilMenu.java @@ -279,6 +279,54 @@ public class AnvilMenu extends ItemCombinerMenu { @@ -64,7 +64,7 @@ index 9036426256f87b3ba4a78e6fa2cea4e028f84481..5cadd69bcae33b1de58806fcf4053385 } } else if (itemstack.has(DataComponents.CUSTOM_NAME)) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 00c4cda4ca21195c4fbfeb47f92e197be18aa4c6..4c80796777c5a90c5e7a9e8ef0beedfcb49f0aa9 100644 +index 3d5c523611532b35453b86524af80d66879638c4..e065cd4d0bc1f0ffe04023ceaa024d0598f343e9 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/unapplied-server/0079-Add-option-to-disable-dolphin-treasure-searching.patch b/patches/server/0077-Add-option-to-disable-dolphin-treasure-searching.patch similarity index 88% rename from patches/unapplied-server/0079-Add-option-to-disable-dolphin-treasure-searching.patch rename to patches/server/0077-Add-option-to-disable-dolphin-treasure-searching.patch index c2a10a8e2..e0905ce6c 100644 --- a/patches/unapplied-server/0079-Add-option-to-disable-dolphin-treasure-searching.patch +++ b/patches/server/0077-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 4f294b3ecf061f34046b52bf2b6a3d0ff1ed347b..366d583926e7e33a8c1e5a803bb75a456b4838d0 100644 +index e60464efd9986e1cf857d8595b13535df7ffc7b1..30da8d977d5b591d6bce619eba71181cb588e3c4 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Dolphin.java +++ b/src/main/java/net/minecraft/world/entity/animal/Dolphin.java -@@ -471,6 +471,7 @@ public class Dolphin extends WaterAnimal { +@@ -464,6 +464,7 @@ public class Dolphin extends WaterAnimal { @Override public boolean canUse() { @@ -17,7 +17,7 @@ index 4f294b3ecf061f34046b52bf2b6a3d0ff1ed347b..366d583926e7e33a8c1e5a803bb75a45 } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index d6ebaed09f0b84ec7641ad660f47aed95fdac1b9..dff99dafb0869106fc8f70ee583ba8e269e07777 100644 +index e065cd4d0bc1f0ffe04023ceaa024d0598f343e9..5ff9c2977b4efd67743b898219ba0a68bfb92dd8 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -632,6 +632,7 @@ public class PurpurWorldConfig { diff --git a/patches/unapplied-server/0080-Short-enderman-height.patch b/patches/server/0078-Short-enderman-height.patch similarity index 88% rename from patches/unapplied-server/0080-Short-enderman-height.patch rename to patches/server/0078-Short-enderman-height.patch index 8bad988ef..a408fa6d9 100644 --- a/patches/unapplied-server/0080-Short-enderman-height.patch +++ b/patches/server/0078-Short-enderman-height.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Short enderman height diff --git a/src/main/java/net/minecraft/world/entity/EntityType.java b/src/main/java/net/minecraft/world/entity/EntityType.java -index 9b3bf5ac043262c6cd00d83b750c3313122d92a9..3097529a9066841a58c899ce55b3bc0cd6af7e88 100644 +index 76d0c482f1ab251963ca2e0c312acad52a7f9901..831da897fd422df8e57487017871e841cbc95d00 100644 --- a/src/main/java/net/minecraft/world/entity/EntityType.java +++ b/src/main/java/net/minecraft/world/entity/EntityType.java @@ -322,7 +322,8 @@ public class EntityType implements FeatureElement, EntityTypeT @@ -19,10 +19,10 @@ index 9b3bf5ac043262c6cd00d83b750c3313122d92a9..3097529a9066841a58c899ce55b3bc0c private final FeatureFlagSet requiredFeatures; diff --git a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java -index 89275ac02fcfab963b520efae6135d6f5ac13465..cb307a9419399e33a895376a584456f084691965 100644 +index 12422c069c64bae0e16b3edd39e8dbe574704584..8604db61d2c8042d0399262cb60b98457e4f894c 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java +++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java -@@ -419,6 +419,7 @@ public class EnderMan extends Monster implements NeutralMob { +@@ -421,6 +421,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 @@ -31,7 +31,7 @@ index 89275ac02fcfab963b520efae6135d6f5ac13465..cb307a9419399e33a895376a584456f0 boolean flag = source.getDirectEntity() instanceof ThrownPotion; boolean flag1; diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index 43f42895c745be0fb809db856083dbea5def5776..68b19f66b38ffecfa05aaa7ec1187fb0967ebd57 100644 +index b15769f1e5b6cb2afc63402e540683253b7e3284..1a38fbffb797088ff3debe119893411f1615735c 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java @@ -244,6 +244,12 @@ public class PurpurConfig { diff --git a/patches/unapplied-server/0081-Stop-squids-floating-on-top-of-water.patch b/patches/server/0079-Stop-squids-floating-on-top-of-water.patch similarity index 84% rename from patches/unapplied-server/0081-Stop-squids-floating-on-top-of-water.patch rename to patches/server/0079-Stop-squids-floating-on-top-of-water.patch index 1a87f1d97..2d71cdacd 100644 --- a/patches/unapplied-server/0081-Stop-squids-floating-on-top-of-water.patch +++ b/patches/server/0079-Stop-squids-floating-on-top-of-water.patch @@ -5,11 +5,11 @@ 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 6734cc459682328c7bfe8714a190a5765165e17b..44e20e9921f89238088458ba4c22c0997aae899b 100644 +index b0c65f5a6cf79f22603d3dd93fffac435686b41c..368af5e31919ad5a648315d9d848511a791cc5bb 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -4516,6 +4516,12 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess - this.yRotO = this.getYRot(); +@@ -4216,6 +4216,12 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess + return Mth.lerp(delta, this.yRotO, this.yRot); } + // Purpur start @@ -22,10 +22,10 @@ index 6734cc459682328c7bfe8714a190a5765165e17b..44e20e9921f89238088458ba4c22c099 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 e38416189d9dc72f0b5951a1f6430dbc4578c422..c562eeb5e865a57fbc595de47c5d4e2b90430026 100644 +index eb85356f0e2d1dc2eeecb30a36f88df900eb5caa..df071be3179898b77ba82ce8697da18196f16ad8 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Squid.java +++ b/src/main/java/net/minecraft/world/entity/animal/Squid.java -@@ -73,6 +73,12 @@ public class Squid extends WaterAnimal { +@@ -72,6 +72,12 @@ public class Squid extends WaterAnimal { this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.squidMaxHealth); } @@ -39,10 +39,10 @@ index e38416189d9dc72f0b5951a1f6430dbc4578c422..c562eeb5e865a57fbc595de47c5d4e2b 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 92394960fc76886f393cba02ac33c57739a4b383..494808b7bc2fb296b78e229ce138a937b7ac2c59 100644 +index c8f7c43134e7c51ce8af5b3c1a28c11db67715a2..5b98889715bf62eb4f15c0b45ada2c701491d324 100644 --- a/src/main/java/net/minecraft/world/phys/AABB.java +++ b/src/main/java/net/minecraft/world/phys/AABB.java -@@ -502,4 +502,10 @@ public class AABB { +@@ -508,4 +508,10 @@ public class AABB { public static AABB ofSize(Vec3 center, double dx, double dy, double dz) { return new AABB(center.x - dx / 2.0, center.y - dy / 2.0, center.z - dz / 2.0, center.x + dx / 2.0, center.y + dy / 2.0, center.z + dz / 2.0); } @@ -54,7 +54,7 @@ index 92394960fc76886f393cba02ac33c57739a4b383..494808b7bc2fb296b78e229ce138a937 + // Purpur } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index dff99dafb0869106fc8f70ee583ba8e269e07777..0ca54a08809ff058912a82e3a8e611cbfe61b682 100644 +index 5ff9c2977b4efd67743b898219ba0a68bfb92dd8..83e5f4437e88d56060db2278e8fa2dbba5256d64 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -1500,6 +1500,7 @@ public class PurpurWorldConfig { diff --git a/patches/unapplied-server/0082-Crying-obsidian-valid-for-portal-frames.patch b/patches/server/0080-Crying-obsidian-valid-for-portal-frames.patch similarity index 90% rename from patches/unapplied-server/0082-Crying-obsidian-valid-for-portal-frames.patch rename to patches/server/0080-Crying-obsidian-valid-for-portal-frames.patch index f67874c24..e1944bc4b 100644 --- a/patches/unapplied-server/0082-Crying-obsidian-valid-for-portal-frames.patch +++ b/patches/server/0080-Crying-obsidian-valid-for-portal-frames.patch @@ -5,10 +5,10 @@ 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 af24467ee37cfc06f692b3b02e68f6cfbaaa8d59..afe6b2170846273b41b694aa53dca4c31bf78b3f 100644 +index 57139a0b8adcd1ea25cd100be78402681856ee75..e8793e11e94eea41ea9be615f0d46c7add836919 100644 --- a/src/main/java/net/minecraft/world/level/portal/PortalShape.java +++ b/src/main/java/net/minecraft/world/level/portal/PortalShape.java -@@ -33,7 +33,7 @@ public class PortalShape { +@@ -32,7 +32,7 @@ public class PortalShape { private static final int MIN_HEIGHT = 3; public static final int MAX_HEIGHT = 21; private static final BlockBehaviour.StatePredicate FRAME = (iblockdata, iblockaccess, blockposition) -> { @@ -18,7 +18,7 @@ index af24467ee37cfc06f692b3b02e68f6cfbaaa8d59..afe6b2170846273b41b694aa53dca4c3 private static final float SAFE_TRAVEL_MAX_ENTITY_XY = 4.0F; private static final double SAFE_TRAVEL_MAX_VERTICAL_DELTA = 1.0D; diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index 68b19f66b38ffecfa05aaa7ec1187fb0967ebd57..2f68cf2fc064a38ca059504a39d563d95d01643e 100644 +index 1a38fbffb797088ff3debe119893411f1615735c..b1dec36f0446773b066a4f08cc4045c312f64259 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java @@ -212,6 +212,7 @@ public class PurpurConfig { diff --git a/patches/unapplied-server/0084-LivingEntity-broadcastItemBreak.patch b/patches/server/0081-LivingEntity-broadcastItemBreak.patch similarity index 85% rename from patches/unapplied-server/0084-LivingEntity-broadcastItemBreak.patch rename to patches/server/0081-LivingEntity-broadcastItemBreak.patch index ff56ca547..1e339efeb 100644 --- a/patches/unapplied-server/0084-LivingEntity-broadcastItemBreak.patch +++ b/patches/server/0081-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 18af8736f30780b48313257a09973e30df6d0e2f..f234cc33ad0e1f308daef6a09e1755bc23497294 100644 +index a1e715629313346f670bce92483996122b0f1d7b..386647f6000c71c59ab8d7875219eefdc5a3d7ef 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java -@@ -1180,4 +1180,12 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { +@@ -1181,4 +1181,12 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { this.getHandle().setYBodyRot(bodyYaw); } // Paper end - body yaw API diff --git a/patches/unapplied-server/0085-Customizable-wither-health-and-healing.patch b/patches/server/0082-Customizable-wither-health-and-healing.patch similarity index 89% rename from patches/unapplied-server/0085-Customizable-wither-health-and-healing.patch rename to patches/server/0082-Customizable-wither-health-and-healing.patch index e6e2a15bc..3b4b499fc 100644 --- a/patches/unapplied-server/0085-Customizable-wither-health-and-healing.patch +++ b/patches/server/0082-Customizable-wither-health-and-healing.patch @@ -6,7 +6,7 @@ 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 0cc32342cf6c65466dd1e45f9097ca89b01036e4..8d2894bb1ae70f63c8fa67de3e9f7c6a9c940f3e 100644 +index c4894f62a2c3d84d063e5caa5a38df80575660cb..8f1458d250bb875396c6318a7abc520f3563b8ef 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 @@ -520,8 +520,10 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob @@ -23,10 +23,10 @@ index 0cc32342cf6c65466dd1e45f9097ca89b01036e4..8d2894bb1ae70f63c8fa67de3e9f7c6a this.bossEvent.setProgress(this.getHealth() / this.getMaxHealth()); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 7d08647a6eaf217b3c4504b0953ba1f824104359..ccd5741f4fb91874fdca7c49b9c4c90eefc3b1b1 100644 +index 83e5f4437e88d56060db2278e8fa2dbba5256d64..349129c09abb8d33b02753fe85412bf7b2ad3d72 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1739,6 +1739,8 @@ public class PurpurWorldConfig { +@@ -1733,6 +1733,8 @@ public class PurpurWorldConfig { public boolean witherControllable = true; public double witherMaxY = 320D; public double witherMaxHealth = 300.0D; @@ -35,7 +35,7 @@ index 7d08647a6eaf217b3c4504b0953ba1f824104359..ccd5741f4fb91874fdca7c49b9c4c90e private void witherSettings() { witherRidable = getBoolean("mobs.wither.ridable", witherRidable); witherRidableInWater = getBoolean("mobs.wither.ridable-in-water", witherRidableInWater); -@@ -1754,6 +1756,8 @@ public class PurpurWorldConfig { +@@ -1748,6 +1750,8 @@ public class PurpurWorldConfig { set("mobs.wither.attributes.max_health", oldValue); } witherMaxHealth = getDouble("mobs.wither.attributes.max_health", witherMaxHealth); diff --git a/patches/unapplied-server/0086-Allow-toggling-special-MobSpawners-per-world.patch b/patches/server/0083-Allow-toggling-special-MobSpawners-per-world.patch similarity index 94% rename from patches/unapplied-server/0086-Allow-toggling-special-MobSpawners-per-world.patch rename to patches/server/0083-Allow-toggling-special-MobSpawners-per-world.patch index a123bfffa..b46f61323 100644 --- a/patches/unapplied-server/0086-Allow-toggling-special-MobSpawners-per-world.patch +++ b/patches/server/0083-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 b02d9db8442b209a9df27e417be71b11d426878b..1c74802577e056b9023dcc2cbec5885d02fe2c92 100644 +index 521b4b0a767e06db540dc73ff5c8b114813d3168..eb96049b6a788b7164ea9bb5ec9ad70bc19e6976 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -714,7 +714,24 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -363,7 +363,24 @@ public class ServerLevel extends Level implements WorldGenLevel { this.dragonParts = new Int2ObjectOpenHashMap(); this.tickTime = flag1; this.server = minecraftserver; @@ -59,7 +59,7 @@ index c72b6ea5530e54fc373c701028e1c147cea34b59..96e9fce5f9084737d2fcf4deb8330573 if (spawnplacementtype.isSpawnPositionOk(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 beea39d7cdbca783de7248a5c40ea2c7ab02e5b5..ce5db64c233bac3800a715e66aada4740bdad95b 100644 +index 349129c09abb8d33b02753fe85412bf7b2ad3d72..41f29a0b6aaa76f2a1d4f269849f442f89cec6ac 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 { @@ -75,7 +75,7 @@ index beea39d7cdbca783de7248a5c40ea2c7ab02e5b5..ce5db64c233bac3800a715e66aada474 private double getDouble(String path, double def) { PurpurConfig.config.addDefault("world-settings.default." + path, def); return PurpurConfig.config.getDouble("world-settings." + worldName + "." + path, PurpurConfig.config.getDouble("world-settings.default." + path)); -@@ -237,6 +243,21 @@ public class PurpurWorldConfig { +@@ -235,6 +241,21 @@ public class PurpurWorldConfig { } } diff --git a/patches/unapplied-server/0087-Raid-cooldown-setting.patch b/patches/server/0084-Raid-cooldown-setting.patch similarity index 95% rename from patches/unapplied-server/0087-Raid-cooldown-setting.patch rename to patches/server/0084-Raid-cooldown-setting.patch index 439cbff14..20857746f 100644 --- a/patches/unapplied-server/0087-Raid-cooldown-setting.patch +++ b/patches/server/0084-Raid-cooldown-setting.patch @@ -49,10 +49,10 @@ index 8c60f71270d909c10e6617eb64b8fdb42deb73e9..eedce2a3d67d875d5174ee125e267948 if (!raid.isStarted() && !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 ce5db64c233bac3800a715e66aada4740bdad95b..9654023afbb0569d5d814368b93b74dedda905a4 100644 +index 41f29a0b6aaa76f2a1d4f269849f442f89cec6ac..44ade9073446e80685bf264571a3922fbab5fb08 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 { +@@ -108,6 +108,7 @@ public class PurpurWorldConfig { public double tridentLoyaltyVoidReturnHeight = 0.0D; public double voidDamageHeight = -64.0D; public double voidDamageDealt = 4.0D; @@ -60,7 +60,7 @@ index ce5db64c233bac3800a715e66aada4740bdad95b..9654023afbb0569d5d814368b93b74de private void miscGameplayMechanicsSettings() { useBetterMending = getBoolean("gameplay-mechanics.use-better-mending", useBetterMending); boatEjectPlayersOnLand = getBoolean("gameplay-mechanics.boat.eject-players-on-land", boatEjectPlayersOnLand); -@@ -118,6 +119,7 @@ public class PurpurWorldConfig { +@@ -116,6 +117,7 @@ public class PurpurWorldConfig { tridentLoyaltyVoidReturnHeight = getDouble("gameplay-mechanics.trident-loyalty-void-return-height", tridentLoyaltyVoidReturnHeight); voidDamageHeight = getDouble("gameplay-mechanics.void-damage-height", voidDamageHeight); voidDamageDealt = getDouble("gameplay-mechanics.void-damage-dealt", voidDamageDealt); diff --git a/patches/unapplied-server/0088-Despawn-rate-config-options-per-projectile-type.patch b/patches/server/0085-Despawn-rate-config-options-per-projectile-type.patch similarity index 94% rename from patches/unapplied-server/0088-Despawn-rate-config-options-per-projectile-type.patch rename to patches/server/0085-Despawn-rate-config-options-per-projectile-type.patch index b197ba556..40da9e53a 100644 --- a/patches/unapplied-server/0088-Despawn-rate-config-options-per-projectile-type.patch +++ b/patches/server/0085-Despawn-rate-config-options-per-projectile-type.patch @@ -7,10 +7,10 @@ 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 9654023afbb0569d5d814368b93b74dedda905a4..8a577d78d63adc799de71f96b45320372c346552 100644 +index 44ade9073446e80685bf264571a3922fbab5fb08..91c45e6da2ddd7547144f35f38cdfa2b3e1cc3fc 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -318,6 +318,40 @@ public class PurpurWorldConfig { +@@ -316,6 +316,40 @@ public class PurpurWorldConfig { }); } diff --git a/patches/unapplied-server/0089-Add-option-to-disable-zombie-aggressiveness-towards-.patch b/patches/server/0086-Add-option-to-disable-zombie-aggressiveness-towards-.patch similarity index 94% rename from patches/unapplied-server/0089-Add-option-to-disable-zombie-aggressiveness-towards-.patch rename to patches/server/0086-Add-option-to-disable-zombie-aggressiveness-towards-.patch index 1ba1b31b8..b1a84c86e 100644 --- a/patches/unapplied-server/0089-Add-option-to-disable-zombie-aggressiveness-towards-.patch +++ b/patches/server/0086-Add-option-to-disable-zombie-aggressiveness-towards-.patch @@ -45,10 +45,10 @@ index 1d283484be270497859e23e3bb4ab38c09af23e6..b02cdbaa0455319b1e8a7e777e64ff4a 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 555b86925b8d848fad40a838dd98607db8741e3b..3d42b2ea26217243dba96174ff0eadbcdd81a6cd 100644 +index 43c48bb14957b93ee3b0191360c09f710bc008e0..b39d8ee4c6e9483a15991be3b1440384708aee65 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Zombie.java +++ b/src/main/java/net/minecraft/world/entity/monster/Zombie.java -@@ -154,7 +154,19 @@ public class Zombie extends Monster { +@@ -158,7 +158,19 @@ public class Zombie extends Monster { this.goalSelector.addGoal(7, new WaterAvoidingRandomStrollGoal(this, 1.0D)); this.targetSelector.addGoal(1, (new HurtByTargetGoal(this, new Class[0])).setAlertOthers(ZombifiedPiglin.class)); this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true)); @@ -70,10 +70,10 @@ index 555b86925b8d848fad40a838dd98607db8741e3b..3d42b2ea26217243dba96174ff0eadbc this.targetSelector.addGoal(5, new NearestAttackableTargetGoal<>(this, Turtle.class, 10, true, false, Turtle.BABY_ON_LAND_SELECTOR)); } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 047f702ee2600036ac0478eb24fbbe6ba426f5c2..88a4e38445dda48e9f9bcc3c9be6ca9fb5ff5760 100644 +index 91c45e6da2ddd7547144f35f38cdfa2b3e1cc3fc..e1b809b493dddb6656903c10dd5e7d63037431c7 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1873,6 +1873,7 @@ public class PurpurWorldConfig { +@@ -1867,6 +1867,7 @@ public class PurpurWorldConfig { public boolean zombieJockeyOnlyBaby = true; public double zombieJockeyChance = 0.05D; public boolean zombieJockeyTryExistingChickens = true; @@ -81,7 +81,7 @@ index 047f702ee2600036ac0478eb24fbbe6ba426f5c2..88a4e38445dda48e9f9bcc3c9be6ca9f private void zombieSettings() { zombieRidable = getBoolean("mobs.zombie.ridable", zombieRidable); zombieRidableInWater = getBoolean("mobs.zombie.ridable-in-water", zombieRidableInWater); -@@ -1887,6 +1888,7 @@ public class PurpurWorldConfig { +@@ -1881,6 +1882,7 @@ public class PurpurWorldConfig { zombieJockeyOnlyBaby = getBoolean("mobs.zombie.jockey.only-babies", zombieJockeyOnlyBaby); zombieJockeyChance = getDouble("mobs.zombie.jockey.chance", zombieJockeyChance); zombieJockeyTryExistingChickens = getBoolean("mobs.zombie.jockey.try-existing-chickens", zombieJockeyTryExistingChickens); diff --git a/patches/unapplied-server/0090-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch b/patches/server/0087-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch similarity index 100% rename from patches/unapplied-server/0090-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch rename to patches/server/0087-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch diff --git a/patches/unapplied-server/0091-Flying-squids-Oh-my.patch b/patches/server/0088-Flying-squids-Oh-my.patch similarity index 89% rename from patches/unapplied-server/0091-Flying-squids-Oh-my.patch rename to patches/server/0088-Flying-squids-Oh-my.patch index ca26d5b52..ba318a947 100644 --- a/patches/unapplied-server/0091-Flying-squids-Oh-my.patch +++ b/patches/server/0088-Flying-squids-Oh-my.patch @@ -21,10 +21,10 @@ index 8211c152e6f4232e82e452b08047e4579465d770..4cd57672c548950cb4e0aa97af75ecca protected ParticleOptions getInkParticle() { return ParticleTypes.GLOW_SQUID_INK; diff --git a/src/main/java/net/minecraft/world/entity/animal/Squid.java b/src/main/java/net/minecraft/world/entity/animal/Squid.java -index c562eeb5e865a57fbc595de47c5d4e2b90430026..f0261117a4f8ae240b3b991053deaf8d6419b5b4 100644 +index df071be3179898b77ba82ce8697da18196f16ad8..b4cb9fc3f543b70233fe88a31565252eefdb4ce9 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Squid.java +++ b/src/main/java/net/minecraft/world/entity/animal/Squid.java -@@ -79,6 +79,15 @@ public class Squid extends WaterAnimal { +@@ -78,6 +78,15 @@ public class Squid extends WaterAnimal { return super.getAxisForFluidCheck().offsetY(level().purpurConfig.squidOffsetWaterCheck); } @@ -40,7 +40,7 @@ index c562eeb5e865a57fbc595de47c5d4e2b90430026..f0261117a4f8ae240b3b991053deaf8d @Override protected void registerGoals() { this.goalSelector.addGoal(0, new Squid.SquidRandomMovementGoal(this)); -@@ -151,6 +160,7 @@ public class Squid extends WaterAnimal { +@@ -150,6 +159,7 @@ public class Squid extends WaterAnimal { } if (this.isInWaterOrBubble()) { @@ -48,7 +48,7 @@ index c562eeb5e865a57fbc595de47c5d4e2b90430026..f0261117a4f8ae240b3b991053deaf8d if (this.tentacleMovement < (float) Math.PI) { float f = this.tentacleMovement / (float) Math.PI; this.tentacleAngle = Mth.sin(f * f * (float) Math.PI) * (float) Math.PI * 0.25F; -@@ -358,7 +368,7 @@ public class Squid extends WaterAnimal { +@@ -357,7 +367,7 @@ public class Squid extends WaterAnimal { int i = this.squid.getNoActionTime(); if (i > 100) { this.squid.setMovementVector(0.0F, 0.0F, 0.0F); @@ -58,10 +58,10 @@ index c562eeb5e865a57fbc595de47c5d4e2b90430026..f0261117a4f8ae240b3b991053deaf8d float g = Mth.cos(f) * 0.2F; float h = -0.1F + this.squid.getRandom().nextFloat() * 0.2F; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 88a4e38445dda48e9f9bcc3c9be6ca9fb5ff5760..935bf96285bd7927f0b2294c7731a865a54e4585 100644 +index e1b809b493dddb6656903c10dd5e7d63037431c7..50e368eeaf0d34320a529fedc7ca6038b00c97bf 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -925,10 +925,12 @@ public class PurpurWorldConfig { +@@ -923,10 +923,12 @@ public class PurpurWorldConfig { public boolean glowSquidRidable = false; public boolean glowSquidControllable = true; public double glowSquidMaxHealth = 10.0D; @@ -74,7 +74,7 @@ index 88a4e38445dda48e9f9bcc3c9be6ca9fb5ff5760..935bf96285bd7927f0b2294c7731a865 } public boolean goatRidable = false; -@@ -1560,6 +1562,7 @@ public class PurpurWorldConfig { +@@ -1558,6 +1560,7 @@ public class PurpurWorldConfig { public double squidMaxHealth = 10.0D; public boolean squidImmuneToEAR = true; public double squidOffsetWaterCheck = 0.0D; @@ -82,7 +82,7 @@ index 88a4e38445dda48e9f9bcc3c9be6ca9fb5ff5760..935bf96285bd7927f0b2294c7731a865 private void squidSettings() { squidRidable = getBoolean("mobs.squid.ridable", squidRidable); squidControllable = getBoolean("mobs.squid.controllable", squidControllable); -@@ -1571,6 +1574,7 @@ public class PurpurWorldConfig { +@@ -1569,6 +1572,7 @@ public class PurpurWorldConfig { squidMaxHealth = getDouble("mobs.squid.attributes.max_health", squidMaxHealth); squidImmuneToEAR = getBoolean("mobs.squid.immune-to-EAR", squidImmuneToEAR); squidOffsetWaterCheck = getDouble("mobs.squid.water-offset-check", squidOffsetWaterCheck); diff --git a/patches/unapplied-server/0093-Configurable-daylight-cycle.patch b/patches/server/0089-Configurable-daylight-cycle.patch similarity index 81% rename from patches/unapplied-server/0093-Configurable-daylight-cycle.patch rename to patches/server/0089-Configurable-daylight-cycle.patch index 713f5e8ef..ecf1352a2 100644 --- a/patches/unapplied-server/0093-Configurable-daylight-cycle.patch +++ b/patches/server/0089-Configurable-daylight-cycle.patch @@ -18,10 +18,10 @@ index 76ef195a5074006b009acd9cc1744667c6aecbb9..659577549e132754281df76a7a1bfd88 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 e8ebbbaa43dc8e3b63b2a90c0934207441e595f5..6ebc9327f74344245886144a4075836205cc1533 100644 +index 0ce81b0d621d2914903c4325f2e602a246544890..ea2ca2e724cfe061ca356a1bdb0c579d8ba18176 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1750,7 +1750,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 d2ab4fe9ccb19f837a41bddddf29cfcc96fc3f96..163d2cfaeaa301c34f04ed13d8ff881ecb868224 100644 +index c35776bd050820795edaed0cf9aa86cbfe1aed60..aa6f4a02b9559fe1d60df0d57cdf72423fc12b76 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -410,6 +410,17 @@ public class PurpurWorldConfig { +@@ -397,6 +397,17 @@ public class PurpurWorldConfig { farmlandGetsMoistFromBelow = getBoolean("blocks.farmland.gets-moist-from-below", farmlandGetsMoistFromBelow); } diff --git a/patches/unapplied-server/0096-Arrows-should-not-reset-despawn-counter.patch b/patches/server/0091-Arrows-should-not-reset-despawn-counter.patch similarity index 88% rename from patches/unapplied-server/0096-Arrows-should-not-reset-despawn-counter.patch rename to patches/server/0091-Arrows-should-not-reset-despawn-counter.patch index 6fe03557a..741dee159 100644 --- a/patches/unapplied-server/0096-Arrows-should-not-reset-despawn-counter.patch +++ b/patches/server/0091-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 31b8a8bf78d52b5f11b68e780ec09bf78e7bda84..342eaa0e3b053e9b39dc58fa92cd18cac446a844 100644 +index 0bf0e1586c80076a41b9f75b5e59e806b91bf825..4d8860c862a355969ec801c6a2a0abb95aabbfa6 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java +++ b/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java -@@ -332,7 +332,7 @@ public abstract class AbstractArrow extends Projectile { +@@ -356,7 +356,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 31b8a8bf78d52b5f11b68e780ec09bf78e7bda84..342eaa0e3b053e9b39dc58fa92cd18ca @Override diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 163d2cfaeaa301c34f04ed13d8ff881ecb868224..5a49ea28eb227c6d550f3d7e589fb1e98fa2d285 100644 +index aa6f4a02b9559fe1d60df0d57cdf72423fc12b76..a8fbd9f4491076ae51a10b60047c28feac4e2ad3 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/unapplied-server/0097-Ability-to-re-add-farmland-mechanics-from-Alpha.patch b/patches/server/0092-Ability-to-re-add-farmland-mechanics-from-Alpha.patch similarity index 92% rename from patches/unapplied-server/0097-Ability-to-re-add-farmland-mechanics-from-Alpha.patch rename to patches/server/0092-Ability-to-re-add-farmland-mechanics-from-Alpha.patch index a10dc92f4..8383d4d2e 100644 --- a/patches/unapplied-server/0097-Ability-to-re-add-farmland-mechanics-from-Alpha.patch +++ b/patches/server/0092-Ability-to-re-add-farmland-mechanics-from-Alpha.patch @@ -24,10 +24,10 @@ index da85fabd75e9bd5ebece7127ef5b512df16fe3ac..dc356bd0931af9bdab9ec71e3de66e88 return; } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 5a49ea28eb227c6d550f3d7e589fb1e98fa2d285..543c7679cf1ac50ff103be3366421d4faa542319 100644 +index a8fbd9f4491076ae51a10b60047c28feac4e2ad3..54d4ee904372e2b5f3cc288e1c1438922ef082b4 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -411,8 +411,10 @@ public class PurpurWorldConfig { +@@ -398,8 +398,10 @@ public class PurpurWorldConfig { } public boolean farmlandGetsMoistFromBelow = false; diff --git a/patches/unapplied-server/0098-Add-adjustable-breeding-cooldown-to-config.patch b/patches/server/0093-Add-adjustable-breeding-cooldown-to-config.patch similarity index 93% rename from patches/unapplied-server/0098-Add-adjustable-breeding-cooldown-to-config.patch rename to patches/server/0093-Add-adjustable-breeding-cooldown-to-config.patch index dcc9157b3..7c5cd0413 100644 --- a/patches/unapplied-server/0098-Add-adjustable-breeding-cooldown-to-config.patch +++ b/patches/server/0093-Add-adjustable-breeding-cooldown-to-config.patch @@ -5,7 +5,7 @@ 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 5193cf1d3c922d750a11e492b7636215e23ad0d6..b1f0fda942559b6d12c12a77088da6ce4a233963 100644 +index e96fca314bebea5fcdb684d3478af1b6dc5f13cf..5ab29081ab9f5dcf355d1dac2f2a854149ab4699 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Animal.java +++ b/src/main/java/net/minecraft/world/entity/animal/Animal.java @@ -146,7 +146,7 @@ public abstract class Animal extends AgeableMob { @@ -42,10 +42,10 @@ index 5193cf1d3c922d750a11e492b7636215e23ad0d6..b1f0fda942559b6d12c12a77088da6ce 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 a0a0ccd06cf8de4a379d9fbb89865bae8feeedc6..f81a73b0ca751086cb13a9e4fef227356429209b 100644 +index df7ae03f3162c15ef5f5b9647c7d5d6182638257..d77350e75e67eb9a8301a489b5bec3aa7a69ec9c 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java -@@ -180,6 +180,49 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -174,6 +174,49 @@ public abstract class Level implements LevelAccessor, AutoCloseable { public final Map explosionDensityCache = new HashMap<>(); // Paper - Optimize explosions public java.util.ArrayDeque redstoneUpdateInfos; // Paper - Faster redstone torch rapid clock removal; Move from Map in BlockRedstoneTorch to here @@ -95,7 +95,7 @@ index a0a0ccd06cf8de4a379d9fbb89865bae8feeedc6..f81a73b0ca751086cb13a9e4fef22735 public CraftWorld getWorld() { return this.world; } -@@ -210,6 +253,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -204,6 +247,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 - create paper world config this.purpurConfig = new org.purpurmc.purpur.PurpurWorldConfig(((net.minecraft.world.level.storage.PrimaryLevelData) worlddatamutable).getLevelName(), env); // Purpur @@ -104,10 +104,10 @@ index a0a0ccd06cf8de4a379d9fbb89865bae8feeedc6..f81a73b0ca751086cb13a9e4fef22735 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 543c7679cf1ac50ff103be3366421d4faa542319..37292c309b465fce3b601a3ff8400e58c5a74308 100644 +index 54d4ee904372e2b5f3cc288e1c1438922ef082b4..aad064f27997ad4263de2d3afb162b53d2c891c1 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 { +@@ -114,6 +114,7 @@ public class PurpurWorldConfig { public double voidDamageHeight = -64.0D; public double voidDamageDealt = 4.0D; public int raidCooldownSeconds = 0; @@ -115,7 +115,7 @@ index 543c7679cf1ac50ff103be3366421d4faa542319..37292c309b465fce3b601a3ff8400e58 private void miscGameplayMechanicsSettings() { useBetterMending = getBoolean("gameplay-mechanics.use-better-mending", useBetterMending); boatEjectPlayersOnLand = getBoolean("gameplay-mechanics.boat.eject-players-on-land", boatEjectPlayersOnLand); -@@ -125,6 +126,7 @@ public class PurpurWorldConfig { +@@ -123,6 +124,7 @@ public class PurpurWorldConfig { voidDamageHeight = getDouble("gameplay-mechanics.void-damage-height", voidDamageHeight); voidDamageDealt = getDouble("gameplay-mechanics.void-damage-dealt", voidDamageDealt); raidCooldownSeconds = getInt("gameplay-mechanics.raid-cooldown-seconds", raidCooldownSeconds); diff --git a/patches/unapplied-server/0099-Make-entity-breeding-times-configurable.patch b/patches/server/0094-Make-entity-breeding-times-configurable.patch similarity index 88% rename from patches/unapplied-server/0099-Make-entity-breeding-times-configurable.patch rename to patches/server/0094-Make-entity-breeding-times-configurable.patch index 167cfa681..30956457f 100644 --- a/patches/unapplied-server/0099-Make-entity-breeding-times-configurable.patch +++ b/patches/server/0094-Make-entity-breeding-times-configurable.patch @@ -22,7 +22,7 @@ index 0a608418f87b71d5d71706712e1f82da0d7e4d34..03e7ca83e4c28dfaa5b52bcb100bd542 // 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 b1f0fda942559b6d12c12a77088da6ce4a233963..7f90a0d8f65c96844df06b7c4fa3da28a6f51dd1 100644 +index 5ab29081ab9f5dcf355d1dac2f2a854149ab4699..27250278968233b3de05c365ae304a4121887160 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 { @@ -47,10 +47,10 @@ index b1f0fda942559b6d12c12a77088da6ce4a233963..7f90a0d8f65c96844df06b7c4fa3da28 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 ae4b53f4cdd78368deb7d510be4936ffefce4d9c..cbcfe8177362d9b8af97f21e716a4dce9e227465 100644 +index 3a7e413ba17901ed8e4ef0299555305c62f0d303..a758f360741de84a004ecc55f1415e74bd0a0fd5 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Bee.java +++ b/src/main/java/net/minecraft/world/entity/animal/Bee.java -@@ -472,6 +472,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); } @@ -63,10 +63,10 @@ index ae4b53f4cdd78368deb7d510be4936ffefce4d9c..cbcfe8177362d9b8af97f21e716a4dce public int getRemainingPersistentAngerTime() { return (Integer) this.entityData.get(Bee.DATA_REMAINING_ANGER_TIME); diff --git a/src/main/java/net/minecraft/world/entity/animal/Cat.java b/src/main/java/net/minecraft/world/entity/animal/Cat.java -index 7930e9735abf8357df737798e80b08295c2e06ec..b23d6683bab3d257febb57a6c9c8be4db926af7f 100644 +index 5d89b2c9bd6ee2d0d5176c93988b97ff2e913e83..e1f8fff9b67ad3c74afc69f2fba8919ffa1800e6 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Cat.java +++ b/src/main/java/net/minecraft/world/entity/animal/Cat.java -@@ -134,6 +134,11 @@ public class Cat extends TamableAnimal implements VariantHolder { @@ -156,7 +156,7 @@ index 41b52f128fbc174939a7f2d1cd937ab19432de25..22a2328fe5159c8fed635a62334a3f10 public float getWalkTargetValue(BlockPos pos, LevelReader world) { return world.getBlockState(pos.below()).is(Blocks.MYCELIUM) ? 10.0F : world.getPathfindingCostFromLightLevels(pos); diff --git a/src/main/java/net/minecraft/world/entity/animal/Ocelot.java b/src/main/java/net/minecraft/world/entity/animal/Ocelot.java -index 31f3982359a00f55a7fc053becc4043dcf423c50..fc74c21d2c506df2134fc4ce61917af65fa89466 100644 +index 0ef3fee057d7dd0b5d9d4a38953617bac3f49c7b..14d94992bc02c0eedab0c83fcffb975ac33d48cb 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Ocelot.java +++ b/src/main/java/net/minecraft/world/entity/animal/Ocelot.java @@ -88,6 +88,11 @@ public class Ocelot extends Animal { @@ -172,10 +172,10 @@ index 31f3982359a00f55a7fc053becc4043dcf423c50..fc74c21d2c506df2134fc4ce61917af6 return (Boolean) this.entityData.get(Ocelot.DATA_TRUSTING); } diff --git a/src/main/java/net/minecraft/world/entity/animal/Panda.java b/src/main/java/net/minecraft/world/entity/animal/Panda.java -index d2410da0b453e0128ff8b00956cae89cabff1d5d..e90fc016fc7e0e9aac2c2d0cf081748100f225f3 100644 +index 0fd0358d287604d0ff1f52f0c71633586d100e3e..925bed4503a4023c01d8b9ffd07047831e5e96e5 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Panda.java +++ b/src/main/java/net/minecraft/world/entity/animal/Panda.java -@@ -152,6 +152,11 @@ public class Panda extends Animal { +@@ -153,6 +153,11 @@ public class Panda extends Animal { setAttributes(); } @@ -186,9 +186,9 @@ index d2410da0b453e0128ff8b00956cae89cabff1d5d..e90fc016fc7e0e9aac2c2d0cf0817481 + @Override public boolean canTakeItem(ItemStack stack) { - EquipmentSlot enumitemslot = Mob.getEquipmentSlotForItem(stack); + EquipmentSlot enumitemslot = this.getEquipmentSlotForItem(stack); 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 04507e05b499e536faa3c55179bb91913f7cda81..22b8701accc76d806819433a8511172e13a9ed9e 100644 +index 17983481386709110b7c4749ec8432866454492d..d2cdb2d14dc8fe3cf6ffb14668f848e5dd020827 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Parrot.java +++ b/src/main/java/net/minecraft/world/entity/animal/Parrot.java @@ -191,6 +191,11 @@ public class Parrot extends ShoulderRidingEntity implements VariantHolder { +@@ -145,6 +145,11 @@ public class Rabbit extends Animal implements VariantHolder { public void initAttributes() { this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.rabbitMaxHealth); } @@ -252,10 +252,10 @@ index 4abcde662ed78b16632ee575f695ee4329f11b2f..b5297b1d7223af622636a7defdb98b5b @Override diff --git a/src/main/java/net/minecraft/world/entity/animal/Sheep.java b/src/main/java/net/minecraft/world/entity/animal/Sheep.java -index b68886cc72d3055e7745fe4a955192bbad90dc13..c3cc949291d11ae707fa5175d666df2ee81cdcce 100644 +index 90dff2e658e8b77d37952080d389e1f2db47264f..7d716efe614902c35ae63b49e159e8d2d8e7d8ea 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Sheep.java +++ b/src/main/java/net/minecraft/world/entity/animal/Sheep.java -@@ -139,6 +139,11 @@ public class Sheep extends Animal implements Shearable { +@@ -137,6 +137,11 @@ public class Sheep extends Animal implements Shearable { this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.sheepMaxHealth); } @@ -268,7 +268,7 @@ index b68886cc72d3055e7745fe4a955192bbad90dc13..c3cc949291d11ae707fa5175d666df2e protected void registerGoals() { this.eatBlockGoal = new EatBlockGoal(this); diff --git a/src/main/java/net/minecraft/world/entity/animal/Turtle.java b/src/main/java/net/minecraft/world/entity/animal/Turtle.java -index b8dcf3d632c79585ec7e9f50fa040fa9fac5d7c5..a577ec78b2f5bca0166277c499da4fa7988d5395 100644 +index d24697dc1e3cdc5eb61632935e81e25b1e341287..58a390b462ec387f5376559c3d615ed4bcf055ea 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Turtle.java +++ b/src/main/java/net/minecraft/world/entity/animal/Turtle.java @@ -109,6 +109,11 @@ public class Turtle extends Animal { @@ -281,13 +281,13 @@ index b8dcf3d632c79585ec7e9f50fa040fa9fac5d7c5..a577ec78b2f5bca0166277c499da4fa7 + } + public void setHomePos(BlockPos pos) { - this.entityData.set(Turtle.HOME_POS, pos.immutable()); // Paper - called with mutablepos... + this.entityData.set(Turtle.HOME_POS, pos); } diff --git a/src/main/java/net/minecraft/world/entity/animal/Wolf.java b/src/main/java/net/minecraft/world/entity/animal/Wolf.java -index 3235ed40d502722e888656776ba1a218f198f53e..2267f8da1c27ff54b2ced59ef15eb45357b7075d 100644 +index 81ca20878d552d9b674c638dbd8cdebe9e666ec5..e3c0163a4b00dca01b97c41aa57aa998063ec491 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Wolf.java +++ b/src/main/java/net/minecraft/world/entity/animal/Wolf.java -@@ -151,6 +151,11 @@ public class Wolf extends TamableAnimal implements NeutralMob, VariantHolder getModelRotationValues() { return this.modelRotationValues; diff --git a/src/main/java/net/minecraft/world/entity/animal/camel/Camel.java b/src/main/java/net/minecraft/world/entity/animal/camel/Camel.java -index 07a5599a9370ba167e985006d74caa3c80288e28..ed67fcd2b67bfe581863cc6748692c3348f6c883 100644 +index e0c981cef6992c4a83813c6f77fe11841fe11c1c..260138fcf0191391b68cb9d03cc55e26873bc001 100644 --- a/src/main/java/net/minecraft/world/entity/animal/camel/Camel.java +++ b/src/main/java/net/minecraft/world/entity/animal/camel/Camel.java @@ -89,6 +89,10 @@ public class Camel extends AbstractHorse implements PlayerRideableJumping, Saddl @@ -394,10 +394,10 @@ index b47a72ffb8b947cea5d4bc6ee37b824c4161be31..2990d50fd5209b272e0cfbd5dd633124 protected SoundEvent getAmbientSound() { return SoundEvents.DONKEY_AMBIENT; diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/Horse.java b/src/main/java/net/minecraft/world/entity/animal/horse/Horse.java -index 9ad0d3972d1970b11687da174a83e3a0a4180c0e..16d4278d49dad84f72c968ca36914e93d46dc5f6 100644 +index 273365b9bca6e26760f45a794c1ebef1f9118c43..c4b22c52e335080e744a723622f455c0d8cf73e2 100644 --- a/src/main/java/net/minecraft/world/entity/animal/horse/Horse.java +++ b/src/main/java/net/minecraft/world/entity/animal/horse/Horse.java -@@ -66,6 +66,11 @@ public class Horse extends AbstractHorse implements VariantHolder { +@@ -67,6 +67,11 @@ public class Horse extends AbstractHorse implements VariantHolder { return generateSpeed(this.level().purpurConfig.horseMovementSpeedMin, this.level().purpurConfig.horseMovementSpeedMax); } @@ -410,7 +410,7 @@ index 9ad0d3972d1970b11687da174a83e3a0a4180c0e..16d4278d49dad84f72c968ca36914e93 protected void randomizeAttributes(RandomSource random) { this.getAttribute(Attributes.MAX_HEALTH).setBaseValue((double)generateMaxHealth(random::nextInt)); 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 9ed11bf6420e4ea8ea78cec641a7e37327301ae1..326d94eabe0a469bfebed4517960be0042517249 100644 +index 09c400ce06003139de84e22313354ed6199da761..b8a6ebd8301c4873060505c866dabb4e8772d5b5 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 @@ -141,6 +141,11 @@ public class Llama extends AbstractChestedHorse implements VariantHolder Block.popResource(this.level(), this.blockPosition(), stack))); // CraftBukkit - add to drops // Paper - Restore vanilla drops behavior - return this.brokenByAnything(damageSource); // Paper + return this.brokenByAnything(world, damageSource); // Paper 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 da0d1c9a1c4ae081bff9ca4230c9a1503885c354..9af8fcf6abb9b768829592bc1b091ebe4599ed2e 100644 +index 5b7245cd99593ee90e17c97e0104f3aba9ae05ea..cf78531b193ba56991ccb0c4f62844208e4a5706 100644 --- a/src/main/java/net/minecraft/world/entity/decoration/ItemFrame.java +++ b/src/main/java/net/minecraft/world/entity/decoration/ItemFrame.java -@@ -262,7 +262,13 @@ public class ItemFrame extends HangingEntity { +@@ -227,7 +227,13 @@ public class ItemFrame extends HangingEntity { } if (alwaysDrop) { @@ -37,14 +37,14 @@ index da0d1c9a1c4ae081bff9ca4230c9a1503885c354..9af8fcf6abb9b768829592bc1b091ebe if (!itemstack.isEmpty()) { diff --git a/src/main/java/net/minecraft/world/entity/decoration/Painting.java b/src/main/java/net/minecraft/world/entity/decoration/Painting.java -index 40e7112669abb58a0ab6df1846afec3979e95e55..183464f202d4c2774840edfde1dfcab44d05d0d3 100644 +index e86fdf5d6853b7bddfe19d6e5d41d3dec0c25f23..f45567aa7695da68f92809a6c208eb515c2f838a 100644 --- a/src/main/java/net/minecraft/world/entity/decoration/Painting.java +++ b/src/main/java/net/minecraft/world/entity/decoration/Painting.java -@@ -151,7 +151,13 @@ public class Painting extends HangingEntity implements VariantHolder { +@@ -1017,7 +1017,13 @@ public class Boat extends VehicleEntity implements Leashable, VariantHolder Date: Fri, 14 Jun 2024 15:26:46 -0700 Subject: [PATCH 053/588] 150 patches \o/ --- ...when-using-a-Name-Tag-on-an-Armor-S.patch} | 2 +- ...lowing-Endermen-to-despawn-even-whi.patch} | 10 +- ...98-Add-configurable-snowball-damage.patch} | 4 +- ...9-Changeable-Mob-Left-Handed-Chance.patch} | 14 +- .../0100-Add-boat-fall-damage-config.patch} | 12 +- ...0101-Snow-Golem-rate-of-fire-config.patch} | 6 +- ...-Configurable-disable-give-dropping.patch} | 6 +- ...illager-Clerics-to-farm-Nether-Wart.patch} | 18 +- ...ied-Piglin-death-always-counting-as.patch} | 12 +- ...le-chance-for-wolves-to-spawn-rabid.patch} | 36 +- ...6-Configurable-default-collar-color.patch} | 18 +- .../0107-Phantom-flames-on-swoop.patch} | 8 +- ...-to-open-even-with-a-solid-block-on.patch} | 4 +- .../0109-Implement-TPSBar.patch} | 34 +- .../0110-Striders-give-saddle-back.patch} | 8 +- .../0111-PlayerBookTooLargeEvent.patch} | 10 +- ...herite-armor-grants-fire-resistance.patch} | 8 +- ...efing-bypass-to-everything-affected.patch} | 136 +++--- ...llow-Note-Block-sounds-when-blocked.patch} | 6 +- .../0115-Farmland-trampling-changes.patch} | 4 +- ...6-Movement-options-for-armor-stands.patch} | 12 +- ...ggle-for-water-sensitive-mob-damage.patch} | 432 +++++++++--------- ...8-Config-to-always-tame-in-Creative.patch} | 14 +- .../0119-End-crystal-explosion-options.patch} | 8 +- ...ther-Ender-Dragon-can-ride-vehicles.patch} | 16 +- .../0121-Dont-run-with-scissors.patch} | 31 +- .../0122-One-Punch-Man.patch} | 14 +- ...r-Pearl-cooldown-damage-and-Endermi.patch} | 42 +- ...to-ignore-nearby-mobs-when-sleeping.patch} | 16 +- ...d-back-player-spawned-endermite-API.patch} | 16 +- ...n-aggressiveness-towards-Endermites.patch} | 10 +- ...Dragon-Head-wearers-and-stare-aggro.patch} | 10 +- .../0128-Tick-fluids-config.patch} | 6 +- ...29-Config-to-disable-Llama-caravans.patch} | 10 +- ...g-to-make-Creepers-explode-on-death.patch} | 10 +- ...rable-ravager-griefable-blocks-list.patch} | 10 +- ...132-Sneak-to-bulk-process-composter.patch} | 8 +- .../0133-Config-for-skipping-night.patch} | 14 +- ...134-Add-config-for-villager-trading.patch} | 49 +- .../0135-Drowning-Settings.patch} | 14 +- ...reak-individual-slabs-when-sneaking.patch} | 8 +- ...to-disable-hostile-mob-spawn-on-ice.patch} | 4 +- ...g-to-show-Armor-Stand-arms-on-spawn.patch} | 6 +- ...tion-to-make-doors-require-redstone.patch} | 29 +- ...Config-to-allow-for-unsafe-enchants.patch} | 39 +- ...0141-Configurable-sponge-absorption.patch} | 4 +- .../0142-Projectile-offset-config.patch} | 36 +- 47 files changed, 617 insertions(+), 607 deletions(-) rename patches/{unapplied-server/0101-Set-name-visible-when-using-a-Name-Tag-on-an-Armor-S.patch => server/0096-Set-name-visible-when-using-a-Name-Tag-on-an-Armor-S.patch} (96%) rename patches/{unapplied-server/0102-Add-config-for-allowing-Endermen-to-despawn-even-whi.patch => server/0097-Add-config-for-allowing-Endermen-to-despawn-even-whi.patch} (85%) rename patches/{unapplied-server/0103-Add-configurable-snowball-damage.patch => server/0098-Add-configurable-snowball-damage.patch} (92%) rename patches/{unapplied-server/0104-Changeable-Mob-Left-Handed-Chance.patch => server/0099-Changeable-Mob-Left-Handed-Chance.patch} (64%) rename patches/{unapplied-server/0105-Add-boat-fall-damage-config.patch => server/0100-Add-boat-fall-damage-config.patch} (83%) rename patches/{unapplied-server/0106-Snow-Golem-rate-of-fire-config.patch => server/0101-Snow-Golem-rate-of-fire-config.patch} (94%) rename patches/{unapplied-server/0107-EMC-Configurable-disable-give-dropping.patch => server/0102-EMC-Configurable-disable-give-dropping.patch} (89%) rename patches/{unapplied-server/0108-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch => server/0103-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch} (95%) rename patches/{unapplied-server/0109-Toggle-for-Zombified-Piglin-death-always-counting-as.patch => server/0104-Toggle-for-Zombified-Piglin-death-always-counting-as.patch} (87%) rename patches/{unapplied-server/0110-Configurable-chance-for-wolves-to-spawn-rabid.patch => server/0105-Configurable-chance-for-wolves-to-spawn-rabid.patch} (88%) rename patches/{unapplied-server/0111-Configurable-default-collar-color.patch => server/0106-Configurable-default-collar-color.patch} (86%) rename patches/{unapplied-server/0112-Phantom-flames-on-swoop.patch => server/0107-Phantom-flames-on-swoop.patch} (86%) rename patches/{unapplied-server/0113-Option-for-chests-to-open-even-with-a-solid-block-on.patch => server/0108-Option-for-chests-to-open-even-with-a-solid-block-on.patch} (91%) rename patches/{unapplied-server/0114-Implement-TPSBar.patch => server/0109-Implement-TPSBar.patch} (93%) rename patches/{unapplied-server/0115-Striders-give-saddle-back.patch => server/0110-Striders-give-saddle-back.patch} (89%) rename patches/{unapplied-server/0116-PlayerBookTooLargeEvent.patch => server/0111-PlayerBookTooLargeEvent.patch} (81%) rename patches/{unapplied-server/0117-Full-netherite-armor-grants-fire-resistance.patch => server/0112-Full-netherite-armor-grants-fire-resistance.patch} (91%) rename patches/{unapplied-server/0118-Add-mobGriefing-bypass-to-everything-affected.patch => server/0113-Add-mobGriefing-bypass-to-everything-affected.patch} (89%) rename patches/{unapplied-server/0119-Config-to-allow-Note-Block-sounds-when-blocked.patch => server/0114-Config-to-allow-Note-Block-sounds-when-blocked.patch} (94%) rename patches/{unapplied-server/0121-Farmland-trampling-changes.patch => server/0115-Farmland-trampling-changes.patch} (95%) rename patches/{unapplied-server/0122-Movement-options-for-armor-stands.patch => server/0116-Movement-options-for-armor-stands.patch} (90%) rename patches/{unapplied-server/0124-Toggle-for-water-sensitive-mob-damage.patch => server/0117-Toggle-for-water-sensitive-mob-damage.patch} (88%) rename patches/{unapplied-server/0125-Config-to-always-tame-in-Creative.patch => server/0118-Config-to-always-tame-in-Creative.patch} (90%) rename patches/{unapplied-server/0126-End-crystal-explosion-options.patch => server/0119-End-crystal-explosion-options.patch} (95%) rename patches/{unapplied-server/0127-Configs-for-if-Wither-Ender-Dragon-can-ride-vehicles.patch => server/0120-Configs-for-if-Wither-Ender-Dragon-can-ride-vehicles.patch} (86%) rename patches/{unapplied-server/0128-Dont-run-with-scissors.patch => server/0121-Dont-run-with-scissors.patch} (90%) rename patches/{unapplied-server/0129-One-Punch-Man.patch => server/0122-One-Punch-Man.patch} (84%) rename patches/{unapplied-server/0130-Configurable-Ender-Pearl-cooldown-damage-and-Endermi.patch => server/0123-Configurable-Ender-Pearl-cooldown-damage-and-Endermi.patch} (64%) rename patches/{unapplied-server/0131-Config-to-ignore-nearby-mobs-when-sleeping.patch => server/0124-Config-to-ignore-nearby-mobs-when-sleeping.patch} (72%) rename patches/{unapplied-server/0132-Add-back-player-spawned-endermite-API.patch => server/0125-Add-back-player-spawned-endermite-API.patch} (80%) rename patches/{unapplied-server/0133-Config-Enderman-aggressiveness-towards-Endermites.patch => server/0126-Config-Enderman-aggressiveness-towards-Endermites.patch} (90%) rename patches/{unapplied-server/0134-Config-to-ignore-Dragon-Head-wearers-and-stare-aggro.patch => server/0127-Config-to-ignore-Dragon-Head-wearers-and-stare-aggro.patch} (88%) rename patches/{unapplied-server/0135-Tick-fluids-config.patch => server/0128-Tick-fluids-config.patch} (94%) rename patches/{unapplied-server/0136-Config-to-disable-Llama-caravans.patch => server/0129-Config-to-disable-Llama-caravans.patch} (90%) rename patches/{unapplied-server/0137-Config-to-make-Creepers-explode-on-death.patch => server/0130-Config-to-make-Creepers-explode-on-death.patch} (89%) rename patches/{unapplied-server/0138-Configurable-ravager-griefable-blocks-list.patch => server/0131-Configurable-ravager-griefable-blocks-list.patch} (92%) rename patches/{unapplied-server/0139-Sneak-to-bulk-process-composter.patch => server/0132-Sneak-to-bulk-process-composter.patch} (94%) rename patches/{unapplied-server/0140-Config-for-skipping-night.patch => server/0133-Config-for-skipping-night.patch} (78%) rename patches/{unapplied-server/0141-Add-config-for-villager-trading.patch => server/0134-Add-config-for-villager-trading.patch} (70%) rename patches/{unapplied-server/0143-Drowning-Settings.patch => server/0135-Drowning-Settings.patch} (84%) rename patches/{unapplied-server/0144-Break-individual-slabs-when-sneaking.patch => server/0136-Break-individual-slabs-when-sneaking.patch} (91%) rename patches/{unapplied-server/0145-Config-to-disable-hostile-mob-spawn-on-ice.patch => server/0137-Config-to-disable-hostile-mob-spawn-on-ice.patch} (94%) rename patches/{unapplied-server/0146-Config-to-show-Armor-Stand-arms-on-spawn.patch => server/0138-Config-to-show-Armor-Stand-arms-on-spawn.patch} (90%) rename patches/{unapplied-server/0147-Option-to-make-doors-require-redstone.patch => server/0139-Option-to-make-doors-require-redstone.patch} (72%) rename patches/{unapplied-server/0148-Config-to-allow-for-unsafe-enchants.patch => server/0140-Config-to-allow-for-unsafe-enchants.patch} (83%) rename patches/{unapplied-server/0149-Configurable-sponge-absorption.patch => server/0141-Configurable-sponge-absorption.patch} (93%) rename patches/{unapplied-server/0150-Projectile-offset-config.patch => server/0142-Projectile-offset-config.patch} (83%) diff --git a/patches/unapplied-server/0101-Set-name-visible-when-using-a-Name-Tag-on-an-Armor-S.patch b/patches/server/0096-Set-name-visible-when-using-a-Name-Tag-on-an-Armor-S.patch similarity index 96% rename from patches/unapplied-server/0101-Set-name-visible-when-using-a-Name-Tag-on-an-Armor-S.patch rename to patches/server/0096-Set-name-visible-when-using-a-Name-Tag-on-an-Armor-S.patch index 3fc1704f3..2f7f5e035 100644 --- a/patches/unapplied-server/0101-Set-name-visible-when-using-a-Name-Tag-on-an-Armor-S.patch +++ b/patches/server/0096-Set-name-visible-when-using-a-Name-Tag-on-an-Armor-S.patch @@ -17,7 +17,7 @@ index 774c982f28b4f127fc3f036c19dfb47fb9ae3264..d49b60e7e643498b49c03593dc0da2f8 // Paper end - Add PlayerNameEntityEvent mob.setPersistenceRequired(); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 8a0eb8281364cd0b140381474a46d02a6c4ad3ba..5b1c6815967d5006fbc466e3368398cc4d1f0c18 100644 +index 28e074e5d966d02c07bf9151d2452eff63871ac7..50a21def146bf009f9275335f7b8640b8182441b 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/unapplied-server/0102-Add-config-for-allowing-Endermen-to-despawn-even-whi.patch b/patches/server/0097-Add-config-for-allowing-Endermen-to-despawn-even-whi.patch similarity index 85% rename from patches/unapplied-server/0102-Add-config-for-allowing-Endermen-to-despawn-even-whi.patch rename to patches/server/0097-Add-config-for-allowing-Endermen-to-despawn-even-whi.patch index 9d94d0c70..d640bbf34 100644 --- a/patches/unapplied-server/0102-Add-config-for-allowing-Endermen-to-despawn-even-whi.patch +++ b/patches/server/0097-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 cb307a9419399e33a895376a584456f084691965..052a0c168268b7e788953063f54c3769023f3c03 100644 +index 8604db61d2c8042d0399262cb60b98457e4f894c..ada2403856aeb7cb50c0b00fb1dad18b93ecd52c 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java +++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java -@@ -478,7 +478,7 @@ public class EnderMan extends Monster implements NeutralMob { +@@ -480,7 +480,7 @@ public class EnderMan extends Monster implements NeutralMob { @Override public boolean requiresCustomPersistence() { @@ -21,10 +21,10 @@ index cb307a9419399e33a895376a584456f084691965..052a0c168268b7e788953063f54c3769 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 49d105df72c8f67fe48c39f03d840ccaa90b7c73..7c7b1cba2d50b1a4eda66ee4cde9137f01735e63 100644 +index 50a21def146bf009f9275335f7b8640b8182441b..f53b06363f2a7b3977bb8e99297468bb06e5be31 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -858,6 +858,7 @@ public class PurpurWorldConfig { +@@ -845,6 +845,7 @@ public class PurpurWorldConfig { public boolean endermanControllable = true; public double endermanMaxHealth = 40.0D; public boolean endermanAllowGriefing = true; @@ -32,7 +32,7 @@ index 49d105df72c8f67fe48c39f03d840ccaa90b7c73..7c7b1cba2d50b1a4eda66ee4cde9137f private void endermanSettings() { endermanRidable = getBoolean("mobs.enderman.ridable", endermanRidable); endermanRidableInWater = getBoolean("mobs.enderman.ridable-in-water", endermanRidableInWater); -@@ -869,6 +870,7 @@ public class PurpurWorldConfig { +@@ -856,6 +857,7 @@ public class PurpurWorldConfig { } endermanMaxHealth = getDouble("mobs.enderman.attributes.max_health", endermanMaxHealth); endermanAllowGriefing = getBoolean("mobs.enderman.allow-griefing", endermanAllowGriefing); diff --git a/patches/unapplied-server/0103-Add-configurable-snowball-damage.patch b/patches/server/0098-Add-configurable-snowball-damage.patch similarity index 92% rename from patches/unapplied-server/0103-Add-configurable-snowball-damage.patch rename to patches/server/0098-Add-configurable-snowball-damage.patch index 226d4c521..50134ac81 100644 --- a/patches/unapplied-server/0103-Add-configurable-snowball-damage.patch +++ b/patches/server/0098-Add-configurable-snowball-damage.patch @@ -18,10 +18,10 @@ index 2b4d206c0d31ba38d7b2af654bd420e85145d441..f59a2903bfb8ae591a638ea5bb387caa entity.hurt(this.damageSources().thrown(this, this.getOwner()), (float) i); } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 2afd56fd352f7a0bd2028a2b9b238f3d1d8fe14a..f87abb5d0572b8d51c91dd90638e7a728c49a69a 100644 +index f53b06363f2a7b3977bb8e99297468bb06e5be31..d0105b3673c0ef1e04b565e80f4f661463fbc75c 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -383,6 +383,11 @@ public class PurpurWorldConfig { +@@ -370,6 +370,11 @@ public class PurpurWorldConfig { //} } diff --git a/patches/unapplied-server/0104-Changeable-Mob-Left-Handed-Chance.patch b/patches/server/0099-Changeable-Mob-Left-Handed-Chance.patch similarity index 64% rename from patches/unapplied-server/0104-Changeable-Mob-Left-Handed-Chance.patch rename to patches/server/0099-Changeable-Mob-Left-Handed-Chance.patch index f71b027f0..e30b6cedf 100644 --- a/patches/unapplied-server/0104-Changeable-Mob-Left-Handed-Chance.patch +++ b/patches/server/0099-Changeable-Mob-Left-Handed-Chance.patch @@ -5,23 +5,23 @@ 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 6415bc82e44629a08a2ec881acaa5d993e48bb9d..24755576d2c0e59fe5ed2d6019dfe33a5d6a64f9 100644 +index 94508891d9ea3806c66b020fec4c97297dd558d8..d92d19bdb2c49be1303065583d59f37419b0fd22 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java -@@ -1437,7 +1437,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Targeti - RandomSource randomsource = world.getRandom(); +@@ -1426,7 +1426,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab + attributemodifiable.addPermanentModifier(new AttributeModifier(Mob.RANDOM_SPAWN_BONUS_ID, randomsource.triangle(0.0D, 0.11485000000000001D), AttributeModifier.Operation.ADD_MULTIPLIED_BASE)); + } - this.getAttribute(Attributes.FOLLOW_RANGE).addPermanentModifier(new AttributeModifier("Random spawn bonus", randomsource.triangle(0.0D, 0.11485000000000001D), AttributeModifier.Operation.ADD_MULTIPLIED_BASE)); - this.setLeftHanded(randomsource.nextFloat() < 0.05F); + this.setLeftHanded(randomsource.nextFloat() < world.getLevel().purpurConfig.entityLeftHandedChance); // Purpur return entityData; } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 3f3584399f56fd475f1a0baa1e29ecfd188fa469..aba8165029d6b614072f511f45bb16c35988fbfd 100644 +index d0105b3673c0ef1e04b565e80f4f661463fbc75c..8eb20e10b14b8798aed433a5b1a208add61573d7 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 { +@@ -154,8 +154,10 @@ public class PurpurWorldConfig { } public int entityLifeSpan = 0; @@ -31,4 +31,4 @@ index 3f3584399f56fd475f1a0baa1e29ecfd188fa469..aba8165029d6b614072f511f45bb16c3 + entityLeftHandedChance = (float) getDouble("gameplay-mechanics.entity-left-handed-chance", entityLeftHandedChance); } - public boolean infinityWorksWithoutArrows = false; + public List itemImmuneToCactus = new ArrayList<>(); diff --git a/patches/unapplied-server/0105-Add-boat-fall-damage-config.patch b/patches/server/0100-Add-boat-fall-damage-config.patch similarity index 83% rename from patches/unapplied-server/0105-Add-boat-fall-damage-config.patch rename to patches/server/0100-Add-boat-fall-damage-config.patch index 363d4b351..69bc81900 100644 --- a/patches/unapplied-server/0105-Add-boat-fall-damage-config.patch +++ b/patches/server/0100-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 a11dd0a2f302f1ff64c3ca92d55d6a8ef28398b7..6aeb9f330380b0adc3f45433a462799675d5380c 100644 +index ec77e834d5f21c64aaf5ac8425fb1b42859b22e8..d45990c793cd11a1e443af59738d47a21877f417 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -1190,7 +1190,16 @@ public class ServerPlayer extends Player { +@@ -1146,7 +1146,16 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player { if (this.isInvulnerableTo(source)) { return false; } else { @@ -27,7 +27,7 @@ index a11dd0a2f302f1ff64c3ca92d55d6a8ef28398b7..6aeb9f330380b0adc3f45433a4627996 if (!flag && this.spawnInvulnerableTime > 0 && !source.is(DamageTypeTags.BYPASSES_INVULNERABILITY)) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index aba8165029d6b614072f511f45bb16c35988fbfd..8ef18139d06e34a885f284fc1954236349a2f1ba 100644 +index 8eb20e10b14b8798aed433a5b1a208add61573d7..28016e60278abafb6fc4cc2535eb63c5dbafd28b 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -112,6 +112,7 @@ public class PurpurWorldConfig { @@ -36,13 +36,13 @@ index aba8165029d6b614072f511f45bb16c35988fbfd..8ef18139d06e34a885f284fc19542363 public boolean boatEjectPlayersOnLand = false; + public boolean boatsDoFallDamage = false; public boolean disableDropsOnCrammingDeath = false; - public boolean entitiesCanUsePortals = true; public boolean milkCuresBadOmen = true; -@@ -124,6 +125,7 @@ public class PurpurWorldConfig { + public boolean persistentDroppableEntityDisplayNames = true; +@@ -123,6 +124,7 @@ public class PurpurWorldConfig { private void miscGameplayMechanicsSettings() { useBetterMending = getBoolean("gameplay-mechanics.use-better-mending", useBetterMending); boatEjectPlayersOnLand = getBoolean("gameplay-mechanics.boat.eject-players-on-land", boatEjectPlayersOnLand); + boatsDoFallDamage = getBoolean("gameplay-mechanics.boat.do-fall-damage", boatsDoFallDamage); disableDropsOnCrammingDeath = getBoolean("gameplay-mechanics.disable-drops-on-cramming-death", disableDropsOnCrammingDeath); - entitiesCanUsePortals = getBoolean("gameplay-mechanics.entities-can-use-portals", entitiesCanUsePortals); milkCuresBadOmen = getBoolean("gameplay-mechanics.milk-cures-bad-omen", milkCuresBadOmen); + persistentDroppableEntityDisplayNames = getBoolean("gameplay-mechanics.persistent-droppable-entity-display-names", persistentDroppableEntityDisplayNames); diff --git a/patches/unapplied-server/0106-Snow-Golem-rate-of-fire-config.patch b/patches/server/0101-Snow-Golem-rate-of-fire-config.patch similarity index 94% rename from patches/unapplied-server/0106-Snow-Golem-rate-of-fire-config.patch rename to patches/server/0101-Snow-Golem-rate-of-fire-config.patch index a53dcd9c1..6227602d8 100644 --- a/patches/unapplied-server/0106-Snow-Golem-rate-of-fire-config.patch +++ b/patches/server/0101-Snow-Golem-rate-of-fire-config.patch @@ -23,10 +23,10 @@ index 0060414b1d5afde56372ce121e9d37a1668cd03b..ee4d4a4fe314ee9bce69c96dd65d84ed this.goalSelector.addGoal(3, new LookAtPlayerGoal(this, Player.class, 6.0F)); this.goalSelector.addGoal(4, new RandomLookAroundGoal(this)); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 62a56a447e1a5c97e0f1bf6d0901d4ad1e4e6ef7..a51830db95db7256ddefa9da89f39471f2d169ec 100644 +index 28016e60278abafb6fc4cc2535eb63c5dbafd28b..ed3e51879d558e65553d1ea2d6d135499baab318 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1631,6 +1631,10 @@ public class PurpurWorldConfig { +@@ -1618,6 +1618,10 @@ public class PurpurWorldConfig { public boolean snowGolemLeaveTrailWhenRidden = false; public double snowGolemMaxHealth = 4.0D; public boolean snowGolemPutPumpkinBack = false; @@ -37,7 +37,7 @@ index 62a56a447e1a5c97e0f1bf6d0901d4ad1e4e6ef7..a51830db95db7256ddefa9da89f39471 private void snowGolemSettings() { snowGolemRidable = getBoolean("mobs.snow_golem.ridable", snowGolemRidable); snowGolemRidableInWater = getBoolean("mobs.snow_golem.ridable-in-water", snowGolemRidableInWater); -@@ -1643,6 +1647,10 @@ public class PurpurWorldConfig { +@@ -1630,6 +1634,10 @@ public class PurpurWorldConfig { } snowGolemMaxHealth = getDouble("mobs.snow_golem.attributes.max_health", snowGolemMaxHealth); snowGolemPutPumpkinBack = getBoolean("mobs.snow_golem.pumpkin-can-be-added-back", snowGolemPutPumpkinBack); diff --git a/patches/unapplied-server/0107-EMC-Configurable-disable-give-dropping.patch b/patches/server/0102-EMC-Configurable-disable-give-dropping.patch similarity index 89% rename from patches/unapplied-server/0107-EMC-Configurable-disable-give-dropping.patch rename to patches/server/0102-EMC-Configurable-disable-give-dropping.patch index 30a396354..7b76066dc 100644 --- a/patches/unapplied-server/0107-EMC-Configurable-disable-give-dropping.patch +++ b/patches/server/0102-EMC-Configurable-disable-give-dropping.patch @@ -8,10 +8,10 @@ purpur.yml to disable the /give command from dropping items on the floor when a player's inventory is full. diff --git a/src/main/java/net/minecraft/server/commands/GiveCommand.java b/src/main/java/net/minecraft/server/commands/GiveCommand.java -index 47355158e5e762540a10dc67b23092a0fc53bce3..9f1c8a62bda242781a0966fa2fc01534261423c7 100644 +index 0d9de4c61c7b26a6ff37c12fde629161fd0c3d5a..2f7897744f4aea718170698881773e9031a58a51 100644 --- a/src/main/java/net/minecraft/server/commands/GiveCommand.java +++ b/src/main/java/net/minecraft/server/commands/GiveCommand.java -@@ -92,6 +92,7 @@ public class GiveCommand { +@@ -60,6 +60,7 @@ public class GiveCommand { boolean flag = entityplayer.getInventory().add(itemstack1); ItemEntity entityitem; @@ -20,7 +20,7 @@ index 47355158e5e762540a10dc67b23092a0fc53bce3..9f1c8a62bda242781a0966fa2fc01534 entityitem = entityplayer.drop(itemstack, false, false, false); // CraftBukkit - SPIGOT-2942: Add boolean to call event if (entityitem != null) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index 6d621a93aaf94927fa6c73e649dcdb8bbbaadd2a..4d747759e2bfaebb02a875ff46159d0ae16acad6 100644 +index b1dec36f0446773b066a4f08cc4045c312f64259..70b9981d739881190cb45bd64369651358bf3447 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java @@ -209,6 +209,11 @@ public class PurpurConfig { diff --git a/patches/unapplied-server/0108-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch b/patches/server/0103-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch similarity index 95% rename from patches/unapplied-server/0108-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch rename to patches/server/0103-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch index e0bd732aa..795daf05e 100644 --- a/patches/unapplied-server/0108-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch +++ b/patches/server/0103-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch @@ -136,10 +136,10 @@ index a0e0692d17760f440fe81d52887284c787e562db..ab9bebc07b5228dbc0d3ba4b0f7d1bbe brain.setMemory(MemoryModuleType.SECONDARY_JOB_SITE, list); } else { diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java -index 6de74d992bd8b2845ab98d56201e7eeabd1dfc6b..f7d8f672a680cf2dfebba5677f97895e4a8c209f 100644 +index f07379734f7c131e1ad3e22062f2deac4a0a342e..ba2e1ea184bf31efdf30050fdcc3a5f193d2f096 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java -@@ -223,7 +223,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -218,7 +218,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 6de74d992bd8b2845ab98d56201e7eeabd1dfc6b..f7d8f672a680cf2dfebba5677f97895e } brain.addActivity(Activity.CORE, VillagerGoalPackages.getCorePackage(villagerprofession, 0.5F)); -@@ -970,6 +970,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -949,6 +949,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler public boolean hasFarmSeeds() { return this.getInventory().hasAnyMatching((itemstack) -> { @@ -161,7 +161,7 @@ index 6de74d992bd8b2845ab98d56201e7eeabd1dfc6b..f7d8f672a680cf2dfebba5677f97895e }); } diff --git a/src/main/java/net/minecraft/world/entity/npc/VillagerProfession.java b/src/main/java/net/minecraft/world/entity/npc/VillagerProfession.java -index 1316f4475802e17039800cc6128e1b065328beb7..d02e2d1aceac651e06a3a3698b7ac64dd30d4b12 100644 +index 8734ab1bd8299bbf43906d81a349c2a13e0981a7..3ca83269311cbc18c9ef3ce62cff6a2d4dc0a683 100644 --- a/src/main/java/net/minecraft/world/entity/npc/VillagerProfession.java +++ b/src/main/java/net/minecraft/world/entity/npc/VillagerProfession.java @@ -31,7 +31,7 @@ public record VillagerProfession( @@ -174,11 +174,11 @@ index 1316f4475802e17039800cc6128e1b065328beb7..d02e2d1aceac651e06a3a3698b7ac64d "farmer", PoiTypes.FARMER, diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index a51830db95db7256ddefa9da89f39471f2d169ec..13cb926fa98b187a0a36beb164179f0085fd8369 100644 +index ed3e51879d558e65553d1ea2d6d135499baab318..bbb9e5a420b327da9546f07592bc6e47eb365d5d 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1833,6 +1833,8 @@ public class PurpurWorldConfig { - public boolean villagerCanBeLeashed = false; +@@ -1819,6 +1819,8 @@ public class PurpurWorldConfig { + public boolean villagerFollowEmeraldBlock = false; public boolean villagerCanBreed = true; public int villagerBreedingTicks = 6000; + public boolean villagerClericsFarmWarts = false; @@ -186,8 +186,8 @@ index a51830db95db7256ddefa9da89f39471f2d169ec..13cb926fa98b187a0a36beb164179f00 private void villagerSettings() { villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); -@@ -1847,6 +1849,8 @@ public class PurpurWorldConfig { - villagerCanBeLeashed = getBoolean("mobs.villager.can-be-leashed", villagerCanBeLeashed); +@@ -1832,6 +1834,8 @@ public class PurpurWorldConfig { + villagerFollowEmeraldBlock = getBoolean("mobs.villager.follow-emerald-blocks", villagerFollowEmeraldBlock); villagerCanBreed = getBoolean("mobs.villager.can-breed", villagerCanBreed); villagerBreedingTicks = getInt("mobs.villager.breeding-delay-ticks", villagerBreedingTicks); + villagerClericsFarmWarts = getBoolean("mobs.villager.clerics-farm-warts", villagerClericsFarmWarts); diff --git a/patches/unapplied-server/0109-Toggle-for-Zombified-Piglin-death-always-counting-as.patch b/patches/server/0104-Toggle-for-Zombified-Piglin-death-always-counting-as.patch similarity index 87% rename from patches/unapplied-server/0109-Toggle-for-Zombified-Piglin-death-always-counting-as.patch rename to patches/server/0104-Toggle-for-Zombified-Piglin-death-always-counting-as.patch index b03480d03..d26218e35 100644 --- a/patches/unapplied-server/0109-Toggle-for-Zombified-Piglin-death-always-counting-as.patch +++ b/patches/server/0104-Toggle-for-Zombified-Piglin-death-always-counting-as.patch @@ -13,10 +13,10 @@ to the Piglin being angry, even though the player never hit them. This patch adds a toggle to disable this behavior. diff --git a/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java b/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java -index 75c34d9fcc4b33d30b18f1ce4c8749a068744abc..6be751e2d434982a35bbbece4f4fc4631fb3d8e0 100644 +index 0dcf5638e12c7670e6a5e577210e2542de1fd38b..47419219d4f435a17344361f4a60d5aab925d574 100644 --- a/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java +++ b/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java -@@ -146,7 +146,7 @@ public class ZombifiedPiglin extends Zombie implements NeutralMob { +@@ -147,7 +147,7 @@ public class ZombifiedPiglin extends Zombie implements NeutralMob { this.maybeAlertOthers(); } @@ -25,7 +25,7 @@ index 75c34d9fcc4b33d30b18f1ce4c8749a068744abc..6be751e2d434982a35bbbece4f4fc463 this.lastHurtByPlayerTime = this.tickCount; } -@@ -201,7 +201,7 @@ public class ZombifiedPiglin extends Zombie implements NeutralMob { +@@ -202,7 +202,7 @@ public class ZombifiedPiglin extends Zombie implements NeutralMob { this.ticksUntilNextAlert = ZombifiedPiglin.ALERT_INTERVAL.sample(this.random); } @@ -35,10 +35,10 @@ index 75c34d9fcc4b33d30b18f1ce4c8749a068744abc..6be751e2d434982a35bbbece4f4fc463 } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 13cb926fa98b187a0a36beb164179f0085fd8369..43e02a35c742aced64c0b9700da9a71c15532478 100644 +index bbb9e5a420b327da9546f07592bc6e47eb365d5d..a86332fceebc02466f194e038dd473c7a7b621cd 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2079,6 +2079,7 @@ public class PurpurWorldConfig { +@@ -2062,6 +2062,7 @@ public class PurpurWorldConfig { public boolean zombifiedPiglinJockeyOnlyBaby = true; public double zombifiedPiglinJockeyChance = 0.05D; public boolean zombifiedPiglinJockeyTryExistingChickens = true; @@ -46,7 +46,7 @@ index 13cb926fa98b187a0a36beb164179f0085fd8369..43e02a35c742aced64c0b9700da9a71c private void zombifiedPiglinSettings() { zombifiedPiglinRidable = getBoolean("mobs.zombified_piglin.ridable", zombifiedPiglinRidable); zombifiedPiglinRidableInWater = getBoolean("mobs.zombified_piglin.ridable-in-water", zombifiedPiglinRidableInWater); -@@ -2093,5 +2094,6 @@ public class PurpurWorldConfig { +@@ -2076,5 +2077,6 @@ public class PurpurWorldConfig { zombifiedPiglinJockeyOnlyBaby = getBoolean("mobs.zombified_piglin.jockey.only-babies", zombifiedPiglinJockeyOnlyBaby); zombifiedPiglinJockeyChance = getDouble("mobs.zombified_piglin.jockey.chance", zombifiedPiglinJockeyChance); zombifiedPiglinJockeyTryExistingChickens = getBoolean("mobs.zombified_piglin.jockey.try-existing-chickens", zombifiedPiglinJockeyTryExistingChickens); diff --git a/patches/unapplied-server/0110-Configurable-chance-for-wolves-to-spawn-rabid.patch b/patches/server/0105-Configurable-chance-for-wolves-to-spawn-rabid.patch similarity index 88% rename from patches/unapplied-server/0110-Configurable-chance-for-wolves-to-spawn-rabid.patch rename to patches/server/0105-Configurable-chance-for-wolves-to-spawn-rabid.patch index a69fc887b..032f64dc1 100644 --- a/patches/unapplied-server/0110-Configurable-chance-for-wolves-to-spawn-rabid.patch +++ b/patches/server/0105-Configurable-chance-for-wolves-to-spawn-rabid.patch @@ -7,10 +7,10 @@ Configurable chance to spawn a wolf that is rabid. Rabid wolves attack all players, mobs, and animals. diff --git a/src/main/java/net/minecraft/world/entity/animal/Wolf.java b/src/main/java/net/minecraft/world/entity/animal/Wolf.java -index 2267f8da1c27ff54b2ced59ef15eb45357b7075d..073014d44a3ccfca9bb5a387843e22917de13bb4 100644 +index e3c0163a4b00dca01b97c41aa57aa998063ec491..04d7e4bc6cc1deda5f53f6ae5f46d2402e0d0c10 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Wolf.java +++ b/src/main/java/net/minecraft/world/entity/animal/Wolf.java -@@ -104,6 +104,37 @@ public class Wolf extends TamableAnimal implements NeutralMob, VariantHolder(this, Llama.class, 24.0F, 1.5D, 1.5D)); + this.goalSelector.addGoal(3, new AvoidRabidWolfGoal(this, 24.0F, 1.5D, 1.5D)); // Purpur this.goalSelector.addGoal(4, new LeapAtTargetGoal(this, 0.4F)); this.goalSelector.addGoal(5, new MeleeAttackGoal(this, 1.0D, true)); - this.goalSelector.addGoal(6, new FollowOwnerGoal(this, 1.0D, 10.0F, 2.0F, false)); -@@ -176,7 +232,7 @@ public class Wolf extends TamableAnimal implements NeutralMob, VariantHolder(this, Player.class, 10, true, false, this::isAngryAt)); @@ -96,15 +96,15 @@ index 2267f8da1c27ff54b2ced59ef15eb45357b7075d..073014d44a3ccfca9bb5a387843e2291 this.targetSelector.addGoal(6, new NonTameRandomTargetGoal<>(this, Turtle.class, false, Turtle.BABY_ON_LAND_SELECTOR)); this.targetSelector.addGoal(7, new NearestAttackableTargetGoal<>(this, AbstractSkeleton.class, false)); this.targetSelector.addGoal(8, new ResetUniversalAngerTargetGoal<>(this, true)); -@@ -219,6 +275,7 @@ public class Wolf extends TamableAnimal implements NeutralMob, VariantHolder { + nbt.putString("variant", resourcekey.location().toString()); + }); +@@ -244,6 +301,10 @@ public class Wolf extends TamableAnimal implements NeutralMob, VariantHolder viewDistances = new java.util.concurrent.atomic.AtomicReference<>(new io.papermc.paper.chunk.system.RegionizedPlayerChunkLoader.ViewDistances(-1, -1, -1)); -@@ -610,6 +611,7 @@ public class ServerPlayer extends Player { + public ServerPlayer(MinecraftServer server, ServerLevel world, GameProfile profile, ClientInformation clientOptions) { + super(world, world.getSharedSpawnPos(), world.getSharedSpawnAngle(), profile); +@@ -566,6 +567,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player { }); } @@ -60,7 +60,7 @@ index 6aeb9f330380b0adc3f45433a462799675d5380c..ea2b179be7fe04bb690d7ff01dca0cc2 } @Override -@@ -686,6 +688,7 @@ public class ServerPlayer extends Player { +@@ -642,6 +644,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player { }); } @@ -68,7 +68,7 @@ index 6aeb9f330380b0adc3f45433a462799675d5380c..ea2b179be7fe04bb690d7ff01dca0cc2 } // CraftBukkit start - World fallback code, either respawn location or global spawn -@@ -2993,5 +2996,13 @@ public class ServerPlayer extends Player { +@@ -3022,5 +3025,13 @@ public class ServerPlayer extends net.minecraft.world.entity.player.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 6aeb9f330380b0adc3f45433a462799675d5380c..ea2b179be7fe04bb690d7ff01dca0cc2 // 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 338808ba1138f62d89f3f1338a4c5068426df0e4..f2a7eba2618ea9c1acaf93c0ef8f6f5f737de6fe 100644 +index 09595bbd536fc84d309163923317a860f606ea7c..b6289dbad3d2a840dfef9505127a343f032f1da5 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -486,6 +486,7 @@ public abstract class PlayerList { +@@ -480,6 +480,7 @@ public abstract class PlayerList { scoreboard.addPlayerToTeam(player.getScoreboardName(), collideRuleTeam); } // Paper end - Configurable player collision @@ -94,7 +94,7 @@ index 338808ba1138f62d89f3f1338a4c5068426df0e4..f2a7eba2618ea9c1acaf93c0ef8f6f5f PlayerList.LOGGER.info("{}[{}] logged in with entity id {} at ([{}]{}, {}, {})", player.getName().getString(), s1, player.getId(), worldserver1.serverLevelData.getLevelName(), player.getX(), player.getY(), player.getZ()); } -@@ -597,6 +598,7 @@ public abstract class PlayerList { +@@ -590,6 +591,7 @@ public abstract class PlayerList { } public net.kyori.adventure.text.Component remove(ServerPlayer entityplayer, net.kyori.adventure.text.Component leaveMessage) { // Paper end - Fix kick event leave message not being sent @@ -103,7 +103,7 @@ index 338808ba1138f62d89f3f1338a4c5068426df0e4..f2a7eba2618ea9c1acaf93c0ef8f6f5f entityplayer.awardStat(Stats.LEAVE_GAME); diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index d493d6a4b613c6881c5be231fcf751048c2fe3a2..fb8fb45d87ffe23e005bd9bc2d3cebc92b9ff478 100644 +index 70b9981d739881190cb45bd64369651358bf3447..4e5e04915f912d873eb5c86037e6b78c82c2ca53 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java @@ -182,6 +182,7 @@ public class PurpurConfig { diff --git a/patches/unapplied-server/0115-Striders-give-saddle-back.patch b/patches/server/0110-Striders-give-saddle-back.patch similarity index 89% rename from patches/unapplied-server/0115-Striders-give-saddle-back.patch rename to patches/server/0110-Striders-give-saddle-back.patch index 39c224be1..57357ee01 100644 --- a/patches/unapplied-server/0115-Striders-give-saddle-back.patch +++ b/patches/server/0110-Striders-give-saddle-back.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Striders give saddle back diff --git a/src/main/java/net/minecraft/world/entity/monster/Strider.java b/src/main/java/net/minecraft/world/entity/monster/Strider.java -index 5f1166ccd64509a70323e2713f3ab58674d83105..741eedcd9e0e29b57d2b3caf5aef1aef18ae5118 100644 +index 0a297368678cafb92eb0374d1d410271c0d10033..13d40773ff8272ca081e852d4ae3dc09f6fa0ffc 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Strider.java +++ b/src/main/java/net/minecraft/world/entity/monster/Strider.java @@ -484,6 +484,19 @@ public class Strider extends Animal implements ItemSteerable, Saddleable { @@ -29,10 +29,10 @@ index 5f1166ccd64509a70323e2713f3ab58674d83105..741eedcd9e0e29b57d2b3caf5aef1aef if (!this.level().isClientSide) { player.startRiding(this); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index bcb0780b0f1aa5063a1481031e5fcf8cf3fa4884..91630e23b9568418e74a59958bb8f1728095e6fd 100644 +index cb5dd760a689107dbde6ef884577c233f88c3e9a..0df12cd3ace5077e4a916a79af180316df0ad4c3 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1736,6 +1736,7 @@ public class PurpurWorldConfig { +@@ -1723,6 +1723,7 @@ public class PurpurWorldConfig { public boolean striderControllable = true; public double striderMaxHealth = 20.0D; public int striderBreedingTicks = 6000; @@ -40,7 +40,7 @@ index bcb0780b0f1aa5063a1481031e5fcf8cf3fa4884..91630e23b9568418e74a59958bb8f172 private void striderSettings() { striderRidable = getBoolean("mobs.strider.ridable", striderRidable); striderRidableInWater = getBoolean("mobs.strider.ridable-in-water", striderRidableInWater); -@@ -1747,6 +1748,7 @@ public class PurpurWorldConfig { +@@ -1734,6 +1735,7 @@ public class PurpurWorldConfig { } striderMaxHealth = getDouble("mobs.strider.attributes.max_health", striderMaxHealth); striderBreedingTicks = getInt("mobs.strider.breeding-delay-ticks", striderBreedingTicks); diff --git a/patches/unapplied-server/0116-PlayerBookTooLargeEvent.patch b/patches/server/0111-PlayerBookTooLargeEvent.patch similarity index 81% rename from patches/unapplied-server/0116-PlayerBookTooLargeEvent.patch rename to patches/server/0111-PlayerBookTooLargeEvent.patch index dc4e5a9c7..a8adc4d00 100644 --- a/patches/unapplied-server/0116-PlayerBookTooLargeEvent.patch +++ b/patches/server/0111-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 e5df5583ef6084e59c8375c82c9909ff2d2bdc3f..b3cecec8a93bd0de1a74e693b7c103fdbc87eba2 100644 +index 3de25a0f8e8242986c9fc8660ca9d0af976d9088..66fe42636f1b1d9f57121f7a98be4f512cc4f999 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -1183,10 +1183,15 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -1152,10 +1152,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; @@ -21,14 +21,14 @@ index e5df5583ef6084e59c8375c82c9909ff2d2bdc3f..b3cecec8a93bd0de1a74e693b7c103fd if (byteLength > 256 * 4) { ServerGamePacketListenerImpl.LOGGER.warn(this.player.getScoreboardName() + " tried to send a book with with a page too large!"); + org.purpurmc.purpur.event.player.PlayerBookTooLargeEvent event = new org.purpurmc.purpur.event.player.PlayerBookTooLargeEvent(player.getBukkitEntity(), itemstack.asBukkitCopy()); if (event.shouldKickPlayer()) // Purpur - server.scheduleOnMain(() -> this.disconnect("Book too large!", org.bukkit.event.player.PlayerKickEvent.Cause.ILLEGAL_ACTION)); // Paper - kick event cause + server.scheduleOnMain(() -> this.disconnect(Component.literal("Book too large!"), org.bukkit.event.player.PlayerKickEvent.Cause.ILLEGAL_ACTION)); // Paper - kick event cause return; } -@@ -1210,6 +1215,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -1179,6 +1184,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()); + org.purpurmc.purpur.event.player.PlayerBookTooLargeEvent event = new org.purpurmc.purpur.event.player.PlayerBookTooLargeEvent(player.getBukkitEntity(), itemstack.asBukkitCopy()); if (event.shouldKickPlayer()) // Purpur - server.scheduleOnMain(() -> this.disconnect("Book too large!", org.bukkit.event.player.PlayerKickEvent.Cause.ILLEGAL_ACTION)); // Paper - kick event cause + server.scheduleOnMain(() -> this.disconnect(Component.literal("Book too large!"), org.bukkit.event.player.PlayerKickEvent.Cause.ILLEGAL_ACTION)); // Paper - kick event cause return; } diff --git a/patches/unapplied-server/0117-Full-netherite-armor-grants-fire-resistance.patch b/patches/server/0112-Full-netherite-armor-grants-fire-resistance.patch similarity index 91% rename from patches/unapplied-server/0117-Full-netherite-armor-grants-fire-resistance.patch rename to patches/server/0112-Full-netherite-armor-grants-fire-resistance.patch index b7a8b3d84..86ab25a2d 100644 --- a/patches/unapplied-server/0117-Full-netherite-armor-grants-fire-resistance.patch +++ b/patches/server/0112-Full-netherite-armor-grants-fire-resistance.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Full netherite armor grants fire resistance diff --git a/src/main/java/net/minecraft/world/entity/player/Player.java b/src/main/java/net/minecraft/world/entity/player/Player.java -index d98f5e4323859f9eae0caac04865a78719f5befc..579a9c7d914015ef74c6147f2e17962a7aea2a78 100644 +index db8b5a85895ef68f9c492103b0530951e2b71ba3..2578bfa9d31e04506d0e91da22913d3948f9656d 100644 --- a/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java -@@ -381,6 +381,16 @@ public abstract class Player extends LivingEntity { +@@ -386,6 +386,16 @@ public abstract class Player extends LivingEntity { this.addEffect(new MobEffectInstance(MobEffects.WATER_BREATHING, 200, 0, false, false, true), org.bukkit.event.entity.EntityPotionEffectEvent.Cause.TURTLE_HELMET); // CraftBukkit } @@ -26,10 +26,10 @@ index d98f5e4323859f9eae0caac04865a78719f5befc..579a9c7d914015ef74c6147f2e17962a protected ItemCooldowns createItemCooldowns() { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 3f83dee1fc6a847d8f56cc230a6de1223d4f3964..66c4906cb9c3da6f111b96f0ad6be17772764125 100644 +index 0df12cd3ace5077e4a916a79af180316df0ad4c3..706365b7299e5ae2c70a3ce99866982cd3f32729 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 { +@@ -282,6 +282,19 @@ public class PurpurWorldConfig { villageSiegeSpawning = getBoolean("gameplay-mechanics.mob-spawning.village-sieges", predicate); } diff --git a/patches/unapplied-server/0118-Add-mobGriefing-bypass-to-everything-affected.patch b/patches/server/0113-Add-mobGriefing-bypass-to-everything-affected.patch similarity index 89% rename from patches/unapplied-server/0118-Add-mobGriefing-bypass-to-everything-affected.patch rename to patches/server/0113-Add-mobGriefing-bypass-to-everything-affected.patch index e3f73d825..9f6524c90 100644 --- a/patches/unapplied-server/0118-Add-mobGriefing-bypass-to-everything-affected.patch +++ b/patches/server/0113-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 bc410b94c479e9acf969b21c920db0f616342591..6af45fb6ba462730e639d97879f97272445a2246 100644 +index d7175268bf615e20a7e14ad024ab5e3843c91f64..13ada4aa83ddb75d6107d41b4a7d10196d5f01f0 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -1825,7 +1825,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -1808,7 +1808,7 @@ public abstract class LivingEntity extends Entity implements Attackable { boolean flag = false; if (this.dead && adversary instanceof WitherBoss) { // Paper @@ -18,10 +18,10 @@ index bc410b94c479e9acf969b21c920db0f616342591..6af45fb6ba462730e639d97879f97272 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 24755576d2c0e59fe5ed2d6019dfe33a5d6a64f9..d4325d9a55f244d96ad1dded9f62b64834dd56c6 100644 +index d92d19bdb2c49be1303065583d59f37419b0fd22..7535f28c2e181363a7bd4874a14244f9cb0a06fe 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java -@@ -747,7 +747,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Targeti +@@ -694,7 +694,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab public void aiStep() { super.aiStep(); this.level().getProfiler().push("looting"); @@ -92,7 +92,7 @@ index 6634228ef002cbef67980272a26be4a75c954116..a61abba840a55fb4fbc9716a5e05eb27 } 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 0f0171c6b34f58ef98ffeb9409f601ea25bbc662..63e2f3574b784672688f0c486fa160e5b02b01b3 100644 +index 2aac6472453aa2ec58a6d5b7040df6d457353ff5..857f59f47e47e183b6e4191978d225ee040fb979 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Fox.java +++ b/src/main/java/net/minecraft/world/entity/animal/Fox.java @@ -1384,7 +1384,7 @@ public class Fox extends Animal implements VariantHolder { @@ -105,10 +105,10 @@ index 0f0171c6b34f58ef98ffeb9409f601ea25bbc662..63e2f3574b784672688f0c486fa160e5 if (iblockdata.is(Blocks.SWEET_BERRY_BUSH)) { diff --git a/src/main/java/net/minecraft/world/entity/animal/Rabbit.java b/src/main/java/net/minecraft/world/entity/animal/Rabbit.java -index b5297b1d7223af622636a7defdb98b5bc6e6a3c9..ce424d046d7c4abd2371154b00624aa6a9ca3ae3 100644 +index 4ef310dda00d049b109fc379de2b90696eb24d27..b7ab06f46cfa1fdc4c33595484df781db1967da5 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Rabbit.java +++ b/src/main/java/net/minecraft/world/entity/animal/Rabbit.java -@@ -631,7 +631,7 @@ public class Rabbit extends Animal implements VariantHolder { +@@ -635,7 +635,7 @@ public class Rabbit extends Animal implements VariantHolder { @Override public boolean canUse() { if (this.nextStartTick <= 0) { @@ -131,10 +131,10 @@ index ee4d4a4fe314ee9bce69c96dd65d84ed1ace0543..cdb6657d30d224709aec3921c5fb8380 } 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 ff2faa3ad719378b21f84a7839b4e0c60ea5f66f..ca26c926a014c985f83cfa376a9e859d0c8b2d6b 100644 +index bf2591f163b8482d35a6e532004677199685a593..b078d1922db9f0db561d6e824794bc4518a44947 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 { +@@ -620,7 +620,7 @@ public class EnderDragon extends Mob implements Enemy { BlockState iblockdata = this.level().getBlockState(blockposition); if (!iblockdata.isAir() && !iblockdata.is(BlockTags.DRAGON_TRANSPARENT)) { @@ -144,7 +144,7 @@ index ff2faa3ad719378b21f84a7839b4e0c60ea5f66f..ca26c926a014c985f83cfa376a9e859d // 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 8d2894bb1ae70f63c8fa67de3e9f7c6a9c940f3e..2f0c44a0b97e9ad7591c5b66c2560f3e405c61c4 100644 +index 8f1458d250bb875396c6318a7abc520f3563b8ef..ed262a905a1a0bf4247538f1db210ed41c73809c 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 @@ -493,7 +493,7 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob @@ -157,10 +157,10 @@ index 8d2894bb1ae70f63c8fa67de3e9f7c6a9c940f3e..2f0c44a0b97e9ad7591c5b66c2560f3e j = Mth.floor(this.getBbWidth() / 2.0F + 1.0F); diff --git a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java -index 052a0c168268b7e788953063f54c3769023f3c03..de1fe3b115c1b3936b79c8900389542a8c8a2c90 100644 +index ada2403856aeb7cb50c0b00fb1dad18b93ecd52c..c2bddf3e67929b1d9da5739c4f0f15475b537cf0 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java +++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java -@@ -526,7 +526,15 @@ public class EnderMan extends Monster implements NeutralMob { +@@ -528,7 +528,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 052a0c168268b7e788953063f54c3769023f3c03..de1fe3b115c1b3936b79c8900389542a } @Override -@@ -572,7 +580,15 @@ public class EnderMan extends Monster implements NeutralMob { +@@ -574,7 +582,15 @@ public class EnderMan extends Monster implements NeutralMob { @Override public boolean canUse() { if (!enderman.level().purpurConfig.endermanAllowGriefing) return false; // Purpur @@ -195,7 +195,7 @@ index 052a0c168268b7e788953063f54c3769023f3c03..de1fe3b115c1b3936b79c8900389542a @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 8f0c685790aa59b7f2352c3bac6ede444d0ede22..ce2e5c16db13accb082b3f2403661c65411c7a80 100644 +index 3ac01d7e55934d145365790b6cb0c5a04ac2a74d..5ade0be7989ccea459e3c08a0280b6be31f684ce 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Evoker.java +++ b/src/main/java/net/minecraft/world/entity/monster/Evoker.java @@ -364,7 +364,7 @@ public class Evoker extends SpellcasterIllager { @@ -208,10 +208,10 @@ index 8f0c685790aa59b7f2352c3bac6ede444d0ede22..ce2e5c16db13accb082b3f2403661c65 } else { List list = Evoker.this.level().getNearbyEntities(Sheep.class, this.wololoTargeting, Evoker.this, Evoker.this.getBoundingBox().inflate(16.0D, 4.0D, 16.0D)); diff --git a/src/main/java/net/minecraft/world/entity/monster/Ravager.java b/src/main/java/net/minecraft/world/entity/monster/Ravager.java -index 32d547a4430a8f524a7fc0bd1aa063bbebfaeb7f..cebe89b0868043b819fb3e9987f899926961be52 100644 +index ebbfd1fec85f1d4e099f02c91f3d7346b6bb3c7b..86704fcba15cec26eef3f77167aee9116ba27980 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Ravager.java +++ b/src/main/java/net/minecraft/world/entity/monster/Ravager.java -@@ -168,7 +168,7 @@ public class Ravager extends Raider { +@@ -169,7 +169,7 @@ public class Ravager extends Raider { this.getAttribute(Attributes.MOVEMENT_SPEED).setBaseValue(Mth.lerp(0.1D, d1, d0)); } @@ -243,10 +243,10 @@ index 75f82922260b2c0666021e7ed42dfde401e1a9d6..a175144d5480b7af091787c6ab366fb3 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 06e0f737615c90bd733a89a731156598ccfe447f..57089ba787731ddda853dce959ba015abe135bfd 100644 +index faf5889c040a6c8fbac61a1d02036d32601f3d24..d54f8041b55f8b8d72dc4fda78ae456671f779d4 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 -@@ -412,7 +412,7 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento +@@ -411,7 +411,7 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento @Override public boolean wantsToPickUp(ItemStack stack) { @@ -256,10 +256,10 @@ index 06e0f737615c90bd733a89a731156598ccfe447f..57089ba787731ddda853dce959ba015a protected boolean canReplaceCurrentItem(ItemStack stack) { diff --git a/src/main/java/net/minecraft/world/entity/projectile/LargeFireball.java b/src/main/java/net/minecraft/world/entity/projectile/LargeFireball.java -index 9d89872c5958f3e8d6c1ef4fd93f9b8b85296851..6a94c86acce5afbf1e9c8e7d664b3eb2d79ab5ab 100644 +index 28a65f2a9ef441ae96a7a635e0695b14ce2ee367..7b6c58a31d37896daccb5f570d3cb9247cea2cd6 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/LargeFireball.java +++ b/src/main/java/net/minecraft/world/entity/projectile/LargeFireball.java -@@ -19,20 +19,20 @@ public class LargeFireball extends Fireball { +@@ -23,20 +23,20 @@ public class LargeFireball extends Fireball { public LargeFireball(EntityType type, Level world) { super(type, world); @@ -267,8 +267,8 @@ index 9d89872c5958f3e8d6c1ef4fd93f9b8b85296851..6a94c86acce5afbf1e9c8e7d664b3eb2 + this.isIncendiary = this.level().purpurConfig.fireballsBypassMobGriefing || this.level().getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING); // CraftBukkit // Purpur } - public LargeFireball(Level world, LivingEntity owner, double velocityX, double velocityY, double velocityZ, int explosionPower) { - super(EntityType.FIREBALL, owner, velocityX, velocityY, velocityZ, world); + public LargeFireball(Level world, LivingEntity owner, Vec3 velocity, int explosionPower) { + super(EntityType.FIREBALL, owner, velocity, world); this.explosionPower = explosionPower; - this.isIncendiary = this.level().getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING); // CraftBukkit + this.isIncendiary = this.level().purpurConfig.fireballsBypassMobGriefing || this.level().getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING); // CraftBukkit // Purpur @@ -284,10 +284,10 @@ index 9d89872c5958f3e8d6c1ef4fd93f9b8b85296851..6a94c86acce5afbf1e9c8e7d664b3eb2 // 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 74c596264d4da551437bd2a23e1c70022cfc73fc..e4d4ff0ef4a0f3283aa42fe2304816cd6d9475a8 100644 +index 5f7d152f41eb85f17bcded4bc8099b998e5a338b..8a5baed3d82e49af55f4d58e8729f14c0cd466f2 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/Projectile.java +++ b/src/main/java/net/minecraft/world/entity/projectile/Projectile.java -@@ -343,7 +343,7 @@ public abstract class Projectile extends Entity implements TraceableEntity { +@@ -355,7 +355,7 @@ public abstract class Projectile extends Entity implements TraceableEntity { public boolean mayInteract(Level world, BlockPos pos) { Entity entity = this.getOwner(); @@ -297,11 +297,11 @@ index 74c596264d4da551437bd2a23e1c70022cfc73fc..e4d4ff0ef4a0f3283aa42fe2304816cd 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 3a11ad32d95088a5aca713a1a6a984cc22d4fa9a..c078ccad4aabe469a9611331b415a4cef241973e 100644 +index 1711ad457e7d1233fd32edc3e9e3b9f1e3be9980..554d3c4db6ed07e3d12af23a9a18c28480bf77c0 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/SmallFireball.java +++ b/src/main/java/net/minecraft/world/entity/projectile/SmallFireball.java -@@ -27,7 +27,7 @@ public class SmallFireball extends Fireball { - super(EntityType.SMALL_FIREBALL, owner, velocityX, velocityY, velocityZ, world); +@@ -30,7 +30,7 @@ public class SmallFireball extends Fireball { + super(EntityType.SMALL_FIREBALL, owner, velocity, world); // CraftBukkit start if (this.getOwner() != null && this.getOwner() instanceof Mob) { - this.isIncendiary = this.level().getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING); @@ -310,15 +310,15 @@ index 3a11ad32d95088a5aca713a1a6a984cc22d4fa9a..c078ccad4aabe469a9611331b415a4ce // CraftBukkit end } diff --git a/src/main/java/net/minecraft/world/entity/raid/Raider.java b/src/main/java/net/minecraft/world/entity/raid/Raider.java -index 98e558338b5d9fb03869d2cc21b3e90eb45b95f6..4a8fa7e5844b5cd12ef6b113f988b715c7a3ef64 100644 +index bbf21ea433f9e3963aac0ede597ed8d3c8e50ed8..06487fc9ea416d8256e0c2cd1969d4e0283ffb05 100644 --- a/src/main/java/net/minecraft/world/entity/raid/Raider.java +++ b/src/main/java/net/minecraft/world/entity/raid/Raider.java -@@ -341,7 +341,7 @@ public abstract class Raider extends PatrollingMonster { +@@ -299,7 +299,7 @@ public abstract class Raider extends PatrollingMonster { @Override public boolean canUse() { -- if (!this.mob.level().getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING) || !this.mob.canPickUpLoot()) return false; // Paper - respect game and entity rules for picking up items -+ if ((!this.mob.level().purpurConfig.pillagerBypassMobGriefing && !this.mob.level().getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) || !this.mob.canPickUpLoot()) return false; // Paper - respect game and entity rules for picking up items // Purpur +- if (!this.mob.level().getGameRules().getBoolean(net.minecraft.world.level.GameRules.RULE_MOBGRIEFING) || !this.mob.canPickUpLoot()) return false; // Paper - respect game and entity rules for picking up items ++ if ((!this.mob.level().purpurConfig.pillagerBypassMobGriefing && !this.mob.level().getGameRules().getBoolean(net.minecraft.world.level.GameRules.RULE_MOBGRIEFING)) || !this.mob.canPickUpLoot()) return false; // Paper - respect game and entity rules for picking up items // Purpur Raid raid = this.mob.getCurrentRaid(); if (this.mob.hasActiveRaid() && !this.mob.getCurrentRaid().isOver() && this.mob.canBeLeader() && !ItemStack.matches(this.mob.getItemBySlot(EquipmentSlot.HEAD), Raid.getLeaderBannerInstance(this.mob.registryAccess().lookupOrThrow(Registries.BANNER_PATTERN)))) { @@ -375,13 +375,13 @@ index c7377d04ceac3ea624117439783a443c6d6f6d08..0c732cfbd9ce50198a3f85ae8ef2263d } } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index b6d625af2acb61f867739624b975d369efe547e0..4ee6c06c6e04bb9dd6150fa4a00b5b1787f34072 100644 +index 706365b7299e5ae2c70a3ce99866982cd3f32729..c03e7560b09d2540278e557867569bcb1eb9722c 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -115,8 +115,11 @@ public class PurpurWorldConfig { +@@ -114,8 +114,11 @@ public class PurpurWorldConfig { + public boolean boatEjectPlayersOnLand = false; public boolean boatsDoFallDamage = false; public boolean disableDropsOnCrammingDeath = false; - public boolean entitiesCanUsePortals = true; + public boolean entitiesPickUpLootBypassMobGriefing = false; + public boolean fireballsBypassMobGriefing = false; public boolean milkCuresBadOmen = true; @@ -390,10 +390,10 @@ index b6d625af2acb61f867739624b975d369efe547e0..4ee6c06c6e04bb9dd6150fa4a00b5b17 public double tridentLoyaltyVoidReturnHeight = 0.0D; public double voidDamageHeight = -64.0D; public double voidDamageDealt = 4.0D; -@@ -128,8 +131,11 @@ public class PurpurWorldConfig { +@@ -126,8 +129,11 @@ public class PurpurWorldConfig { + boatEjectPlayersOnLand = getBoolean("gameplay-mechanics.boat.eject-players-on-land", boatEjectPlayersOnLand); boatsDoFallDamage = getBoolean("gameplay-mechanics.boat.do-fall-damage", boatsDoFallDamage); disableDropsOnCrammingDeath = getBoolean("gameplay-mechanics.disable-drops-on-cramming-death", disableDropsOnCrammingDeath); - entitiesCanUsePortals = getBoolean("gameplay-mechanics.entities-can-use-portals", entitiesCanUsePortals); + entitiesPickUpLootBypassMobGriefing = getBoolean("gameplay-mechanics.entities-pick-up-loot-bypass-mob-griefing", entitiesPickUpLootBypassMobGriefing); + fireballsBypassMobGriefing = getBoolean("gameplay-mechanics.fireballs-bypass-mob-griefing", fireballsBypassMobGriefing); milkCuresBadOmen = getBoolean("gameplay-mechanics.milk-cures-bad-omen", milkCuresBadOmen); @@ -402,7 +402,7 @@ index b6d625af2acb61f867739624b975d369efe547e0..4ee6c06c6e04bb9dd6150fa4a00b5b17 tridentLoyaltyVoidReturnHeight = getDouble("gameplay-mechanics.trident-loyalty-void-return-height", tridentLoyaltyVoidReturnHeight); voidDamageHeight = getDouble("gameplay-mechanics.void-damage-height", voidDamageHeight); voidDamageDealt = getDouble("gameplay-mechanics.void-damage-dealt", voidDamageDealt); -@@ -445,9 +451,11 @@ public class PurpurWorldConfig { +@@ -432,9 +438,11 @@ public class PurpurWorldConfig { dispenserPlaceAnvils = getBoolean("blocks.dispenser.place-anvils", dispenserPlaceAnvils); } @@ -414,7 +414,7 @@ index b6d625af2acb61f867739624b975d369efe547e0..4ee6c06c6e04bb9dd6150fa4a00b5b17 farmlandGetsMoistFromBelow = getBoolean("blocks.farmland.gets-moist-from-below", farmlandGetsMoistFromBelow); farmlandAlpha = getBoolean("blocks.farmland.use-alpha-farmland", farmlandAlpha); } -@@ -472,6 +480,11 @@ public class PurpurWorldConfig { +@@ -459,6 +467,11 @@ public class PurpurWorldConfig { lavaSpeedNotNether = getInt("blocks.lava.speed.not-nether", lavaSpeedNotNether); } @@ -426,7 +426,7 @@ index b6d625af2acb61f867739624b975d369efe547e0..4ee6c06c6e04bb9dd6150fa4a00b5b17 public boolean respawnAnchorExplode = true; public double respawnAnchorExplosionPower = 5.0D; public boolean respawnAnchorExplosionFire = true; -@@ -501,10 +514,12 @@ public class PurpurWorldConfig { +@@ -488,10 +501,12 @@ public class PurpurWorldConfig { public boolean turtleEggsBreakFromExpOrbs = false; public boolean turtleEggsBreakFromItems = false; public boolean turtleEggsBreakFromMinecarts = false; @@ -439,7 +439,7 @@ index b6d625af2acb61f867739624b975d369efe547e0..4ee6c06c6e04bb9dd6150fa4a00b5b17 } public int waterInfiniteRequiredSources = 2; -@@ -762,6 +777,7 @@ public class PurpurWorldConfig { +@@ -749,6 +764,7 @@ public class PurpurWorldConfig { public double creeperMaxHealth = 20.0D; public double creeperChargedChance = 0.0D; public boolean creeperAllowGriefing = true; @@ -447,7 +447,7 @@ index b6d625af2acb61f867739624b975d369efe547e0..4ee6c06c6e04bb9dd6150fa4a00b5b17 private void creeperSettings() { creeperRidable = getBoolean("mobs.creeper.ridable", creeperRidable); creeperRidableInWater = getBoolean("mobs.creeper.ridable-in-water", creeperRidableInWater); -@@ -774,6 +790,7 @@ public class PurpurWorldConfig { +@@ -761,6 +777,7 @@ public class PurpurWorldConfig { creeperMaxHealth = getDouble("mobs.creeper.attributes.max_health", creeperMaxHealth); creeperChargedChance = getDouble("mobs.creeper.naturally-charged-chance", creeperChargedChance); creeperAllowGriefing = getBoolean("mobs.creeper.allow-griefing", creeperAllowGriefing); @@ -455,7 +455,7 @@ index b6d625af2acb61f867739624b975d369efe547e0..4ee6c06c6e04bb9dd6150fa4a00b5b17 } public boolean dolphinRidable = false; -@@ -868,6 +885,7 @@ public class PurpurWorldConfig { +@@ -855,6 +872,7 @@ public class PurpurWorldConfig { public double enderDragonMaxY = 320D; public double enderDragonMaxHealth = 200.0D; public boolean enderDragonAlwaysDropsFullExp = false; @@ -463,7 +463,7 @@ index b6d625af2acb61f867739624b975d369efe547e0..4ee6c06c6e04bb9dd6150fa4a00b5b17 private void enderDragonSettings() { enderDragonRidable = getBoolean("mobs.ender_dragon.ridable", enderDragonRidable); enderDragonRidableInWater = getBoolean("mobs.ender_dragon.ridable-in-water", enderDragonRidableInWater); -@@ -884,6 +902,7 @@ public class PurpurWorldConfig { +@@ -871,6 +889,7 @@ public class PurpurWorldConfig { } enderDragonMaxHealth = getDouble("mobs.ender_dragon.attributes.max_health", enderDragonMaxHealth); enderDragonAlwaysDropsFullExp = getBoolean("mobs.ender_dragon.always-drop-full-exp", enderDragonAlwaysDropsFullExp); @@ -471,7 +471,7 @@ index b6d625af2acb61f867739624b975d369efe547e0..4ee6c06c6e04bb9dd6150fa4a00b5b17 } public boolean endermanRidable = false; -@@ -892,6 +911,7 @@ public class PurpurWorldConfig { +@@ -879,6 +898,7 @@ public class PurpurWorldConfig { public double endermanMaxHealth = 40.0D; public boolean endermanAllowGriefing = true; public boolean endermanDespawnEvenWithBlock = false; @@ -479,7 +479,7 @@ index b6d625af2acb61f867739624b975d369efe547e0..4ee6c06c6e04bb9dd6150fa4a00b5b17 private void endermanSettings() { endermanRidable = getBoolean("mobs.enderman.ridable", endermanRidable); endermanRidableInWater = getBoolean("mobs.enderman.ridable-in-water", endermanRidableInWater); -@@ -904,6 +924,7 @@ public class PurpurWorldConfig { +@@ -891,6 +911,7 @@ public class PurpurWorldConfig { endermanMaxHealth = getDouble("mobs.enderman.attributes.max_health", endermanMaxHealth); endermanAllowGriefing = getBoolean("mobs.enderman.allow-griefing", endermanAllowGriefing); endermanDespawnEvenWithBlock = getBoolean("mobs.enderman.can-despawn-with-held-block", endermanDespawnEvenWithBlock); @@ -487,7 +487,7 @@ index b6d625af2acb61f867739624b975d369efe547e0..4ee6c06c6e04bb9dd6150fa4a00b5b17 } public boolean endermiteRidable = false; -@@ -926,6 +947,7 @@ public class PurpurWorldConfig { +@@ -913,6 +934,7 @@ public class PurpurWorldConfig { public boolean evokerRidableInWater = true; public boolean evokerControllable = true; public double evokerMaxHealth = 24.0D; @@ -495,7 +495,7 @@ index b6d625af2acb61f867739624b975d369efe547e0..4ee6c06c6e04bb9dd6150fa4a00b5b17 private void evokerSettings() { evokerRidable = getBoolean("mobs.evoker.ridable", evokerRidable); evokerRidableInWater = getBoolean("mobs.evoker.ridable-in-water", evokerRidableInWater); -@@ -936,6 +958,7 @@ public class PurpurWorldConfig { +@@ -923,6 +945,7 @@ public class PurpurWorldConfig { set("mobs.evoker.attributes.max_health", oldValue); } evokerMaxHealth = getDouble("mobs.evoker.attributes.max_health", evokerMaxHealth); @@ -503,7 +503,7 @@ index b6d625af2acb61f867739624b975d369efe547e0..4ee6c06c6e04bb9dd6150fa4a00b5b17 } public boolean foxRidable = false; -@@ -944,6 +967,7 @@ public class PurpurWorldConfig { +@@ -931,6 +954,7 @@ public class PurpurWorldConfig { public double foxMaxHealth = 10.0D; public boolean foxTypeChangesWithTulips = false; public int foxBreedingTicks = 6000; @@ -511,7 +511,7 @@ index b6d625af2acb61f867739624b975d369efe547e0..4ee6c06c6e04bb9dd6150fa4a00b5b17 private void foxSettings() { foxRidable = getBoolean("mobs.fox.ridable", foxRidable); foxRidableInWater = getBoolean("mobs.fox.ridable-in-water", foxRidableInWater); -@@ -956,6 +980,7 @@ public class PurpurWorldConfig { +@@ -943,6 +967,7 @@ public class PurpurWorldConfig { foxMaxHealth = getDouble("mobs.fox.attributes.max_health", foxMaxHealth); foxTypeChangesWithTulips = getBoolean("mobs.fox.tulips-change-type", foxTypeChangesWithTulips); foxBreedingTicks = getInt("mobs.fox.breeding-delay-ticks", foxBreedingTicks); @@ -519,7 +519,7 @@ index b6d625af2acb61f867739624b975d369efe547e0..4ee6c06c6e04bb9dd6150fa4a00b5b17 } public boolean frogRidable = false; -@@ -1403,6 +1428,7 @@ public class PurpurWorldConfig { +@@ -1390,6 +1415,7 @@ public class PurpurWorldConfig { public boolean piglinRidableInWater = true; public boolean piglinControllable = true; public double piglinMaxHealth = 16.0D; @@ -527,7 +527,7 @@ index b6d625af2acb61f867739624b975d369efe547e0..4ee6c06c6e04bb9dd6150fa4a00b5b17 private void piglinSettings() { piglinRidable = getBoolean("mobs.piglin.ridable", piglinRidable); piglinRidableInWater = getBoolean("mobs.piglin.ridable-in-water", piglinRidableInWater); -@@ -1413,6 +1439,7 @@ public class PurpurWorldConfig { +@@ -1400,6 +1426,7 @@ public class PurpurWorldConfig { set("mobs.piglin.attributes.max_health", oldValue); } piglinMaxHealth = getDouble("mobs.piglin.attributes.max_health", piglinMaxHealth); @@ -535,7 +535,7 @@ index b6d625af2acb61f867739624b975d369efe547e0..4ee6c06c6e04bb9dd6150fa4a00b5b17 } public boolean piglinBruteRidable = false; -@@ -1435,6 +1462,7 @@ public class PurpurWorldConfig { +@@ -1422,6 +1449,7 @@ public class PurpurWorldConfig { public boolean pillagerRidableInWater = true; public boolean pillagerControllable = true; public double pillagerMaxHealth = 24.0D; @@ -543,7 +543,7 @@ index b6d625af2acb61f867739624b975d369efe547e0..4ee6c06c6e04bb9dd6150fa4a00b5b17 private void pillagerSettings() { pillagerRidable = getBoolean("mobs.pillager.ridable", pillagerRidable); pillagerRidableInWater = getBoolean("mobs.pillager.ridable-in-water", pillagerRidableInWater); -@@ -1445,6 +1473,7 @@ public class PurpurWorldConfig { +@@ -1432,6 +1460,7 @@ public class PurpurWorldConfig { set("mobs.pillager.attributes.max_health", oldValue); } pillagerMaxHealth = getDouble("mobs.pillager.attributes.max_health", pillagerMaxHealth); @@ -551,7 +551,7 @@ index b6d625af2acb61f867739624b975d369efe547e0..4ee6c06c6e04bb9dd6150fa4a00b5b17 } public boolean polarBearRidable = false; -@@ -1491,6 +1520,7 @@ public class PurpurWorldConfig { +@@ -1478,6 +1507,7 @@ public class PurpurWorldConfig { public double rabbitNaturalToast = 0.0D; public double rabbitNaturalKiller = 0.0D; public int rabbitBreedingTicks = 6000; @@ -559,7 +559,7 @@ index b6d625af2acb61f867739624b975d369efe547e0..4ee6c06c6e04bb9dd6150fa4a00b5b17 private void rabbitSettings() { rabbitRidable = getBoolean("mobs.rabbit.ridable", rabbitRidable); rabbitRidableInWater = getBoolean("mobs.rabbit.ridable-in-water", rabbitRidableInWater); -@@ -1504,12 +1534,14 @@ public class PurpurWorldConfig { +@@ -1491,12 +1521,14 @@ public class PurpurWorldConfig { rabbitNaturalToast = getDouble("mobs.rabbit.spawn-toast-chance", rabbitNaturalToast); rabbitNaturalKiller = getDouble("mobs.rabbit.spawn-killer-rabbit-chance", rabbitNaturalKiller); rabbitBreedingTicks = getInt("mobs.rabbit.breeding-delay-ticks", rabbitBreedingTicks); @@ -574,7 +574,7 @@ index b6d625af2acb61f867739624b975d369efe547e0..4ee6c06c6e04bb9dd6150fa4a00b5b17 private void ravagerSettings() { ravagerRidable = getBoolean("mobs.ravager.ridable", ravagerRidable); ravagerRidableInWater = getBoolean("mobs.ravager.ridable-in-water", ravagerRidableInWater); -@@ -1520,6 +1552,7 @@ public class PurpurWorldConfig { +@@ -1507,6 +1539,7 @@ public class PurpurWorldConfig { set("mobs.ravager.attributes.max_health", oldValue); } ravagerMaxHealth = getDouble("mobs.ravager.attributes.max_health", ravagerMaxHealth); @@ -582,7 +582,7 @@ index b6d625af2acb61f867739624b975d369efe547e0..4ee6c06c6e04bb9dd6150fa4a00b5b17 } public boolean salmonRidable = false; -@@ -1541,6 +1574,7 @@ public class PurpurWorldConfig { +@@ -1528,6 +1561,7 @@ public class PurpurWorldConfig { public boolean sheepControllable = true; public double sheepMaxHealth = 8.0D; public int sheepBreedingTicks = 6000; @@ -590,7 +590,7 @@ index b6d625af2acb61f867739624b975d369efe547e0..4ee6c06c6e04bb9dd6150fa4a00b5b17 private void sheepSettings() { sheepRidable = getBoolean("mobs.sheep.ridable", sheepRidable); sheepRidableInWater = getBoolean("mobs.sheep.ridable-in-water", sheepRidableInWater); -@@ -1552,6 +1586,7 @@ public class PurpurWorldConfig { +@@ -1539,6 +1573,7 @@ public class PurpurWorldConfig { } sheepMaxHealth = getDouble("mobs.sheep.attributes.max_health", sheepMaxHealth); sheepBreedingTicks = getInt("mobs.sheep.breeding-delay-ticks", sheepBreedingTicks); @@ -598,7 +598,7 @@ index b6d625af2acb61f867739624b975d369efe547e0..4ee6c06c6e04bb9dd6150fa4a00b5b17 } public boolean shulkerRidable = false; -@@ -1574,6 +1609,7 @@ public class PurpurWorldConfig { +@@ -1561,6 +1596,7 @@ public class PurpurWorldConfig { public boolean silverfishRidableInWater = true; public boolean silverfishControllable = true; public double silverfishMaxHealth = 8.0D; @@ -606,7 +606,7 @@ index b6d625af2acb61f867739624b975d369efe547e0..4ee6c06c6e04bb9dd6150fa4a00b5b17 private void silverfishSettings() { silverfishRidable = getBoolean("mobs.silverfish.ridable", silverfishRidable); silverfishRidableInWater = getBoolean("mobs.silverfish.ridable-in-water", silverfishRidableInWater); -@@ -1584,6 +1620,7 @@ public class PurpurWorldConfig { +@@ -1571,6 +1607,7 @@ public class PurpurWorldConfig { set("mobs.silverfish.attributes.max_health", oldValue); } silverfishMaxHealth = getDouble("mobs.silverfish.attributes.max_health", silverfishMaxHealth); @@ -614,7 +614,7 @@ index b6d625af2acb61f867739624b975d369efe547e0..4ee6c06c6e04bb9dd6150fa4a00b5b17 } public boolean skeletonRidable = false; -@@ -1661,6 +1698,7 @@ public class PurpurWorldConfig { +@@ -1648,6 +1685,7 @@ public class PurpurWorldConfig { public int snowGolemSnowBallMax = 20; public float snowGolemSnowBallModifier = 10.0F; public double snowGolemAttackDistance = 1.25D; @@ -622,7 +622,7 @@ index b6d625af2acb61f867739624b975d369efe547e0..4ee6c06c6e04bb9dd6150fa4a00b5b17 private void snowGolemSettings() { snowGolemRidable = getBoolean("mobs.snow_golem.ridable", snowGolemRidable); snowGolemRidableInWater = getBoolean("mobs.snow_golem.ridable-in-water", snowGolemRidableInWater); -@@ -1677,6 +1715,7 @@ public class PurpurWorldConfig { +@@ -1664,6 +1702,7 @@ public class PurpurWorldConfig { snowGolemSnowBallMax = getInt("mobs.snow_golem.max-shoot-interval-ticks", snowGolemSnowBallMax); snowGolemSnowBallModifier = (float) getDouble("mobs.snow_golem.snow-ball-modifier", snowGolemSnowBallModifier); snowGolemAttackDistance = getDouble("mobs.snow_golem.attack-distance", snowGolemAttackDistance); @@ -630,7 +630,7 @@ index b6d625af2acb61f867739624b975d369efe547e0..4ee6c06c6e04bb9dd6150fa4a00b5b17 } public boolean snifferRidable = false; -@@ -1863,6 +1902,7 @@ public class PurpurWorldConfig { +@@ -1849,6 +1888,7 @@ public class PurpurWorldConfig { public int villagerBreedingTicks = 6000; public boolean villagerClericsFarmWarts = false; public boolean villagerClericFarmersThrowWarts = true; @@ -638,7 +638,7 @@ index b6d625af2acb61f867739624b975d369efe547e0..4ee6c06c6e04bb9dd6150fa4a00b5b17 private void villagerSettings() { villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); -@@ -1879,6 +1919,7 @@ public class PurpurWorldConfig { +@@ -1864,6 +1904,7 @@ public class PurpurWorldConfig { villagerBreedingTicks = getInt("mobs.villager.breeding-delay-ticks", villagerBreedingTicks); villagerClericsFarmWarts = getBoolean("mobs.villager.clerics-farm-warts", villagerClericsFarmWarts); villagerClericFarmersThrowWarts = getBoolean("mobs.villager.cleric-wart-farmers-throw-warts-at-villagers", villagerClericFarmersThrowWarts); @@ -646,7 +646,7 @@ index b6d625af2acb61f867739624b975d369efe547e0..4ee6c06c6e04bb9dd6150fa4a00b5b17 } public boolean vindicatorRidable = false; -@@ -1951,6 +1992,7 @@ public class PurpurWorldConfig { +@@ -1934,6 +1975,7 @@ public class PurpurWorldConfig { public double witherMaxHealth = 300.0D; public float witherHealthRegenAmount = 1.0f; public int witherHealthRegenDelay = 20; @@ -654,7 +654,7 @@ index b6d625af2acb61f867739624b975d369efe547e0..4ee6c06c6e04bb9dd6150fa4a00b5b17 private void witherSettings() { witherRidable = getBoolean("mobs.wither.ridable", witherRidable); witherRidableInWater = getBoolean("mobs.wither.ridable-in-water", witherRidableInWater); -@@ -1968,6 +2010,7 @@ public class PurpurWorldConfig { +@@ -1951,6 +1993,7 @@ public class PurpurWorldConfig { witherMaxHealth = getDouble("mobs.wither.attributes.max_health", witherMaxHealth); witherHealthRegenAmount = (float) getDouble("mobs.wither.health-regen-amount", witherHealthRegenAmount); witherHealthRegenDelay = getInt("mobs.wither.health-regen-delay", witherHealthRegenDelay); @@ -662,7 +662,7 @@ index b6d625af2acb61f867739624b975d369efe547e0..4ee6c06c6e04bb9dd6150fa4a00b5b17 } public boolean witherSkeletonRidable = false; -@@ -2039,6 +2082,7 @@ public class PurpurWorldConfig { +@@ -2022,6 +2065,7 @@ public class PurpurWorldConfig { public double zombieJockeyChance = 0.05D; public boolean zombieJockeyTryExistingChickens = true; public boolean zombieAggressiveTowardsVillagerWhenLagging = true; @@ -670,7 +670,7 @@ index b6d625af2acb61f867739624b975d369efe547e0..4ee6c06c6e04bb9dd6150fa4a00b5b17 private void zombieSettings() { zombieRidable = getBoolean("mobs.zombie.ridable", zombieRidable); zombieRidableInWater = getBoolean("mobs.zombie.ridable-in-water", zombieRidableInWater); -@@ -2054,6 +2098,7 @@ public class PurpurWorldConfig { +@@ -2037,6 +2081,7 @@ public class PurpurWorldConfig { zombieJockeyChance = getDouble("mobs.zombie.jockey.chance", zombieJockeyChance); zombieJockeyTryExistingChickens = getBoolean("mobs.zombie.jockey.try-existing-chickens", zombieJockeyTryExistingChickens); zombieAggressiveTowardsVillagerWhenLagging = getBoolean("mobs.zombie.aggressive-towards-villager-when-lagging", zombieAggressiveTowardsVillagerWhenLagging); diff --git a/patches/unapplied-server/0119-Config-to-allow-Note-Block-sounds-when-blocked.patch b/patches/server/0114-Config-to-allow-Note-Block-sounds-when-blocked.patch similarity index 94% rename from patches/unapplied-server/0119-Config-to-allow-Note-Block-sounds-when-blocked.patch rename to patches/server/0114-Config-to-allow-Note-Block-sounds-when-blocked.patch index fe5cc46f7..57d0953a3 100644 --- a/patches/unapplied-server/0119-Config-to-allow-Note-Block-sounds-when-blocked.patch +++ b/patches/server/0114-Config-to-allow-Note-Block-sounds-when-blocked.patch @@ -22,10 +22,10 @@ index 1d82cfe7af0dc42f88901fb0c44896771fdf8a93..43dd972b374daa1072608f3a68e812e7 // 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 51002cc2901b432123dfc6b3c130e26b3c3486a3..30a95d4b18964c6b25beb4dbec84f03effc2145b 100644 +index c03e7560b09d2540278e557867569bcb1eb9722c..e7bcc4cd6b9e2018e717e62b85165d203ed0d925 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 { +@@ -117,6 +117,7 @@ public class PurpurWorldConfig { public boolean entitiesPickUpLootBypassMobGriefing = false; public boolean fireballsBypassMobGriefing = false; public boolean milkCuresBadOmen = true; @@ -33,7 +33,7 @@ index 51002cc2901b432123dfc6b3c130e26b3c3486a3..30a95d4b18964c6b25beb4dbec84f03e public boolean persistentDroppableEntityDisplayNames = true; public boolean projectilesBypassMobGriefing = false; public double tridentLoyaltyVoidReturnHeight = 0.0D; -@@ -134,6 +135,7 @@ public class PurpurWorldConfig { +@@ -132,6 +133,7 @@ public class PurpurWorldConfig { entitiesPickUpLootBypassMobGriefing = getBoolean("gameplay-mechanics.entities-pick-up-loot-bypass-mob-griefing", entitiesPickUpLootBypassMobGriefing); fireballsBypassMobGriefing = getBoolean("gameplay-mechanics.fireballs-bypass-mob-griefing", fireballsBypassMobGriefing); milkCuresBadOmen = getBoolean("gameplay-mechanics.milk-cures-bad-omen", milkCuresBadOmen); diff --git a/patches/unapplied-server/0121-Farmland-trampling-changes.patch b/patches/server/0115-Farmland-trampling-changes.patch similarity index 95% rename from patches/unapplied-server/0121-Farmland-trampling-changes.patch rename to patches/server/0115-Farmland-trampling-changes.patch index e48e6ca91..bf77f0535 100644 --- a/patches/unapplied-server/0121-Farmland-trampling-changes.patch +++ b/patches/server/0115-Farmland-trampling-changes.patch @@ -37,10 +37,10 @@ index 99798220b6e0ad06db2ba5c9b74bfb72af185fee..12a0c69f8fec30fad64cbb00af2ca1bb if (!CraftEventFactory.callEntityChangeBlockEvent(entity, pos, Blocks.DIRT.defaultBlockState())) { return; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index bed0ee3cac8d2acda872f5f3fcbd2b75a6ca3a0d..91f204f313ee4b5a1f16416670e855d4e7177e51 100644 +index e7bcc4cd6b9e2018e717e62b85165d203ed0d925..255203353384df09f09ffe481094b37f6aa499e0 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -458,10 +458,16 @@ public class PurpurWorldConfig { +@@ -443,10 +443,16 @@ public class PurpurWorldConfig { public boolean farmlandBypassMobGriefing = false; public boolean farmlandGetsMoistFromBelow = false; public boolean farmlandAlpha = false; diff --git a/patches/unapplied-server/0122-Movement-options-for-armor-stands.patch b/patches/server/0116-Movement-options-for-armor-stands.patch similarity index 90% rename from patches/unapplied-server/0122-Movement-options-for-armor-stands.patch rename to patches/server/0116-Movement-options-for-armor-stands.patch index e984f34d3..59d6ad8bb 100644 --- a/patches/unapplied-server/0122-Movement-options-for-armor-stands.patch +++ b/patches/server/0116-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 e29f56c83e8ce237e9135fabcf2381130a1a790d..eaa290e87be6953466252f0ae60de7763813e23f 100644 +index 368af5e31919ad5a648315d9d848511a791cc5bb..ccaa58b27c139ec6e6f2375c99dc122342ee7c81 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -1935,7 +1935,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -1709,7 +1709,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess return this.isInWater() || flag; } @@ -30,10 +30,10 @@ index e29f56c83e8ce237e9135fabcf2381130a1a790d..eaa290e87be6953466252f0ae60de776 if (entity instanceof Boat entityboat) { 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 67eb7ddb77e781bf9d140133e0ad9f16c1ca0f0e..d22ce9181e3b403328b8510bc73f8e6b712ffc89 100644 +index a37054d39ee142e5f3ca3c5e1e3a15c150a3ba32..ea3cad6c9cc561b225cd41f04bd204c99ecd66ec 100644 --- a/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java +++ b/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java -@@ -103,10 +103,12 @@ public class ArmorStand extends LivingEntity { +@@ -102,10 +102,12 @@ public class ArmorStand extends LivingEntity { private boolean noTickPoseDirty = false; private boolean noTickEquipmentDirty = false; // Paper end - Allow ArmorStands not to tick @@ -46,7 +46,7 @@ index 67eb7ddb77e781bf9d140133e0ad9f16c1ca0f0e..d22ce9181e3b403328b8510bc73f8e6b this.handItems = NonNullList.withSize(2, ItemStack.EMPTY); this.armorItems = NonNullList.withSize(4, ItemStack.EMPTY); this.headPose = ArmorStand.DEFAULT_HEAD_POSE; -@@ -1010,4 +1012,18 @@ public class ArmorStand extends LivingEntity { +@@ -1017,4 +1019,18 @@ public class ArmorStand extends LivingEntity { } } // Paper end @@ -66,7 +66,7 @@ index 67eb7ddb77e781bf9d140133e0ad9f16c1ca0f0e..d22ce9181e3b403328b8510bc73f8e6b + // Purpur end } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 5694476f17d56f0db1c9fdfbafa1fc935cb84b3e..8c36c55ba6230bd254f1416e0a6446737fc1d911 100644 +index 255203353384df09f09ffe481094b37f6aa499e0..24b90abc3171c824008af0a8e49b7963a9636493 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/unapplied-server/0124-Toggle-for-water-sensitive-mob-damage.patch b/patches/server/0117-Toggle-for-water-sensitive-mob-damage.patch similarity index 88% rename from patches/unapplied-server/0124-Toggle-for-water-sensitive-mob-damage.patch rename to patches/server/0117-Toggle-for-water-sensitive-mob-damage.patch index 387ec54b2..a6ddcd263 100644 --- a/patches/unapplied-server/0124-Toggle-for-water-sensitive-mob-damage.patch +++ b/patches/server/0117-Toggle-for-water-sensitive-mob-damage.patch @@ -37,10 +37,10 @@ index 49adf3f230fa34289a2ce09a9d829f5dbf952fc8..a7847b6ca5b203fd693337928f31a904 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 cbcfe8177362d9b8af97f21e716a4dce9e227465..0978f519177ce2f0991402dafb9a22c5a8686168 100644 +index a758f360741de84a004ecc55f1415e74bd0a0fd5..af49371612b56f6e191c580cd54a80e5e77989a3 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Bee.java +++ b/src/main/java/net/minecraft/world/entity/animal/Bee.java -@@ -175,7 +175,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { +@@ -176,7 +176,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { // Paper end - Fix MC-167279 this.lookControl = new Bee.BeeLookControl(this); this.setPathfindingMalus(PathType.DANGER_FIRE, -1.0F); @@ -49,7 +49,7 @@ index cbcfe8177362d9b8af97f21e716a4dce9e227465..0978f519177ce2f0991402dafb9a22c5 this.setPathfindingMalus(PathType.WATER_BORDER, 16.0F); this.setPathfindingMalus(PathType.COCOA, -1.0F); this.setPathfindingMalus(PathType.FENCE, -1.0F); -@@ -477,6 +477,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; } @@ -62,10 +62,10 @@ index cbcfe8177362d9b8af97f21e716a4dce9e227465..0978f519177ce2f0991402dafb9a22c5 public int getRemainingPersistentAngerTime() { return (Integer) this.entityData.get(Bee.DATA_REMAINING_ANGER_TIME); diff --git a/src/main/java/net/minecraft/world/entity/animal/Cat.java b/src/main/java/net/minecraft/world/entity/animal/Cat.java -index 27e448a38377ea3cc2e527dbe48a23d233f1ea13..446aec4d10e614f136fe6ae4bb5a7dd0ac6d0f18 100644 +index 8d12b8dad60b44e3315584746d27772fec093323..f679ba03614cc6b0e976330569ed2b678c622fa3 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Cat.java +++ b/src/main/java/net/minecraft/world/entity/animal/Cat.java -@@ -139,6 +139,11 @@ public class Cat extends TamableAnimal implements VariantHolder { @@ -158,10 +158,10 @@ index 63e2f3574b784672688f0c486fa160e5b02b01b3..5807a498b910ad96d7e6f69db5241c92 protected void defineSynchedData(SynchedEntityData.Builder builder) { super.defineSynchedData(builder); diff --git a/src/main/java/net/minecraft/world/entity/animal/IronGolem.java b/src/main/java/net/minecraft/world/entity/animal/IronGolem.java -index 2919d055e2136a956aa038bd0bf4c1a2ff5afa2f..9c86d86a6d89585cfbdace89e66866f496da86cb 100644 +index 9ea96c02d08b342b42b5600acc703be359023dbe..65232a2cb23eb4757abdc8741d55e0faccf4c0bb 100644 --- a/src/main/java/net/minecraft/world/entity/animal/IronGolem.java +++ b/src/main/java/net/minecraft/world/entity/animal/IronGolem.java -@@ -83,6 +83,11 @@ public class IronGolem extends AbstractGolem implements NeutralMob { +@@ -84,6 +84,11 @@ public class IronGolem extends AbstractGolem implements NeutralMob { } // Purpur end @@ -190,7 +190,7 @@ index 22a2328fe5159c8fed635a62334a3f1028c346a5..6cb8d85986f4d891dfbb66b83163ed23 public float getWalkTargetValue(BlockPos pos, LevelReader world) { return world.getBlockState(pos.below()).is(Blocks.MYCELIUM) ? 10.0F : world.getPathfindingCostFromLightLevels(pos); diff --git a/src/main/java/net/minecraft/world/entity/animal/Ocelot.java b/src/main/java/net/minecraft/world/entity/animal/Ocelot.java -index fc74c21d2c506df2134fc4ce61917af65fa89466..a1b7661ae0676007d59d202493efc5a0c795045f 100644 +index 14d94992bc02c0eedab0c83fcffb975ac33d48cb..b94f65a1f83159be0f15eba49df8854686bcc069 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Ocelot.java +++ b/src/main/java/net/minecraft/world/entity/animal/Ocelot.java @@ -93,6 +93,11 @@ public class Ocelot extends Animal { @@ -206,10 +206,10 @@ index fc74c21d2c506df2134fc4ce61917af65fa89466..a1b7661ae0676007d59d202493efc5a0 return (Boolean) this.entityData.get(Ocelot.DATA_TRUSTING); } diff --git a/src/main/java/net/minecraft/world/entity/animal/Panda.java b/src/main/java/net/minecraft/world/entity/animal/Panda.java -index e90fc016fc7e0e9aac2c2d0cf081748100f225f3..4895bd2566605ab3986f35d43345f29ce78e81e0 100644 +index 925bed4503a4023c01d8b9ffd07047831e5e96e5..6ea8ecf8672b71533c9b979a3d46bd947fbc4b73 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Panda.java +++ b/src/main/java/net/minecraft/world/entity/animal/Panda.java -@@ -157,6 +157,11 @@ public class Panda extends Animal { +@@ -158,6 +158,11 @@ public class Panda extends Animal { return this.level().purpurConfig.pandaBreedingTicks; } @@ -220,9 +220,9 @@ index e90fc016fc7e0e9aac2c2d0cf081748100f225f3..4895bd2566605ab3986f35d43345f29c + @Override public boolean canTakeItem(ItemStack stack) { - EquipmentSlot enumitemslot = Mob.getEquipmentSlotForItem(stack); + EquipmentSlot enumitemslot = this.getEquipmentSlotForItem(stack); 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 22b8701accc76d806819433a8511172e13a9ed9e..7b139028ae5c590960e6b8a74b6ba667f3db7f5d 100644 +index d2cdb2d14dc8fe3cf6ffb14668f848e5dd020827..aefb5624409e7c31944d897d52f3a71ea85e1923 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Parrot.java +++ b/src/main/java/net/minecraft/world/entity/animal/Parrot.java @@ -196,6 +196,11 @@ public class Parrot extends ShoulderRidingEntity implements VariantHolder { +@@ -150,6 +150,11 @@ public class Rabbit extends Animal implements VariantHolder { public int getPurpurBreedTime() { return this.level().purpurConfig.rabbitBreedingTicks; } @@ -318,10 +318,10 @@ index 742805994f29a18af444912b10af631d2c60cacf..e101c3bf425902908c43ffa18867fb83 public int getMaxSchoolSize() { return 5; diff --git a/src/main/java/net/minecraft/world/entity/animal/Sheep.java b/src/main/java/net/minecraft/world/entity/animal/Sheep.java -index c3cc949291d11ae707fa5175d666df2ee81cdcce..afec39ba3b51b121fd7ae937e7bac060ef430dfd 100644 +index 7d716efe614902c35ae63b49e159e8d2d8e7d8ea..c7c1ab91d761113d307332491cf5d05e5d5b5bf7 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Sheep.java +++ b/src/main/java/net/minecraft/world/entity/animal/Sheep.java -@@ -144,6 +144,11 @@ public class Sheep extends Animal implements Shearable { +@@ -142,6 +142,11 @@ public class Sheep extends Animal implements Shearable { return this.level().purpurConfig.sheepBreedingTicks; } @@ -347,10 +347,10 @@ index cdb6657d30d224709aec3921c5fb8380f8acd93e..9f20eae7449c670b913cc3bbe1a89254 @Override 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 f0261117a4f8ae240b3b991053deaf8d6419b5b4..0d05879eadeff8731028d78d89d5d32142818ea2 100644 +index b4cb9fc3f543b70233fe88a31565252eefdb4ce9..7092070b8f540ad34b92ac6d4fc9feaca4bd296d 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Squid.java +++ b/src/main/java/net/minecraft/world/entity/animal/Squid.java -@@ -88,6 +88,11 @@ public class Squid extends WaterAnimal { +@@ -87,6 +87,11 @@ public class Squid extends WaterAnimal { return this.wasTouchingWater || canFly(); } @@ -379,7 +379,7 @@ index 327b1805d9d4069212a8772ff189c9ab24ae1183..4ac998e9d96aed3b0ea0ec3f9dcd5fdd return "entity.minecraft.tropical_fish.predefined." + variant; } diff --git a/src/main/java/net/minecraft/world/entity/animal/Turtle.java b/src/main/java/net/minecraft/world/entity/animal/Turtle.java -index a577ec78b2f5bca0166277c499da4fa7988d5395..b146ac72584d998cee4279133b3b19051fbf14c9 100644 +index 58a390b462ec387f5376559c3d615ed4bcf055ea..6994c78b1a9229124b8d36468cd2beab914780ef 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Turtle.java +++ b/src/main/java/net/minecraft/world/entity/animal/Turtle.java @@ -114,6 +114,11 @@ public class Turtle extends Animal { @@ -392,13 +392,13 @@ index a577ec78b2f5bca0166277c499da4fa7988d5395..b146ac72584d998cee4279133b3b1905 + } + public void setHomePos(BlockPos pos) { - this.entityData.set(Turtle.HOME_POS, pos.immutable()); // Paper - called with mutablepos... + this.entityData.set(Turtle.HOME_POS, pos); } diff --git a/src/main/java/net/minecraft/world/entity/animal/Wolf.java b/src/main/java/net/minecraft/world/entity/animal/Wolf.java -index 3b7392852fd8b3c88969b46eeee3aefddde06920..c0a4a6066f7330974971e93a74f9b35d135166e7 100644 +index 5dd146d318851ce581a0d7841bd87ae9767dab6a..5802d5a43c5f2dc569130cc70c4ba519c471abc0 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Wolf.java +++ b/src/main/java/net/minecraft/world/entity/animal/Wolf.java -@@ -217,6 +217,11 @@ public class Wolf extends TamableAnimal implements NeutralMob, VariantHolder { +@@ -72,6 +72,11 @@ public class Horse extends AbstractHorse implements VariantHolder { return this.level().purpurConfig.horseBreedingTicks; } @@ -475,7 +475,7 @@ index 16d4278d49dad84f72c968ca36914e93d46dc5f6..e623284b353831d1a540af40e139ac16 protected void randomizeAttributes(RandomSource random) { this.getAttribute(Attributes.MAX_HEALTH).setBaseValue((double)generateMaxHealth(random::nextInt)); 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 326d94eabe0a469bfebed4517960be0042517249..876b06fd6a371caa6cc71026a3b2f7a111c89dc8 100644 +index b8a6ebd8301c4873060505c866dabb4e8772d5b5..96f1eba4a356e131a8f3c689bedc9eb8821e1a72 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 @@ -146,6 +146,11 @@ public class Llama extends AbstractChestedHorse implements VariantHolder type, Level world) { super(type, world); @@ -685,7 +685,7 @@ index de1fe3b115c1b3936b79c8900389542a8c8a2c90..17b044e58d2ed33ed16e60f4fd4f63b2 } // Purpur start -@@ -298,7 +298,7 @@ public class EnderMan extends Monster implements NeutralMob { +@@ -300,7 +300,7 @@ public class EnderMan extends Monster implements NeutralMob { @Override public boolean isSensitiveToWater() { @@ -711,7 +711,7 @@ index 52e2588b32b56b51bdbbdf63a290b2a4a4b02c13..514354bfcd0608554fd515248975fb10 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 ce2e5c16db13accb082b3f2403661c65411c7a80..a3e88c252b39a78a0759623f188dbdc8aa2fcc0b 100644 +index 5ade0be7989ccea459e3c08a0280b6be31f684ce..fac5b13d1428528182d529eacba7ad2d0cee051a 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Evoker.java +++ b/src/main/java/net/minecraft/world/entity/monster/Evoker.java @@ -74,6 +74,11 @@ public class Evoker extends SpellcasterIllager { @@ -727,7 +727,7 @@ index ce2e5c16db13accb082b3f2403661c65411c7a80..a3e88c252b39a78a0759623f188dbdc8 protected void registerGoals() { super.registerGoals(); diff --git a/src/main/java/net/minecraft/world/entity/monster/Ghast.java b/src/main/java/net/minecraft/world/entity/monster/Ghast.java -index 4bad5bdce2df5f5233465b30bcd3121b1dff0874..96f7c8fb4e49e7640aaa1adb466d67fc887a2dc5 100644 +index 82d8e23e7e0b8f806fe93597c8869518dde0cb36..69a0b774f653b5c95ac63ba08f79174dc2ec648d 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Ghast.java +++ b/src/main/java/net/minecraft/world/entity/monster/Ghast.java @@ -136,6 +136,11 @@ public class Ghast extends FlyingMob implements Enemy { @@ -759,7 +759,7 @@ index ca53c5b45c119dce1c713dbf931251f89c90cb8d..7ede13f462e2641de63104ba34cdea03 protected void initAttributes() { this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.giantMaxHealth); 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 7fa4e9761c6aad83848bf5e80a213689d728921d..6b0ff4ded5e8b62572d5889f0be5e3148243ed7d 100644 +index af33e2b099ba1b41c0ac62d5504b130b6aa3e41b..286ff759957ea56e0055cb25c71bce36cb348934 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Guardian.java +++ b/src/main/java/net/minecraft/world/entity/monster/Guardian.java @@ -95,6 +95,11 @@ public class Guardian extends Monster { @@ -791,10 +791,10 @@ index 6673c0bff3a4e3d11a09e9dc8aeb0c2418dc7f59..cb96bd5769159e6c25968673ea07cd6d 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 c680e1efb73a6387aad6ecdab94f690c12451a32..e2393be574475377fd401d55ab0be9b483e705e6 100644 +index 060f82c4be49db618871dca29db7fd959a6ada0b..b659075fb4678c46e6ae29dddc19875471ff9a73 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Illusioner.java +++ b/src/main/java/net/minecraft/world/entity/monster/Illusioner.java -@@ -80,6 +80,11 @@ public class Illusioner extends SpellcasterIllager implements RangedAttackMob { +@@ -81,6 +81,11 @@ public class Illusioner extends SpellcasterIllager implements RangedAttackMob { this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.illusionerMaxHealth); } @@ -807,7 +807,7 @@ index c680e1efb73a6387aad6ecdab94f690c12451a32..e2393be574475377fd401d55ab0be9b4 protected void registerGoals() { super.registerGoals(); diff --git a/src/main/java/net/minecraft/world/entity/monster/MagmaCube.java b/src/main/java/net/minecraft/world/entity/monster/MagmaCube.java -index 61cd97bc17802d3ab30999fc1f2b91e8b00652b2..adacdbf9fac7d1504be73e2e5a7526e8258a126d 100644 +index 7769faef7606afca7de8a11fd82a7c3cc61f0b32..f81c09aa7673703e97ac4c39caaf25fac05e3de8 100644 --- a/src/main/java/net/minecraft/world/entity/monster/MagmaCube.java +++ b/src/main/java/net/minecraft/world/entity/monster/MagmaCube.java @@ -66,6 +66,11 @@ public class MagmaCube extends Slime { @@ -823,7 +823,7 @@ index 61cd97bc17802d3ab30999fc1f2b91e8b00652b2..adacdbf9fac7d1504be73e2e5a7526e8 return Monster.createMonsterAttributes().add(Attributes.MOVEMENT_SPEED, 0.2F); } diff --git a/src/main/java/net/minecraft/world/entity/monster/Phantom.java b/src/main/java/net/minecraft/world/entity/monster/Phantom.java -index c15d75472d4d92baeb87a147832e17e363c360be..c52d40eb33a16e428c016a902faeb62aea0fd727 100644 +index 88725e6f8c6490253e110485f5a62e9d3d2c9aa9..554e01cf4fb3b15549c8c381274014c4735e08c6 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Phantom.java +++ b/src/main/java/net/minecraft/world/entity/monster/Phantom.java @@ -136,6 +136,11 @@ public class Phantom extends FlyingMob implements Enemy { @@ -839,10 +839,10 @@ index c15d75472d4d92baeb87a147832e17e363c360be..c52d40eb33a16e428c016a902faeb62a public boolean isFlapping() { return (this.getUniqueFlapTickOffset() + this.tickCount) % Phantom.TICKS_PER_FLAP == 0; diff --git a/src/main/java/net/minecraft/world/entity/monster/Pillager.java b/src/main/java/net/minecraft/world/entity/monster/Pillager.java -index 8c06e648df453fdd4eea0aa4843fada9b6375f81..a405764724d7f4b586d8510450a6258417495942 100644 +index 6dd51e6a3542436f5adb0e32b367517132261459..50416e3c3d9a89b5d78e3b7df21b5c99b1babd28 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Pillager.java +++ b/src/main/java/net/minecraft/world/entity/monster/Pillager.java -@@ -80,6 +80,11 @@ public class Pillager extends AbstractIllager implements CrossbowAttackMob, Inve +@@ -84,6 +84,11 @@ public class Pillager extends AbstractIllager implements CrossbowAttackMob, Inve this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.pillagerMaxHealth); } @@ -855,10 +855,10 @@ index 8c06e648df453fdd4eea0aa4843fada9b6375f81..a405764724d7f4b586d8510450a62584 protected void registerGoals() { super.registerGoals(); diff --git a/src/main/java/net/minecraft/world/entity/monster/Ravager.java b/src/main/java/net/minecraft/world/entity/monster/Ravager.java -index cebe89b0868043b819fb3e9987f899926961be52..e592b5ee3a0bfce987557defed8250682373fe65 100644 +index 86704fcba15cec26eef3f77167aee9116ba27980..796dfcf5e3ee27dda08eb1e05aa5e51bdedee1a6 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Ravager.java +++ b/src/main/java/net/minecraft/world/entity/monster/Ravager.java -@@ -96,6 +96,11 @@ public class Ravager extends Raider { +@@ -97,6 +97,11 @@ public class Ravager extends Raider { this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.ravagerMaxHealth); } @@ -871,7 +871,7 @@ index cebe89b0868043b819fb3e9987f899926961be52..e592b5ee3a0bfce987557defed825068 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 277ec293cfd8f50e9e8ce6a0380a007d7ef786a1..836cd735f343312c020f6498e078cf3bf420d3cb 100644 +index 123f8418544468d5c8d0d280f7dd44ebd25339d7..ff6a91caa9bd7fa90d71a2014354c67570d4fccb 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(this, AbstractPiglin.class, true)); diff --git a/src/main/java/net/minecraft/world/entity/monster/Zoglin.java b/src/main/java/net/minecraft/world/entity/monster/Zoglin.java -index 698076b0e958aadf9736d7753df64a73dd3c17cd..76d47ba17dd140572a0be40dfda18c24851198bb 100644 +index 4bdbcb59051cc4bbc44aca2f70318275d4267b14..5027fc69d6a32474a6bfa1fd2b567996647ec172 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Zoglin.java +++ b/src/main/java/net/minecraft/world/entity/monster/Zoglin.java -@@ -102,6 +102,11 @@ public class Zoglin extends Monster implements Enemy, HoglinBase { +@@ -101,6 +101,11 @@ public class Zoglin extends Monster implements Enemy, HoglinBase { this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.zoglinMaxHealth); } @@ -1071,10 +1071,10 @@ index 698076b0e958aadf9736d7753df64a73dd3c17cd..76d47ba17dd140572a0be40dfda18c24 protected Brain.Provider 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 3d42b2ea26217243dba96174ff0eadbcdd81a6cd..de7a74f1e5181373da8dcc639245f35f77f4f09b 100644 +index b39d8ee4c6e9483a15991be3b1440384708aee65..1c2291c8a20541cc1e306efdd5263e5d8b3e0b16 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Zombie.java +++ b/src/main/java/net/minecraft/world/entity/monster/Zombie.java -@@ -138,6 +138,11 @@ public class Zombie extends Monster { +@@ -142,6 +142,11 @@ public class Zombie extends Monster { return level().purpurConfig.zombieJockeyTryExistingChickens; } @@ -1087,10 +1087,10 @@ index 3d42b2ea26217243dba96174ff0eadbcdd81a6cd..de7a74f1e5181373da8dcc639245f35f protected void registerGoals() { this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur diff --git a/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java b/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java -index ffe2144e307acebd4a8bed043db0ee0bb6bf611c..2ec3a09135f85a5de68e77511f3f213adf08712c 100644 +index cdf6753b6bb2bbb4f3ab21792bd3153988b26b75..3c4cff3f095cdf2dd74df7bf4bb8f3d5600b342d 100644 --- a/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java +++ b/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java -@@ -107,6 +107,11 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { +@@ -110,6 +110,11 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { this.getAttribute(net.minecraft.world.entity.ai.attributes.Attributes.SPAWN_REINFORCEMENTS_CHANCE).setBaseValue(this.random.nextDouble() * this.level().purpurConfig.zombieVillagerSpawnReinforcements); } @@ -1103,10 +1103,10 @@ index ffe2144e307acebd4a8bed043db0ee0bb6bf611c..2ec3a09135f85a5de68e77511f3f213a public boolean jockeyOnlyBaby() { return level().purpurConfig.zombieVillagerJockeyOnlyBaby; diff --git a/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java b/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java -index 6be751e2d434982a35bbbece4f4fc4631fb3d8e0..bd2953448e568b1a20bcc6a889cef83b88418548 100644 +index 47419219d4f435a17344361f4a60d5aab925d574..baa2bedb4c7f2c05df333ac1ff9222b5c6674a10 100644 --- a/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java +++ b/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java -@@ -84,6 +84,11 @@ public class ZombifiedPiglin extends Zombie implements NeutralMob { +@@ -85,6 +85,11 @@ public class ZombifiedPiglin extends Zombie implements NeutralMob { this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.zombifiedPiglinMaxHealth); } @@ -1119,7 +1119,7 @@ index 6be751e2d434982a35bbbece4f4fc4631fb3d8e0..bd2953448e568b1a20bcc6a889cef83b 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 a770ae0e13c4dad296dfb8f33259408ee1531c70..9ca294d5177ec7d541433d644d2fb90d937b011c 100644 +index d43e26af79be5078124d8013167f452bb46a9a4d..26af55acfdeee25f64295f50eec9a0ea0b76c58d 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 @@ -117,6 +117,11 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { @@ -1132,13 +1132,13 @@ index a770ae0e13c4dad296dfb8f33259408ee1531c70..9ca294d5177ec7d541433d644d2fb90d + } + @Override - public boolean canBeLeashed(Player player) { - return !this.isLeashed(); + public boolean canBeLeashed() { + return true; diff --git a/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java b/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java -index 57089ba787731ddda853dce959ba015abe135bfd..e5b24bd8e31ca5748185181bb6741760c86a92a1 100644 +index d54f8041b55f8b8d72dc4fda78ae456671f779d4..c397ff495930ee1b7f6479ea060c116e92e03801 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 -@@ -116,6 +116,11 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento +@@ -115,6 +115,11 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.piglinMaxHealth); } @@ -1167,11 +1167,11 @@ index 362f3fddd8090799278f4b4e58c5af5de00315f2..6c7e0f177382cb6329002dcde270f6ce return Monster.createMonsterAttributes().add(Attributes.MAX_HEALTH, 50.0).add(Attributes.MOVEMENT_SPEED, 0.35F).add(Attributes.ATTACK_DAMAGE, 7.0); } diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java -index f7d8f672a680cf2dfebba5677f97895e4a8c209f..c9cfbc8817fe62e22cb165f856ed8569668c0a60 100644 +index ba2e1ea184bf31efdf30050fdcc3a5f193d2f096..80f6a5a6553d752857ccd53815a9341c5e7502e8 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java -@@ -189,6 +189,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler - return level().purpurConfig.villagerCanBeLeashed && !this.isLeashed(); +@@ -184,6 +184,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.villagerMaxHealth); } + @Override @@ -1183,11 +1183,11 @@ index f7d8f672a680cf2dfebba5677f97895e4a8c209f..c9cfbc8817fe62e22cb165f856ed8569 public Brain getBrain() { return (Brain) super.getBrain(); // CraftBukkit - decompile error 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 9d5eaaf1869a3ecb61947ab0c09af558fa1cd283..c192f4cc5fd9cb0cf40083c4297f649ab909649d 100644 +index 6990d6dc306b1d25544793b365fd6f7be8a37201..5951e0f583b5ab8a5b13dca6d8fcb537be4be73f 100644 --- a/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java +++ b/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java -@@ -98,6 +98,11 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill - return level().purpurConfig.wanderingTraderCanBeLeashed && !this.isLeashed(); +@@ -93,6 +93,11 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill + this.getAttribute(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.wanderingTraderMaxHealth); } + @Override @@ -1199,10 +1199,10 @@ index 9d5eaaf1869a3ecb61947ab0c09af558fa1cd283..c192f4cc5fd9cb0cf40083c4297f649a 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 a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be506bfe6626 100644 +index 24b90abc3171c824008af0a8e49b7963a9636493..409cd7ab15931b378a39993e906a7cc92eb1273e 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -582,11 +582,13 @@ public class PurpurWorldConfig { +@@ -565,11 +565,13 @@ public class PurpurWorldConfig { public boolean axolotlControllable = true; public double axolotlMaxHealth = 14.0D; public int axolotlBreedingTicks = 6000; @@ -1216,7 +1216,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 } public boolean batRidable = false; -@@ -601,6 +603,7 @@ public class PurpurWorldConfig { +@@ -584,6 +586,7 @@ public class PurpurWorldConfig { public double batArmor = 0.0D; public double batArmorToughness = 0.0D; public double batAttackKnockback = 0.0D; @@ -1224,7 +1224,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 private void batSettings() { batRidable = getBoolean("mobs.bat.ridable", batRidable); batRidableInWater = getBoolean("mobs.bat.ridable-in-water", batRidableInWater); -@@ -619,6 +622,7 @@ public class PurpurWorldConfig { +@@ -602,6 +605,7 @@ public class PurpurWorldConfig { batArmor = getDouble("mobs.bat.attributes.armor", batArmor); batArmorToughness = getDouble("mobs.bat.attributes.armor_toughness", batArmorToughness); batAttackKnockback = getDouble("mobs.bat.attributes.attack_knockback", batAttackKnockback); @@ -1232,7 +1232,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 } public boolean beeRidable = false; -@@ -627,6 +631,7 @@ public class PurpurWorldConfig { +@@ -610,6 +614,7 @@ public class PurpurWorldConfig { public double beeMaxY = 320D; public double beeMaxHealth = 10.0D; public int beeBreedingTicks = 6000; @@ -1240,7 +1240,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 private void beeSettings() { beeRidable = getBoolean("mobs.bee.ridable", beeRidable); beeRidableInWater = getBoolean("mobs.bee.ridable-in-water", beeRidableInWater); -@@ -639,6 +644,7 @@ public class PurpurWorldConfig { +@@ -622,6 +627,7 @@ public class PurpurWorldConfig { } beeMaxHealth = getDouble("mobs.bee.attributes.max_health", beeMaxHealth); beeBreedingTicks = getInt("mobs.bee.breeding-delay-ticks", beeBreedingTicks); @@ -1248,7 +1248,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 } public boolean blazeRidable = false; -@@ -646,6 +652,7 @@ public class PurpurWorldConfig { +@@ -629,6 +635,7 @@ public class PurpurWorldConfig { public boolean blazeControllable = true; public double blazeMaxY = 320D; public double blazeMaxHealth = 20.0D; @@ -1256,7 +1256,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 private void blazeSettings() { blazeRidable = getBoolean("mobs.blaze.ridable", blazeRidable); blazeRidableInWater = getBoolean("mobs.blaze.ridable-in-water", blazeRidableInWater); -@@ -657,6 +664,7 @@ public class PurpurWorldConfig { +@@ -640,6 +647,7 @@ public class PurpurWorldConfig { set("mobs.blaze.attributes.max_health", oldValue); } blazeMaxHealth = getDouble("mobs.blaze.attributes.max_health", blazeMaxHealth); @@ -1264,7 +1264,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 } public boolean boggedRidable = false; -@@ -698,6 +706,7 @@ public class PurpurWorldConfig { +@@ -681,6 +689,7 @@ public class PurpurWorldConfig { public int catSpawnVillageScanRange = 48; public int catBreedingTicks = 6000; public DyeColor catDefaultCollarColor = DyeColor.RED; @@ -1272,7 +1272,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 private void catSettings() { catRidable = getBoolean("mobs.cat.ridable", catRidable); catRidableInWater = getBoolean("mobs.cat.ridable-in-water", catRidableInWater); -@@ -717,12 +726,14 @@ public class PurpurWorldConfig { +@@ -700,12 +709,14 @@ public class PurpurWorldConfig { } catch (IllegalArgumentException ignore) { catDefaultCollarColor = DyeColor.RED; } @@ -1287,7 +1287,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 private void caveSpiderSettings() { caveSpiderRidable = getBoolean("mobs.cave_spider.ridable", caveSpiderRidable); caveSpiderRidableInWater = getBoolean("mobs.cave_spider.ridable-in-water", caveSpiderRidableInWater); -@@ -733,6 +744,7 @@ public class PurpurWorldConfig { +@@ -716,6 +727,7 @@ public class PurpurWorldConfig { set("mobs.cave_spider.attributes.max_health", oldValue); } caveSpiderMaxHealth = getDouble("mobs.cave_spider.attributes.max_health", caveSpiderMaxHealth); @@ -1295,7 +1295,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 } public boolean chickenRidable = false; -@@ -741,6 +753,7 @@ public class PurpurWorldConfig { +@@ -724,6 +736,7 @@ public class PurpurWorldConfig { public double chickenMaxHealth = 4.0D; public boolean chickenRetaliate = false; public int chickenBreedingTicks = 6000; @@ -1303,7 +1303,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 private void chickenSettings() { chickenRidable = getBoolean("mobs.chicken.ridable", chickenRidable); chickenRidableInWater = getBoolean("mobs.chicken.ridable-in-water", chickenRidableInWater); -@@ -753,11 +766,13 @@ public class PurpurWorldConfig { +@@ -736,11 +749,13 @@ public class PurpurWorldConfig { chickenMaxHealth = getDouble("mobs.chicken.attributes.max_health", chickenMaxHealth); chickenRetaliate = getBoolean("mobs.chicken.retaliate", chickenRetaliate); chickenBreedingTicks = getInt("mobs.chicken.breeding-delay-ticks", chickenBreedingTicks); @@ -1317,7 +1317,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 private void codSettings() { codRidable = getBoolean("mobs.cod.ridable", codRidable); codControllable = getBoolean("mobs.cod.controllable", codControllable); -@@ -767,6 +782,7 @@ public class PurpurWorldConfig { +@@ -750,6 +765,7 @@ public class PurpurWorldConfig { set("mobs.cod.attributes.max_health", oldValue); } codMaxHealth = getDouble("mobs.cod.attributes.max_health", codMaxHealth); @@ -1325,7 +1325,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 } public boolean cowRidable = false; -@@ -775,6 +791,7 @@ public class PurpurWorldConfig { +@@ -758,6 +774,7 @@ public class PurpurWorldConfig { public double cowMaxHealth = 10.0D; public int cowFeedMushrooms = 0; public int cowBreedingTicks = 6000; @@ -1333,7 +1333,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 private void cowSettings() { cowRidable = getBoolean("mobs.cow.ridable", cowRidable); cowRidableInWater = getBoolean("mobs.cow.ridable-in-water", cowRidableInWater); -@@ -787,6 +804,7 @@ public class PurpurWorldConfig { +@@ -770,6 +787,7 @@ public class PurpurWorldConfig { cowMaxHealth = getDouble("mobs.cow.attributes.max_health", cowMaxHealth); cowFeedMushrooms = getInt("mobs.cow.feed-mushrooms-for-mooshroom", cowFeedMushrooms); cowBreedingTicks = getInt("mobs.cow.breeding-delay-ticks", cowBreedingTicks); @@ -1341,7 +1341,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 } public boolean creeperRidable = false; -@@ -796,6 +814,7 @@ public class PurpurWorldConfig { +@@ -779,6 +797,7 @@ public class PurpurWorldConfig { public double creeperChargedChance = 0.0D; public boolean creeperAllowGriefing = true; public boolean creeperBypassMobGriefing = false; @@ -1349,7 +1349,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 private void creeperSettings() { creeperRidable = getBoolean("mobs.creeper.ridable", creeperRidable); creeperRidableInWater = getBoolean("mobs.creeper.ridable-in-water", creeperRidableInWater); -@@ -809,6 +828,7 @@ public class PurpurWorldConfig { +@@ -792,6 +811,7 @@ public class PurpurWorldConfig { creeperChargedChance = getDouble("mobs.creeper.naturally-charged-chance", creeperChargedChance); creeperAllowGriefing = getBoolean("mobs.creeper.allow-griefing", creeperAllowGriefing); creeperBypassMobGriefing = getBoolean("mobs.creeper.bypass-mob-griefing", creeperBypassMobGriefing); @@ -1357,7 +1357,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 } public boolean dolphinRidable = false; -@@ -818,6 +838,7 @@ public class PurpurWorldConfig { +@@ -801,6 +821,7 @@ public class PurpurWorldConfig { public float dolphinSpitDamage = 2.0F; public double dolphinMaxHealth = 10.0D; public boolean dolphinDisableTreasureSearching = false; @@ -1365,7 +1365,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 private void dolphinSettings() { dolphinRidable = getBoolean("mobs.dolphin.ridable", dolphinRidable); dolphinControllable = getBoolean("mobs.dolphin.controllable", dolphinControllable); -@@ -831,6 +852,7 @@ public class PurpurWorldConfig { +@@ -814,6 +835,7 @@ public class PurpurWorldConfig { } dolphinMaxHealth = getDouble("mobs.dolphin.attributes.max_health", dolphinMaxHealth); dolphinDisableTreasureSearching = getBoolean("mobs.dolphin.disable-treasure-searching", dolphinDisableTreasureSearching); @@ -1373,7 +1373,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 } public boolean donkeyRidableInWater = false; -@@ -841,6 +863,7 @@ public class PurpurWorldConfig { +@@ -824,6 +846,7 @@ public class PurpurWorldConfig { public double donkeyMovementSpeedMin = 0.175D; public double donkeyMovementSpeedMax = 0.175D; public int donkeyBreedingTicks = 6000; @@ -1381,7 +1381,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 private void donkeySettings() { donkeyRidableInWater = getBoolean("mobs.donkey.ridable-in-water", donkeyRidableInWater); if (PurpurConfig.version < 10) { -@@ -857,6 +880,7 @@ public class PurpurWorldConfig { +@@ -840,6 +863,7 @@ public class PurpurWorldConfig { donkeyMovementSpeedMin = getDouble("mobs.donkey.attributes.movement_speed.min", donkeyMovementSpeedMin); donkeyMovementSpeedMax = getDouble("mobs.donkey.attributes.movement_speed.max", donkeyMovementSpeedMax); donkeyBreedingTicks = getInt("mobs.donkey.breeding-delay-ticks", donkeyBreedingTicks); @@ -1389,7 +1389,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 } public boolean drownedRidable = false; -@@ -867,6 +891,7 @@ public class PurpurWorldConfig { +@@ -850,6 +874,7 @@ public class PurpurWorldConfig { public boolean drownedJockeyOnlyBaby = true; public double drownedJockeyChance = 0.05D; public boolean drownedJockeyTryExistingChickens = true; @@ -1397,7 +1397,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 private void drownedSettings() { drownedRidable = getBoolean("mobs.drowned.ridable", drownedRidable); drownedRidableInWater = getBoolean("mobs.drowned.ridable-in-water", drownedRidableInWater); -@@ -881,11 +906,13 @@ public class PurpurWorldConfig { +@@ -864,11 +889,13 @@ public class PurpurWorldConfig { drownedJockeyOnlyBaby = getBoolean("mobs.drowned.jockey.only-babies", drownedJockeyOnlyBaby); drownedJockeyChance = getDouble("mobs.drowned.jockey.chance", drownedJockeyChance); drownedJockeyTryExistingChickens = getBoolean("mobs.drowned.jockey.try-existing-chickens", drownedJockeyTryExistingChickens); @@ -1411,7 +1411,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 private void elderGuardianSettings() { elderGuardianRidable = getBoolean("mobs.elder_guardian.ridable", elderGuardianRidable); elderGuardianControllable = getBoolean("mobs.elder_guardian.controllable", elderGuardianControllable); -@@ -895,6 +922,7 @@ public class PurpurWorldConfig { +@@ -878,6 +905,7 @@ public class PurpurWorldConfig { set("mobs.elder_guardian.attributes.max_health", oldValue); } elderGuardianMaxHealth = getDouble("mobs.elder_guardian.attributes.max_health", elderGuardianMaxHealth); @@ -1419,7 +1419,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 } public boolean enderDragonRidable = false; -@@ -904,6 +932,7 @@ public class PurpurWorldConfig { +@@ -887,6 +915,7 @@ public class PurpurWorldConfig { public double enderDragonMaxHealth = 200.0D; public boolean enderDragonAlwaysDropsFullExp = false; public boolean enderDragonBypassMobGriefing = false; @@ -1427,7 +1427,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 private void enderDragonSettings() { enderDragonRidable = getBoolean("mobs.ender_dragon.ridable", enderDragonRidable); enderDragonRidableInWater = getBoolean("mobs.ender_dragon.ridable-in-water", enderDragonRidableInWater); -@@ -921,6 +950,7 @@ public class PurpurWorldConfig { +@@ -904,6 +933,7 @@ public class PurpurWorldConfig { enderDragonMaxHealth = getDouble("mobs.ender_dragon.attributes.max_health", enderDragonMaxHealth); enderDragonAlwaysDropsFullExp = getBoolean("mobs.ender_dragon.always-drop-full-exp", enderDragonAlwaysDropsFullExp); enderDragonBypassMobGriefing = getBoolean("mobs.ender_dragon.bypass-mob-griefing", enderDragonBypassMobGriefing); @@ -1435,7 +1435,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 } public boolean endermanRidable = false; -@@ -930,6 +960,7 @@ public class PurpurWorldConfig { +@@ -913,6 +943,7 @@ public class PurpurWorldConfig { public boolean endermanAllowGriefing = true; public boolean endermanDespawnEvenWithBlock = false; public boolean endermanBypassMobGriefing = false; @@ -1443,7 +1443,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 private void endermanSettings() { endermanRidable = getBoolean("mobs.enderman.ridable", endermanRidable); endermanRidableInWater = getBoolean("mobs.enderman.ridable-in-water", endermanRidableInWater); -@@ -943,12 +974,14 @@ public class PurpurWorldConfig { +@@ -926,12 +957,14 @@ public class PurpurWorldConfig { endermanAllowGriefing = getBoolean("mobs.enderman.allow-griefing", endermanAllowGriefing); endermanDespawnEvenWithBlock = getBoolean("mobs.enderman.can-despawn-with-held-block", endermanDespawnEvenWithBlock); endermanBypassMobGriefing = getBoolean("mobs.enderman.bypass-mob-griefing", endermanBypassMobGriefing); @@ -1458,7 +1458,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 private void endermiteSettings() { endermiteRidable = getBoolean("mobs.endermite.ridable", endermiteRidable); endermiteRidableInWater = getBoolean("mobs.endermite.ridable-in-water", endermiteRidableInWater); -@@ -959,6 +992,7 @@ public class PurpurWorldConfig { +@@ -942,6 +975,7 @@ public class PurpurWorldConfig { set("mobs.endermite.attributes.max_health", oldValue); } endermiteMaxHealth = getDouble("mobs.endermite.attributes.max_health", endermiteMaxHealth); @@ -1466,7 +1466,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 } public boolean evokerRidable = false; -@@ -966,6 +1000,7 @@ public class PurpurWorldConfig { +@@ -949,6 +983,7 @@ public class PurpurWorldConfig { public boolean evokerControllable = true; public double evokerMaxHealth = 24.0D; public boolean evokerBypassMobGriefing = false; @@ -1474,7 +1474,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 private void evokerSettings() { evokerRidable = getBoolean("mobs.evoker.ridable", evokerRidable); evokerRidableInWater = getBoolean("mobs.evoker.ridable-in-water", evokerRidableInWater); -@@ -977,6 +1012,7 @@ public class PurpurWorldConfig { +@@ -960,6 +995,7 @@ public class PurpurWorldConfig { } evokerMaxHealth = getDouble("mobs.evoker.attributes.max_health", evokerMaxHealth); evokerBypassMobGriefing = getBoolean("mobs.evoker.bypass-mob-griefing", evokerBypassMobGriefing); @@ -1482,7 +1482,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 } public boolean foxRidable = false; -@@ -986,6 +1022,7 @@ public class PurpurWorldConfig { +@@ -969,6 +1005,7 @@ public class PurpurWorldConfig { public boolean foxTypeChangesWithTulips = false; public int foxBreedingTicks = 6000; public boolean foxBypassMobGriefing = false; @@ -1490,7 +1490,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 private void foxSettings() { foxRidable = getBoolean("mobs.fox.ridable", foxRidable); foxRidableInWater = getBoolean("mobs.fox.ridable-in-water", foxRidableInWater); -@@ -999,6 +1036,7 @@ public class PurpurWorldConfig { +@@ -982,6 +1019,7 @@ public class PurpurWorldConfig { foxTypeChangesWithTulips = getBoolean("mobs.fox.tulips-change-type", foxTypeChangesWithTulips); foxBreedingTicks = getInt("mobs.fox.breeding-delay-ticks", foxBreedingTicks); foxBypassMobGriefing = getBoolean("mobs.fox.bypass-mob-griefing", foxBypassMobGriefing); @@ -1498,7 +1498,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 } public boolean frogRidable = false; -@@ -1019,6 +1057,7 @@ public class PurpurWorldConfig { +@@ -1002,6 +1040,7 @@ public class PurpurWorldConfig { public boolean ghastControllable = true; public double ghastMaxY = 320D; public double ghastMaxHealth = 10.0D; @@ -1506,7 +1506,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 private void ghastSettings() { ghastRidable = getBoolean("mobs.ghast.ridable", ghastRidable); ghastRidableInWater = getBoolean("mobs.ghast.ridable-in-water", ghastRidableInWater); -@@ -1030,6 +1069,7 @@ public class PurpurWorldConfig { +@@ -1013,6 +1052,7 @@ public class PurpurWorldConfig { set("mobs.ghast.attributes.max_health", oldValue); } ghastMaxHealth = getDouble("mobs.ghast.attributes.max_health", ghastMaxHealth); @@ -1514,7 +1514,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 } public boolean giantRidable = false; -@@ -1042,6 +1082,7 @@ public class PurpurWorldConfig { +@@ -1025,6 +1065,7 @@ public class PurpurWorldConfig { public float giantJumpHeight = 1.0F; public boolean giantHaveAI = false; public boolean giantHaveHostileAI = false; @@ -1522,7 +1522,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 private void giantSettings() { giantRidable = getBoolean("mobs.giant.ridable", giantRidable); giantRidableInWater = getBoolean("mobs.giant.ridable-in-water", giantRidableInWater); -@@ -1062,17 +1103,20 @@ public class PurpurWorldConfig { +@@ -1045,17 +1086,20 @@ public class PurpurWorldConfig { giantJumpHeight = (float) getDouble("mobs.giant.jump-height", giantJumpHeight); giantHaveAI = getBoolean("mobs.giant.have-ai", giantHaveAI); giantHaveHostileAI = getBoolean("mobs.giant.have-hostile-ai", giantHaveHostileAI); @@ -1543,7 +1543,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 } public boolean goatRidable = false; -@@ -1080,17 +1124,20 @@ public class PurpurWorldConfig { +@@ -1063,17 +1107,20 @@ public class PurpurWorldConfig { public boolean goatControllable = true; public double goatMaxHealth = 10.0D; public int goatBreedingTicks = 6000; @@ -1564,7 +1564,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 private void guardianSettings() { guardianRidable = getBoolean("mobs.guardian.ridable", guardianRidable); guardianControllable = getBoolean("mobs.guardian.controllable", guardianControllable); -@@ -1100,6 +1147,7 @@ public class PurpurWorldConfig { +@@ -1083,6 +1130,7 @@ public class PurpurWorldConfig { set("mobs.guardian.attributes.max_health", oldValue); } guardianMaxHealth = getDouble("mobs.guardian.attributes.max_health", guardianMaxHealth); @@ -1572,7 +1572,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 } public boolean hoglinRidable = false; -@@ -1107,6 +1155,7 @@ public class PurpurWorldConfig { +@@ -1090,6 +1138,7 @@ public class PurpurWorldConfig { public boolean hoglinControllable = true; public double hoglinMaxHealth = 40.0D; public int hoglinBreedingTicks = 6000; @@ -1580,7 +1580,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 private void hoglinSettings() { hoglinRidable = getBoolean("mobs.hoglin.ridable", hoglinRidable); hoglinRidableInWater = getBoolean("mobs.hoglin.ridable-in-water", hoglinRidableInWater); -@@ -1118,6 +1167,7 @@ public class PurpurWorldConfig { +@@ -1101,6 +1150,7 @@ public class PurpurWorldConfig { } hoglinMaxHealth = getDouble("mobs.hoglin.attributes.max_health", hoglinMaxHealth); hoglinBreedingTicks = getInt("mobs.hoglin.breeding-delay-ticks", hoglinBreedingTicks); @@ -1588,7 +1588,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 } public boolean horseRidableInWater = false; -@@ -1128,6 +1178,7 @@ public class PurpurWorldConfig { +@@ -1111,6 +1161,7 @@ public class PurpurWorldConfig { public double horseMovementSpeedMin = 0.1125D; public double horseMovementSpeedMax = 0.3375D; public int horseBreedingTicks = 6000; @@ -1596,7 +1596,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 private void horseSettings() { horseRidableInWater = getBoolean("mobs.horse.ridable-in-water", horseRidableInWater); if (PurpurConfig.version < 10) { -@@ -1144,6 +1195,7 @@ public class PurpurWorldConfig { +@@ -1127,6 +1178,7 @@ public class PurpurWorldConfig { horseMovementSpeedMin = getDouble("mobs.horse.attributes.movement_speed.min", horseMovementSpeedMin); horseMovementSpeedMax = getDouble("mobs.horse.attributes.movement_speed.max", horseMovementSpeedMax); horseBreedingTicks = getInt("mobs.horse.breeding-delay-ticks", horseBreedingTicks); @@ -1604,7 +1604,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 } public boolean huskRidable = false; -@@ -1154,6 +1206,7 @@ public class PurpurWorldConfig { +@@ -1137,6 +1189,7 @@ public class PurpurWorldConfig { public boolean huskJockeyOnlyBaby = true; public double huskJockeyChance = 0.05D; public boolean huskJockeyTryExistingChickens = true; @@ -1612,7 +1612,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 private void huskSettings() { huskRidable = getBoolean("mobs.husk.ridable", huskRidable); huskRidableInWater = getBoolean("mobs.husk.ridable-in-water", huskRidableInWater); -@@ -1168,6 +1221,7 @@ public class PurpurWorldConfig { +@@ -1151,6 +1204,7 @@ public class PurpurWorldConfig { huskJockeyOnlyBaby = getBoolean("mobs.husk.jockey.only-babies", huskJockeyOnlyBaby); huskJockeyChance = getDouble("mobs.husk.jockey.chance", huskJockeyChance); huskJockeyTryExistingChickens = getBoolean("mobs.husk.jockey.try-existing-chickens", huskJockeyTryExistingChickens); @@ -1620,7 +1620,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 } public boolean illusionerRidable = false; -@@ -1176,6 +1230,7 @@ public class PurpurWorldConfig { +@@ -1159,6 +1213,7 @@ public class PurpurWorldConfig { public double illusionerMovementSpeed = 0.5D; public double illusionerFollowRange = 18.0D; public double illusionerMaxHealth = 32.0D; @@ -1628,7 +1628,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 private void illusionerSettings() { illusionerRidable = getBoolean("mobs.illusioner.ridable", illusionerRidable); illusionerRidableInWater = getBoolean("mobs.illusioner.ridable-in-water", illusionerRidableInWater); -@@ -1192,6 +1247,7 @@ public class PurpurWorldConfig { +@@ -1175,6 +1230,7 @@ public class PurpurWorldConfig { set("mobs.illusioner.attributes.max_health", oldValue); } illusionerMaxHealth = getDouble("mobs.illusioner.attributes.max_health", illusionerMaxHealth); @@ -1636,7 +1636,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 } public boolean ironGolemRidable = false; -@@ -1199,6 +1255,7 @@ public class PurpurWorldConfig { +@@ -1182,6 +1238,7 @@ public class PurpurWorldConfig { public boolean ironGolemControllable = true; public boolean ironGolemCanSwim = false; public double ironGolemMaxHealth = 100.0D; @@ -1644,7 +1644,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 private void ironGolemSettings() { ironGolemRidable = getBoolean("mobs.iron_golem.ridable", ironGolemRidable); ironGolemRidableInWater = getBoolean("mobs.iron_golem.ridable-in-water", ironGolemRidableInWater); -@@ -1210,6 +1267,7 @@ public class PurpurWorldConfig { +@@ -1193,6 +1250,7 @@ public class PurpurWorldConfig { set("mobs.iron_golem.attributes.max_health", oldValue); } ironGolemMaxHealth = getDouble("mobs.iron_golem.attributes.max_health", ironGolemMaxHealth); @@ -1652,7 +1652,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 } public boolean llamaRidable = false; -@@ -1222,6 +1280,7 @@ public class PurpurWorldConfig { +@@ -1205,6 +1263,7 @@ public class PurpurWorldConfig { public double llamaMovementSpeedMin = 0.175D; public double llamaMovementSpeedMax = 0.175D; public int llamaBreedingTicks = 6000; @@ -1660,7 +1660,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 private void llamaSettings() { llamaRidable = getBoolean("mobs.llama.ridable", llamaRidable); llamaRidableInWater = getBoolean("mobs.llama.ridable-in-water", llamaRidableInWater); -@@ -1240,6 +1299,7 @@ public class PurpurWorldConfig { +@@ -1223,6 +1282,7 @@ public class PurpurWorldConfig { llamaMovementSpeedMin = getDouble("mobs.llama.attributes.movement_speed.min", llamaMovementSpeedMin); llamaMovementSpeedMax = getDouble("mobs.llama.attributes.movement_speed.max", llamaMovementSpeedMax); llamaBreedingTicks = getInt("mobs.llama.breeding-delay-ticks", llamaBreedingTicks); @@ -1668,7 +1668,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 } public boolean magmaCubeRidable = false; -@@ -1249,6 +1309,7 @@ public class PurpurWorldConfig { +@@ -1232,6 +1292,7 @@ public class PurpurWorldConfig { public String magmaCubeAttackDamage = "size"; public Map magmaCubeMaxHealthCache = new HashMap<>(); public Map magmaCubeAttackDamageCache = new HashMap<>(); @@ -1676,7 +1676,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 private void magmaCubeSettings() { magmaCubeRidable = getBoolean("mobs.magma_cube.ridable", magmaCubeRidable); magmaCubeRidableInWater = getBoolean("mobs.magma_cube.ridable-in-water", magmaCubeRidableInWater); -@@ -1262,6 +1323,7 @@ public class PurpurWorldConfig { +@@ -1245,6 +1306,7 @@ public class PurpurWorldConfig { magmaCubeAttackDamage = getString("mobs.magma_cube.attributes.attack_damage", magmaCubeAttackDamage); magmaCubeMaxHealthCache.clear(); magmaCubeAttackDamageCache.clear(); @@ -1684,7 +1684,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 } public boolean mooshroomRidable = false; -@@ -1269,6 +1331,7 @@ public class PurpurWorldConfig { +@@ -1252,6 +1314,7 @@ public class PurpurWorldConfig { public boolean mooshroomControllable = true; public double mooshroomMaxHealth = 10.0D; public int mooshroomBreedingTicks = 6000; @@ -1692,7 +1692,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 private void mooshroomSettings() { mooshroomRidable = getBoolean("mobs.mooshroom.ridable", mooshroomRidable); mooshroomRidableInWater = getBoolean("mobs.mooshroom.ridable-in-water", mooshroomRidableInWater); -@@ -1280,6 +1343,7 @@ public class PurpurWorldConfig { +@@ -1263,6 +1326,7 @@ public class PurpurWorldConfig { } mooshroomMaxHealth = getDouble("mobs.mooshroom.attributes.max_health", mooshroomMaxHealth); mooshroomBreedingTicks = getInt("mobs.mooshroom.breeding-delay-ticks", mooshroomBreedingTicks); @@ -1700,7 +1700,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 } public boolean muleRidableInWater = false; -@@ -1290,6 +1354,7 @@ public class PurpurWorldConfig { +@@ -1273,6 +1337,7 @@ public class PurpurWorldConfig { public double muleMovementSpeedMin = 0.175D; public double muleMovementSpeedMax = 0.175D; public int muleBreedingTicks = 6000; @@ -1708,7 +1708,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 private void muleSettings() { muleRidableInWater = getBoolean("mobs.mule.ridable-in-water", muleRidableInWater); if (PurpurConfig.version < 10) { -@@ -1306,6 +1371,7 @@ public class PurpurWorldConfig { +@@ -1289,6 +1354,7 @@ public class PurpurWorldConfig { muleMovementSpeedMin = getDouble("mobs.mule.attributes.movement_speed.min", muleMovementSpeedMin); muleMovementSpeedMax = getDouble("mobs.mule.attributes.movement_speed.max", muleMovementSpeedMax); muleBreedingTicks = getInt("mobs.mule.breeding-delay-ticks", muleBreedingTicks); @@ -1716,7 +1716,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 } public boolean ocelotRidable = false; -@@ -1313,6 +1379,7 @@ public class PurpurWorldConfig { +@@ -1296,6 +1362,7 @@ public class PurpurWorldConfig { public boolean ocelotControllable = true; public double ocelotMaxHealth = 10.0D; public int ocelotBreedingTicks = 6000; @@ -1724,7 +1724,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 private void ocelotSettings() { ocelotRidable = getBoolean("mobs.ocelot.ridable", ocelotRidable); ocelotRidableInWater = getBoolean("mobs.ocelot.ridable-in-water", ocelotRidableInWater); -@@ -1324,6 +1391,7 @@ public class PurpurWorldConfig { +@@ -1307,6 +1374,7 @@ public class PurpurWorldConfig { } ocelotMaxHealth = getDouble("mobs.ocelot.attributes.max_health", ocelotMaxHealth); ocelotBreedingTicks = getInt("mobs.ocelot.breeding-delay-ticks", ocelotBreedingTicks); @@ -1732,7 +1732,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 } public boolean pandaRidable = false; -@@ -1331,6 +1399,7 @@ public class PurpurWorldConfig { +@@ -1314,6 +1382,7 @@ public class PurpurWorldConfig { public boolean pandaControllable = true; public double pandaMaxHealth = 20.0D; public int pandaBreedingTicks = 6000; @@ -1740,7 +1740,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 private void pandaSettings() { pandaRidable = getBoolean("mobs.panda.ridable", pandaRidable); pandaRidableInWater = getBoolean("mobs.panda.ridable-in-water", pandaRidableInWater); -@@ -1342,6 +1411,7 @@ public class PurpurWorldConfig { +@@ -1325,6 +1394,7 @@ public class PurpurWorldConfig { } pandaMaxHealth = getDouble("mobs.panda.attributes.max_health", pandaMaxHealth); pandaBreedingTicks = getInt("mobs.panda.breeding-delay-ticks", pandaBreedingTicks); @@ -1748,7 +1748,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 } public boolean parrotRidable = false; -@@ -1349,6 +1419,7 @@ public class PurpurWorldConfig { +@@ -1332,6 +1402,7 @@ public class PurpurWorldConfig { public boolean parrotControllable = true; public double parrotMaxY = 320D; public double parrotMaxHealth = 6.0D; @@ -1756,7 +1756,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 private void parrotSettings() { parrotRidable = getBoolean("mobs.parrot.ridable", parrotRidable); parrotRidableInWater = getBoolean("mobs.parrot.ridable-in-water", parrotRidableInWater); -@@ -1360,6 +1431,7 @@ public class PurpurWorldConfig { +@@ -1343,6 +1414,7 @@ public class PurpurWorldConfig { set("mobs.parrot.attributes.max_health", oldValue); } parrotMaxHealth = getDouble("mobs.parrot.attributes.max_health", parrotMaxHealth); @@ -1764,7 +1764,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 } public boolean phantomRidable = false; -@@ -1386,6 +1458,7 @@ public class PurpurWorldConfig { +@@ -1369,6 +1441,7 @@ public class PurpurWorldConfig { public boolean phantomIgnorePlayersWithTorch = false; public boolean phantomBurnInDaylight = true; public boolean phantomFlamesOnSwoop = false; @@ -1772,7 +1772,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 private void phantomSettings() { phantomRidable = getBoolean("mobs.phantom.ridable", phantomRidable); phantomRidableInWater = getBoolean("mobs.phantom.ridable-in-water", phantomRidableInWater); -@@ -1420,6 +1493,7 @@ public class PurpurWorldConfig { +@@ -1403,6 +1476,7 @@ public class PurpurWorldConfig { phantomBurnInDaylight = getBoolean("mobs.phantom.burn-in-daylight", phantomBurnInDaylight); phantomIgnorePlayersWithTorch = getBoolean("mobs.phantom.ignore-players-with-torch", phantomIgnorePlayersWithTorch); phantomFlamesOnSwoop = getBoolean("mobs.phantom.flames-on-swoop", phantomFlamesOnSwoop); @@ -1780,7 +1780,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 } public boolean pigRidable = false; -@@ -1428,6 +1502,7 @@ public class PurpurWorldConfig { +@@ -1411,6 +1485,7 @@ public class PurpurWorldConfig { public double pigMaxHealth = 10.0D; public boolean pigGiveSaddleBack = false; public int pigBreedingTicks = 6000; @@ -1788,7 +1788,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 private void pigSettings() { pigRidable = getBoolean("mobs.pig.ridable", pigRidable); pigRidableInWater = getBoolean("mobs.pig.ridable-in-water", pigRidableInWater); -@@ -1440,6 +1515,7 @@ public class PurpurWorldConfig { +@@ -1423,6 +1498,7 @@ public class PurpurWorldConfig { pigMaxHealth = getDouble("mobs.pig.attributes.max_health", pigMaxHealth); pigGiveSaddleBack = getBoolean("mobs.pig.give-saddle-back", pigGiveSaddleBack); pigBreedingTicks = getInt("mobs.pig.breeding-delay-ticks", pigBreedingTicks); @@ -1796,7 +1796,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 } public boolean piglinRidable = false; -@@ -1447,6 +1523,7 @@ public class PurpurWorldConfig { +@@ -1430,6 +1506,7 @@ public class PurpurWorldConfig { public boolean piglinControllable = true; public double piglinMaxHealth = 16.0D; public boolean piglinBypassMobGriefing = false; @@ -1804,7 +1804,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 private void piglinSettings() { piglinRidable = getBoolean("mobs.piglin.ridable", piglinRidable); piglinRidableInWater = getBoolean("mobs.piglin.ridable-in-water", piglinRidableInWater); -@@ -1458,12 +1535,14 @@ public class PurpurWorldConfig { +@@ -1441,12 +1518,14 @@ public class PurpurWorldConfig { } piglinMaxHealth = getDouble("mobs.piglin.attributes.max_health", piglinMaxHealth); piglinBypassMobGriefing = getBoolean("mobs.piglin.bypass-mob-griefing", piglinBypassMobGriefing); @@ -1819,7 +1819,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 private void piglinBruteSettings() { piglinBruteRidable = getBoolean("mobs.piglin_brute.ridable", piglinBruteRidable); piglinBruteRidableInWater = getBoolean("mobs.piglin_brute.ridable-in-water", piglinBruteRidableInWater); -@@ -1474,6 +1553,7 @@ public class PurpurWorldConfig { +@@ -1457,6 +1536,7 @@ public class PurpurWorldConfig { set("mobs.piglin_brute.attributes.max_health", oldValue); } piglinBruteMaxHealth = getDouble("mobs.piglin_brute.attributes.max_health", piglinBruteMaxHealth); @@ -1827,7 +1827,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 } public boolean pillagerRidable = false; -@@ -1481,6 +1561,7 @@ public class PurpurWorldConfig { +@@ -1464,6 +1544,7 @@ public class PurpurWorldConfig { public boolean pillagerControllable = true; public double pillagerMaxHealth = 24.0D; public boolean pillagerBypassMobGriefing = false; @@ -1835,7 +1835,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 private void pillagerSettings() { pillagerRidable = getBoolean("mobs.pillager.ridable", pillagerRidable); pillagerRidableInWater = getBoolean("mobs.pillager.ridable-in-water", pillagerRidableInWater); -@@ -1492,6 +1573,7 @@ public class PurpurWorldConfig { +@@ -1475,6 +1556,7 @@ public class PurpurWorldConfig { } pillagerMaxHealth = getDouble("mobs.pillager.attributes.max_health", pillagerMaxHealth); pillagerBypassMobGriefing = getBoolean("mobs.pillager.bypass-mob-griefing", pillagerBypassMobGriefing); @@ -1843,7 +1843,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 } public boolean polarBearRidable = false; -@@ -1501,6 +1583,7 @@ public class PurpurWorldConfig { +@@ -1484,6 +1566,7 @@ public class PurpurWorldConfig { public String polarBearBreedableItemString = ""; public Item polarBearBreedableItem = null; public int polarBearBreedingTicks = 6000; @@ -1851,7 +1851,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 private void polarBearSettings() { polarBearRidable = getBoolean("mobs.polar_bear.ridable", polarBearRidable); polarBearRidableInWater = getBoolean("mobs.polar_bear.ridable-in-water", polarBearRidableInWater); -@@ -1515,11 +1598,13 @@ public class PurpurWorldConfig { +@@ -1498,11 +1581,13 @@ public class PurpurWorldConfig { Item item = BuiltInRegistries.ITEM.get(new ResourceLocation(polarBearBreedableItemString)); if (item != Items.AIR) polarBearBreedableItem = item; polarBearBreedingTicks = getInt("mobs.polar_bear.breeding-delay-ticks", polarBearBreedingTicks); @@ -1865,7 +1865,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 private void pufferfishSettings() { pufferfishRidable = getBoolean("mobs.pufferfish.ridable", pufferfishRidable); pufferfishControllable = getBoolean("mobs.pufferfish.controllable", pufferfishControllable); -@@ -1529,6 +1614,7 @@ public class PurpurWorldConfig { +@@ -1512,6 +1597,7 @@ public class PurpurWorldConfig { set("mobs.pufferfish.attributes.max_health", oldValue); } pufferfishMaxHealth = getDouble("mobs.pufferfish.attributes.max_health", pufferfishMaxHealth); @@ -1873,7 +1873,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 } public boolean rabbitRidable = false; -@@ -1539,6 +1625,7 @@ public class PurpurWorldConfig { +@@ -1522,6 +1608,7 @@ public class PurpurWorldConfig { public double rabbitNaturalKiller = 0.0D; public int rabbitBreedingTicks = 6000; public boolean rabbitBypassMobGriefing = false; @@ -1881,7 +1881,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 private void rabbitSettings() { rabbitRidable = getBoolean("mobs.rabbit.ridable", rabbitRidable); rabbitRidableInWater = getBoolean("mobs.rabbit.ridable-in-water", rabbitRidableInWater); -@@ -1553,6 +1640,7 @@ public class PurpurWorldConfig { +@@ -1536,6 +1623,7 @@ public class PurpurWorldConfig { rabbitNaturalKiller = getDouble("mobs.rabbit.spawn-killer-rabbit-chance", rabbitNaturalKiller); rabbitBreedingTicks = getInt("mobs.rabbit.breeding-delay-ticks", rabbitBreedingTicks); rabbitBypassMobGriefing = getBoolean("mobs.rabbit.bypass-mob-griefing", rabbitBypassMobGriefing); @@ -1889,7 +1889,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 } public boolean ravagerRidable = false; -@@ -1560,6 +1648,7 @@ public class PurpurWorldConfig { +@@ -1543,6 +1631,7 @@ public class PurpurWorldConfig { public boolean ravagerControllable = true; public double ravagerMaxHealth = 100.0D; public boolean ravagerBypassMobGriefing = false; @@ -1897,7 +1897,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 private void ravagerSettings() { ravagerRidable = getBoolean("mobs.ravager.ridable", ravagerRidable); ravagerRidableInWater = getBoolean("mobs.ravager.ridable-in-water", ravagerRidableInWater); -@@ -1571,11 +1660,13 @@ public class PurpurWorldConfig { +@@ -1554,11 +1643,13 @@ public class PurpurWorldConfig { } ravagerMaxHealth = getDouble("mobs.ravager.attributes.max_health", ravagerMaxHealth); ravagerBypassMobGriefing = getBoolean("mobs.ravager.bypass-mob-griefing", ravagerBypassMobGriefing); @@ -1911,7 +1911,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 private void salmonSettings() { salmonRidable = getBoolean("mobs.salmon.ridable", salmonRidable); salmonControllable = getBoolean("mobs.salmon.controllable", salmonControllable); -@@ -1585,6 +1676,7 @@ public class PurpurWorldConfig { +@@ -1568,6 +1659,7 @@ public class PurpurWorldConfig { set("mobs.salmon.attributes.max_health", oldValue); } salmonMaxHealth = getDouble("mobs.salmon.attributes.max_health", salmonMaxHealth); @@ -1919,7 +1919,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 } public boolean sheepRidable = false; -@@ -1593,6 +1685,7 @@ public class PurpurWorldConfig { +@@ -1576,6 +1668,7 @@ public class PurpurWorldConfig { public double sheepMaxHealth = 8.0D; public int sheepBreedingTicks = 6000; public boolean sheepBypassMobGriefing = false; @@ -1927,7 +1927,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 private void sheepSettings() { sheepRidable = getBoolean("mobs.sheep.ridable", sheepRidable); sheepRidableInWater = getBoolean("mobs.sheep.ridable-in-water", sheepRidableInWater); -@@ -1605,12 +1698,14 @@ public class PurpurWorldConfig { +@@ -1588,12 +1681,14 @@ public class PurpurWorldConfig { sheepMaxHealth = getDouble("mobs.sheep.attributes.max_health", sheepMaxHealth); sheepBreedingTicks = getInt("mobs.sheep.breeding-delay-ticks", sheepBreedingTicks); sheepBypassMobGriefing = getBoolean("mobs.sheep.bypass-mob-griefing", sheepBypassMobGriefing); @@ -1942,7 +1942,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 private void shulkerSettings() { shulkerRidable = getBoolean("mobs.shulker.ridable", shulkerRidable); shulkerRidableInWater = getBoolean("mobs.shulker.ridable-in-water", shulkerRidableInWater); -@@ -1621,6 +1716,7 @@ public class PurpurWorldConfig { +@@ -1604,6 +1699,7 @@ public class PurpurWorldConfig { set("mobs.shulker.attributes.max_health", oldValue); } shulkerMaxHealth = getDouble("mobs.shulker.attributes.max_health", shulkerMaxHealth); @@ -1950,7 +1950,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 } public boolean silverfishRidable = false; -@@ -1628,6 +1724,7 @@ public class PurpurWorldConfig { +@@ -1611,6 +1707,7 @@ public class PurpurWorldConfig { public boolean silverfishControllable = true; public double silverfishMaxHealth = 8.0D; public boolean silverfishBypassMobGriefing = false; @@ -1958,7 +1958,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 private void silverfishSettings() { silverfishRidable = getBoolean("mobs.silverfish.ridable", silverfishRidable); silverfishRidableInWater = getBoolean("mobs.silverfish.ridable-in-water", silverfishRidableInWater); -@@ -1639,12 +1736,14 @@ public class PurpurWorldConfig { +@@ -1622,12 +1719,14 @@ public class PurpurWorldConfig { } silverfishMaxHealth = getDouble("mobs.silverfish.attributes.max_health", silverfishMaxHealth); silverfishBypassMobGriefing = getBoolean("mobs.silverfish.bypass-mob-griefing", silverfishBypassMobGriefing); @@ -1973,7 +1973,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 private void skeletonSettings() { skeletonRidable = getBoolean("mobs.skeleton.ridable", skeletonRidable); skeletonRidableInWater = getBoolean("mobs.skeleton.ridable-in-water", skeletonRidableInWater); -@@ -1655,6 +1754,7 @@ public class PurpurWorldConfig { +@@ -1638,6 +1737,7 @@ public class PurpurWorldConfig { set("mobs.skeleton.attributes.max_health", oldValue); } skeletonMaxHealth = getDouble("mobs.skeleton.attributes.max_health", skeletonMaxHealth); @@ -1981,7 +1981,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 } public boolean skeletonHorseRidable = false; -@@ -1666,6 +1766,7 @@ public class PurpurWorldConfig { +@@ -1649,6 +1749,7 @@ public class PurpurWorldConfig { public double skeletonHorseJumpStrengthMax = 1.0D; public double skeletonHorseMovementSpeedMin = 0.2D; public double skeletonHorseMovementSpeedMax = 0.2D; @@ -1989,7 +1989,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 private void skeletonHorseSettings() { skeletonHorseRidable = getBoolean("mobs.skeleton_horse.ridable", skeletonHorseRidable); skeletonHorseRidableInWater = getBoolean("mobs.skeleton_horse.ridable-in-water", skeletonHorseRidableInWater); -@@ -1682,6 +1783,7 @@ public class PurpurWorldConfig { +@@ -1665,6 +1766,7 @@ public class PurpurWorldConfig { skeletonHorseJumpStrengthMax = getDouble("mobs.skeleton_horse.attributes.jump_strength.max", skeletonHorseJumpStrengthMax); skeletonHorseMovementSpeedMin = getDouble("mobs.skeleton_horse.attributes.movement_speed.min", skeletonHorseMovementSpeedMin); skeletonHorseMovementSpeedMax = getDouble("mobs.skeleton_horse.attributes.movement_speed.max", skeletonHorseMovementSpeedMax); @@ -1997,7 +1997,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 } public boolean slimeRidable = false; -@@ -1691,6 +1793,7 @@ public class PurpurWorldConfig { +@@ -1674,6 +1776,7 @@ public class PurpurWorldConfig { public String slimeAttackDamage = "size"; public Map slimeMaxHealthCache = new HashMap<>(); public Map slimeAttackDamageCache = new HashMap<>(); @@ -2005,7 +2005,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 private void slimeSettings() { slimeRidable = getBoolean("mobs.slime.ridable", slimeRidable); slimeRidableInWater = getBoolean("mobs.slime.ridable-in-water", slimeRidableInWater); -@@ -1704,6 +1807,7 @@ public class PurpurWorldConfig { +@@ -1687,6 +1790,7 @@ public class PurpurWorldConfig { slimeAttackDamage = getString("mobs.slime.attributes.attack_damage", slimeAttackDamage); slimeMaxHealthCache.clear(); slimeAttackDamageCache.clear(); @@ -2013,7 +2013,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 } public boolean snowGolemRidable = false; -@@ -1717,6 +1821,7 @@ public class PurpurWorldConfig { +@@ -1700,6 +1804,7 @@ public class PurpurWorldConfig { public float snowGolemSnowBallModifier = 10.0F; public double snowGolemAttackDistance = 1.25D; public boolean snowGolemBypassMobGriefing = false; @@ -2021,7 +2021,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 private void snowGolemSettings() { snowGolemRidable = getBoolean("mobs.snow_golem.ridable", snowGolemRidable); snowGolemRidableInWater = getBoolean("mobs.snow_golem.ridable-in-water", snowGolemRidableInWater); -@@ -1734,6 +1839,7 @@ public class PurpurWorldConfig { +@@ -1717,6 +1822,7 @@ public class PurpurWorldConfig { snowGolemSnowBallModifier = (float) getDouble("mobs.snow_golem.snow-ball-modifier", snowGolemSnowBallModifier); snowGolemAttackDistance = getDouble("mobs.snow_golem.attack-distance", snowGolemAttackDistance); snowGolemBypassMobGriefing = getBoolean("mobs.snow_golem.bypass-mob-griefing", snowGolemBypassMobGriefing); @@ -2029,7 +2029,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 } public boolean snifferRidable = false; -@@ -1755,6 +1861,7 @@ public class PurpurWorldConfig { +@@ -1738,6 +1844,7 @@ public class PurpurWorldConfig { public boolean squidImmuneToEAR = true; public double squidOffsetWaterCheck = 0.0D; public boolean squidsCanFly = false; @@ -2037,7 +2037,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 private void squidSettings() { squidRidable = getBoolean("mobs.squid.ridable", squidRidable); squidControllable = getBoolean("mobs.squid.controllable", squidControllable); -@@ -1767,12 +1874,14 @@ public class PurpurWorldConfig { +@@ -1750,12 +1857,14 @@ public class PurpurWorldConfig { squidImmuneToEAR = getBoolean("mobs.squid.immune-to-EAR", squidImmuneToEAR); squidOffsetWaterCheck = getDouble("mobs.squid.water-offset-check", squidOffsetWaterCheck); squidsCanFly = getBoolean("mobs.squid.can-fly", squidsCanFly); @@ -2052,7 +2052,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 private void spiderSettings() { spiderRidable = getBoolean("mobs.spider.ridable", spiderRidable); spiderRidableInWater = getBoolean("mobs.spider.ridable-in-water", spiderRidableInWater); -@@ -1783,12 +1892,14 @@ public class PurpurWorldConfig { +@@ -1766,12 +1875,14 @@ public class PurpurWorldConfig { set("mobs.spider.attributes.max_health", oldValue); } spiderMaxHealth = getDouble("mobs.spider.attributes.max_health", spiderMaxHealth); @@ -2067,7 +2067,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 private void straySettings() { strayRidable = getBoolean("mobs.stray.ridable", strayRidable); strayRidableInWater = getBoolean("mobs.stray.ridable-in-water", strayRidableInWater); -@@ -1799,6 +1910,7 @@ public class PurpurWorldConfig { +@@ -1782,6 +1893,7 @@ public class PurpurWorldConfig { set("mobs.stray.attributes.max_health", oldValue); } strayMaxHealth = getDouble("mobs.stray.attributes.max_health", strayMaxHealth); @@ -2075,7 +2075,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 } public boolean striderRidable = false; -@@ -1807,6 +1919,7 @@ public class PurpurWorldConfig { +@@ -1790,6 +1902,7 @@ public class PurpurWorldConfig { public double striderMaxHealth = 20.0D; public int striderBreedingTicks = 6000; public boolean striderGiveSaddleBack = false; @@ -2083,7 +2083,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 private void striderSettings() { striderRidable = getBoolean("mobs.strider.ridable", striderRidable); striderRidableInWater = getBoolean("mobs.strider.ridable-in-water", striderRidableInWater); -@@ -1819,6 +1932,7 @@ public class PurpurWorldConfig { +@@ -1802,6 +1915,7 @@ public class PurpurWorldConfig { striderMaxHealth = getDouble("mobs.strider.attributes.max_health", striderMaxHealth); striderBreedingTicks = getInt("mobs.strider.breeding-delay-ticks", striderBreedingTicks); striderGiveSaddleBack = getBoolean("mobs.strider.give-saddle-back", striderGiveSaddleBack); @@ -2091,7 +2091,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 } public boolean tadpoleRidable = false; -@@ -1840,6 +1954,7 @@ public class PurpurWorldConfig { +@@ -1823,6 +1937,7 @@ public class PurpurWorldConfig { public double traderLlamaMovementSpeedMin = 0.175D; public double traderLlamaMovementSpeedMax = 0.175D; public int traderLlamaBreedingTicks = 6000; @@ -2099,7 +2099,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 private void traderLlamaSettings() { traderLlamaRidable = getBoolean("mobs.trader_llama.ridable", traderLlamaRidable); traderLlamaRidableInWater = getBoolean("mobs.trader_llama.ridable-in-water", traderLlamaRidableInWater); -@@ -1858,11 +1973,13 @@ public class PurpurWorldConfig { +@@ -1841,11 +1956,13 @@ public class PurpurWorldConfig { traderLlamaMovementSpeedMin = getDouble("mobs.trader_llama.attributes.movement_speed.min", traderLlamaMovementSpeedMin); traderLlamaMovementSpeedMax = getDouble("mobs.trader_llama.attributes.movement_speed.max", traderLlamaMovementSpeedMax); traderLlamaBreedingTicks = getInt("mobs.trader_llama.breeding-delay-ticks", traderLlamaBreedingTicks); @@ -2113,7 +2113,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 private void tropicalFishSettings() { tropicalFishRidable = getBoolean("mobs.tropical_fish.ridable", tropicalFishRidable); tropicalFishControllable = getBoolean("mobs.tropical_fish.controllable", tropicalFishControllable); -@@ -1872,6 +1989,7 @@ public class PurpurWorldConfig { +@@ -1855,6 +1972,7 @@ public class PurpurWorldConfig { set("mobs.tropical_fish.attributes.max_health", oldValue); } tropicalFishMaxHealth = getDouble("mobs.tropical_fish.attributes.max_health", tropicalFishMaxHealth); @@ -2121,7 +2121,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 } public boolean turtleRidable = false; -@@ -1879,6 +1997,7 @@ public class PurpurWorldConfig { +@@ -1862,6 +1980,7 @@ public class PurpurWorldConfig { public boolean turtleControllable = true; public double turtleMaxHealth = 30.0D; public int turtleBreedingTicks = 6000; @@ -2129,7 +2129,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 private void turtleSettings() { turtleRidable = getBoolean("mobs.turtle.ridable", turtleRidable); turtleRidableInWater = getBoolean("mobs.turtle.ridable-in-water", turtleRidableInWater); -@@ -1890,6 +2009,7 @@ public class PurpurWorldConfig { +@@ -1873,6 +1992,7 @@ public class PurpurWorldConfig { } turtleMaxHealth = getDouble("mobs.turtle.attributes.max_health", turtleMaxHealth); turtleBreedingTicks = getInt("mobs.turtle.breeding-delay-ticks", turtleBreedingTicks); @@ -2137,7 +2137,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 } public boolean vexRidable = false; -@@ -1897,6 +2017,7 @@ public class PurpurWorldConfig { +@@ -1880,6 +2000,7 @@ public class PurpurWorldConfig { public boolean vexControllable = true; public double vexMaxY = 320D; public double vexMaxHealth = 14.0D; @@ -2145,7 +2145,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 private void vexSettings() { vexRidable = getBoolean("mobs.vex.ridable", vexRidable); vexRidableInWater = getBoolean("mobs.vex.ridable-in-water", vexRidableInWater); -@@ -1908,6 +2029,7 @@ public class PurpurWorldConfig { +@@ -1891,6 +2012,7 @@ public class PurpurWorldConfig { set("mobs.vex.attributes.max_health", oldValue); } vexMaxHealth = getDouble("mobs.vex.attributes.max_health", vexMaxHealth); @@ -2153,7 +2153,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 } public boolean villagerRidable = false; -@@ -1921,6 +2043,7 @@ public class PurpurWorldConfig { +@@ -1903,6 +2025,7 @@ public class PurpurWorldConfig { public boolean villagerClericsFarmWarts = false; public boolean villagerClericFarmersThrowWarts = true; public boolean villagerBypassMobGriefing = false; @@ -2161,7 +2161,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 private void villagerSettings() { villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); -@@ -1938,6 +2061,7 @@ public class PurpurWorldConfig { +@@ -1919,6 +2042,7 @@ public class PurpurWorldConfig { villagerClericsFarmWarts = getBoolean("mobs.villager.clerics-farm-warts", villagerClericsFarmWarts); villagerClericFarmersThrowWarts = getBoolean("mobs.villager.cleric-wart-farmers-throw-warts-at-villagers", villagerClericFarmersThrowWarts); villagerBypassMobGriefing = getBoolean("mobs.villager.bypass-mob-griefing", villagerBypassMobGriefing); @@ -2169,7 +2169,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 } public boolean vindicatorRidable = false; -@@ -1945,6 +2069,7 @@ public class PurpurWorldConfig { +@@ -1926,6 +2050,7 @@ public class PurpurWorldConfig { public boolean vindicatorControllable = true; public double vindicatorMaxHealth = 24.0D; public double vindicatorJohnnySpawnChance = 0D; @@ -2177,7 +2177,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 private void vindicatorSettings() { vindicatorRidable = getBoolean("mobs.vindicator.ridable", vindicatorRidable); vindicatorRidableInWater = getBoolean("mobs.vindicator.ridable-in-water", vindicatorRidableInWater); -@@ -1956,6 +2081,7 @@ public class PurpurWorldConfig { +@@ -1937,6 +2062,7 @@ public class PurpurWorldConfig { } vindicatorMaxHealth = getDouble("mobs.vindicator.attributes.max_health", vindicatorMaxHealth); vindicatorJohnnySpawnChance = getDouble("mobs.vindicator.johnny.spawn-chance", vindicatorJohnnySpawnChance); @@ -2185,23 +2185,23 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 } public boolean wanderingTraderRidable = false; -@@ -1964,6 +2090,7 @@ public class PurpurWorldConfig { +@@ -1944,6 +2070,7 @@ public class PurpurWorldConfig { + public boolean wanderingTraderControllable = true; public double wanderingTraderMaxHealth = 20.0D; public boolean wanderingTraderFollowEmeraldBlock = false; - public boolean wanderingTraderCanBeLeashed = false; + public boolean wanderingTraderTakeDamageFromWater = false; private void wanderingTraderSettings() { wanderingTraderRidable = getBoolean("mobs.wandering_trader.ridable", wanderingTraderRidable); wanderingTraderRidableInWater = getBoolean("mobs.wandering_trader.ridable-in-water", wanderingTraderRidableInWater); -@@ -1976,6 +2103,7 @@ public class PurpurWorldConfig { +@@ -1955,6 +2082,7 @@ public class PurpurWorldConfig { + } wanderingTraderMaxHealth = getDouble("mobs.wandering_trader.attributes.max_health", wanderingTraderMaxHealth); wanderingTraderFollowEmeraldBlock = getBoolean("mobs.wandering_trader.follow-emerald-blocks", wanderingTraderFollowEmeraldBlock); - wanderingTraderCanBeLeashed = getBoolean("mobs.wandering_trader.can-be-leashed", wanderingTraderCanBeLeashed); + wanderingTraderTakeDamageFromWater = getBoolean("mobs.wandering_trader.takes-damage-from-water", wanderingTraderTakeDamageFromWater); } public boolean wardenRidable = false; -@@ -1991,6 +2119,7 @@ public class PurpurWorldConfig { +@@ -1970,6 +2098,7 @@ public class PurpurWorldConfig { public boolean witchRidableInWater = true; public boolean witchControllable = true; public double witchMaxHealth = 26.0D; @@ -2209,7 +2209,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 private void witchSettings() { witchRidable = getBoolean("mobs.witch.ridable", witchRidable); witchRidableInWater = getBoolean("mobs.witch.ridable-in-water", witchRidableInWater); -@@ -2001,6 +2130,7 @@ public class PurpurWorldConfig { +@@ -1980,6 +2109,7 @@ public class PurpurWorldConfig { set("mobs.witch.attributes.max_health", oldValue); } witchMaxHealth = getDouble("mobs.witch.attributes.max_health", witchMaxHealth); @@ -2217,7 +2217,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 } public boolean witherRidable = false; -@@ -2011,6 +2141,7 @@ public class PurpurWorldConfig { +@@ -1990,6 +2120,7 @@ public class PurpurWorldConfig { public float witherHealthRegenAmount = 1.0f; public int witherHealthRegenDelay = 20; public boolean witherBypassMobGriefing = false; @@ -2225,7 +2225,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 private void witherSettings() { witherRidable = getBoolean("mobs.wither.ridable", witherRidable); witherRidableInWater = getBoolean("mobs.wither.ridable-in-water", witherRidableInWater); -@@ -2029,12 +2160,14 @@ public class PurpurWorldConfig { +@@ -2008,12 +2139,14 @@ public class PurpurWorldConfig { witherHealthRegenAmount = (float) getDouble("mobs.wither.health-regen-amount", witherHealthRegenAmount); witherHealthRegenDelay = getInt("mobs.wither.health-regen-delay", witherHealthRegenDelay); witherBypassMobGriefing = getBoolean("mobs.wither.bypass-mob-griefing", witherBypassMobGriefing); @@ -2240,7 +2240,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 private void witherSkeletonSettings() { witherSkeletonRidable = getBoolean("mobs.wither_skeleton.ridable", witherSkeletonRidable); witherSkeletonRidableInWater = getBoolean("mobs.wither_skeleton.ridable-in-water", witherSkeletonRidableInWater); -@@ -2045,6 +2178,7 @@ public class PurpurWorldConfig { +@@ -2024,6 +2157,7 @@ public class PurpurWorldConfig { set("mobs.wither_skeleton.attributes.max_health", oldValue); } witherSkeletonMaxHealth = getDouble("mobs.wither_skeleton.attributes.max_health", witherSkeletonMaxHealth); @@ -2248,7 +2248,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 } public boolean wolfRidable = false; -@@ -2055,6 +2189,7 @@ public class PurpurWorldConfig { +@@ -2034,6 +2168,7 @@ public class PurpurWorldConfig { public boolean wolfMilkCuresRabies = true; public double wolfNaturalRabid = 0.0D; public int wolfBreedingTicks = 6000; @@ -2256,7 +2256,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 private void wolfSettings() { wolfRidable = getBoolean("mobs.wolf.ridable", wolfRidable); wolfRidableInWater = getBoolean("mobs.wolf.ridable-in-water", wolfRidableInWater); -@@ -2073,12 +2208,14 @@ public class PurpurWorldConfig { +@@ -2052,12 +2187,14 @@ public class PurpurWorldConfig { wolfMilkCuresRabies = getBoolean("mobs.wolf.milk-cures-rabid-wolves", wolfMilkCuresRabies); wolfNaturalRabid = getDouble("mobs.wolf.spawn-rabid-chance", wolfNaturalRabid); wolfBreedingTicks = getInt("mobs.wolf.breeding-delay-ticks", wolfBreedingTicks); @@ -2271,7 +2271,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 private void zoglinSettings() { zoglinRidable = getBoolean("mobs.zoglin.ridable", zoglinRidable); zoglinRidableInWater = getBoolean("mobs.zoglin.ridable-in-water", zoglinRidableInWater); -@@ -2089,6 +2226,7 @@ public class PurpurWorldConfig { +@@ -2068,6 +2205,7 @@ public class PurpurWorldConfig { set("mobs.zoglin.attributes.max_health", oldValue); } zoglinMaxHealth = getDouble("mobs.zoglin.attributes.max_health", zoglinMaxHealth); @@ -2279,7 +2279,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 } public boolean zombieRidable = false; -@@ -2101,6 +2239,7 @@ public class PurpurWorldConfig { +@@ -2080,6 +2218,7 @@ public class PurpurWorldConfig { public boolean zombieJockeyTryExistingChickens = true; public boolean zombieAggressiveTowardsVillagerWhenLagging = true; public boolean zombieBypassMobGriefing = false; @@ -2287,7 +2287,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 private void zombieSettings() { zombieRidable = getBoolean("mobs.zombie.ridable", zombieRidable); zombieRidableInWater = getBoolean("mobs.zombie.ridable-in-water", zombieRidableInWater); -@@ -2117,6 +2256,7 @@ public class PurpurWorldConfig { +@@ -2096,6 +2235,7 @@ public class PurpurWorldConfig { zombieJockeyTryExistingChickens = getBoolean("mobs.zombie.jockey.try-existing-chickens", zombieJockeyTryExistingChickens); zombieAggressiveTowardsVillagerWhenLagging = getBoolean("mobs.zombie.aggressive-towards-villager-when-lagging", zombieAggressiveTowardsVillagerWhenLagging); zombieBypassMobGriefing = getBoolean("mobs.zombie.bypass-mob-griefing", zombieBypassMobGriefing); @@ -2295,7 +2295,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 } public boolean zombieHorseRidable = false; -@@ -2129,6 +2269,7 @@ public class PurpurWorldConfig { +@@ -2108,6 +2248,7 @@ public class PurpurWorldConfig { public double zombieHorseMovementSpeedMin = 0.2D; public double zombieHorseMovementSpeedMax = 0.2D; public double zombieHorseSpawnChance = 0.0D; @@ -2303,7 +2303,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 private void zombieHorseSettings() { zombieHorseRidable = getBoolean("mobs.zombie_horse.ridable", zombieHorseRidable); zombieHorseRidableInWater = getBoolean("mobs.zombie_horse.ridable-in-water", zombieHorseRidableInWater); -@@ -2146,6 +2287,7 @@ public class PurpurWorldConfig { +@@ -2125,6 +2266,7 @@ public class PurpurWorldConfig { zombieHorseMovementSpeedMin = getDouble("mobs.zombie_horse.attributes.movement_speed.min", zombieHorseMovementSpeedMin); zombieHorseMovementSpeedMax = getDouble("mobs.zombie_horse.attributes.movement_speed.max", zombieHorseMovementSpeedMax); zombieHorseSpawnChance = getDouble("mobs.zombie_horse.spawn-chance", zombieHorseSpawnChance); @@ -2311,7 +2311,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 } public boolean zombieVillagerRidable = false; -@@ -2156,6 +2298,7 @@ public class PurpurWorldConfig { +@@ -2135,6 +2277,7 @@ public class PurpurWorldConfig { public boolean zombieVillagerJockeyOnlyBaby = true; public double zombieVillagerJockeyChance = 0.05D; public boolean zombieVillagerJockeyTryExistingChickens = true; @@ -2319,7 +2319,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 private void zombieVillagerSettings() { zombieVillagerRidable = getBoolean("mobs.zombie_villager.ridable", zombieVillagerRidable); zombieVillagerRidableInWater = getBoolean("mobs.zombie_villager.ridable-in-water", zombieVillagerRidableInWater); -@@ -2170,6 +2313,7 @@ public class PurpurWorldConfig { +@@ -2149,6 +2292,7 @@ public class PurpurWorldConfig { zombieVillagerJockeyOnlyBaby = getBoolean("mobs.zombie_villager.jockey.only-babies", zombieVillagerJockeyOnlyBaby); zombieVillagerJockeyChance = getDouble("mobs.zombie_villager.jockey.chance", zombieVillagerJockeyChance); zombieVillagerJockeyTryExistingChickens = getBoolean("mobs.zombie_villager.jockey.try-existing-chickens", zombieVillagerJockeyTryExistingChickens); @@ -2327,7 +2327,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 } public boolean zombifiedPiglinRidable = false; -@@ -2181,6 +2325,7 @@ public class PurpurWorldConfig { +@@ -2160,6 +2304,7 @@ public class PurpurWorldConfig { public double zombifiedPiglinJockeyChance = 0.05D; public boolean zombifiedPiglinJockeyTryExistingChickens = true; public boolean zombifiedPiglinCountAsPlayerKillWhenAngry = true; @@ -2335,7 +2335,7 @@ index a9148a96d988632109a82603dc538b5111a8f1aa..0427946e49661354265f6bfb3be1be50 private void zombifiedPiglinSettings() { zombifiedPiglinRidable = getBoolean("mobs.zombified_piglin.ridable", zombifiedPiglinRidable); zombifiedPiglinRidableInWater = getBoolean("mobs.zombified_piglin.ridable-in-water", zombifiedPiglinRidableInWater); -@@ -2196,5 +2341,6 @@ public class PurpurWorldConfig { +@@ -2175,5 +2320,6 @@ public class PurpurWorldConfig { zombifiedPiglinJockeyChance = getDouble("mobs.zombified_piglin.jockey.chance", zombifiedPiglinJockeyChance); zombifiedPiglinJockeyTryExistingChickens = getBoolean("mobs.zombified_piglin.jockey.try-existing-chickens", zombifiedPiglinJockeyTryExistingChickens); zombifiedPiglinCountAsPlayerKillWhenAngry = getBoolean("mobs.zombified_piglin.count-as-player-kill-when-angry", zombifiedPiglinCountAsPlayerKillWhenAngry); diff --git a/patches/unapplied-server/0125-Config-to-always-tame-in-Creative.patch b/patches/server/0118-Config-to-always-tame-in-Creative.patch similarity index 90% rename from patches/unapplied-server/0125-Config-to-always-tame-in-Creative.patch rename to patches/server/0118-Config-to-always-tame-in-Creative.patch index 2232ab1d9..50feaee96 100644 --- a/patches/unapplied-server/0125-Config-to-always-tame-in-Creative.patch +++ b/patches/server/0118-Config-to-always-tame-in-Creative.patch @@ -20,10 +20,10 @@ index b0944fa1f3849dd24cd010fa0a6638f5fd7179d1..d409ae987088df3d47192128401d7491 return; } diff --git a/src/main/java/net/minecraft/world/entity/animal/Cat.java b/src/main/java/net/minecraft/world/entity/animal/Cat.java -index 446aec4d10e614f136fe6ae4bb5a7dd0ac6d0f18..17aaeb734a5c1b16bd7771c909958f3acc956b7a 100644 +index f679ba03614cc6b0e976330569ed2b678c622fa3..613235f547adc5be69f5a144aee67a2e09970520 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Cat.java +++ b/src/main/java/net/minecraft/world/entity/animal/Cat.java -@@ -522,7 +522,7 @@ public class Cat extends TamableAnimal implements VariantHolder itemImmuneToExplosion = new ArrayList<>(); public List itemImmuneToFire = new ArrayList<>(); public List itemImmuneToLightning = new ArrayList<>(); @@ -164,7 +163,7 @@ index 876f8b77160e39499bc95a574ecdc6b333014b4b..3a13246c0dccb82ef8168d35d5993291 private void itemSettings() { itemImmuneToCactus.clear(); getList("gameplay-mechanics.item.immune.cactus", new ArrayList<>()).forEach(key -> { -@@ -234,6 +238,10 @@ public class PurpurWorldConfig { +@@ -219,6 +223,10 @@ public class PurpurWorldConfig { Item item = BuiltInRegistries.ITEM.get(new ResourceLocation(key.toString())); if (item != Items.AIR) itemImmuneToLightning.add(item); }); diff --git a/patches/unapplied-server/0129-One-Punch-Man.patch b/patches/server/0122-One-Punch-Man.patch similarity index 84% rename from patches/unapplied-server/0129-One-Punch-Man.patch rename to patches/server/0122-One-Punch-Man.patch index d04ac11d9..dcd536be3 100644 --- a/patches/unapplied-server/0129-One-Punch-Man.patch +++ b/patches/server/0122-One-Punch-Man.patch @@ -6,10 +6,10 @@ Subject: [PATCH] One Punch Man! inspired by https://modrinth.com/mod/creative-one-punch diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 450b289398cb3cccfcddcb4377004358a77d2c45..d69efde99472087c98cdadfe76b154847718951b 100644 +index 13ada4aa83ddb75d6107d41b4a7d10196d5f01f0..ab9769d9a14d7736f9a9d1c3afbf44dc9339fc3b 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -1451,6 +1451,24 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -1428,6 +1428,24 @@ public abstract class LivingEntity extends Entity implements Attackable { this.stopSleeping(); } @@ -35,21 +35,21 @@ index 450b289398cb3cccfcddcb4377004358a77d2c45..d69efde99472087c98cdadfe76b15484 float f1 = amount; boolean flag = amount > 0.0F && this.isDamageSourceBlocked(source); // Copied from below diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 3a13246c0dccb82ef8168d35d59932911ef2a5ad..b830a673a8c7033147d15d0a63474aa33f5520e6 100644 +index 12d70d3a064c3cf031818f25777eb0aaf97b7ea1..0913c3f49fb36dd63c15e3cfb891a60a9495a92a 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -344,6 +344,7 @@ public class PurpurWorldConfig { +@@ -328,6 +328,7 @@ public class PurpurWorldConfig { + public int playerDeathExpDropMax = 100; public boolean teleportIfOutsideBorder = false; public boolean totemOfUndyingWorksInInventory = false; - public boolean playerFixStuckPortal = false; + public boolean creativeOnePunch = false; private void playerSettings() { if (PurpurConfig.version < 19) { boolean oldVal = getBoolean("gameplay-mechanics.player.idle-timeout.mods-target", idleTimeoutTargetPlayer); -@@ -360,6 +361,7 @@ public class PurpurWorldConfig { +@@ -343,6 +344,7 @@ public class PurpurWorldConfig { + playerDeathExpDropMax = getInt("gameplay-mechanics.player.exp-dropped-on-death.maximum", playerDeathExpDropMax); teleportIfOutsideBorder = getBoolean("gameplay-mechanics.player.teleport-if-outside-border", teleportIfOutsideBorder); totemOfUndyingWorksInInventory = getBoolean("gameplay-mechanics.player.totem-of-undying-works-in-inventory", totemOfUndyingWorksInInventory); - playerFixStuckPortal = getBoolean("gameplay-mechanics.player.fix-stuck-in-portal", playerFixStuckPortal); + creativeOnePunch = getBoolean("gameplay-mechanics.player.one-punch-in-creative", creativeOnePunch); } diff --git a/patches/unapplied-server/0130-Configurable-Ender-Pearl-cooldown-damage-and-Endermi.patch b/patches/server/0123-Configurable-Ender-Pearl-cooldown-damage-and-Endermi.patch similarity index 64% rename from patches/unapplied-server/0130-Configurable-Ender-Pearl-cooldown-damage-and-Endermi.patch rename to patches/server/0123-Configurable-Ender-Pearl-cooldown-damage-and-Endermi.patch index 617c8cedb..dcba99fd5 100644 --- a/patches/unapplied-server/0130-Configurable-Ender-Pearl-cooldown-damage-and-Endermi.patch +++ b/patches/server/0123-Configurable-Ender-Pearl-cooldown-damage-and-Endermi.patch @@ -8,27 +8,27 @@ Subject: [PATCH] Configurable Ender Pearl cooldown, damage, and Endermite RNG - Endermite spawn chance diff --git a/src/main/java/net/minecraft/world/entity/projectile/ThrownEnderpearl.java b/src/main/java/net/minecraft/world/entity/projectile/ThrownEnderpearl.java -index 519755b7f8bc7e8bb9fab135fc5bf7de3a9419f9..0d781b55afa32c58028ec4ed367c2c6e01faa271 100644 +index 1aa5e57a4e6a4be60514d8808a2e6c973d93e798..0d2a18190c46f34277a714570267bcc33507ff10 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/ThrownEnderpearl.java +++ b/src/main/java/net/minecraft/world/entity/projectile/ThrownEnderpearl.java -@@ -70,7 +70,7 @@ public class ThrownEnderpearl extends ThrowableItemProjectile { - Bukkit.getPluginManager().callEvent(teleEvent); +@@ -77,7 +77,7 @@ public class ThrownEnderpearl extends ThrowableItemProjectile { + return; + } + // CraftBukkit end +- if (this.random.nextFloat() < 0.05F && worldserver.getGameRules().getBoolean(GameRules.RULE_DOMOBSPAWNING)) { ++ if (this.random.nextFloat() < this.level().purpurConfig.enderPearlEndermiteChance && worldserver.getGameRules().getBoolean(GameRules.RULE_DOMOBSPAWNING)) { // Purpur + Endermite entityendermite = (Endermite) EntityType.ENDERMITE.create(worldserver); - if (!teleEvent.isCancelled() && entityplayer.connection.isAcceptingMessages()) { -- if (this.random.nextFloat() < 0.05F && this.level().getGameRules().getBoolean(GameRules.RULE_DOMOBSPAWNING)) { -+ if (this.random.nextFloat() < this.level().purpurConfig.enderPearlEndermiteChance && this.level().getGameRules().getBoolean(GameRules.RULE_DOMOBSPAWNING)) { // Purpur - Endermite entityendermite = (Endermite) EntityType.ENDERMITE.create(this.level()); - - if (entityendermite != null) { -@@ -85,7 +85,7 @@ public class ThrownEnderpearl extends ThrowableItemProjectile { - - entityplayer.connection.teleport(teleEvent.getTo()); - entity.resetFallDistance(); -- entity.hurt(this.damageSources().fall().customEventDamager(this), 5.0F); // CraftBukkit // Paper - fix DamageSource API -+ entity.hurt(this.damageSources().fall().customEventDamager(this), this.level().purpurConfig.enderPearlDamage); // CraftBukkit // Paper - fix DamageSource API // Purpur - } - // CraftBukkit end - this.level().playSound((Player) null, this.getX(), this.getY(), this.getZ(), SoundEvents.PLAYER_TELEPORT, SoundSource.PLAYERS); + if (entityendermite != null) { +@@ -89,7 +89,7 @@ public class ThrownEnderpearl extends ThrowableItemProjectile { + // entity.changeDimension(new DimensionTransition(worldserver, this.position(), entity.getDeltaMovement(), entity.getYRot(), entity.getXRot(), DimensionTransition.DO_NOTHING)); // CraftBukkit - moved up + entity.resetFallDistance(); + entityplayer.resetCurrentImpulseContext(); +- entity.hurt(this.damageSources().fall().customEventDamager(this), 5.0F); // CraftBukkit // Paper - fix DamageSource API ++ entity.hurt(this.damageSources().fall().customEventDamager(this), this.level().purpurConfig.enderPearlDamage); // CraftBukkit // Paper - fix DamageSource API // Purpur + this.playSound(worldserver, this.position()); + } + } else { diff --git a/src/main/java/net/minecraft/world/item/EnderpearlItem.java b/src/main/java/net/minecraft/world/item/EnderpearlItem.java index 20a91d798d31a71b3c05efa2cc5bda55494e26cc..fc62754f93bd11a10c28b8b7b116e9fff70a5c7b 100644 --- a/src/main/java/net/minecraft/world/item/EnderpearlItem.java @@ -43,10 +43,10 @@ index 20a91d798d31a71b3c05efa2cc5bda55494e26cc..fc62754f93bd11a10c28b8b7b116e9ff // Paper end - PlayerLaunchProjectileEvent if (user instanceof net.minecraft.server.level.ServerPlayer) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 5f01c0d1277e1aa910208a3b9308c427b6e22cdb..a71ce1e255bbb469d3c0a20853450130589af326 100644 +index 0913c3f49fb36dd63c15e3cfb891a60a9495a92a..cab510c8a0cb68b0d741cad6c46505f9916ac835 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -201,6 +201,10 @@ public class PurpurWorldConfig { +@@ -186,6 +186,10 @@ public class PurpurWorldConfig { public boolean ignoreScissorsInWater = false; public boolean ignoreScissorsInLava = false; public double scissorsRunningDamage = 1D; @@ -57,7 +57,7 @@ index 5f01c0d1277e1aa910208a3b9308c427b6e22cdb..a71ce1e255bbb469d3c0a20853450130 private void itemSettings() { itemImmuneToCactus.clear(); getList("gameplay-mechanics.item.immune.cactus", new ArrayList<>()).forEach(key -> { -@@ -242,6 +246,10 @@ public class PurpurWorldConfig { +@@ -227,6 +231,10 @@ public class PurpurWorldConfig { ignoreScissorsInWater = getBoolean("gameplay-mechanics.item.shears.ignore-in-water", ignoreScissorsInWater); ignoreScissorsInLava = getBoolean("gameplay-mechanics.item.shears.ignore-in-lava", ignoreScissorsInLava); scissorsRunningDamage = getDouble("gameplay-mechanics.item.shears.sprinting-damage", scissorsRunningDamage); diff --git a/patches/unapplied-server/0131-Config-to-ignore-nearby-mobs-when-sleeping.patch b/patches/server/0124-Config-to-ignore-nearby-mobs-when-sleeping.patch similarity index 72% rename from patches/unapplied-server/0131-Config-to-ignore-nearby-mobs-when-sleeping.patch rename to patches/server/0124-Config-to-ignore-nearby-mobs-when-sleeping.patch index 66597622e..ee683245e 100644 --- a/patches/unapplied-server/0131-Config-to-ignore-nearby-mobs-when-sleeping.patch +++ b/patches/server/0124-Config-to-ignore-nearby-mobs-when-sleeping.patch @@ -5,33 +5,33 @@ Subject: [PATCH] Config to ignore nearby mobs when sleeping diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index d1c5c334cf3d8ef6c34fcaac194fef693a594250..e0f0ad1fab5d980beb1bfdcd837504e2e94eea83 100644 +index 20fcf96f5cc89631cc993168f009e91c5bd57c48..03fe9f169ac76ca346e798571eaeaf6aea63f775 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -1506,7 +1506,7 @@ public class ServerPlayer extends Player { +@@ -1493,7 +1493,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player { return entitymonster.isPreventingPlayerRest(this); }); - if (!list.isEmpty()) { + if (!this.level().purpurConfig.playerSleepNearMonsters && !list.isEmpty()) { // Purpur - return Either.left(Player.BedSleepingProblem.NOT_SAFE); + return Either.left(net.minecraft.world.entity.player.Player.BedSleepingProblem.NOT_SAFE); } } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index d7c0928a9e96e9c85877830ff5f8e929ce7284d5..c9a65ec607a306acb1f51b483d1b3f9901b07684 100644 +index cab510c8a0cb68b0d741cad6c46505f9916ac835..dba6c5ef3138347321ab2a5d2871bcf71fbb1796 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -353,6 +353,7 @@ public class PurpurWorldConfig { +@@ -337,6 +337,7 @@ public class PurpurWorldConfig { + public boolean teleportIfOutsideBorder = false; public boolean totemOfUndyingWorksInInventory = false; - public boolean playerFixStuckPortal = false; public boolean creativeOnePunch = false; + public boolean playerSleepNearMonsters = false; private void playerSettings() { if (PurpurConfig.version < 19) { boolean oldVal = getBoolean("gameplay-mechanics.player.idle-timeout.mods-target", idleTimeoutTargetPlayer); -@@ -370,6 +371,7 @@ public class PurpurWorldConfig { +@@ -353,6 +354,7 @@ public class PurpurWorldConfig { + teleportIfOutsideBorder = getBoolean("gameplay-mechanics.player.teleport-if-outside-border", teleportIfOutsideBorder); totemOfUndyingWorksInInventory = getBoolean("gameplay-mechanics.player.totem-of-undying-works-in-inventory", totemOfUndyingWorksInInventory); - playerFixStuckPortal = getBoolean("gameplay-mechanics.player.fix-stuck-in-portal", playerFixStuckPortal); creativeOnePunch = getBoolean("gameplay-mechanics.player.one-punch-in-creative", creativeOnePunch); + playerSleepNearMonsters = getBoolean("gameplay-mechanics.player.sleep-ignore-nearby-mobs", playerSleepNearMonsters); } diff --git a/patches/unapplied-server/0132-Add-back-player-spawned-endermite-API.patch b/patches/server/0125-Add-back-player-spawned-endermite-API.patch similarity index 80% rename from patches/unapplied-server/0132-Add-back-player-spawned-endermite-API.patch rename to patches/server/0125-Add-back-player-spawned-endermite-API.patch index a92ca74c4..1ad32dce5 100644 --- a/patches/unapplied-server/0132-Add-back-player-spawned-endermite-API.patch +++ b/patches/server/0125-Add-back-player-spawned-endermite-API.patch @@ -47,17 +47,17 @@ index 514354bfcd0608554fd515248975fb107eddf427..c5fcefc6810c2127d6a0a48f95c50c2e @Override diff --git a/src/main/java/net/minecraft/world/entity/projectile/ThrownEnderpearl.java b/src/main/java/net/minecraft/world/entity/projectile/ThrownEnderpearl.java -index 0d781b55afa32c58028ec4ed367c2c6e01faa271..61bd2459f2b9164dce90134103abaddce42b0621 100644 +index 0d2a18190c46f34277a714570267bcc33507ff10..334fa781e94d195c13dd78cdbe8f43b4b126ebd0 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/ThrownEnderpearl.java +++ b/src/main/java/net/minecraft/world/entity/projectile/ThrownEnderpearl.java -@@ -74,6 +74,7 @@ public class ThrownEnderpearl extends ThrowableItemProjectile { - Endermite entityendermite = (Endermite) EntityType.ENDERMITE.create(this.level()); +@@ -81,6 +81,7 @@ public class ThrownEnderpearl extends ThrowableItemProjectile { + Endermite entityendermite = (Endermite) EntityType.ENDERMITE.create(worldserver); - if (entityendermite != null) { -+ entityendermite.setPlayerSpawned(true); // Purpur - entityendermite.moveTo(entity.getX(), entity.getY(), entity.getZ(), entity.getYRot(), entity.getXRot()); - this.level().addFreshEntity(entityendermite, CreatureSpawnEvent.SpawnReason.ENDER_PEARL); - } + if (entityendermite != null) { ++ entityendermite.setPlayerSpawned(true); // Purpur + entityendermite.moveTo(entity.getX(), entity.getY(), entity.getZ(), entity.getYRot(), entity.getXRot()); + worldserver.addFreshEntity(entityendermite, CreatureSpawnEvent.SpawnReason.ENDER_PEARL); + } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEndermite.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEndermite.java index d657fd2c507a5b215aeab0a5f3e9c2ee892a27c8..985e9ec21c60a1f47973bd5fc53b96a6f9b7d04a 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEndermite.java diff --git a/patches/unapplied-server/0133-Config-Enderman-aggressiveness-towards-Endermites.patch b/patches/server/0126-Config-Enderman-aggressiveness-towards-Endermites.patch similarity index 90% rename from patches/unapplied-server/0133-Config-Enderman-aggressiveness-towards-Endermites.patch rename to patches/server/0126-Config-Enderman-aggressiveness-towards-Endermites.patch index 6eb82e5d5..090a1a997 100644 --- a/patches/unapplied-server/0133-Config-Enderman-aggressiveness-towards-Endermites.patch +++ b/patches/server/0126-Config-Enderman-aggressiveness-towards-Endermites.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Config Enderman aggressiveness towards Endermites diff --git a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java -index 17b044e58d2ed33ed16e60f4fd4f63b2ee3f854d..4821aec304399c64cbcff741334567a08b840c0a 100644 +index 75d462d7f55dedfa62844549fa6690a4a652bd1f..cc9da5134ece550e8a1902e90282090f05818fd8 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java +++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java -@@ -129,7 +129,7 @@ public class EnderMan extends Monster implements NeutralMob { +@@ -131,7 +131,7 @@ public class EnderMan extends Monster implements NeutralMob { this.targetSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur this.targetSelector.addGoal(1, new EnderMan.EndermanLookForPlayerGoal(this, this::isAngryAt)); this.targetSelector.addGoal(2, new HurtByTargetGoal(this, new Class[0])); @@ -18,10 +18,10 @@ index 17b044e58d2ed33ed16e60f4fd4f63b2ee3f854d..4821aec304399c64cbcff741334567a0 } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 39f612bbe47c20e718c82d8259fd784139457608..5ff45015f6a902eacfbd7978d2abdcd64af43e0f 100644 +index dba6c5ef3138347321ab2a5d2871bcf71fbb1796..023858324966929b8fb45b046309e403ec937351 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1022,6 +1022,8 @@ public class PurpurWorldConfig { +@@ -1005,6 +1005,8 @@ public class PurpurWorldConfig { public boolean endermanDespawnEvenWithBlock = false; public boolean endermanBypassMobGriefing = false; public boolean endermanTakeDamageFromWater = true; @@ -30,7 +30,7 @@ index 39f612bbe47c20e718c82d8259fd784139457608..5ff45015f6a902eacfbd7978d2abdcd6 private void endermanSettings() { endermanRidable = getBoolean("mobs.enderman.ridable", endermanRidable); endermanRidableInWater = getBoolean("mobs.enderman.ridable-in-water", endermanRidableInWater); -@@ -1031,11 +1033,17 @@ public class PurpurWorldConfig { +@@ -1014,11 +1016,17 @@ public class PurpurWorldConfig { set("mobs.enderman.attributes.max-health", null); set("mobs.enderman.attributes.max_health", oldValue); } diff --git a/patches/unapplied-server/0134-Config-to-ignore-Dragon-Head-wearers-and-stare-aggro.patch b/patches/server/0127-Config-to-ignore-Dragon-Head-wearers-and-stare-aggro.patch similarity index 88% rename from patches/unapplied-server/0134-Config-to-ignore-Dragon-Head-wearers-and-stare-aggro.patch rename to patches/server/0127-Config-to-ignore-Dragon-Head-wearers-and-stare-aggro.patch index 93a7f0380..45b67369f 100644 --- a/patches/unapplied-server/0134-Config-to-ignore-Dragon-Head-wearers-and-stare-aggro.patch +++ b/patches/server/0127-Config-to-ignore-Dragon-Head-wearers-and-stare-aggro.patch @@ -7,10 +7,10 @@ Prevents Enderman from becoming aggresive towards players that are wearing a Dra Adds functionality to a useless item! diff --git a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java -index 4821aec304399c64cbcff741334567a08b840c0a..b361c6b4ca17b9d466555037235a5660caa5c9bd 100644 +index cc9da5134ece550e8a1902e90282090f05818fd8..f2e21c9d3cefb635c4eb583ac9355b46675c94e7 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java +++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java -@@ -266,7 +266,7 @@ public class EnderMan extends Monster implements NeutralMob { +@@ -268,7 +268,7 @@ public class EnderMan extends Monster implements NeutralMob { // Paper end - EndermanAttackPlayerEvent ItemStack itemstack = (ItemStack) player.getInventory().armor.get(3); @@ -20,10 +20,10 @@ index 4821aec304399c64cbcff741334567a08b840c0a..b361c6b4ca17b9d466555037235a5660 } else { Vec3 vec3d = player.getViewVector(1.0F).normalize(); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 5ff45015f6a902eacfbd7978d2abdcd64af43e0f..55f557d7e2aa8af8ae1ddf7a4225786ec5dca66f 100644 +index 023858324966929b8fb45b046309e403ec937351..e9f1fce3c10fc44a4a092f7b32fa5f2ac5dcc3da 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1024,6 +1024,8 @@ public class PurpurWorldConfig { +@@ -1007,6 +1007,8 @@ public class PurpurWorldConfig { public boolean endermanTakeDamageFromWater = true; public boolean endermanAggroEndermites = true; public boolean endermanAggroEndermitesOnlyIfPlayerSpawned = false; @@ -32,7 +32,7 @@ index 5ff45015f6a902eacfbd7978d2abdcd64af43e0f..55f557d7e2aa8af8ae1ddf7a4225786e private void endermanSettings() { endermanRidable = getBoolean("mobs.enderman.ridable", endermanRidable); endermanRidableInWater = getBoolean("mobs.enderman.ridable-in-water", endermanRidableInWater); -@@ -1044,6 +1046,8 @@ public class PurpurWorldConfig { +@@ -1027,6 +1029,8 @@ public class PurpurWorldConfig { endermanTakeDamageFromWater = getBoolean("mobs.enderman.takes-damage-from-water", endermanTakeDamageFromWater); endermanAggroEndermites = getBoolean("mobs.enderman.aggressive-towards-endermites", endermanAggroEndermites); endermanAggroEndermitesOnlyIfPlayerSpawned = getBoolean("mobs.enderman.aggressive-towards-endermites-only-spawned-by-player-thrown-ender-pearls", endermanAggroEndermitesOnlyIfPlayerSpawned); diff --git a/patches/unapplied-server/0135-Tick-fluids-config.patch b/patches/server/0128-Tick-fluids-config.patch similarity index 94% rename from patches/unapplied-server/0135-Tick-fluids-config.patch rename to patches/server/0128-Tick-fluids-config.patch index 4a067efd0..4a7d232cb 100644 --- a/patches/unapplied-server/0135-Tick-fluids-config.patch +++ b/patches/server/0128-Tick-fluids-config.patch @@ -36,10 +36,10 @@ index 84623c632d8c2f0fa7ec939c711316d757117d23..1851035b9fdcc076442d0699567a3b02 } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index e3e0a5c0f241e7fe1fdd2be1bd1afe7752628b9e..6756564f9b03bc822485b4199bf46c50069eea65 100644 +index e9f1fce3c10fc44a4a092f7b32fa5f2ac5dcc3da..9d5852c9c0009db15134af1b40fca619090a6732 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -129,6 +129,7 @@ public class PurpurWorldConfig { +@@ -127,6 +127,7 @@ public class PurpurWorldConfig { public boolean noteBlockIgnoreAbove = false; public boolean persistentDroppableEntityDisplayNames = true; public boolean projectilesBypassMobGriefing = false; @@ -47,7 +47,7 @@ index e3e0a5c0f241e7fe1fdd2be1bd1afe7752628b9e..6756564f9b03bc822485b4199bf46c50 public double tridentLoyaltyVoidReturnHeight = 0.0D; public double voidDamageHeight = -64.0D; public double voidDamageDealt = 4.0D; -@@ -148,6 +149,7 @@ public class PurpurWorldConfig { +@@ -144,6 +145,7 @@ public class PurpurWorldConfig { noteBlockIgnoreAbove = getBoolean("gameplay-mechanics.note-block-ignore-above", noteBlockIgnoreAbove); persistentDroppableEntityDisplayNames = getBoolean("gameplay-mechanics.persistent-droppable-entity-display-names", persistentDroppableEntityDisplayNames); projectilesBypassMobGriefing = getBoolean("gameplay-mechanics.projectiles-bypass-mob-griefing", projectilesBypassMobGriefing); diff --git a/patches/unapplied-server/0136-Config-to-disable-Llama-caravans.patch b/patches/server/0129-Config-to-disable-Llama-caravans.patch similarity index 90% rename from patches/unapplied-server/0136-Config-to-disable-Llama-caravans.patch rename to patches/server/0129-Config-to-disable-Llama-caravans.patch index d261f9a15..ba795d948 100644 --- a/patches/unapplied-server/0136-Config-to-disable-Llama-caravans.patch +++ b/patches/server/0129-Config-to-disable-Llama-caravans.patch @@ -19,10 +19,10 @@ index eb0faf58fa1a408f294fc62120b140def97f998d..0f4f546cd0eda4bd82b47446ae23ac32 List list = this.llama.level().getEntities(this.llama, this.llama.getBoundingBox().inflate(9.0, 4.0, 9.0), 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 876b06fd6a371caa6cc71026a3b2f7a111c89dc8..6f744c07d01d5e01dda5aa5cdcf9a29f883ad28a 100644 +index 96f1eba4a356e131a8f3c689bedc9eb8821e1a72..8edfc34a17d8c05cfa2928738306c1abc1743cc5 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 -@@ -482,7 +482,7 @@ public class Llama extends AbstractChestedHorse implements VariantHolder { + if (iblockdata.is(BlockTags.MOB_INTERACTABLE_DOORS, (blockbase_blockdata) -> { return blockbase_blockdata.getBlock() instanceof DoorBlock; - })) { + }) && !DoorBlock.requiresRedstone(entityliving.level(), iblockdata, blockposition)) { // Purpur @@ -19,7 +19,7 @@ index 736f46d552d558bf0edd9a86601b5fbb6940815b..cf039181dfe0ddb3ccda44064a5d8a2f if (!blockdoor.isOpen(iblockdata)) { @@ -79,7 +79,7 @@ public class InteractWithDoor { - if (iblockdata1.is(BlockTags.WOODEN_DOORS, (blockbase_blockdata) -> { + if (iblockdata1.is(BlockTags.MOB_INTERACTABLE_DOORS, (blockbase_blockdata) -> { return blockbase_blockdata.getBlock() instanceof DoorBlock; - })) { + }) && !DoorBlock.requiresRedstone(entityliving.level(), iblockdata, blockposition1)) { // Purpur @@ -28,15 +28,30 @@ index 736f46d552d558bf0edd9a86601b5fbb6940815b..cf039181dfe0ddb3ccda44064a5d8a2f if (!blockdoor1.isOpen(iblockdata1)) { @@ -122,7 +122,7 @@ public class InteractWithDoor { - if (!iblockdata.is(BlockTags.WOODEN_DOORS, (blockbase_blockdata) -> { + if (!iblockdata.is(BlockTags.MOB_INTERACTABLE_DOORS, (blockbase_blockdata) -> { return blockbase_blockdata.getBlock() instanceof DoorBlock; - })) { + }) || DoorBlock.requiresRedstone(entity.level(), iblockdata, blockposition)) { // Purpur iterator.remove(); } else { DoorBlock blockdoor = (DoorBlock) iblockdata.getBlock(); +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 07204c4d56d0a33bd596a255f3281dd6a29233ae..ac95d5acc275d69d2b420173540d7ddb64b6d711 100644 +--- a/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java ++++ b/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java +@@ -151,8 +151,8 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill + } + if (level().purpurConfig.wanderingTraderRidable && itemstack.isEmpty()) return tryRide(player, hand); // Purpur + if (this.level().purpurConfig.wanderingTraderAllowTrading) { // Purpur +- this.setTradingPlayer(player); +- this.openTradingScreen(player, this.getDisplayName(), 1); ++ this.setTradingPlayer(player); ++ this.openTradingScreen(player, this.getDisplayName(), 1); + } // Purpur + } + 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 42d43b7a7e3b7c53cc80b8706c130e660f2c72da..96199441202ad929ad0274574704635c538a93c7 100644 +index 6dd75bc722f9c20b4869e6353115c3b02dd79f99..dfaf82f5b0180cf08c4125347867d37a2557fd24 100644 --- a/src/main/java/net/minecraft/world/level/block/DoorBlock.java +++ b/src/main/java/net/minecraft/world/level/block/DoorBlock.java @@ -198,6 +198,7 @@ public class DoorBlock extends Block { @@ -67,10 +82,10 @@ index 42d43b7a7e3b7c53cc80b8706c130e660f2c72da..96199441202ad929ad0274574704635c + // Purpur end } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 4c9479029b659baa53377fde1dd7117d5e1bfc15..3464f0c8d019c4675c2df7c83e0a77cb3eec16e0 100644 +index 1c23b9aa694bd107344e18ee765d0d651cd22240..9be6d30c688e4929e34e9f039b32e3db177f6f57 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -505,6 +505,16 @@ public class PurpurWorldConfig { +@@ -488,6 +488,16 @@ public class PurpurWorldConfig { dispenserPlaceAnvils = getBoolean("blocks.dispenser.place-anvils", dispenserPlaceAnvils); } diff --git a/patches/unapplied-server/0148-Config-to-allow-for-unsafe-enchants.patch b/patches/server/0140-Config-to-allow-for-unsafe-enchants.patch similarity index 83% rename from patches/unapplied-server/0148-Config-to-allow-for-unsafe-enchants.patch rename to patches/server/0140-Config-to-allow-for-unsafe-enchants.patch index a9b0cab9c..d9bdbf841 100644 --- a/patches/unapplied-server/0148-Config-to-allow-for-unsafe-enchants.patch +++ b/patches/server/0140-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 84f1ba6275f04624f46ccd772924b5e075e7b205..bfb455fb74f0a9645212f90acb54f68d1c7d9772 100644 +index 99695e38b6a10c3cffda6e453f9f0619c7406cc0..6e63b838de2edeab03ae25fc34e6004830fb7349 100644 --- a/src/main/java/net/minecraft/server/commands/EnchantCommand.java +++ b/src/main/java/net/minecraft/server/commands/EnchantCommand.java @@ -70,7 +70,7 @@ public class EnchantCommand { @@ -21,19 +21,19 @@ index 84f1ba6275f04624f46ccd772924b5e075e7b205..bfb455fb74f0a9645212f90acb54f68d ItemStack itemStack = livingEntity.getMainHandItem(); if (!itemStack.isEmpty()) { if (enchantment2.canEnchant(itemStack) -- && EnchantmentHelper.isEnchantmentCompatible(EnchantmentHelper.getEnchantmentsForCrafting(itemStack).keySet(), enchantment2)) { -+ && EnchantmentHelper.isEnchantmentCompatible(EnchantmentHelper.getEnchantmentsForCrafting(itemStack).keySet(), enchantment2) || (org.purpurmc.purpur.PurpurConfig.allowUnsafeEnchantCommand && !itemStack.hasEnchantment(enchantment2))) { // Purpur - itemStack.enchant(enchantment2, level); +- && EnchantmentHelper.isEnchantmentCompatible(EnchantmentHelper.getEnchantmentsForCrafting(itemStack).keySet(), enchantment)) { ++ && EnchantmentHelper.isEnchantmentCompatible(EnchantmentHelper.getEnchantmentsForCrafting(itemStack).keySet(), enchantment) || (org.purpurmc.purpur.PurpurConfig.allowUnsafeEnchantCommand && !itemStack.hasEnchantment(enchantment2))) { // Purpur + itemStack.enchant(enchantment, level); i++; } else if (targets.size() == 1) { diff --git a/src/main/java/net/minecraft/world/inventory/AnvilMenu.java b/src/main/java/net/minecraft/world/inventory/AnvilMenu.java -index 5cadd69bcae33b1de58806fcf40533850d976154..17067510990f575bf638f6a95ed0d964f6e94dc5 100644 +index 48d803a3e8419a04fce934263f7a01dbfd335e2e..26951cc5fb64a8d6c99d450dbe236f28b56e44a7 100644 --- a/src/main/java/net/minecraft/world/inventory/AnvilMenu.java +++ b/src/main/java/net/minecraft/world/inventory/AnvilMenu.java @@ -228,7 +228,8 @@ public class AnvilMenu extends ItemCombinerMenu { - int i2 = entry.getIntValue(); i2 = l1 == i2 ? i2 + 1 : Math.max(i2, l1); + Enchantment enchantment = (Enchantment) holder.value(); - boolean flag3 = enchantment.canEnchant(itemstack); + boolean flag3 = canDoUnsafeEnchants || (org.purpurmc.purpur.PurpurConfig.allowUnsafeEnchants && org.purpurmc.purpur.PurpurConfig.allowInapplicableEnchants) || enchantment.canEnchant(itemstack); // Purpur + boolean flag4 = true; // Purpur @@ -74,10 +74,10 @@ index 5cadd69bcae33b1de58806fcf40533850d976154..17067510990f575bf638f6a95ed0d964 ((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 c3a4158df98d52854d777f986d8a8b962ea55e29..18f0652da2b7a8572463fcf302eb4d35480daf1a 100644 +index ff721322468571aa86aa1fadf4e59fc0e62c457a..29ff737c0dd267710f852e50ac64a0eea7f8738b 100644 --- a/src/main/java/net/minecraft/world/item/ItemStack.java +++ b/src/main/java/net/minecraft/world/item/ItemStack.java -@@ -1235,6 +1235,16 @@ public final class ItemStack implements DataComponentHolder { +@@ -1240,6 +1240,16 @@ public final class ItemStack implements DataComponentHolder { return !((ItemEnchantments) this.getOrDefault(DataComponents.ENCHANTMENTS, ItemEnchantments.EMPTY)).isEmpty(); } @@ -95,25 +95,20 @@ index c3a4158df98d52854d777f986d8a8b962ea55e29..18f0652da2b7a8572463fcf302eb4d35 return (ItemEnchantments) this.getOrDefault(DataComponents.ENCHANTMENTS, ItemEnchantments.EMPTY); } diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index 06b9b3777e58366608433adbd92e4c22083725cf..ac50ff035635f33ee8d4bb3363fb13a1d0a013df 100644 +index a601f18f94e80b16ae22d077a405d685803529a8..01f192f911dfd4c4afcd942196fce62e35cdbacf 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -285,14 +285,34 @@ public class PurpurConfig { +@@ -283,6 +283,29 @@ public class PurpurConfig { + cryingObsidianValidForPortalFrame = getBoolean("settings.blocks.crying_obsidian.valid-for-portal-frame", cryingObsidianValidForPortalFrame); + } - public static boolean allowInfinityMending = false; - public static boolean allowCrossbowInfinity = true; + public static boolean allowUnsafeEnchants = false; + public static boolean allowInapplicableEnchants = true; + public static boolean allowIncompatibleEnchants = true; + public static boolean allowHigherEnchantsLevels = true; + public static boolean allowUnsafeEnchantCommand = false; + public static boolean replaceIncompatibleEnchants = false; - private static void enchantmentSettings() { - if (version < 5) { - boolean oldValue = getBoolean("settings.enchantment.allow-infinite-and-mending-together", false); - set("settings.enchantment.allow-infinity-and-mending-together", oldValue); - set("settings.enchantment.allow-infinite-and-mending-together", null); - } ++ private static void enchantmentSettings() { + if (version < 30) { + boolean oldValue = getBoolean("settings.enchantment.allow-unsafe-enchants", false); + set("settings.enchantment.anvil.allow-unsafe-enchants", oldValue); @@ -122,14 +117,14 @@ index 06b9b3777e58366608433adbd92e4c22083725cf..ac50ff035635f33ee8d4bb3363fb13a1 + set("settings.enchantment.anvil.allow-higher-enchants-levels", true); + set("settings.enchantment.allow-unsafe-enchants", null); + } - allowInfinityMending = getBoolean("settings.enchantment.allow-infinity-and-mending-together", allowInfinityMending); - allowCrossbowInfinity = getBoolean("settings.enchantment.allow-infinity-on-crossbow", allowCrossbowInfinity); + allowUnsafeEnchants = getBoolean("settings.enchantment.anvil.allow-unsafe-enchants", allowUnsafeEnchants); + allowInapplicableEnchants = getBoolean("settings.enchantment.anvil.allow-inapplicable-enchants", allowInapplicableEnchants); + allowIncompatibleEnchants = getBoolean("settings.enchantment.anvil.allow-incompatible-enchants", allowIncompatibleEnchants); + allowHigherEnchantsLevels = getBoolean("settings.enchantment.anvil.allow-higher-enchants-levels", allowHigherEnchantsLevels); + allowUnsafeEnchantCommand = getBoolean("settings.enchantment.allow-unsafe-enchant-command", allowUnsafeEnchants); // allowUnsafeEnchants as default for backwards compatability + replaceIncompatibleEnchants = getBoolean("settings.enchantment.anvil.replace-incompatible-enchants", replaceIncompatibleEnchants); - } - ++ } ++ public static boolean endermanShortHeight = false; + private static void entitySettings() { + endermanShortHeight = getBoolean("settings.entity.enderman.short-height", endermanShortHeight); diff --git a/patches/unapplied-server/0149-Configurable-sponge-absorption.patch b/patches/server/0141-Configurable-sponge-absorption.patch similarity index 93% rename from patches/unapplied-server/0149-Configurable-sponge-absorption.patch rename to patches/server/0141-Configurable-sponge-absorption.patch index 3c506fc31..3fa231c5f 100644 --- a/patches/unapplied-server/0149-Configurable-sponge-absorption.patch +++ b/patches/server/0141-Configurable-sponge-absorption.patch @@ -21,10 +21,10 @@ index 902825ec9ea05f4418b45f56a008d73f217bd178..a676ccfa6b02e8986df6f6a2e04cbb06 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 3464f0c8d019c4675c2df7c83e0a77cb3eec16e0..d7cfb2ab82953799d0ff13fcdcb115ca2fa20450 100644 +index 9be6d30c688e4929e34e9f039b32e3db177f6f57..43e26db7e22115c6814c5e6e01a96b4d08ad8bd7 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -630,6 +630,13 @@ public class PurpurWorldConfig { +@@ -613,6 +613,13 @@ public class PurpurWorldConfig { spawnerDeactivateByRedstone = getBoolean("blocks.spawner.deactivate-by-redstone", spawnerDeactivateByRedstone); } diff --git a/patches/unapplied-server/0150-Projectile-offset-config.patch b/patches/server/0142-Projectile-offset-config.patch similarity index 83% rename from patches/unapplied-server/0150-Projectile-offset-config.patch rename to patches/server/0142-Projectile-offset-config.patch index bf73e8d3c..69a688aa1 100644 --- a/patches/unapplied-server/0150-Projectile-offset-config.patch +++ b/patches/server/0142-Projectile-offset-config.patch @@ -5,23 +5,23 @@ Subject: [PATCH] Projectile offset config diff --git a/src/main/java/net/minecraft/world/item/BowItem.java b/src/main/java/net/minecraft/world/item/BowItem.java -index abe6da2d70e8080461f70014757c1e1b5878bbf7..8bca38ec152f9612298bf6b3e10e7e0566ec3b78 100644 +index 6eb5c0f23d9dc61e69ad5ad493c89602a9dcd4b5..a00181da8417445705d181fe62933c48a0b1170a 100644 --- a/src/main/java/net/minecraft/world/item/BowItem.java +++ b/src/main/java/net/minecraft/world/item/BowItem.java -@@ -31,7 +31,7 @@ public class BowItem extends ProjectileWeaponItem { +@@ -32,7 +32,7 @@ public class BowItem extends ProjectileWeaponItem { if (!((double)f < 0.1)) { List list = draw(stack, itemStack, player); - if (!world.isClientSide() && !list.isEmpty()) { -- this.shoot(world, player, player.getUsedItemHand(), stack, list, f * 3.0F, 1.0F, f == 1.0F, null); -+ this.shoot(world, player, player.getUsedItemHand(), stack, list, f * 3.0F, (float) world.purpurConfig.bowProjectileOffset, f == 1.0F, null); // Purpur + if (world instanceof ServerLevel serverLevel && !list.isEmpty()) { +- this.shoot(serverLevel, player, player.getUsedItemHand(), stack, list, f * 3.0F, 1.0F, f == 1.0F, null); ++ this.shoot(serverLevel, player, player.getUsedItemHand(), stack, list, f * 3.0F, (float) world.purpurConfig.bowProjectileOffset, f == 1.0F, null); // Purpur } world.playSound( diff --git a/src/main/java/net/minecraft/world/item/CrossbowItem.java b/src/main/java/net/minecraft/world/item/CrossbowItem.java -index d2bb5c84e1895f28afed03d1868a79338e4f3e58..78f124f5204e4af9318ca3eeced6b1e3353b210f 100644 +index c39fa953accd6cf35672f452052cca42fe6f29d0..dbdd1cd9486d91142e1c6b8a34aafba46c3988d3 100644 --- a/src/main/java/net/minecraft/world/item/CrossbowItem.java +++ b/src/main/java/net/minecraft/world/item/CrossbowItem.java -@@ -60,7 +60,7 @@ public class CrossbowItem extends ProjectileWeaponItem { +@@ -69,7 +69,7 @@ public class CrossbowItem extends ProjectileWeaponItem { ItemStack itemStack = user.getItemInHand(hand); ChargedProjectiles chargedProjectiles = itemStack.get(DataComponents.CHARGED_PROJECTILES); if (chargedProjectiles != null && !chargedProjectiles.isEmpty()) { @@ -83,23 +83,23 @@ index 369955746f4b51f69fa01103e3771dd74fc6c8f0..e6edd3a0fa2578900cdbe8bd588219dc 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 b094f4ec513194e10442156d8f7f2205da2384ac..85dc79b9b969fa0cbf6964cb26bac139fa55710a 100644 +index 4934bae61114b49a9f8d0ed044fbb881210df32a..1be074074283f12543ac771ac9201580e7736289 100644 --- a/src/main/java/net/minecraft/world/item/TridentItem.java +++ b/src/main/java/net/minecraft/world/item/TridentItem.java -@@ -76,7 +76,7 @@ public class TridentItem extends Item implements ProjectileItem { - if (k == 0) { - ThrownTrident entitythrowntrident = new ThrownTrident(world, entityhuman, stack); +@@ -81,7 +81,7 @@ public class TridentItem extends Item implements ProjectileItem { + if (f == 0.0F) { + ThrownTrident entitythrowntrident = new ThrownTrident(world, entityhuman, stack); -- entitythrowntrident.shootFromRotation(entityhuman, entityhuman.getXRot(), entityhuman.getYRot(), 0.0F, 2.5F + (float) k * 0.5F, 1.0F); -+ entitythrowntrident.shootFromRotation(entityhuman, entityhuman.getXRot(), entityhuman.getYRot(), 0.0F, 2.5F + (float) k * 0.5F, (float) world.purpurConfig.tridentProjectileOffset); // Purpur - if (entityhuman.hasInfiniteMaterials()) { - entitythrowntrident.pickup = AbstractArrow.Pickup.CREATIVE_ONLY; - } +- entitythrowntrident.shootFromRotation(entityhuman, entityhuman.getXRot(), entityhuman.getYRot(), 0.0F, 2.5F, 1.0F); ++ entitythrowntrident.shootFromRotation(entityhuman, entityhuman.getXRot(), entityhuman.getYRot(), 0.0F, 2.5F, (float) world.purpurConfig.tridentProjectileOffset); // Purpur + if (entityhuman.hasInfiniteMaterials()) { + 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 d7cfb2ab82953799d0ff13fcdcb115ca2fa20450..3550147e9c80964dc1bf4007e4280de4a3b39d78 100644 +index 43e26db7e22115c6814c5e6e01a96b4d08ad8bd7..ebc3615b395e9f9ff9a6dd5ac65eec6b530edad4 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -455,6 +455,23 @@ public class PurpurWorldConfig { +@@ -438,6 +438,23 @@ public class PurpurWorldConfig { //} } From c716c803125d90ab24c40a40394315189285deb3 Mon Sep 17 00:00:00 2001 From: granny Date: Fri, 14 Jun 2024 15:53:37 -0700 Subject: [PATCH 054/588] 200 patches \o/ --- ...or-powered-rail-activation-distance.patch} | 4 +- .../0144-Piglin-portal-spawn-modifier.patch} | 10 +- ...Config-to-change-max-number-of-bees.patch} | 4 +- ...-Config-for-wither-explosion-radius.patch} | 10 +- .../0147-Gamemode-extra-permissions.patch} | 4 +- ...0148-Configurable-piston-push-limit.patch} | 4 +- ...149-Configurable-broadcast-settings.patch} | 8 +- .../0150-Configurable-mob-blindness.patch} | 10 +- ...hidden-players-from-entity-selector.patch} | 30 +++--- ...-to-impact-Creeper-explosion-radius.patch} | 8 +- .../0153-Iron-golem-calm-anger-options.patch} | 12 +-- .../0154-Breedable-parrots.patch} | 12 +-- ...gurable-powered-rail-boost-modifier.patch} | 8 +- ...ge-multiplier-critical-damage-value.patch} | 24 ++--- ...n-to-disable-dragon-egg-teleporting.patch} | 4 +- ...fig-for-unverified-username-message.patch} | 4 +- ...-anvil-cumulative-cost-configurable.patch} | 6 +- ...e-can-work-when-raining-or-at-night.patch} | 10 +- ...61-API-for-any-mob-to-burn-daylight.patch} | 99 +++++++++++-------- .../0162-Config-MobEffect-by-world.patch} | 4 +- ...eacon-Activation-Range-Configurable.patch} | 6 +- ...ke-lightning-rod-range-configurable.patch} | 8 +- ...fter-eating-food-fills-hunger-bar-c.patch} | 24 ++--- ...ayer-join-full-server-by-permission.patch} | 4 +- ...7-Shulker-spawn-from-bullet-options.patch} | 12 +-- ...ating-glow-berries-adds-glow-effect.patch} | 10 +- ...-Option-to-make-drowned-break-doors.patch} | 6 +- ...nfigurable-hunger-starvation-damage.patch} | 6 +- .../0171-Enhance-SysoutCatcher.patch} | 0 .../0172-Add-uptime-command.patch} | 10 +- .../0173-Tool-actionable-options.patch} | 78 ++++++++------- ...4-Store-placer-on-Block-when-placed.patch} | 10 +- .../0175-Summoner-API.patch} | 14 +-- ...mizable-sleeping-actionbar-messages.patch} | 10 +- ...-shulker-box-items-from-dropping-co.patch} | 6 +- .../0178-Big-dripleaf-tilt-delay.patch} | 4 +- ...0179-Player-ridable-in-water-option.patch} | 10 +- ...-Enderman-teleport-on-projectile-hi.patch} | 10 +- .../0181-Add-compass-command.patch} | 26 ++--- .../0182-Toggle-for-kinetic-damage.patch} | 8 +- ...-Option-for-disable-observer-clocks.patch} | 4 +- ...zeable-Zombie-Villager-curing-times.patch} | 10 +- ...for-sponges-to-work-on-lava-and-mud.patch} | 4 +- ...186-Toggle-for-Wither-s-spawn-sound.patch} | 8 +- ...-breaks-from-solid-neighbors-config.patch} | 4 +- ...0188-Conduit-behavior-configuration.patch} | 4 +- .../0189-Cauldron-fill-chances.patch} | 4 +- ...o-allow-mobs-to-pathfind-over-rails.patch} | 6 +- 48 files changed, 300 insertions(+), 281 deletions(-) rename patches/{unapplied-server/0151-Config-for-powered-rail-activation-distance.patch => server/0143-Config-for-powered-rail-activation-distance.patch} (91%) rename patches/{unapplied-server/0152-Piglin-portal-spawn-modifier.patch => server/0144-Piglin-portal-spawn-modifier.patch} (87%) rename patches/{unapplied-server/0153-Config-to-change-max-number-of-bees.patch => server/0145-Config-to-change-max-number-of-bees.patch} (94%) rename patches/{unapplied-server/0154-Config-for-wither-explosion-radius.patch => server/0146-Config-for-wither-explosion-radius.patch} (85%) rename patches/{unapplied-server/0155-Gamemode-extra-permissions.patch => server/0147-Gamemode-extra-permissions.patch} (97%) rename patches/{unapplied-server/0156-Configurable-piston-push-limit.patch => server/0148-Configurable-piston-push-limit.patch} (94%) rename patches/{unapplied-server/0157-Configurable-broadcast-settings.patch => server/0149-Configurable-broadcast-settings.patch} (90%) rename patches/{unapplied-server/0158-Configurable-mob-blindness.patch => server/0150-Configurable-mob-blindness.patch} (89%) rename patches/{unapplied-server/0159-Hide-hidden-players-from-entity-selector.patch => server/0151-Hide-hidden-players-from-entity-selector.patch} (78%) rename patches/{unapplied-server/0160-Config-for-health-to-impact-Creeper-explosion-radius.patch => server/0152-Config-for-health-to-impact-Creeper-explosion-radius.patch} (89%) rename patches/{unapplied-server/0161-Iron-golem-calm-anger-options.patch => server/0153-Iron-golem-calm-anger-options.patch} (93%) rename patches/{unapplied-server/0162-Breedable-parrots.patch => server/0154-Breedable-parrots.patch} (89%) rename patches/{unapplied-server/0163-Configurable-powered-rail-boost-modifier.patch => server/0155-Configurable-powered-rail-boost-modifier.patch} (88%) rename patches/{unapplied-server/0164-Add-config-change-multiplier-critical-damage-value.patch => server/0156-Add-config-change-multiplier-critical-damage-value.patch} (66%) rename patches/{unapplied-server/0165-Option-to-disable-dragon-egg-teleporting.patch => server/0157-Option-to-disable-dragon-egg-teleporting.patch} (92%) rename patches/{unapplied-server/0166-Config-for-unverified-username-message.patch => server/0158-Config-for-unverified-username-message.patch} (94%) rename patches/{unapplied-server/0167-Make-anvil-cumulative-cost-configurable.patch => server/0159-Make-anvil-cumulative-cost-configurable.patch} (89%) rename patches/{unapplied-server/0168-Bee-can-work-when-raining-or-at-night.patch => server/0160-Bee-can-work-when-raining-or-at-night.patch} (90%) rename patches/{unapplied-server/0169-API-for-any-mob-to-burn-daylight.patch => server/0161-API-for-any-mob-to-burn-daylight.patch} (83%) rename patches/{unapplied-server/0170-Config-MobEffect-by-world.patch => server/0162-Config-MobEffect-by-world.patch} (97%) rename patches/{unapplied-server/0171-Beacon-Activation-Range-Configurable.patch => server/0163-Beacon-Activation-Range-Configurable.patch} (90%) rename patches/{unapplied-server/0172-Make-lightning-rod-range-configurable.patch => server/0164-Make-lightning-rod-range-configurable.patch} (86%) rename patches/{unapplied-server/0173-Burp-delay-burp-after-eating-food-fills-hunger-bar-c.patch => server/0165-Burp-delay-burp-after-eating-food-fills-hunger-bar-c.patch} (82%) rename patches/{unapplied-server/0174-Allow-player-join-full-server-by-permission.patch => server/0166-Allow-player-join-full-server-by-permission.patch} (90%) rename patches/{unapplied-server/0176-Shulker-spawn-from-bullet-options.patch => server/0167-Shulker-spawn-from-bullet-options.patch} (92%) rename patches/{unapplied-server/0177-Eating-glow-berries-adds-glow-effect.patch => server/0168-Eating-glow-berries-adds-glow-effect.patch} (91%) rename patches/{unapplied-server/0178-Option-to-make-drowned-break-doors.patch => server/0169-Option-to-make-drowned-break-doors.patch} (93%) rename patches/{unapplied-server/0179-Configurable-hunger-starvation-damage.patch => server/0170-Configurable-hunger-starvation-damage.patch} (87%) rename patches/{unapplied-server/0180-Enhance-SysoutCatcher.patch => server/0171-Enhance-SysoutCatcher.patch} (100%) rename patches/{unapplied-server/0181-Add-uptime-command.patch => server/0172-Add-uptime-command.patch} (95%) rename patches/{unapplied-server/0182-Tool-actionable-options.patch => server/0173-Tool-actionable-options.patch} (94%) rename patches/{unapplied-server/0183-Store-placer-on-Block-when-placed.patch => server/0174-Store-placer-on-Block-when-placed.patch} (87%) rename patches/{unapplied-server/0184-Summoner-API.patch => server/0175-Summoner-API.patch} (95%) rename patches/{unapplied-server/0185-Customizable-sleeping-actionbar-messages.patch => server/0176-Customizable-sleeping-actionbar-messages.patch} (92%) rename patches/{unapplied-server/0186-option-to-disable-shulker-box-items-from-dropping-co.patch => server/0177-option-to-disable-shulker-box-items-from-dropping-co.patch} (92%) rename patches/{unapplied-server/0187-Big-dripleaf-tilt-delay.patch => server/0178-Big-dripleaf-tilt-delay.patch} (94%) rename patches/{unapplied-server/0188-Player-ridable-in-water-option.patch => server/0179-Player-ridable-in-water-option.patch} (85%) rename patches/{unapplied-server/0189-Config-to-disable-Enderman-teleport-on-projectile-hi.patch => server/0180-Config-to-disable-Enderman-teleport-on-projectile-hi.patch} (86%) rename patches/{unapplied-server/0190-Add-compass-command.patch => server/0181-Add-compass-command.patch} (91%) rename patches/{unapplied-server/0191-Toggle-for-kinetic-damage.patch => server/0182-Toggle-for-kinetic-damage.patch} (87%) rename patches/{unapplied-server/0192-Add-Option-for-disable-observer-clocks.patch => server/0183-Add-Option-for-disable-observer-clocks.patch} (93%) rename patches/{unapplied-server/0193-Customizeable-Zombie-Villager-curing-times.patch => server/0184-Customizeable-Zombie-Villager-curing-times.patch} (87%) rename patches/{unapplied-server/0194-Option-for-sponges-to-work-on-lava-and-mud.patch => server/0185-Option-for-sponges-to-work-on-lava-and-mud.patch} (94%) rename patches/{unapplied-server/0195-Toggle-for-Wither-s-spawn-sound.patch => server/0186-Toggle-for-Wither-s-spawn-sound.patch} (88%) rename patches/{unapplied-server/0196-Cactus-breaks-from-solid-neighbors-config.patch => server/0187-Cactus-breaks-from-solid-neighbors-config.patch} (92%) rename patches/{unapplied-server/0198-Conduit-behavior-configuration.patch => server/0188-Conduit-behavior-configuration.patch} (98%) rename patches/{unapplied-server/0199-Cauldron-fill-chances.patch => server/0189-Cauldron-fill-chances.patch} (96%) rename patches/{unapplied-server/0200-Config-to-allow-mobs-to-pathfind-over-rails.patch => server/0190-Config-to-allow-mobs-to-pathfind-over-rails.patch} (92%) diff --git a/patches/unapplied-server/0151-Config-for-powered-rail-activation-distance.patch b/patches/server/0143-Config-for-powered-rail-activation-distance.patch similarity index 91% rename from patches/unapplied-server/0151-Config-for-powered-rail-activation-distance.patch rename to patches/server/0143-Config-for-powered-rail-activation-distance.patch index a92753919..b570b48c8 100644 --- a/patches/unapplied-server/0151-Config-for-powered-rail-activation-distance.patch +++ b/patches/server/0143-Config-for-powered-rail-activation-distance.patch @@ -18,10 +18,10 @@ index 9603d8c84ff483030dc08e82d3579b89e5c1f6e9..8fc65c32a3c6e6842a76b36f45e1b1c2 } 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 3550147e9c80964dc1bf4007e4280de4a3b39d78..57ac8480bc6bb324366bbdd30718eb5df6a7d69b 100644 +index ebc3615b395e9f9ff9a6dd5ac65eec6b530edad4..948fcb804e6ca46f2af1de41472c70c88711c47f 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -616,6 +616,11 @@ public class PurpurWorldConfig { +@@ -599,6 +599,11 @@ public class PurpurWorldConfig { powderSnowBypassMobGriefing = getBoolean("blocks.powder_snow.bypass-mob-griefing", powderSnowBypassMobGriefing); } diff --git a/patches/unapplied-server/0152-Piglin-portal-spawn-modifier.patch b/patches/server/0144-Piglin-portal-spawn-modifier.patch similarity index 87% rename from patches/unapplied-server/0152-Piglin-portal-spawn-modifier.patch rename to patches/server/0144-Piglin-portal-spawn-modifier.patch index 0c349fed8..e86e05542 100644 --- a/patches/unapplied-server/0152-Piglin-portal-spawn-modifier.patch +++ b/patches/server/0144-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 67060b7446535fc352d221d9fe3928d1d6ffcf54..8d5e841d8cc69bf09a9f1b6248633a72ce5fe1d7 100644 +index caa22afb0781671b901c23ebcc89e5bb0d2bd615..259f7e162968714e2959b199c7b1ab847dd624ef 100644 --- a/src/main/java/net/minecraft/world/level/block/NetherPortalBlock.java +++ b/src/main/java/net/minecraft/world/level/block/NetherPortalBlock.java -@@ -60,7 +60,7 @@ public class NetherPortalBlock extends Block { +@@ -77,7 +77,7 @@ public class NetherPortalBlock extends Block implements Portal { @Override protected void randomTick(BlockState state, ServerLevel world, BlockPos pos, RandomSource random) { @@ -31,10 +31,10 @@ index 67060b7446535fc352d221d9fe3928d1d6ffcf54..8d5e841d8cc69bf09a9f1b6248633a72 pos = pos.below(); } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index ff178d4c2db6f4ce600ec0cc7ee2e00994efbc68..a2b832b0cfd2325e1cf6ed7b673a7837c808d419 100644 +index 948fcb804e6ca46f2af1de41472c70c88711c47f..fdd84855671d21a4ecc5743b5ae72a645fc46443 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1672,6 +1672,7 @@ public class PurpurWorldConfig { +@@ -1655,6 +1655,7 @@ public class PurpurWorldConfig { public double piglinMaxHealth = 16.0D; public boolean piglinBypassMobGriefing = false; public boolean piglinTakeDamageFromWater = false; @@ -42,7 +42,7 @@ index ff178d4c2db6f4ce600ec0cc7ee2e00994efbc68..a2b832b0cfd2325e1cf6ed7b673a7837 private void piglinSettings() { piglinRidable = getBoolean("mobs.piglin.ridable", piglinRidable); piglinRidableInWater = getBoolean("mobs.piglin.ridable-in-water", piglinRidableInWater); -@@ -1684,6 +1685,7 @@ public class PurpurWorldConfig { +@@ -1667,6 +1668,7 @@ public class PurpurWorldConfig { piglinMaxHealth = getDouble("mobs.piglin.attributes.max_health", piglinMaxHealth); piglinBypassMobGriefing = getBoolean("mobs.piglin.bypass-mob-griefing", piglinBypassMobGriefing); piglinTakeDamageFromWater = getBoolean("mobs.piglin.takes-damage-from-water", piglinTakeDamageFromWater); diff --git a/patches/unapplied-server/0153-Config-to-change-max-number-of-bees.patch b/patches/server/0145-Config-to-change-max-number-of-bees.patch similarity index 94% rename from patches/unapplied-server/0153-Config-to-change-max-number-of-bees.patch rename to patches/server/0145-Config-to-change-max-number-of-bees.patch index 2a7554450..25eca8590 100644 --- a/patches/unapplied-server/0153-Config-to-change-max-number-of-bees.patch +++ b/patches/server/0145-Config-to-change-max-number-of-bees.patch @@ -18,7 +18,7 @@ index 7b263fab4f0014400b3b8e7e33db32f9a125f6ba..f52823146944d333f2d050e90261b570 public BeehiveBlockEntity(BlockPos pos, BlockState state) { super(BlockEntityType.BEEHIVE, pos, state); diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index 25b0eeb09f20601e8517f3dc413a72a3b05ac983..80dfed685a84c15d8e667272e0ec91e0f1349296 100644 +index 01f192f911dfd4c4afcd942196fce62e35cdbacf..d1dcaaec7731e24cad3e3566fd5bb4dbe0b7336d 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java @@ -250,6 +250,7 @@ public class PurpurConfig { @@ -36,4 +36,4 @@ index 25b0eeb09f20601e8517f3dc413a72a3b05ac983..80dfed685a84c15d8e667272e0ec91e0 + beeInsideBeeHive = getInt("settings.blocks.beehive.max-bees-inside", beeInsideBeeHive); } - public static boolean allowInfinityMending = false; + public static boolean allowUnsafeEnchants = false; diff --git a/patches/unapplied-server/0154-Config-for-wither-explosion-radius.patch b/patches/server/0146-Config-for-wither-explosion-radius.patch similarity index 85% rename from patches/unapplied-server/0154-Config-for-wither-explosion-radius.patch rename to patches/server/0146-Config-for-wither-explosion-radius.patch index 8186d9e89..7d5e82613 100644 --- a/patches/unapplied-server/0154-Config-for-wither-explosion-radius.patch +++ b/patches/server/0146-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 c753f715710ec4bb8337e035ac5a4c11371a84a0..a60d7f7baab005afc532ecec7aa22c53db4f51e0 100644 +index e472df057d087fe46bd40b798c050ed6e38a283c..999453409c19abf7f5b5c2dc399699856e57329e 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/WitherSkull.java +++ b/src/main/java/net/minecraft/world/entity/projectile/WitherSkull.java -@@ -99,7 +99,7 @@ public class WitherSkull extends AbstractHurtingProjectile { +@@ -103,7 +103,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); @@ -18,10 +18,10 @@ index c753f715710ec4bb8337e035ac5a4c11371a84a0..a60d7f7baab005afc532ecec7aa22c53 if (!event.isCancelled()) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index a2b832b0cfd2325e1cf6ed7b673a7837c808d419..fe8955f3c5891b1127f80744bb7c7418352b246c 100644 +index fdd84855671d21a4ecc5743b5ae72a645fc46443..b4bffe75d0462c44eada1a1412afea69732fdf6e 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2315,6 +2315,7 @@ public class PurpurWorldConfig { +@@ -2294,6 +2294,7 @@ public class PurpurWorldConfig { public boolean witherBypassMobGriefing = false; public boolean witherTakeDamageFromWater = false; public boolean witherCanRideVehicles = false; @@ -29,7 +29,7 @@ index a2b832b0cfd2325e1cf6ed7b673a7837c808d419..fe8955f3c5891b1127f80744bb7c7418 private void witherSettings() { witherRidable = getBoolean("mobs.wither.ridable", witherRidable); witherRidableInWater = getBoolean("mobs.wither.ridable-in-water", witherRidableInWater); -@@ -2335,6 +2336,7 @@ public class PurpurWorldConfig { +@@ -2314,6 +2315,7 @@ public class PurpurWorldConfig { witherBypassMobGriefing = getBoolean("mobs.wither.bypass-mob-griefing", witherBypassMobGriefing); witherTakeDamageFromWater = getBoolean("mobs.wither.takes-damage-from-water", witherTakeDamageFromWater); witherCanRideVehicles = getBoolean("mobs.wither.can-ride-vehicles", witherCanRideVehicles); diff --git a/patches/unapplied-server/0155-Gamemode-extra-permissions.patch b/patches/server/0147-Gamemode-extra-permissions.patch similarity index 97% rename from patches/unapplied-server/0155-Gamemode-extra-permissions.patch rename to patches/server/0147-Gamemode-extra-permissions.patch index e29ad2841..6a9514a62 100644 --- a/patches/unapplied-server/0155-Gamemode-extra-permissions.patch +++ b/patches/server/0147-Gamemode-extra-permissions.patch @@ -5,7 +5,7 @@ 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 b51850c0368b0fa2c9eb4ca44b9c931eb46478fc..684536f600cca94ea346129a139ec4aac4d9f979 100644 +index c98247a6ccc015f1da2c11995fb392b24197e888..dea4dd6f0fbb1fc79132c249b9f72edba1366efd 100644 --- a/src/main/java/net/minecraft/commands/CommandSourceStack.java +++ b/src/main/java/net/minecraft/commands/CommandSourceStack.java @@ -209,6 +209,19 @@ public class CommandSourceStack implements ExecutionCommandSource