diff --git a/src/main/java/com/drtshock/playervaults/commands/Commands.java b/src/main/java/com/drtshock/playervaults/commands/Commands.java index 008f4dc..9f8be9c 100644 --- a/src/main/java/com/drtshock/playervaults/commands/Commands.java +++ b/src/main/java/com/drtshock/playervaults/commands/Commands.java @@ -20,11 +20,13 @@ import com.drtshock.playervaults.vaultmanagement.VaultOperations; import com.drtshock.playervaults.vaultmanagement.VaultViewInfo; import com.drtshock.playervaults.PlayerVaults; import com.drtshock.playervaults.util.Lang; +import java.util.Set; import org.bukkit.ChatColor; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; +import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.entity.Player; public class Commands implements CommandExecutor { @@ -38,11 +40,27 @@ public class Commands implements CommandExecutor { case 1: if (VaultOperations.openOwnVault(p, args[0])) { PlayerVaults.IN_VAULT.put(sender.getName(), new VaultViewInfo(sender.getName(), Integer.parseInt(args[0]))); + } else if (sender.hasPermission("playervaults.admin")) { + YamlConfiguration file = PlayerVaults.VM.getPlayerVaultFile(args[0]); + if (file == null) { + sender.sendMessage(Lang.TITLE.toString() + Lang.VAULT_DOES_NOT_EXIST.toString()); + } else { + StringBuilder sb = new StringBuilder(); + for (String key : file.getKeys(false)) { + sb.append(key.replace("vault", "")).append(" "); + } + String vaults = sb.toString().trim(); + sender.sendMessage(Lang.TITLE.toString() + Lang.EXISTING_VAULTS.toString().replaceAll("%p", args[0]).replaceAll("%v", vaults)); + } + } else { + sender.sendMessage(Lang.TITLE.toString() + Lang.MUST_BE_NUMBER.toString()); } break; case 2: if (VaultOperations.openOtherVault(p, args[0], args[1])) { PlayerVaults.IN_VAULT.put(sender.getName(), new VaultViewInfo(args[0], Integer.parseInt(args[1]))); + } else { + // ???? } break; default: diff --git a/src/main/java/com/drtshock/playervaults/listeners/Listeners.java b/src/main/java/com/drtshock/playervaults/listeners/Listeners.java index 96e8dba..60ca5e9 100644 --- a/src/main/java/com/drtshock/playervaults/listeners/Listeners.java +++ b/src/main/java/com/drtshock/playervaults/listeners/Listeners.java @@ -172,7 +172,7 @@ public class Listeners implements Listener { if (!self) { owner = PlayerVaults.SIGNS.getString(world + ";;" + x + ";;" + y + ";;" + z + ".owner"); } - Inventory inv = PlayerVaults.VM.loadVault((self) ? player.getName() : owner, num, VaultOperations.getMaxVaultSize(player)); + Inventory inv = PlayerVaults.VM.loadOwnVault((self) ? player.getName() : owner, num, VaultOperations.getMaxVaultSize(player)); player.openInventory(inv); PlayerVaults.IN_VAULT.put(player.getName(), new VaultViewInfo((self) ? player.getName() : owner, num)); event.setCancelled(true); diff --git a/src/main/java/com/drtshock/playervaults/util/Lang.java b/src/main/java/com/drtshock/playervaults/util/Lang.java index 80ff338..f1db0c5 100644 --- a/src/main/java/com/drtshock/playervaults/util/Lang.java +++ b/src/main/java/com/drtshock/playervaults/util/Lang.java @@ -42,6 +42,7 @@ public enum Lang { CLICK_A_SIGN("click-a-sign", "&fNow click a sign!"), NOT_A_SIGN("not-a-sign", "&cYou must click a sign!"), SET_SIGN("set-sign-success", "&fYou have successfully set a PlayerVault access sign!"), + EXISTING_VAULTS("existing-vaults", "&f%p has vaults: &a%v"), OPEN_WITH_SIGN("open-with-sign", "&fOpening vault &a%v &fof &a%p"); private String path; diff --git a/src/main/java/com/drtshock/playervaults/util/Metrics.java b/src/main/java/com/drtshock/playervaults/util/Metrics.java index 6542ead..a53455a 100644 --- a/src/main/java/com/drtshock/playervaults/util/Metrics.java +++ b/src/main/java/com/drtshock/playervaults/util/Metrics.java @@ -74,7 +74,7 @@ public class Metrics { /** * The base url of the metrics domain */ - private static final String BASE_URL = "http://stats.drtshock.net"; + private static final String BASE_URL = "http://report.mcstats.org"; /** * The url used to report a server's status */ diff --git a/src/main/java/com/drtshock/playervaults/vaultmanagement/VaultManager.java b/src/main/java/com/drtshock/playervaults/vaultmanagement/VaultManager.java index 97535b8..0d9676d 100644 --- a/src/main/java/com/drtshock/playervaults/vaultmanagement/VaultManager.java +++ b/src/main/java/com/drtshock/playervaults/vaultmanagement/VaultManager.java @@ -29,6 +29,7 @@ import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; import org.bukkit.inventory.Inventory; /** @@ -78,7 +79,7 @@ public class VaultManager { * @param holder The holder of the vault. * @param number The vault number. */ - public Inventory loadVault(String holder, int number, int size) { + public Inventory loadOwnVault(String holder, int number, int size) { if (size % 9 != 0) { size = 54; } @@ -90,25 +91,81 @@ public class VaultManager { YamlConfiguration playerFile = getPlayerVaultFile(holder); if (playerFile.getConfigurationSection("vault" + number) == null) { VaultHolder vaultHolder = new VaultHolder(number); - inv = Bukkit.createInventory(vaultHolder, size, ChatColor.DARK_RED + "Vault #" + number); - vaultHolder.setInventory(inv); - } else { - List data = new ArrayList(); - for (int x = 0; x < size; x++) { - String line = playerFile.getString("vault" + number + "." + x); - if (line != null) { - data.add(line); - } else { - data.add("null"); - } + Player player = Bukkit.getPlayer(holder); + if(player == null) { + return null; + } + if (EconomyOperations.payToCreate(player)) { + inv = Bukkit.createInventory(vaultHolder, size, ChatColor.DARK_RED + "Vault #" + number); + vaultHolder.setInventory(inv); + } else { + player.sendMessage(Lang.TITLE.toString() + Lang.INSUFFICIENT_FUNDS.toString()); + return null; + } + } else { + if (getInventory(playerFile, size, number) == null) { + return null; + } else { + inv = getInventory(playerFile, size, number); } - inv = Serialization.toInventory(data, number, size); } PlayerVaults.OPENINVENTORIES.put(info.toString(), inv); } return inv; } + /** + * Load the player's vault and return it. + * + * @param holder The holder of the vault. + * @param number The vault number. + */ + public Inventory loadOtherVault(String holder, int number, int size) { + if (size % 9 != 0) { + size = 54; + } + VaultViewInfo info = new VaultViewInfo(holder, number); + Inventory inv = null; + if (PlayerVaults.OPENINVENTORIES.containsKey(info.toString())) { + inv = PlayerVaults.OPENINVENTORIES.get(info.toString()); + } else { + YamlConfiguration playerFile = getPlayerVaultFile(holder); + if (playerFile.getConfigurationSection("vault" + number) == null) { + return null; + } else { + if (getInventory(playerFile, size, number) == null) { + return null; + } else { + inv = getInventory(playerFile, size, number); + } + } + PlayerVaults.OPENINVENTORIES.put(info.toString(), inv); + } + return inv; + } + + /** + * Get an inventory from file. Returns null if the inventory doesn't exist. + * SHOULD ONLY BE USED INTERNALLY + * + * @param playerFile the YamlConfiguration file. + * @param size the size of the vault. + * @param number the vault number. + * @return inventory if exists, otherwise null. + */ + private Inventory getInventory(YamlConfiguration playerFile, int size, int number) { + List data = new ArrayList(); + for (int x = 0; x < size; x++) { + String line = playerFile.getString("vault" + number + "." + x); + if (line != null) { + data.add(line); + } else { + data.add("null"); + } + } + return Serialization.toInventory(data, number, size); + } + /** * Gets an inventory without storing references to it. Used for dropping a * players inventories on death. diff --git a/src/main/java/com/drtshock/playervaults/vaultmanagement/VaultOperations.java b/src/main/java/com/drtshock/playervaults/vaultmanagement/VaultOperations.java index 566bb74..9a3f43c 100644 --- a/src/main/java/com/drtshock/playervaults/vaultmanagement/VaultOperations.java +++ b/src/main/java/com/drtshock/playervaults/vaultmanagement/VaultOperations.java @@ -57,7 +57,7 @@ public class VaultOperations { * to 54. */ public static int getMaxVaultSize(Player player) { - if(player == null) { + if (player == null) { return 54; } for (int i = 6; i != 0; i--) { @@ -76,32 +76,27 @@ public class VaultOperations { * @return Whether or not the player was allowed to open it. */ public static boolean openOwnVault(Player player, String arg) { - if (arg.matches("^[0-9]{1,2}$")) { - int number; - try { - number = Integer.parseInt(arg); - if (number == 0) { - return false; - } - } catch (NumberFormatException nfe) { - player.sendMessage(Lang.TITLE.toString() + ChatColor.RED + Lang.MUST_BE_NUMBER); + int number; + try { + number = Integer.parseInt(arg); + if (number == 0) { return false; } - if (checkPerms(player, number)) { - if (EconomyOperations.payToOpen(player, number)) { - Inventory inv = PlayerVaults.VM.loadVault(player.getName(), number, getMaxVaultSize(player)); - player.openInventory(inv); - player.sendMessage(Lang.TITLE.toString() + Lang.OPEN_VAULT.toString().replace("%v", arg)); - return true; - } else { - player.sendMessage(Lang.TITLE.toString() + Lang.INSUFFICIENT_FUNDS); - return false; - } + } catch (NumberFormatException nfe) { + return false; + } + if (checkPerms(player, number)) { + if (EconomyOperations.payToOpen(player, number)) { + Inventory inv = PlayerVaults.VM.loadOwnVault(player.getName(), number, getMaxVaultSize(player)); + player.openInventory(inv); + player.sendMessage(Lang.TITLE.toString() + Lang.OPEN_VAULT.toString().replace("%v", arg)); + return true; } else { - player.sendMessage(Lang.TITLE.toString() + Lang.NO_PERMS); + player.sendMessage(Lang.TITLE.toString() + Lang.INSUFFICIENT_FUNDS); + return false; } } else { - player.sendMessage(Lang.TITLE.toString() + Lang.MUST_BE_NUMBER); + player.sendMessage(Lang.TITLE.toString() + Lang.NO_PERMS); } return false; } @@ -116,22 +111,22 @@ public class VaultOperations { */ public static boolean openOtherVault(Player player, String holder, String arg) { if (player.hasPermission("playervaults.admin")) { - if (arg.matches("^[0-9]{1,2}$")) { - int number = 0; - try { - number = Integer.parseInt(arg); - if (number == 0) { - return false; - } - } catch (NumberFormatException nfe) { - player.sendMessage(Lang.TITLE.toString() + ChatColor.RED + Lang.MUST_BE_NUMBER); + int number = 0; + try { + number = Integer.parseInt(arg); + if (number == 0) { + return false; } - Inventory inv = PlayerVaults.VM.loadVault(holder, number, getMaxVaultSize(Bukkit.getPlayerExact(holder))); + } catch (NumberFormatException nfe) { + player.sendMessage(Lang.TITLE.toString() + ChatColor.RED + Lang.MUST_BE_NUMBER); + } + Inventory inv = PlayerVaults.VM.loadOtherVault(holder, number, getMaxVaultSize(Bukkit.getPlayerExact(holder))); + if (inv == null) { + player.sendMessage(Lang.TITLE.toString() + Lang.VAULT_DOES_NOT_EXIST.toString()); + } else { player.openInventory(inv); player.sendMessage(Lang.TITLE.toString() + Lang.OPEN_OTHER_VAULT.toString().replace("%v", arg).replace("%p", holder)); return true; - } else { - player.sendMessage(Lang.TITLE.toString() + Lang.MUST_BE_NUMBER); } } else { player.sendMessage(Lang.TITLE.toString() + Lang.NO_PERMS); diff --git a/src/main/resources/lang.yml b/src/main/resources/lang.yml index 16e0897..72ade32 100644 --- a/src/main/resources/lang.yml +++ b/src/main/resources/lang.yml @@ -17,3 +17,4 @@ insufficient-funds: "&cYou don't have enough money for that!" refund-amount: "&fYou were refunded &a%price &ffor deleting that vault." cost-to-create: "&fYou were charged &c%price &ffor creating that vault." cost-to-open: "&fYou were charged &c%price &ffor opening that vault." +existing-vaults: "&f%p has vaults: &a%v" \ No newline at end of file