From 91b5de66bf95858fb5e34d9634b7f1fde5084e8b Mon Sep 17 00:00:00 2001 From: Jake Potrebic Date: Fri, 26 Apr 2024 23:17:58 -0700 Subject: [PATCH] bunch of fixes and improvements --- patches/server/0006-MC-Dev-fixes.patch | 12 + .../server/0144-Add-UnknownCommandEvent.patch | 48 +--- .../server/0168-AsyncTabCompleteEvent.patch | 4 +- .../server/0184-getPlayerUniqueId-API.patch | 4 +- ...dd-Early-Warning-Feature-to-WatchDog.patch | 6 +- ...ault-permission-message-configurable.patch | 4 +- .../0284-Async-command-map-building.patch | 6 +- .../server/0285-Brigadier-Mojang-API.patch | 12 +- ...301-Expose-the-internal-current-tick.patch | 4 +- ...-Add-tick-times-API-and-mspt-command.patch | 4 +- ...337-Expose-MinecraftServer-isRunning.patch | 4 +- patches/server/0361-Expose-game-version.patch | 4 +- .../server/0363-misc-debugging-dumps.patch | 8 +- .../server/0365-Implement-Mob-Goal-API.patch | 4 +- ...Wait-for-Async-Tasks-during-shutdown.patch | 4 +- ...ld-Difficulty-Remembering-Difficulty.patch | 4 +- ...-Plugin-Tickets-to-API-Chunk-Methods.patch | 4 +- ...-Vanilla-Command-permission-checking.patch | 2 +- ...CreateEvent-needs-to-know-its-entity.patch | 8 +- ...-Add-getOfflinePlayerIfCached-String.patch | 4 +- ...pty-commands-shall-not-be-dispatched.patch | 4 +- .../server/0518-Expand-world-key-API.patch | 8 +- ...mmands-if-tab-completion-is-disabled.patch | 4 +- .../server/0547-Add-basic-Datapack-API.patch | 4 +- .../server/0551-More-Enchantment-API.patch | 26 ++- .../0556-Add-EntityInsideBlockEvent.patch | 2 +- .../0587-Add-System.out-err-catcher.patch | 2 +- ...615-Vanilla-command-permission-fixes.patch | 6 +- ...aper-mobcaps-and-paper-playermobcaps.patch | 4 +- ...llow-delegation-to-vanilla-chunk-gen.patch | 4 +- ...vanilla-BiomeProvider-from-WorldInfo.patch | 4 +- ...-command-sender-which-forwards-feedb.patch | 4 +- ...date-calls-to-CraftServer-getSpawnLi.patch | 4 +- patches/server/0685-Add-GameEvent-tags.patch | 6 +- ...o-worldlist-before-initing-the-world.patch | 4 +- patches/server/0693-Custom-Potion-Mixes.patch | 4 +- .../0704-Fix-saving-in-unloadWorld.patch | 4 +- .../0716-WorldCreator-keepSpawnLoaded.patch | 4 +- ...n-on-world-create-while-being-ticked.patch | 8 +- ...broadcast-messages-to-command-blocks.patch | 4 +- ...and-message-for-brigadier-syntax-exc.patch | 4 +- ...5-Add-Velocity-IP-Forwarding-Support.patch | 4 +- ...tEvent-cancellation-cant-fully-preve.patch | 2 +- ...anhasbukkit-default-if-alias-block-e.patch | 2 +- ...permission-levels-for-command-blocks.patch | 4 +- ...Folia-scheduler-and-owned-region-API.patch | 2 +- ...-API-for-updating-recipes-on-clients.patch | 10 +- ...0-Use-correct-seed-on-api-world-load.patch | 4 +- ...place-methods-with-old-StructureType.patch | 6 +- .../0956-Add-Lifecycle-Event-system.patch | 4 +- .../server/0961-improve-BanList-types.patch | 4 +- .../server/0984-Rewrite-chunk-system.patch | 8 +- patches/server/0995-Anti-Xray.patch | 4 +- ...y-type-tags-suggestions-in-selectors.patch | 6 +- ...x-and-optimise-world-force-upgrading.patch | 6 +- ...ndle-pdc-and-custom-tags-in-ItemMeta.patch | 6 +- ...ng-old-serialized-names-to-new-names.patch | 2 +- .../1037-Deep-clone-nbt-tags-in-PDC.patch | 2 +- ...-removed-data-components-in-ItemMeta.patch | 47 ++++ ...d-experimental-improved-give-command.patch | 218 ++++++++++++++++++ 60 files changed, 430 insertions(+), 175 deletions(-) create mode 100644 patches/server/1041-Don-t-lose-removed-data-components-in-ItemMeta.patch create mode 100644 patches/server/1042-Add-experimental-improved-give-command.patch diff --git a/patches/server/0006-MC-Dev-fixes.patch b/patches/server/0006-MC-Dev-fixes.patch index ff937770d5..ca860ff160 100644 --- a/patches/server/0006-MC-Dev-fixes.patch +++ b/patches/server/0006-MC-Dev-fixes.patch @@ -4,6 +4,18 @@ Date: Wed, 30 Mar 2016 19:36:20 -0400 Subject: [PATCH] MC Dev fixes +diff --git a/src/main/java/net/minecraft/commands/arguments/item/ItemInput.java b/src/main/java/net/minecraft/commands/arguments/item/ItemInput.java +index a9617232c488a7a641b6657b265a5e42e77bc117..3d24fbca90bc7d8bdbac1be2176555c15ae75039 100644 +--- a/src/main/java/net/minecraft/commands/arguments/item/ItemInput.java ++++ b/src/main/java/net/minecraft/commands/arguments/item/ItemInput.java +@@ -68,6 +68,6 @@ public class ItemInput { + } + + private String getItemName() { +- return this.item.unwrapKey().map(ResourceKey::location).orElseGet(() -> "unknown[" + this.item + "]").toString(); ++ return this.item.unwrapKey().map(ResourceKey::location).orElseGet(() -> "unknown[" + this.item + "]").toString(); // Paper - decompile fix + } + } diff --git a/src/main/java/net/minecraft/core/BlockPos.java b/src/main/java/net/minecraft/core/BlockPos.java index 478d2114fbd5c499a8adbf8b6cefcc8335e830dc..2074d4327f0c356c220f3a6a9761439e76a15fc3 100644 --- a/src/main/java/net/minecraft/core/BlockPos.java diff --git a/patches/server/0144-Add-UnknownCommandEvent.patch b/patches/server/0144-Add-UnknownCommandEvent.patch index 511d581613..16acb37865 100644 --- a/patches/server/0144-Add-UnknownCommandEvent.patch +++ b/patches/server/0144-Add-UnknownCommandEvent.patch @@ -25,26 +25,10 @@ index ec34e402104d7a696ea95e0b11ee70189b678ab9..d9fc3c25bef251df6a53ee47ec224b07 } diff --git a/src/main/java/net/minecraft/commands/Commands.java b/src/main/java/net/minecraft/commands/Commands.java -index b81a4204a85e5b431cd6137fd8b80e43779c97b7..03966f447354fb16a01442ff6c6257fa19461bcd 100644 +index b81a4204a85e5b431cd6137fd8b80e43779c97b7..eec5279ac4386132fa053c57889e32e6b8141614 100644 --- a/src/main/java/net/minecraft/commands/Commands.java +++ b/src/main/java/net/minecraft/commands/Commands.java -@@ -154,6 +154,7 @@ public class Commands { - public static final int LEVEL_ADMINS = 3; - public static final int LEVEL_OWNERS = 4; - private final com.mojang.brigadier.CommandDispatcher dispatcher = new com.mojang.brigadier.CommandDispatcher(); -+ public final java.util.List> vanillaCommandNodes = new java.util.ArrayList<>(); // Paper - Add UnknownCommandEvent - - public Commands(Commands.CommandSelection environment, CommandBuildContext commandRegistryAccess) { - this(); // CraftBukkit -@@ -257,6 +258,7 @@ public class Commands { - if (environment.includeIntegrated) { - PublishCommand.register(this.dispatcher); - } -+ this.vanillaCommandNodes.addAll(this.dispatcher.getRoot().getChildren()); // Paper - Add UnknownCommandEvent - - // CraftBukkit start - } -@@ -331,7 +333,7 @@ public class Commands { +@@ -331,7 +331,7 @@ public class Commands { commandlistenerwrapper.getServer().getProfiler().push(() -> { return "/" + s; }); @@ -53,7 +37,7 @@ index b81a4204a85e5b431cd6137fd8b80e43779c97b7..03966f447354fb16a01442ff6c6257fa try { if (contextchain != null) { -@@ -365,14 +367,23 @@ public class Commands { +@@ -365,14 +365,18 @@ public class Commands { } @Nullable @@ -68,18 +52,13 @@ index b81a4204a85e5b431cd6137fd8b80e43779c97b7..03966f447354fb16a01442ff6c6257fa - commandlistenerwrapper.sendFailure(ComponentUtils.fromMessage(commandsyntaxexception.getRawMessage())); + // Paper start - Add UnknownCommandEvent + final net.kyori.adventure.text.TextComponent.Builder builder = net.kyori.adventure.text.Component.text(); -+ if ((parseresults.getContext().getNodes().isEmpty() || !this.vanillaCommandNodes.contains(parseresults.getContext().getNodes().get(0).getNode()))) { -+ if (!org.spigotmc.SpigotConfig.unknownCommandMessage.isEmpty()) { -+ builder.append(net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer.legacySection().deserialize(org.spigotmc.SpigotConfig.unknownCommandMessage)); -+ } -+ } else { -+ // commandlistenerwrapper.sendFailure(ComponentUtils.fromMessage(commandsyntaxexception.getRawMessage())); -+ builder.color(net.kyori.adventure.text.format.NamedTextColor.RED).append(io.papermc.paper.brigadier.PaperBrigadier.componentFromMessage(commandsyntaxexception.getRawMessage())); -+ // Paper end - Add UnknownCommandEvent ++ // commandlistenerwrapper.sendFailure(ComponentUtils.fromMessage(commandsyntaxexception.getRawMessage())); ++ builder.color(net.kyori.adventure.text.format.NamedTextColor.RED).append(io.papermc.paper.brigadier.PaperBrigadier.componentFromMessage(commandsyntaxexception.getRawMessage())); ++ // Paper end - Add UnknownCommandEvent if (commandsyntaxexception.getInput() != null && commandsyntaxexception.getCursor() >= 0) { int i = Math.min(commandsyntaxexception.getInput().length(), commandsyntaxexception.getCursor()); MutableComponent ichatmutablecomponent = Component.empty().withStyle(ChatFormatting.GRAY).withStyle((chatmodifier) -> { -@@ -391,7 +402,18 @@ public class Commands { +@@ -391,7 +395,17 @@ public class Commands { } ichatmutablecomponent.append((Component) Component.translatable("command.context.here").withStyle(ChatFormatting.RED, ChatFormatting.ITALIC)); @@ -90,7 +69,6 @@ index b81a4204a85e5b431cd6137fd8b80e43779c97b7..03966f447354fb16a01442ff6c6257fa + .append(net.kyori.adventure.text.Component.newline()) + .append(io.papermc.paper.adventure.PaperAdventure.asAdventure(ichatmutablecomponent)); + } -+ } + org.bukkit.event.command.UnknownCommandEvent event = new org.bukkit.event.command.UnknownCommandEvent(commandlistenerwrapper.getBukkitSender(), s, org.spigotmc.SpigotConfig.unknownCommandMessage.isEmpty() ? null : builder.build()); + org.bukkit.Bukkit.getServer().getPluginManager().callEvent(event); + if (event.message() != null) { @@ -100,18 +78,10 @@ index b81a4204a85e5b431cd6137fd8b80e43779c97b7..03966f447354fb16a01442ff6c6257fa return null; diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index a7554f2028f93867360c27a51c9580a8b49f5b57..f351667cec83f39c28073e262b6c9b51873fb327 100644 +index a7554f2028f93867360c27a51c9580a8b49f5b57..c8b123f3df533d1c7889fe44a2a47fdd08c7f715 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -529,6 +529,7 @@ public final class CraftServer implements Server { - } - node = clone; - } -+ dispatcher.vanillaCommandNodes.add(node); // Paper - - dispatcher.getDispatcher().getRoot().addChild(node); - } else { -@@ -911,7 +912,13 @@ public final class CraftServer implements Server { +@@ -911,7 +911,13 @@ public final class CraftServer implements Server { // Spigot start if (!org.spigotmc.SpigotConfig.unknownCommandMessage.isEmpty()) { diff --git a/patches/server/0168-AsyncTabCompleteEvent.patch b/patches/server/0168-AsyncTabCompleteEvent.patch index 9011b40572..f90e0edaae 100644 --- a/patches/server/0168-AsyncTabCompleteEvent.patch +++ b/patches/server/0168-AsyncTabCompleteEvent.patch @@ -80,10 +80,10 @@ index f6019435a90979ed6f966cc6e8288f05ff889d5e..ae0e3694f3971908cb472b1165d26492 this.server.getCommands().getDispatcher().getCompletionSuggestions(parseresults).thenAccept((suggestions) -> { diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index f351667cec83f39c28073e262b6c9b51873fb327..bf61a439d81b481c6d27a3b399a3a08e96d3909c 100644 +index c8b123f3df533d1c7889fe44a2a47fdd08c7f715..e188d020d0cefbabbe0c720b26233203fd84bcb1 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -2251,7 +2251,7 @@ public final class CraftServer implements Server { +@@ -2250,7 +2250,7 @@ public final class CraftServer implements Server { offers = this.tabCompleteChat(player, message); } diff --git a/patches/server/0184-getPlayerUniqueId-API.patch b/patches/server/0184-getPlayerUniqueId-API.patch index 856484cc4d..740edfaf0a 100644 --- a/patches/server/0184-getPlayerUniqueId-API.patch +++ b/patches/server/0184-getPlayerUniqueId-API.patch @@ -9,10 +9,10 @@ In Offline Mode, will return an Offline UUID This is a more performant way to obtain a UUID for a name than loading an OfflinePlayer diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index bf61a439d81b481c6d27a3b399a3a08e96d3909c..9d65bce391b00b78efed1e40a01fa2865c05e6fd 100644 +index e188d020d0cefbabbe0c720b26233203fd84bcb1..cbdfb4168f23bbbd37675da6dc88acb3191d88d6 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -1850,6 +1850,25 @@ public final class CraftServer implements Server { +@@ -1849,6 +1849,25 @@ public final class CraftServer implements Server { return recipients.size(); } diff --git a/patches/server/0234-Add-Early-Warning-Feature-to-WatchDog.patch b/patches/server/0234-Add-Early-Warning-Feature-to-WatchDog.patch index 2e8fdbe36a..bcc6d21efc 100644 --- a/patches/server/0234-Add-Early-Warning-Feature-to-WatchDog.patch +++ b/patches/server/0234-Add-Early-Warning-Feature-to-WatchDog.patch @@ -33,10 +33,10 @@ index 0ffa25a6e41cc56e78c79e0cee45e3b811794129..1b47e228ad7365b31d6ddd8c572d3bc5 com.destroystokyo.paper.Metrics.PaperMetrics.startMetrics(); // Paper - start metrics com.destroystokyo.paper.VersionHistoryManager.INSTANCE.getClass(); // Paper - load version history now diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 9d65bce391b00b78efed1e40a01fa2865c05e6fd..af9140513970fc5c3797a170eab02de40048543c 100644 +index cbdfb4168f23bbbd37675da6dc88acb3191d88d6..9c673642b7c35bc3c443bd66fbcd278073eeccc2 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -927,6 +927,7 @@ public final class CraftServer implements Server { +@@ -926,6 +926,7 @@ public final class CraftServer implements Server { @Override public void reload() { @@ -44,7 +44,7 @@ index 9d65bce391b00b78efed1e40a01fa2865c05e6fd..af9140513970fc5c3797a170eab02de4 this.reloadCount++; this.configuration = YamlConfiguration.loadConfiguration(this.getConfigFile()); this.commandsConfiguration = YamlConfiguration.loadConfiguration(this.getCommandsConfigFile()); -@@ -1017,6 +1018,7 @@ public final class CraftServer implements Server { +@@ -1016,6 +1017,7 @@ public final class CraftServer implements Server { this.enablePlugins(PluginLoadOrder.POSTWORLD); this.getPluginManager().callEvent(new ServerLoadEvent(ServerLoadEvent.LoadType.RELOAD)); if (io.papermc.paper.plugin.PluginInitializerManager.instance().pluginRemapper != null) io.papermc.paper.plugin.PluginInitializerManager.instance().pluginRemapper.pluginsEnabled(); // Paper - Remap plugins diff --git a/patches/server/0275-Make-the-default-permission-message-configurable.patch b/patches/server/0275-Make-the-default-permission-message-configurable.patch index c63fd9755d..98a4c6ccc2 100644 --- a/patches/server/0275-Make-the-default-permission-message-configurable.patch +++ b/patches/server/0275-Make-the-default-permission-message-configurable.patch @@ -18,10 +18,10 @@ index 6d06b772ffb9d47d6a717462a4b2b494544e80ae..69ffd6ea2ce7c6d4f211c6081fcea79a } diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index af9140513970fc5c3797a170eab02de40048543c..8254a5d2a72bf12b2f2600a99eb3058c6e76042a 100644 +index 9c673642b7c35bc3c443bd66fbcd278073eeccc2..4d1d7fc503225be0aabc99f0285cc6d306e034ef 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -2834,6 +2834,16 @@ public final class CraftServer implements Server { +@@ -2833,6 +2833,16 @@ public final class CraftServer implements Server { return io.papermc.paper.configuration.GlobalConfiguration.get().commands.suggestPlayerNamesWhenNullTabCompletions; } diff --git a/patches/server/0284-Async-command-map-building.patch b/patches/server/0284-Async-command-map-building.patch index ac48542059..7f58d78b88 100644 --- a/patches/server/0284-Async-command-map-building.patch +++ b/patches/server/0284-Async-command-map-building.patch @@ -9,10 +9,10 @@ commands if the server is restarting. Using the default async pool caused issues due to the shutdown logic generally being much later. diff --git a/src/main/java/net/minecraft/commands/Commands.java b/src/main/java/net/minecraft/commands/Commands.java -index 03966f447354fb16a01442ff6c6257fa19461bcd..6383cdfe3e2b61314fee7f7236dc7df1c1e8bfb6 100644 +index eec5279ac4386132fa053c57889e32e6b8141614..b754c0b3e2cd878fca5f702daca64f837ec83451 100644 --- a/src/main/java/net/minecraft/commands/Commands.java +++ b/src/main/java/net/minecraft/commands/Commands.java -@@ -460,6 +460,24 @@ public class Commands { +@@ -452,6 +452,24 @@ public class Commands { if ( org.spigotmc.SpigotConfig.tabComplete < 0 ) return; // Spigot // CraftBukkit start // Register Vanilla commands into builtRoot as before @@ -37,7 +37,7 @@ index 03966f447354fb16a01442ff6c6257fa19461bcd..6383cdfe3e2b61314fee7f7236dc7df1 Map, CommandNode> map = Maps.newIdentityHashMap(); // Use identity to prevent aliasing issues RootCommandNode vanillaRoot = new RootCommandNode(); -@@ -477,7 +495,14 @@ public class Commands { +@@ -469,7 +487,14 @@ public class Commands { for (CommandNode node : rootcommandnode.getChildren()) { bukkit.add(node.getName()); } diff --git a/patches/server/0285-Brigadier-Mojang-API.patch b/patches/server/0285-Brigadier-Mojang-API.patch index ef2aad9623..d958c5942a 100644 --- a/patches/server/0285-Brigadier-Mojang-API.patch +++ b/patches/server/0285-Brigadier-Mojang-API.patch @@ -47,14 +47,14 @@ index 3370731ee064d2693b972a0765c13dd4fd69f66a..09d486a05179b9d878e1c33725b4e614 + // Paper end - Brigadier API } diff --git a/src/main/java/com/mojang/brigadier/tree/CommandNode.java b/src/main/java/com/mojang/brigadier/tree/CommandNode.java -index da6250df1c5f3385b683cffde47754bca4606f5e..d8142624f9f3a5909e7cc5665f1629a1a67dd302 100644 +index da6250df1c5f3385b683cffde47754bca4606f5e..14ccd0c8f721e9be7dca8a5dcb8ef95b5cd82731 100644 --- a/src/main/java/com/mojang/brigadier/tree/CommandNode.java +++ b/src/main/java/com/mojang/brigadier/tree/CommandNode.java @@ -34,6 +34,7 @@ public abstract class CommandNode implements Comparable> { private final RedirectModifier modifier; private final boolean forks; private Command command; -+ public LiteralCommandNode clientNode; // Paper - Brigadier API ++ public CommandNode clientNode; // Paper - Brigadier API // CraftBukkit start public void removeCommand(String name) { this.children.remove(name); @@ -99,10 +99,10 @@ index d9fc3c25bef251df6a53ee47ec224b07240a931c..2a22827f44dd0d524c22264447959a69 public boolean hasPermission(int level) { // CraftBukkit start diff --git a/src/main/java/net/minecraft/commands/Commands.java b/src/main/java/net/minecraft/commands/Commands.java -index 6383cdfe3e2b61314fee7f7236dc7df1c1e8bfb6..3b59f3d92d781c16825f6f67b725225256425d11 100644 +index b754c0b3e2cd878fca5f702daca64f837ec83451..f15c388434a0a501f86868de35cc138756975027 100644 --- a/src/main/java/net/minecraft/commands/Commands.java +++ b/src/main/java/net/minecraft/commands/Commands.java -@@ -496,6 +496,7 @@ public class Commands { +@@ -488,6 +488,7 @@ public class Commands { bukkit.add(node.getName()); } // Paper start - Perf: Async command map building @@ -110,7 +110,7 @@ index 6383cdfe3e2b61314fee7f7236dc7df1c1e8bfb6..3b59f3d92d781c16825f6f67b7252252 net.minecraft.server.MinecraftServer.getServer().execute(() -> { runSync(player, bukkit, rootcommandnode); }); -@@ -503,6 +504,7 @@ public class Commands { +@@ -495,6 +496,7 @@ public class Commands { private void runSync(ServerPlayer player, Collection bukkit, RootCommandNode rootcommandnode) { // Paper end - Perf: Async command map building @@ -118,7 +118,7 @@ index 6383cdfe3e2b61314fee7f7236dc7df1c1e8bfb6..3b59f3d92d781c16825f6f67b7252252 PlayerCommandSendEvent event = new PlayerCommandSendEvent(player.getBukkitEntity(), new LinkedHashSet<>(bukkit)); event.getPlayer().getServer().getPluginManager().callEvent(event); -@@ -521,6 +523,11 @@ public class Commands { +@@ -513,6 +515,11 @@ public class Commands { while (iterator.hasNext()) { CommandNode commandnode2 = (CommandNode) iterator.next(); diff --git a/patches/server/0301-Expose-the-internal-current-tick.patch b/patches/server/0301-Expose-the-internal-current-tick.patch index a3c9a6ac95..b1d3de338b 100644 --- a/patches/server/0301-Expose-the-internal-current-tick.patch +++ b/patches/server/0301-Expose-the-internal-current-tick.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Expose the internal current tick diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 8254a5d2a72bf12b2f2600a99eb3058c6e76042a..d61aa8acdcbc08d131ecf1d385084e6c82663feb 100644 +index 4d1d7fc503225be0aabc99f0285cc6d306e034ef..0cf17dffced4d7317bbf12c87f3b9b7f1df358e8 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -2880,5 +2880,10 @@ public final class CraftServer implements Server { +@@ -2879,5 +2879,10 @@ public final class CraftServer implements Server { profile.getProperties().putAll(((CraftPlayer) player).getHandle().getGameProfile().getProperties()); return new com.destroystokyo.paper.profile.CraftPlayerProfile(profile); } diff --git a/patches/server/0336-Add-tick-times-API-and-mspt-command.patch b/patches/server/0336-Add-tick-times-API-and-mspt-command.patch index dbcd824029..b596499602 100644 --- a/patches/server/0336-Add-tick-times-API-and-mspt-command.patch +++ b/patches/server/0336-Add-tick-times-API-and-mspt-command.patch @@ -184,10 +184,10 @@ index 91981ef15a9d8a46681f39ec8cf0f136f9931968..b260b197bc254d22a9fd0f1c2dd79993 + // Paper end - Add tick times API and /mspt command } diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index d61aa8acdcbc08d131ecf1d385084e6c82663feb..86e9a0955df9ffd5421df4c4d25393ac7cb13aac 100644 +index 0cf17dffced4d7317bbf12c87f3b9b7f1df358e8..cf928e659570c0b091a6d36d9eddedee11353232 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -2648,6 +2648,16 @@ public final class CraftServer implements Server { +@@ -2647,6 +2647,16 @@ public final class CraftServer implements Server { return CraftMagicNumbers.INSTANCE; } diff --git a/patches/server/0337-Expose-MinecraftServer-isRunning.patch b/patches/server/0337-Expose-MinecraftServer-isRunning.patch index 9122431f7c..5f6a2398f3 100644 --- a/patches/server/0337-Expose-MinecraftServer-isRunning.patch +++ b/patches/server/0337-Expose-MinecraftServer-isRunning.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Expose MinecraftServer#isRunning This allows for plugins to detect if the server is actually turning off in onDisable rather than just plugins reloading. diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 86e9a0955df9ffd5421df4c4d25393ac7cb13aac..e06b2821d29217aa6e043009cfc843da6e478a44 100644 +index cf928e659570c0b091a6d36d9eddedee11353232..15ff6476f1f86e3eac78f5cdcae9b71e124ee40f 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -2895,5 +2895,10 @@ public final class CraftServer implements Server { +@@ -2894,5 +2894,10 @@ public final class CraftServer implements Server { public int getCurrentTick() { return net.minecraft.server.MinecraftServer.currentTick; } diff --git a/patches/server/0361-Expose-game-version.patch b/patches/server/0361-Expose-game-version.patch index e304bd9ae3..bd1a504019 100644 --- a/patches/server/0361-Expose-game-version.patch +++ b/patches/server/0361-Expose-game-version.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Expose game version diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index e06b2821d29217aa6e043009cfc843da6e478a44..87414dc4b6fc759a8d2b13f32207280551a215f4 100644 +index 15ff6476f1f86e3eac78f5cdcae9b71e124ee40f..2431f687fb0ad6c904448f47fad926b136cba815 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -579,6 +579,13 @@ public final class CraftServer implements Server { +@@ -578,6 +578,13 @@ public final class CraftServer implements Server { return this.bukkitVersion; } diff --git a/patches/server/0363-misc-debugging-dumps.patch b/patches/server/0363-misc-debugging-dumps.patch index 5b6e03749c..9e356eecb4 100644 --- a/patches/server/0363-misc-debugging-dumps.patch +++ b/patches/server/0363-misc-debugging-dumps.patch @@ -36,10 +36,10 @@ index 0000000000000000000000000000000000000000..479bb92d159f33c54c2d9c39d8a63aa9 + } +} diff --git a/src/main/java/net/minecraft/commands/Commands.java b/src/main/java/net/minecraft/commands/Commands.java -index 3b59f3d92d781c16825f6f67b725225256425d11..2fb4660147294de9e9dec70bc3527327f2d859ee 100644 +index f15c388434a0a501f86868de35cc138756975027..5044a7dc120c8b040ee23365d2bf97e6180e3ee4 100644 --- a/src/main/java/net/minecraft/commands/Commands.java +++ b/src/main/java/net/minecraft/commands/Commands.java -@@ -344,7 +344,7 @@ public class Commands { +@@ -342,7 +342,7 @@ public class Commands { } catch (Exception exception) { MutableComponent ichatmutablecomponent = Component.literal(exception.getMessage() == null ? exception.getClass().getName() : exception.getMessage()); @@ -105,10 +105,10 @@ index 970d1ddf0a014b47b0ac97440489706137324991..e4086bea596e5f5d71491e0b7ad650d7 this.connection.disconnect(ServerConfigurationPacketListenerImpl.DISCONNECT_REASON_INVALID_DATA); } diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 87414dc4b6fc759a8d2b13f32207280551a215f4..89749bd7f47afe9ddcb0f38d7d7a9fbd02077e30 100644 +index 2431f687fb0ad6c904448f47fad926b136cba815..c62936e7070d794aeac7e5175757aa045a6afcae 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -1018,6 +1018,7 @@ public final class CraftServer implements Server { +@@ -1017,6 +1017,7 @@ public final class CraftServer implements Server { plugin.getDescription().getFullName(), "This plugin is not properly shutting down its async tasks when it is being reloaded. This may cause conflicts with the newly loaded version of the plugin" )); diff --git a/patches/server/0365-Implement-Mob-Goal-API.patch b/patches/server/0365-Implement-Mob-Goal-API.patch index e1a1894944..05113ab5d0 100644 --- a/patches/server/0365-Implement-Mob-Goal-API.patch +++ b/patches/server/0365-Implement-Mob-Goal-API.patch @@ -771,10 +771,10 @@ index 6667ecc4b7eded4e20a415cef1e1b1179e6710b8..16f9a98b8a939e5ca7e2dc04f87134a7 LOOK, JUMP, diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 89749bd7f47afe9ddcb0f38d7d7a9fbd02077e30..3f29c1ba155ab3b145d241efb3f9274ef7a279e2 100644 +index c62936e7070d794aeac7e5175757aa045a6afcae..82d462fbc8936b70169ca3b55d488e1ef76aec40 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -2908,5 +2908,11 @@ public final class CraftServer implements Server { +@@ -2907,5 +2907,11 @@ public final class CraftServer implements Server { public boolean isStopping() { return net.minecraft.server.MinecraftServer.getServer().hasStopped(); } diff --git a/patches/server/0371-Wait-for-Async-Tasks-during-shutdown.patch b/patches/server/0371-Wait-for-Async-Tasks-during-shutdown.patch index f68562d27c..6115960afb 100644 --- a/patches/server/0371-Wait-for-Async-Tasks-during-shutdown.patch +++ b/patches/server/0371-Wait-for-Async-Tasks-during-shutdown.patch @@ -22,10 +22,10 @@ index c0d467cc65c208aa1166a24dec753b1e2b3d995b..6da91e7236ee2d2a0bcbe1f3933b5624 // CraftBukkit end if (io.papermc.paper.plugin.PluginInitializerManager.instance().pluginRemapper != null) io.papermc.paper.plugin.PluginInitializerManager.instance().pluginRemapper.shutdown(); // Paper - Plugin remapping diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 3f29c1ba155ab3b145d241efb3f9274ef7a279e2..11c41e2a0887a59b7b3328b28628ce5958fc06d2 100644 +index 82d462fbc8936b70169ca3b55d488e1ef76aec40..a57322196c83b544062b671d93c8ae08563f902f 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -1029,6 +1029,31 @@ public final class CraftServer implements Server { +@@ -1028,6 +1028,31 @@ public final class CraftServer implements Server { org.spigotmc.WatchdogThread.hasStarted = true; // Paper - Disable watchdog early timeout on reload } diff --git a/patches/server/0387-Fix-Per-World-Difficulty-Remembering-Difficulty.patch b/patches/server/0387-Fix-Per-World-Difficulty-Remembering-Difficulty.patch index cabbecf672..f9de6ceab3 100644 --- a/patches/server/0387-Fix-Per-World-Difficulty-Remembering-Difficulty.patch +++ b/patches/server/0387-Fix-Per-World-Difficulty-Remembering-Difficulty.patch @@ -102,10 +102,10 @@ index 5bc22e58a6ddfc0a5459c68e99fdf1095f23f0d8..324229e960c6fdf3de2a8d5c0c5516e2 } diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 11c41e2a0887a59b7b3328b28628ce5958fc06d2..946ad5418950daf13e449233eac94c1311f3d926 100644 +index a57322196c83b544062b671d93c8ae08563f902f..3788f4ddac343d1bb0c96f2072a1e0fb574484f1 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -967,8 +967,8 @@ public final class CraftServer implements Server { +@@ -966,8 +966,8 @@ public final class CraftServer implements Server { org.spigotmc.SpigotConfig.init((File) this.console.options.valueOf("spigot-settings")); // Spigot this.console.paperConfigurations.reloadConfigs(this.console); for (ServerLevel world : this.console.getAllLevels()) { diff --git a/patches/server/0390-Add-Plugin-Tickets-to-API-Chunk-Methods.patch b/patches/server/0390-Add-Plugin-Tickets-to-API-Chunk-Methods.patch index f1a8679072..deaa1e2a0d 100644 --- a/patches/server/0390-Add-Plugin-Tickets-to-API-Chunk-Methods.patch +++ b/patches/server/0390-Add-Plugin-Tickets-to-API-Chunk-Methods.patch @@ -22,7 +22,7 @@ wants it to collect even faster, they can restore that setting back to 1 instead Not adding it to .getType() though to keep behavior consistent with vanilla for performance reasons. diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 946ad5418950daf13e449233eac94c1311f3d926..a22b146e2bfdeb66aca8abb5fb23ee5cd6306f4e 100644 +index 3788f4ddac343d1bb0c96f2072a1e0fb574484f1..0c7a3f0c3ae063d6fa0f76000826ebc3a49f5532 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -379,7 +379,7 @@ public final class CraftServer implements Server { @@ -34,7 +34,7 @@ index 946ad5418950daf13e449233eac94c1311f3d926..a22b146e2bfdeb66aca8abb5fb23ee5c this.minimumAPI = ApiVersion.getOrCreateVersion(this.configuration.getString("settings.minimum-api")); this.loadIcon(); -@@ -947,7 +947,7 @@ public final class CraftServer implements Server { +@@ -946,7 +946,7 @@ public final class CraftServer implements Server { this.console.setMotd(config.motd); this.overrideSpawnLimits(); this.warningState = WarningState.value(this.configuration.getString("settings.deprecated-verbose")); diff --git a/patches/server/0399-Thread-Safe-Vanilla-Command-permission-checking.patch b/patches/server/0399-Thread-Safe-Vanilla-Command-permission-checking.patch index ff5324aeb2..a210e43dce 100644 --- a/patches/server/0399-Thread-Safe-Vanilla-Command-permission-checking.patch +++ b/patches/server/0399-Thread-Safe-Vanilla-Command-permission-checking.patch @@ -9,7 +9,7 @@ to race conditions. Plus, .canUse we want to be safe for async anyways. diff --git a/src/main/java/com/mojang/brigadier/tree/CommandNode.java b/src/main/java/com/mojang/brigadier/tree/CommandNode.java -index d8142624f9f3a5909e7cc5665f1629a1a67dd302..b02fb15c98ab873fa78635d7a23706ddff8cc94d 100644 +index 14ccd0c8f721e9be7dca8a5dcb8ef95b5cd82731..1f4963bf4681a771130abc1da179819626ecfc1f 100644 --- a/src/main/java/com/mojang/brigadier/tree/CommandNode.java +++ b/src/main/java/com/mojang/brigadier/tree/CommandNode.java @@ -75,10 +75,10 @@ public abstract class CommandNode implements Comparable> { diff --git a/patches/server/0418-PortalCreateEvent-needs-to-know-its-entity.patch b/patches/server/0418-PortalCreateEvent-needs-to-know-its-entity.patch index a291a9676f..4f717a77b9 100644 --- a/patches/server/0418-PortalCreateEvent-needs-to-know-its-entity.patch +++ b/patches/server/0418-PortalCreateEvent-needs-to-know-its-entity.patch @@ -18,7 +18,7 @@ index bf3785e3b347ebc1ce1e044c9db1a9d23c80f880..1fe34b2b160569b41ce87910eff56d59 world.notifyAndUpdatePhysics(newblockposition, null, oldBlock, block, world.getBlockState(newblockposition), updateFlag, 512); // send null chunk as chunk.k() returns false by this point diff --git a/src/main/java/net/minecraft/world/level/block/BaseFireBlock.java b/src/main/java/net/minecraft/world/level/block/BaseFireBlock.java -index 233236733537e036d3a37a3102f3ca6b887d076f..da4fd07f75aefb53b03e40c668f6c4a23693ffcb 100644 +index 233236733537e036d3a37a3102f3ca6b887d076f..83f48d543eac94276ee4d7f7a4c21abdfa8eb8e6 100644 --- a/src/main/java/net/minecraft/world/level/block/BaseFireBlock.java +++ b/src/main/java/net/minecraft/world/level/block/BaseFireBlock.java @@ -144,12 +144,19 @@ public abstract class BaseFireBlock extends Block { @@ -30,7 +30,7 @@ index 233236733537e036d3a37a3102f3ca6b887d076f..da4fd07f75aefb53b03e40c668f6c4a2 + } + + @Override -+ protected void onPlace(BlockState state, Level world, BlockPos pos, BlockState oldState, boolean notify, net.minecraft.world.item.context.UseOnContext context) { ++ protected void onPlace(BlockState state, Level world, BlockPos pos, BlockState oldState, boolean notify, @javax.annotation.Nullable net.minecraft.world.item.context.UseOnContext context) { + // Paper end - UseOnContext param if (!oldState.is(state.getBlock())) { if (BaseFireBlock.inPortalDimension(world)) { @@ -90,7 +90,7 @@ index 3e76f1baa321f1c2551a027a705bbeed48936e2b..24c2ec8e637373876a00bf292ac9318f this.getBlock().onPlace(this.asState(), world, pos, state, notify); } diff --git a/src/main/java/net/minecraft/world/level/portal/PortalShape.java b/src/main/java/net/minecraft/world/level/portal/PortalShape.java -index 766884046e2c22da4cb99712ff09d1f439394523..935ae100d3672cf493ebb6a3e6f70442ea22219b 100644 +index 766884046e2c22da4cb99712ff09d1f439394523..af24467ee37cfc06f692b3b02e68f6cfbaaa8d59 100644 --- a/src/main/java/net/minecraft/world/level/portal/PortalShape.java +++ b/src/main/java/net/minecraft/world/level/portal/PortalShape.java @@ -190,7 +190,14 @@ public class PortalShape { @@ -103,7 +103,7 @@ index 766884046e2c22da4cb99712ff09d1f439394523..935ae100d3672cf493ebb6a3e6f70442 + return this.createPortalBlocks(null); + } + -+ public boolean createPortalBlocks(net.minecraft.world.item.context.UseOnContext useOnContext) { ++ public boolean createPortalBlocks(@Nullable net.minecraft.world.item.context.UseOnContext useOnContext) { + // Paper end - UseOnContext param org.bukkit.World bworld = this.level.getMinecraftWorld().getWorld(); diff --git a/patches/server/0440-Add-getOfflinePlayerIfCached-String.patch b/patches/server/0440-Add-getOfflinePlayerIfCached-String.patch index ba41a8d0e7..8965f3368d 100644 --- a/patches/server/0440-Add-getOfflinePlayerIfCached-String.patch +++ b/patches/server/0440-Add-getOfflinePlayerIfCached-String.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add getOfflinePlayerIfCached(String) diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index a22b146e2bfdeb66aca8abb5fb23ee5cd6306f4e..99fa8f65801b1816b788fa42d49d6672bf331579 100644 +index 0c7a3f0c3ae063d6fa0f76000826ebc3a49f5532..1460060f2ff42ebaa7b2418b375ce661c73bd17f 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -1933,6 +1933,28 @@ public final class CraftServer implements Server { +@@ -1932,6 +1932,28 @@ public final class CraftServer implements Server { return result; } diff --git a/patches/server/0484-Empty-commands-shall-not-be-dispatched.patch b/patches/server/0484-Empty-commands-shall-not-be-dispatched.patch index 8d31da240c..947eb79c2e 100644 --- a/patches/server/0484-Empty-commands-shall-not-be-dispatched.patch +++ b/patches/server/0484-Empty-commands-shall-not-be-dispatched.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Empty commands shall not be dispatched diff --git a/src/main/java/net/minecraft/commands/Commands.java b/src/main/java/net/minecraft/commands/Commands.java -index 2fb4660147294de9e9dec70bc3527327f2d859ee..83091987b320171ef9071cbef6b10a1bd72d38e2 100644 +index 5044a7dc120c8b040ee23365d2bf97e6180e3ee4..43695b31cf23555d3d8a28b031ae6245f96ad1f7 100644 --- a/src/main/java/net/minecraft/commands/Commands.java +++ b/src/main/java/net/minecraft/commands/Commands.java -@@ -290,6 +290,7 @@ public class Commands { +@@ -288,6 +288,7 @@ public class Commands { command = event.getCommand(); String[] args = command.split(" "); diff --git a/patches/server/0518-Expand-world-key-API.patch b/patches/server/0518-Expand-world-key-API.patch index ead35a3b57..74d0fe3827 100644 --- a/patches/server/0518-Expand-world-key-API.patch +++ b/patches/server/0518-Expand-world-key-API.patch @@ -20,10 +20,10 @@ index 9801f78f1d44fd5a72fbdb319681b683e8fb85c4..1e720b96f0367652db6924b8654deaa9 // Paper end } diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 99fa8f65801b1816b788fa42d49d6672bf331579..6debfd5866d4411ef8d51995bd07a0e2ece781b3 100644 +index 1460060f2ff42ebaa7b2418b375ce661c73bd17f..b9180b7552796331d09c3aef1e863a253180721d 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -1150,9 +1150,15 @@ public final class CraftServer implements Server { +@@ -1149,9 +1149,15 @@ public final class CraftServer implements Server { File folder = new File(this.getWorldContainer(), name); World world = this.getWorld(name); @@ -41,7 +41,7 @@ index 99fa8f65801b1816b788fa42d49d6672bf331579..6debfd5866d4411ef8d51995bd07a0e2 if (folder.exists()) { Preconditions.checkArgument(folder.isDirectory(), "File (%s) exists and isn't a folder", name); -@@ -1278,7 +1284,7 @@ public final class CraftServer implements Server { +@@ -1277,7 +1283,7 @@ public final class CraftServer implements Server { } else if (name.equals(levelName + "_the_end")) { worldKey = net.minecraft.world.level.Level.END; } else { @@ -50,7 +50,7 @@ index 99fa8f65801b1816b788fa42d49d6672bf331579..6debfd5866d4411ef8d51995bd07a0e2 } // If set to not keep spawn in memory (changed from default) then adjust rule accordingly -@@ -1374,6 +1380,15 @@ public final class CraftServer implements Server { +@@ -1373,6 +1379,15 @@ public final class CraftServer implements Server { return null; } diff --git a/patches/server/0540-Send-empty-commands-if-tab-completion-is-disabled.patch b/patches/server/0540-Send-empty-commands-if-tab-completion-is-disabled.patch index d414ea5eae..3c45c05c10 100644 --- a/patches/server/0540-Send-empty-commands-if-tab-completion-is-disabled.patch +++ b/patches/server/0540-Send-empty-commands-if-tab-completion-is-disabled.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Send empty commands if tab completion is disabled diff --git a/src/main/java/net/minecraft/commands/Commands.java b/src/main/java/net/minecraft/commands/Commands.java -index 83091987b320171ef9071cbef6b10a1bd72d38e2..8bc9da1a23a7bac65557114171f2f9391b0a32b0 100644 +index 43695b31cf23555d3d8a28b031ae6245f96ad1f7..3728b051b9eb9e9e06bc765a9a2fae7f45daf6ff 100644 --- a/src/main/java/net/minecraft/commands/Commands.java +++ b/src/main/java/net/minecraft/commands/Commands.java -@@ -458,7 +458,12 @@ public class Commands { +@@ -450,7 +450,12 @@ public class Commands { } public void sendCommands(ServerPlayer player) { diff --git a/patches/server/0547-Add-basic-Datapack-API.patch b/patches/server/0547-Add-basic-Datapack-API.patch index e53f421ee9..08c4d71896 100644 --- a/patches/server/0547-Add-basic-Datapack-API.patch +++ b/patches/server/0547-Add-basic-Datapack-API.patch @@ -92,7 +92,7 @@ index 0000000000000000000000000000000000000000..cf4374493c11057451a62a655514415c + } +} diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 6debfd5866d4411ef8d51995bd07a0e2ece781b3..507cad6ef11603924389956305908fd157043178 100644 +index b9180b7552796331d09c3aef1e863a253180721d..7c80d3290ee443ec79cf682be29d5ac1cbf3e381 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -305,6 +305,7 @@ public final class CraftServer implements Server { @@ -111,7 +111,7 @@ index 6debfd5866d4411ef8d51995bd07a0e2ece781b3..507cad6ef11603924389956305908fd1 } public boolean getCommandBlockOverride(String command) { -@@ -2976,5 +2978,11 @@ public final class CraftServer implements Server { +@@ -2975,5 +2977,11 @@ public final class CraftServer implements Server { public com.destroystokyo.paper.entity.ai.MobGoals getMobGoals() { return mobGoals; } diff --git a/patches/server/0551-More-Enchantment-API.patch b/patches/server/0551-More-Enchantment-API.patch index 81b0f3ac5e..d561409c37 100644 --- a/patches/server/0551-More-Enchantment-API.patch +++ b/patches/server/0551-More-Enchantment-API.patch @@ -9,7 +9,7 @@ public net.minecraft.world.item.enchantment.Enchantment definition Co-authored-by: Luis diff --git a/src/main/java/org/bukkit/craftbukkit/enchantments/CraftEnchantment.java b/src/main/java/org/bukkit/craftbukkit/enchantments/CraftEnchantment.java -index bb8a3e670924ebcce48669c5dce57e2df03fad77..bb45dde0fd91796d5fd83a5fd20f5f1d5ad63ee7 100644 +index bb8a3e670924ebcce48669c5dce57e2df03fad77..552f703f6b06895246de72501d01163d9f24dad2 100644 --- a/src/main/java/org/bukkit/craftbukkit/enchantments/CraftEnchantment.java +++ b/src/main/java/org/bukkit/craftbukkit/enchantments/CraftEnchantment.java @@ -71,7 +71,7 @@ public class CraftEnchantment extends Enchantment implements Handleable getActiveSlots() { -+ return java.util.stream.Stream.of(handle.definition.slots()).map(org.bukkit.craftbukkit.CraftEquipmentSlot::getSlot).collect(java.util.stream.Collectors.toSet()); ++ return java.util.stream.Stream.of(this.handle.definition.slots()).map(org.bukkit.craftbukkit.CraftEquipmentSlot::getSlot).collect(java.util.stream.Collectors.toSet()); + } // Paper end diff --git a/patches/server/0556-Add-EntityInsideBlockEvent.patch b/patches/server/0556-Add-EntityInsideBlockEvent.patch index 03dd050787..26d32bc8bf 100644 --- a/patches/server/0556-Add-EntityInsideBlockEvent.patch +++ b/patches/server/0556-Add-EntityInsideBlockEvent.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Add EntityInsideBlockEvent diff --git a/src/main/java/net/minecraft/world/level/block/BaseFireBlock.java b/src/main/java/net/minecraft/world/level/block/BaseFireBlock.java -index da4fd07f75aefb53b03e40c668f6c4a23693ffcb..b18c1ca558e4005354ff42cde3056df9408f7fdc 100644 +index 83f48d543eac94276ee4d7f7a4c21abdfa8eb8e6..39a92a25c55fb16f1371b0dfe2fb94258e4b7f0d 100644 --- a/src/main/java/net/minecraft/world/level/block/BaseFireBlock.java +++ b/src/main/java/net/minecraft/world/level/block/BaseFireBlock.java @@ -124,6 +124,7 @@ public abstract class BaseFireBlock extends Block { diff --git a/patches/server/0587-Add-System.out-err-catcher.patch b/patches/server/0587-Add-System.out-err-catcher.patch index 9cb38a5863..5b85a7f2b8 100644 --- a/patches/server/0587-Add-System.out-err-catcher.patch +++ b/patches/server/0587-Add-System.out-err-catcher.patch @@ -105,7 +105,7 @@ index 0000000000000000000000000000000000000000..a8e813ca89b033f061e695288b3383bd + } +} diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 507cad6ef11603924389956305908fd157043178..aab59a42af04971b5be4b6295700a1c50e1c964f 100644 +index 7c80d3290ee443ec79cf682be29d5ac1cbf3e381..7741acecf51040ba1faec4b22c0c0bfa8a2e4393 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -307,6 +307,7 @@ public final class CraftServer implements Server { diff --git a/patches/server/0615-Vanilla-command-permission-fixes.patch b/patches/server/0615-Vanilla-command-permission-fixes.patch index 65bcdb8f85..e7be2c02c2 100644 --- a/patches/server/0615-Vanilla-command-permission-fixes.patch +++ b/patches/server/0615-Vanilla-command-permission-fixes.patch @@ -33,12 +33,12 @@ index 899008b2980d13f1be6280cd8cb959c53a29bebf..d5f7da3502575f6847f3c22ab0e94284 private RedirectModifier modifier = null; private boolean forks; diff --git a/src/main/java/net/minecraft/commands/Commands.java b/src/main/java/net/minecraft/commands/Commands.java -index 8bc9da1a23a7bac65557114171f2f9391b0a32b0..412c21ce2dcd772e525432efadff7e1340cb58e9 100644 +index 3728b051b9eb9e9e06bc765a9a2fae7f45daf6ff..779fee2f9b819124a01b9f8d2b7ed0d5f2accf6c 100644 --- a/src/main/java/net/minecraft/commands/Commands.java +++ b/src/main/java/net/minecraft/commands/Commands.java -@@ -260,6 +260,13 @@ public class Commands { +@@ -258,6 +258,13 @@ public class Commands { + PublishCommand.register(this.dispatcher); } - this.vanillaCommandNodes.addAll(this.dispatcher.getRoot().getChildren()); // Paper - Add UnknownCommandEvent + // Paper start - Vanilla command permission fixes + for (final CommandNode node : this.dispatcher.getRoot().getChildren()) { diff --git a/patches/server/0619-Add-paper-mobcaps-and-paper-playermobcaps.patch b/patches/server/0619-Add-paper-mobcaps-and-paper-playermobcaps.patch index 51302543ed..5d60195ebe 100644 --- a/patches/server/0619-Add-paper-mobcaps-and-paper-playermobcaps.patch +++ b/patches/server/0619-Add-paper-mobcaps-and-paper-playermobcaps.patch @@ -278,10 +278,10 @@ index 58ea6a1f95a09c22125a8262b1b221004ebce0e4..ea6533c1ac218aa075da3401807a06fc BlockPos blockposition = NaturalSpawner.getRandomPosWithin(world, chunk); diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index aab59a42af04971b5be4b6295700a1c50e1c964f..382c5a9ad23523b830edc7c81767b13a49aca087 100644 +index 7741acecf51040ba1faec4b22c0c0bfa8a2e4393..e85e866994247b77772937ef81507041db303071 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -2298,6 +2298,11 @@ public final class CraftServer implements Server { +@@ -2297,6 +2297,11 @@ public final class CraftServer implements Server { @Override public int getSpawnLimit(SpawnCategory spawnCategory) { diff --git a/patches/server/0654-Allow-delegation-to-vanilla-chunk-gen.patch b/patches/server/0654-Allow-delegation-to-vanilla-chunk-gen.patch index bde496b837..8c6c32dac2 100644 --- a/patches/server/0654-Allow-delegation-to-vanilla-chunk-gen.patch +++ b/patches/server/0654-Allow-delegation-to-vanilla-chunk-gen.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Allow delegation to vanilla chunk gen diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 382c5a9ad23523b830edc7c81767b13a49aca087..8136688a2a4da9d6190d67c0936e210b23ec5126 100644 +index e85e866994247b77772937ef81507041db303071..b1a75994eba329c3171a005815dd7d363006fb34 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -2483,6 +2483,90 @@ public final class CraftServer implements Server { +@@ -2482,6 +2482,90 @@ public final class CraftServer implements Server { return new OldCraftChunkData(world.getMinHeight(), world.getMaxHeight(), handle.registryAccess().registryOrThrow(Registries.BIOME)); } diff --git a/patches/server/0668-Expose-vanilla-BiomeProvider-from-WorldInfo.patch b/patches/server/0668-Expose-vanilla-BiomeProvider-from-WorldInfo.patch index 2f2e8174a1..96fc6e3b61 100644 --- a/patches/server/0668-Expose-vanilla-BiomeProvider-from-WorldInfo.patch +++ b/patches/server/0668-Expose-vanilla-BiomeProvider-from-WorldInfo.patch @@ -18,10 +18,10 @@ index 718a455aa70999a339cccc51d6fc4bb689c2c27b..0a206b9ff1ad235fa0805ad635c1a6ca biomeProvider = gen.getDefaultBiomeProvider(worldInfo); } diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 8136688a2a4da9d6190d67c0936e210b23ec5126..3807291dc0e40e7247167162225c4f63ea992161 100644 +index b1a75994eba329c3171a005815dd7d363006fb34..608face15b7a016699e997083042be304908cc68 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -1275,7 +1275,7 @@ public final class CraftServer implements Server { +@@ -1274,7 +1274,7 @@ public final class CraftServer implements Server { List list = ImmutableList.of(new PhantomSpawner(), new PatrolSpawner(), new CatSpawner(), new VillageSiege(), new WanderingTraderSpawner(worlddata)); LevelStem worlddimension = iregistry.get(actualDimension); diff --git a/patches/server/0680-API-for-creating-command-sender-which-forwards-feedb.patch b/patches/server/0680-API-for-creating-command-sender-which-forwards-feedb.patch index 0d180e00d7..4e11ae0467 100644 --- a/patches/server/0680-API-for-creating-command-sender-which-forwards-feedb.patch +++ b/patches/server/0680-API-for-creating-command-sender-which-forwards-feedb.patch @@ -122,10 +122,10 @@ index 0000000000000000000000000000000000000000..e3a5f1ec376319bdfda87fa27ae217bf + } +} diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 3807291dc0e40e7247167162225c4f63ea992161..7d5109e0d4a75f977954b68e50eeaab46dd15b5d 100644 +index 608face15b7a016699e997083042be304908cc68..ee0c69d1d1b931d23761461fc8cc3d214aa77330 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -2129,6 +2129,13 @@ public final class CraftServer implements Server { +@@ -2128,6 +2128,13 @@ public final class CraftServer implements Server { return this.console.console; } diff --git a/patches/server/0684-Add-missing-Validate-calls-to-CraftServer-getSpawnLi.patch b/patches/server/0684-Add-missing-Validate-calls-to-CraftServer-getSpawnLi.patch index c72e485b62..43e7e71051 100644 --- a/patches/server/0684-Add-missing-Validate-calls-to-CraftServer-getSpawnLi.patch +++ b/patches/server/0684-Add-missing-Validate-calls-to-CraftServer-getSpawnLi.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Add missing Validate calls to CraftServer#getSpawnLimit Copies appropriate checks from CraftWorld#getSpawnLimit diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 7d5109e0d4a75f977954b68e50eeaab46dd15b5d..b1f141e3056e2187b164c6cba6707a30dd92fdf1 100644 +index ee0c69d1d1b931d23761461fc8cc3d214aa77330..55c87d97e42113786409db4c368c0f68cf0c4c17 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -2306,6 +2306,8 @@ public final class CraftServer implements Server { +@@ -2305,6 +2305,8 @@ public final class CraftServer implements Server { @Override public int getSpawnLimit(SpawnCategory spawnCategory) { // Paper start - Add mobcaps commands diff --git a/patches/server/0685-Add-GameEvent-tags.patch b/patches/server/0685-Add-GameEvent-tags.patch index 1d2259ee92..1de3d4a3c4 100644 --- a/patches/server/0685-Add-GameEvent-tags.patch +++ b/patches/server/0685-Add-GameEvent-tags.patch @@ -46,10 +46,10 @@ index 0000000000000000000000000000000000000000..e7d9fd2702a1ce96596580fff8f5ee4f + } +} diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index b1f141e3056e2187b164c6cba6707a30dd92fdf1..ec6dd3cd685421e24293c4b6a3a01c5dd37cc620 100644 +index 55c87d97e42113786409db4c368c0f68cf0c4c17..df76c08b76e6e31414ccbb184557560b660f96a0 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -2734,6 +2734,15 @@ public final class CraftServer implements Server { +@@ -2733,6 +2733,15 @@ public final class CraftServer implements Server { return (org.bukkit.Tag) new CraftEntityTag(BuiltInRegistries.ENTITY_TYPE, entityTagKey); } } @@ -65,7 +65,7 @@ index b1f141e3056e2187b164c6cba6707a30dd92fdf1..ec6dd3cd685421e24293c4b6a3a01c5d default -> throw new IllegalArgumentException(); } -@@ -2766,6 +2775,13 @@ public final class CraftServer implements Server { +@@ -2765,6 +2774,13 @@ public final class CraftServer implements Server { net.minecraft.core.Registry> entityTags = BuiltInRegistries.ENTITY_TYPE; return entityTags.getTags().map(pair -> (org.bukkit.Tag) new CraftEntityTag(entityTags, pair.getFirst())).collect(ImmutableList.toImmutableList()); } diff --git a/patches/server/0691-Put-world-into-worldlist-before-initing-the-world.patch b/patches/server/0691-Put-world-into-worldlist-before-initing-the-world.patch index 1383f9759f..de105288ed 100644 --- a/patches/server/0691-Put-world-into-worldlist-before-initing-the-world.patch +++ b/patches/server/0691-Put-world-into-worldlist-before-initing-the-world.patch @@ -23,10 +23,10 @@ index afa1b531620fe15e76a48b39b830c199a8a0e702..af5c6893859530f65724869d18b6677e if (worlddata.getCustomBossEvents() != null) { diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index ec6dd3cd685421e24293c4b6a3a01c5dd37cc620..e25dc948bfd59b8d0a9350c0ffe496f53d042ab8 100644 +index df76c08b76e6e31414ccbb184557560b660f96a0..f4ac614b94d519659d884b779defad81f317e90a 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -1301,10 +1301,11 @@ public final class CraftServer implements Server { +@@ -1300,10 +1300,11 @@ public final class CraftServer implements Server { return null; } diff --git a/patches/server/0693-Custom-Potion-Mixes.patch b/patches/server/0693-Custom-Potion-Mixes.patch index 97668bb16f..04763694af 100644 --- a/patches/server/0693-Custom-Potion-Mixes.patch +++ b/patches/server/0693-Custom-Potion-Mixes.patch @@ -282,7 +282,7 @@ index 3ebfd564d4bbf00da5919e966f3d047285845640..887957ce1ddc2f32569405642f35df46 } diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index e25dc948bfd59b8d0a9350c0ffe496f53d042ab8..7c4ee28eb7c40e4b629cf355cfaa95fe93d66bc2 100644 +index f4ac614b94d519659d884b779defad81f317e90a..9b9d78c4673b07845ff4ca78425ecb3aade3b039 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -308,6 +308,7 @@ public final class CraftServer implements Server { @@ -301,7 +301,7 @@ index e25dc948bfd59b8d0a9350c0ffe496f53d042ab8..7c4ee28eb7c40e4b629cf355cfaa95fe datapackManager = new io.papermc.paper.datapack.PaperDatapackManager(console.getPackRepository()); // Paper } -@@ -3100,5 +3102,9 @@ public final class CraftServer implements Server { +@@ -3099,5 +3101,9 @@ public final class CraftServer implements Server { return datapackManager; } diff --git a/patches/server/0704-Fix-saving-in-unloadWorld.patch b/patches/server/0704-Fix-saving-in-unloadWorld.patch index 604e791aaa..aa9f726bd7 100644 --- a/patches/server/0704-Fix-saving-in-unloadWorld.patch +++ b/patches/server/0704-Fix-saving-in-unloadWorld.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Fix saving in unloadWorld Change savingDisabled to false to ensure ServerLevel's saving logic gets called when unloadWorld is called with save = true diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 7c4ee28eb7c40e4b629cf355cfaa95fe93d66bc2..e52461063786b65802838588d68233b33b67b173 100644 +index 9b9d78c4673b07845ff4ca78425ecb3aade3b039..a45c56a72d5f19946d05e961d2a44f3d1456681e 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -1350,7 +1350,7 @@ public final class CraftServer implements Server { +@@ -1349,7 +1349,7 @@ public final class CraftServer implements Server { try { if (save) { diff --git a/patches/server/0716-WorldCreator-keepSpawnLoaded.patch b/patches/server/0716-WorldCreator-keepSpawnLoaded.patch index 9e358f7c85..92ffaf7290 100644 --- a/patches/server/0716-WorldCreator-keepSpawnLoaded.patch +++ b/patches/server/0716-WorldCreator-keepSpawnLoaded.patch @@ -5,10 +5,10 @@ Subject: [PATCH] WorldCreator#keepSpawnLoaded diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index e52461063786b65802838588d68233b33b67b173..b0628876e4a6885e966f1839b7804af77a4b8d71 100644 +index a45c56a72d5f19946d05e961d2a44f3d1456681e..d1b8d0952d571200589e9f613c50393a41bf0804 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -1293,7 +1293,7 @@ public final class CraftServer implements Server { +@@ -1292,7 +1292,7 @@ public final class CraftServer implements Server { } // If set to not keep spawn in memory (changed from default) then adjust rule accordingly diff --git a/patches/server/0731-Throw-exception-on-world-create-while-being-ticked.patch b/patches/server/0731-Throw-exception-on-world-create-while-being-ticked.patch index 73a4b424a0..e3913abcf5 100644 --- a/patches/server/0731-Throw-exception-on-world-create-while-being-ticked.patch +++ b/patches/server/0731-Throw-exception-on-world-create-while-being-ticked.patch @@ -45,10 +45,10 @@ index 18a73cc12615ecc7e61e8f96e6d8a3aa2ffe6e1f..0775e9259c5b465306adf6b9d7ffc404 this.profiler.popPush("connection"); MinecraftTimings.connectionTimer.startTiming(); // Spigot // Paper diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index b0628876e4a6885e966f1839b7804af77a4b8d71..a18b7ec6b65dc1cfbcd5cfa64f4e2260d820aa3c 100644 +index d1b8d0952d571200589e9f613c50393a41bf0804..a84ef01a0c6c73dae27850044fea6d763e972107 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -887,6 +887,11 @@ public final class CraftServer implements Server { +@@ -886,6 +886,11 @@ public final class CraftServer implements Server { return new ArrayList(this.worlds.values()); } @@ -60,7 +60,7 @@ index b0628876e4a6885e966f1839b7804af77a4b8d71..a18b7ec6b65dc1cfbcd5cfa64f4e2260 public DedicatedPlayerList getHandle() { return this.playerList; } -@@ -1147,6 +1152,7 @@ public final class CraftServer implements Server { +@@ -1146,6 +1151,7 @@ public final class CraftServer implements Server { @Override public World createWorld(WorldCreator creator) { Preconditions.checkState(this.console.getAllLevels().iterator().hasNext(), "Cannot create additional worlds on STARTUP"); @@ -68,7 +68,7 @@ index b0628876e4a6885e966f1839b7804af77a4b8d71..a18b7ec6b65dc1cfbcd5cfa64f4e2260 Preconditions.checkArgument(creator != null, "WorldCreator cannot be null"); String name = creator.name(); -@@ -1323,6 +1329,7 @@ public final class CraftServer implements Server { +@@ -1322,6 +1328,7 @@ public final class CraftServer implements Server { @Override public boolean unloadWorld(World world, boolean save) { diff --git a/patches/server/0737-Don-t-broadcast-messages-to-command-blocks.patch b/patches/server/0737-Don-t-broadcast-messages-to-command-blocks.patch index 1b002f4d1b..44292abef1 100644 --- a/patches/server/0737-Don-t-broadcast-messages-to-command-blocks.patch +++ b/patches/server/0737-Don-t-broadcast-messages-to-command-blocks.patch @@ -20,10 +20,10 @@ index e40069d937de5fd00741ae6873abeecc46b93732..552f7ab11dc09fa69034f009235cb224 Date date = new Date(); diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index a18b7ec6b65dc1cfbcd5cfa64f4e2260d820aa3c..43321751c51a4fa77db1983bdc281d25454807dc 100644 +index a84ef01a0c6c73dae27850044fea6d763e972107..8d9a027b2d54f0896a196baa6bf02074d14e15f8 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -1892,7 +1892,7 @@ public final class CraftServer implements Server { +@@ -1891,7 +1891,7 @@ public final class CraftServer implements Server { // Paper end Set recipients = new HashSet<>(); for (Permissible permissible : this.getPluginManager().getPermissionSubscriptions(permission)) { diff --git a/patches/server/0753-Fix-suggest-command-message-for-brigadier-syntax-exc.patch b/patches/server/0753-Fix-suggest-command-message-for-brigadier-syntax-exc.patch index 42748ba6d8..c145128551 100644 --- a/patches/server/0753-Fix-suggest-command-message-for-brigadier-syntax-exc.patch +++ b/patches/server/0753-Fix-suggest-command-message-for-brigadier-syntax-exc.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Fix suggest command message for brigadier syntax exceptions This is a bug accidentally introduced in upstream CB diff --git a/src/main/java/net/minecraft/commands/Commands.java b/src/main/java/net/minecraft/commands/Commands.java -index 412c21ce2dcd772e525432efadff7e1340cb58e9..4114e2b148baf9ddc489eed11fed4aacd0eab401 100644 +index 779fee2f9b819124a01b9f8d2b7ed0d5f2accf6c..3d6e19c2078a87983a849e6d627cba0609a556cc 100644 --- a/src/main/java/net/minecraft/commands/Commands.java +++ b/src/main/java/net/minecraft/commands/Commands.java -@@ -395,7 +395,7 @@ public class Commands { +@@ -388,7 +388,7 @@ public class Commands { if (commandsyntaxexception.getInput() != null && commandsyntaxexception.getCursor() >= 0) { int i = Math.min(commandsyntaxexception.getInput().length(), commandsyntaxexception.getCursor()); MutableComponent ichatmutablecomponent = Component.empty().withStyle(ChatFormatting.GRAY).withStyle((chatmodifier) -> { diff --git a/patches/server/0755-Add-Velocity-IP-Forwarding-Support.patch b/patches/server/0755-Add-Velocity-IP-Forwarding-Support.patch index 873c5def20..0987d6a956 100644 --- a/patches/server/0755-Add-Velocity-IP-Forwarding-Support.patch +++ b/patches/server/0755-Add-Velocity-IP-Forwarding-Support.patch @@ -228,10 +228,10 @@ index c44a15fc358c28345302b1bf37fc4b111a77fe0e..3333cb70744dc7ef8b181d332b63766a } diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 43321751c51a4fa77db1983bdc281d25454807dc..5e6419480e0ca56a79ea555ddca0c99565e3f070 100644 +index 8d9a027b2d54f0896a196baa6bf02074d14e15f8..3618f7b808ccf7a0d6569225ae6ebd4972b51746 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -816,7 +816,7 @@ public final class CraftServer implements Server { +@@ -815,7 +815,7 @@ public final class CraftServer implements Server { @Override public long getConnectionThrottle() { // Spigot Start - Automatically set connection throttle for bungee configurations diff --git a/patches/server/0786-Fix-EntityCombustEvent-cancellation-cant-fully-preve.patch b/patches/server/0786-Fix-EntityCombustEvent-cancellation-cant-fully-preve.patch index 4de5efdb09..5def430ee3 100644 --- a/patches/server/0786-Fix-EntityCombustEvent-cancellation-cant-fully-preve.patch +++ b/patches/server/0786-Fix-EntityCombustEvent-cancellation-cant-fully-preve.patch @@ -21,7 +21,7 @@ index 4b54b3e121508fb1590654123e86c6c5de54a755..0a4069e6c544deb0ad576350ec371fe1 // CraftBukkit end } diff --git a/src/main/java/net/minecraft/world/level/block/BaseFireBlock.java b/src/main/java/net/minecraft/world/level/block/BaseFireBlock.java -index b18c1ca558e4005354ff42cde3056df9408f7fdc..139d65d2dfb48857415dc2a350204862031f83c9 100644 +index 39a92a25c55fb16f1371b0dfe2fb94258e4b7f0d..784767e5a5c49b023df24496418fb16857d9d700 100644 --- a/src/main/java/net/minecraft/world/level/block/BaseFireBlock.java +++ b/src/main/java/net/minecraft/world/level/block/BaseFireBlock.java @@ -134,6 +134,10 @@ public abstract class BaseFireBlock extends Block { diff --git a/patches/server/0851-Don-t-enforce-icanhasbukkit-default-if-alias-block-e.patch b/patches/server/0851-Don-t-enforce-icanhasbukkit-default-if-alias-block-e.patch index d6ca71427c..d3064fd3ee 100644 --- a/patches/server/0851-Don-t-enforce-icanhasbukkit-default-if-alias-block-e.patch +++ b/patches/server/0851-Don-t-enforce-icanhasbukkit-default-if-alias-block-e.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Don't enforce icanhasbukkit default if alias block exists diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 5e6419480e0ca56a79ea555ddca0c99565e3f070..ce4ba4c38e0e4968226ff35c4273cdbf7767d9c9 100644 +index 3618f7b808ccf7a0d6569225ae6ebd4972b51746..fb41a9da32c91d40e771a3c070d03a785a222b13 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -354,7 +354,11 @@ public final class CraftServer implements Server { diff --git a/patches/server/0858-Fix-cmd-permission-levels-for-command-blocks.patch b/patches/server/0858-Fix-cmd-permission-levels-for-command-blocks.patch index 31edf0f252..1f86b6a789 100644 --- a/patches/server/0858-Fix-cmd-permission-levels-for-command-blocks.patch +++ b/patches/server/0858-Fix-cmd-permission-levels-for-command-blocks.patch @@ -41,10 +41,10 @@ index f3c83bb20a73b489f1fb6bacb69388902b1b6fe7..3c0d2332207ba638faaaa4280bce18c3 // CraftBukkit end diff --git a/src/main/java/net/minecraft/commands/Commands.java b/src/main/java/net/minecraft/commands/Commands.java -index 4114e2b148baf9ddc489eed11fed4aacd0eab401..60406cb01c5a409ba6fe98677a5cc332effaebea 100644 +index 3d6e19c2078a87983a849e6d627cba0609a556cc..e1aa1e1f23512fc7d2267ff8e75358b67cb419a3 100644 --- a/src/main/java/net/minecraft/commands/Commands.java +++ b/src/main/java/net/minecraft/commands/Commands.java -@@ -299,16 +299,7 @@ public class Commands { +@@ -297,16 +297,7 @@ public class Commands { String[] args = command.split(" "); if (args.length == 0) return; // Paper - empty commands shall not be dispatched diff --git a/patches/server/0873-Folia-scheduler-and-owned-region-API.patch b/patches/server/0873-Folia-scheduler-and-owned-region-API.patch index 1730dfd0a8..43a9734890 100644 --- a/patches/server/0873-Folia-scheduler-and-owned-region-API.patch +++ b/patches/server/0873-Folia-scheduler-and-owned-region-API.patch @@ -1251,7 +1251,7 @@ index 16f36d1bfe6458f9aa935cdc63066c082bc83f8e..638aeef75dc5f7ab8b8e050118a7c709 public void setLevelCallback(EntityInLevelCallback changeListener) { this.levelCallback = changeListener; diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index ce4ba4c38e0e4968226ff35c4273cdbf7767d9c9..7e925d50e7adcc8b9c988fe7eb8c8d343f17ce58 100644 +index fb41a9da32c91d40e771a3c070d03a785a222b13..fcc0fb4bd1a6c7206dee1aa389a017c7faa4e893 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -310,6 +310,76 @@ public final class CraftServer implements Server { diff --git a/patches/server/0875-API-for-updating-recipes-on-clients.patch b/patches/server/0875-API-for-updating-recipes-on-clients.patch index 75dacf7f9b..6460683bdd 100644 --- a/patches/server/0875-API-for-updating-recipes-on-clients.patch +++ b/patches/server/0875-API-for-updating-recipes-on-clients.patch @@ -39,10 +39,10 @@ index 0246db4a1f6eb168fa88260282311fee2ebb6014..ea04eb049e16d1027d15f9863d1fcd16 Iterator iterator1 = this.players.iterator(); diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 7e925d50e7adcc8b9c988fe7eb8c8d343f17ce58..86427c6d559f3dbc505e58bcea9d0419e89598f2 100644 +index fcc0fb4bd1a6c7206dee1aa389a017c7faa4e893..cc64a5f15b478779bf6798c4533737facc979f08 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -1143,6 +1143,18 @@ public final class CraftServer implements Server { +@@ -1142,6 +1142,18 @@ public final class CraftServer implements Server { ReloadCommand.reload(this.console); } @@ -61,7 +61,7 @@ index 7e925d50e7adcc8b9c988fe7eb8c8d343f17ce58..86427c6d559f3dbc505e58bcea9d0419 private void loadIcon() { this.icon = new CraftIconCache(null); try { -@@ -1522,6 +1534,13 @@ public final class CraftServer implements Server { +@@ -1521,6 +1533,13 @@ public final class CraftServer implements Server { @Override public boolean addRecipe(Recipe recipe) { @@ -75,7 +75,7 @@ index 7e925d50e7adcc8b9c988fe7eb8c8d343f17ce58..86427c6d559f3dbc505e58bcea9d0419 CraftRecipe toAdd; if (recipe instanceof CraftRecipe) { toAdd = (CraftRecipe) recipe; -@@ -1551,6 +1570,11 @@ public final class CraftServer implements Server { +@@ -1550,6 +1569,11 @@ public final class CraftServer implements Server { } } toAdd.addToCraftingManager(); @@ -87,7 +87,7 @@ index 7e925d50e7adcc8b9c988fe7eb8c8d343f17ce58..86427c6d559f3dbc505e58bcea9d0419 return true; } -@@ -1731,10 +1755,23 @@ public final class CraftServer implements Server { +@@ -1730,10 +1754,23 @@ public final class CraftServer implements Server { @Override public boolean removeRecipe(NamespacedKey recipeKey) { diff --git a/patches/server/0880-Use-correct-seed-on-api-world-load.patch b/patches/server/0880-Use-correct-seed-on-api-world-load.patch index aef99ac6cc..b5e00916b9 100644 --- a/patches/server/0880-Use-correct-seed-on-api-world-load.patch +++ b/patches/server/0880-Use-correct-seed-on-api-world-load.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Use correct seed on api world load diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 86427c6d559f3dbc505e58bcea9d0419e89598f2..605f88a01e374fd588fd7856ac8e48be3ba8dc95 100644 +index cc64a5f15b478779bf6798c4533737facc979f08..6b94ae36f535e58d0ff780985d7cc5dc0494b105 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -1365,7 +1365,7 @@ public final class CraftServer implements Server { +@@ -1364,7 +1364,7 @@ public final class CraftServer implements Server { net.minecraft.server.Main.forceUpgrade(worldSession, DataFixers.getDataFixer(), this.console.options.has("eraseCache"), () -> true, iregistrycustom_dimension, this.console.options.has("recreateRegionFiles")); } diff --git a/patches/server/0887-Deprecate-and-replace-methods-with-old-StructureType.patch b/patches/server/0887-Deprecate-and-replace-methods-with-old-StructureType.patch index 75eedc5080..31119a3193 100644 --- a/patches/server/0887-Deprecate-and-replace-methods-with-old-StructureType.patch +++ b/patches/server/0887-Deprecate-and-replace-methods-with-old-StructureType.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Deprecate and replace methods with old StructureType diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 605f88a01e374fd588fd7856ac8e48be3ba8dc95..b328af2ca94865c335a1945d8ebb6d2fd20a7117 100644 +index 6b94ae36f535e58d0ff780985d7cc5dc0494b105..b1cfc6f5a2511e9bb145442dfb765951a1ee0fca 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -1970,6 +1970,11 @@ public final class CraftServer implements Server { +@@ -1969,6 +1969,11 @@ public final class CraftServer implements Server { ServerLevel worldServer = ((CraftWorld) world).getHandle(); Location structureLocation = world.locateNearestStructure(location, structureType, radius, findUnexplored); @@ -20,7 +20,7 @@ index 605f88a01e374fd588fd7856ac8e48be3ba8dc95..b328af2ca94865c335a1945d8ebb6d2f BlockPos structurePosition = CraftLocation.toBlockPosition(structureLocation); // Create map with trackPlayer = true, unlimitedTracking = true -@@ -1980,6 +1985,31 @@ public final class CraftServer implements Server { +@@ -1979,6 +1984,31 @@ public final class CraftServer implements Server { return CraftItemStack.asBukkitCopy(stack); } diff --git a/patches/server/0956-Add-Lifecycle-Event-system.patch b/patches/server/0956-Add-Lifecycle-Event-system.patch index 57fce2eee7..4d36afb58d 100644 --- a/patches/server/0956-Add-Lifecycle-Event-system.patch +++ b/patches/server/0956-Add-Lifecycle-Event-system.patch @@ -707,10 +707,10 @@ index 2e96308696e131f3f013469a395e5ddda2c5d529..65a66e484c1c39c5f41d97db52f31c67 } catch (Throwable e) { LOGGER.error("Failed to run bootstrapper for %s. This plugin will not be loaded.".formatted(provider.getSource()), e); diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index b328af2ca94865c335a1945d8ebb6d2fd20a7117..ac1b9efed90af19198d43d5308698601bf6720d7 100644 +index b1cfc6f5a2511e9bb145442dfb765951a1ee0fca..b9ad8446d702f729673d75dd6978b9db820f380b 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -1018,6 +1018,11 @@ public final class CraftServer implements Server { +@@ -1017,6 +1017,11 @@ public final class CraftServer implements Server { @Override public void reload() { diff --git a/patches/server/0961-improve-BanList-types.patch b/patches/server/0961-improve-BanList-types.patch index 9539b84792..b5d73be289 100644 --- a/patches/server/0961-improve-BanList-types.patch +++ b/patches/server/0961-improve-BanList-types.patch @@ -5,10 +5,10 @@ Subject: [PATCH] improve BanList types diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index ac1b9efed90af19198d43d5308698601bf6720d7..68e13fa7021b0f9b889ff0b94623a31644c0616e 100644 +index b9ad8446d702f729673d75dd6978b9db820f380b..271b376d51479a2adc42b41bb252e60234ddee5e 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -2223,6 +2223,21 @@ public final class CraftServer implements Server { +@@ -2222,6 +2222,21 @@ public final class CraftServer implements Server { }; } diff --git a/patches/server/0984-Rewrite-chunk-system.patch b/patches/server/0984-Rewrite-chunk-system.patch index 97b19847e2..882d275984 100644 --- a/patches/server/0984-Rewrite-chunk-system.patch +++ b/patches/server/0984-Rewrite-chunk-system.patch @@ -21612,10 +21612,10 @@ index 7dae8d91b74cc7df0745f0c121e3bea09b8d0b6d..1e2530c9e5212b6d2bdbc94817beddb4 @Override diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 68e13fa7021b0f9b889ff0b94623a31644c0616e..a17582292c2cdbc2b692071919500853cf9a7990 100644 +index 271b376d51479a2adc42b41bb252e60234ddee5e..277a92c32e9f22974442b833700bc0f70bdb976a 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -1407,7 +1407,6 @@ public final class CraftServer implements Server { +@@ -1406,7 +1406,6 @@ public final class CraftServer implements Server { // Paper - Put world into worldlist before initing the world; move up this.getServer().prepareLevels(internal.getChunkSource().chunkMap.progressListener, internal); @@ -21623,7 +21623,7 @@ index 68e13fa7021b0f9b889ff0b94623a31644c0616e..a17582292c2cdbc2b692071919500853 this.pluginManager.callEvent(new WorldLoadEvent(internal.getWorld())); return internal.getWorld(); -@@ -1452,7 +1451,7 @@ public final class CraftServer implements Server { +@@ -1451,7 +1450,7 @@ public final class CraftServer implements Server { } handle.getChunkSource().close(save); @@ -21632,7 +21632,7 @@ index 68e13fa7021b0f9b889ff0b94623a31644c0616e..a17582292c2cdbc2b692071919500853 handle.convertable.close(); } catch (Exception ex) { this.getLogger().log(Level.SEVERE, null, ex); -@@ -2488,7 +2487,7 @@ public final class CraftServer implements Server { +@@ -2487,7 +2486,7 @@ public final class CraftServer implements Server { @Override public boolean isPrimaryThread() { diff --git a/patches/server/0995-Anti-Xray.patch b/patches/server/0995-Anti-Xray.patch index 124f02c236..2175c15308 100644 --- a/patches/server/0995-Anti-Xray.patch +++ b/patches/server/0995-Anti-Xray.patch @@ -1573,10 +1573,10 @@ index 1e2530c9e5212b6d2bdbc94817beddb4247dac73..82b4bd669c57b18fb0b443bcd9449502 private static final byte[] EMPTY_LIGHT = new byte[2048]; diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index a17582292c2cdbc2b692071919500853cf9a7990..9ab9a8a41a70626ead8fce71c7e9a32e562bb722 100644 +index 277a92c32e9f22974442b833700bc0f70bdb976a..dd546e0680496d0626972b61b0eb183b07df0e6e 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -2659,7 +2659,7 @@ public final class CraftServer implements Server { +@@ -2658,7 +2658,7 @@ public final class CraftServer implements Server { public ChunkGenerator.ChunkData createChunkData(World world) { Preconditions.checkArgument(world != null, "World cannot be null"); ServerLevel handle = ((CraftWorld) world).getHandle(); diff --git a/patches/server/1019-Fix-entity-type-tags-suggestions-in-selectors.patch b/patches/server/1019-Fix-entity-type-tags-suggestions-in-selectors.patch index a31aeb7f18..d24e7d583c 100644 --- a/patches/server/1019-Fix-entity-type-tags-suggestions-in-selectors.patch +++ b/patches/server/1019-Fix-entity-type-tags-suggestions-in-selectors.patch @@ -35,10 +35,10 @@ index 3c0d2332207ba638faaaa4280bce18c334a01271..e6c7f62ed379a78645933670299e4fcd + // Paper end - tell clients to ask server for suggestions for EntityArguments } diff --git a/src/main/java/net/minecraft/commands/Commands.java b/src/main/java/net/minecraft/commands/Commands.java -index 60406cb01c5a409ba6fe98677a5cc332effaebea..a0702dccbb07c79febe2e65a2ff82c4436c09f12 100644 +index e1aa1e1f23512fc7d2267ff8e75358b67cb419a3..aa2fca6917fb67fe0e9ba067d11487c3a274f675 100644 --- a/src/main/java/net/minecraft/commands/Commands.java +++ b/src/main/java/net/minecraft/commands/Commands.java -@@ -525,6 +525,7 @@ public class Commands { +@@ -517,6 +517,7 @@ public class Commands { private void fillUsableCommands(CommandNode tree, CommandNode result, CommandSourceStack source, Map, CommandNode> resultNodes) { Iterator iterator = tree.getChildren().iterator(); @@ -46,7 +46,7 @@ index 60406cb01c5a409ba6fe98677a5cc332effaebea..a0702dccbb07c79febe2e65a2ff82c44 while (iterator.hasNext()) { CommandNode commandnode2 = (CommandNode) iterator.next(); // Paper start - Brigadier API -@@ -551,6 +552,12 @@ public class Commands { +@@ -543,6 +544,12 @@ public class Commands { if (requiredargumentbuilder.getSuggestionsProvider() != null) { requiredargumentbuilder.suggests(SuggestionProviders.safelySwap(requiredargumentbuilder.getSuggestionsProvider())); diff --git a/patches/server/1032-Fix-and-optimise-world-force-upgrading.patch b/patches/server/1032-Fix-and-optimise-world-force-upgrading.patch index d2ea2179d5..3e94098edd 100644 --- a/patches/server/1032-Fix-and-optimise-world-force-upgrading.patch +++ b/patches/server/1032-Fix-and-optimise-world-force-upgrading.patch @@ -365,10 +365,10 @@ index 249705ec1b8b692ef1d7fec34a04918afe6486bc..f6e3b745fc417354380d4a969f83aee4 return this.regionCache.getAndMoveToFirst(ChunkPos.asLong(chunkcoordintpair.getRegionX(), chunkcoordintpair.getRegionZ())); } diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 9ab9a8a41a70626ead8fce71c7e9a32e562bb722..4ebefdee4bac018da066f07155a6074ac9aaa57d 100644 +index dd546e0680496d0626972b61b0eb183b07df0e6e..05e304f9fc8d0291fa779da589bd060ef4165b49 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -1366,9 +1366,7 @@ public final class CraftServer implements Server { +@@ -1365,9 +1365,7 @@ public final class CraftServer implements Server { worlddata.checkName(name); worlddata.setModdedInfo(this.console.getServerModName(), this.console.getModdedStatus().shouldReportAsModified()); @@ -379,7 +379,7 @@ index 9ab9a8a41a70626ead8fce71c7e9a32e562bb722..4ebefdee4bac018da066f07155a6074a long j = BiomeManager.obfuscateSeed(worlddata.worldGenOptions().seed()); // Paper - use world seed List list = ImmutableList.of(new PhantomSpawner(), new PatrolSpawner(), new CatSpawner(), new VillageSiege(), new WanderingTraderSpawner(worlddata)); -@@ -1379,6 +1377,13 @@ public final class CraftServer implements Server { +@@ -1378,6 +1376,13 @@ public final class CraftServer implements Server { biomeProvider = generator.getDefaultBiomeProvider(worldInfo); } diff --git a/patches/server/1034-Properly-handle-pdc-and-custom-tags-in-ItemMeta.patch b/patches/server/1034-Properly-handle-pdc-and-custom-tags-in-ItemMeta.patch index b7399d5f48..80403b7725 100644 --- a/patches/server/1034-Properly-handle-pdc-and-custom-tags-in-ItemMeta.patch +++ b/patches/server/1034-Properly-handle-pdc-and-custom-tags-in-ItemMeta.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Properly handle pdc and custom tags in ItemMeta diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java -index 549d06b83b195c0a0207d18850b98d1e6e611460..bf0870590fcf5c502cd986047efec9f754faf9a7 100644 +index 549d06b83b195c0a0207d18850b98d1e6e611460..d70cd1f87753c0ba9ea18198906b5fba5a7d5813 100644 --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java @@ -369,6 +369,8 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta { @@ -30,8 +30,8 @@ index 549d06b83b195c0a0207d18850b98d1e6e611460..bf0870590fcf5c502cd986047efec9f7 if (this.customTag != null) { itemTag.put(CraftMetaItem.CUSTOM_DATA, CustomData.of(this.customTag)); -+ this.customTag.remove(CraftMetaItem.BUKKIT_CUSTOM_TAG.BUKKIT); -+ if (this.customTag.isEmpty()) this.customTag = null; ++ this.customTag.remove(CraftMetaItem.BUKKIT_CUSTOM_TAG.BUKKIT); // Paper - remove PDC from custom tag ++ if (this.customTag.isEmpty()) this.customTag = null; // Paper - reset custom tag if empty } } diff --git a/patches/server/1035-handle-converting-old-serialized-names-to-new-names.patch b/patches/server/1035-handle-converting-old-serialized-names-to-new-names.patch index 0f14e72527..ff357c9f58 100644 --- a/patches/server/1035-handle-converting-old-serialized-names-to-new-names.patch +++ b/patches/server/1035-handle-converting-old-serialized-names-to-new-names.patch @@ -5,7 +5,7 @@ Subject: [PATCH] handle converting old serialized names to new names diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java -index bf0870590fcf5c502cd986047efec9f754faf9a7..ee760d45c8e95c4f5a973254da7531d355aa5fee 100644 +index d70cd1f87753c0ba9ea18198906b5fba5a7d5813..5730cd7dc888e2946a57d7667e0f0e7826600f05 100644 --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java @@ -490,7 +490,7 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta { diff --git a/patches/server/1037-Deep-clone-nbt-tags-in-PDC.patch b/patches/server/1037-Deep-clone-nbt-tags-in-PDC.patch index 9e7d548220..4bcc5895e7 100644 --- a/patches/server/1037-Deep-clone-nbt-tags-in-PDC.patch +++ b/patches/server/1037-Deep-clone-nbt-tags-in-PDC.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Deep clone nbt tags in PDC diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java -index ee760d45c8e95c4f5a973254da7531d355aa5fee..9c813ebe1d9e735368006f48c72db62fdbdf96f7 100644 +index 5730cd7dc888e2946a57d7667e0f0e7826600f05..80070ddd196ec212bc45f15ea098c7148b05b2e9 100644 --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java @@ -284,7 +284,7 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta { diff --git a/patches/server/1041-Don-t-lose-removed-data-components-in-ItemMeta.patch b/patches/server/1041-Don-t-lose-removed-data-components-in-ItemMeta.patch new file mode 100644 index 0000000000..2aa999fdeb --- /dev/null +++ b/patches/server/1041-Don-t-lose-removed-data-components-in-ItemMeta.patch @@ -0,0 +1,47 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Jake Potrebic +Date: Fri, 26 Apr 2024 21:33:20 -0700 +Subject: [PATCH] Don't lose removed data components in ItemMeta + + +diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java +index 80070ddd196ec212bc45f15ea098c7148b05b2e9..94e9213414ec08794e875c23c300bfae5dcc877e 100644 +--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java ++++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java +@@ -174,6 +174,13 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta { + return this; + } + ++ // Paper start - support removing component types ++ Applicator remove(DataComponentType type) { ++ this.builder.remove(type); ++ return this; ++ } ++ // Paper end - support removing component types ++ + DataComponentPatch build() { + return this.builder.build(); + } +@@ -380,7 +387,9 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta { + + Set, Optional>> keys = tag.entrySet(); + for (Map.Entry, Optional> key : keys) { +- if (!CraftMetaItem.getHandledTags().contains(key.getKey())) { ++ if (key.getValue().isEmpty()) { ++ this.unhandledTags.remove(key.getKey()); ++ } else if (!CraftMetaItem.getHandledTags().contains(key.getKey())) { + key.getValue().ifPresentOrElse((value) -> { + this.unhandledTags.set((DataComponentType) key.getKey(), value); + }, () -> { +@@ -778,9 +787,9 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta { + } + + for (Map.Entry, Optional> e : this.unhandledTags.build().entrySet()) { +- e.getValue().ifPresent((value) -> { ++ e.getValue().ifPresentOrElse((value) -> { + itemTag.builder.set((DataComponentType) e.getKey(), value); +- }); ++ }, () -> itemTag.remove(e.getKey())); + } + + if (!this.persistentDataContainer.isEmpty()) { diff --git a/patches/server/1042-Add-experimental-improved-give-command.patch b/patches/server/1042-Add-experimental-improved-give-command.patch new file mode 100644 index 0000000000..670050a507 --- /dev/null +++ b/patches/server/1042-Add-experimental-improved-give-command.patch @@ -0,0 +1,218 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Jake Potrebic +Date: Fri, 26 Apr 2024 23:15:27 -0700 +Subject: [PATCH] Add experimental improved give command + +Supports removing data components from itemstacks + +diff --git a/src/main/java/net/minecraft/commands/arguments/item/ItemArgument.java b/src/main/java/net/minecraft/commands/arguments/item/ItemArgument.java +index d76296c6d53065aecb010d8ea682c9acd7365f17..4c3749deebb7d5c35f3977814f1d7b0307198b1e 100644 +--- a/src/main/java/net/minecraft/commands/arguments/item/ItemArgument.java ++++ b/src/main/java/net/minecraft/commands/arguments/item/ItemArgument.java +@@ -16,7 +16,12 @@ public class ItemArgument implements ArgumentType { + private final ItemParser parser; + + public ItemArgument(CommandBuildContext commandRegistryAccess) { +- this.parser = new ItemParser(commandRegistryAccess); ++ // Paper start - support component removals ++ this(commandRegistryAccess, false); ++ } ++ public ItemArgument(CommandBuildContext commandRegistryAccess, boolean allowRemovals) { ++ this.parser = new ItemParser(commandRegistryAccess, allowRemovals); ++ // Paper end - support component removals + } + + public static ItemArgument item(CommandBuildContext commandRegistryAccess) { +diff --git a/src/main/java/net/minecraft/commands/arguments/item/ItemInput.java b/src/main/java/net/minecraft/commands/arguments/item/ItemInput.java +index 3d24fbca90bc7d8bdbac1be2176555c15ae75039..94ea5f0b1913ffa03794d231a6768dd786dc9697 100644 +--- a/src/main/java/net/minecraft/commands/arguments/item/ItemInput.java ++++ b/src/main/java/net/minecraft/commands/arguments/item/ItemInput.java +@@ -25,8 +25,15 @@ public class ItemInput { + ); + private final Holder item; + private final DataComponentMap components; ++ @javax.annotation.Nullable private final net.minecraft.core.component.DataComponentPatch patch; // Paper + + public ItemInput(Holder item, DataComponentMap components) { ++ // Paper start ++ this(item, components, null); ++ } ++ public ItemInput(Holder item, DataComponentMap components, @javax.annotation.Nullable final net.minecraft.core.component.DataComponentPatch patch) { ++ this.patch = patch; ++ // Paper end + this.item = item; + this.components = components; + } +@@ -37,7 +44,13 @@ public class ItemInput { + + public ItemStack createItemStack(int amount, boolean checkOverstack) throws CommandSyntaxException { + ItemStack itemStack = new ItemStack(this.item, amount); +- itemStack.applyComponents(this.components); ++ // Paper start - support component removals ++ if (this.patch != null) { ++ itemStack.applyComponents(this.patch); ++ } else { ++ itemStack.applyComponents(this.components); ++ } ++ // Paper end - support component removals + if (checkOverstack && amount > itemStack.getMaxStackSize()) { + throw ERROR_STACK_TOO_BIG.create(this.getItemName(), itemStack.getMaxStackSize()); + } else { +diff --git a/src/main/java/net/minecraft/commands/arguments/item/ItemParser.java b/src/main/java/net/minecraft/commands/arguments/item/ItemParser.java +index 5347a96be3bfbbd2963747ba4b5f222215d80371..f306c27f3242084f2cc39393e302bbdd0b228db2 100644 +--- a/src/main/java/net/minecraft/commands/arguments/item/ItemParser.java ++++ b/src/main/java/net/minecraft/commands/arguments/item/ItemParser.java +@@ -59,8 +59,15 @@ public class ItemParser { + static final Function> SUGGEST_NOTHING = SuggestionsBuilder::buildFuture; + final HolderLookup.RegistryLookup items; + final DynamicOps registryOps; ++ final boolean allowRemoves; // Paper - support component removals + + public ItemParser(HolderLookup.Provider registriesLookup) { ++ // Paper start - support component removals ++ this(registriesLookup, false); ++ } ++ public ItemParser(HolderLookup.Provider registriesLookup, boolean allowRemoves) { ++ this.allowRemoves = allowRemoves; ++ // Paper end - support component removals + this.items = registriesLookup.lookupOrThrow(Registries.ITEM); + this.registryOps = registriesLookup.createSerializationContext(NbtOps.INSTANCE); + } +@@ -68,6 +75,7 @@ public class ItemParser { + public ItemParser.ItemResult parse(StringReader reader) throws CommandSyntaxException { + final MutableObject> mutableObject = new MutableObject<>(); + final DataComponentMap.Builder builder = DataComponentMap.builder(); ++ final net.minecraft.core.component.DataComponentPatch.Builder patchBuilder = net.minecraft.core.component.DataComponentPatch.builder(); // Paper - support component removals + this.parse(reader, new ItemParser.Visitor() { + @Override + public void visitItem(Holder item) { +@@ -77,12 +85,19 @@ public class ItemParser { + @Override + public void visitComponent(DataComponentType type, T value) { + builder.set(type, value); ++ // Paper start - support component removals ++ patchBuilder.set(type, value); ++ } ++ @Override ++ public void visitComponentRemove(final DataComponentType type) { ++ patchBuilder.remove(type); ++ // Paper end - support component removals + } + }); + Holder holder = Objects.requireNonNull(mutableObject.getValue(), "Parser gave no item"); + DataComponentMap dataComponentMap = builder.build(); + validateComponents(reader, holder, dataComponentMap); +- return new ItemParser.ItemResult(holder, dataComponentMap); ++ return new ItemParser.ItemResult(holder, dataComponentMap, this.allowRemoves ? patchBuilder.build() : null); // Paper - support component removals + } + + private static void validateComponents(StringReader reader, Holder item, DataComponentMap components) throws CommandSyntaxException { +@@ -116,7 +131,7 @@ public class ItemParser { + return suggestionsVisitor.resolveSuggestions(builder, stringReader); + } + +- public static record ItemResult(Holder item, DataComponentMap components) { ++ public static record ItemResult(Holder item, DataComponentMap components, @javax.annotation.Nullable net.minecraft.core.component.DataComponentPatch patch) { // Paper + } + + class State { +@@ -154,17 +169,28 @@ public class ItemParser { + + while (this.reader.canRead() && this.reader.peek() != ']') { + this.reader.skipWhitespace(); ++ boolean removing = ItemParser.this.allowRemoves && this.reader.canRead() && this.reader.peek() == '!'; ++ if (removing) { ++ this.reader.skip(); ++ this.visitor.visitSuggestions(builder -> this.suggestComponentAssignment(builder, false)); ++ } + DataComponentType dataComponentType = readComponentType(this.reader); + if (!set.add(dataComponentType)) { + throw ItemParser.ERROR_REPEATED_COMPONENT.create(dataComponentType); + } + ++ // Paper start - support component removals ++ if (removing) { ++ this.visitor.visitComponentRemove(dataComponentType); ++ } else { ++ // Paper end - support component removals + this.visitor.visitSuggestions(this::suggestAssignment); + this.reader.skipWhitespace(); + this.reader.expect('='); + this.visitor.visitSuggestions(ItemParser.SUGGEST_NOTHING); + this.reader.skipWhitespace(); + this.readComponent(dataComponentType); ++ } // Paper - support component removals + this.reader.skipWhitespace(); + this.visitor.visitSuggestions(this::suggestNextOrEndComponents); + if (!this.reader.canRead() || this.reader.peek() != ',') { +@@ -239,12 +265,18 @@ public class ItemParser { + } + + private CompletableFuture suggestComponentAssignment(SuggestionsBuilder builder) { ++ // Paper start - support component removals ++ return this.suggestComponentAssignment(builder, true); ++ } ++ private CompletableFuture suggestComponentAssignment(SuggestionsBuilder builder, boolean suggestRemove) { ++ if (suggestRemove) builder.suggest("!", Component.literal("Remove a data component")); ++ // Paper end - support component removals + String string = builder.getRemaining().toLowerCase(Locale.ROOT); + SharedSuggestionProvider.filterResources(BuiltInRegistries.DATA_COMPONENT_TYPE.entrySet(), string, entry -> entry.getKey().location(), entry -> { + DataComponentType dataComponentType = entry.getValue(); + if (dataComponentType.codec() != null) { + ResourceLocation resourceLocation = entry.getKey().location(); +- builder.suggest(resourceLocation.toString() + "="); ++ builder.suggest(resourceLocation.toString() + (suggestRemove ? "=" : "")); // Paper - support component removals + } + }); + return builder.buildFuture(); +@@ -270,6 +302,7 @@ public class ItemParser { + + default void visitComponent(DataComponentType type, T value) { + } ++ default void visitComponentRemove(DataComponentType type) {} // Paper + + default void visitSuggestions(Function> suggestor) { + } +diff --git a/src/main/java/net/minecraft/server/commands/GiveCommand.java b/src/main/java/net/minecraft/server/commands/GiveCommand.java +index 0d9de4c61c7b26a6ff37c12fde629161fd0c3d5a..c738bbfa73888a0caed507e02f5c113f681e5cc2 100644 +--- a/src/main/java/net/minecraft/server/commands/GiveCommand.java ++++ b/src/main/java/net/minecraft/server/commands/GiveCommand.java +@@ -34,6 +34,38 @@ public class GiveCommand { + })).then(net.minecraft.commands.Commands.argument("count", IntegerArgumentType.integer(1)).executes((commandcontext) -> { + return GiveCommand.giveItem((CommandSourceStack) commandcontext.getSource(), ItemArgument.getItem(commandcontext, "item"), EntityArgument.getPlayers(commandcontext, "targets"), IntegerArgumentType.getInteger(commandcontext, "count")); + }))))); ++ // Paper start - support component removals with a custom pgive command ++ final com.mojang.brigadier.tree.CommandNode node = net.minecraft.commands.Commands ++ .literal("pgive").requires((commandlistenerwrapper) -> commandlistenerwrapper.hasPermission(2)) ++ .then(net.minecraft.commands.Commands.argument("targets", EntityArgument.players()) ++ .then(net.minecraft.commands.Commands.argument("item", new ItemArgument(commandRegistryAccess, true)).executes((commandcontext) -> { ++ return GiveCommand.giveItem((CommandSourceStack) commandcontext.getSource(), ItemArgument.getItem(commandcontext, "item"), EntityArgument.getPlayers(commandcontext, "targets"), 1); ++ }) ++ .then(net.minecraft.commands.Commands.argument("count", IntegerArgumentType.integer(1)).executes((commandcontext) -> { ++ return GiveCommand.giveItem((CommandSourceStack) commandcontext.getSource(), ItemArgument.getItem(commandcontext, "item"), EntityArgument.getPlayers(commandcontext, "targets"), IntegerArgumentType.getInteger(commandcontext, "count")); ++ })) ++ ) ++ ).build(); ++ setClientNodes(node); ++ dispatcher.getRoot().addChild(node); ++ } ++ static void setClientNodes(com.mojang.brigadier.tree.CommandNode node) { ++ if (node instanceof com.mojang.brigadier.tree.ArgumentCommandNode argumentNode) { ++ if (argumentNode.getType() instanceof ItemArgument) { ++ node.clientNode = new com.mojang.brigadier.tree.ArgumentCommandNode<>( ++ argumentNode.getName(), ++ com.mojang.brigadier.arguments.StringArgumentType.greedyString(), ++ argumentNode.getCommand(), ++ argumentNode.getRequirement(), ++ argumentNode.getRedirect(), ++ argumentNode.getRedirectModifier(), ++ argumentNode.isFork(), ++ (ctx, builder) -> builder.buildFuture() ++ ); ++ } ++ } ++ node.getChildren().forEach(GiveCommand::setClientNodes); ++ // Paper end - support component removals with a custom pgive command + } + + private static int giveItem(CommandSourceStack source, ItemInput item, Collection targets, int count) throws CommandSyntaxException {