From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Dreeam <61569423+Dreeam-qwq@users.noreply.github.com> Date: Wed, 7 Aug 2024 18:54:01 +0800 Subject: [PATCH] Configurable unknown command message diff --git a/net/minecraft/commands/Commands.java b/net/minecraft/commands/Commands.java index fb18f69cb26132fc8c53b185454c6aadb8a5f7e5..eff6d524c8acfc62d1fcf6b5552754e794a22735 100644 --- a/net/minecraft/commands/Commands.java +++ b/net/minecraft/commands/Commands.java @@ -404,31 +404,9 @@ public class Commands { // Paper start - Add UnknownCommandEvent final net.kyori.adventure.text.TextComponent.Builder builder = net.kyori.adventure.text.Component.text(); // source.sendFailure(ComponentUtils.fromMessage(var7.getRawMessage())); - builder.color(net.kyori.adventure.text.format.NamedTextColor.RED).append(io.papermc.paper.command.brigadier.MessageComponentSerializer.message().deserialize(var7.getRawMessage())); + final net.kyori.adventure.text.TextComponent message = getUnknownCommandMessage(builder, var7, label); // Leaf - Configurable unknown command message // Paper end - Add UnknownCommandEvent - if (var7.getInput() != null && var7.getCursor() >= 0) { - int min = Math.min(var7.getInput().length(), var7.getCursor()); - MutableComponent mutableComponent = Component.empty() - .withStyle(ChatFormatting.GRAY) - .withStyle(style -> style.withClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/" + label))); // CraftBukkit // Paper - if (min > 10) { - mutableComponent.append(CommonComponents.ELLIPSIS); - } - - mutableComponent.append(var7.getInput().substring(Math.max(0, min - 10), min)); - if (min < var7.getInput().length()) { - Component component = Component.literal(var7.getInput().substring(min)).withStyle(ChatFormatting.RED, ChatFormatting.UNDERLINE); - mutableComponent.append(component); - } - - mutableComponent.append(Component.translatable("command.context.here").withStyle(ChatFormatting.RED, ChatFormatting.ITALIC)); - // Paper start - Add UnknownCommandEvent - // source.sendFailure(mutableComponent); - builder - .append(net.kyori.adventure.text.Component.newline()) - .append(io.papermc.paper.adventure.PaperAdventure.asAdventure(mutableComponent)); - } - org.bukkit.event.command.UnknownCommandEvent event = new org.bukkit.event.command.UnknownCommandEvent(source.getBukkitSender(), command, org.spigotmc.SpigotConfig.unknownCommandMessage.isEmpty() ? null : builder.build()); + org.bukkit.event.command.UnknownCommandEvent event = new org.bukkit.event.command.UnknownCommandEvent(source.getBukkitSender(), command, message); // Leaf - Configurable unknown command message org.bukkit.Bukkit.getServer().getPluginManager().callEvent(event); if (event.message() != null) { source.sendFailure(io.papermc.paper.adventure.PaperAdventure.asVanilla(event.message()), false); @@ -680,6 +658,86 @@ public class Commands { }; } + // Leaf start - Configurable unknown command message + private static net.kyori.adventure.text.TextComponent getUnknownCommandMessage( + net.kyori.adventure.text.TextComponent.Builder builder, CommandSyntaxException commandSyntaxException, String label + ) { + String rawMessage = org.dreeam.leaf.config.modules.misc.UnknownCommandMessage.unknownCommandMessage; + + if (!"default".equals(rawMessage)) { + final String input = commandSyntaxException.getInput(); + final int cursor = commandSyntaxException.getCursor(); + + if (rawMessage.contains("") && input != null && cursor >= 0) { + final int min = Math.min(input.length(), cursor); + final net.kyori.adventure.text.TextComponent.Builder detail = net.kyori.adventure.text.Component.text(); + final net.kyori.adventure.text.Component context = net.kyori.adventure.text.Component.translatable("command.context.here") + .color(net.kyori.adventure.text.format.NamedTextColor.RED) + .decorate(net.kyori.adventure.text.format.TextDecoration.ITALIC); + final net.kyori.adventure.text.event.ClickEvent event = net.kyori.adventure.text.event.ClickEvent.suggestCommand("/" + label); + + detail.color(net.kyori.adventure.text.format.NamedTextColor.GRAY); + + if (min > 10) { + detail.append(net.kyori.adventure.text.Component.text("...")); + } + + detail.append(net.kyori.adventure.text.Component.text(input.substring(Math.max(0, min - 10), min))); + if (min < input.length()) { + net.kyori.adventure.text.Component commandInput = net.kyori.adventure.text.Component.text(input.substring(min)) + .color(net.kyori.adventure.text.format.NamedTextColor.RED) + .decorate(net.kyori.adventure.text.format.TextDecoration.UNDERLINED); + + detail.append(commandInput); + } + + detail.append(context); + detail.clickEvent(event); + + builder.append(net.kyori.adventure.text.minimessage.MiniMessage.miniMessage().deserialize(rawMessage, net.kyori.adventure.text.minimessage.tag.resolver.Placeholder.component("detail", detail.build()))); + } else { + rawMessage = rawMessage.replace("", ""); + builder.append(net.kyori.adventure.text.minimessage.MiniMessage.miniMessage().deserialize(rawMessage)); + } + + return builder.build(); + } + + return getVanillaUnknownCommandMessage(builder, commandSyntaxException, label); + } + + private static net.kyori.adventure.text.TextComponent getVanillaUnknownCommandMessage( + net.kyori.adventure.text.TextComponent.Builder builder, CommandSyntaxException var7, String label + ) { + builder.color(net.kyori.adventure.text.format.NamedTextColor.RED).append(io.papermc.paper.command.brigadier.MessageComponentSerializer.message().deserialize(var7.getRawMessage())); + + if (var7.getInput() != null && var7.getCursor() >= 0) { + int min = Math.min(var7.getInput().length(), var7.getCursor()); + MutableComponent mutableComponent = Component.empty() + .withStyle(ChatFormatting.GRAY) + .withStyle(style -> style.withClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/" + label))); // CraftBukkit // Paper + if (min > 10) { + mutableComponent.append(CommonComponents.ELLIPSIS); + } + + mutableComponent.append(var7.getInput().substring(Math.max(0, min - 10), min)); + if (min < var7.getInput().length()) { + Component component = Component.literal(var7.getInput().substring(min)).withStyle(ChatFormatting.RED, ChatFormatting.UNDERLINE); + mutableComponent.append(component); + } + + mutableComponent.append(Component.translatable("command.context.here").withStyle(ChatFormatting.RED, ChatFormatting.ITALIC)); + // Paper start - Add UnknownCommandEvent + // source.sendFailure(mutableComponent); + builder + .append(net.kyori.adventure.text.Component.newline()) + .append(io.papermc.paper.adventure.PaperAdventure.asAdventure(mutableComponent)); + } + + return builder.build(); + } + // Leaf end - Configurable unknown command message + public static void validate() { CommandBuildContext commandBuildContext = createValidationContext(VanillaRegistries.createLookup()); CommandDispatcher dispatcher = new Commands(Commands.CommandSelection.ALL, commandBuildContext).getDispatcher();