From 5eab950048cdc3b177b51244159f1a5ceaf8dc8a Mon Sep 17 00:00:00 2001 From: EpicKnarvik97 Date: Wed, 3 Sep 2025 03:24:04 +0200 Subject: [PATCH] Cleans the addTitlePage command a bit --- .../command/CommandAddTitlePage.java | 46 +++++++++++-------- .../command/CommandClear.java | 4 +- .../command/CommandCopy.java | 4 +- .../command/CommandDecrypt.java | 4 +- .../command/CommandEncrypt.java | 4 +- .../command/CommandSetAuthor.java | 4 +- .../command/CommandSetGeneration.java | 4 +- .../command/CommandUnSign.java | 4 +- .../utility/InventoryUtil.java | 16 +++---- 9 files changed, 50 insertions(+), 40 deletions(-) diff --git a/src/main/java/net/knarcraft/bookswithoutborders/command/CommandAddTitlePage.java b/src/main/java/net/knarcraft/bookswithoutborders/command/CommandAddTitlePage.java index 11ac443..e693630 100644 --- a/src/main/java/net/knarcraft/bookswithoutborders/command/CommandAddTitlePage.java +++ b/src/main/java/net/knarcraft/bookswithoutborders/command/CommandAddTitlePage.java @@ -33,21 +33,20 @@ public class CommandAddTitlePage implements TabExecutor { return false; } - + // Note: There are two different book checks as an book is accepted normally, but a written book is required for + // adding an author title page at the beginning. ItemStack heldBook = InventoryUtil.getHeldBook(player); if (heldBook == null) { new FormatBuilder(Translatable.ERROR_NOT_HOLDING_ANY_BOOK).error(sender); - return false; + return true; } int index; if (arguments.length < 1) { - String noBookError = new FormatBuilder(Translatable.ERROR_NOT_HOLDING_WRITTEN_BOOK).replace("{action}", - Translatable.ACTION_ADD_TITLE_AUTHOR_PAGE).build(); - String twoBooksError = new FormatBuilder(Translatable.ERROR_ONLY_ONE_BOOK).replace("{action}", - Translatable.ACTION_ADD_TITLE_AUTHOR_PAGE).build(); - if (InventoryUtil.notHoldingOneWrittenBookCheck(player, noBookError, twoBooksError)) { - return false; + if (InventoryUtil.notHoldingOneWrittenBookCheck(player, + new FormatBuilder(Translatable.ERROR_NOT_HOLDING_WRITTEN_BOOK).replace("{action}", Translatable.ACTION_ADD_TITLE_AUTHOR_PAGE), + new FormatBuilder(Translatable.ERROR_ONLY_ONE_BOOK).replace("{action}", Translatable.ACTION_ADD_TITLE_AUTHOR_PAGE))) { + return true; } index = 0; @@ -61,7 +60,6 @@ public class CommandAddTitlePage implements TabExecutor { } String title = null; - if (arguments.length > 1) { // Get all arguments as a space-separated string StringBuilder builder = new StringBuilder(arguments[1]); @@ -74,15 +72,29 @@ public class CommandAddTitlePage implements TabExecutor { BookMeta bookMeta = (BookMeta) heldBook.getItemMeta(); if (bookMeta == null) { new FormatBuilder(Translatable.ERROR_METADATA_MISSING).error(sender); - return false; + return true; } - List pages = new ArrayList<>(bookMeta.getPages()); - if (index < 0) { new FormatBuilder(Translatable.ERROR_INVALID_BOOK_PAGE).error(sender); return false; } + addBookPage(heldBook, bookMeta, index, title); + new FormatBuilder(Translatable.SUCCESS_TITLE_PAGE_ADDED).success(sender); + return true; + } + + /** + * Adds the specified book page + * + * @param heldBook

The book to update

+ * @param bookMeta

The metadata of the book to alter

+ * @param index

The index to add the page at

+ * @param title

The title of the new page

