diff --git a/src/main/java/com/drtshock/playervaults/commands/VaultCommand.java b/src/main/java/com/drtshock/playervaults/commands/VaultCommand.java index b48aa04..22827e9 100644 --- a/src/main/java/com/drtshock/playervaults/commands/VaultCommand.java +++ b/src/main/java/com/drtshock/playervaults/commands/VaultCommand.java @@ -54,8 +54,8 @@ public class VaultCommand implements CommandExecutor { } break; case 2: - Player searchPlayer = Bukkit.getPlayer(args[0]); - if (searchPlayer == null) { + OfflinePlayer searchPlayer = Bukkit.getOfflinePlayer(args[0]); + if (searchPlayer == null || !searchPlayer.hasPlayedBefore()) { sender.sendMessage(Lang.TITLE.toString() + Lang.NO_PLAYER_FOUND.toString().replaceAll("%p", args[0])); break; } diff --git a/src/main/java/com/drtshock/playervaults/listeners/Listeners.java b/src/main/java/com/drtshock/playervaults/listeners/Listeners.java index bd8bf03..adde236 100644 --- a/src/main/java/com/drtshock/playervaults/listeners/Listeners.java +++ b/src/main/java/com/drtshock/playervaults/listeners/Listeners.java @@ -152,24 +152,31 @@ public class Listeners implements Listener { int y = l.getBlockY(); int z = l.getBlockZ(); if (plugin.getSigns().getKeys(false).contains(world + ";;" + x + ";;" + y + ";;" + z)) { - int num = PlayerVaults.getInstance().getSigns().getInt(world + ";;" + x + ";;" + y + ";;" + z + ".chest"); - if ((player.hasPermission("playervaults.signs.use") && (player.hasPermission("playervaults.signs.bypass") || VaultOperations.checkPerms(player, 99)))) { + int num = PlayerVaults.getInstance().getSigns().getInt(world + ";;" + x + ";;" + y + ";;" + z + ".chest", 1); + if (player.hasPermission("playervaults.signs.use") || player.hasPermission("playervaults.signs.bypass")) { boolean self = PlayerVaults.getInstance().getSigns().getBoolean(world + ";;" + x + ";;" + y + ";;" + z + ".self", false); - String owner = null; - if (!self) { - owner = PlayerVaults.getInstance().getSigns().getString(world + ";;" + x + ";;" + y + ";;" + z + ".owner"); - } + String owner = self ? player.getName() : PlayerVaults.getInstance().getSigns().getString(world + ";;" + x + ";;" + y + ";;" + z + ".owner"); OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(owner != null ? owner : event.getPlayer().getName()); // Not best way but :\ - if (offlinePlayer == null) { + if (offlinePlayer == null || !offlinePlayer.hasPlayedBefore()) { player.sendMessage(Lang.TITLE.toString() + Lang.VAULT_DOES_NOT_EXIST.toString()); return; } if (self) { - Inventory inv = UUIDVaultManager.getInstance().loadOwnVault(player, num, VaultOperations.getMaxVaultSize(player)); - player.openInventory(inv); + // We already checked that they can use signs, now lets check if they have this many vaults. + if(VaultOperations.checkPerms(player, num)) { + Inventory inv = UUIDVaultManager.getInstance().loadOwnVault(player, num, VaultOperations.getMaxVaultSize(player)); + player.openInventory(inv); + } else { + player.sendMessage(Lang.TITLE.toString() + Lang.NO_PERMS.toString()); + return; // Otherwise it would try to add vault view info down there. + } } else { Inventory inv = UUIDVaultManager.getInstance().loadOtherVault(offlinePlayer.getUniqueId(), num, VaultOperations.getMaxVaultSize(offlinePlayer)); - player.openInventory(inv); + if(inv == null) { + player.sendMessage(Lang.TITLE.toString() + Lang.VAULT_DOES_NOT_EXIST.toString()); + } else { + player.openInventory(inv); + } } PlayerVaults.getInstance().getInVault().put(player.getName(), new VaultViewInfo((self) ? player.getName() : owner, num)); event.setCancelled(true); diff --git a/src/main/java/com/drtshock/playervaults/vaultmanagement/VaultOperations.java b/src/main/java/com/drtshock/playervaults/vaultmanagement/VaultOperations.java index ced215b..e558b5a 100644 --- a/src/main/java/com/drtshock/playervaults/vaultmanagement/VaultOperations.java +++ b/src/main/java/com/drtshock/playervaults/vaultmanagement/VaultOperations.java @@ -167,11 +167,15 @@ public class VaultOperations { * * @return Whether or not the player was allowed to open it. */ - public static boolean openOtherVault(Player player, Player holder, String arg) { + public static boolean openOtherVault(Player player, OfflinePlayer holder, String arg) { if (isLocked()) { return false; } if (player.hasPermission("playervaults.admin")) { + if(!holder.hasPlayedBefore()) { + player.sendMessage(Lang.TITLE.toString() + Lang.VAULT_DOES_NOT_EXIST.toString()); + return false; + } int number = 0; try { number = Integer.parseInt(arg); diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 924f4e1..fb523fe 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -19,4 +19,11 @@ commands: aliases: [wb] pvconvert: description: Convert other plugins to PlayerVaults - aliases: [vaultconvert] \ No newline at end of file + aliases: [vaultconvert] +permissions: + playervaults.commands.use: + description: Open own vault with command. + default: true + playervaults.admin: + description: Admin vault operations. + default: op \ No newline at end of file