From 47301058ba41be27080e65c7a6875ec3315e160b Mon Sep 17 00:00:00 2001 From: EpicKnarvik97 Date: Fri, 27 Aug 2021 18:26:14 +0200 Subject: [PATCH] More code cleanup --- .../BooksWithoutBorders.java | 89 +++++---- .../BooksWithoutBordersListener.java | 187 ++++++++++-------- 2 files changed, 154 insertions(+), 122 deletions(-) diff --git a/src/main/java/net/knarcraft/bookswithoutborders/BooksWithoutBorders.java b/src/main/java/net/knarcraft/bookswithoutborders/BooksWithoutBorders.java index 35d4dca..f0a9cbc 100644 --- a/src/main/java/net/knarcraft/bookswithoutborders/BooksWithoutBorders.java +++ b/src/main/java/net/knarcraft/bookswithoutborders/BooksWithoutBorders.java @@ -32,28 +32,33 @@ import org.bukkit.plugin.RegisteredServiceProvider; import org.bukkit.plugin.java.JavaPlugin; public class BooksWithoutBorders extends JavaPlugin { - protected static int dlimit; + protected static int bookDuplicateLimit; //The separating string between the book title and the book author protected static String titleAuthorSeparator; protected static String loreSep; protected static final String SLASH = System.getProperty("file.separator"); - protected static List firstBooks = new ArrayList<>(); - protected static String fBMessage; + protected static List firstBooks; + protected static String welcomeMessage; protected static List existingPlayers; protected static Economy eco; protected static Material bookPriceType = null; protected static double bookPriceQuantity; protected static boolean authorOnlyCopy, useYml, adminDecrypt; protected static ItemFactory iF; - protected static final Map> loadList = new HashMap<>(); + protected static Map> loadList; protected static BooksWithoutBorders bwb; - protected static final BooksWithoutBordersListener bL = new BooksWithoutBordersListener(); + protected static BooksWithoutBordersListener bL; protected static ConsoleCommandSender consoleSender; + protected static String bookFolder; @Override public void onEnable() { bwb = this; consoleSender = this.getServer().getConsoleSender(); + bookFolder = this.getDataFolder().getAbsolutePath() + SLASH + "Books" + SLASH; + bL = new BooksWithoutBordersListener(); + loadList = new HashMap<>(); + firstBooks = new ArrayList<>(); if (SLASH != null && init()) { this.getServer().getPluginManager().registerEvents(bL, this); @@ -79,11 +84,11 @@ public class BooksWithoutBorders extends JavaPlugin { } this.getConfig().set("Options.Save_Books_in_Yaml_Format", useYml); - this.getConfig().set("Options.Max_Number_of_Duplicates", dlimit); + this.getConfig().set("Options.Max_Number_of_Duplicates", bookDuplicateLimit); this.getConfig().set("Options.Title-Author_Separator", titleAuthorSeparator); this.getConfig().set("Options.Lore_line_separator", loreSep); this.getConfig().set("Options.Books_for_new_players", firstBooks); - this.getConfig().set("Options.Message_for_new_players", fBMessage); + this.getConfig().set("Options.Message_for_new_players", welcomeMessage); if (bookPriceType != null) { if (bookPriceType != Material.AIR) this.getConfig().set("Options.Price_to_create_book.Item_type", bookPriceType.toString()); @@ -112,8 +117,8 @@ public class BooksWithoutBorders extends JavaPlugin { this.saveConfig(); - File fTest = new File(this.getDataFolder().getAbsolutePath() + SLASH + "Books" + SLASH); - File efTest = new File(this.getDataFolder().getAbsolutePath() + SLASH + "Books" + SLASH + "Encrypted" + SLASH); + File fTest = new File(bookFolder); + File efTest = new File(bookFolder + "Encrypted" + SLASH); if (!fTest.exists()) { try { @@ -145,7 +150,7 @@ public class BooksWithoutBorders extends JavaPlugin { this.reloadConfig(); try { useYml = this.getConfig().getBoolean("Options.Save_Books_in_Yaml_Format", true); - dlimit = this.getConfig().getInt("Options.Max_Number_of_Duplicates", 5); + bookDuplicateLimit = this.getConfig().getInt("Options.Max_Number_of_Duplicates", 5); titleAuthorSeparator = this.getConfig().getString("Options.Title-Author_Separator", ","); loreSep = this.getConfig().getString("Options.Lore_line_separator", "~"); adminDecrypt = this.getConfig().getBoolean("Options.Admin_Auto_Decrypt", false); @@ -157,7 +162,7 @@ public class BooksWithoutBorders extends JavaPlugin { if (firstBooks.isEmpty()) firstBooks.add(" "); - fBMessage = this.getConfig().getString("Options.Message_for_new_players", " "); + welcomeMessage = this.getConfig().getString("Options.Message_for_new_players", " "); //Converts string into material String sMaterial = this.getConfig().getString("Options.Price_to_create_book.Item_type", " "); @@ -360,7 +365,7 @@ public class BooksWithoutBorders extends JavaPlugin { return true; } - if (args.length == 0 && !(sender instanceof Player)) { + if (args.length == 0) { //lists commands from console sender.sendMessage(ChatColor.YELLOW + "Use: /bwb [Command]"); sender.sendMessage(ChatColor.YELLOW + "[] denote parameters"); @@ -781,7 +786,7 @@ public class BooksWithoutBorders extends JavaPlugin { } if (args.length == 1 && adminDecrypt && sender.hasPermission("bookswithoutborders.admin") && sender instanceof Player) { - String path = this.getDataFolder().getAbsolutePath() + SLASH + "Books" + SLASH + "Encrypted" + SLASH; + String path = bookFolder + "Encrypted" + SLASH; String fname = (!((BookMeta) ((Player) sender).getItemInHand().getItemMeta()).hasTitle()) ? "Untitled," + sender.getName() : ((BookMeta) ((Player) sender).getItemInHand().getItemMeta()).getTitle() + titleAuthorSeparator + ((BookMeta) ((Player) sender).getItemInHand().getItemMeta()).getAuthor(); File eDir = new File(path); @@ -1244,9 +1249,9 @@ public class BooksWithoutBorders extends JavaPlugin { BookMeta book = (BookMeta) player.getItemInHand().getItemMeta(); String path; if (pub) { - path = this.getDataFolder().getAbsolutePath() + SLASH + "Books" + SLASH; + path = bookFolder; } else { - path = this.getDataFolder().getAbsolutePath() + SLASH + "Books" + SLASH + cleanString(player.getName()) + SLASH; + path = bookFolder + cleanString(player.getName()) + SLASH; } String fname; if (!book.hasTitle()) { @@ -1292,7 +1297,7 @@ public class BooksWithoutBorders extends JavaPlugin { return; } - if (dupes > dlimit) { + if (dupes > bookDuplicateLimit) { player.sendMessage(ChatColor.RED + "Maximum amount of " + fname + " duplicates reached!"); player.sendMessage(ChatColor.RED + "Use " + ChatColor.YELLOW + "/bwb Save true " + ChatColor.RED + "to overwrite!"); return; @@ -1340,13 +1345,13 @@ public class BooksWithoutBorders extends JavaPlugin { if (fname.lastIndexOf(".") != -1) { if (fname.substring(fname.lastIndexOf(".")).equals(".yml") || fname.substring(fname.lastIndexOf(".")).equals(".txt")) { if (dir.equalsIgnoreCase("public")) - file = new File(this.getDataFolder().getAbsolutePath() + SLASH + "Books" + SLASH + fname); + file = new File(bookFolder + fname); else if (dir.equalsIgnoreCase("player")) - file = new File(this.getDataFolder().getAbsolutePath() + SLASH + "Books" + SLASH + cleanString(sender.getName()) + SLASH + fname); + file = new File(bookFolder + cleanString(sender.getName()) + SLASH + fname); else if (!dir.equalsIgnoreCase("")) - file = new File(this.getDataFolder().getAbsolutePath() + SLASH + "Books" + SLASH + "Encrypted" + SLASH + dir + SLASH + fname); + file = new File(bookFolder + "Encrypted" + SLASH + dir + SLASH + fname); else file = null; @@ -1360,26 +1365,26 @@ public class BooksWithoutBorders extends JavaPlugin { } //No extension present if (dir.equalsIgnoreCase("public")) - file = new File(this.getDataFolder().getAbsolutePath() + SLASH + "Books" + SLASH + fname + ".yml"); + file = new File(bookFolder + fname + ".yml"); else if (dir.equalsIgnoreCase("player")) - file = new File(this.getDataFolder().getAbsolutePath() + SLASH + "Books" + SLASH + cleanString(sender.getName()) + SLASH + fname + ".yml"); + file = new File(bookFolder + cleanString(sender.getName()) + SLASH + fname + ".yml"); else if (!dir.equalsIgnoreCase("")) - file = new File(this.getDataFolder().getAbsolutePath() + SLASH + "Books" + SLASH + "Encrypted" + SLASH + dir + SLASH + fname + ".yml"); + file = new File(bookFolder + "Encrypted" + SLASH + dir + SLASH + fname + ".yml"); else file = null; if (!file.isFile()) { if (dir.equalsIgnoreCase("public")) - file = new File(this.getDataFolder().getAbsolutePath() + SLASH + "Books" + SLASH + fname + ".txt"); + file = new File(bookFolder + fname + ".txt"); else if (dir.equalsIgnoreCase("player")) - file = new File(this.getDataFolder().getAbsolutePath() + SLASH + "Books" + SLASH + cleanString(sender.getName()) + SLASH + fname + ".txt"); + file = new File(bookFolder + cleanString(sender.getName()) + SLASH + fname + ".txt"); else if (!dir.equalsIgnoreCase("")) - file = new File(this.getDataFolder().getAbsolutePath() + SLASH + "Books" + SLASH + "Encrypted" + SLASH + dir + SLASH + fname + ".txt"); + file = new File(bookFolder + "Encrypted" + SLASH + dir + SLASH + fname + ".txt"); else file = null; @@ -1424,7 +1429,7 @@ public class BooksWithoutBorders extends JavaPlugin { } protected Boolean eSave(Player player, BookMeta book, String key) { - String path = this.getDataFolder().getAbsolutePath() + SLASH + "Books" + SLASH + "Encrypted" + SLASH; + String path = bookFolder + "Encrypted" + SLASH; String fname = (!book.hasTitle()) ? "Untitled," + player.getName() : book.getTitle() + titleAuthorSeparator + book.getAuthor(); @@ -1449,7 +1454,7 @@ public class BooksWithoutBorders extends JavaPlugin { } protected BookMeta groupESave(Player player, BookMeta book, String key, String groupName) { - String path = this.getDataFolder().getAbsolutePath() + SLASH + "Books" + SLASH + "Encrypted" + SLASH + cleanString(groupName) + SLASH; + String path = bookFolder + "Encrypted" + SLASH + cleanString(groupName) + SLASH; File dirTest = new File(path); //Creates group dir if (!dirTest.exists()) { @@ -1493,7 +1498,7 @@ public class BooksWithoutBorders extends JavaPlugin { protected ItemStack eLoad(Player player, String key, boolean deleteEncryptedFile) { BookMeta book = (BookMeta) player.getItemInHand().getItemMeta(); - String path = this.getDataFolder().getAbsolutePath() + SLASH + "Books" + SLASH + "Encrypted" + SLASH; + String path = bookFolder + "Encrypted" + SLASH; String fname = (!book.hasTitle()) ? "Untitled," + player.getName() : book.getTitle() + titleAuthorSeparator + book.getAuthor(); fname = "[" + key + "]" + fname; @@ -1533,9 +1538,9 @@ public class BooksWithoutBorders extends JavaPlugin { } protected List listFiles(CommandSender sender, Boolean pub, int offset, boolean silent) { - List fList = new ArrayList<>(); - File file = (pub) ? new File(this.getDataFolder().getAbsolutePath() + SLASH + "Books" + SLASH) : - new File(this.getDataFolder().getAbsolutePath() + SLASH + "Books" + SLASH + cleanString(sender.getName()) + SLASH); + List fileList = new ArrayList<>(); + File file = (pub) ? new File(bookFolder) : + new File(bookFolder + cleanString(sender.getName()) + SLASH); File[] fl = file.listFiles(); if (!file.exists()) { @@ -1552,13 +1557,13 @@ public class BooksWithoutBorders extends JavaPlugin { sender.sendMessage(ChatColor.GREEN + "Available Books:"); for (File value : fl) { if (value.isFile()) { - fList.add(value.getName()); + fileList.add(value.getName()); if (!silent) - sender.sendMessage(ChatColor.GRAY + "[" + (fList.size() + offset) + "] " + value.getName()/*.substring(0, fl[x].getName().length()-4)*/); + sender.sendMessage(ChatColor.GRAY + "[" + (fileList.size() + offset) + "] " + value.getName()/*.substring(0, fl[x].getName().length()-4)*/); } } - return fList; + return fileList; } protected List pageFormat(List rawPages) { @@ -1702,8 +1707,8 @@ public class BooksWithoutBorders extends JavaPlugin { //Extension is already present if (fname.lastIndexOf(".") != -1) { if (fname.substring(fname.lastIndexOf(".")).equals(".yml") || fname.substring(fname.lastIndexOf(".")).equals(".txt")) { - file = (ispub) ? new File(this.getDataFolder().getAbsolutePath() + SLASH + "Books" + SLASH + fname) : - new File(this.getDataFolder().getAbsolutePath() + SLASH + "Books" + SLASH + cleanString(sender.getName()) + SLASH + fname); + file = (ispub) ? new File(bookFolder + fname) : + new File(bookFolder + cleanString(sender.getName()) + SLASH + fname); if (!file.isFile()) { sender.sendMessage(ChatColor.RED + "Incorrect file name!"); @@ -1714,12 +1719,12 @@ public class BooksWithoutBorders extends JavaPlugin { } //No extension present - file = (ispub) ? new File(this.getDataFolder().getAbsolutePath() + SLASH + "Books" + SLASH + fname + ".yml") : - new File(this.getDataFolder().getAbsolutePath() + SLASH + "Books" + SLASH + cleanString(sender.getName()) + SLASH + fname + ".yml"); + file = (ispub) ? new File(bookFolder + fname + ".yml") : + new File(bookFolder + cleanString(sender.getName()) + SLASH + fname + ".yml"); if (!file.isFile()) { - file = (ispub) ? new File(this.getDataFolder().getAbsolutePath() + SLASH + "Books" + SLASH + fname + ".txt") : - new File(this.getDataFolder().getAbsolutePath() + SLASH + "Books" + SLASH + cleanString(sender.getName()) + SLASH + fname + ".txt"); + file = (ispub) ? new File(bookFolder + fname + ".txt") : + new File(bookFolder + cleanString(sender.getName()) + SLASH + fname + ".txt"); if (!file.isFile()) { sender.sendMessage(ChatColor.RED + "Incorrect file name!"); @@ -1785,8 +1790,10 @@ public class BooksWithoutBorders extends JavaPlugin { } protected boolean isAuthor(Player player, BookMeta book) { - if (cleanString(player.getName()).equalsIgnoreCase(cleanString(book.getAuthor()))) + String author = book.getAuthor(); + if (author != null && cleanString(player.getName()).equalsIgnoreCase(cleanString(author))) { return true; + } player.sendMessage(ChatColor.RED + "You must be the author of this book to use this command!"); return false; diff --git a/src/main/java/net/knarcraft/bookswithoutborders/BooksWithoutBordersListener.java b/src/main/java/net/knarcraft/bookswithoutborders/BooksWithoutBordersListener.java index 38d54e2..cef0612 100644 --- a/src/main/java/net/knarcraft/bookswithoutborders/BooksWithoutBordersListener.java +++ b/src/main/java/net/knarcraft/bookswithoutborders/BooksWithoutBordersListener.java @@ -28,7 +28,8 @@ import org.bukkit.inventory.meta.ItemMeta; public class BooksWithoutBordersListener implements Listener { private final String slash = BooksWithoutBorders.SLASH; - private final String bookFolder = BooksWithoutBorders.bwb.getDataFolder().getAbsolutePath() + slash + "Books" + slash; + private final String bookFolderPath = BooksWithoutBorders.bwb.getDataFolder().getAbsolutePath() + slash + "Books"; + private final String bookFolder = bookFolderPath + slash; /** * Updates old books to a newer format @@ -76,6 +77,10 @@ public class BooksWithoutBordersListener implements Listener { @EventHandler public void onHold(PlayerItemHeldEvent e) { + if (e.isCancelled()) { + return; + } + Player player = e.getPlayer(); int selectedSlot = e.getNewSlot(); PlayerInventory playerInventory = player.getInventory(); @@ -97,9 +102,10 @@ public class BooksWithoutBordersListener implements Listener { @EventHandler public void onPlayerJoin(PlayerJoinEvent e) { + Player player = e.getPlayer(); + //Handle new players - if (!BooksWithoutBorders.bwb.hasPlayedBefore(e.getPlayer().getName())) { - Player player = e.getPlayer(); + if (!BooksWithoutBorders.bwb.hasPlayedBefore(player.getName())) { boolean sendMessage = true; //Gives new players necessary books @@ -109,49 +115,49 @@ public class BooksWithoutBordersListener implements Listener { } //Updates any books in either hand - ItemStack mainHandItem = e.getPlayer().getInventory().getItemInMainHand(); - ItemStack offHandItem = e.getPlayer().getInventory().getItemInOffHand(); + ItemStack mainHandItem = player.getInventory().getItemInMainHand(); + ItemStack offHandItem = player.getInventory().getItemInOffHand(); if (mainHandItem.getType() == Material.WRITTEN_BOOK) { ItemMeta itemMetadata = mainHandItem.getItemMeta(); - updateBookInHand(e.getPlayer(), itemMetadata, true); + updateBookInHand(player, itemMetadata, true); } if (offHandItem.getType() == Material.WRITTEN_BOOK) { ItemMeta itemMetadata = offHandItem.getItemMeta(); - updateBookInHand(e.getPlayer(), itemMetadata, false); + updateBookInHand(player, itemMetadata, false); } } /** * Gives a book to a player joining for the first time - * @param bookName

The name of the book to give

- * @param player

The player which just joined

+ * + * @param bookName

The name of the book to give

+ * @param player

The player which just joined

* @param sendMessage

Whether to send a message to the joining player

* @return

True if a message has yet to be sent

*/ private boolean giveBookToNewPlayer(String bookName, Player player, boolean sendMessage) { + if (!bookName.trim().isEmpty()) { - if (!bookName.equalsIgnoreCase(" ")) { - //handles loadlist numbers - for (int x = 0; x < bookName.length(); x++) { - if (!Character.isDigit(bookName.charAt(x))) { - break; - } - if (x == bookName.length() - 1) { - BooksWithoutBorders.loadList.put(player.getName(), BooksWithoutBorders.bwb.listFiles(player, true, 0, true)); - } + //Handles loadList numbers + try { + Integer.parseInt(bookName); + //Load public books for the player + List availableFiles = BooksWithoutBorders.bwb.listFiles(player, true, 0, true); + BooksWithoutBorders.loadList.put(player.getName(), availableFiles); + } catch (NumberFormatException ignored) { } - + //Give the book to the player if it exists ItemStack newBook = BooksWithoutBorders.bwb.loadBook(player, bookName, "true", "public"); if (newBook != null) { player.getInventory().addItem(newBook); } - if (!BooksWithoutBorders.fBMessage.equalsIgnoreCase(" ") && newBook != null && sendMessage) { + //Send the player a welcome message if it exists + if (!BooksWithoutBorders.welcomeMessage.trim().isEmpty() && newBook != null && sendMessage) { sendMessage = false; - final Player fp = player; BooksWithoutBorders.bwb.getServer().getScheduler().scheduleSyncDelayedTask(BooksWithoutBorders.bwb, - () -> fp.sendMessage(BooksWithoutBorders.fBMessage), 40L); + () -> player.sendMessage(BooksWithoutBorders.welcomeMessage), 40L); } } return sendMessage; @@ -178,89 +184,107 @@ public class BooksWithoutBordersListener implements Listener { @EventHandler public void onSignChange(SignChangeEvent e) { - if (e.getLine(0).equalsIgnoreCase("[BwB]") && e.getPlayer().hasPermission("bookswithoutborders.signs")) { - e.setLine(0, ChatColor.DARK_GREEN + "[BwB]"); + if (e.isCancelled()) { + return; + } - if ((e.getLine(1).equalsIgnoreCase("[Encrypt]") || e.getLine(1).equalsIgnoreCase("[Decrypt]") || e.getLine(1).equalsIgnoreCase("[Give]")) && e.getLine(2).replace(" ", "").length() > 0) { - e.setLine(1, ChatColor.DARK_BLUE + e.getLine(1)); - if (e.getLine(1).equalsIgnoreCase(ChatColor.DARK_BLUE + "[Encrypt]") || e.getLine(1).equalsIgnoreCase(ChatColor.DARK_BLUE + "[Decrypt]")) { - e.setLine(2, ChatColor.MAGIC + e.getLine(2)); - e.setLine(3, ChatColor.DARK_BLUE + e.getLine(3)); + String[] lines = e.getLines(); + Player player = e.getPlayer(); + + //Check if creating a Books Without Borders Sign and if the player has permission + if (!lines[0].equalsIgnoreCase("[BwB]") || !player.hasPermission("bookswithoutborders.signs")) { + return; + } + + //Mark the sign as active + e.setLine(0, ChatColor.DARK_GREEN + "[BwB]"); + + if ((lines[1].equalsIgnoreCase("[Encrypt]") || lines[1].equalsIgnoreCase("[Decrypt]") || + lines[1].equalsIgnoreCase("[Give]")) && lines[2].trim().length() > 0) { + + //Mark the second line as valid + e.setLine(1, ChatColor.DARK_BLUE + lines[1]); + + //Mark valid encryption/decryption sign + if (lines[1].equalsIgnoreCase(ChatColor.DARK_BLUE + "[Encrypt]") || + lines[1].equalsIgnoreCase(ChatColor.DARK_BLUE + "[Decrypt]")) { + e.setLine(2, ChatColor.MAGIC + lines[2]); + e.setLine(3, ChatColor.DARK_BLUE + lines[3]); + } + + //Generate book giving sign + if (lines[1].equalsIgnoreCase(ChatColor.DARK_BLUE + "[Give]")) { + if (lines[2].length() > 13 || lines[3].length() > 13) { + player.sendMessage(ChatColor.RED + "[Give] signs' 3rd and 4th lines must be 13 characters or less!"); + e.setLine(2, ChatColor.DARK_RED + lines[2]); + e.setLine(3, ChatColor.DARK_RED + lines[3]); + return; } - if (e.getLine(1).equalsIgnoreCase(ChatColor.DARK_BLUE + "[Give]")) { - if (e.getLine(2).length() > 13 || e.getLine(3).length() > 13) { - e.getPlayer().sendMessage(ChatColor.RED + "[Give] signs' 3rd and 4th lines must be 13 characters or less!"); - e.setLine(2, ChatColor.DARK_RED + e.getLine(2)); - e.setLine(3, ChatColor.DARK_RED + e.getLine(3)); - return; - } - - //Tests if a full file name has been supplied - if ((new File(BooksWithoutBorders.bwb.getDataFolder().getAbsolutePath() + BooksWithoutBorders.SLASH + "Books" + BooksWithoutBorders.SLASH + e.getLine(2) + e.getLine(3)).isFile()) || - (new File(BooksWithoutBorders.bwb.getDataFolder().getAbsolutePath() + BooksWithoutBorders.SLASH + "Books" + BooksWithoutBorders.SLASH + e.getLine(2) + e.getLine(3) + ".txt").isFile()) || - (new File(BooksWithoutBorders.bwb.getDataFolder().getAbsolutePath() + BooksWithoutBorders.SLASH + "Books" + BooksWithoutBorders.SLASH + e.getLine(2) + e.getLine(3) + ".yml").isFile())) { - e.setLine(2, ChatColor.DARK_GREEN + e.getLine(2)); - e.setLine(3, ChatColor.DARK_GREEN + e.getLine(3)); - } - + //Tests if a full file name has been supplied + if ((new File(bookFolder + lines[2] + lines[3]).isFile()) || + (new File(bookFolder + lines[2] + lines[3] + ".txt").isFile()) || + (new File(bookFolder + lines[2] + lines[3] + ".yml").isFile())) { + e.setLine(2, ChatColor.DARK_GREEN + lines[2]); + e.setLine(3, ChatColor.DARK_GREEN + lines[3]); + } else { //Tests if a load list number has been supplied - else { - File dirFile = new File(BooksWithoutBorders.bwb.getDataFolder().getAbsolutePath() + BooksWithoutBorders.SLASH + "Books"); - for (int x = 0; x < e.getLine(2).length(); x++) { - if (!Character.isDigit(e.getLine(2).charAt(x))) { - e.setLine(2, ChatColor.DARK_RED + e.getLine(2)); - e.setLine(3, ChatColor.DARK_RED + e.getLine(3)); - break; + File dirFile = new File(bookFolderPath); + for (int x = 0; x < lines[2].length(); x++) { + if (!Character.isDigit(lines[2].charAt(x))) { + e.setLine(2, ChatColor.DARK_RED + lines[2]); + e.setLine(3, ChatColor.DARK_RED + lines[3]); + break; + } + if (x == lines[2].length() - 1) { + List fList = new ArrayList<>(); + for (int y = 0; y < dirFile.list().length; y++) { + if (dirFile.listFiles()[y].isFile()) { + fList.add(dirFile.listFiles()[y].getName()); + } } - if (x == e.getLine(2).length() - 1) { - List fList = new ArrayList<>(); - for (int y = 0; y < dirFile.list().length; y++) { - if (dirFile.listFiles()[y].isFile()) { - fList.add(dirFile.listFiles()[y].getName()); - } - } - try { - if (Integer.parseInt(e.getLine(2)) >= 0 && Integer.parseInt(e.getLine(2)) <= fList.size()) { - BooksWithoutBorders.loadList.put(e.getPlayer().getName(), BooksWithoutBorders.bwb.listFiles(e.getPlayer(), true, 0, true)); - e.setLine(2, ChatColor.DARK_GREEN + e.getLine(2)); - e.setLine(3, ChatColor.DARK_GREEN + e.getLine(3)); - } else { - e.setLine(2, ChatColor.DARK_RED + e.getLine(2)); - e.setLine(3, ChatColor.DARK_RED + e.getLine(3)); - } - } catch (NumberFormatException ignored) { + try { + if (Integer.parseInt(lines[2]) >= 0 && Integer.parseInt(lines[2]) <= fList.size()) { + BooksWithoutBorders.loadList.put(player.getName(), BooksWithoutBorders.bwb.listFiles(player, true, 0, true)); + e.setLine(2, ChatColor.DARK_GREEN + lines[2]); + e.setLine(3, ChatColor.DARK_GREEN + lines[3]); + } else { + e.setLine(2, ChatColor.DARK_RED + lines[2]); + e.setLine(3, ChatColor.DARK_RED + lines[3]); } + } catch (NumberFormatException ignored) { } } } } - } else { - e.setLine(1, ChatColor.DARK_RED + e.getLine(1)); } + } else { + //Mark the second line as invalid + e.setLine(1, ChatColor.DARK_RED + lines[1]); } } @EventHandler - public void onClick(PlayerInteractEvent e) { - if (e.getClickedBlock() == null) { + public void onClick(PlayerInteractEvent event) { + if (event.getClickedBlock() == null) { return; } - Material clickedBlockType = e.getClickedBlock().getType(); - Player player = e.getPlayer(); + Material clickedBlockType = event.getClickedBlock().getType(); + Player player = event.getPlayer(); PlayerInventory playerInventory = player.getInventory(); - EquipmentSlot hand = e.getHand(); + EquipmentSlot hand = event.getHand(); if (hand == null) { return; } ItemStack heldItem = playerInventory.getItem(hand); Material heldItemType = heldItem.getType(); - if (e.getAction() == Action.RIGHT_CLICK_BLOCK && (Tag.SIGNS.isTagged(clickedBlockType) || Tag.WALL_SIGNS.isTagged(clickedBlockType))) { + if (event.getAction() == Action.RIGHT_CLICK_BLOCK && (Tag.SIGNS.isTagged(clickedBlockType) || + Tag.WALL_SIGNS.isTagged(clickedBlockType))) { //The player right-clicked a sign - Sign sign = (Sign) e.getClickedBlock().getState(); + Sign sign = (Sign) event.getClickedBlock().getState(); if (signLineEquals(sign, 0, "[BooksWithoutBorders]", ChatColor.DARK_GREEN)) { if (signLineEquals(sign, 1, "[Encrypt]", ChatColor.DARK_BLUE)) { @@ -272,8 +296,8 @@ public class BooksWithoutBordersListener implements Listener { giveBook(sign, player); } } - } else if (heldItemType == Material.WRITTEN_BOOK && (e.getAction() == Action.LEFT_CLICK_AIR - || e.getAction() == Action.LEFT_CLICK_BLOCK)) { + } else if (heldItemType == Material.WRITTEN_BOOK && (event.getAction() == Action.LEFT_CLICK_AIR + || event.getAction() == Action.LEFT_CLICK_BLOCK)) { BookMeta oldBook = (BookMeta) heldItem.getItemMeta(); if (oldBook == null) { return; @@ -335,9 +359,10 @@ public class BooksWithoutBordersListener implements Listener { */ private void encryptHeldBookUsingSign(Sign sign, Material heldItemType, Player player, EquipmentSlot hand) { ItemStack eBook; + String[] lines = sign.getLines(); if (heldItemType == Material.WRITTEN_BOOK) { player.closeInventory(); - eBook = BooksWithoutBorders.bwb.bookEncryption(player, sign.getLine(2).substring(2), sign.getLine(3).substring(2), ""); + eBook = BooksWithoutBorders.bwb.bookEncryption(player, lines[2].substring(2), lines[3].substring(2), ""); if (eBook != null) { player.getInventory().setItem(hand, eBook); }