From 3eee197fb175c9a1151bb7fe9a4dcc0bcac52ae9 Mon Sep 17 00:00:00 2001 From: EpicKnarvik97 Date: Fri, 5 Aug 2022 14:58:54 +0200 Subject: [PATCH] Lists paid signs 7 at a time, instead of all at once --- .../paidsigns/command/ListCommand.java | 38 +++++++++++++++---- .../formatting/TranslatableMessage.java | 5 +++ src/main/resources/strings.yml | 4 +- 3 files changed, 39 insertions(+), 8 deletions(-) diff --git a/src/main/java/net/knarcraft/paidsigns/command/ListCommand.java b/src/main/java/net/knarcraft/paidsigns/command/ListCommand.java index 56717f6..302ebb1 100644 --- a/src/main/java/net/knarcraft/paidsigns/command/ListCommand.java +++ b/src/main/java/net/knarcraft/paidsigns/command/ListCommand.java @@ -31,10 +31,16 @@ public class ListCommand extends TokenizedCommand { @NotNull String[] args) { super.onCommand(sender, command, label, args); if (argumentSize < 1) { - displaySigns(sender); + displaySigns(sender, 0); return true; } else if (argumentSize < 3) { - return parsePaidSignSelection(sender); + try { + int pageNumber = Integer.parseInt(arguments.get(0)) - 1; + displaySigns(sender, pageNumber); + return true; + } catch (NumberFormatException exception) { + return parsePaidSignSelection(sender); + } } return false; } @@ -42,20 +48,38 @@ public class ListCommand extends TokenizedCommand { /** * Displays all available signs * - * @param sender

The command sender to display the signs to

+ * @param sender

The command sender to display the signs to

+ * @param pageNumber

The page of the sign list to display

*/ - private void displaySigns(CommandSender sender) { + private void displaySigns(CommandSender sender, int pageNumber) { StringBuilder signs = new StringBuilder(); Set signNames = PaidSigns.getInstance().getSignManager().getAllPaidSigns().keySet(); List signNameList = new ArrayList<>(signNames); Collections.sort(signNameList); String infoFormat = Translator.getTranslatedMessage(TranslatableMessage.PAID_SIGNS_INFO_FORMAT); - for (String signName : signNameList) { + //Display up to 10 signs per page + int signsPerPage = 7; + int alreadyDisplayed = pageNumber * signsPerPage; + for (int signIndex = alreadyDisplayed; signIndex < alreadyDisplayed + signsPerPage; signIndex++) { + if (signIndex >= signNameList.size()) { + break; + } + String signName = signNameList.get(signIndex); signs.append(StringFormatter.replacePlaceholder(infoFormat, "{name}", signName)); } - sender.sendMessage(StringFormatter.replacePlaceholder(Translator.getTranslatedMessage( - TranslatableMessage.PAID_SIGNS_INFO), "{signs}", signs.toString())); + + //Display that another page exists, if necessary + boolean hasNextPage = alreadyDisplayed + signsPerPage < signNameList.size(); + String nextPagePrompt = ""; + if (hasNextPage) { + nextPagePrompt = StringFormatter.replacePlaceholder(Translator.getTranslatedMessage( + TranslatableMessage.PAID_SIGNS_NEXT_PROMPT), "{nextPage}", String.valueOf((pageNumber + 2))); + } + + sender.sendMessage(StringFormatter.replacePlaceholders(Translator.getTranslatedMessage( + TranslatableMessage.PAID_SIGNS_INFO), new String[]{"{signs}", "{nextPagePrompt}"}, + new String[]{signs.toString(), nextPagePrompt})); } /** diff --git a/src/main/java/net/knarcraft/paidsigns/formatting/TranslatableMessage.java b/src/main/java/net/knarcraft/paidsigns/formatting/TranslatableMessage.java index 0be698b..21224ad 100644 --- a/src/main/java/net/knarcraft/paidsigns/formatting/TranslatableMessage.java +++ b/src/main/java/net/knarcraft/paidsigns/formatting/TranslatableMessage.java @@ -65,6 +65,11 @@ public enum TranslatableMessage { */ PAID_SIGNS_INFO_FORMAT, + /** + * The prompt displayed when the paid sign list has more items + */ + PAID_SIGNS_NEXT_PROMPT, + /** * The info text used to display information about a paid sign */ diff --git a/src/main/resources/strings.yml b/src/main/resources/strings.yml index f13638d..9f63661 100644 --- a/src/main/resources/strings.yml +++ b/src/main/resources/strings.yml @@ -11,10 +11,12 @@ en: SUCCESS_REFUNDED: "&bYou were refunded &3{cost} {unit} &bfor your broken sign" PAID_SIGNS_INFO: | &f---&3Paid signs&f--- - {signs} + {signs}{nextPagePrompt} &f----------- PAID_SIGNS_INFO_FORMAT: | &f| &b{name} + PAID_SIGNS_NEXT_PROMPT: | + &f| &3Use /lps {nextPage} to see more PAID_SIGN_INFO: | &f---&3Paid sign&f--- &f| &bName: &3{name}