From 2e32ca3a7a8afb74d5a27d3c2920e849adaed1f6 Mon Sep 17 00:00:00 2001 From: Dreeam <61569423+Dreeam-qwq@users.noreply.github.com> Date: Fri, 14 Jun 2024 03:18:51 +0800 Subject: [PATCH] Updated Upstream (Gale/Purpur/Leaves) --- gradle.properties | 2 +- patches/api/0001-Rebrand.patch | 4 +- patches/api/0003-Pufferfish-Sentry.patch | 6 +- patches/api/0004-Purpur-API-Changes.patch | 68 ++- patches/api/0005-Remove-Timings.patch | 47 +- patches/api/0008-KeYi-Player-Skull-API.patch | 4 +- patches/api/0009-Slice-Smooth-Teleports.patch | 4 +- .../0001-Purpur-generated-api-Changes.patch | 2 +- .../0048-Fix-keepalive-kicked-name.patch | 0 .../{ => server}/0081-Implement-Noisium.patch | 0 .../server/0011-Purpur-Server-Changes.patch | 414 +++++++----------- ...12-Fix-Pufferfish-and-Purpur-patches.patch | 14 +- patches/server/0015-Remove-Timings.patch | 34 +- .../server/0021-KeYi-Player-Skull-API.patch | 4 +- patches/server/0030-Leaves-Server-Utils.patch | 2 +- .../server/0031-Leaves-Protocol-Core.patch | 12 +- .../server/0032-Leaves-Jade-Protocol.patch | 2 +- .../0033-Leaves-Appleskin-Protocol.patch | 2 +- .../0034-Leaves-Xaero-Map-Protocol.patch | 2 +- ...aves-Disable-moved-wrongly-threshold.patch | 2 +- ...-Fix-vehicle-teleport-by-end-gateway.patch | 2 +- .../server/0040-Petal-Async-Pathfinding.patch | 8 +- ...ble-movement-speed-of-more-entities.patch} | 4 +- ...-of-futures-for-chunk-structure-gen.patch} | 0 ...e-items-finding-hopper-nearby-check.patch} | 0 ...e-missing-Pufferfish-configurations.patch} | 0 ...issing-purpur-configuration-options.patch} | 4 +- ... => 0053-Skip-event-if-no-listeners.patch} | 0 ...-Rewrite-framed-map-tracker-ticking.patch} | 0 ...-MapItem-update-if-the-map-does-not.patch} | 0 ...e-coordinate-key-used-for-nearby-pl.patch} | 2 +- ...SparklyPaper-Optimize-canSee-checks.patch} | 2 +- ...g-and-snowball-can-knockback-player.patch} | 0 ...getProfiler-in-PathNavigationRegion.patch} | 0 ...x-MC-2025.patch => 0060-Fix-MC-2025.patch} | 0 ...MC-65198.patch => 0061-Fix-MC-65198.patch} | 0 ...atch => 0062-Including-5s-in-getTPS.patch} | 4 +- ...eating-stats-json-bases-on-player-n.patch} | 0 ...4-Fix-NPE-during-creating-GUI-graph.patch} | 0 ...eption-on-missing-ResourceKey-value.patch} | 0 ...h => 0066-Improve-Purpur-AFK-system.patch} | 2 +- ...-Virtual-Thread-for-async-scheduler.patch} | 2 +- ...onfigurable-chat-message-signatures.patch} | 4 +- ...069-Block-log4j-rce-exploit-in-chat.patch} | 2 +- ... => 0070-Cache-player-profileResult.patch} | 0 ...n-editable-sign-warning-spam-in-con.patch} | 0 ...ed.patch => 0072-Matter-Secure-Seed.patch} | 12 +- ...d.patch => 0073-Matter-Seed-Command.patch} | 0 ...74-Ignore-terminal-provider-warning.patch} | 2 +- ...75-Fix-console-freeze-above-JAVA-22.patch} | 2 +- ...tch => 0076-Faster-Random-Generator.patch} | 0 ...> 0077-Don-t-save-primed-tnt-entity.patch} | 0 ...078-Don-t-save-falling-block-entity.patch} | 0 ...079-Configurable-connection-message.patch} | 0 patches/server/0081-Implement-Noisium.patch | 175 -------- 55 files changed, 281 insertions(+), 571 deletions(-) rename patches/{ => removed}/server/0048-Fix-keepalive-kicked-name.patch (100%) rename patches/removed/{ => server}/0081-Implement-Noisium.patch (100%) rename patches/server/{0049-Configurable-movement-speed-of-more-entities.patch => 0048-Configurable-movement-speed-of-more-entities.patch} (98%) rename patches/server/{0050-Faster-sequencing-of-futures-for-chunk-structure-gen.patch => 0049-Faster-sequencing-of-futures-for-chunk-structure-gen.patch} (100%) rename patches/server/{0051-Reduce-items-finding-hopper-nearby-check.patch => 0050-Reduce-items-finding-hopper-nearby-check.patch} (100%) rename patches/server/{0052-Plazma-Add-some-missing-Pufferfish-configurations.patch => 0051-Plazma-Add-some-missing-Pufferfish-configurations.patch} (100%) rename patches/server/{0053-Plazma-Add-missing-purpur-configuration-options.patch => 0052-Plazma-Add-missing-purpur-configuration-options.patch} (99%) rename patches/server/{0054-Skip-event-if-no-listeners.patch => 0053-Skip-event-if-no-listeners.patch} (100%) rename patches/server/{0055-PaperPR-Rewrite-framed-map-tracker-ticking.patch => 0054-PaperPR-Rewrite-framed-map-tracker-ticking.patch} (100%) rename patches/server/{0056-SparklyPaper-Skip-MapItem-update-if-the-map-does-not.patch => 0055-SparklyPaper-Skip-MapItem-update-if-the-map-does-not.patch} (100%) rename patches/server/{0057-SparklyPaper-Cache-coordinate-key-used-for-nearby-pl.patch => 0056-SparklyPaper-Cache-coordinate-key-used-for-nearby-pl.patch} (97%) rename patches/server/{0058-SparklyPaper-Optimize-canSee-checks.patch => 0057-SparklyPaper-Optimize-canSee-checks.patch} (97%) rename patches/server/{0059-Polpot-Make-egg-and-snowball-can-knockback-player.patch => 0058-Polpot-Make-egg-and-snowball-can-knockback-player.patch} (100%) rename patches/server/{0060-Redirect-vanilla-getProfiler-in-PathNavigationRegion.patch => 0059-Redirect-vanilla-getProfiler-in-PathNavigationRegion.patch} (100%) rename patches/server/{0061-Fix-MC-2025.patch => 0060-Fix-MC-2025.patch} (100%) rename patches/server/{0062-Fix-MC-65198.patch => 0061-Fix-MC-65198.patch} (100%) rename patches/server/{0063-Including-5s-in-getTPS.patch => 0062-Including-5s-in-getTPS.patch} (92%) rename patches/server/{0064-Remove-useless-creating-stats-json-bases-on-player-n.patch => 0063-Remove-useless-creating-stats-json-bases-on-player-n.patch} (100%) rename patches/server/{0065-Fix-NPE-during-creating-GUI-graph.patch => 0064-Fix-NPE-during-creating-GUI-graph.patch} (100%) rename patches/server/{0066-Don-t-throw-exception-on-missing-ResourceKey-value.patch => 0065-Don-t-throw-exception-on-missing-ResourceKey-value.patch} (100%) rename patches/server/{0067-Improve-Purpur-AFK-system.patch => 0066-Improve-Purpur-AFK-system.patch} (99%) rename patches/server/{0068-Virtual-Thread-for-async-scheduler.patch => 0067-Virtual-Thread-for-async-scheduler.patch} (97%) rename patches/server/{0069-Mirai-Configurable-chat-message-signatures.patch => 0068-Mirai-Configurable-chat-message-signatures.patch} (98%) rename patches/server/{0070-Block-log4j-rce-exploit-in-chat.patch => 0069-Block-log4j-rce-exploit-in-chat.patch} (96%) rename patches/server/{0071-Cache-player-profileResult.patch => 0070-Cache-player-profileResult.patch} (100%) rename patches/server/{0072-Prevent-change-non-editable-sign-warning-spam-in-con.patch => 0071-Prevent-change-non-editable-sign-warning-spam-in-con.patch} (100%) rename patches/server/{0073-Matter-Secure-Seed.patch => 0072-Matter-Secure-Seed.patch} (99%) rename patches/server/{0074-Matter-Seed-Command.patch => 0073-Matter-Seed-Command.patch} (100%) rename patches/server/{0075-Ignore-terminal-provider-warning.patch => 0074-Ignore-terminal-provider-warning.patch} (91%) rename patches/server/{0076-Fix-console-freeze-above-JAVA-22.patch => 0075-Fix-console-freeze-above-JAVA-22.patch} (92%) rename patches/server/{0077-Faster-Random-Generator.patch => 0076-Faster-Random-Generator.patch} (100%) rename patches/server/{0078-Don-t-save-primed-tnt-entity.patch => 0077-Don-t-save-primed-tnt-entity.patch} (100%) rename patches/server/{0079-Don-t-save-falling-block-entity.patch => 0078-Don-t-save-falling-block-entity.patch} (100%) rename patches/server/{0080-Configurable-connection-message.patch => 0079-Configurable-connection-message.patch} (100%) delete mode 100644 patches/server/0081-Implement-Noisium.patch diff --git a/gradle.properties b/gradle.properties index 50194425..fd9965ee 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ group = cn.dreeam.leaf mcVersion = 1.20.6 version = 1.20.6-R0.1-SNAPSHOT -galeCommit = c67ad06166d774550eb1e177857acdae6ac72fb8 +galeCommit = 2a97bf832e63e6905be5f08621b20180fb39914d org.gradle.caching = true org.gradle.parallel = true diff --git a/patches/api/0001-Rebrand.patch b/patches/api/0001-Rebrand.patch index f0379c5a..c7cc75ba 100644 --- a/patches/api/0001-Rebrand.patch +++ b/patches/api/0001-Rebrand.patch @@ -23,10 +23,10 @@ index bdc8d830f54e4567ec0b03041221fdcd016ce76c..957f15a91f6aa1235c12b82079e32bb4 * Gets the {@code ServerBuildInfo}. * diff --git a/src/main/java/org/bukkit/command/defaults/VersionCommand.java b/src/main/java/org/bukkit/command/defaults/VersionCommand.java -index fd5d9881abfd930bb883120f018f76dc78b62b14..dac207f2f5ae1838ca1b5092f7fe032adc038849 100644 +index e64bb57f74e6d6f78927be228825b3e0bdf41f48..5bccca7740dbec750960d96d4d951cff5da688da 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? diff --git a/patches/api/0003-Pufferfish-Sentry.patch b/patches/api/0003-Pufferfish-Sentry.patch index 1cd84dc1..7795118c 100644 --- a/patches/api/0003-Pufferfish-Sentry.patch +++ b/patches/api/0003-Pufferfish-Sentry.patch @@ -190,10 +190,10 @@ index 0000000000000000000000000000000000000000..c7772aac00f6db664f7a5673bc2585fa + } +} diff --git a/src/main/java/org/bukkit/plugin/SimplePluginManager.java b/src/main/java/org/bukkit/plugin/SimplePluginManager.java -index 07a9c9e254188c251165ca84c8e961fccda01175..5dc64d8c9aeae612fd31af0673f3530a9e777dfc 100644 +index 003bece642b682985625db93cad93026352bfc66..e8ba4f1108f2548a487877027e37d81fc150e042 100644 --- a/src/main/java/org/bukkit/plugin/SimplePluginManager.java +++ b/src/main/java/org/bukkit/plugin/SimplePluginManager.java -@@ -596,7 +596,9 @@ public final class SimplePluginManager implements PluginManager { +@@ -597,7 +597,9 @@ public final class SimplePluginManager implements PluginManager { // Paper start private void handlePluginException(String msg, Throwable ex, Plugin plugin) { @@ -203,7 +203,7 @@ index 07a9c9e254188c251165ca84c8e961fccda01175..5dc64d8c9aeae612fd31af0673f3530a callEvent(new com.destroystokyo.paper.event.server.ServerExceptionEvent(new com.destroystokyo.paper.exception.ServerPluginEnableDisableException(msg, ex, plugin))); } // Paper end -@@ -666,9 +668,11 @@ public final class SimplePluginManager implements PluginManager { +@@ -667,9 +669,11 @@ public final class SimplePluginManager implements PluginManager { )); } } catch (Throwable ex) { diff --git a/patches/api/0004-Purpur-API-Changes.patch b/patches/api/0004-Purpur-API-Changes.patch index 7dcfa99d..e9355c2d 100644 --- a/patches/api/0004-Purpur-API-Changes.patch +++ b/patches/api/0004-Purpur-API-Changes.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Purpur API Changes Original license: MIT Original project: https://github.com/PurpurMC/Purpur -Commit: 79d199c7f07d4acd9af6a9858cd895722ce16429 +Commit: 72192634b0629433aa531dedaf8c918755f82fbe Patches below are removed in this patch: Pufferfish-API-Changes.patch @@ -167,18 +167,10 @@ index d8cd53f7e45d3b5276aa360b10ff05ce7275a3a3..8c4619de2a52003a9684cc95f920b12e + // Purpur end } 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); } } @@ -193,7 +185,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()); + } @@ -257,10 +249,10 @@ index 918a045165cdcde264bc24082b7afebb407271de..687d11619379aead7f665d4a5f8f8bcc + // Purpur end } diff --git a/src/main/java/org/bukkit/Material.java b/src/main/java/org/bukkit/Material.java -index 7509b61dfdc0a6675256970cb850b08f9e814580..c1986ca90c3adb81daca4f72b62cda65e5465bff 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); } @@ -541,10 +533,10 @@ index 12dd25921625db145287edba783ae6d7e904ce80..9ed8f4e3e3d33e4bdefc7db85d5f65e3 + // Purpur end } diff --git a/src/main/java/org/bukkit/World.java b/src/main/java/org/bukkit/World.java -index 26622cafbb9811fafe18d5dd9b25f56960154772..7707963157ef98eedbf7143a0dbd9c22580a426d 100644 +index fdb87adfb8d6eff2bfabe7a41398c53d15d4cd98..0f2f7cb8acb226d6f9a1085ec9cac3f8faa77813 100644 --- a/src/main/java/org/bukkit/World.java +++ b/src/main/java/org/bukkit/World.java -@@ -4249,6 +4249,86 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient +@@ -4276,6 +4276,86 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient @Nullable public DragonBattle getEnderDragonBattle(); @@ -661,10 +653,10 @@ index 739911cda33b373f99df627a3a378b37d7d461aa..51e78c22cd021722b963fe31d1d9175d * Add an entity to the block. * 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; } @@ -684,7 +676,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) @@ -970,10 +962,10 @@ index bc84b892cae5fe7019a3ad481e9da79956efa1fe..48eb5b00c460cccde29d327cef1d63fc + // Purpur end } diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java -index dbd6eba668cd20a72ca6df9968c69743bca116ee..7e0aab5a34b45a032b73e566ce94bbb86a14ecf0 100644 +index 6324b7980dc0e4fc2194cbf55a2bb56f142d318c..6a11a44099ceced971e2909b564d40ed687f62e2 100644 --- a/src/main/java/org/bukkit/entity/Player.java +++ b/src/main/java/org/bukkit/entity/Player.java -@@ -3816,4 +3816,123 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM +@@ -3864,4 +3864,123 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM @Override Spigot spigot(); // Spigot end @@ -1255,7 +1247,7 @@ index c60be4fd24c7fdf65251dd6169e5e1ac3b588d95..569deccd2f1cf21da9b5906433ac493c + // 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; @@ -1276,7 +1268,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 @@ -1843,18 +1835,10 @@ index c64413a6740b604282984dea2a8430a6e7478d68..5c609d916e2d2f08ba90ebd23f13c5c9 + // Purpur end } 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 e7796054f3f65f5bea7f93c75320195f6c2f0561..1b1d05b77e93abe93ed782883f8d791f6559f778 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 { +@@ -191,6 +191,7 @@ public interface RecipeChoice extends Predicate, Cloneable { public static class ExactChoice implements RecipeChoice { private List choices; @@ -1862,7 +1846,7 @@ index 1cd6601c9d2e86ef850011fcb9e59811207b4af7..5ec7d9dab1935bb743e3264d9f739079 public ExactChoice(@NotNull ItemStack stack) { this(Arrays.asList(stack)); -@@ -229,6 +231,7 @@ public interface RecipeChoice extends Predicate, Cloneable { +@@ -241,6 +242,7 @@ public interface RecipeChoice extends Predicate, Cloneable { @Override public boolean test(@NotNull ItemStack t) { @@ -1870,17 +1854,17 @@ index 1cd6601c9d2e86ef850011fcb9e59811207b4af7..5ec7d9dab1935bb743e3264d9f739079 for (ItemStack match : choices) { if (t.isSimilar(match)) { return true; -@@ -238,6 +241,17 @@ public interface RecipeChoice extends Predicate, Cloneable { +@@ -250,6 +252,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 @@ -1906,25 +1890,25 @@ index cb7040876a99a5a7e49b81684ef0f3b79584c376..22d8f31b1b8a5dbb5ab3275068642937 + // Purpur - end } 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/CommandPermissions.java b/src/main/java/org/bukkit/util/permissions/CommandPermissions.java diff --git a/patches/api/0005-Remove-Timings.patch b/patches/api/0005-Remove-Timings.patch index 74fbd701..9b73569c 100644 --- a/patches/api/0005-Remove-Timings.patch +++ b/patches/api/0005-Remove-Timings.patch @@ -720,10 +720,10 @@ index 51d54b87106aa17c2de9ab22eae22d176c7d0bfc..00000000000000000000000000000000 -} diff --git a/src/main/java/co/aikar/timings/TimingHistory.java b/src/main/java/co/aikar/timings/TimingHistory.java deleted file mode 100644 -index 02e88db63be2d5e31da6b65157ba7b971b1f10f3..0000000000000000000000000000000000000000 +index 2d87237ea99d42c6ce896d52a1b2e5c3ec4d4568..0000000000000000000000000000000000000000 --- a/src/main/java/co/aikar/timings/TimingHistory.java +++ /dev/null -@@ -1,355 +0,0 @@ +@@ -1,352 +0,0 @@ -/* - * This file is licensed under the MIT License (MIT). - * @@ -877,17 +877,14 @@ index 02e88db63be2d5e31da6b65157ba7b971b1f10f3..00000000000000000000000000000000 - } - } - ), -- toObjectMapper(input.tileEntityCounts.entrySet(), -- new Function, JSONPair>() { -- @NotNull -- @Override -- public JSONPair apply(Map.Entry entry) { -- tileEntityTypeSet.add(entry.getKey()); -- return pair( -- String.valueOf(entry.getKey().ordinal()), -- entry.getValue().count() -- ); -- } +- toObjectMapper( +- input.tileEntityCounts.entrySet(), +- entry -> { +- tileEntityTypeSet.add(entry.getKey()); +- return pair( +- String.valueOf(entry.getKey().ordinal()), +- entry.getValue().count() +- ); - } - ) - ); @@ -2830,7 +2827,7 @@ index 3e61a926620a67daec3af54b72a1b911eaef2ed4..00000000000000000000000000000000 - } -} diff --git a/src/main/java/org/bukkit/UnsafeValues.java b/src/main/java/org/bukkit/UnsafeValues.java -index 0857a65ecbc36e0e4b8a7d0cda52be35f238f660..eabc229dd6c2cdfcc7d533e0eae44e97070922ba 100644 +index 0e9ccfee7a03d341e7c4d271f53b4ed168b404ef..1a38d70284e3644ba4bad87061974e58761c5a37 100644 --- a/src/main/java/org/bukkit/UnsafeValues.java +++ b/src/main/java/org/bukkit/UnsafeValues.java @@ -151,7 +151,8 @@ public interface UnsafeValues { @@ -2907,10 +2904,10 @@ index abe256e1e45ce28036da4aa1586715bc8a1a3414..9eab8024e0675865f17669847759a26d return i >= j && i <= k; } diff --git a/src/main/java/org/bukkit/command/SimpleCommandMap.java b/src/main/java/org/bukkit/command/SimpleCommandMap.java -index 83f84a76cbfdf5138ecccf3a886d38151a500bf2..4ba2d258114259691a453c03751b5b7fa3d6b525 100644 +index a09b5458191eb5df4787859b72a37fa1fa2bffba..6551a74b5c900d52f162c38c2b2ca94a8fc5c444 100644 --- a/src/main/java/org/bukkit/command/SimpleCommandMap.java +++ b/src/main/java/org/bukkit/command/SimpleCommandMap.java -@@ -38,7 +38,6 @@ public class SimpleCommandMap implements CommandMap { +@@ -39,7 +39,6 @@ public class SimpleCommandMap implements CommandMap { register("bukkit", new VersionCommand("version")); register("bukkit", new ReloadCommand("reload")); //register("bukkit", new PluginsCommand("plugins")); // Paper @@ -2918,15 +2915,15 @@ index 83f84a76cbfdf5138ecccf3a886d38151a500bf2..4ba2d258114259691a453c03751b5b7f } public void setFallbackCommands() { -@@ -70,7 +69,6 @@ public class SimpleCommandMap implements CommandMap { +@@ -71,7 +70,6 @@ public class SimpleCommandMap implements CommandMap { */ @Override public boolean register(@NotNull String label, @NotNull String fallbackPrefix, @NotNull Command command) { - command.timings = co.aikar.timings.TimingsManager.getCommandTiming(fallbackPrefix, command); // Paper - label = label.toLowerCase(java.util.Locale.ENGLISH).trim(); - fallbackPrefix = fallbackPrefix.toLowerCase(java.util.Locale.ENGLISH).trim(); + label = label.toLowerCase(Locale.ROOT).trim(); + fallbackPrefix = fallbackPrefix.toLowerCase(Locale.ROOT).trim(); boolean registered = register(label, command, false, fallbackPrefix); -@@ -165,23 +163,13 @@ public class SimpleCommandMap implements CommandMap { +@@ -166,23 +164,13 @@ public class SimpleCommandMap implements CommandMap { parsedArgs = event.getArgs(); // Purpur end @@ -2951,10 +2948,10 @@ index 83f84a76cbfdf5138ecccf3a886d38151a500bf2..4ba2d258114259691a453c03751b5b7f server.getPluginManager().callEvent(new com.destroystokyo.paper.event.server.ServerExceptionEvent(new com.destroystokyo.paper.exception.ServerCommandException(ex, target, sender, args))); // Paper throw new CommandException(msg, ex); diff --git a/src/main/java/org/bukkit/plugin/SimplePluginManager.java b/src/main/java/org/bukkit/plugin/SimplePluginManager.java -index 5dc64d8c9aeae612fd31af0673f3530a9e777dfc..b598ad80bbcc256c1440a5ab79321b93ae9f12ed 100644 +index e8ba4f1108f2548a487877027e37d81fc150e042..bfb3a06abc8c9b24cb217946f8f77d7027c8dbc1 100644 --- a/src/main/java/org/bukkit/plugin/SimplePluginManager.java +++ b/src/main/java/org/bukkit/plugin/SimplePluginManager.java -@@ -60,7 +60,6 @@ public final class SimplePluginManager implements PluginManager { +@@ -61,7 +61,6 @@ public final class SimplePluginManager implements PluginManager { public final Map> defSubs = new HashMap>(); public PluginManager paperPluginManager; // Paper end @@ -2962,7 +2959,7 @@ index 5dc64d8c9aeae612fd31af0673f3530a9e777dfc..b598ad80bbcc256c1440a5ab79321b93 public SimplePluginManager(@NotNull Server instance, @NotNull SimpleCommandMap commandMap) { server = instance; -@@ -723,12 +722,7 @@ public final class SimplePluginManager implements PluginManager { +@@ -724,12 +723,7 @@ public final class SimplePluginManager implements PluginManager { throw new IllegalPluginAccessException("Plugin attempted to register " + event + " while not enabled"); } @@ -2976,7 +2973,7 @@ index 5dc64d8c9aeae612fd31af0673f3530a9e777dfc..b598ad80bbcc256c1440a5ab79321b93 } @NotNull -@@ -958,17 +952,7 @@ public final class SimplePluginManager implements PluginManager { +@@ -959,17 +953,7 @@ public final class SimplePluginManager implements PluginManager { @Override public boolean useTimings() { @@ -3117,7 +3114,7 @@ index 12946bd55fcf7c40d39081779a7fa30049ee6165..00000000000000000000000000000000 - -} diff --git a/src/test/java/org/bukkit/AnnotationTest.java b/src/test/java/org/bukkit/AnnotationTest.java -index 88f1ca89fa640a686231b8eec87e70419b2d73ef..ef113b3b89f40ed7242d5c6361ea822693f87518 100644 +index 057dc3ebea3516863dda24252fe05d344c16fab3..3d0c2ef20810ff2dad479e84e6987ec47bada56f 100644 --- a/src/test/java/org/bukkit/AnnotationTest.java +++ b/src/test/java/org/bukkit/AnnotationTest.java @@ -50,15 +50,6 @@ public class AnnotationTest { diff --git a/patches/api/0008-KeYi-Player-Skull-API.patch b/patches/api/0008-KeYi-Player-Skull-API.patch index 523e7e29..e7b898e3 100644 --- a/patches/api/0008-KeYi-Player-Skull-API.patch +++ b/patches/api/0008-KeYi-Player-Skull-API.patch @@ -7,10 +7,10 @@ Original license: MIT Original project: https://github.com/KeYiMC/KeYi diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java -index d09618735f42fc3a0f9fd0de15499860f96ce0b3..f5a371a55c17adda48d988be8b249ae63f2e3b19 100644 +index 6a11a44099ceced971e2909b564d40ed687f62e2..bd00c8f6d9a90ab42e541a52d16d6233c37ce79b 100644 --- a/src/main/java/org/bukkit/entity/Player.java +++ b/src/main/java/org/bukkit/entity/Player.java -@@ -3935,4 +3935,22 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM +@@ -3983,4 +3983,22 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM sendDeathScreen(message); } // Purpur end diff --git a/patches/api/0009-Slice-Smooth-Teleports.patch b/patches/api/0009-Slice-Smooth-Teleports.patch index cac03567..bc6a2651 100644 --- a/patches/api/0009-Slice-Smooth-Teleports.patch +++ b/patches/api/0009-Slice-Smooth-Teleports.patch @@ -7,10 +7,10 @@ Original license: MIT Original project: https://github.com/Cryptite/Slice diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java -index f5a371a55c17adda48d988be8b249ae63f2e3b19..c0a334713576621f2e134db7264ae2dadbe69b1f 100644 +index bd00c8f6d9a90ab42e541a52d16d6233c37ce79b..54d4bff74eb1e83ad7540d2089033444a7c07cd0 100644 --- a/src/main/java/org/bukkit/entity/Player.java +++ b/src/main/java/org/bukkit/entity/Player.java -@@ -3638,6 +3638,19 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM +@@ -3686,6 +3686,19 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM String getClientBrandName(); // Paper end diff --git a/patches/generated-api/0001-Purpur-generated-api-Changes.patch b/patches/generated-api/0001-Purpur-generated-api-Changes.patch index bb94a7a0..8fba7c6f 100644 --- a/patches/generated-api/0001-Purpur-generated-api-Changes.patch +++ b/patches/generated-api/0001-Purpur-generated-api-Changes.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Purpur generated-api Changes Original license: MIT Original project: https://github.com/PurpurMC/Purpur -Commit: 79d199c7f07d4acd9af6a9858cd895722ce16429 +Commit: 72192634b0629433aa531dedaf8c918755f82fbe diff --git a/com/destroystokyo/paper/entity/ai/VanillaGoal.java b/com/destroystokyo/paper/entity/ai/VanillaGoal.java index 43f4deacef349502cbb207aafc4f9cb7a75177c5..6b692c24a62e2172116a6b9c371b1c0e2411c27e 100644 diff --git a/patches/server/0048-Fix-keepalive-kicked-name.patch b/patches/removed/server/0048-Fix-keepalive-kicked-name.patch similarity index 100% rename from patches/server/0048-Fix-keepalive-kicked-name.patch rename to patches/removed/server/0048-Fix-keepalive-kicked-name.patch diff --git a/patches/removed/0081-Implement-Noisium.patch b/patches/removed/server/0081-Implement-Noisium.patch similarity index 100% rename from patches/removed/0081-Implement-Noisium.patch rename to patches/removed/server/0081-Implement-Noisium.patch diff --git a/patches/server/0011-Purpur-Server-Changes.patch b/patches/server/0011-Purpur-Server-Changes.patch index 029f1449..e9dad365 100644 --- a/patches/server/0011-Purpur-Server-Changes.patch +++ b/patches/server/0011-Purpur-Server-Changes.patch @@ -8,7 +8,7 @@ TODO - Dreeam: Check TODOs in ServerGamePacketListenerImpl & Fix-pufferfish-issu Original license: MIT Original project: https://github.com/PurpurMC/Purpur -Commit: 79d199c7f07d4acd9af6a9858cd895722ce16429 +Commit: 72192634b0629433aa531dedaf8c918755f82fbe Patches below are removed in this patch: Metrics changes in Purpur-config-files.patch @@ -166,7 +166,7 @@ index 6fca13221ef3e0bbcad2ebbe74d6aadf8ed2c539..2d655cfddb6e7d6528b928c9270960bc } catch (final JsonSyntaxException ex) { LOGGER.error("Error parsing json from Paper's downloads API", ex); 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 { @@ -716,7 +716,7 @@ index 8841f0376a7676922362b6d06c2af752d1319737..207f8f864f0cf5874f8cad9bd15fa5e9 Bootstrap.bootStrap(); Bootstrap.validate(); diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 37ce8377f6fff96953137d8e0bf2a57543a0ead3..c7c4a56cb09ca513abdbaf5674c325e551ea2909 100644 +index ae808fcaea0710c137188417a7b929057cd242bc..7bba8f957d7b4cbe80000bdd39793ce600201496 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -282,6 +282,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 0.0F && this.isDamageSourceBlocked(source); // Copied from below -@@ -1533,13 +1583,13 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -1527,13 +1577,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; @@ -2869,7 +2869,7 @@ index c28e31f1c42b2248e51aa2c22f2584eab10afa68..c725725689eb57fecf5238c3435e4d80 LivingEntity entityliving2 = entitywolf.getOwner(); if (entityliving2 instanceof net.minecraft.world.entity.player.Player) { -@@ -1654,6 +1704,18 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -1648,6 +1698,18 @@ public abstract class LivingEntity extends Entity implements Attackable { } } @@ -2888,7 +2888,7 @@ index c28e31f1c42b2248e51aa2c22f2584eab10afa68..c725725689eb57fecf5238c3435e4d80 org.bukkit.inventory.EquipmentSlot handSlot = (hand != null) ? org.bukkit.craftbukkit.CraftEquipmentSlot.getHand(hand) : null; EntityResurrectEvent event = new EntityResurrectEvent((org.bukkit.entity.LivingEntity) this.getBukkitEntity(), handSlot); event.setCancelled(itemstack == null); -@@ -1820,7 +1882,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -1814,7 +1876,7 @@ public abstract class LivingEntity extends Entity implements Attackable { boolean flag = false; if (this.dead && adversary instanceof WitherBoss) { // Paper @@ -2897,7 +2897,7 @@ index c28e31f1c42b2248e51aa2c22f2584eab10afa68..c725725689eb57fecf5238c3435e4d80 BlockPos blockposition = this.blockPosition(); BlockState iblockdata = Blocks.WITHER_ROSE.defaultBlockState(); -@@ -1866,6 +1928,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -1860,6 +1922,7 @@ public abstract class LivingEntity extends Entity implements Attackable { this.dropEquipment(); // CraftBukkit - from below if (this.shouldDropLoot() && this.level().getGameRules().getBoolean(GameRules.RULE_DOMOBLOOT)) { @@ -2905,7 +2905,7 @@ index c28e31f1c42b2248e51aa2c22f2584eab10afa68..c725725689eb57fecf5238c3435e4d80 this.dropFromLootTable(source, flag); // Paper start final boolean prev = this.clearEquipmentSlots; -@@ -1874,6 +1937,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -1868,6 +1931,7 @@ public abstract class LivingEntity extends Entity implements Attackable { // Paper end this.dropCustomDeathLoot(source, i, flag); this.clearEquipmentSlots = prev; // Paper @@ -2913,7 +2913,7 @@ index c28e31f1c42b2248e51aa2c22f2584eab10afa68..c725725689eb57fecf5238c3435e4d80 } // 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, () -> { -@@ -2620,7 +2684,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -2614,7 +2678,7 @@ public abstract class LivingEntity extends Entity implements Attackable { @Override protected void onBelowWorld() { @@ -2922,7 +2922,7 @@ index c28e31f1c42b2248e51aa2c22f2584eab10afa68..c725725689eb57fecf5238c3435e4d80 } protected void updateSwingTime() { -@@ -2815,7 +2879,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -2809,7 +2873,7 @@ public abstract class LivingEntity extends Entity implements Attackable { } protected long lastJumpTime = 0L; // Paper - Prevent excessive velocity through repeated crits @@ -2931,7 +2931,7 @@ index c28e31f1c42b2248e51aa2c22f2584eab10afa68..c725725689eb57fecf5238c3435e4d80 float f = this.getJumpPower(); if (f > 1.0E-5F) { -@@ -2975,6 +3039,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -2969,6 +3033,7 @@ public abstract class LivingEntity extends Entity implements Attackable { if (f3 > 0.0F) { this.playSound(this.getFallDamageSound((int) f3), 1.0F, 1.0F); @@ -2939,7 +2939,7 @@ index c28e31f1c42b2248e51aa2c22f2584eab10afa68..c725725689eb57fecf5238c3435e4d80 this.hurt(this.damageSources().flyIntoWall(), f3); } } -@@ -3512,8 +3577,10 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -3506,8 +3571,10 @@ public abstract class LivingEntity extends Entity implements Attackable { this.pushEntities(); // Paper start - Add EntityMoveEvent @@ -2952,7 +2952,7 @@ index c28e31f1c42b2248e51aa2c22f2584eab10afa68..c725725689eb57fecf5238c3435e4d80 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()); -@@ -3523,12 +3590,48 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -3517,12 +3584,48 @@ 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()); } } @@ -3001,7 +3001,7 @@ index c28e31f1c42b2248e51aa2c22f2584eab10afa68..c725725689eb57fecf5238c3435e4d80 } public boolean isSensitiveToWater() { -@@ -3549,7 +3652,16 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -3543,7 +3646,16 @@ public abstract class LivingEntity extends Entity implements Attackable { int j = i / 10; if (j % 2 == 0) { @@ -3020,18 +3020,10 @@ index c28e31f1c42b2248e51aa2c22f2584eab10afa68..c725725689eb57fecf5238c3435e4d80 this.gameEvent(GameEvent.ELYTRA_GLIDE); diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java -index 0bc60e8a40b4c66e9199d91ad61250d1f0fa93bb..64ff212b80670cc52ffe975ec71504a2c6ef9f90 100644 +index 0bc60e8a40b4c66e9199d91ad61250d1f0fa93bb..42ba2c7b037aaea4ae16dec8bc1413a15fbb8317 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java -@@ -74,6 +74,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; -@@ -150,6 +151,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Targeti +@@ -150,6 +150,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Targeti private BlockPos restrictCenter; private float restrictRadius; @@ -3039,7 +3031,7 @@ index 0bc60e8a40b4c66e9199d91ad61250d1f0fa93bb..64ff212b80670cc52ffe975ec71504a2 public boolean aware = true; // CraftBukkit protected Mob(EntityType type, Level world) { -@@ -166,8 +168,8 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Targeti +@@ -166,8 +167,8 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Targeti this.goalSelector = new GoalSelector(); this.targetSelector = new GoalSelector(); // Gale end - Purpur - remove vanilla profiler @@ -3050,7 +3042,7 @@ index 0bc60e8a40b4c66e9199d91ad61250d1f0fa93bb..64ff212b80670cc52ffe975ec71504a2 this.jumpControl = new JumpControl(this); this.bodyRotationControl = this.createBodyControl(); this.navigation = this.createNavigation(world); -@@ -341,6 +343,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Targeti +@@ -341,6 +342,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Targeti entityliving = null; } } @@ -3058,7 +3050,7 @@ index 0bc60e8a40b4c66e9199d91ad61250d1f0fa93bb..64ff212b80670cc52ffe975ec71504a2 this.target = entityliving; return true; // CraftBukkit end -@@ -380,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.resetAmbientSoundTime(); this.playAmbientSound(); } @@ -3087,7 +3079,7 @@ index 0bc60e8a40b4c66e9199d91ad61250d1f0fa93bb..64ff212b80670cc52ffe975ec71504a2 @Override protected void playHurtSound(DamageSource damageSource) { this.resetAmbientSoundTime(); -@@ -584,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 @@ -3095,7 +3087,7 @@ index 0bc60e8a40b4c66e9199d91ad61250d1f0fa93bb..64ff212b80670cc52ffe975ec71504a2 } @Override -@@ -668,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 @@ -3107,7 +3099,7 @@ index 0bc60e8a40b4c66e9199d91ad61250d1f0fa93bb..64ff212b80670cc52ffe975ec71504a2 } @Override -@@ -718,7 +747,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Targeti +@@ -718,7 +746,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Targeti @Override public void aiStep() { super.aiStep(); @@ -3116,20 +3108,20 @@ index 0bc60e8a40b4c66e9199d91ad61250d1f0fa93bb..64ff212b80670cc52ffe975ec71504a2 Vec3i baseblockposition = this.getPickupReach(); List list = this.level().getEntitiesOfClass(ItemEntity.class, this.getBoundingBox().inflate((double) baseblockposition.getX(), (double) baseblockposition.getY(), (double) baseblockposition.getZ())); Iterator iterator = list.iterator(); -@@ -1289,6 +1318,12 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Targeti +@@ -1289,6 +1317,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 + @Nullable public static Item getEquipmentForSlot(EquipmentSlot equipmentSlot, int equipmentLevel) { switch (equipmentSlot) { -@@ -1383,7 +1418,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Targeti +@@ -1383,7 +1417,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)); @@ -3138,7 +3130,7 @@ index 0bc60e8a40b4c66e9199d91ad61250d1f0fa93bb..64ff212b80670cc52ffe975ec71504a2 return entityData; } -@@ -1430,6 +1465,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Targeti +@@ -1430,6 +1464,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Targeti if (!this.isAlive()) { return InteractionResult.PASS; } else if (this.getLeashHolder() == player) { @@ -3146,7 +3138,7 @@ index 0bc60e8a40b4c66e9199d91ad61250d1f0fa93bb..64ff212b80670cc52ffe975ec71504a2 // CraftBukkit start - fire PlayerUnleashEntityEvent // Paper start - Expand EntityUnleashEvent org.bukkit.event.player.PlayerUnleashEntityEvent event = CraftEventFactory.callPlayerUnleashEntityEvent(this, player, hand, !player.hasInfiniteMaterials()); -@@ -1505,7 +1541,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Targeti +@@ -1505,7 +1540,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Targeti protected void onOffspringSpawnedFromEgg(Player player, Mob child) {} protected InteractionResult mobInteract(Player player, InteractionHand hand) { @@ -3155,7 +3147,7 @@ index 0bc60e8a40b4c66e9199d91ad61250d1f0fa93bb..64ff212b80670cc52ffe975ec71504a2 } public boolean isWithinRestriction() { -@@ -1820,6 +1856,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Targeti +@@ -1820,6 +1855,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Targeti this.setLastHurtMob(target); } @@ -3163,7 +3155,7 @@ index 0bc60e8a40b4c66e9199d91ad61250d1f0fa93bb..64ff212b80670cc52ffe975ec71504a2 return flag; } -@@ -1829,28 +1866,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Targeti +@@ -1829,28 +1865,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Targeti // Gale end - JettPack - optimize sun burn tick - cache eye blockpos public boolean isSunBurnTick() { @@ -3193,7 +3185,7 @@ index 0bc60e8a40b4c66e9199d91ad61250d1f0fa93bb..64ff212b80670cc52ffe975ec71504a2 } @Override -@@ -1898,4 +1914,56 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Targeti +@@ -1898,4 +1913,56 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Targeti return itemmonsteregg == null ? null : new ItemStack(itemmonsteregg); } @@ -4359,26 +4351,10 @@ index 824e5e4fe7619ae46061c3c978c9a044db8c84ab..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 e336934f37075a827843e4b1bb2b6b660d2c60c9..4541e72bc93b19df6aecc781b4e381a7224aa4a7 100644 +index e336934f37075a827843e4b1bb2b6b660d2c60c9..97bdd48d8fa6b04e86f2db2be612dc8af1a4cb90 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; -@@ -37,6 +39,7 @@ import org.bukkit.event.player.PlayerBucketFillEvent; +@@ -37,6 +37,7 @@ import org.bukkit.event.player.PlayerBucketFillEvent; // CraftBukkit end public class Cow extends Animal { @@ -4386,7 +4362,7 @@ index e336934f37075a827843e4b1bb2b6b660d2c60c9..4541e72bc93b19df6aecc781b4e381a7 private static final EntityDimensions BABY_DIMENSIONS = EntityType.COW.getDimensions().scale(0.5F).withEyeHeight(0.665F); -@@ -44,18 +47,65 @@ public class Cow extends Animal { +@@ -44,18 +45,65 @@ public class Cow extends Animal { super(type, world); } @@ -4443,7 +4419,7 @@ index e336934f37075a827843e4b1bb2b6b660d2c60c9..4541e72bc93b19df6aecc781b4e381a7 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)); @@ -4453,7 +4429,7 @@ index e336934f37075a827843e4b1bb2b6b660d2c60c9..4541e72bc93b19df6aecc781b4e381a7 } @Override -@@ -64,7 +114,7 @@ public class Cow extends Animal { +@@ -64,7 +112,7 @@ public class Cow extends Animal { } public static AttributeSupplier.Builder createAttributes() { @@ -4462,7 +4438,7 @@ index e336934f37075a827843e4b1bb2b6b660d2c60c9..4541e72bc93b19df6aecc781b4e381a7 } @Override -@@ -94,6 +144,7 @@ public class Cow extends Animal { +@@ -94,6 +142,7 @@ public class Cow extends Animal { @Override public InteractionResult mobInteract(Player player, InteractionHand hand) { @@ -4470,7 +4446,7 @@ index e336934f37075a827843e4b1bb2b6b660d2c60c9..4541e72bc93b19df6aecc781b4e381a7 ItemStack itemstack = player.getItemInHand(hand); if (itemstack.is(Items.BUCKET) && !this.isBaby()) { -@@ -102,7 +153,7 @@ public class Cow extends Animal { +@@ -102,7 +151,7 @@ public class Cow extends Animal { if (event.isCancelled()) { player.containerMenu.sendAllDataToRemote(); // Paper - Fix inventory desync @@ -4479,7 +4455,7 @@ index e336934f37075a827843e4b1bb2b6b660d2c60c9..4541e72bc93b19df6aecc781b4e381a7 } // CraftBukkit end -@@ -111,6 +162,10 @@ public class Cow extends Animal { +@@ -111,6 +160,10 @@ public class Cow extends Animal { player.setItemInHand(hand, itemstack1); return InteractionResult.sidedSuccess(this.level().isClientSide); @@ -4490,7 +4466,7 @@ index e336934f37075a827843e4b1bb2b6b660d2c60c9..4541e72bc93b19df6aecc781b4e381a7 } else { return super.mobInteract(player, hand); } -@@ -126,4 +181,69 @@ public class Cow extends Animal { +@@ -126,4 +179,69 @@ public class Cow extends Animal { public EntityDimensions getDefaultDimensions(Pose pose) { return this.isBaby() ? Cow.BABY_DIMENSIONS : super.getDefaultDimensions(pose); } @@ -4500,11 +4476,11 @@ index e336934f37075a827843e4b1bb2b6b660d2c60c9..4541e72bc93b19df6aecc781b4e381a7 + 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; @@ -4524,7 +4500,7 @@ index e336934f37075a827843e4b1bb2b6b660d2c60c9..4541e72bc93b19df6aecc781b4e381a7 + 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); @@ -4552,7 +4528,7 @@ index e336934f37075a827843e4b1bb2b6b660d2c60c9..4541e72bc93b19df6aecc781b4e381a7 + 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); + } @@ -4723,18 +4699,10 @@ index 1b1cb0e4d54e52ebe794199e386c54c5d84b3719..c1a9a87ef0fefc499c0e1edbe1031f47 } 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 e705449496b1a06270ecbc13f4dce5357479845b..124839f22ed0499ca395a648e858469d81d31f93 100644 +index e705449496b1a06270ecbc13f4dce5357479845b..80f897007a60eb0cb9d300207b50387e1b377379 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; -@@ -145,6 +146,64 @@ public class Fox extends Animal implements VariantHolder { +@@ -145,6 +145,64 @@ public class Fox extends Animal implements VariantHolder { this.setCanPickUpLoot(true); } @@ -4799,7 +4767,7 @@ index e705449496b1a06270ecbc13f4dce5357479845b..124839f22ed0499ca395a648e858469d @Override protected void defineSynchedData(SynchedEntityData.Builder builder) { super.defineSynchedData(builder); -@@ -164,6 +223,7 @@ public class Fox extends Animal implements VariantHolder { +@@ -164,6 +222,7 @@ public class Fox extends Animal implements VariantHolder { return entityliving instanceof AbstractSchoolingFish; }); this.goalSelector.addGoal(0, new Fox.FoxFloatGoal()); @@ -4807,7 +4775,7 @@ index e705449496b1a06270ecbc13f4dce5357479845b..124839f22ed0499ca395a648e858469d this.goalSelector.addGoal(0, new ClimbOnTopOfPowderSnowGoal(this, this.level())); this.goalSelector.addGoal(1, new Fox.FaceplantGoal()); this.goalSelector.addGoal(2, new Fox.FoxPanicGoal(2.2D)); -@@ -190,6 +250,7 @@ public class Fox extends Animal implements VariantHolder { +@@ -190,6 +249,7 @@ public class Fox extends Animal implements VariantHolder { this.goalSelector.addGoal(11, new Fox.FoxSearchForItemsGoal()); this.goalSelector.addGoal(12, new Fox.FoxLookAtPlayerGoal(this, Player.class, 24.0F)); this.goalSelector.addGoal(13, new Fox.PerchAndSearchGoal()); @@ -4815,7 +4783,7 @@ index e705449496b1a06270ecbc13f4dce5357479845b..124839f22ed0499ca395a648e858469d this.targetSelector.addGoal(3, new Fox.DefendTrustedTargetGoal(LivingEntity.class, false, false, (entityliving) -> { return Fox.TRUSTED_TARGET_SELECTOR.test(entityliving) && !this.trusts(entityliving.getUUID()); })); -@@ -344,6 +405,11 @@ public class Fox extends Animal implements VariantHolder { +@@ -344,6 +404,11 @@ public class Fox extends Animal implements VariantHolder { } private void setTargetGoals() { @@ -4827,7 +4795,7 @@ index e705449496b1a06270ecbc13f4dce5357479845b..124839f22ed0499ca395a648e858469d if (this.getVariant() == Fox.Type.RED) { this.targetSelector.addGoal(4, this.landTargetGoal); this.targetSelector.addGoal(4, this.turtleEggTargetGoal); -@@ -377,6 +443,7 @@ public class Fox extends Animal implements VariantHolder { +@@ -377,6 +442,7 @@ public class Fox extends Animal implements VariantHolder { public void setVariant(Fox.Type variant) { this.entityData.set(Fox.DATA_TYPE_ID, variant.getId()); @@ -4835,13 +4803,13 @@ index e705449496b1a06270ecbc13f4dce5357479845b..124839f22ed0499ca395a648e858469d } List getTrustedUUIDs() { -@@ -717,6 +784,29 @@ public class Fox extends Animal implements VariantHolder { +@@ -717,6 +783,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) { @@ -4849,13 +4817,13 @@ index e705449496b1a06270ecbc13f4dce5357479845b..124839f22ed0499ca395a648e858469d + 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); @@ -4865,7 +4833,7 @@ index e705449496b1a06270ecbc13f4dce5357479845b..124839f22ed0499ca395a648e858469d @Override // Paper start - Cancellable death event protected org.bukkit.event.entity.EntityDeathEvent dropAllDeathLoot(DamageSource source) { -@@ -769,16 +859,16 @@ public class Fox extends Animal implements VariantHolder { +@@ -769,16 +858,16 @@ public class Fox extends Animal implements VariantHolder { return new Vec3(0.0D, (double) (0.55F * this.getEyeHeight()), (double) (this.getBbWidth() * 0.4F)); } @@ -4885,7 +4853,7 @@ index e705449496b1a06270ecbc13f4dce5357479845b..124839f22ed0499ca395a648e858469d } } -@@ -789,16 +879,16 @@ public class Fox extends Animal implements VariantHolder { +@@ -789,16 +878,16 @@ public class Fox extends Animal implements VariantHolder { } } @@ -4905,7 +4873,7 @@ index e705449496b1a06270ecbc13f4dce5357479845b..124839f22ed0499ca395a648e858469d } } -@@ -916,8 +1006,10 @@ public class Fox extends Animal implements VariantHolder { +@@ -916,8 +1005,10 @@ public class Fox extends Animal implements VariantHolder { CriteriaTriggers.BRED_ANIMALS.trigger(entityplayer2, this.animal, this.partner, entityfox); } @@ -4918,7 +4886,7 @@ index e705449496b1a06270ecbc13f4dce5357479845b..124839f22ed0499ca395a648e858469d this.animal.resetLove(); this.partner.resetLove(); worldserver.addFreshEntityWithPassengers(entityfox, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.BREEDING); // CraftBukkit - added SpawnReason -@@ -1303,7 +1395,7 @@ public class Fox extends Animal implements VariantHolder { +@@ -1303,7 +1394,7 @@ public class Fox extends Animal implements VariantHolder { } protected void onReachedTarget() { @@ -6429,19 +6397,10 @@ index 30b87b5cb18c25cdd04eab64cfbe5acd6c1b6d84..01dc59695f295657b1cd7bb015558bfc 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..e1f6202df983be2510436538904a45beedbdc9c2 100644 +index cebbb7341f86b13dcbfc3a41cbe264e9d4b68d60..a8193ef23763a11016b9ac8c7dd55b9e240d6039 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, 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)); -@@ -185,6 +293,7 @@ public class Wolf extends TamableAnimal implements NeutralMob, VariantHolder(this, Player.class, 10, true, false, this::okTarget)); @@ -8976,7 +8927,7 @@ index cff1b5e0e3fd32d82157d5f13d83d4abdfad7378..15afee3c4f6307557321424560d2340e this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, IronGolem.class, true)); 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)); -@@ -115,7 +181,7 @@ public class Drowned extends Zombie implements RangedAttackMob { +@@ -115,7 +180,7 @@ public class Drowned extends Zombie implements RangedAttackMob { @Override public boolean supportsBreakDoorGoal() { @@ -8985,7 +8936,7 @@ index cff1b5e0e3fd32d82157d5f13d83d4abdfad7378..15afee3c4f6307557321424560d2340e } @Override -@@ -262,8 +328,7 @@ public class Drowned extends Zombie implements RangedAttackMob { +@@ -262,8 +327,7 @@ public class Drowned extends Zombie implements RangedAttackMob { this.searchingForLand = targetingUnderwater; } @@ -8995,7 +8946,7 @@ index cff1b5e0e3fd32d82157d5f13d83d4abdfad7378..15afee3c4f6307557321424560d2340e private final Drowned drowned; public DrownedMoveControl(Drowned drowned) { -@@ -272,7 +337,7 @@ public class Drowned extends Zombie implements RangedAttackMob { +@@ -272,7 +336,7 @@ public class Drowned extends Zombie implements RangedAttackMob { } @Override @@ -9004,7 +8955,7 @@ index cff1b5e0e3fd32d82157d5f13d83d4abdfad7378..15afee3c4f6307557321424560d2340e LivingEntity entityliving = this.drowned.getTarget(); if (this.drowned.wantsToSwim() && this.drowned.isInWater()) { -@@ -295,7 +360,7 @@ public class Drowned extends Zombie implements RangedAttackMob { +@@ -295,7 +359,7 @@ public class Drowned extends Zombie implements RangedAttackMob { this.drowned.setYRot(this.rotlerp(this.drowned.getYRot(), f, 90.0F)); this.drowned.yBodyRot = this.drowned.getYRot(); @@ -9013,7 +8964,7 @@ index cff1b5e0e3fd32d82157d5f13d83d4abdfad7378..15afee3c4f6307557321424560d2340e float f2 = Mth.lerp(0.125F, this.drowned.getSpeed(), f1); this.drowned.setSpeed(f2); -@@ -305,7 +370,7 @@ public class Drowned extends Zombie implements RangedAttackMob { +@@ -305,7 +369,7 @@ public class Drowned extends Zombie implements RangedAttackMob { this.drowned.setDeltaMovement(this.drowned.getDeltaMovement().add(0.0D, -0.008D, 0.0D)); } @@ -9454,44 +9405,10 @@ index 373a4f036157017b0d95e8f1849780582235a549..a25c82be45e3db5143f6bf617fedc2fa if (this.floatDuration-- <= 0) { this.floatDuration += this.ghast.getRandom().nextInt(5) + 2; 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 118521ae54254b0a73bb7cba7b2871c9c26f89fc..5c2881d0be519c52cbba74d7b7ca3ea9b4536463 100644 +index 118521ae54254b0a73bb7cba7b2871c9c26f89fc..eab74acdcc644aa844d3daceee2d568e4f247428 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Giant.java +++ b/src/main/java/net/minecraft/world/entity/monster/Giant.java -@@ -1,23 +1,128 @@ - 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) { +@@ -12,12 +12,94 @@ public class Giant extends Monster { super(type, world); } @@ -9514,20 +9431,20 @@ index 118521ae54254b0a73bb7cba7b2871c9c26f89fc..5c2881d0be519c52cbba74d7b7ca3ea9 + @Override + protected void registerGoals() { + 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)); + } + } + } @@ -9556,8 +9473,8 @@ index 118521ae54254b0a73bb7cba7b2871c9c26f89fc..5c2881d0be519c52cbba74d7b7ca3ea9 } + @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); @@ -9566,11 +9483,11 @@ index 118521ae54254b0a73bb7cba7b2871c9c26f89fc..5c2881d0be519c52cbba74d7b7ca3ea9 + } + + @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)); + } + } + @@ -10485,28 +10402,10 @@ index 2d7b7c949faaaaae94c0043132a4a822f55df104..dbfcca8adb7afa7a3101f22c2bc48aff if (!CraftEventFactory.callEntityChangeBlockEvent(this, blockposition, iblockdata.getFluidState().createLegacyBlock())) { // Paper - fix wrong block state continue; 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..5e2a47d910f4bd2cd28008fcf5063cb3dd41da90 100644 +index e03119f88719c8d6d44793a6b3706ae97b2da307..eb2ccb04494b8079185d649ecf1aef6356ee73f6 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; -@@ -97,12 +101,59 @@ public class Shulker extends AbstractGolem implements VariantHolder getVariant() { @@ -10602,7 +10501,7 @@ index e03119f88719c8d6d44793a6b3706ae97b2da307..5e2a47d910f4bd2cd28008fcf5063cb3 } @Nullable -@@ -608,7 +668,7 @@ public class Shulker extends AbstractGolem implements VariantHolder 0 && l < amount; ++l) { -@@ -731,6 +743,12 @@ public final class ItemStack implements DataComponentHolder { +@@ -738,6 +750,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) { @@ -14038,7 +13937,7 @@ index 5bb861930d2e81d48d33121100d797ebca4394ea..b65671c7c3f507c7b3c9baf62e267c4e // 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); -@@ -1212,6 +1230,16 @@ public final class ItemStack implements DataComponentHolder { +@@ -1219,6 +1237,16 @@ public final class ItemStack implements DataComponentHolder { return !((ItemEnchantments) this.getOrDefault(DataComponents.ENCHANTMENTS, ItemEnchantments.EMPTY)).isEmpty(); } @@ -14843,6 +14742,23 @@ index 260906f493416d98ab574a7262fce5e9b7e40c64..ce639e4a2d87202a10ef4fc73274c4b2 .instabreak() .sound(SoundType.FLOWERING_AZALEA) .noOcclusion() +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..78679c2c26a36cf08cf3ffe78617d97d3439e14c 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/net/minecraft/world/level/block/BushBlock.java b/src/main/java/net/minecraft/world/level/block/BushBlock.java index a7b4b5600e3c889c69ac22294899713d50b5fe5c..a27e298ffdfa6956be9cde429d2cd45483a51fed 100644 --- a/src/main/java/net/minecraft/world/level/block/BushBlock.java @@ -15973,18 +15889,10 @@ index bbf59b2577812e74ffd45f694b83a42e043273c0..5cb06959aeaceeb98cfee34b1df804e6 if (!world.addFreshEntity(entitywither, SpawnReason.BUILD_WITHER)) { return; 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 360f96689b2b0015b56d3a9954b8454193a3316f..6b3401c866d7597bea392739b32e0c20280f258a 100644 +index 360f96689b2b0015b56d3a9954b8454193a3316f..90b01d987d16d71f0d69a755f430ffc2170fba7d 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 -@@ -47,6 +47,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; -@@ -215,6 +216,22 @@ public abstract class AbstractFurnaceBlockEntity extends BaseContainerBlockEntit +@@ -215,6 +215,22 @@ public abstract class AbstractFurnaceBlockEntity extends BaseContainerBlockEntit } } @@ -16007,7 +15915,7 @@ index 360f96689b2b0015b56d3a9954b8454193a3316f..6b3401c866d7597bea392739b32e0c20 // CraftBukkit start - add fields and methods private int maxStack = MAX_STACK; public List transaction = new java.util.ArrayList(); -@@ -337,6 +354,21 @@ public abstract class AbstractFurnaceBlockEntity extends BaseContainerBlockEntit +@@ -337,6 +353,21 @@ public abstract class AbstractFurnaceBlockEntity extends BaseContainerBlockEntit } ItemStack itemstack = (ItemStack) blockEntity.items.get(1); @@ -16017,7 +15925,7 @@ index 360f96689b2b0015b56d3a9954b8454193a3316f..6b3401c866d7597bea392739b32e0c20 + 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(); @@ -16029,7 +15937,7 @@ index 360f96689b2b0015b56d3a9954b8454193a3316f..6b3401c866d7597bea392739b32e0c20 boolean flag2 = !((ItemStack) blockEntity.items.get(0)).isEmpty(); boolean flag3 = !itemstack.isEmpty(); -@@ -422,6 +454,7 @@ public abstract class AbstractFurnaceBlockEntity extends BaseContainerBlockEntit +@@ -422,6 +453,7 @@ public abstract class AbstractFurnaceBlockEntity extends BaseContainerBlockEntit setChanged(world, pos, state); } @@ -16959,10 +16867,10 @@ index 9d93130f23addb18b97d7f5ec013faef17a74529..29d2fb87a65778926aea2cfc7a5b486c + // Purpur end - OfflinePlayer API } diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 4cd21c40653dae6bb7ee145a67b5c849bd4f3093..14379b1d2e53abdc57edf2bcd25c3248463ab442 100644 +index 4c3cf9b5643547ba04247882a7467161b8af501b..0523fef009b23eb801acfb6bcc45c02dfbef1833 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -409,6 +409,20 @@ public final class CraftServer implements Server { +@@ -411,6 +411,20 @@ public final class CraftServer implements Server { this.paperPluginManager = new io.papermc.paper.plugin.manager.PaperPluginManagerImpl(this, this.commandMap, pluginManager); this.pluginManager.paperPluginManager = this.paperPluginManager; // Paper end @@ -16983,7 +16891,7 @@ index 4cd21c40653dae6bb7ee145a67b5c849bd4f3093..14379b1d2e53abdc57edf2bcd25c3248 CraftRegistry.setMinecraftRegistry(console.registryAccess()); -@@ -1038,6 +1052,7 @@ public final class CraftServer implements Server { +@@ -1061,6 +1075,7 @@ public final class CraftServer implements Server { org.spigotmc.SpigotConfig.init((File) this.console.options.valueOf("spigot-settings")); // Spigot this.console.paperConfigurations.reloadConfigs(this.console); this.console.galeConfigurations.reloadConfigs(this.console); // Gale - Gale configuration @@ -16991,7 +16899,7 @@ index 4cd21c40653dae6bb7ee145a67b5c849bd4f3093..14379b1d2e53abdc57edf2bcd25c3248 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 +1068,7 @@ public final class CraftServer implements Server { +@@ -1076,6 +1091,7 @@ public final class CraftServer implements Server { } } world.spigotConfig.init(); // Spigot @@ -16999,7 +16907,7 @@ index 4cd21c40653dae6bb7ee145a67b5c849bd4f3093..14379b1d2e53abdc57edf2bcd25c3248 } Plugin[] pluginClone = pluginManager.getPlugins().clone(); // Paper -@@ -1069,6 +1085,7 @@ public final class CraftServer implements Server { +@@ -1092,6 +1108,7 @@ public final class CraftServer implements Server { this.reloadData(); org.spigotmc.SpigotConfig.registerCommands(); // Spigot io.papermc.paper.command.PaperCommands.registerCommands(this.console); // Paper @@ -17007,7 +16915,7 @@ index 4cd21c40653dae6bb7ee145a67b5c849bd4f3093..14379b1d2e53abdc57edf2bcd25c3248 this.overrideAllCommandBlockCommands = this.commandsConfiguration.getStringList("command-block-overrides").contains("*"); this.ignoreVanillaPermissions = this.commandsConfiguration.getBoolean("ignore-vanilla-permissions"); -@@ -1577,6 +1594,55 @@ public final class CraftServer implements Server { +@@ -1600,6 +1617,55 @@ public final class CraftServer implements Server { return true; } @@ -17063,7 +16971,7 @@ index 4cd21c40653dae6bb7ee145a67b5c849bd4f3093..14379b1d2e53abdc57edf2bcd25c3248 @Override public List getRecipesFor(ItemStack result) { Preconditions.checkArgument(result != null, "ItemStack cannot be null"); -@@ -3047,6 +3113,18 @@ public final class CraftServer implements Server { +@@ -3070,6 +3136,18 @@ public final class CraftServer implements Server { } // Gale end - Gale configuration - API @@ -17082,7 +16990,7 @@ index 4cd21c40653dae6bb7ee145a67b5c849bd4f3093..14379b1d2e53abdc57edf2bcd25c3248 @Override public void restart() { org.spigotmc.RestartCommand.restart(); -@@ -3329,4 +3407,15 @@ public final class CraftServer implements Server { +@@ -3352,4 +3430,15 @@ public final class CraftServer implements Server { } // Gale end - YAPFA - last tick time - API @@ -17099,10 +17007,10 @@ index 4cd21c40653dae6bb7ee145a67b5c849bd4f3093..14379b1d2e53abdc57edf2bcd25c3248 + // Purpur end } diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -index 2abe6131cc04ed397446c2aa08f77f9da00ce8c5..f27cf4efa3675cee8e6dd45c6f366cda35eb6abf 100644 +index 93f9c6d3904ccebafa4d15718e040f651f38af4e..91043fb82cb07163a9bcd05069f9dc8b7b9bff94 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -@@ -2424,6 +2424,48 @@ public class CraftWorld extends CraftRegionAccessor implements World { +@@ -2449,6 +2449,48 @@ public class CraftWorld extends CraftRegionAccessor implements World { return (this.getHandle().getDragonFight() == null) ? null : new CraftDragonBattle(this.getHandle().getDragonFight()); } @@ -17152,7 +17060,7 @@ index 2abe6131cc04ed397446c2aa08f77f9da00ce8c5..f27cf4efa3675cee8e6dd45c6f366cda public Collection getStructures(int x, int z) { return this.getStructures(x, z, struct -> true); diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java -index 6224bb20a2e3919b5fb33e5cfb8babc1929460c2..1b85f74a74b41d1f715abc55bf49613abbc3c97a 100644 +index 8332f81a79f969252f506e3ac43c96a36db22684..9f873c07bec896b6c91b306efa51e0f07da1c6a8 100644 --- a/src/main/java/org/bukkit/craftbukkit/Main.java +++ b/src/main/java/org/bukkit/craftbukkit/Main.java @@ -197,6 +197,14 @@ public class Main { @@ -17479,7 +17387,7 @@ index 30d62ee4d5cd2ddacb8783b5bbbf475d592b3e02..5c1cda88080850314dac196dbe71ff12 + // Purpur end } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java -index 18af8736f30780b48313257a09973e30df6d0e2f..1284c941a4c863c287098a0a04efcc723e727bb3 100644 +index 0196a49a5822e257b0e065e2383ec92b1bc27bba..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 { @@ -17536,7 +17444,7 @@ index 351f42842b780d053cd2e5bad9ae299449141b10..4860574e7fad7a9527dda599703c573c + // Purpur end } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 7e6116963d835d4606ef3d93b69d3e44b61288e1..241340a6d66f17f2a31fb03ff0dfab121b856368 100644 +index 40155cc70ba959eea8011626a30e26f44298c99d..8211ec2c701687d8e5334156772cf435b89f3cb3 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 { @@ -17596,7 +17504,7 @@ index 7e6116963d835d4606ef3d93b69d3e44b61288e1..241340a6d66f17f2a31fb03ff0dfab12 private void validateSpeed(float value) { Preconditions.checkArgument(value <= 1f && value >= -1f, "Speed value (%s) need to be between -1f and 1f", value); } -@@ -3519,4 +3550,70 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -3528,4 +3559,70 @@ public class CraftPlayer extends CraftHumanEntity implements Player { public void setSendViewDistance(final int viewDistance) { this.getHandle().setSendViewDistance(viewDistance); } @@ -17913,10 +17821,10 @@ index 52649f82351ab4f675c3cc3cd6640956b0f76b91..eb51c88c7a0658190d3a8bfd5d18dca7 DefaultPermissions.registerPermission(CommandPermissions.PREFIX + "seed", "Allows the user to view the seed of the world", PermissionDefault.OP, commands); diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java new file mode 100644 -index 0000000000000000000000000000000000000000..eaa8b63b0fb1f0ebefba9014cfec7f1065332171 +index 0000000000000000000000000000000000000000..d3a8f712b48b66f8452332668819967cb268f984 --- /dev/null +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -0,0 +1,582 @@ +@@ -0,0 +1,586 @@ +package org.purpurmc.purpur; + +import com.google.common.base.Throwables; @@ -18255,6 +18163,8 @@ index 0000000000000000000000000000000000000000..eaa8b63b0fb1f0ebefba9014cfec7f10 + 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); @@ -18326,6 +18236,8 @@ index 0000000000000000000000000000000000000000..eaa8b63b0fb1f0ebefba9014cfec7f10 + 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; @@ -24118,18 +24030,10 @@ index 0000000000000000000000000000000000000000..b7586f494528f30eb0da82420d3bcf5b + } +} diff --git a/src/main/java/org/spigotmc/ActivationRange.java b/src/main/java/org/spigotmc/ActivationRange.java -index df50c32482067368b11d2928bd353f4fbe595afe..9edb1e43dc9c55202443ef5f893d8e2bd0301de3 100644 +index df50c32482067368b11d2928bd353f4fbe595afe..638bed116e4c36974b6096524f3f878a1ecb89c5 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; -@@ -219,6 +220,7 @@ public class ActivationRange +@@ -219,6 +219,7 @@ public class ActivationRange continue; } @@ -24137,11 +24041,11 @@ index df50c32482067368b11d2928bd353f4fbe595afe..9edb1e43dc9c55202443ef5f893d8e2b // Paper start int worldHeight = world.getHeight(); ActivationRange.maxBB = player.getBoundingBox().inflate( maxRange, worldHeight, maxRange ); -@@ -416,6 +418,7 @@ public class ActivationRange +@@ -416,6 +417,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/0012-Fix-Pufferfish-and-Purpur-patches.patch b/patches/server/0012-Fix-Pufferfish-and-Purpur-patches.patch index 6586bf0e..0a2c66d0 100644 --- a/patches/server/0012-Fix-Pufferfish-and-Purpur-patches.patch +++ b/patches/server/0012-Fix-Pufferfish-and-Purpur-patches.patch @@ -27,7 +27,7 @@ index e94224ed280247ee69dfdff8dc960f2b8729be33..5b9725a9a81c0850dc2809c150529e5f for (Component component : formatProviders(spigotPlugins, sender)) { // Purpur diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index c7c4a56cb09ca513abdbaf5674c325e551ea2909..ede6cd55688e573e003a6568100b18d5e620f878 100644 +index 7bba8f957d7b4cbe80000bdd39793ce600201496..1f166b48af314ee85239ae39358a47fb0e6d423c 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -293,7 +293,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop list = this.level().getEntitiesOfClass(ItemEntity.class, this.getBoundingBox().inflate((double) baseblockposition.getX(), (double) baseblockposition.getY(), (double) baseblockposition.getZ())); Iterator iterator = list.iterator(); -@@ -1860,11 +1860,6 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Targeti +@@ -1859,11 +1859,6 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Targeti return flag; } diff --git a/patches/server/0015-Remove-Timings.patch b/patches/server/0015-Remove-Timings.patch index 107e8367..6a9365fe 100644 --- a/patches/server/0015-Remove-Timings.patch +++ b/patches/server/0015-Remove-Timings.patch @@ -964,7 +964,7 @@ index 57e76b53e5e314c3e6b8856010f7a84188121582..d6daa27a8d7aca00b181e90d789f4249 } 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 9b18c076cabdbfc4b266fa605f38e2ad375e8271..24a10554efcf7a24d2d2f82b6981c8d35d13338d 100644 +index 5bf2d1cca0661ff35533c41e84e4f387f1a18af8..03a787c9bafee3a6b300703cf05a6a65bd4e9c03 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -181,8 +181,6 @@ import org.bukkit.craftbukkit.CraftRegistry; @@ -1127,7 +1127,7 @@ index 9b18c076cabdbfc4b266fa605f38e2ad375e8271..24a10554efcf7a24d2d2f82b6981c8d3 iterator = this.playerList.getPlayers().iterator(); diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java -index 0bba378572f01b8998fd4cad544e93b3da248f08..ee99b0e74abc6447937b1af627c10ffbeeb9e0c0 100644 +index 62379ebae3e6972f88742ff29f607a99879f567d..ee99b0e74abc6447937b1af627c10ffbeeb9e0c0 100644 --- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java +++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java @@ -62,7 +62,6 @@ import org.apache.logging.log4j.Level; @@ -1161,7 +1161,7 @@ index 0bba378572f01b8998fd4cad544e93b3da248f08..ee99b0e74abc6447937b1af627c10ffb } - // Paper start command.set(event.getCommand()); -- if (event.getCommand().toLowerCase().startsWith("timings") && event.getCommand().toLowerCase().matches("timings (report|paste|get|merged|seperate)")) { +- if (event.getCommand().toLowerCase(java.util.Locale.ROOT).startsWith("timings") && event.getCommand().toLowerCase(java.util.Locale.ROOT).matches("timings (report|paste|get|merged|seperate)")) { - org.bukkit.command.BufferedCommandSender sender = new org.bukkit.command.BufferedCommandSender(); - Waitable waitable = new Waitable<>() { - @Override @@ -1257,7 +1257,7 @@ index 54c3e32c7ae869d55408d77ea2aa1635f980a39b..1dc4ccbd999964eee18a420c8166e1a8 } diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java -index 1af3a2c078dc802aca2297d188c5ac068e073d26..e769e8d8e853b2731d85b75d273b029fd08861fa 100644 +index 360e1df4574c8257ff52b4a38a26314c0ec1a05e..9115054c05d261dd959e1f1f091c9b96c6a01a79 100644 --- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java +++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java @@ -272,10 +272,8 @@ public class ServerChunkCache extends ChunkSource { @@ -1294,7 +1294,7 @@ index 1af3a2c078dc802aca2297d188c5ac068e073d26..e769e8d8e853b2731d85b75d273b029f @Override public void tick(BooleanSupplier shouldKeepTicking, boolean tickChunks) { - this.level.timings.doChunkMap.startTiming(); // Spigot - if (this.level.tickRateManager().runsNormally() || !tickChunks) { + if (this.level.tickRateManager().runsNormally() || !tickChunks || this.level.spigotConfig.unloadFrozenChunks) { // Spigot this.distanceManager.purgeStaleTickets(); } @@ -1862,10 +1862,10 @@ index f2a1787ba10bcb67ad5a2a36165bac55ea7f0a3e..184b69dc39749734f8176d3f3c2bf9f6 @Override diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 14379b1d2e53abdc57edf2bcd25c3248463ab442..a3e90368e1e34c08508a54fc8c279f12b2bf763e 100644 +index 0523fef009b23eb801acfb6bcc45c02dfbef1833..c8e424d6646f782c8fbd97c1e699115304983533 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -472,7 +472,6 @@ public final class CraftServer implements Server { +@@ -474,7 +474,6 @@ public final class CraftServer implements Server { this.saveCommandsConfig(); this.overrideAllCommandBlockCommands = this.commandsConfiguration.getStringList("command-block-overrides").contains("*"); this.ignoreVanillaPermissions = this.commandsConfiguration.getBoolean("ignore-vanilla-permissions"); @@ -1874,7 +1874,7 @@ index 14379b1d2e53abdc57edf2bcd25c3248463ab442..a3e90368e1e34c08508a54fc8c279f12 console.autosavePeriod = this.configuration.getInt("ticks-per.autosave"); this.warningState = WarningState.value(this.configuration.getString("settings.deprecated-verbose")); diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java -index 1b85f74a74b41d1f715abc55bf49613abbc3c97a..fa843d5b5ac9e0fe8886a95246a999ac02aacd6f 100644 +index 9f873c07bec896b6c91b306efa51e0f07da1c6a8..ce3572f8044d7a4732d9411a622be79c48da1346 100644 --- a/src/main/java/org/bukkit/craftbukkit/Main.java +++ b/src/main/java/org/bukkit/craftbukkit/Main.java @@ -375,8 +375,6 @@ public class Main { @@ -2027,10 +2027,10 @@ index b3e1adeb932da9b3bed16acd94e2f16da48a7c72..e9798517b9211c50a20ea5c69603aab3 } } diff --git a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java -index 53908cec6f3f5c834ace105c9143cb39dc47c827..bbcd357791c648036c614401c0fd94ad51a047f7 100644 +index 2918b61675e16a0dd023d3ca10f232c4675bf4b0..c8dc6333cddbf25c8211be6d24ce39f5ee64b70a 100644 --- a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java +++ b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java -@@ -218,9 +218,7 @@ public final class CraftMagicNumbers implements UnsafeValues { +@@ -219,9 +219,7 @@ public final class CraftMagicNumbers implements UnsafeValues { // ======================================================================== // Paper start @Override @@ -2041,7 +2041,7 @@ index 53908cec6f3f5c834ace105c9143cb39dc47c827..bbcd357791c648036c614401c0fd94ad // Paper end public static byte toLegacyData(BlockState data) { -@@ -498,7 +496,7 @@ public final class CraftMagicNumbers implements UnsafeValues { +@@ -499,7 +497,7 @@ public final class CraftMagicNumbers implements UnsafeValues { // Paper start @Override public String getTimingsServerName() { @@ -2051,7 +2051,7 @@ index 53908cec6f3f5c834ace105c9143cb39dc47c827..bbcd357791c648036c614401c0fd94ad @Override diff --git a/src/main/java/org/galemc/gale/configuration/GaleGlobalConfiguration.java b/src/main/java/org/galemc/gale/configuration/GaleGlobalConfiguration.java -index b1fc5368d439ef77128c77468c497dc3fbb0ccb8..b95cd1755fb9187db75eec266bf79a901d16f570 100644 +index b4cca06a583fbb7918237de256f43ee61fd8ec6c..dd4a5f610e6e84a73051a8ed46e1961804356ca3 100644 --- a/src/main/java/org/galemc/gale/configuration/GaleGlobalConfiguration.java +++ b/src/main/java/org/galemc/gale/configuration/GaleGlobalConfiguration.java @@ -80,41 +80,6 @@ public class GaleGlobalConfiguration extends ConfigurationPart { @@ -2095,7 +2095,7 @@ index b1fc5368d439ef77128c77468c497dc3fbb0ccb8..b95cd1755fb9187db75eec266bf79a90 - public Keepalive keepalive; public class Keepalive extends ConfigurationPart { - public boolean sendMultiple = false; // Gale - Purpur - send multiple keep-alive packets + public boolean sendMultiple = true; // Gale - Purpur - send multiple keep-alive packets diff --git a/src/main/java/org/galemc/gale/configuration/timingsexport/GaleConfigurationTimingsExport.java b/src/main/java/org/galemc/gale/configuration/timingsexport/GaleConfigurationTimingsExport.java deleted file mode 100644 index 579c2e69d8f6ce8398eb1297d1d1ead98c9068a5..0000000000000000000000000000000000000000 @@ -2257,10 +2257,10 @@ index 139d946346594d2a59a8b2930c4eae794c880dbc..00000000000000000000000000000000 - -} diff --git a/src/main/java/org/spigotmc/ActivationRange.java b/src/main/java/org/spigotmc/ActivationRange.java -index 9edb1e43dc9c55202443ef5f893d8e2bd0301de3..f5822d9778ebf8256d6e184d6c21335830bcf045 100644 +index 638bed116e4c36974b6096524f3f878a1ecb89c5..37e35606e3f47325db4da5deeff02aad9d541e87 100644 --- a/src/main/java/org/spigotmc/ActivationRange.java +++ b/src/main/java/org/spigotmc/ActivationRange.java -@@ -35,7 +35,6 @@ import net.minecraft.world.entity.projectile.FireworkRocketEntity; +@@ -34,7 +34,6 @@ import net.minecraft.world.entity.projectile.FireworkRocketEntity; import net.minecraft.world.entity.projectile.ThrowableProjectile; import net.minecraft.world.entity.projectile.ThrownTrident; import net.minecraft.world.entity.raid.Raider; @@ -2268,7 +2268,7 @@ index 9edb1e43dc9c55202443ef5f893d8e2bd0301de3..f5822d9778ebf8256d6e184d6c213358 import net.minecraft.world.entity.schedule.Activity; import net.minecraft.world.level.Level; import net.minecraft.world.phys.AABB; -@@ -186,7 +185,6 @@ public class ActivationRange +@@ -185,7 +184,6 @@ public class ActivationRange */ public static void activateEntities(Level world) { @@ -2276,7 +2276,7 @@ index 9edb1e43dc9c55202443ef5f893d8e2bd0301de3..f5822d9778ebf8256d6e184d6c213358 final int miscActivationRange = world.spigotConfig.miscActivationRange; final int raiderActivationRange = world.spigotConfig.raiderActivationRange; final int animalActivationRange = world.spigotConfig.animalActivationRange; -@@ -265,7 +263,6 @@ public class ActivationRange +@@ -264,7 +262,6 @@ public class ActivationRange } // Paper end } diff --git a/patches/server/0021-KeYi-Player-Skull-API.patch b/patches/server/0021-KeYi-Player-Skull-API.patch index 2936924d..c64e8ae5 100644 --- a/patches/server/0021-KeYi-Player-Skull-API.patch +++ b/patches/server/0021-KeYi-Player-Skull-API.patch @@ -7,10 +7,10 @@ Original license: MIT Original project: https://github.com/KeYiMC/KeYi diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 241340a6d66f17f2a31fb03ff0dfab121b856368..f2f6184589c72b82d041abae2c978edf084cc63f 100644 +index 8211ec2c701687d8e5334156772cf435b89f3cb3..055c72f90d235b1aafaf5ddc6b868660bbad9113 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -3616,4 +3616,27 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -3625,4 +3625,27 @@ public class CraftPlayer extends CraftHumanEntity implements Player { this.getHandle().connection.send(new net.minecraft.network.protocol.game.ClientboundPlayerCombatKillPacket(getEntityId(), io.papermc.paper.adventure.PaperAdventure.asVanilla(message))); } // Purpur end diff --git a/patches/server/0030-Leaves-Server-Utils.patch b/patches/server/0030-Leaves-Server-Utils.patch index 4dae3f2f..006cda3d 100644 --- a/patches/server/0030-Leaves-Server-Utils.patch +++ b/patches/server/0030-Leaves-Server-Utils.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Leaves: Server Utils Original license: GPLv3 Original project: https://github.com/LeavesMC/Leaves -Commit: 6951bdc2153bcb14aa64787ab007fa39fee7c007 +Commit: e234432bd99e1c4b07c24d1dd247977226a7516a diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java index 0fafe65e9f0ee85469d80a1033078b20a7abbfcf..fd937544baae6835e1826a686676dcbfa58aca33 100644 diff --git a/patches/server/0031-Leaves-Protocol-Core.patch b/patches/server/0031-Leaves-Protocol-Core.patch index a9609618..559a58a5 100644 --- a/patches/server/0031-Leaves-Protocol-Core.patch +++ b/patches/server/0031-Leaves-Protocol-Core.patch @@ -8,7 +8,7 @@ TODO - Dreeam: Configurable leaves protocol listening Original license: GPLv3 Original project: https://github.com/LeavesMC/Leaves -Commit: 6951bdc2153bcb14aa64787ab007fa39fee7c007 +Commit: e234432bd99e1c4b07c24d1dd247977226a7516a diff --git a/src/main/java/net/minecraft/network/protocol/common/custom/CustomPacketPayload.java b/src/main/java/net/minecraft/network/protocol/common/custom/CustomPacketPayload.java index 663b3b12d9a7cdc04b7f86ccfe6bc6fcfd5028bc..a58ad6f41fc0eacf020e9ab6c8e5f7dfc4977f8d 100644 @@ -40,7 +40,7 @@ index 663b3b12d9a7cdc04b7f86ccfe6bc6fcfd5028bc..a58ad6f41fc0eacf020e9ab6c8e5f7df }; } diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 24a10554efcf7a24d2d2f82b6981c8d35d13338d..8ca3f0e06f163d9ae2910c9fb2475af70b39b943 100644 +index 03a787c9bafee3a6b300703cf05a6a65bd4e9c03..3e150865ba40413a9caf5e92cd6c4d60debb59da 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -1785,6 +1785,8 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 9; default -> 27; }); diff --git a/patches/server/0054-Skip-event-if-no-listeners.patch b/patches/server/0053-Skip-event-if-no-listeners.patch similarity index 100% rename from patches/server/0054-Skip-event-if-no-listeners.patch rename to patches/server/0053-Skip-event-if-no-listeners.patch diff --git a/patches/server/0055-PaperPR-Rewrite-framed-map-tracker-ticking.patch b/patches/server/0054-PaperPR-Rewrite-framed-map-tracker-ticking.patch similarity index 100% rename from patches/server/0055-PaperPR-Rewrite-framed-map-tracker-ticking.patch rename to patches/server/0054-PaperPR-Rewrite-framed-map-tracker-ticking.patch diff --git a/patches/server/0056-SparklyPaper-Skip-MapItem-update-if-the-map-does-not.patch b/patches/server/0055-SparklyPaper-Skip-MapItem-update-if-the-map-does-not.patch similarity index 100% rename from patches/server/0056-SparklyPaper-Skip-MapItem-update-if-the-map-does-not.patch rename to patches/server/0055-SparklyPaper-Skip-MapItem-update-if-the-map-does-not.patch diff --git a/patches/server/0057-SparklyPaper-Cache-coordinate-key-used-for-nearby-pl.patch b/patches/server/0056-SparklyPaper-Cache-coordinate-key-used-for-nearby-pl.patch similarity index 97% rename from patches/server/0057-SparklyPaper-Cache-coordinate-key-used-for-nearby-pl.patch rename to patches/server/0056-SparklyPaper-Cache-coordinate-key-used-for-nearby-pl.patch index c236bdf3..accab808 100644 --- a/patches/server/0057-SparklyPaper-Cache-coordinate-key-used-for-nearby-pl.patch +++ b/patches/server/0056-SparklyPaper-Cache-coordinate-key-used-for-nearby-pl.patch @@ -32,7 +32,7 @@ index f164256d59b761264876ca0c85f812d101bfd5de..10465a33d90a1e43b9dbd7764c895dd3 final TrackedChunk chunk = this.byChunk.get(CoordinateUtils.getChunkKey(chunkX, chunkZ)); diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java -index 6e19dc2d167e47ead14aba57bb2ae2fa5eb2282a..e6f6304724ae6acaf94ed9553c90c9650be5c0c6 100644 +index 5e1268be4331d8e6fdb3eac3feadba4a696c3c3d..9cc83985e3222fdfd32359aab17d6b27bb96870d 100644 --- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java +++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java @@ -591,7 +591,7 @@ public class ServerChunkCache extends ChunkSource { diff --git a/patches/server/0058-SparklyPaper-Optimize-canSee-checks.patch b/patches/server/0057-SparklyPaper-Optimize-canSee-checks.patch similarity index 97% rename from patches/server/0058-SparklyPaper-Optimize-canSee-checks.patch rename to patches/server/0057-SparklyPaper-Optimize-canSee-checks.patch index 86b7c7c7..c108bfd3 100644 --- a/patches/server/0058-SparklyPaper-Optimize-canSee-checks.patch +++ b/patches/server/0057-SparklyPaper-Optimize-canSee-checks.patch @@ -29,7 +29,7 @@ index 5e95d84c37d2d36d62a0b5b3f55bf28bd40bf7ee..2109fedc6d09fb783e0042289a9c5d37 } // CraftBukkit end diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index bbc8135343b8206c5348eab802a257555b16836f..3bb35f002cecee7b5ffac8f8aedcce2336d662f1 100644 +index ff547f908b0390fac7e165c5765f0f9f4d9ce5b8..547bb44769e3cf23cd0fee669d335c37ff15aa92 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -198,7 +198,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { diff --git a/patches/server/0059-Polpot-Make-egg-and-snowball-can-knockback-player.patch b/patches/server/0058-Polpot-Make-egg-and-snowball-can-knockback-player.patch similarity index 100% rename from patches/server/0059-Polpot-Make-egg-and-snowball-can-knockback-player.patch rename to patches/server/0058-Polpot-Make-egg-and-snowball-can-knockback-player.patch diff --git a/patches/server/0060-Redirect-vanilla-getProfiler-in-PathNavigationRegion.patch b/patches/server/0059-Redirect-vanilla-getProfiler-in-PathNavigationRegion.patch similarity index 100% rename from patches/server/0060-Redirect-vanilla-getProfiler-in-PathNavigationRegion.patch rename to patches/server/0059-Redirect-vanilla-getProfiler-in-PathNavigationRegion.patch diff --git a/patches/server/0061-Fix-MC-2025.patch b/patches/server/0060-Fix-MC-2025.patch similarity index 100% rename from patches/server/0061-Fix-MC-2025.patch rename to patches/server/0060-Fix-MC-2025.patch diff --git a/patches/server/0062-Fix-MC-65198.patch b/patches/server/0061-Fix-MC-65198.patch similarity index 100% rename from patches/server/0062-Fix-MC-65198.patch rename to patches/server/0061-Fix-MC-65198.patch diff --git a/patches/server/0063-Including-5s-in-getTPS.patch b/patches/server/0062-Including-5s-in-getTPS.patch similarity index 92% rename from patches/server/0063-Including-5s-in-getTPS.patch rename to patches/server/0062-Including-5s-in-getTPS.patch index 3a15af54..0096316a 100644 --- a/patches/server/0063-Including-5s-in-getTPS.patch +++ b/patches/server/0062-Including-5s-in-getTPS.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Including 5s in getTPS() diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 88bc9033981662e8ba62b833eac2a0301ab504da..15208e87f583f2670fa4b2ffcef2a6c774f2ef6f 100644 +index 31b5beb4c3a3712d4f38a4ffef09675050f2eb04..f4b9a74ee268273098e4286354e436bbd3fc07f2 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -3154,6 +3154,8 @@ public final class CraftServer implements Server { +@@ -3177,6 +3177,8 @@ public final class CraftServer implements Server { @Override public double[] getTPS() { diff --git a/patches/server/0064-Remove-useless-creating-stats-json-bases-on-player-n.patch b/patches/server/0063-Remove-useless-creating-stats-json-bases-on-player-n.patch similarity index 100% rename from patches/server/0064-Remove-useless-creating-stats-json-bases-on-player-n.patch rename to patches/server/0063-Remove-useless-creating-stats-json-bases-on-player-n.patch diff --git a/patches/server/0065-Fix-NPE-during-creating-GUI-graph.patch b/patches/server/0064-Fix-NPE-during-creating-GUI-graph.patch similarity index 100% rename from patches/server/0065-Fix-NPE-during-creating-GUI-graph.patch rename to patches/server/0064-Fix-NPE-during-creating-GUI-graph.patch diff --git a/patches/server/0066-Don-t-throw-exception-on-missing-ResourceKey-value.patch b/patches/server/0065-Don-t-throw-exception-on-missing-ResourceKey-value.patch similarity index 100% rename from patches/server/0066-Don-t-throw-exception-on-missing-ResourceKey-value.patch rename to patches/server/0065-Don-t-throw-exception-on-missing-ResourceKey-value.patch diff --git a/patches/server/0067-Improve-Purpur-AFK-system.patch b/patches/server/0066-Improve-Purpur-AFK-system.patch similarity index 99% rename from patches/server/0067-Improve-Purpur-AFK-system.patch rename to patches/server/0066-Improve-Purpur-AFK-system.patch index 97e843f6..71e36d5c 100644 --- a/patches/server/0067-Improve-Purpur-AFK-system.patch +++ b/patches/server/0066-Improve-Purpur-AFK-system.patch @@ -83,7 +83,7 @@ index a0abb0182aa6166b1d2702aa9964132889dc9d86..2c630eddcacee445f44beeefa842e90a // CraftBukkit start - SPIGOT-7346: Prevent disconnected players from executing commands if (this.player.hasDisconnected()) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index 276e605eae9034a19a382c36df04fcef8b7e3d9f..fef833511a749593d4ecf4ec82f940855ace1598 100644 +index ecd3f2c3dde43082809851f2e71d18c5d7926ed8..af5eebca926ba5e4bbec8e25da5013fd3e491dbd 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java @@ -176,9 +176,13 @@ public class PurpurConfig { diff --git a/patches/server/0068-Virtual-Thread-for-async-scheduler.patch b/patches/server/0067-Virtual-Thread-for-async-scheduler.patch similarity index 97% rename from patches/server/0068-Virtual-Thread-for-async-scheduler.patch rename to patches/server/0067-Virtual-Thread-for-async-scheduler.patch index b414b46d..e993d9d9 100644 --- a/patches/server/0068-Virtual-Thread-for-async-scheduler.patch +++ b/patches/server/0067-Virtual-Thread-for-async-scheduler.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Virtual Thread for async scheduler diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java -index fa843d5b5ac9e0fe8886a95246a999ac02aacd6f..b547c95d50ade495940c146ec5c39e4ef7d1d79e 100644 +index ce3572f8044d7a4732d9411a622be79c48da1346..dbdb4276c3689d477be6a06f3a826ec0382d1408 100644 --- a/src/main/java/org/bukkit/craftbukkit/Main.java +++ b/src/main/java/org/bukkit/craftbukkit/Main.java @@ -387,7 +387,6 @@ public class Main { diff --git a/patches/server/0069-Mirai-Configurable-chat-message-signatures.patch b/patches/server/0068-Mirai-Configurable-chat-message-signatures.patch similarity index 98% rename from patches/server/0069-Mirai-Configurable-chat-message-signatures.patch rename to patches/server/0068-Mirai-Configurable-chat-message-signatures.patch index 4663c7a2..1c1744f8 100644 --- a/patches/server/0069-Mirai-Configurable-chat-message-signatures.patch +++ b/patches/server/0068-Mirai-Configurable-chat-message-signatures.patch @@ -83,10 +83,10 @@ index ee99b0e74abc6447937b1af627c10ffbeeb9e0c0..18554ce89a6de5dc6a8116e27f7210c0 // Paper start - Add setting for proxy online mode status diff --git a/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java -index 487e24f1a26428cdaee3ca946ac8f5f1f599b260..46120f0771dcd52af1a93ab67f00572921c834e7 100644 +index 392a8ce9c36c5d464df3a7d6a75737e19c22bdbb..3754ea28fca1fbcd72866942d72c3567f588d460 100644 --- a/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java -@@ -335,10 +335,29 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack +@@ -336,10 +336,29 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack } public void send(Packet packet) { diff --git a/patches/server/0070-Block-log4j-rce-exploit-in-chat.patch b/patches/server/0069-Block-log4j-rce-exploit-in-chat.patch similarity index 96% rename from patches/server/0070-Block-log4j-rce-exploit-in-chat.patch rename to patches/server/0069-Block-log4j-rce-exploit-in-chat.patch index 6a14dba4..599b53b6 100644 --- a/patches/server/0070-Block-log4j-rce-exploit-in-chat.patch +++ b/patches/server/0069-Block-log4j-rce-exploit-in-chat.patch @@ -34,7 +34,7 @@ index 2c630eddcacee445f44beeefa842e90aff75c0a6..ea1383691d57bfe9da958b6071bdb936 for (int i = 0; i < message.length(); ++i) { if (!StringUtil.isAllowedChatCharacter(message.charAt(i))) { diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 3bb35f002cecee7b5ffac8f8aedcce2336d662f1..8dd5fb89dbab34562c1bdb6ccced24606e5dc6f6 100644 +index 547bb44769e3cf23cd0fee669d335c37ff15aa92..14678f175a02592db1305584d36421e20e6263d8 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -751,6 +751,8 @@ public class CraftPlayer extends CraftHumanEntity implements Player { diff --git a/patches/server/0071-Cache-player-profileResult.patch b/patches/server/0070-Cache-player-profileResult.patch similarity index 100% rename from patches/server/0071-Cache-player-profileResult.patch rename to patches/server/0070-Cache-player-profileResult.patch diff --git a/patches/server/0072-Prevent-change-non-editable-sign-warning-spam-in-con.patch b/patches/server/0071-Prevent-change-non-editable-sign-warning-spam-in-con.patch similarity index 100% rename from patches/server/0072-Prevent-change-non-editable-sign-warning-spam-in-con.patch rename to patches/server/0071-Prevent-change-non-editable-sign-warning-spam-in-con.patch diff --git a/patches/server/0073-Matter-Secure-Seed.patch b/patches/server/0072-Matter-Secure-Seed.patch similarity index 99% rename from patches/server/0073-Matter-Secure-Seed.patch rename to patches/server/0072-Matter-Secure-Seed.patch index 53e25b76..b219e7c4 100644 --- a/patches/server/0073-Matter-Secure-Seed.patch +++ b/patches/server/0072-Matter-Secure-Seed.patch @@ -47,7 +47,7 @@ index 307a7596024528ad194eb01d6468aff1f5fe02cf..c873c85643ce21d7362673af311e9609 return GsonHelper.parse(!s1.isEmpty() ? s1 : "{}"); }, new JsonObject()), (String) this.get("level-type", (s1) -> { diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java -index e6f6304724ae6acaf94ed9553c90c9650be5c0c6..e0f13719a239a2e06330b03a2e4b8d5715b0ea63 100644 +index 9cc83985e3222fdfd32359aab17d6b27bb96870d..50fad3d6c5872b52b59e4b714cf5fb09d6be5629 100644 --- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java +++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java @@ -44,6 +44,10 @@ import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemp @@ -565,10 +565,10 @@ index 7f4c5e9355a6f562f668e9b8134bfe65dde35f90..7a1c21696f6531c7dded774f45073df1 public class MineshaftStructure extends Structure { public static final MapCodec CODEC = RecordCodecBuilder.mapCodec( diff --git a/src/main/java/org/bukkit/craftbukkit/CraftChunk.java b/src/main/java/org/bukkit/craftbukkit/CraftChunk.java -index 82b4bd669c57b18fb0b443bcd94495023cd5a528..2d336a8bb12e9e41b717caf883d39de146ea32d3 100644 +index 92f1ea81b5e90529905d9c508aca18c31443ff6a..71aeb3f5feb813ef02d07c7952c67817f8a6866e 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftChunk.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftChunk.java -@@ -202,7 +202,10 @@ public class CraftChunk implements Chunk { +@@ -203,7 +203,10 @@ public class CraftChunk implements Chunk { @Override public boolean isSlimeChunk() { // 987234911L is deterimined in EntitySlime when seeing if a slime can spawn in a chunk @@ -581,10 +581,10 @@ index 82b4bd669c57b18fb0b443bcd94495023cd5a528..2d336a8bb12e9e41b717caf883d39de1 @Override diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 15208e87f583f2670fa4b2ffcef2a6c774f2ef6f..4b00b6d66ebe578778e103335747183b9e44c94c 100644 +index f4b9a74ee268273098e4286354e436bbd3fc07f2..80bb1c1b49d80cc8d98ddb3c2c29a0e597b797e8 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -266,6 +266,10 @@ import net.md_5.bungee.api.chat.BaseComponent; // Spigot +@@ -267,6 +267,10 @@ import net.md_5.bungee.api.chat.BaseComponent; // Spigot import javax.annotation.Nullable; // Paper import javax.annotation.Nonnull; // Paper @@ -595,7 +595,7 @@ index 15208e87f583f2670fa4b2ffcef2a6c774f2ef6f..4b00b6d66ebe578778e103335747183b public final class CraftServer implements Server { private final String serverName = io.papermc.paper.ServerBuildInfo.buildInfo().brandName(); // Paper private final String serverVersion; -@@ -1363,7 +1367,7 @@ public final class CraftServer implements Server { +@@ -1386,7 +1390,7 @@ public final class CraftServer implements Server { iregistrycustom_dimension = leveldataanddimensions.dimensions().dimensionsRegistryAccess(); } else { LevelSettings worldsettings; diff --git a/patches/server/0074-Matter-Seed-Command.patch b/patches/server/0073-Matter-Seed-Command.patch similarity index 100% rename from patches/server/0074-Matter-Seed-Command.patch rename to patches/server/0073-Matter-Seed-Command.patch diff --git a/patches/server/0075-Ignore-terminal-provider-warning.patch b/patches/server/0074-Ignore-terminal-provider-warning.patch similarity index 91% rename from patches/server/0075-Ignore-terminal-provider-warning.patch rename to patches/server/0074-Ignore-terminal-provider-warning.patch index a7a96725..ddbd10cc 100644 --- a/patches/server/0075-Ignore-terminal-provider-warning.patch +++ b/patches/server/0074-Ignore-terminal-provider-warning.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Ignore terminal provider warning diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java -index b547c95d50ade495940c146ec5c39e4ef7d1d79e..1bcca095e70f586af1758447c29314a4256666ce 100644 +index dbdb4276c3689d477be6a06f3a826ec0382d1408..4b3ca7cc331d60fe02f1068467bed6ce0c81001e 100644 --- a/src/main/java/org/bukkit/craftbukkit/Main.java +++ b/src/main/java/org/bukkit/craftbukkit/Main.java @@ -354,6 +354,9 @@ public class Main { diff --git a/patches/server/0076-Fix-console-freeze-above-JAVA-22.patch b/patches/server/0075-Fix-console-freeze-above-JAVA-22.patch similarity index 92% rename from patches/server/0076-Fix-console-freeze-above-JAVA-22.patch rename to patches/server/0075-Fix-console-freeze-above-JAVA-22.patch index b527349a..e3bf6727 100644 --- a/patches/server/0076-Fix-console-freeze-above-JAVA-22.patch +++ b/patches/server/0075-Fix-console-freeze-above-JAVA-22.patch @@ -7,7 +7,7 @@ Revert to old console provider, Fix https://github.com/PaperMC/Paper/issues/1040 Solution refers to https://inside.java/2023/07/31/quality-heads-up diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java -index 1bcca095e70f586af1758447c29314a4256666ce..d1565ffdb17460df4d788652e1c1afffba4e82d6 100644 +index 4b3ca7cc331d60fe02f1068467bed6ce0c81001e..f310722b6f6b5e487e876e42070fdaaa01b62efb 100644 --- a/src/main/java/org/bukkit/craftbukkit/Main.java +++ b/src/main/java/org/bukkit/craftbukkit/Main.java @@ -356,6 +356,7 @@ public class Main { diff --git a/patches/server/0077-Faster-Random-Generator.patch b/patches/server/0076-Faster-Random-Generator.patch similarity index 100% rename from patches/server/0077-Faster-Random-Generator.patch rename to patches/server/0076-Faster-Random-Generator.patch diff --git a/patches/server/0078-Don-t-save-primed-tnt-entity.patch b/patches/server/0077-Don-t-save-primed-tnt-entity.patch similarity index 100% rename from patches/server/0078-Don-t-save-primed-tnt-entity.patch rename to patches/server/0077-Don-t-save-primed-tnt-entity.patch diff --git a/patches/server/0079-Don-t-save-falling-block-entity.patch b/patches/server/0078-Don-t-save-falling-block-entity.patch similarity index 100% rename from patches/server/0079-Don-t-save-falling-block-entity.patch rename to patches/server/0078-Don-t-save-falling-block-entity.patch diff --git a/patches/server/0080-Configurable-connection-message.patch b/patches/server/0079-Configurable-connection-message.patch similarity index 100% rename from patches/server/0080-Configurable-connection-message.patch rename to patches/server/0079-Configurable-connection-message.patch diff --git a/patches/server/0081-Implement-Noisium.patch b/patches/server/0081-Implement-Noisium.patch deleted file mode 100644 index c91bf6ec..00000000 --- a/patches/server/0081-Implement-Noisium.patch +++ /dev/null @@ -1,175 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: HaHaWTH <102713261+HaHaWTH@users.noreply.github.com> -Date: Wed, 12 Jun 2024 23:31:54 +0800 -Subject: [PATCH] Implement-Noisium - - -diff --git a/src/main/java/net/minecraft/world/level/chunk/LevelChunkSection.java b/src/main/java/net/minecraft/world/level/chunk/LevelChunkSection.java -index 121459fdb47904d448f86362f535765c713a4b67..93bcb7441063c56524e58c10cc7d402507524192 100644 ---- a/src/main/java/net/minecraft/world/level/chunk/LevelChunkSection.java -+++ b/src/main/java/net/minecraft/world/level/chunk/LevelChunkSection.java -@@ -19,8 +19,8 @@ public class LevelChunkSection { - public static final int SECTION_HEIGHT = 16; - public static final int SECTION_SIZE = 4096; - public static final int BIOME_CONTAINER_BITS = 2; -- short nonEmptyBlockCount; // Paper - package private -- private short tickingBlockCount; -+ public short nonEmptyBlockCount; // Paper - package private // Leaf - public -+ public short tickingBlockCount; // Leaf - package private -> public - private short tickingFluidCount; - public final PalettedContainer states; - // CraftBukkit start - read/write -@@ -233,13 +233,15 @@ public class LevelChunkSection { - PalettedContainer> datapaletteblock = this.biomes.recreate(); - boolean flag = true; - -- for (int l = 0; l < 4; ++l) { -- for (int i1 = 0; i1 < 4; ++i1) { -- for (int j1 = 0; j1 < 4; ++j1) { -- datapaletteblock.getAndSetUnchecked(l, i1, j1, biomeSupplier.getNoiseBiome(x + l, y + i1, z + j1, sampler)); -+ // Leaf start - Noisium optimization -+ for (int y1 = 0; y1 < 4; ++y1) { -+ for (int z1 = 0; z1 < 4; ++z1) { -+ for (int x1 = 0; x1 < 4; ++x1) { -+ datapaletteblock.getAndSetUnchecked(x1, y1, z1, biomeSupplier.getNoiseBiome(x + x1, y + y1, z + z1, sampler)); - } - } - } -+ // Leaf end - - this.biomes = datapaletteblock; - } -diff --git a/src/main/java/net/minecraft/world/level/chunk/PalettedContainer.java b/src/main/java/net/minecraft/world/level/chunk/PalettedContainer.java -index 6402665ae8cc8664921ae0298e8b6fa4c31d8b23..471a31e60804e8315926ef706bec6128c1c33cb0 100644 ---- a/src/main/java/net/minecraft/world/level/chunk/PalettedContainer.java -+++ b/src/main/java/net/minecraft/world/level/chunk/PalettedContainer.java -@@ -46,8 +46,8 @@ public class PalettedContainer implements PaletteResize, PalettedContainer - private final PaletteResize dummyPaletteResize = (newSize, added) -> 0; - public final IdMap registry; - private final T @org.jetbrains.annotations.Nullable [] presetValues; // Paper - Anti-Xray - Add preset values -- private volatile PalettedContainer.Data data; -- private final PalettedContainer.Strategy strategy; -+ public volatile PalettedContainer.Data data; // Leaf - private -> public -+ public final PalettedContainer.Strategy strategy; // Leaf - private -> public - // private final ThreadingDetector threadingDetector = new ThreadingDetector("PalettedContainer"); // Paper - unused - - public void acquire() { -@@ -459,7 +459,7 @@ public class PalettedContainer implements PaletteResize, PalettedContainer - void accept(T object, int count); - } - -- static record Data(PalettedContainer.Configuration configuration, BitStorage storage, Palette palette) { -+ public static record Data(PalettedContainer.Configuration configuration, BitStorage storage, Palette palette) { - public void copyFrom(Palette palette, BitStorage storage) { - for (int i = 0; i < storage.getSize(); i++) { - T object = palette.valueFor(storage.get(i)); -diff --git a/src/main/java/net/minecraft/world/level/levelgen/NoiseBasedChunkGenerator.java b/src/main/java/net/minecraft/world/level/levelgen/NoiseBasedChunkGenerator.java -index 0b8c15b079f9b57876692e272b3535cfb125829b..07d88aad0bbb717127153dada73238ee7336b3bb 100644 ---- a/src/main/java/net/minecraft/world/level/levelgen/NoiseBasedChunkGenerator.java -+++ b/src/main/java/net/minecraft/world/level/levelgen/NoiseBasedChunkGenerator.java -@@ -271,37 +271,31 @@ public final class NoiseBasedChunkGenerator extends ChunkGenerator { - @Override - public CompletableFuture fillFromNoise(Executor executor, Blender blender, RandomState noiseConfig, StructureManager structureAccessor, ChunkAccess chunk) { - NoiseSettings noisesettings = ((NoiseGeneratorSettings) this.settings.value()).noiseSettings().clampToHeightAccessor(chunk.getHeightAccessorForGeneration()); -- int i = noisesettings.minY(); -- int j = Mth.floorDiv(i, noisesettings.getCellHeight()); -- int k = Mth.floorDiv(noisesettings.height(), noisesettings.getCellHeight()); -+ // Leaf start - Noisium optimization -+ int minY = noisesettings.minY(); -+ int minYDiv = Mth.floorDiv(minY, noisesettings.getCellHeight()); -+ int cellHeightDiv = Mth.floorDiv(noisesettings.height(), noisesettings.getCellHeight()); - -- if (k <= 0) { -+ if (cellHeightDiv <= 0) { - return CompletableFuture.completedFuture(chunk); -- } else { -- int l = chunk.getSectionIndex(k * noisesettings.getCellHeight() - 1 + i); -- int i1 = chunk.getSectionIndex(i); -- Set set = Sets.newHashSet(); -- -- for (int j1 = l; j1 >= i1; --j1) { -- LevelChunkSection chunksection = chunk.getSection(j1); -- -- chunksection.acquire(); -- set.add(chunksection); -- } -- -- return CompletableFuture.supplyAsync(Util.wrapThreadWithTaskName("wgen_fill_noise", () -> { -- return this.doFill(blender, structureAccessor, noiseConfig, chunk, j, k); -- }), executor).whenCompleteAsync((ichunkaccess1, throwable) -> { // Paper - run with supplied executor -- Iterator iterator = set.iterator(); -- -- while (iterator.hasNext()) { -- LevelChunkSection chunksection1 = (LevelChunkSection) iterator.next(); -+ } - -- chunksection1.release(); -- } -+ int startIndex = chunk.getSectionIndex(cellHeightDiv * noisesettings.getCellHeight() - 1 + minY); -+ int minYIndex = chunk.getSectionIndex(minY); - -- }, executor); -+ LevelChunkSection[] sections = chunk.getSections(); -+ for (int i = startIndex; i >= minYIndex; --i) { -+ sections[i].acquire(); - } -+ return CompletableFuture.supplyAsync(Util.wrapThreadWithTaskName( -+ "wgen_fill_noise", -+ () -> this.doFill(blender, structureAccessor, noiseConfig, chunk, minYDiv, cellHeightDiv) -+ ), Util.backgroundExecutor()).whenCompleteAsync((result, ignored) -> { -+ for (int i = startIndex; i >= minYIndex; --i) { -+ sections[i].release(); -+ } -+ }, executor); -+ // Leaf end - } - - private ChunkAccess doFill(Blender blender, StructureManager structureAccessor, RandomState noiseConfig, ChunkAccess chunk, int minimumCellY, int cellHeight) { -@@ -367,6 +361,15 @@ public final class NoiseBasedChunkGenerator extends ChunkGenerator { - - iblockdata = this.debugPreliminarySurfaceLevel(noisechunk, j4, j3, i5, iblockdata); - if (iblockdata != NoiseBasedChunkGenerator.AIR && !SharedConstants.debugVoidTerrain(chunk.getPos())) { -+ // Leaf start - Noisium -+ chunksection.nonEmptyBlockCount++; -+ if (!iblockdata.getFluidState().isEmpty()) chunksection.nonEmptyBlockCount++; -+ if (iblockdata.isRandomlyTicking()) chunksection.tickingBlockCount++; -+ chunksection.states.data.storage().set( -+ chunksection.states.strategy.getIndex(k4, k3, j5), -+ chunksection.states.data.palette().idFor(iblockdata) -+ ); -+ // Leaf end - Noisium - chunksection.setBlockState(k4, k3, j5, iblockdata, false); - heightmap.update(k4, j3, j5, iblockdata); - heightmap1.update(k4, j3, j5, iblockdata); -diff --git a/src/main/java/net/minecraft/world/level/levelgen/NoiseSettings.java b/src/main/java/net/minecraft/world/level/levelgen/NoiseSettings.java -index 52fcf1b92854e5c67c51a83d31b4a136413b54e0..26ffc28359b18daf28212e72922be8bd3bfa7746 100644 ---- a/src/main/java/net/minecraft/world/level/levelgen/NoiseSettings.java -+++ b/src/main/java/net/minecraft/world/level/levelgen/NoiseSettings.java -@@ -8,7 +8,12 @@ import net.minecraft.core.QuartPos; - import net.minecraft.world.level.LevelHeightAccessor; - import net.minecraft.world.level.dimension.DimensionType; - --public record NoiseSettings(int minY, int height, int noiseSizeHorizontal, int noiseSizeVertical) { -+// Leaf start - Noisium -+public record NoiseSettings(int minY, int height, int noiseSizeHorizontal, int noiseSizeVertical, int cellHeight, int cellWidth) { -+ public NoiseSettings(int minY, int height, int noiseSizeHorizontal, int noiseSizeVertical) { -+ this(minY, height, noiseSizeHorizontal, noiseSizeVertical, QuartPos.toBlock(noiseSizeHorizontal), QuartPos.toBlock(noiseSizeVertical)); -+ } -+ // Leaf end - Noisium - public static final Codec CODEC = RecordCodecBuilder.create( - instance -> instance.group( - Codec.intRange(DimensionType.MIN_Y, DimensionType.MAX_Y).fieldOf("min_y").forGetter(NoiseSettings::minY), -@@ -44,11 +49,11 @@ public record NoiseSettings(int minY, int height, int noiseSizeHorizontal, int n - } - - public int getCellHeight() { -- return QuartPos.toBlock(this.noiseSizeVertical()); -+ return this.cellHeight; // Leaf - Noisium - } - - public int getCellWidth() { -- return QuartPos.toBlock(this.noiseSizeHorizontal()); -+ return this.cellWidth; // Leaf - Noisium - } - - public NoiseSettings clampToHeightAccessor(LevelHeightAccessor world) {