diff --git a/src/main/java/world/bentobox/bentobox/api/commands/admin/AdminGetrankCommand.java b/src/main/java/world/bentobox/bentobox/api/commands/admin/AdminGetrankCommand.java index 120cb1b87..7040ba7a3 100644 --- a/src/main/java/world/bentobox/bentobox/api/commands/admin/AdminGetrankCommand.java +++ b/src/main/java/world/bentobox/bentobox/api/commands/admin/AdminGetrankCommand.java @@ -24,6 +24,7 @@ public class AdminGetrankCommand extends CompositeCommand { private Island island; private @Nullable UUID targetUUID; + private @Nullable UUID ownerUUID; public AdminGetrankCommand(CompositeCommand adminCommand) { super(adminCommand, "getrank"); @@ -39,7 +40,7 @@ public class AdminGetrankCommand extends CompositeCommand { @Override public boolean canExecute(User user, String label, List args) { - if (args.size() != 1) { + if (args.size() != 1 && args.size() != 2) { // Show help showHelp(this, user); return false; @@ -50,11 +51,33 @@ public class AdminGetrankCommand extends CompositeCommand { user.sendMessage("general.errors.unknown-player", TextVariables.NAME, args.get(0)); return false; } - island = getIslands().getIsland(getWorld(), targetUUID); - if (island == null) { - user.sendMessage("general.errors.player-has-no-island"); - return false; + + if (args.size() == 1) { + // We want to get the rank of the player on the island he is part of. + // So we have to make sure that this player has an island + if (!getIslands().hasIsland(getWorld(), targetUUID) && !getIslands().inTeam(getWorld(), targetUUID)) { + user.sendMessage("general.errors.player-has-no-island"); + return false; + } + + island = getIslands().getIsland(getWorld(), targetUUID); + } else { + // We want to get the rank of the player on the island of the owner we specify. + // So we have to make sure that the island owner actually owns an island + ownerUUID = getPlayers().getUUID(args.get(1)); + if (ownerUUID == null) { + user.sendMessage("general.errors.unknown-player", TextVariables.NAME, args.get(1)); + return false; + } + + if (!getPlugin().getIslands().hasIsland(getWorld(), ownerUUID)) { + user.sendMessage("general.errors.player-is-not-owner", TextVariables.NAME, args.get(1)); + return false; + } + + island = getIslands().getIsland(getWorld(), ownerUUID); } + return true; } @@ -64,9 +87,9 @@ public class AdminGetrankCommand extends CompositeCommand { RanksManager rm = getPlugin().getRanksManager(); User target = User.getInstance(targetUUID); int currentRank = island.getRank(target); - user.sendMessage("commands.admin.getrank.rank-is", TextVariables.RANK, user.getTranslation(rm.getRank(currentRank))); + user.sendMessage("commands.admin.getrank.rank-is", TextVariables.RANK, user.getTranslation(rm.getRank(currentRank)), + TextVariables.NAME, getPlayers().getName(island.getOwner())); return true; - } @Override @@ -75,7 +98,7 @@ public class AdminGetrankCommand extends CompositeCommand { // Don't show every player on the server. Require at least the first letter return Optional.empty(); } - String lastArg = !args.isEmpty() ? args.get(args.size()-1) : ""; + String lastArg = args.get(args.size() - 1); List options = Bukkit.getOnlinePlayers().stream().map(Player::getName).collect(Collectors.toList()); return Optional.of(Util.tabLimit(options, lastArg)); } diff --git a/src/main/java/world/bentobox/bentobox/api/commands/admin/AdminSetrankCommand.java b/src/main/java/world/bentobox/bentobox/api/commands/admin/AdminSetrankCommand.java index 71185befa..b66e8c0d9 100644 --- a/src/main/java/world/bentobox/bentobox/api/commands/admin/AdminSetrankCommand.java +++ b/src/main/java/world/bentobox/bentobox/api/commands/admin/AdminSetrankCommand.java @@ -83,7 +83,7 @@ public class AdminSetrankCommand extends CompositeCommand { } if (!getPlugin().getIslands().hasIsland(getWorld(), ownerUUID)) { - user.sendMessage("commands.admin.setrank.name-not-owner", TextVariables.NAME, args.get(2)); + user.sendMessage("general.errors.player-is-not-owner", TextVariables.NAME, args.get(2)); return false; } } diff --git a/src/main/resources/locales/en-US.yml b/src/main/resources/locales/en-US.yml index cd9dd2f8c..fa2fea94c 100644 --- a/src/main/resources/locales/en-US.yml +++ b/src/main/resources/locales/en-US.yml @@ -25,6 +25,7 @@ general: already-have-island: "&c You already have an island!" no-safe-location-found: "&c Could not find a safe spot to teleport you to on the island." not-owner: "&c You are not the owner of the island!" + player-is-not-owner: "&b [name] &c is not the owner of an island!" not-in-team: "&c That player is not in your team!" offline-player: "&c That player is offline or doesn't exist." unknown-player: "&c [name] is an unknown player!" @@ -223,16 +224,15 @@ commands: description: "teleport to a player's island" manual: "&c No safe warp found! Manually tp near to &b [location] &c and check it out" getrank: - parameters: "" - description: "get a player's rank on their island" - rank-is: "&a Rank is [rank] on their island." + parameters: " [island owner]" + description: "get a player's rank on their island or the island of the owner" + rank-is: "&a Rank is &b [rank] &a on &b [name]&a 's island." setrank: parameters: " [island owner]" description: "set a player's rank on their island or the island of the owner" unknown-rank: "&c Unknown rank!" not-possible: "&c Rank must be higher than visitor." rank-set: "&a Rank set from &b [from] &a to &b [to] &a on &b [name]&a 's island." - name-not-owner: "&b [name] &c is not the owner of an island." setspawn: description: "set an island as spawn for this world" already-spawn: "&c This island is already a spawn!" diff --git a/src/test/java/world/bentobox/bentobox/api/commands/admin/AdminGetrankCommandTest.java b/src/test/java/world/bentobox/bentobox/api/commands/admin/AdminGetrankCommandTest.java index 25c809362..703c45b0b 100644 --- a/src/test/java/world/bentobox/bentobox/api/commands/admin/AdminGetrankCommandTest.java +++ b/src/test/java/world/bentobox/bentobox/api/commands/admin/AdminGetrankCommandTest.java @@ -179,6 +179,7 @@ public class AdminGetrankCommandTest { when(pm.getUUID(any())).thenReturn(targetUUID); when(im.getIsland(any(), any(UUID.class))).thenReturn(island); when(user.getTranslation(anyString())).thenReturn("member"); + when(im.hasIsland(any(), any(UUID.class))).thenReturn(true); assertTrue(c.canExecute(user, "", Collections.singletonList("tastybento"))); } @@ -192,10 +193,14 @@ public class AdminGetrankCommandTest { testCanExecuteKnownPlayerHasIslandSuccess(); when(island.getRank(any())).thenReturn(RanksManager.SUB_OWNER_RANK); when(user.getTranslation(any())).thenReturn("sub-owner", "sub-owner"); + when(island.getOwner()).thenReturn(targetUUID); + when(pm.getName(targetUUID)).thenReturn("tastybento"); assertTrue(c.execute(user, "", Collections.singletonList("tastybento"))); verify(user).sendMessage(eq("commands.admin.getrank.rank-is"), eq("[rank]"), - eq("sub-owner")); + eq("sub-owner"), + eq("[name]"), + eq("tastybento")); } /**