diff --git a/src/main/java/com/drtshock/playervaults/PlayerVaults.java b/src/main/java/com/drtshock/playervaults/PlayerVaults.java index 12d7768..03178f2 100644 --- a/src/main/java/com/drtshock/playervaults/PlayerVaults.java +++ b/src/main/java/com/drtshock/playervaults/PlayerVaults.java @@ -16,8 +16,11 @@ */ package com.drtshock.playervaults; -import com.drtshock.playervaults.commands.Commands; +import com.drtshock.playervaults.commands.DeleteCommand; +import com.drtshock.playervaults.commands.SignCommand; import com.drtshock.playervaults.commands.SignSetInfo; +import com.drtshock.playervaults.commands.VaultCommand; +import com.drtshock.playervaults.commands.WorkbenchCommand; import com.drtshock.playervaults.listeners.Listeners; import com.drtshock.playervaults.tasks.Cleanup; import com.drtshock.playervaults.tasks.UUIDConversion; @@ -45,7 +48,6 @@ public class PlayerVaults extends JavaPlugin { private boolean update = false; private String newVersion = ""; private String link = ""; - private Commands commands; private HashMap setSign = new HashMap<>(); private HashMap inVault = new HashMap<>(); private HashMap openInventories = new HashMap<>(); @@ -68,11 +70,10 @@ public class PlayerVaults extends JavaPlugin { loadConfig(); loadSigns(); checkUpdate(); - commands = new Commands(); - getCommand("pv").setExecutor(commands); - getCommand("pvdel").setExecutor(commands); - getCommand("pvsign").setExecutor(commands); - getCommand("workbench").setExecutor(commands); + getCommand("pv").setExecutor(new VaultCommand()); + getCommand("pvdel").setExecutor(new DeleteCommand()); + getCommand("pvsign").setExecutor(new SignCommand()); + getCommand("workbench").setExecutor(new WorkbenchCommand()); setupEconomy(); startMetrics(); diff --git a/src/main/java/com/drtshock/playervaults/commands/Commands.java b/src/main/java/com/drtshock/playervaults/commands/Commands.java deleted file mode 100644 index eccb06d..0000000 --- a/src/main/java/com/drtshock/playervaults/commands/Commands.java +++ /dev/null @@ -1,151 +0,0 @@ -/* - * Copyright (C) 2013 drtshock - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package com.drtshock.playervaults.commands; - -import com.drtshock.playervaults.PlayerVaults; -import com.drtshock.playervaults.util.Lang; -import com.drtshock.playervaults.vaultmanagement.UUIDVaultManager; -import com.drtshock.playervaults.vaultmanagement.VaultOperations; -import com.drtshock.playervaults.vaultmanagement.VaultViewInfo; -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.OfflinePlayer; -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 { - - @Override - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - if (cmd.getName().equalsIgnoreCase("pv")) { - if (sender instanceof Player) { - Player p = (Player) sender; - if (PlayerVaults.getInstance().getInVault().containsKey(p.getName())) - return true; // don't let them open another vault. - switch (args.length) { - case 1: - if (VaultOperations.openOwnVault(p, args[0])) { - PlayerVaults.getInstance().getInVault().put(sender.getName(), new VaultViewInfo(sender.getName(), Integer.parseInt(args[0]))); - } else if (sender.hasPermission("playervaults.admin")) { - OfflinePlayer player = Bukkit.getOfflinePlayer(args[0]); - if (player == null) { - sender.sendMessage(Lang.TITLE.toString() + "Cannot find player " + args[0]); - break; - } - YamlConfiguration file = UUIDVaultManager.getInstance().getPlayerVaultFile(player.getUniqueId()); - 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: - Player player = Bukkit.getPlayer(args[0]); - if (player == null) break; - if (VaultOperations.openOtherVault(p, player, args[1])) { - PlayerVaults.getInstance().getInVault().put(sender.getName(), new VaultViewInfo(args[0], Integer.parseInt(args[1]))); - } else { - sender.sendMessage(Lang.TITLE.toString() + "Failed to open vault."); - } - break; - default: - sender.sendMessage(Lang.TITLE + "/pv "); - sender.sendMessage(Lang.TITLE + "/pv "); - } - } else { - sender.sendMessage(Lang.TITLE.toString() + ChatColor.RED + Lang.PLAYER_ONLY); - } - } else if (cmd.getName().equalsIgnoreCase("pvdel")) { - switch (args.length) { - case 1: - if (sender instanceof Player) { - Player p = (Player) sender; - VaultOperations.deleteOwnVault(p, args[0]); - } else { - sender.sendMessage(Lang.TITLE.toString() + ChatColor.RED + Lang.PLAYER_ONLY); - } - break; - case 2: - Player player = Bukkit.getPlayer(args[0]); - if (player == null) break; - VaultOperations.deleteOtherVault(sender, player, args[1]); - break; - default: - sender.sendMessage(Lang.TITLE + "/pvdel "); - sender.sendMessage(Lang.TITLE + "/pvdel "); - } - } else if (cmd.getName().equalsIgnoreCase("workbench")) { - if (sender.hasPermission("playervaults.workbench")) { - if (sender instanceof Player) { - Player player = (Player) sender; - player.openWorkbench(null, true); - player.sendMessage(Lang.TITLE.toString() + Lang.OPEN_WORKBENCH); - } else { - sender.sendMessage(Lang.TITLE.toString() + Lang.PLAYER_ONLY); - } - } else { - sender.sendMessage(Lang.TITLE.toString() + Lang.NO_PERMS); - } - } else if (cmd.getName().equalsIgnoreCase("pvsign")) { - if (sender.hasPermission("playervaults.signs.set")) { - if (sender instanceof Player) { - if (args.length == 1) { - int i; - try { - i = Integer.parseInt(args[0]); - } catch (NumberFormatException nfe) { - sender.sendMessage(Lang.TITLE.toString() + Lang.MUST_BE_NUMBER); - sender.sendMessage(Lang.TITLE.toString() + "Usage: /" + label + " <#>"); - return true; - } - PlayerVaults.getInstance().getSetSign().put(sender.getName(), new SignSetInfo(i)); - sender.sendMessage(Lang.TITLE.toString() + Lang.CLICK_A_SIGN); - } else if (args.length >= 2) { - int i; - try { - i = Integer.parseInt(args[1]); - } catch (NumberFormatException nfe) { - sender.sendMessage(Lang.TITLE.toString() + Lang.MUST_BE_NUMBER); - sender.sendMessage(Lang.TITLE.toString() + "Usage: /" + label + " <#>"); - return true; - } - PlayerVaults.getInstance().getSetSign().put(sender.getName(), new SignSetInfo(args[0].toLowerCase(), i)); - sender.sendMessage(Lang.TITLE.toString() + Lang.CLICK_A_SIGN); - } else { - sender.sendMessage(Lang.TITLE.toString() + Lang.INVALID_ARGS); - } - } else { - sender.sendMessage(Lang.TITLE.toString() + Lang.PLAYER_ONLY); - } - } else { - sender.sendMessage(Lang.TITLE.toString() + Lang.NO_PERMS); - } - } - return true; - } -} diff --git a/src/main/java/com/drtshock/playervaults/commands/DeleteCommand.java b/src/main/java/com/drtshock/playervaults/commands/DeleteCommand.java new file mode 100644 index 0000000..360544f --- /dev/null +++ b/src/main/java/com/drtshock/playervaults/commands/DeleteCommand.java @@ -0,0 +1,39 @@ +package com.drtshock.playervaults.commands; + +import com.drtshock.playervaults.util.Lang; +import com.drtshock.playervaults.vaultmanagement.VaultOperations; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class DeleteCommand implements CommandExecutor { + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + switch (args.length) { + case 1: + if (sender instanceof Player) { + VaultOperations.deleteOwnVault((Player) sender, args[0]); + } else { + sender.sendMessage(Lang.TITLE.toString() + ChatColor.RED + Lang.PLAYER_ONLY); + } + break; + case 2: + Player player = Bukkit.getPlayer(args[0]); + if (player == null) { + sender.sendMessage(Lang.TITLE.toString() + Lang.NO_PLAYER_FOUND.toString().replaceAll("%p", args[0])); + break; + } + + VaultOperations.deleteOtherVault(sender, player, args[1]); + break; + default: + sender.sendMessage(Lang.TITLE + "/pvdel "); + sender.sendMessage(Lang.TITLE + "/pvdel "); + } + + return true; + } +} \ No newline at end of file diff --git a/src/main/java/com/drtshock/playervaults/commands/SignCommand.java b/src/main/java/com/drtshock/playervaults/commands/SignCommand.java new file mode 100644 index 0000000..1de2f38 --- /dev/null +++ b/src/main/java/com/drtshock/playervaults/commands/SignCommand.java @@ -0,0 +1,49 @@ +package com.drtshock.playervaults.commands; + +import com.drtshock.playervaults.PlayerVaults; +import com.drtshock.playervaults.util.Lang; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class SignCommand implements CommandExecutor { + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + if (sender.hasPermission("playervaults.signs.set")) { + if (sender instanceof Player) { + if (args.length == 1) { + int i; + try { + i = Integer.parseInt(args[0]); + } catch (NumberFormatException nfe) { + sender.sendMessage(Lang.TITLE.toString() + Lang.MUST_BE_NUMBER); + sender.sendMessage(Lang.TITLE.toString() + "Usage: /" + label + " <#>"); + return true; + } + PlayerVaults.getInstance().getSetSign().put(sender.getName(), new SignSetInfo(i)); + sender.sendMessage(Lang.TITLE.toString() + Lang.CLICK_A_SIGN); + } else if (args.length >= 2) { + int i; + try { + i = Integer.parseInt(args[1]); + } catch (NumberFormatException nfe) { + sender.sendMessage(Lang.TITLE.toString() + Lang.MUST_BE_NUMBER); + sender.sendMessage(Lang.TITLE.toString() + "Usage: /" + label + " <#>"); + return true; + } + PlayerVaults.getInstance().getSetSign().put(sender.getName(), new SignSetInfo(args[0].toLowerCase(), i)); + sender.sendMessage(Lang.TITLE.toString() + Lang.CLICK_A_SIGN); + } else { + sender.sendMessage(Lang.TITLE.toString() + Lang.INVALID_ARGS); + } + } else { + sender.sendMessage(Lang.TITLE.toString() + Lang.PLAYER_ONLY); + } + } else { + sender.sendMessage(Lang.TITLE.toString() + Lang.NO_PERMS); + } + + return true; + } +} \ No newline at end of file diff --git a/src/main/java/com/drtshock/playervaults/commands/VaultCommand.java b/src/main/java/com/drtshock/playervaults/commands/VaultCommand.java new file mode 100644 index 0000000..b3753b8 --- /dev/null +++ b/src/main/java/com/drtshock/playervaults/commands/VaultCommand.java @@ -0,0 +1,76 @@ +package com.drtshock.playervaults.commands; + +import com.drtshock.playervaults.PlayerVaults; +import com.drtshock.playervaults.util.Lang; +import com.drtshock.playervaults.vaultmanagement.UUIDVaultManager; +import com.drtshock.playervaults.vaultmanagement.VaultOperations; +import com.drtshock.playervaults.vaultmanagement.VaultViewInfo; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.OfflinePlayer; +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 VaultCommand implements CommandExecutor { + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + if (sender instanceof Player) { + Player player = (Player) sender; + if (PlayerVaults.getInstance().getInVault().containsKey(player.getName())) { + // don't let them open another vault. + return true; + } + + switch (args.length) { + case 1: + if (VaultOperations.openOwnVault(player, args[0])) { + PlayerVaults.getInstance().getInVault().put(sender.getName(), new VaultViewInfo(sender.getName(), Integer.parseInt(args[0]))); + } else if (sender.hasPermission("playervaults.admin")) { + OfflinePlayer searchPlayer = Bukkit.getOfflinePlayer(args[0]); + if (searchPlayer == null) { + sender.sendMessage(Lang.TITLE.toString() + Lang.NO_PLAYER_FOUND.toString().replaceAll("%p", args[0])); + break; + } + + YamlConfiguration file = UUIDVaultManager.getInstance().getPlayerVaultFile(searchPlayer.getUniqueId()); + 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(" "); + } + + sender.sendMessage(Lang.TITLE.toString() + Lang.EXISTING_VAULTS.toString().replaceAll("%p", args[0]).replaceAll("%v", sb.toString().trim())); + } + } else { + sender.sendMessage(Lang.TITLE.toString() + Lang.MUST_BE_NUMBER.toString()); + } + break; + case 2: + Player searchPlayer = Bukkit.getPlayer(args[0]); + if (searchPlayer == null) { + sender.sendMessage(Lang.TITLE.toString() + Lang.NO_PLAYER_FOUND.toString().replaceAll("%p", args[0])); + break; + } + + if (VaultOperations.openOtherVault(player, searchPlayer, args[1])) { + PlayerVaults.getInstance().getInVault().put(sender.getName(), new VaultViewInfo(args[0], Integer.parseInt(args[1]))); + } else { + sender.sendMessage(Lang.TITLE.toString() + "Failed to open vault."); + } + break; + default: + sender.sendMessage(Lang.TITLE + "/pv "); + sender.sendMessage(Lang.TITLE + "/pv "); + } + } else { + sender.sendMessage(Lang.TITLE.toString() + ChatColor.RED + Lang.PLAYER_ONLY); + } + + return true; + } +} \ No newline at end of file diff --git a/src/main/java/com/drtshock/playervaults/commands/WorkbenchCommand.java b/src/main/java/com/drtshock/playervaults/commands/WorkbenchCommand.java new file mode 100644 index 0000000..0e87079 --- /dev/null +++ b/src/main/java/com/drtshock/playervaults/commands/WorkbenchCommand.java @@ -0,0 +1,25 @@ +package com.drtshock.playervaults.commands; + +import com.drtshock.playervaults.util.Lang; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class WorkbenchCommand implements CommandExecutor { + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + if (sender.hasPermission("playervaults.workbench")) { + if (sender instanceof Player) { + ((Player) sender).openWorkbench(null, true); + sender.sendMessage(Lang.TITLE.toString() + Lang.OPEN_WORKBENCH); + } else { + sender.sendMessage(Lang.TITLE.toString() + Lang.PLAYER_ONLY); + } + } else { + sender.sendMessage(Lang.TITLE.toString() + Lang.NO_PERMS); + } + + return true; + } +} \ No newline at end of file diff --git a/src/main/java/com/drtshock/playervaults/util/Lang.java b/src/main/java/com/drtshock/playervaults/util/Lang.java index 296d586..a220c86 100644 --- a/src/main/java/com/drtshock/playervaults/util/Lang.java +++ b/src/main/java/com/drtshock/playervaults/util/Lang.java @@ -44,7 +44,8 @@ public enum Lang { SET_SIGN("set-sign-success", "&fYou have successfully set a PlayerVault access sign!"), EXISTING_VAULTS("existing-vaults", "&f%p has vaults: &a%v"), VAULT_TITLE("vault-title", "&4Vault #%number"), - OPEN_WITH_SIGN("open-with-sign", "&fOpening vault &a%v &fof &a%p"); + OPEN_WITH_SIGN("open-with-sign", "&fOpening vault &a%v &fof &a%p"), + NO_PLAYER_FOUND("no-player-found", "&cCannot find player &a%p"); private String path; private String def; diff --git a/src/main/java/com/drtshock/playervaults/vaultmanagement/UUIDVaultManager.java b/src/main/java/com/drtshock/playervaults/vaultmanagement/UUIDVaultManager.java index 2323aab..640873c 100644 --- a/src/main/java/com/drtshock/playervaults/vaultmanagement/UUIDVaultManager.java +++ b/src/main/java/com/drtshock/playervaults/vaultmanagement/UUIDVaultManager.java @@ -68,8 +68,9 @@ public class UUIDVaultManager { if (size % 9 != 0) { size = 54; } + VaultViewInfo info = new VaultViewInfo(player.getUniqueId().toString(), number); - Inventory inv = null; + Inventory inv; if (PlayerVaults.getInstance().getOpenInventories().containsKey(info.toString())) { inv = PlayerVaults.getInstance().getOpenInventories().get(info.toString()); } else { @@ -92,6 +93,7 @@ public class UUIDVaultManager { } PlayerVaults.getInstance().getOpenInventories().put(info.toString(), inv); } + return inv; } @@ -172,8 +174,7 @@ public class UUIDVaultManager { } public boolean vaultExists(UUID holder, int number) { - YamlConfiguration playerFile = getPlayerVaultFile(holder); - return playerFile.contains("vault" + number); + return getPlayerVaultFile(holder).contains("vault" + number); } /** @@ -191,17 +192,21 @@ public class UUIDVaultManager { if (!file.exists()) { return; } + FileConfiguration playerFile = YamlConfiguration.loadConfiguration(file); if (file.exists()) { playerFile.set("vault" + number, null); playerFile.save(file); } + OfflinePlayer player = Bukkit.getPlayer(holder); if (player != null && sender.getName().equalsIgnoreCase(player.getName())) { sender.sendMessage(Lang.TITLE.toString() + Lang.DELETE_VAULT.toString().replace("%v", String.valueOf(number))); } else { sender.sendMessage(Lang.TITLE.toString() + Lang.DELETE_OTHER_VAULT.toString().replace("%v", String.valueOf(number)).replaceAll("%p", player.getName())); } + + PlayerVaults.getInstance().getOpenInventories().remove(new VaultViewInfo(holder.toString(), number).toString()); } /** diff --git a/src/main/java/com/drtshock/playervaults/vaultmanagement/VaultOperations.java b/src/main/java/com/drtshock/playervaults/vaultmanagement/VaultOperations.java index 82ea767..c8a77fc 100644 --- a/src/main/java/com/drtshock/playervaults/vaultmanagement/VaultOperations.java +++ b/src/main/java/com/drtshock/playervaults/vaultmanagement/VaultOperations.java @@ -84,6 +84,7 @@ public class VaultOperations { } catch (NumberFormatException nfe) { return false; } + if (checkPerms(player, number)) { if (EconomyOperations.payToOpen(player, number)) { Inventory inv = UUIDVaultManager.getInstance().loadOwnVault(player, number, getMaxVaultSize(player)); @@ -147,11 +148,12 @@ public class VaultOperations { number = Integer.parseInt(arg); if (number == 0) { player.sendMessage(Lang.TITLE.toString() + ChatColor.RED + Lang.MUST_BE_NUMBER); + return; } - return; } catch (NumberFormatException nfe) { player.sendMessage(Lang.TITLE.toString() + ChatColor.RED + Lang.MUST_BE_NUMBER); } + try { if (EconomyOperations.refundOnDelete(player, number)) { UUIDVaultManager.getInstance().deleteVault(player, player.getUniqueId(), number); @@ -184,6 +186,7 @@ public class VaultOperations { } catch (NumberFormatException nfe) { sender.sendMessage(Lang.TITLE.toString() + ChatColor.RED + Lang.MUST_BE_NUMBER); } + try { UUIDVaultManager.getInstance().deleteVault(sender, holder.getUniqueId(), number); } catch (IOException e) { diff --git a/src/main/resources/lang.yml b/src/main/resources/lang.yml index e3e92eb..c829992 100644 --- a/src/main/resources/lang.yml +++ b/src/main/resources/lang.yml @@ -19,4 +19,5 @@ 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." vault-number: "&4Vault #%number" -existing-vaults: "&f%p has vaults: &a%v" \ No newline at end of file +existing-vaults: "&f%p has vaults: &a%v" +no-player-found: "&cCannot find player &a%p" \ No newline at end of file