diff --git a/src/main/java/net/knarcraft/bookswithoutborders/command/CommandDelete.java b/src/main/java/net/knarcraft/bookswithoutborders/command/CommandDelete.java index 834e134..1a04616 100644 --- a/src/main/java/net/knarcraft/bookswithoutborders/command/CommandDelete.java +++ b/src/main/java/net/knarcraft/bookswithoutborders/command/CommandDelete.java @@ -1,7 +1,6 @@ package net.knarcraft.bookswithoutborders.command; import net.knarcraft.bookswithoutborders.BooksWithoutBorders; -import net.knarcraft.bookswithoutborders.config.BwBCommand; import net.knarcraft.bookswithoutborders.config.Translatable; import net.knarcraft.bookswithoutborders.gui.PagedBookIndex; import net.knarcraft.bookswithoutborders.state.BookDirectory; @@ -33,7 +32,7 @@ public class CommandDelete implements TabExecutor { return false; } - return deleteBook(sender, arguments, false); + return deleteBook(sender, arguments, false, label); } /** @@ -42,12 +41,12 @@ public class CommandDelete implements TabExecutor { * @param sender
The sender trying to delete the book
* @param argumentsThe arguments given
* @param deletePublicWhether to delete a public book
+ * @param commandNameThe name of the command calling this method
* @returnTrue if the book was deleted successfully
*/ - protected boolean deleteBook(@NotNull CommandSender sender, @NotNull String[] arguments, boolean deletePublic) { - String command = deletePublic ? BwBCommand.DELETE_PUBLIC_BOOK.toString().toLowerCase() : - BwBCommand.DELETE_BOOK.toString().toLowerCase(); - if (PagedBookIndex.displayPage(arguments, sender, deletePublic, command)) { + protected boolean deleteBook(@NotNull CommandSender sender, @NotNull String[] arguments, boolean deletePublic, + @NotNull String commandName) { + if (PagedBookIndex.displayPage(arguments, sender, deletePublic, commandName)) { return true; } diff --git a/src/main/java/net/knarcraft/bookswithoutborders/command/CommandDeletePublic.java b/src/main/java/net/knarcraft/bookswithoutborders/command/CommandDeletePublic.java index 3119cd1..2346699 100644 --- a/src/main/java/net/knarcraft/bookswithoutborders/command/CommandDeletePublic.java +++ b/src/main/java/net/knarcraft/bookswithoutborders/command/CommandDeletePublic.java @@ -15,7 +15,7 @@ public class CommandDeletePublic extends CommandDelete implements TabExecutor { @Override public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] arguments) { - return deleteBook(sender, arguments, true); + return deleteBook(sender, arguments, true, label); } @Override diff --git a/src/main/java/net/knarcraft/bookswithoutborders/command/CommandGive.java b/src/main/java/net/knarcraft/bookswithoutborders/command/CommandGive.java index 9b97915..ed28450 100644 --- a/src/main/java/net/knarcraft/bookswithoutborders/command/CommandGive.java +++ b/src/main/java/net/knarcraft/bookswithoutborders/command/CommandGive.java @@ -36,22 +36,22 @@ public class CommandGive implements TabExecutor { return false; } - return giveBook(sender, arguments, false, "player"); + return giveBook(sender, arguments, false, "player", label); } /** * Gives a book to another player * - * @param senderThe sender trying to give a book
- * @param argumentsThe arguments given
- * @param givePublicWhether to give a public book
- * @param folderThe folder containing the book to load
+ * @param senderThe sender trying to give a book
+ * @param argumentsThe arguments given
+ * @param givePublicWhether to give a public book
+ * @param folderThe folder containing the book to load
+ * @param commandNameThe name of the command calling this method
* @returnTrue if the book was given successfully
*/ boolean giveBook(@NotNull CommandSender sender, @NotNull String[] arguments, boolean givePublic, - @NotNull String folder) { - String command = givePublic ? "givepublicbook" : "givebook"; - if (PagedBookIndex.displayPage(arguments, sender, givePublic, command)) { + @NotNull String folder, @NotNull String commandName) { + if (PagedBookIndex.displayPage(arguments, sender, givePublic, commandName)) { return true; } diff --git a/src/main/java/net/knarcraft/bookswithoutborders/command/CommandGivePublic.java b/src/main/java/net/knarcraft/bookswithoutborders/command/CommandGivePublic.java index 0eaff68..43629cd 100644 --- a/src/main/java/net/knarcraft/bookswithoutborders/command/CommandGivePublic.java +++ b/src/main/java/net/knarcraft/bookswithoutborders/command/CommandGivePublic.java @@ -16,7 +16,7 @@ public class CommandGivePublic extends CommandGive implements TabExecutor { @Override public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] arguments) { - return giveBook(sender, arguments, true, "public"); + return giveBook(sender, arguments, true, "public", label); } @Override diff --git a/src/main/java/net/knarcraft/bookswithoutborders/command/CommandLoad.java b/src/main/java/net/knarcraft/bookswithoutborders/command/CommandLoad.java index 703270f..80d76ac 100644 --- a/src/main/java/net/knarcraft/bookswithoutborders/command/CommandLoad.java +++ b/src/main/java/net/knarcraft/bookswithoutborders/command/CommandLoad.java @@ -26,20 +26,21 @@ public class CommandLoad implements TabExecutor { @Override public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] arguments) { - return loadBook(sender, arguments, "player", false); + return loadBook(sender, arguments, "player", false, label); } /** * Loads a stored book * - * @param senderThe sender asking to load the book
- * @param argumentsThe arguments given
- * @param directoryThe directory to load from (public/player)
- * @param loadPublicWhether to list public files as loadable
+ * @param senderThe sender asking to load the book
+ * @param argumentsThe arguments given
+ * @param directoryThe directory to load from (public/player)
+ * @param loadPublicWhether to list public files as loadable
+ * @param commandNameThe name of the command calling this method
* @returnTrue if the book was loaded successfully
*/ public boolean loadBook(@NotNull CommandSender sender, @NotNull String[] arguments, @NotNull String directory, - boolean loadPublic) { + boolean loadPublic, @NotNull String commandName) { StringFormatter stringFormatter = BooksWithoutBorders.getStringFormatter(); if (!(sender instanceof Player player)) { stringFormatter.displayErrorMessage(sender, Translatable.ERROR_PLAYER_ONLY); @@ -53,8 +54,7 @@ public class CommandLoad implements TabExecutor { int argumentCount = arguments.length; - String command = loadPublic ? "loadpublicbook" : "loadbook"; - if (PagedBookIndex.displayPage(arguments, sender, loadPublic, command)) { + if (PagedBookIndex.displayPage(arguments, sender, loadPublic, commandName)) { return true; } diff --git a/src/main/java/net/knarcraft/bookswithoutborders/command/CommandLoadPublic.java b/src/main/java/net/knarcraft/bookswithoutborders/command/CommandLoadPublic.java index 87f1572..1d27b57 100644 --- a/src/main/java/net/knarcraft/bookswithoutborders/command/CommandLoadPublic.java +++ b/src/main/java/net/knarcraft/bookswithoutborders/command/CommandLoadPublic.java @@ -15,7 +15,7 @@ public class CommandLoadPublic extends CommandLoad implements CommandExecutor { @Override public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] arguments) { - return loadBook(sender, arguments, "public", true); + return loadBook(sender, arguments, "public", true, label); } @Override diff --git a/src/main/java/net/knarcraft/bookswithoutborders/command/CommandSave.java b/src/main/java/net/knarcraft/bookswithoutborders/command/CommandSave.java index 2b9312a..60f3a56 100644 --- a/src/main/java/net/knarcraft/bookswithoutborders/command/CommandSave.java +++ b/src/main/java/net/knarcraft/bookswithoutborders/command/CommandSave.java @@ -176,7 +176,8 @@ public class CommandSave implements TabExecutor { String fullCommand = "/" + command + " true"; - boolean isUnnamed = fileName.contains("Untitled" + separator); + boolean isUnnamed = fileName.contains(stringFormatter.getUnFormattedColoredMessage( + Translatable.NEUTRAL_UNKNOWN_TITLE) + separator); // Skip duplicate unnamed book saving if (!isUnnamed && !overwrite) { diff --git a/src/main/java/net/knarcraft/bookswithoutborders/command/CommandSetAuthor.java b/src/main/java/net/knarcraft/bookswithoutborders/command/CommandSetAuthor.java index e6fe3cb..1d2c19d 100644 --- a/src/main/java/net/knarcraft/bookswithoutborders/command/CommandSetAuthor.java +++ b/src/main/java/net/knarcraft/bookswithoutborders/command/CommandSetAuthor.java @@ -1,8 +1,10 @@ package net.knarcraft.bookswithoutborders.command; import net.knarcraft.bookswithoutborders.BooksWithoutBorders; +import net.knarcraft.bookswithoutborders.config.Translatable; import net.knarcraft.bookswithoutborders.state.ItemSlot; import net.knarcraft.bookswithoutborders.utility.InventoryHelper; +import net.knarcraft.knarlib.formatting.StringFormatter; import net.knarcraft.knarlib.property.ColorConversion; import net.knarcraft.knarlib.util.ColorHelper; import org.bukkit.command.Command; @@ -25,19 +27,22 @@ public class CommandSetAuthor implements TabExecutor { @Override public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] arguments) { + StringFormatter stringFormatter = BooksWithoutBorders.getStringFormatter(); if (!(sender instanceof Player player)) { - BooksWithoutBorders.sendErrorMessage(sender, "This command can only be used by a player!"); + stringFormatter.displayErrorMessage(sender, Translatable.ERROR_PLAYER_ONLY); return false; } if (arguments.length < 1) { - BooksWithoutBorders.sendErrorMessage(player, "Too few command arguments!"); + stringFormatter.displayErrorMessage(player, Translatable.ERROR_AUTHOR_BLANK); return false; } if (InventoryHelper.notHoldingOneWrittenBookCheck(player, - "You must be holding a written book to set author!", "You cannot set the " + - "author of two books at once!")) { + stringFormatter.replacePlaceholder(Translatable.ERROR_NOT_HOLDING_WRITTEN_BOOK, "{action}", + stringFormatter.getUnFormattedColoredMessage(Translatable.ACTION_SET_AUTHOR)), + stringFormatter.replacePlaceholder(Translatable.ERROR_ONLY_ONE_BOOK, "{action}", + stringFormatter.getUnFormattedColoredMessage(Translatable.ACTION_SET_AUTHOR)))) { return false; } @@ -46,14 +51,15 @@ public class CommandSetAuthor implements TabExecutor { ItemStack heldBook = InventoryHelper.getHeldItem(player, mainHand); BookMeta bookMetaData = InventoryHelper.getHeldBookMetadata(player, mainHand); if (bookMetaData == null) { - BooksWithoutBorders.sendErrorMessage(player, "Unable to get metadata for the held book!"); + stringFormatter.displayErrorMessage(sender, Translatable.ERROR_METADATA_MISSING); return false; } String author = ColorHelper.translateColorCodes(String.join(" ", arguments), ColorConversion.RGB); bookMetaData.setAuthor(author); heldBook.setItemMeta(bookMetaData); - BooksWithoutBorders.sendSuccessMessage(player, "Book author set to " + author + "!"); + stringFormatter.displaySuccessMessage(player, stringFormatter.replacePlaceholder(Translatable.SUCCESS_SET_AUTHOR, + "{author}", author)); return true; } diff --git a/src/main/java/net/knarcraft/bookswithoutborders/command/CommandSetBookPrice.java b/src/main/java/net/knarcraft/bookswithoutborders/command/CommandSetBookPrice.java index 1d0c0c8..edacd44 100644 --- a/src/main/java/net/knarcraft/bookswithoutborders/command/CommandSetBookPrice.java +++ b/src/main/java/net/knarcraft/bookswithoutborders/command/CommandSetBookPrice.java @@ -2,10 +2,13 @@ package net.knarcraft.bookswithoutborders.command; import net.knarcraft.bookswithoutborders.BooksWithoutBorders; import net.knarcraft.bookswithoutborders.config.BwBConfig; +import net.knarcraft.bookswithoutborders.config.ConfigOption; import net.knarcraft.bookswithoutborders.config.StaticMessage; +import net.knarcraft.bookswithoutborders.config.Translatable; import net.knarcraft.bookswithoutborders.manager.EconomyManager; import net.knarcraft.bookswithoutborders.utility.InventoryHelper; import net.knarcraft.bookswithoutborders.utility.TabCompletionTypeHelper; +import net.knarcraft.knarlib.formatting.StringFormatter; import net.knarcraft.knarlib.util.TabCompletionHelper; import org.bukkit.Material; import org.bukkit.command.Command; @@ -29,6 +32,7 @@ public class CommandSetBookPrice implements TabExecutor { @Override public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] arguments) { + StringFormatter stringFormatter = BooksWithoutBorders.getStringFormatter(); //Clear the current price if (arguments.length == 0) { clearItemPrice(sender); @@ -37,32 +41,30 @@ public class CommandSetBookPrice implements TabExecutor { //Warn about missing arguments if (arguments.length < 2) { - BooksWithoutBorders.sendErrorMessage(sender, "[Item/Eco] and [quantity] must be specified!"); - return false; - } - - //Warn about invalid argument - if (!arguments[0].equalsIgnoreCase("Item") && !arguments[0].equalsIgnoreCase("Eco")) { - BooksWithoutBorders.sendErrorMessage(sender, "Price type must be \"Item\" or \"Eco\"!"); + stringFormatter.displayErrorMessage(sender, Translatable.ERROR_COST_NOT_SPECIFIED); return false; } + double price; try { - double price = Double.parseDouble(arguments[1]); + price = Double.parseDouble(arguments[1]); if (price <= 0) { - BooksWithoutBorders.sendErrorMessage(sender, "[quantity] must be greater than 0!"); + stringFormatter.displayErrorMessage(sender, Translatable.ERROR_COST_INVALID_QUANTITY); return false; } - - if (arguments[0].equalsIgnoreCase("Item")) { - return setItemPrice(sender, price); - } else if (arguments[0].equalsIgnoreCase("Eco")) { - return setEconomyPrice(sender, price); - } } catch (NumberFormatException e) { - BooksWithoutBorders.sendErrorMessage(sender, "[quantity] must be a number!"); + stringFormatter.displayErrorMessage(sender, Translatable.ERROR_COST_INVALID_QUANTITY); + return false; } - return false; + + return switch (arguments[0].toLowerCase()) { + case "item" -> setItemPrice(sender, price); + case "economy" -> setEconomyPrice(sender, price); + default -> { + stringFormatter.displayErrorMessage(sender, Translatable.ERROR_COST_INVALID_TYPE); + yield false; + } + }; } /** @@ -74,11 +76,11 @@ public class CommandSetBookPrice implements TabExecutor { BwBConfig config = BooksWithoutBorders.getConfiguration(); config.setBookPriceType(null); config.setBookPriceQuantity(0); - booksWithoutBorders.getConfig().set("Options.Price_to_create_book.Item_type", "Item type name"); - booksWithoutBorders.getConfig().set("Options.Price_to_create_book.Required_quantity", config.getBookPriceQuantity()); + booksWithoutBorders.getConfig().set(ConfigOption.PRICE_ITEM_TYPE.getConfigNode(), "Item type name"); + booksWithoutBorders.getConfig().set(ConfigOption.PRICE_QUANTITY.getConfigNode(), config.getBookPriceQuantity()); booksWithoutBorders.saveConfig(); - BooksWithoutBorders.sendSuccessMessage(sender, "Price to create books removed!"); + BooksWithoutBorders.getStringFormatter().displaySuccessMessage(sender, Translatable.SUCCESS_COST_REMOVED); } /** @@ -89,14 +91,15 @@ public class CommandSetBookPrice implements TabExecutor { * @returnTrue if the price was changed successfully
*/ private boolean setItemPrice(@NotNull CommandSender sender, double price) { + StringFormatter stringFormatter = BooksWithoutBorders.getStringFormatter(); if (!(sender instanceof Player player)) { - BooksWithoutBorders.sendErrorMessage(sender, "[Item] price can only be used by a player!"); + stringFormatter.displayErrorMessage(sender, Translatable.ERROR_PLAYER_ONLY); return false; } ItemStack heldItem = InventoryHelper.getHeldItem(player, true); if (heldItem.getType() == Material.AIR) { - BooksWithoutBorders.sendErrorMessage(sender, "Must be holding an item to set an [Item] price!"); + stringFormatter.displayErrorMessage(sender, Translatable.ERROR_COST_ITEM_MISSING); return false; } @@ -105,12 +108,13 @@ public class CommandSetBookPrice implements TabExecutor { config.setBookPriceQuantity(price); String newPriceType = config.getBookPriceType().toString(); double newPriceQuantity = config.getBookPriceQuantity(); - booksWithoutBorders.getConfig().set("Options.Price_to_create_book.Item_type", newPriceType); - booksWithoutBorders.getConfig().set("Options.Price_to_create_book.Required_quantity", newPriceQuantity); + booksWithoutBorders.getConfig().set(ConfigOption.PRICE_ITEM_TYPE.getConfigNode(), newPriceType); + booksWithoutBorders.getConfig().set(ConfigOption.PRICE_QUANTITY.getConfigNode(), newPriceQuantity); booksWithoutBorders.saveConfig(); - BooksWithoutBorders.sendSuccessMessage(sender, "Book creation price set to " + (int) newPriceQuantity + - " " + newPriceType + "(s)!"); + stringFormatter.displaySuccessMessage(sender, stringFormatter.replacePlaceholders( + Translatable.SUCCESS_COST_ITEM_SET, List.of("{quantity}", "{price}"), + List.of(String.valueOf((int) newPriceQuantity), newPriceType))); return true; } @@ -122,18 +126,19 @@ public class CommandSetBookPrice implements TabExecutor { * @returnTrue if the price was changed successfully
*/ private boolean setEconomyPrice(@NotNull CommandSender sender, double price) { + StringFormatter stringFormatter = BooksWithoutBorders.getStringFormatter(); EconomyManager economyManager = BooksWithoutBorders.getConfiguration().getEconomyManager(); if (economyManager.getEconomy() != null) { BwBConfig config = BooksWithoutBorders.getConfiguration(); config.setBookPriceQuantity(price); config.setBookPriceType(Material.AIR); double newPriceQuantity = config.getBookPriceQuantity(); - booksWithoutBorders.getConfig().set("Options.Price_to_create_book.Item_type", "Economy"); - booksWithoutBorders.getConfig().set("Options.Price_to_create_book.Required_quantity", newPriceQuantity); + booksWithoutBorders.getConfig().set(ConfigOption.PRICE_ITEM_TYPE.getConfigNode(), "Economy"); + booksWithoutBorders.getConfig().set(ConfigOption.PRICE_QUANTITY.getConfigNode(), newPriceQuantity); booksWithoutBorders.saveConfig(); - BooksWithoutBorders.sendSuccessMessage(sender, "Book creation price set to " + - economyManager.getEconomy().format(newPriceQuantity) + "!"); + stringFormatter.displaySuccessMessage(sender, stringFormatter.replacePlaceholder( + Translatable.SUCCESS_COST_ECONOMY_SET, "{cost}", economyManager.getEconomy().format(newPriceQuantity))); return true; } else { BooksWithoutBorders.sendErrorMessage(sender, StaticMessage.EXCEPTION_VAULT_PRICE_NOT_CHANGED.toString()); @@ -163,7 +168,7 @@ public class CommandSetBookPrice implements TabExecutor { private void initializeTabCompleteLists() { paymentTypes = new ArrayList<>(); paymentTypes.add("item"); - paymentTypes.add("eco"); + paymentTypes.add("economy"); } } diff --git a/src/main/java/net/knarcraft/bookswithoutborders/command/CommandSetBookshelfData.java b/src/main/java/net/knarcraft/bookswithoutborders/command/CommandSetBookshelfData.java index a1db0aa..dd557f8 100644 --- a/src/main/java/net/knarcraft/bookswithoutborders/command/CommandSetBookshelfData.java +++ b/src/main/java/net/knarcraft/bookswithoutborders/command/CommandSetBookshelfData.java @@ -1,8 +1,10 @@ package net.knarcraft.bookswithoutborders.command; import net.knarcraft.bookswithoutborders.BooksWithoutBorders; +import net.knarcraft.bookswithoutborders.config.Translatable; import net.knarcraft.bookswithoutborders.container.Bookshelf; import net.knarcraft.bookswithoutborders.handler.BookshelfHandler; +import net.knarcraft.knarlib.formatting.StringFormatter; import net.knarcraft.knarlib.util.TabCompletionHelper; import org.bukkit.Material; import org.bukkit.block.Block; @@ -23,16 +25,17 @@ import java.util.List; public class CommandSetBookshelfData implements TabExecutor { @Override - public boolean onCommand(@NotNull CommandSender commandSender, @NotNull Command command, @NotNull String s, + public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String s, @NotNull String[] arguments) { - if (!(commandSender instanceof Player player)) { - BooksWithoutBorders.sendErrorMessage(commandSender, "This command must be used by a player!"); + StringFormatter stringFormatter = BooksWithoutBorders.getStringFormatter(); + if (!(sender instanceof Player player)) { + stringFormatter.displayErrorMessage(sender, Translatable.ERROR_PLAYER_ONLY); return false; } Block targetBlock = player.getTargetBlockExact(7); if (targetBlock == null || targetBlock.getType() != Material.CHISELED_BOOKSHELF) { - BooksWithoutBorders.sendErrorMessage(commandSender, "You are not looking at a bookshelf!"); + stringFormatter.displayErrorMessage(sender, Translatable.ERROR_BOOKSHELF_NOT_FOUND); return false; } @@ -44,9 +47,9 @@ public class CommandSetBookshelfData implements TabExecutor { if (bookshelf != null) { shelfHandler.unregisterBookshelf(bookshelf); shelfHandler.save(); - BooksWithoutBorders.sendSuccessMessage(commandSender, "Bookshelf successfully deleted"); + stringFormatter.displaySuccessMessage(sender, Translatable.SUCCESS_BOOKSHELF_DATA_DELETED); } else { - BooksWithoutBorders.sendErrorMessage(commandSender, "The block you are looking at is not a registered bookshelf"); + stringFormatter.displayErrorMessage(sender, Translatable.ERROR_BOOKSHELF_NOT_REGISTERED); } return true; } else { @@ -69,17 +72,16 @@ public class CommandSetBookshelfData implements TabExecutor { bookshelf.setTitle(builder.toString()); } shelfHandler.save(); - BooksWithoutBorders.sendSuccessMessage(commandSender, "Title successfully saved"); + stringFormatter.displaySuccessMessage(sender, Translatable.SUCCESS_BOOKSHELF_TITLE_SET); return true; case "lore": if (bookshelf == null) { - BooksWithoutBorders.sendErrorMessage(commandSender, "You must name the bookshelf before " + - "assigning lore!"); + stringFormatter.displayErrorMessage(sender, Translatable.ERROR_BOOKSHELF_NAME_REQUIRED); } else { List