diff --git a/src/main/java/kamkeel/npcs/command/CommandKamkeel.java b/src/main/java/kamkeel/npcs/command/CommandKamkeel.java index 25e099e41..4e0b26afd 100644 --- a/src/main/java/kamkeel/npcs/command/CommandKamkeel.java +++ b/src/main/java/kamkeel/npcs/command/CommandKamkeel.java @@ -15,6 +15,8 @@ import noppes.npcs.scripted.CustomNPCsException; import java.lang.reflect.Method; import java.util.*; +import static kamkeel.npcs.command.EffectCommand.getSortedEffectNames; + public class CommandKamkeel extends CommandBase{ public Map map = new HashMap(); @@ -123,6 +125,9 @@ public class CommandKamkeel extends CommandBase{ } else if (usage.equals("")) { List keys = new ArrayList<>(RequirementCheckerRegistry.getAllKeys()); return CommandBase.getListOfStringsMatchingLastWord(args, keys.toArray(new String[keys.size()])); + } else if(usage.equals("")){ + List keys = getSortedEffectNames(); + return CommandBase.getListOfStringsMatchingLastWord(args, keys.toArray(new String[keys.size()])); } } } @@ -163,5 +168,6 @@ public class CommandKamkeel extends CommandBase{ return false; } + } diff --git a/src/main/java/kamkeel/npcs/command/EffectCommand.java b/src/main/java/kamkeel/npcs/command/EffectCommand.java index 054795c44..85c9da734 100644 --- a/src/main/java/kamkeel/npcs/command/EffectCommand.java +++ b/src/main/java/kamkeel/npcs/command/EffectCommand.java @@ -8,10 +8,7 @@ import noppes.npcs.controllers.data.CustomEffect; import noppes.npcs.controllers.data.PlayerData; import noppes.npcs.scripted.event.PlayerEvent.EffectEvent.ExpirationType; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Map; +import java.util.*; import static kamkeel.npcs.util.ColorUtil.sendError; import static kamkeel.npcs.util.ColorUtil.sendResult; @@ -28,7 +25,8 @@ public class EffectCommand extends CommandKamkeelBase { return "effect"; } - @SubCommand(desc = "Lists all Effects") + // List command with pagination + @SubCommand(desc = "Lists all Effects", usage = "[page]") public void list(ICommandSender sender, String[] args) throws CommandException { CustomEffectController controller = CustomEffectController.getInstance(); if (controller.indexMapper.isEmpty()) { @@ -36,36 +34,59 @@ public class EffectCommand extends CommandKamkeelBase { return; } - sendResult(sender, "--------------------"); - - // Get all indices, sort them in ascending order. - List indices = new ArrayList<>(controller.indexMapper.keySet()); - Collections.sort(indices); - for (Integer idx : indices) { - Map effects = controller.indexMapper.get(idx); + // Flatten effects into a list + List effectsList = new ArrayList<>(); + for (Map.Entry> entry : controller.indexMapper.entrySet()) { + int idx = entry.getKey(); + Map effects = entry.getValue(); if (effects == null || effects.isEmpty()) continue; - // Sort the effect IDs in ascending order. - List effectIds = new ArrayList<>(effects.keySet()); - Collections.sort(effectIds); - for (Integer id : effectIds) { - CustomEffect effect = effects.get(id); - sendResult(sender, String.format("\u00a7b%s \u00a77(ID: %d, INDEX: %d)", - effect.getName(), - id, - idx)); + for (Map.Entry effectEntry : effects.entrySet()) { + int id = effectEntry.getKey(); + CustomEffect effect = effectEntry.getValue(); + effectsList.add(new EffectEntry(idx, id, effect)); } } + // Sort by index then by effect ID + Collections.sort(effectsList, Comparator.comparingInt((EffectEntry e) -> e.index) + .thenComparingInt(e -> e.id)); + // Determine page number + int page = 1; + if (args.length > 0) { + try { + page = Integer.parseInt(args[0]); + } catch (NumberFormatException e) { + // default to page 1 + } + } + int perPage = 10; + int total = effectsList.size(); + int totalPages = (int) Math.ceil(total / (double) perPage); + if (page < 1) page = 1; + if (page > totalPages) page = totalPages; + int startIndex = (page - 1) * perPage; + int endIndex = Math.min(startIndex + perPage, total); + + sendResult(sender, "--------------------"); + sendResult(sender, "Effects (Page " + page + "/" + totalPages + "):"); + for (int i = startIndex; i < endIndex; i++) { + EffectEntry entry = effectsList.get(i); + sendResult(sender, String.format("\u00a7b%s \u00a77(ID: %d, INDEX: %d)", + entry.effect.getName(), + entry.id, + entry.index)); + } sendResult(sender, "--------------------"); } + // Give effect by name. - // Usage: