From 09d4adc90edc70e13c1d8dbb2ecb664568d639f5 Mon Sep 17 00:00:00 2001 From: Trent Hensler Date: Wed, 13 Feb 2013 00:29:53 -0600 Subject: [PATCH] Get rid of shitty command class. Yay regex! --- src/me/shock/playervaults/Commands.java | 195 ------------------ src/me/shock/playervaults/Listeners.java | 30 +-- src/me/shock/playervaults/Main.java | 31 +-- .../shock/playervaults/commands/Commands.java | 42 ++++ .../shock/playervaults/commands/Feedback.java | 42 ++++ .../shock/playervaults/commands/OwnVault.java | 33 +++ .../playervaults/util/Serialization.java | 2 - .../shock/playervaults/util/VaultManager.java | 19 +- 8 files changed, 149 insertions(+), 245 deletions(-) delete mode 100644 src/me/shock/playervaults/Commands.java create mode 100644 src/me/shock/playervaults/commands/Commands.java create mode 100644 src/me/shock/playervaults/commands/Feedback.java create mode 100644 src/me/shock/playervaults/commands/OwnVault.java diff --git a/src/me/shock/playervaults/Commands.java b/src/me/shock/playervaults/Commands.java deleted file mode 100644 index 0776bd0..0000000 --- a/src/me/shock/playervaults/Commands.java +++ /dev/null @@ -1,195 +0,0 @@ -package me.shock.playervaults; - -import java.io.IOException; -import java.util.HashMap; - -import me.shock.playervaults.util.VaultManager; - -import org.bukkit.ChatColor; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class Commands implements CommandExecutor -{ - - private Main plugin; - VaultManager vm = new VaultManager(plugin); - String pv = ChatColor.DARK_RED + "[" + ChatColor.WHITE + "PlayerVaults" + - ChatColor.DARK_RED + "]" + ChatColor.WHITE + ": "; - - public HashMap inVault = new HashMap(); - - - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) - { - if (cmd.getName().equalsIgnoreCase("pv")) - { - if (!(sender instanceof Player)) - { - sender.sendMessage("[PlayerVaults] Sorry but the console can't have a vault :("); - return true; - } - - if (args.length == 1) - { - if (args[0].matches("[1-9]")) - { - int number = Integer.parseInt(args[0]); - if ((number <= 9) && (sender.hasPermission("playervaults.amount.9"))) - { - vm.loadVault(sender, sender.getName(), number); - sender.sendMessage(pv + "Opening vault " + ChatColor.GREEN + args[0]); - return true; - } - if ((number <= 8) && (sender.hasPermission("playervaults.amount.8"))) - { - vm.loadVault(sender, sender.getName(), number); - sender.sendMessage(pv + "Opening vault " + ChatColor.GREEN + args[0]); - return true; - } - if ((number <= 7) && (sender.hasPermission("playervaults.amount.7"))) - { - vm.loadVault(sender, sender.getName(), number); - sender.sendMessage(pv + "Opening vault " + ChatColor.GREEN + args[0]); - return true; - } - if ((number <= 6) && (sender.hasPermission("playervaults.amount.6"))) - { - vm.loadVault(sender, sender.getName(), number); - sender.sendMessage(pv + "Opening vault " + ChatColor.GREEN + args[0]); - return true; - } - if ((number <= 5) && (sender.hasPermission("playervaults.amount.5"))) - { - vm.loadVault(sender, sender.getName(), number); - sender.sendMessage(pv + "Opening vault " + ChatColor.GREEN + args[0]); - return true; - } - if ((number <= 4) && (sender.hasPermission("playervaults.amount.4"))) - { - vm.loadVault(sender, sender.getName(), number); - sender.sendMessage(pv + "Opening vault " + ChatColor.GREEN + args[0]); - return true; - } - if ((number <= 3) && (sender.hasPermission("playervaults.amount.3"))) - { - vm.loadVault(sender, sender.getName(), number); - sender.sendMessage(pv + "Opening vault " + ChatColor.GREEN + args[0]); - return true; - } - if ((number <= 2) && (sender.hasPermission("playervaults.amount.2"))) - { - vm.loadVault(sender, sender.getName(), number); - sender.sendMessage(pv + "Opening vault " + ChatColor.GREEN + args[0]); - return true; - } - if ((number == 1) && (sender.hasPermission("playervaults.amount.1"))) - { - vm.loadVault(sender, sender.getName(), number); - sender.sendMessage(pv + "Opening vault " + ChatColor.GREEN + args[0]); - return true; - } - - sender.sendMessage(pv + "You don't have permission for that many vaults!"); - return true; - } - - showHelp(sender); - return true; - } - - if (args.length == 2) - { - if (args[0].equals("delete")) - { - if (sender.hasPermission("playervaults.delete")) - { - if (args[1].matches("[1-9]")) - { - Integer number = Integer.parseInt(args[1]); - try { - vm.deleteVault(sender, sender.getName(), number); - } catch (IOException e) { - e.printStackTrace(); - } - sender.sendMessage(pv + "Deleted vault " + ChatColor.GREEN + args[1]); - return true; - } - } - else - { - sender.sendMessage(pv + "You don't have permission for "); - return true; - } - - } - - else - { - if (!sender.hasPermission("playervaults.admin")) - { - sender.sendMessage(pv + "You don't have permission for "); - return true; - } - if (args[1].matches("[1-9]")) - { - Integer number = Integer.parseInt(args[2]); - vm.loadVault(sender, args[1].toLowerCase(), number); - sender.sendMessage(pv + "Opened vault " + ChatColor.GREEN + args[1] + ChatColor.WHITE + " for " + - ChatColor.GREEN + args[0]); - return true; - } - - sender.sendMessage(pv + "Chest number must be 1-9."); - return true; - } - - sender.sendMessage(pv + "We have no record of that vault."); - return true; - } - - if (args.length > 1) - { - if (args[0].equalsIgnoreCase("delete")) - { - if (sender.hasPermission("playervaults.admin")) - { - if (args[2].matches("[1-9]")) - { - Integer number = Integer.parseInt(args[2]); - try { - vm.deleteVault(sender, sender.getName(), number); - } catch (IOException e) { - e.printStackTrace(); - } - sender.sendMessage(pv + "Deleted vault " + ChatColor.RED + args[2] + ChatColor.WHITE + - " for " + ChatColor.RED + args[1]); - return true; - } - } - else - { - sender.sendMessage(pv + "You don't have permission for "); - return true; - } - } - } - else - { - showHelp(sender); - return true; - } - - } - - return true; - } - - public void showHelp(CommandSender sender) - { - sender.sendMessage(pv + "/vault "); - sender.sendMessage(pv + "/vault delete "); - } -} \ No newline at end of file diff --git a/src/me/shock/playervaults/Listeners.java b/src/me/shock/playervaults/Listeners.java index b314398..c38a764 100644 --- a/src/me/shock/playervaults/Listeners.java +++ b/src/me/shock/playervaults/Listeners.java @@ -2,6 +2,7 @@ package me.shock.playervaults; import java.io.IOException; +import me.shock.playervaults.commands.Feedback; import me.shock.playervaults.util.VaultManager; import org.bukkit.ChatColor; @@ -30,16 +31,16 @@ public class Listeners implements Listener { this.plugin = instance; } VaultManager vm = new VaultManager(plugin); - Commands commands = new Commands(); + Feedback feedback = new Feedback(); @EventHandler public void onQuit(PlayerQuitEvent event) { - if(commands.inVault.containsKey(event.getPlayer().getName())) { - Player player = event.getPlayer(); + Player player = event.getPlayer(); + if(feedback.hasKey(player.getName())) { Inventory inv = player.getOpenInventory().getTopInventory(); - int number = Integer.parseInt(commands.inVault.get(player.getName())); + int number = feedback.getNumber(player.getName()); try { vm.saveVault(inv, player, number); } catch (IOException e) { @@ -59,10 +60,10 @@ public class Listeners implements Listener { } @EventHandler public void onDeath(PlayerDeathEvent event) { - if(commands.inVault.containsKey(event.getEntity().getName())) { + if(feedback.hasKey(event.getEntity().getName())) { Player player = event.getEntity(); Inventory inv = player.getOpenInventory().getTopInventory(); - int number = Integer.parseInt(commands.inVault.get(player.getName())); + int number = feedback.getNumber(player.getName()); try { vm.saveVault(inv, player, number); } catch (IOException e) { @@ -73,10 +74,10 @@ public class Listeners implements Listener { @EventHandler public void onTP(PlayerTeleportEvent event) { - if(commands.inVault.containsKey(event.getPlayer().getName())) { + if(feedback.hasKey(event.getPlayer().getName())) { Player player = event.getPlayer(); Inventory inv = player.getOpenInventory().getTopInventory(); - int number = Integer.parseInt(commands.inVault.get(player.getName())); + int number = feedback.getNumber(player.getName()); try { vm.saveVault(inv, player, number); } catch (IOException e) { @@ -87,10 +88,10 @@ public class Listeners implements Listener { @EventHandler public void onWorldChange(PlayerChangedWorldEvent event) { - if(commands.inVault.containsKey(event.getPlayer().getName())) { + if(feedback.hasKey(event.getPlayer().getName())) { Player player = event.getPlayer(); Inventory inv = player.getOpenInventory().getTopInventory(); - int number = Integer.parseInt(commands.inVault.get(player.getName())); + int number = feedback.getNumber(player.getName()); try { vm.saveVault(inv, player, number); } catch (IOException e) { @@ -101,12 +102,13 @@ public class Listeners implements Listener { @EventHandler public void onClose(InventoryCloseEvent event) { - if(commands.inVault.containsKey(event.getPlayer().getName())) { + if(feedback.hasKey(event.getPlayer().getName())) { HumanEntity he = event.getPlayer(); if(he instanceof Player) { Player player = (Player) he; Inventory inv = player.getOpenInventory().getTopInventory(); - int number = Integer.parseInt(commands.inVault.get(player.getName())); + System.out.println("listener inv: " + inv); + int number = feedback.getNumber(player.getName()); try { vm.saveVault(inv, player, number); } catch (IOException e) { @@ -125,7 +127,7 @@ public class Listeners implements Listener { @EventHandler public void onInteract(PlayerInteractEvent event) { Player player = event.getPlayer(); - if(commands.inVault.containsKey(player.getName()) && event.getAction() == Action.RIGHT_CLICK_BLOCK) { + if(feedback.hasKey(player.getName()) && event.getAction() == Action.RIGHT_CLICK_BLOCK) { Block block = event.getClickedBlock(); /** @@ -152,7 +154,7 @@ public class Listeners implements Listener { public void onInteractEntity(PlayerInteractEntityEvent event) { Player player = event.getPlayer(); EntityType type = event.getRightClicked().getType(); - if((type == EntityType.VILLAGER||type==EntityType.MINECART) && commands.inVault.containsKey(player.getName())) { + if((type == EntityType.VILLAGER||type==EntityType.MINECART) && feedback.hasKey(player.getName())) { event.setCancelled(true); } } diff --git a/src/me/shock/playervaults/Main.java b/src/me/shock/playervaults/Main.java index 3665566..ea12c5e 100644 --- a/src/me/shock/playervaults/Main.java +++ b/src/me/shock/playervaults/Main.java @@ -5,11 +5,11 @@ import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; -import java.util.HashMap; import java.util.List; import java.util.logging.Logger; import me.shock.playervaults.Listeners; +import me.shock.playervaults.commands.Commands; import me.shock.playervaults.util.Metrics; import me.shock.playervaults.util.Updater; @@ -64,29 +64,7 @@ public class Main extends JavaPlugin { */ File config = new File(getDataFolder() + File.separator + "config.yml"); if(!config.exists()) { - try{ - getDataFolder().mkdir(); - config.createNewFile(); - } catch (IOException e) { - Log.error("[PlayerVaults] Couldn't create config"); - } - /** - * Write the config file here. - * New, genius way to write it :) - */ - try { - FileOutputStream fos = new FileOutputStream(new File(getDataFolder() + File.separator + "config.yml")); - InputStream is = getResource("config.yml"); - byte[] linebuffer = new byte[4096]; - int lineLength = 0; - while((lineLength = is.read(linebuffer)) > 0) - { - fos.write(linebuffer, 0, lineLength); - } - fos.close(); - } catch (IOException e) { - Log.error("[PlayerVaults] Couldn't write config: " + e); - } + saveDefaultConfig(); } } @@ -205,11 +183,6 @@ public class Main extends JavaPlugin { public String deleteOtherVault() { return lang().getString("delete-other-vault"); } - - - public HashMap inVault() { - return commands.inVault; - } public Logger getLog() { return getServer().getLogger(); diff --git a/src/me/shock/playervaults/commands/Commands.java b/src/me/shock/playervaults/commands/Commands.java new file mode 100644 index 0000000..59ff6dd --- /dev/null +++ b/src/me/shock/playervaults/commands/Commands.java @@ -0,0 +1,42 @@ +package me.shock.playervaults.commands; + +import me.shock.playervaults.Main; +import me.shock.playervaults.util.VaultManager; + +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class Commands implements CommandExecutor +{ + + private Main plugin; + VaultManager vm = new VaultManager(plugin); + OwnVault ownvault = new OwnVault(); + String pv = ChatColor.DARK_RED + "[" + ChatColor.WHITE + "PlayerVaults" + + ChatColor.DARK_RED + "]" + ChatColor.WHITE + ": "; + + public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) + { + if(cmd.getName().equalsIgnoreCase("pv")) { + int length = args.length; + if(length == 1) { + if(checkConsole(sender)) { + ownvault.openOwnVault(sender, args[0]); + } + } + + } + return true; + } + + public boolean checkConsole(CommandSender sender) { + if(!(sender instanceof Player)) { + sender.sendMessage(pv + "Sorry but that can only be run by a player!"); + return false; + } + return true; + } +} \ No newline at end of file diff --git a/src/me/shock/playervaults/commands/Feedback.java b/src/me/shock/playervaults/commands/Feedback.java new file mode 100644 index 0000000..42dfc2f --- /dev/null +++ b/src/me/shock/playervaults/commands/Feedback.java @@ -0,0 +1,42 @@ +package me.shock.playervaults.commands; + +import java.util.HashMap; + +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; + +public class Feedback { + + public HashMap inVault = new HashMap(); + + String pv = ChatColor.DARK_RED + "[" + ChatColor.WHITE + "PlayerVaults" + + ChatColor.DARK_RED + "]" + ChatColor.WHITE + ": "; + + public void noPerms(CommandSender sender) { + sender.sendMessage(pv + "You don't have permission for that!"); + return; + } + + + public void showHelp(CommandSender sender) { + sender.sendMessage(pv + "/vault "); + sender.sendMessage(pv + "/vault delete "); + } + + public void putInHash(String name, int number) { + inVault.put(name, number); + return; + } + + public int getNumber(String name) { + int number = inVault.get(name); + return number; + } + + public boolean hasKey(String name) { + if(inVault.containsKey(name)) + return true; + return false; + } + +} diff --git a/src/me/shock/playervaults/commands/OwnVault.java b/src/me/shock/playervaults/commands/OwnVault.java new file mode 100644 index 0000000..c4146c6 --- /dev/null +++ b/src/me/shock/playervaults/commands/OwnVault.java @@ -0,0 +1,33 @@ +package me.shock.playervaults.commands; + +import me.shock.playervaults.Main; +import me.shock.playervaults.util.VaultManager; + +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; + +public class OwnVault { + + private Main main; + VaultManager vm = new VaultManager(main); + Feedback feedback = new Feedback(); + + String pv = ChatColor.DARK_RED + "[" + ChatColor.WHITE + "PlayerVaults" + + ChatColor.DARK_RED + "]" + ChatColor.WHITE + ": "; + + public boolean openOwnVault(CommandSender sender, String arg0) { + System.out.println("Passed to ownvault class."); + if(arg0.matches("^[0-9]{1,2}$")) { + System.out.println("yay regex!"); + if(sender.hasPermission("playervaults.amount." + arg0)) { + int number = Integer.parseInt(arg0); + vm.loadVault(sender, sender.getName(), number); + feedback.putInHash(sender.getName(), number); + sender.sendMessage(pv + "Opening vault " + ChatColor.GREEN + number); + } else { + feedback.noPerms(sender); + } + } + return true; + } +} diff --git a/src/me/shock/playervaults/util/Serialization.java b/src/me/shock/playervaults/util/Serialization.java index 0fd6bdd..4f99928 100644 --- a/src/me/shock/playervaults/util/Serialization.java +++ b/src/me/shock/playervaults/util/Serialization.java @@ -42,8 +42,6 @@ public class Serialization { } public static Inventory fromBase64(String data) { - if(data.isEmpty()) - return null; ByteArrayInputStream inputStream = new ByteArrayInputStream(Base64Coder.decodeLines(data)); NBTTagList itemList = (NBTTagList) NBTBase.b(new DataInputStream(inputStream)); Inventory inventory = new CraftInventoryCustom(null, itemList.size()); diff --git a/src/me/shock/playervaults/util/VaultManager.java b/src/me/shock/playervaults/util/VaultManager.java index 736b985..2b6382d 100644 --- a/src/me/shock/playervaults/util/VaultManager.java +++ b/src/me/shock/playervaults/util/VaultManager.java @@ -5,7 +5,9 @@ import java.io.IOException; import java.util.logging.Level; import me.shock.playervaults.Main; +import me.shock.playervaults.commands.Feedback; +import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; import org.bukkit.configuration.ConfigurationSection; @@ -20,6 +22,7 @@ public class VaultManager { public VaultManager(Main instance) { this.plugin = instance; } + Feedback feedback = new Feedback(); String title; private static String directory = "plugins" + File.separator + "PlayerVaults" + File.separator + "vaults"; @@ -31,11 +34,12 @@ public class VaultManager { * @throws IOException */ public void saveVault(Inventory inv, Player player, int number) throws IOException { - if(plugin.inVault().containsKey(player.getName())) { + if(feedback.hasKey(player.getName())) { + System.out.println("savevault"); // Get the player's file and serialize the inventory. String ser = Serialization.toBase64(inv); YamlConfiguration file = playerVaultFile(player.getName()); - + System.out.println("" + inv); // Prepare to save D: file.set("vault" + number + "", ser); if(plugin.debugMode()) { @@ -53,9 +57,14 @@ public class VaultManager { public void loadVault(CommandSender sender, String target, int number) { YamlConfiguration playerFile = playerVaultFile(target); String data = playerFile.getString("vault" + "" + number + ""); - Inventory inv = Serialization.fromBase64(data); Player player = (Player) sender; - player.openInventory(inv); + if(data == null) { + Inventory inv = Bukkit.createInventory(player, 54); + player.openInventory(inv); + } else { + Inventory inv = Serialization.fromBase64(data); + player.openInventory(inv); + } player.sendMessage(title + " Opening " + ChatColor.GREEN + " " + number); return; } @@ -76,7 +85,7 @@ public class VaultManager { return; } } - + public YamlConfiguration playerVaultFile(String player) { File folder = new File(directory); if(!folder.exists()) {