diff --git a/src/main/java/com/drtshock/playervaults/Listeners.java b/src/main/java/com/drtshock/playervaults/Listeners.java index 337e81b..4938d1c 100644 --- a/src/main/java/com/drtshock/playervaults/Listeners.java +++ b/src/main/java/com/drtshock/playervaults/Listeners.java @@ -21,18 +21,24 @@ import org.bukkit.inventory.Inventory; import com.drtshock.playervaults.commands.Commands; import com.drtshock.playervaults.commands.VaultViewInfo; +import com.drtshock.playervaults.util.DropOnDeath; import com.drtshock.playervaults.util.VaultManager; public class Listeners implements Listener { public Main plugin; - + public Listeners(Main instance) { this.plugin = instance; } - + VaultManager vm = new VaultManager(plugin); + /** + * Save a players vault. + * Sends to method in VaultManager class. + * @param Player p + */ public void saveVault(Player p) { if(Commands.inVault.containsKey(p.getName())) { Inventory inv = p.getOpenInventory().getTopInventory(); @@ -45,12 +51,13 @@ public class Listeners implements Listener { Commands.inVault.remove(p.getName()); } } - + @EventHandler public void onQuit(PlayerQuitEvent event) { Player player = event.getPlayer(); saveVault(player); } + @EventHandler public void onJoin(PlayerJoinEvent event) { Player player = event.getPlayer(); @@ -60,10 +67,14 @@ public class Listeners implements Listener { player.sendMessage(ChatColor.GREEN + "http://dev.bukkit.org/server-mods/playervaults/ to view the changelog and download!"); } } + @EventHandler public void onDeath(PlayerDeathEvent event) { Player player = event.getEntity(); saveVault(player); + if(Main.dropOnDeath && (!player.hasPermission("playervaults.ignore.drops"))) { + DropOnDeath.drop(event.getEntity()); + } } @EventHandler @@ -79,7 +90,7 @@ public class Listeners implements Listener { * Check if a player is trying to do something while * in a vault. * Don't let them open up another chest. - * @param event + * @param PlayerInteractEvent */ @EventHandler public void onInteract(PlayerInteractEvent event) { diff --git a/src/main/java/com/drtshock/playervaults/Main.java b/src/main/java/com/drtshock/playervaults/Main.java index d135da4..a91beb7 100644 --- a/src/main/java/com/drtshock/playervaults/Main.java +++ b/src/main/java/com/drtshock/playervaults/Main.java @@ -26,6 +26,8 @@ public class Main extends JavaPlugin { public static String name = ""; Commands commands; public static Economy econ = null; + public static boolean dropOnDeath = false; + public static int inventoriesToDrop = 0; @Override public void onEnable() { @@ -50,6 +52,12 @@ public class Main extends JavaPlugin { getCommand("pv").setExecutor(commands); getCommand("pvdel").setExecutor(commands); setupEconomy(); + + if(getConfig().getBoolean("drop-on-death.enabled")) { + dropOnDeath = true; + inventoriesToDrop = getConfig().getInt("drop-on-death.inventories"); + } + } public void transferVaults() { diff --git a/src/main/java/com/drtshock/playervaults/commands/VaultOperations.java b/src/main/java/com/drtshock/playervaults/commands/VaultOperations.java index daeb0e9..f749644 100644 --- a/src/main/java/com/drtshock/playervaults/commands/VaultOperations.java +++ b/src/main/java/com/drtshock/playervaults/commands/VaultOperations.java @@ -24,9 +24,13 @@ public class VaultOperations { } return false; } - - /* - * TODO: Change how permissions are checked here. + + /** + * Open a player's own vault. + * Return true if allowed. Otherwise false. + * @param Sender sender + * @param String arg + * @return success */ public static boolean openOwnVault(Player sender, String arg) { if(arg.matches("^[0-9]{1,2}$")) { @@ -56,6 +60,14 @@ public class VaultOperations { return false; } + /** + * Open another player's vault. + * Return true if allowed. Otherwise false. + * @param Sender sender + * @param String user + * @param String arg + * @return success + */ public static boolean openOtherVault(Player sender, String user, String arg) { if(sender.hasPermission("playervaults.admin")) { if(arg.matches("^[0-9]{1,2}$")) { @@ -78,7 +90,13 @@ public class VaultOperations { } return false; } - + + /** + * Delete a player's own vault. + * Return true if allowed. Otherwise false. + * @param Sender sender + * @param String arg + */ public static void deleteOwnVault(Player sender, String arg) { if(arg.matches("^[0-9]{1,2}$")) { int number = 0; @@ -100,7 +118,14 @@ public class VaultOperations { sender.sendMessage(Lang.TITLE.toString()+ Lang.MUST_BE_NUMBER); } } - + + /** + * Delete another player's vault. + * Return true if allowed. Otherwise false. + * @param Sender sender + * @param String user + * @param String arg + */ public static void deleteOtherVault(CommandSender sender, String user, String arg) { if(sender.hasPermission("playervaults.delete")) { if(arg.matches("^[0-9]{1,2}$")) { diff --git a/src/main/java/com/drtshock/playervaults/util/DropOnDeath.java b/src/main/java/com/drtshock/playervaults/util/DropOnDeath.java new file mode 100644 index 0000000..e2ad3c7 --- /dev/null +++ b/src/main/java/com/drtshock/playervaults/util/DropOnDeath.java @@ -0,0 +1,35 @@ +package com.drtshock.playervaults.util; + +import org.bukkit.Location; +import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; + +import com.drtshock.playervaults.Main; + +public class DropOnDeath { + + public static Main plugin; + public DropOnDeath(Main instance) { + DropOnDeath.plugin = instance; + } + + static VaultManager vm = new VaultManager(plugin); + + /** + * Drops all items when a player dies. + * @param player + */ + public static void drop(Player player) { + Location loc = player.getLocation(); + + for(int count = 1; count <= Main.inventoriesToDrop; count++) { + Inventory inv = vm.getVault(player, count); + ItemStack[] stack = inv.getContents(); + for(ItemStack is : stack) { + loc.getWorld().dropItemNaturally(loc, is); + } + } + } + +} diff --git a/src/main/java/com/drtshock/playervaults/util/EconomyOperations.java b/src/main/java/com/drtshock/playervaults/util/EconomyOperations.java index a0c40fe..c2dda9f 100644 --- a/src/main/java/com/drtshock/playervaults/util/EconomyOperations.java +++ b/src/main/java/com/drtshock/playervaults/util/EconomyOperations.java @@ -17,7 +17,12 @@ public class EconomyOperations { EconomyOperations.config = plugin.getConfig(); } - + /** + * Have a player pay to open a vault. + * Returns true if successful. Otherwise false. + * @param player + * @return transaction success + */ public static boolean payToOpen(Player player) { if(!config.getBoolean("economy.enabled") || player.hasPermission("playervaults.free")) return true; @@ -31,7 +36,13 @@ public class EconomyOperations { return false; } - + + /** + * Have a player pay to make a vault. + * Returns true if successful. Otherwise false. + * @param player + * @return transaction success + */ public static boolean payToMake(Player player) { if(!config.getBoolean("economy.enabled") || player.hasPermission("playervaults.free")) return true; @@ -45,7 +56,13 @@ public class EconomyOperations { return false; } - + + /** + * Have a player get his money back when vault is deleted. + * Returns true if successful. Otherwise false. + * @param player + * @return transaction success. + */ public static boolean refundOnDelete(Player player) { if(!config.getBoolean("economy.enabled") || player.hasPermission("playervaults.free")) return true; diff --git a/src/main/java/com/drtshock/playervaults/util/VaultManager.java b/src/main/java/com/drtshock/playervaults/util/VaultManager.java index f59e94f..5573c97 100644 --- a/src/main/java/com/drtshock/playervaults/util/VaultManager.java +++ b/src/main/java/com/drtshock/playervaults/util/VaultManager.java @@ -55,6 +55,32 @@ public class VaultManager { } } + /** + * Gets an inventory without opening it. + * Used for dropping a players inventories on death. + * @param player + * @param number + * @return the inventory + */ + public Inventory getVault(Player player, int number) { + YamlConfiguration playerFile = playerVaultFile(player.getName()); + String data = playerFile.getString("vault" + number); + if(data == null) { + Inventory inv = Bukkit.createInventory(player, 54, ChatColor.DARK_RED + "Vault #" + String.valueOf(number)); + return inv; + } else { + Inventory inv = Serialization.fromBase64(data); + return inv; + } + } + + /** + * Deletes a players vault. + * @param sender + * @param target + * @param number + * @throws IOException + */ public void deleteVault(CommandSender sender, String target, int number) throws IOException { String name = target.toLowerCase(); File file = new File(directory + File.separator + name.toLowerCase() + ".yml"); @@ -71,6 +97,12 @@ public class VaultManager { } } + /** + * Get the player's vault file. + * Create if doesn't exist. + * @param player + * @return playerVaultFile file. + */ public YamlConfiguration playerVaultFile(String player) { File folder = new File(directory); if(!folder.exists()) { @@ -88,6 +120,12 @@ public class VaultManager { return playerFile; } + /** + * Save the players vault file. + * @param name + * @param yaml + * @throws IOException + */ public void saveFile(String name, YamlConfiguration yaml) throws IOException { File file = new File(directory + File.separator + name.toLowerCase() + ".yml"); yaml.save(file); diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index b900ba7..2d4f0c2 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -12,4 +12,13 @@ economy: # Cost to create a vault. You can give players playervaults.free to bypass this. cost-to-create: 100 cost-to-open: 10 - refund-on-delete: 50 \ No newline at end of file + refund-on-delete: 50 + +# Configuration for dropping inventories on death. +# Bypass with playervaults.ignore.drop +drop-on-death: + enabled: false + +# Max amount of inventories you want to be dropped. +# Set to 99 (or highest amount you give people) if you want all inventories to be dropped. + inventories: 1 \ No newline at end of file