From e895cbefe4e7d7ed77b73b882d32d99415371cc4 Mon Sep 17 00:00:00 2001 From: Intybyte Date: Sun, 12 Oct 2025 21:04:02 +0200 Subject: [PATCH 1/4] How did I even miss this --- .../aikar/commands/SpongeCommandIssuer.java | 21 ++++++++++++------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/sponge10/src/main/java/co/aikar/commands/SpongeCommandIssuer.java b/sponge10/src/main/java/co/aikar/commands/SpongeCommandIssuer.java index 4a650727..80f7002f 100644 --- a/sponge10/src/main/java/co/aikar/commands/SpongeCommandIssuer.java +++ b/sponge10/src/main/java/co/aikar/commands/SpongeCommandIssuer.java @@ -27,6 +27,7 @@ import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; import org.jetbrains.annotations.NotNull; import org.spongepowered.api.entity.living.player.Player; import org.spongepowered.api.entity.living.player.server.ServerPlayer; +import org.spongepowered.api.service.permission.Subject; import org.spongepowered.api.util.Identifiable; import java.nio.charset.StandardCharsets; @@ -45,11 +46,11 @@ public class SpongeCommandIssuer implements CommandIssuer { @Override public boolean isPlayer() { - return this.source instanceof Player; + return getSubject() instanceof Player; } public boolean isServerPlayer() { - return this.source instanceof ServerPlayer; + return getSubject() instanceof ServerPlayer; } @Override @@ -57,22 +58,26 @@ public class SpongeCommandIssuer implements CommandIssuer { return this.source; } + public Subject getSubject() { + return source.commandCause().subject(); + } + @Override public @NotNull UUID getUniqueId() { - if (this.source instanceof Identifiable) { - return ((Identifiable) source).uniqueId(); + if (getSubject() instanceof Identifiable) { + return ((Identifiable) getSubject()).uniqueId(); } //generate a unique id based of the name (like for the console command sender) - return UUID.nameUUIDFromBytes(source.commandCause().identifier().getBytes(StandardCharsets.UTF_8)); + return UUID.nameUUIDFromBytes(getSubject().identifier().getBytes(StandardCharsets.UTF_8)); } public Player getPlayer() { - return isPlayer() ? (Player) source : null; + return isPlayer() ? (Player) getSubject() : null; } public ServerPlayer getServerPlayer() { - return isServerPlayer() ? (ServerPlayer) source : null; + return isServerPlayer() ? (ServerPlayer) getSubject() : null; } @Override @@ -89,7 +94,7 @@ public class SpongeCommandIssuer implements CommandIssuer { @Override public boolean hasPermission(final String permission) { - return this.source.commandCause().hasPermission(permission); + return getSubject().hasPermission(permission); } @Override From 459ef7b5bb580f17d746a94158db3ad58ffed48c Mon Sep 17 00:00:00 2001 From: Intybyte Date: Tue, 14 Oct 2025 11:58:14 +0200 Subject: [PATCH 2/4] Fix command completions --- .../co/aikar/commands/SpongeRootCommand.java | 41 ++++++------------- 1 file changed, 12 insertions(+), 29 deletions(-) diff --git a/sponge10/src/main/java/co/aikar/commands/SpongeRootCommand.java b/sponge10/src/main/java/co/aikar/commands/SpongeRootCommand.java index 7a6302b2..fee7982b 100644 --- a/sponge10/src/main/java/co/aikar/commands/SpongeRootCommand.java +++ b/sponge10/src/main/java/co/aikar/commands/SpongeRootCommand.java @@ -35,12 +35,12 @@ import org.spongepowered.api.command.parameter.ArgumentReader; import java.util.ArrayList; import java.util.Arrays; -import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; +import java.util.stream.Stream; import static net.kyori.adventure.text.Component.text; @@ -105,33 +105,17 @@ public class SpongeRootCommand implements Command.Raw, RootCommand { @Override public List complete(CommandCause cause, ArgumentReader.Mutable arguments) throws CommandException { String[] args = argToStrlist(arguments); - return getTabCompletions(manager.getCommandIssuer(cause), this.name, args).stream().map(it -> new CommandCompletion() { - @Override - public String completion() { - return it; - } - @Override - public Optional tooltip() { - return Optional.empty(); - } - }).collect(Collectors.toList()); - } + System.out.println("Argument raw = \"" + arguments.input()+ "\""); + StringBuilder total = new StringBuilder(); + for (String arg : args) { + total.append("\"").append(arg).append("\" "); + } + System.out.println("Argument array = " + total); - @Override - public List getTabCompletions(CommandIssuer sender, String alias, String[] args, boolean commandsOnly, boolean isAsync) { - Set completions = new HashSet<>(); - getChildren().forEach(child -> { - if (!commandsOnly) { - completions.addAll(child.tabComplete(sender, this, args, isAsync)); - } - completions.addAll(child.getCommandsForCompletion(sender, args)); - }); - - return completions.stream() - .filter(it -> Arrays - .stream(args) - .noneMatch(it::equals)) + return getTabCompletions(manager.getCommandIssuer(cause), this.name, args) + .stream() + .map(CommandCompletion::of) .collect(Collectors.toList()); } @@ -158,8 +142,7 @@ public class SpongeRootCommand implements Command.Raw, RootCommand { } private String[] argToStrlist(ArgumentReader.Mutable arguments) { - return Arrays.stream(arguments.input().split(" ")) - .filter(string -> (!string.isEmpty())) - .toArray(String[]::new); + String input = arguments.input(); + return input.split(" ", - 1); } } From ae9a93f23a086e7c5a7ee42e2fcd9afd1decdd91 Mon Sep 17 00:00:00 2001 From: Intybyte Date: Tue, 14 Oct 2025 11:58:40 +0200 Subject: [PATCH 3/4] Hide the hours wasted crying --- .../main/java/co/aikar/commands/SpongeRootCommand.java | 8 -------- 1 file changed, 8 deletions(-) diff --git a/sponge10/src/main/java/co/aikar/commands/SpongeRootCommand.java b/sponge10/src/main/java/co/aikar/commands/SpongeRootCommand.java index fee7982b..b9c105b0 100644 --- a/sponge10/src/main/java/co/aikar/commands/SpongeRootCommand.java +++ b/sponge10/src/main/java/co/aikar/commands/SpongeRootCommand.java @@ -105,14 +105,6 @@ public class SpongeRootCommand implements Command.Raw, RootCommand { @Override public List complete(CommandCause cause, ArgumentReader.Mutable arguments) throws CommandException { String[] args = argToStrlist(arguments); - - System.out.println("Argument raw = \"" + arguments.input()+ "\""); - StringBuilder total = new StringBuilder(); - for (String arg : args) { - total.append("\"").append(arg).append("\" "); - } - System.out.println("Argument array = " + total); - return getTabCompletions(manager.getCommandIssuer(cause), this.name, args) .stream() .map(CommandCompletion::of) From 06b314ce911bf968497b06f27947d1cde8ff59df Mon Sep 17 00:00:00 2001 From: Intybyte Date: Tue, 14 Oct 2025 11:58:56 +0200 Subject: [PATCH 4/4] Import cleanup --- .../src/main/java/co/aikar/commands/SpongeRootCommand.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/sponge10/src/main/java/co/aikar/commands/SpongeRootCommand.java b/sponge10/src/main/java/co/aikar/commands/SpongeRootCommand.java index b9c105b0..b119e6b7 100644 --- a/sponge10/src/main/java/co/aikar/commands/SpongeRootCommand.java +++ b/sponge10/src/main/java/co/aikar/commands/SpongeRootCommand.java @@ -34,13 +34,9 @@ import org.spongepowered.api.command.exception.CommandException; import org.spongepowered.api.command.parameter.ArgumentReader; import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashSet; import java.util.List; import java.util.Optional; -import java.util.Set; import java.util.stream.Collectors; -import java.util.stream.Stream; import static net.kyori.adventure.text.Component.text;