Fix sign usage permissions. Resolves #54.

This commit is contained in:
drtshock
2015-04-27 12:31:43 -05:00
parent e14958f2e2
commit 8375d71e3e
4 changed files with 32 additions and 14 deletions
@@ -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;
}
@@ -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);
@@ -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);