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:
@@ -21,18 +21,24 @@ 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 {
|
||||||
|
|
||||||
public Main plugin;
|
public Main plugin;
|
||||||
|
|
||||||
public Listeners(Main instance) {
|
public Listeners(Main instance) {
|
||||||
this.plugin = instance;
|
this.plugin = instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
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();
|
||||||
@@ -45,12 +51,13 @@ public class Listeners implements Listener {
|
|||||||
Commands.inVault.remove(p.getName());
|
Commands.inVault.remove(p.getName());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onQuit(PlayerQuitEvent event) {
|
public void onQuit(PlayerQuitEvent event) {
|
||||||
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() {
|
||||||
|
|||||||
@@ -24,9 +24,13 @@ 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}$")) {
|
||||||
@@ -78,7 +90,13 @@ 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;
|
||||||
@@ -100,7 +118,14 @@ public class VaultOperations {
|
|||||||
sender.sendMessage(Lang.TITLE.toString()+ Lang.MUST_BE_NUMBER);
|
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) {
|
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;
|
||||||
@@ -31,7 +36,13 @@ 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;
|
||||||
@@ -45,7 +56,13 @@ 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);
|
||||||
|
|||||||
@@ -12,4 +12,13 @@ economy:
|
|||||||
# Cost to create a vault. You can give players playervaults.free to bypass this.
|
# Cost to create a vault. You can give players playervaults.free to bypass this.
|
||||||
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
|
||||||
Reference in New Issue
Block a user