+ */ + private void addBookPage(@NotNull ItemStack heldBook, @NotNull BookMeta bookMeta, int index, + @Nullable String title) { + List pages = new ArrayList<>(bookMeta.getPages()); if (title == null && heldBook.getType() == Material.WRITTEN_BOOK) { // Add a page with the book title and book author String loreSeparator = BooksWithoutBorders.getConfiguration().getLoreSeparator(); @@ -113,8 +125,6 @@ public class CommandAddTitlePage implements TabExecutor { } bookMeta.setPages(pages); heldBook.setItemMeta(bookMeta); - new FormatBuilder(Translatable.SUCCESS_TITLE_PAGE_ADDED).success(sender); - return true; } /** @@ -123,16 +133,16 @@ public class CommandAddTitlePage implements TabExecutor { * @param input

The input to format

* @return

The formatted input

*/ + @NotNull private String formatTitle(@NotNull String input) { String loreSeparator = BooksWithoutBorders.getConfiguration().getLoreSeparator(); if (input.contains(loreSeparator)) { String[] parts = input.split(loreSeparator); - StringBuilder output = new StringBuilder(); - output.append(new FormatBuilder(Formatting.NEUTRAL_TITLE_PAGE_HEADER_FORMAT).replace("{header}", parts[0]).color().build()); + FormatBuilder builder = new FormatBuilder(Formatting.NEUTRAL_TITLE_PAGE_HEADER_FORMAT).replace("{header}", parts[0]); for (int i = 1; i < parts.length; i++) { - output.append(new FormatBuilder(Formatting.NEUTRAL_TITLE_PAGE_TEXT_FORMAT).replace("{text}", parts[i]).color().build()); + builder.append(Formatting.NEUTRAL_TITLE_PAGE_TEXT_FORMAT).replace("{text}", parts[i]); } - return output.toString(); + return builder.color().build(); } else { return new FormatBuilder(Formatting.NEUTRAL_TITLE_PAGE_HEADER_FORMAT).replace("{header}", input).color().build(); } diff --git a/src/main/java/net/knarcraft/bookswithoutborders/command/CommandClear.java b/src/main/java/net/knarcraft/bookswithoutborders/command/CommandClear.java index a354115..99486dc 100644 --- a/src/main/java/net/knarcraft/bookswithoutborders/command/CommandClear.java +++ b/src/main/java/net/knarcraft/bookswithoutborders/command/CommandClear.java @@ -31,8 +31,8 @@ public class CommandClear implements TabExecutor { } if (InventoryUtil.notHoldingOneWritableBookCheck(player, - new FormatBuilder(Translatable.ERROR_NOT_HOLDING_WRITABLE_BOOK).replace("{action}", Translatable.ACTION_CLEAR).build(), - new FormatBuilder(Translatable.ERROR_ONLY_ONE_BOOK).replace("{action}", Translatable.ACTION_CLEAR).build())) { + new FormatBuilder(Translatable.ERROR_NOT_HOLDING_WRITABLE_BOOK).replace("{action}", Translatable.ACTION_CLEAR), + new FormatBuilder(Translatable.ERROR_ONLY_ONE_BOOK).replace("{action}", Translatable.ACTION_CLEAR))) { return false; } diff --git a/src/main/java/net/knarcraft/bookswithoutborders/command/CommandCopy.java b/src/main/java/net/knarcraft/bookswithoutborders/command/CommandCopy.java index d2d223b..5a49b63 100644 --- a/src/main/java/net/knarcraft/bookswithoutborders/command/CommandCopy.java +++ b/src/main/java/net/knarcraft/bookswithoutborders/command/CommandCopy.java @@ -36,8 +36,8 @@ public class CommandCopy implements TabExecutor { } if (InventoryUtil.notHoldingOneWrittenBookCheck(player, - new FormatBuilder(Translatable.ERROR_NOT_HOLDING_WRITTEN_BOOK).replace("{action}", Translatable.ACTION_COPY).build(), - new FormatBuilder(Translatable.ERROR_ONLY_ONE_BOOK).replace("{action}", Translatable.ACTION_COPY).build())) { + new FormatBuilder(Translatable.ERROR_NOT_HOLDING_WRITTEN_BOOK).replace("{action}", Translatable.ACTION_COPY), + new FormatBuilder(Translatable.ERROR_ONLY_ONE_BOOK).replace("{action}", Translatable.ACTION_COPY))) { return false; } diff --git a/src/main/java/net/knarcraft/bookswithoutborders/command/CommandDecrypt.java b/src/main/java/net/knarcraft/bookswithoutborders/command/CommandDecrypt.java index 4b84182..21ac340 100644 --- a/src/main/java/net/knarcraft/bookswithoutborders/command/CommandDecrypt.java +++ b/src/main/java/net/knarcraft/bookswithoutborders/command/CommandDecrypt.java @@ -34,8 +34,8 @@ public class CommandDecrypt implements TabExecutor { } if (InventoryUtil.notHoldingOneWrittenBookCheck(player, - new FormatBuilder(Translatable.ERROR_NOT_HOLDING_WRITTEN_BOOK).replace("{action}", Translatable.ACTION_DECRYPT).build(), - new FormatBuilder(Translatable.ERROR_ONLY_ONE_BOOK).replace("{action}", Translatable.ACTION_DECRYPT).build())) { + new FormatBuilder(Translatable.ERROR_NOT_HOLDING_WRITTEN_BOOK).replace("{action}", Translatable.ACTION_DECRYPT), + new FormatBuilder(Translatable.ERROR_ONLY_ONE_BOOK).replace("{action}", Translatable.ACTION_DECRYPT))) { return false; } diff --git a/src/main/java/net/knarcraft/bookswithoutborders/command/CommandEncrypt.java b/src/main/java/net/knarcraft/bookswithoutborders/command/CommandEncrypt.java index b8a237b..63ddaa9 100644 --- a/src/main/java/net/knarcraft/bookswithoutborders/command/CommandEncrypt.java +++ b/src/main/java/net/knarcraft/bookswithoutborders/command/CommandEncrypt.java @@ -69,8 +69,8 @@ public class CommandEncrypt implements TabExecutor { } if (InventoryUtil.notHoldingOneWrittenBookCheck(player, - new FormatBuilder(Translatable.ERROR_NOT_HOLDING_WRITTEN_BOOK).replace("{action}", Translatable.ACTION_ENCRYPT).build(), - new FormatBuilder(Translatable.ERROR_ONLY_ONE_BOOK).replace("{action}", Translatable.ACTION_ENCRYPT).build())) { + new FormatBuilder(Translatable.ERROR_NOT_HOLDING_WRITTEN_BOOK).replace("{action}", Translatable.ACTION_ENCRYPT), + new FormatBuilder(Translatable.ERROR_ONLY_ONE_BOOK).replace("{action}", Translatable.ACTION_ENCRYPT))) { return null; } diff --git a/src/main/java/net/knarcraft/bookswithoutborders/command/CommandSetAuthor.java b/src/main/java/net/knarcraft/bookswithoutborders/command/CommandSetAuthor.java index ba83281..890c60a 100644 --- a/src/main/java/net/knarcraft/bookswithoutborders/command/CommandSetAuthor.java +++ b/src/main/java/net/knarcraft/bookswithoutborders/command/CommandSetAuthor.java @@ -38,8 +38,8 @@ public class CommandSetAuthor implements TabExecutor { } if (InventoryUtil.notHoldingOneWrittenBookCheck(player, - new FormatBuilder(Translatable.ERROR_NOT_HOLDING_WRITTEN_BOOK).replace("{action}", Translatable.ACTION_SET_AUTHOR).build(), - new FormatBuilder(Translatable.ERROR_ONLY_ONE_BOOK).replace("{action}", Translatable.ACTION_SET_AUTHOR).build())) { + new FormatBuilder(Translatable.ERROR_NOT_HOLDING_WRITTEN_BOOK).replace("{action}", Translatable.ACTION_SET_AUTHOR), + new FormatBuilder(Translatable.ERROR_ONLY_ONE_BOOK).replace("{action}", Translatable.ACTION_SET_AUTHOR))) { return false; } diff --git a/src/main/java/net/knarcraft/bookswithoutborders/command/CommandSetGeneration.java b/src/main/java/net/knarcraft/bookswithoutborders/command/CommandSetGeneration.java index d0e6581..aae61af 100644 --- a/src/main/java/net/knarcraft/bookswithoutborders/command/CommandSetGeneration.java +++ b/src/main/java/net/knarcraft/bookswithoutborders/command/CommandSetGeneration.java @@ -29,8 +29,8 @@ public class CommandSetGeneration implements TabExecutor { } if (InventoryUtil.notHoldingOneWrittenBookCheck(player, - new FormatBuilder(Translatable.ERROR_NOT_HOLDING_WRITTEN_BOOK).replace("{action}", Translatable.ACTION_CHANGE_GENERATION).build(), - new FormatBuilder(Translatable.ERROR_ONLY_ONE_BOOK).replace("{action}", Translatable.ACTION_CHANGE_GENERATION).build())) { + new FormatBuilder(Translatable.ERROR_NOT_HOLDING_WRITTEN_BOOK).replace("{action}", Translatable.ACTION_CHANGE_GENERATION), + new FormatBuilder(Translatable.ERROR_ONLY_ONE_BOOK).replace("{action}", Translatable.ACTION_CHANGE_GENERATION))) { return false; } diff --git a/src/main/java/net/knarcraft/bookswithoutborders/command/CommandUnSign.java b/src/main/java/net/knarcraft/bookswithoutborders/command/CommandUnSign.java index cb94598..7e3f8f1 100644 --- a/src/main/java/net/knarcraft/bookswithoutborders/command/CommandUnSign.java +++ b/src/main/java/net/knarcraft/bookswithoutborders/command/CommandUnSign.java @@ -34,8 +34,8 @@ public class CommandUnSign implements TabExecutor { } if (InventoryUtil.notHoldingOneWrittenBookCheck(player, - new FormatBuilder(Translatable.ERROR_NOT_HOLDING_WRITTEN_BOOK).replace("{action}", Translatable.ACTION_UNSIGN).build(), - new FormatBuilder(Translatable.ERROR_ONLY_ONE_BOOK).replace("{action}", Translatable.ACTION_UNSIGN).build())) { + new FormatBuilder(Translatable.ERROR_NOT_HOLDING_WRITTEN_BOOK).replace("{action}", Translatable.ACTION_UNSIGN), + new FormatBuilder(Translatable.ERROR_ONLY_ONE_BOOK).replace("{action}", Translatable.ACTION_UNSIGN))) { return false; } diff --git a/src/main/java/net/knarcraft/bookswithoutborders/utility/InventoryUtil.java b/src/main/java/net/knarcraft/bookswithoutborders/utility/InventoryUtil.java index fe57aab..8c0a078 100644 --- a/src/main/java/net/knarcraft/bookswithoutborders/utility/InventoryUtil.java +++ b/src/main/java/net/knarcraft/bookswithoutborders/utility/InventoryUtil.java @@ -77,18 +77,18 @@ public final class InventoryUtil { * @param twoBooksMessage

The message to display if the player is holding one book in each hand

* @return

False if the player is holding exactly one book

*/ - public static boolean notHoldingOneWritableBookCheck(@NotNull Player player, @NotNull String noBookMessage, - @NotNull String twoBooksMessage) { + public static boolean notHoldingOneWritableBookCheck(@NotNull Player player, @NotNull FormatBuilder noBookMessage, + @NotNull FormatBuilder twoBooksMessage) { BookHoldingState holdingState = getBookHoldingState(player); if (holdingState == BookHoldingState.NONE || holdingState == BookHoldingState.SIGNED_BOTH_HANDS || holdingState == BookHoldingState.SIGNED_MAIN_HAND || holdingState == BookHoldingState.SIGNED_OFF_HAND) { - new FormatBuilder(noBookMessage).error(player); + noBookMessage.error(player); return true; } if (holdingState == BookHoldingState.UNSIGNED_BOTH_HANDS) { - new FormatBuilder(twoBooksMessage).error(player); + twoBooksMessage.error(player); return true; } @@ -103,18 +103,18 @@ public final class InventoryUtil { * @param twoBooksMessage

The message to display if the player is holding one book in each hand

* @return

False if the player is holding exactly one book

*/ - public static boolean notHoldingOneWrittenBookCheck(@NotNull Player player, @NotNull String noBookMessage, - @NotNull String twoBooksMessage) { + public static boolean notHoldingOneWrittenBookCheck(@NotNull Player player, @NotNull FormatBuilder noBookMessage, + @NotNull FormatBuilder twoBooksMessage) { BookHoldingState holdingState = getBookHoldingState(player); if (holdingState == BookHoldingState.NONE || holdingState == BookHoldingState.UNSIGNED_BOTH_HANDS || holdingState == BookHoldingState.UNSIGNED_MAIN_HAND || holdingState == BookHoldingState.UNSIGNED_OFF_HAND) { - new FormatBuilder(noBookMessage).error(player); + noBookMessage.error(player); return true; } if (holdingState == BookHoldingState.SIGNED_BOTH_HANDS) { - new FormatBuilder(twoBooksMessage).error(player); + twoBooksMessage.error(player); return true; }