Add drop on death for vaults.

Allow configurable drop on death.
Abillity to drop all vaults.
Bypass permission playervaults.ignore.drops
This commit is contained in:
Trent Hensler
2013-03-18 23:21:06 -05:00
parent 03eedace9a
commit 3fc0eb8ba7
7 changed files with 156 additions and 13 deletions
@@ -21,6 +21,7 @@ import org.bukkit.inventory.Inventory;
import com.drtshock.playervaults.commands.Commands; import com.drtshock.playervaults.commands.Commands;
import com.drtshock.playervaults.commands.VaultViewInfo; import com.drtshock.playervaults.commands.VaultViewInfo;
import com.drtshock.playervaults.util.DropOnDeath;
import com.drtshock.playervaults.util.VaultManager; import com.drtshock.playervaults.util.VaultManager;
public class Listeners implements Listener { public class Listeners implements Listener {
@@ -33,6 +34,11 @@ public class Listeners implements Listener {
VaultManager vm = new VaultManager(plugin); VaultManager vm = new VaultManager(plugin);
/**
* Save a players vault.
* Sends to method in VaultManager class.
* @param Player p
*/
public void saveVault(Player p) { public void saveVault(Player p) {
if(Commands.inVault.containsKey(p.getName())) { if(Commands.inVault.containsKey(p.getName())) {
Inventory inv = p.getOpenInventory().getTopInventory(); Inventory inv = p.getOpenInventory().getTopInventory();
@@ -51,6 +57,7 @@ public class Listeners implements Listener {
Player player = event.getPlayer(); Player player = event.getPlayer();
saveVault(player); saveVault(player);
} }
@EventHandler @EventHandler
public void onJoin(PlayerJoinEvent event) { public void onJoin(PlayerJoinEvent event) {
Player player = event.getPlayer(); 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!"); player.sendMessage(ChatColor.GREEN + "http://dev.bukkit.org/server-mods/playervaults/ to view the changelog and download!");
} }
} }
@EventHandler @EventHandler
public void onDeath(PlayerDeathEvent event) { public void onDeath(PlayerDeathEvent event) {
Player player = event.getEntity(); Player player = event.getEntity();
saveVault(player); saveVault(player);
if(Main.dropOnDeath && (!player.hasPermission("playervaults.ignore.drops"))) {
DropOnDeath.drop(event.getEntity());
}
} }
@EventHandler @EventHandler
@@ -79,7 +90,7 @@ public class Listeners implements Listener {
* Check if a player is trying to do something while * Check if a player is trying to do something while
* in a vault. * in a vault.
* Don't let them open up another chest. * Don't let them open up another chest.
* @param event * @param PlayerInteractEvent
*/ */
@EventHandler @EventHandler
public void onInteract(PlayerInteractEvent event) { public void onInteract(PlayerInteractEvent event) {
@@ -26,6 +26,8 @@ public class Main extends JavaPlugin {
public static String name = ""; public static String name = "";
Commands commands; Commands commands;
public static Economy econ = null; public static Economy econ = null;
public static boolean dropOnDeath = false;
public static int inventoriesToDrop = 0;
@Override @Override
public void onEnable() { public void onEnable() {
@@ -50,6 +52,12 @@ public class Main extends JavaPlugin {
getCommand("pv").setExecutor(commands); getCommand("pv").setExecutor(commands);
getCommand("pvdel").setExecutor(commands); getCommand("pvdel").setExecutor(commands);
setupEconomy(); setupEconomy();
if(getConfig().getBoolean("drop-on-death.enabled")) {
dropOnDeath = true;
inventoriesToDrop = getConfig().getInt("drop-on-death.inventories");
}
} }
public void transferVaults() { public void transferVaults() {
@@ -25,8 +25,12 @@ public class VaultOperations {
return false; 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) { public static boolean openOwnVault(Player sender, String arg) {
if(arg.matches("^[0-9]{1,2}$")) { if(arg.matches("^[0-9]{1,2}$")) {
@@ -56,6 +60,14 @@ public class VaultOperations {
return false; 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) { public static boolean openOtherVault(Player sender, String user, String arg) {
if(sender.hasPermission("playervaults.admin")) { if(sender.hasPermission("playervaults.admin")) {
if(arg.matches("^[0-9]{1,2}$")) { if(arg.matches("^[0-9]{1,2}$")) {
@@ -79,6 +91,12 @@ public class VaultOperations {
return false; 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) { public static void deleteOwnVault(Player sender, String arg) {
if(arg.matches("^[0-9]{1,2}$")) { if(arg.matches("^[0-9]{1,2}$")) {
int number = 0; int number = 0;
@@ -101,6 +119,13 @@ public class VaultOperations {
} }
} }
/**
* 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) { public static void deleteOtherVault(CommandSender sender, String user, String arg) {
if(sender.hasPermission("playervaults.delete")) { if(sender.hasPermission("playervaults.delete")) {
if(arg.matches("^[0-9]{1,2}$")) { if(arg.matches("^[0-9]{1,2}$")) {
@@ -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);
}
}
}
}
@@ -17,7 +17,12 @@ public class EconomyOperations {
EconomyOperations.config = plugin.getConfig(); 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) { public static boolean payToOpen(Player player) {
if(!config.getBoolean("economy.enabled") || player.hasPermission("playervaults.free")) if(!config.getBoolean("economy.enabled") || player.hasPermission("playervaults.free"))
return true; return true;
@@ -32,6 +37,12 @@ public class EconomyOperations {
return false; 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) { public static boolean payToMake(Player player) {
if(!config.getBoolean("economy.enabled") || player.hasPermission("playervaults.free")) if(!config.getBoolean("economy.enabled") || player.hasPermission("playervaults.free"))
return true; return true;
@@ -46,6 +57,12 @@ public class EconomyOperations {
return false; 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) { public static boolean refundOnDelete(Player player) {
if(!config.getBoolean("economy.enabled") || player.hasPermission("playervaults.free")) if(!config.getBoolean("economy.enabled") || player.hasPermission("playervaults.free"))
return true; return true;
@@ -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 { public void deleteVault(CommandSender sender, String target, int number) throws IOException {
String name = target.toLowerCase(); String name = target.toLowerCase();
File file = new File(directory + File.separator + name.toLowerCase() + ".yml"); 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) { public YamlConfiguration playerVaultFile(String player) {
File folder = new File(directory); File folder = new File(directory);
if(!folder.exists()) { if(!folder.exists()) {
@@ -88,6 +120,12 @@ public class VaultManager {
return playerFile; return playerFile;
} }
/**
* Save the players vault file.
* @param name
* @param yaml
* @throws IOException
*/
public void saveFile(String name, YamlConfiguration yaml) throws IOException { public void saveFile(String name, YamlConfiguration yaml) throws IOException {
File file = new File(directory + File.separator + name.toLowerCase() + ".yml"); File file = new File(directory + File.separator + name.toLowerCase() + ".yml");
yaml.save(file); yaml.save(file);
+9
View File
@@ -13,3 +13,12 @@ economy:
cost-to-create: 100 cost-to-create: 100
cost-to-open: 10 cost-to-open: 10
refund-on-delete: 50 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