From 79fe9b53f87c524077ab9d5ccaa4a9de0605d923 Mon Sep 17 00:00:00 2001 From: Jamie Sinn Date: Mon, 7 May 2018 12:35:42 -0400 Subject: [PATCH] Delete all vaults (1-100) --- .../playervaults/commands/DeleteCommand.java | 8 +++ .../playervaults/translations/Lang.java | 2 +- .../vaultmanagement/VaultManager.java | 53 +++++++++++++++++-- .../vaultmanagement/VaultOperations.java | 41 +++++++------- 4 files changed, 81 insertions(+), 23 deletions(-) diff --git a/src/main/java/com/drtshock/playervaults/commands/DeleteCommand.java b/src/main/java/com/drtshock/playervaults/commands/DeleteCommand.java index f653b93..1acf5ec 100644 --- a/src/main/java/com/drtshock/playervaults/commands/DeleteCommand.java +++ b/src/main/java/com/drtshock/playervaults/commands/DeleteCommand.java @@ -34,11 +34,19 @@ public class DeleteCommand implements CommandExecutor { break; } + // TODO: fix the stupid message inconsistencies where sometimes this class sends, sometimes vaultops does. + if (args[1].equalsIgnoreCase("all")) { + VaultOperations.deleteOtherAllVaults(sender, player.getUniqueId()); + sender.sendMessage(Lang.TITLE.toString() + Lang.DELETE_OTHER_VAULT_ALL.toString().replaceAll("%p", player.getName())); + break; + } + VaultOperations.deleteOtherVault(sender, player, args[1]); break; default: sender.sendMessage(Lang.TITLE + "/pvdel "); sender.sendMessage(Lang.TITLE + "/pvdel "); + sender.sendMessage(Lang.TITLE + "/pvdel all"); } return true; diff --git a/src/main/java/com/drtshock/playervaults/translations/Lang.java b/src/main/java/com/drtshock/playervaults/translations/Lang.java index 13bb53b..855d309 100644 --- a/src/main/java/com/drtshock/playervaults/translations/Lang.java +++ b/src/main/java/com/drtshock/playervaults/translations/Lang.java @@ -29,9 +29,9 @@ public enum Lang { INVALID_ARGS("invalid-args", "&cInvalid args!"), DELETE_VAULT("delete-vault", "&fDeleted vault &a%v"), DELETE_OTHER_VAULT("delete-other-vault", "&fDeleted vault &a%v &fof &a%p"), + DELETE_OTHER_VAULT_ALL("delete-other-vault", "&4Deleted all vaults belonging to &a%p"), PLAYER_ONLY("player-only", "&cSorry but that can only be run by a player!"), MUST_BE_NUMBER("must-be-number", "&cYou need to specify a valid number."), - DELETE_VAULT_ERROR("delete-vault-error", "&cError deleting vault :("), NO_PERMS("no-permissions", "&cYou don''t have permission for that!"), INSUFFICIENT_FUNDS("insufficient-funds", "&cYou don''t have enough money for that!"), REFUND_AMOUNT("refund-amount", "&fYou were refunded &a%price &ffor deleting that vault."), diff --git a/src/main/java/com/drtshock/playervaults/vaultmanagement/VaultManager.java b/src/main/java/com/drtshock/playervaults/vaultmanagement/VaultManager.java index dee5e99..64d4981 100644 --- a/src/main/java/com/drtshock/playervaults/vaultmanagement/VaultManager.java +++ b/src/main/java/com/drtshock/playervaults/vaultmanagement/VaultManager.java @@ -14,7 +14,9 @@ import org.bukkit.scheduler.BukkitRunnable; import java.io.File; import java.io.IOException; +import java.util.HashSet; import java.util.Map; +import java.util.Set; import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; import java.util.logging.Level; @@ -179,6 +181,38 @@ public class VaultManager { return getPlayerVaultFile(holder).contains(String.format(VAULTKEY, number)); } + /** + * Gets the numbers belonging to all their vaults. + * + * @param holder + * @return a set of Integers, which are player's vaults' numbers (fuck grammar). + */ + public Set getVaultNumbers(UUID holder) { + Set vaults = new HashSet<>(); + YamlConfiguration file = getPlayerVaultFile(holder); + if (file == null) { + return vaults; + } + + for (String s : file.getKeys(false)) { + try { + // vault% + int number = Integer.valueOf(s.substring(4)); + vaults.add(number); + } catch (NumberFormatException e) { + // silent + } + } + + + return vaults; + } + + public void deleteAllVaults(UUID holder) { + removeCachedPlayerVaultFile(holder); + deletePlayerVaultFile(holder); + } + /** * Deletes a players vault. * @@ -187,7 +221,7 @@ public class VaultManager { * @param number The vault number. * @throws IOException Uh oh! */ - public void deleteVault(CommandSender sender, final UUID holder, final int number) throws IOException { + public void deleteVault(CommandSender sender, final UUID holder, final int number) { new BukkitRunnable() { @Override public void run() { @@ -232,9 +266,7 @@ public class VaultManager { } public void removeCachedPlayerVaultFile(UUID holder) { - if (cachedVaultFiles.containsKey(holder)) { - cachedVaultFiles.remove(holder); - } + cachedVaultFiles.remove(holder); } /** @@ -254,6 +286,19 @@ public class VaultManager { return this.loadPlayerVaultFile(holder, true); } + /** + * Attempt to delete a vault file. + * + * @param holder UUID of the holder. + * @return true if successful, otherwise false. + */ + public void deletePlayerVaultFile(UUID holder) { + File file = new File(this.directory, holder.toString() + ".yml"); + if (file.exists()) { + file.delete(); + } + } + public YamlConfiguration loadPlayerVaultFile(UUID uniqueId, boolean createIfNotFound) { if (!this.directory.exists()) { this.directory.mkdir(); diff --git a/src/main/java/com/drtshock/playervaults/vaultmanagement/VaultOperations.java b/src/main/java/com/drtshock/playervaults/vaultmanagement/VaultOperations.java index 8185fb3..c8b55bc 100644 --- a/src/main/java/com/drtshock/playervaults/vaultmanagement/VaultOperations.java +++ b/src/main/java/com/drtshock/playervaults/vaultmanagement/VaultOperations.java @@ -26,7 +26,6 @@ import org.bukkit.entity.Player; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.InventoryView; -import java.io.IOException; import java.util.UUID; import java.util.concurrent.atomic.AtomicBoolean; @@ -70,7 +69,6 @@ public class VaultOperations { * * @param sender The person to check. * @param number The vault number. - * * @return Whether or not they have permission. */ public static boolean checkPerms(CommandSender sender, int number) { @@ -89,7 +87,6 @@ public class VaultOperations { * Get the max size vault a player is allowed to have. * * @param uuid that is having his permissions checked. - * * @return max size as integer. If no max size is set then it will default to 54. */ public static int getMaxVaultSize(UUID uuid) { @@ -100,7 +97,6 @@ public class VaultOperations { * Get the max size vault a player is allowed to have. * * @param player that is having his permissions checked. - * * @return max size as integer. If no max size is set then it will default to 54. */ public static int getMaxVaultSize(OfflinePlayer player) { @@ -120,7 +116,6 @@ public class VaultOperations { * * @param player The player to open to. * @param arg The vault number to open. - * * @return Whether or not the player was allowed to open it. */ public static boolean openOwnVault(Player player, String arg) { @@ -164,7 +159,6 @@ public class VaultOperations { * @param player The player to open to. * @param arg The vault number to open. * @param isCommand - if player is opening via a command or not. - * * @return Whether or not the player was allowed to open it. */ public static boolean openOwnVault(Player player, String arg, boolean isCommand) { @@ -181,7 +175,6 @@ public class VaultOperations { * @param player The player to open to. * @param holder The user to whom the requested vault belongs. * @param arg The vault number to open. - * * @return Whether or not the player was allowed to open it. */ public static boolean openOtherVault(Player player, UUID holder, String arg) { @@ -241,13 +234,10 @@ public class VaultOperations { player.sendMessage(Lang.TITLE.toString() + ChatColor.RED + Lang.MUST_BE_NUMBER); } - try { - if (EconomyOperations.refundOnDelete(player, number)) { - VaultManager.getInstance().deleteVault(player, player.getUniqueId(), number); - } - } catch (IOException e) { - player.sendMessage(Lang.TITLE.toString() + Lang.DELETE_VAULT_ERROR); + if (EconomyOperations.refundOnDelete(player, number)) { + VaultManager.getInstance().deleteVault(player, player.getUniqueId(), number); } + } else { player.sendMessage(Lang.TITLE.toString() + Lang.MUST_BE_NUMBER); } @@ -277,11 +267,7 @@ public class VaultOperations { sender.sendMessage(Lang.TITLE.toString() + ChatColor.RED + Lang.MUST_BE_NUMBER); } - try { - VaultManager.getInstance().deleteVault(sender, holder.getUniqueId(), number); - } catch (IOException e) { - sender.sendMessage(Lang.TITLE.toString() + Lang.DELETE_VAULT_ERROR); - } + VaultManager.getInstance().deleteVault(sender, holder.getUniqueId(), number); } else { sender.sendMessage(Lang.TITLE.toString() + Lang.MUST_BE_NUMBER); } @@ -290,6 +276,25 @@ public class VaultOperations { } } + /** + * Delete all of a player's vaults (Currently goes to vault #100) + * + * @param sender The sender executing the deletion. + * @param holder The user to whom the deleted vault belongs. + */ + public static void deleteOtherAllVaults(CommandSender sender, UUID holder) { + if (isLocked() || holder == null) { + return; + } + + if (sender.hasPermission("playervaults.delete.all")) { + VaultManager.getInstance().deleteAllVaults(holder); + PlayerVaults.getInstance().getLogger().warning(String.format("%s deleted ALL vaults belonging to %s", sender.getName(), holder.toString())); + } else { + sender.sendMessage(Lang.TITLE.toString() + Lang.NO_PERMS); + } + } + private static boolean isNumber(String check) { try { Integer.parseInt(check);