mirror of
https://github.com/Samsuik/Sakura.git
synced 2025-12-30 04:09:09 +00:00
Fix sakura debug command tab completion
This commit is contained in:
@@ -66,23 +66,18 @@ public abstract class BaseMenuCommand extends BaseSubCommand {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
final Command command = SakuraCommands.getCommand(args[0]);
|
||||
final List<String> completions = new ArrayList<>();
|
||||
if (command != null && args.length > 1) {
|
||||
final String[] newArgs = Arrays.copyOfRange(args, 1, args.length);
|
||||
completions.addAll(command.tabComplete(sender, alias, newArgs));
|
||||
} else {
|
||||
for (final Command subCommand : SakuraCommands.SUB_COMMANDS) {
|
||||
final String commandName = subCommand.getName();
|
||||
if (commandName.startsWith(args[0])) {
|
||||
completions.add(commandName);
|
||||
}
|
||||
for (final Command subCommand : this.subCommands()) {
|
||||
final String commandName = subCommand.getName();
|
||||
if (commandName.startsWith(args[0])) {
|
||||
completions.add(commandName);
|
||||
}
|
||||
if (commandName.equalsIgnoreCase(args[0])) {
|
||||
final String[] newArgs = Arrays.copyOfRange(args, 1, args.length);
|
||||
return subCommand.tabComplete(sender, alias, newArgs);
|
||||
}
|
||||
}
|
||||
|
||||
final String lastArg = args[args.length - 1];
|
||||
return completions.stream()
|
||||
.filter(result -> result.startsWith(lastArg))
|
||||
.toList();
|
||||
return completions;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -42,10 +42,6 @@ public abstract class BaseSubCommand extends Command {
|
||||
return completions;
|
||||
}
|
||||
|
||||
public void sendPlayerOnlyMessage(CommandSender sender) {
|
||||
sender.sendRichMessage("<red>This command can only be ran by players");
|
||||
}
|
||||
|
||||
protected final Optional<Integer> parseInt(String[] args, int index) {
|
||||
return this.parse(args, index, Integer::parseInt);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
package me.samsuik.sakura.command;
|
||||
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jspecify.annotations.NullMarked;
|
||||
|
||||
@NullMarked
|
||||
public abstract class PlayerOnlySubCommand extends BaseSubCommand {
|
||||
public PlayerOnlySubCommand(String name) {
|
||||
super(name);
|
||||
}
|
||||
|
||||
public abstract void execute(Player player, String[] args);
|
||||
|
||||
public final void execute(CommandSender sender, String[] args) {
|
||||
if (sender instanceof Player player) {
|
||||
this.execute(player, args);
|
||||
} else {
|
||||
sender.sendRichMessage("<red>This command can only be used by players");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -7,7 +7,6 @@ import me.samsuik.sakura.player.visibility.VisibilityTypes;
|
||||
import net.minecraft.server.MinecraftServer;
|
||||
import org.bukkit.command.Command;
|
||||
import org.jspecify.annotations.NullMarked;
|
||||
import org.jspecify.annotations.Nullable;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
@@ -39,12 +38,4 @@ public final class SakuraCommands {
|
||||
server.server.getCommandMap().register(name, "sakura", command);
|
||||
});
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static Command getCommand(String name) {
|
||||
return SUB_COMMANDS.stream()
|
||||
.filter(cmd -> cmd.getName().equalsIgnoreCase(name))
|
||||
.findFirst()
|
||||
.orElse(null);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
package me.samsuik.sakura.command.subcommands;
|
||||
|
||||
import me.samsuik.sakura.command.BaseSubCommand;
|
||||
import me.samsuik.sakura.command.PlayerOnlySubCommand;
|
||||
import me.samsuik.sakura.player.visibility.VisibilityGui;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jspecify.annotations.NullMarked;
|
||||
|
||||
@NullMarked
|
||||
public final class FPSCommand extends BaseSubCommand {
|
||||
public final class FPSCommand extends PlayerOnlySubCommand {
|
||||
private final VisibilityGui visibilityGui = new VisibilityGui();
|
||||
|
||||
public FPSCommand(String name) {
|
||||
@@ -15,9 +14,7 @@ public final class FPSCommand extends BaseSubCommand {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(CommandSender sender, String[] args) {
|
||||
if (sender instanceof Player player) {
|
||||
this.visibilityGui.showTo(player);
|
||||
}
|
||||
public void execute(Player player, String[] args) {
|
||||
this.visibilityGui.showTo(player);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,19 +1,18 @@
|
||||
package me.samsuik.sakura.command.subcommands;
|
||||
|
||||
import me.samsuik.sakura.command.BaseSubCommand;
|
||||
import me.samsuik.sakura.command.PlayerOnlySubCommand;
|
||||
import me.samsuik.sakura.configuration.GlobalConfiguration;
|
||||
import me.samsuik.sakura.player.visibility.VisibilitySettings;
|
||||
import me.samsuik.sakura.player.visibility.VisibilityState;
|
||||
import me.samsuik.sakura.player.visibility.VisibilityType;
|
||||
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jspecify.annotations.NullMarked;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
@NullMarked
|
||||
public final class VisualCommand extends BaseSubCommand {
|
||||
public final class VisualCommand extends PlayerOnlySubCommand {
|
||||
private final VisibilityType type;
|
||||
|
||||
public VisualCommand(VisibilityType type, String... aliases) {
|
||||
@@ -23,11 +22,7 @@ public final class VisualCommand extends BaseSubCommand {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(CommandSender sender, String[] args) {
|
||||
if (!(sender instanceof Player player)) {
|
||||
return;
|
||||
}
|
||||
|
||||
public void execute(Player player, String[] args) {
|
||||
VisibilitySettings settings = player.getVisibility();
|
||||
VisibilityState state = settings.toggle(type);
|
||||
|
||||
|
||||
@@ -1,19 +1,19 @@
|
||||
package me.samsuik.sakura.command.subcommands.debug;
|
||||
|
||||
import me.samsuik.sakura.command.BaseSubCommand;
|
||||
import me.samsuik.sakura.command.PlayerOnlySubCommand;
|
||||
import me.samsuik.sakura.local.LocalRegion;
|
||||
import me.samsuik.sakura.local.storage.LocalStorageHandler;
|
||||
import me.samsuik.sakura.local.storage.LocalValueStorage;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jspecify.annotations.NullMarked;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
@NullMarked
|
||||
public final class DebugLocalRegions extends BaseSubCommand {
|
||||
public final class DebugLocalRegions extends PlayerOnlySubCommand {
|
||||
private static final int DEFAULT_REGION_SIZE = 16;
|
||||
|
||||
public DebugLocalRegions(String name) {
|
||||
@@ -21,9 +21,8 @@ public final class DebugLocalRegions extends BaseSubCommand {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(CommandSender sender, String[] args) {
|
||||
if (!(sender instanceof Player player)) {
|
||||
this.sendPlayerOnlyMessage(sender);
|
||||
public void execute(Player player, String[] args) {
|
||||
if (args.length == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -34,14 +33,18 @@ public final class DebugLocalRegions extends BaseSubCommand {
|
||||
final int blockZ = location.getBlockZ();
|
||||
final Optional<LocalRegion> currentRegion = storageHandler.locate(blockX, blockZ);
|
||||
|
||||
if ("create".equalsIgnoreCase(args[0])) {
|
||||
if ("create".equalsIgnoreCase(args[0]) && args.length > 1) {
|
||||
final int size = parseInt(args, 1).orElse(DEFAULT_REGION_SIZE);
|
||||
final LocalRegion region = LocalRegion.at(blockX, blockZ, size);
|
||||
storageHandler.put(region, new LocalValueStorage());
|
||||
if (currentRegion.isPresent()) {
|
||||
player.sendRichMessage("<red>regions cannot overlap");
|
||||
} else {
|
||||
storageHandler.put(region, new LocalValueStorage());
|
||||
}
|
||||
}
|
||||
|
||||
if ("get".equalsIgnoreCase(args[0])) {
|
||||
sender.sendRichMessage("<red>" + (currentRegion.isPresent() ? currentRegion.get() : "not inside of a region"));
|
||||
player.sendRichMessage("<red>" + (currentRegion.isPresent() ? currentRegion.get() : "not inside of a region"));
|
||||
}
|
||||
|
||||
if (currentRegion.isPresent()) {
|
||||
@@ -51,4 +54,9 @@ public final class DebugLocalRegions extends BaseSubCommand {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void tabComplete(List<String> list, String[] args) throws IllegalArgumentException {
|
||||
list.addAll(List.of("create", "get", "delete"));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package me.samsuik.sakura.command.subcommands.debug;
|
||||
|
||||
import me.samsuik.sakura.command.BaseSubCommand;
|
||||
import me.samsuik.sakura.command.PlayerOnlySubCommand;
|
||||
import me.samsuik.sakura.redstone.RedstoneNetwork;
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.server.level.ServerPlayer;
|
||||
@@ -8,7 +8,6 @@ import net.minecraft.world.level.Level;
|
||||
import org.bukkit.DyeColor;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.craftbukkit.entity.CraftPlayer;
|
||||
import org.bukkit.craftbukkit.util.CraftLocation;
|
||||
import org.bukkit.entity.Player;
|
||||
@@ -19,18 +18,13 @@ import java.util.Set;
|
||||
import java.util.concurrent.ThreadLocalRandom;
|
||||
|
||||
@NullMarked
|
||||
public final class DebugRedstoneCache extends BaseSubCommand {
|
||||
public final class DebugRedstoneCache extends PlayerOnlySubCommand {
|
||||
public DebugRedstoneCache(String name) {
|
||||
super(name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(CommandSender sender, String[] args) {
|
||||
if (!(sender instanceof Player player)) {
|
||||
this.sendPlayerOnlyMessage(sender);
|
||||
return;
|
||||
}
|
||||
|
||||
public void execute(Player player, String[] args) {
|
||||
ServerPlayer nmsPlayer = ((CraftPlayer) player).getHandle();
|
||||
Level level = nmsPlayer.level();
|
||||
Set<Location> locations = new HashSet<>();
|
||||
|
||||
Reference in New Issue
Block a user