diff --git a/src/main/java/me/goodandevil/skyblock/api/SkyBlockAPI.java b/src/main/java/me/goodandevil/skyblock/api/SkyBlockAPI.java index 559e32a4..a6650a92 100644 --- a/src/main/java/me/goodandevil/skyblock/api/SkyBlockAPI.java +++ b/src/main/java/me/goodandevil/skyblock/api/SkyBlockAPI.java @@ -143,6 +143,18 @@ public class SkyBlockAPI { return implementation.getIslandManager().hasPermission(player, setting); } + /** + * Checks if a player has permission at a location at an Island for a Setting + * + * @return true of conditions met, false otherwise + */ + public static boolean hasPermission(Player player, Location location, String setting) { + Preconditions.checkArgument(player != null, "Cannot check permission to null player"); + Preconditions.checkArgument(location != null, "Cannot check permission to null location"); + + return implementation.getIslandManager().hasPermission(player, location, setting); + } + /** * Checks the permission of a Setting for a Role at a Location * diff --git a/src/main/java/me/goodandevil/skyblock/island/IslandManager.java b/src/main/java/me/goodandevil/skyblock/island/IslandManager.java index 25328f5f..13a75059 100644 --- a/src/main/java/me/goodandevil/skyblock/island/IslandManager.java +++ b/src/main/java/me/goodandevil/skyblock/island/IslandManager.java @@ -766,11 +766,15 @@ public class IslandManager { } public boolean hasPermission(Player player, String setting) { + return hasPermission(player, player.getLocation(), setting); + } + + public boolean hasPermission(Player player, org.bukkit.Location location, String setting) { if (hasIsland(player)) { Island island = getIsland(skyblock.getPlayerDataManager().getPlayerData(player).getOwner()); for (Location.World worldList : Location.World.values()) { - if (LocationUtil.isLocationAtLocationRadius(player.getLocation(), + if (LocationUtil.isLocationAtLocationRadius(location, island.getLocation(worldList, Location.Environment.Island), island.getRadius())) { if (island.hasRole(IslandRole.Member, player.getUniqueId())) { if (!island.getSetting(IslandRole.Member, setting).getStatus()) { @@ -787,7 +791,7 @@ public class IslandManager { Island island = getIslands().get(islandList); for (Location.World worldList : Location.World.values()) { - if (LocationUtil.isLocationAtLocationRadius(player.getLocation(), + if (LocationUtil.isLocationAtLocationRadius(location, island.getLocation(worldList, Location.Environment.Island), island.getRadius())) { if (player.hasPermission("skyblock.bypass." + setting.toLowerCase()) || player.hasPermission("skyblock.bypass.*") || player.hasPermission("skyblock.*")) { diff --git a/src/main/java/me/goodandevil/skyblock/listeners/Interact.java b/src/main/java/me/goodandevil/skyblock/listeners/Interact.java index 2a0165fc..e76dae45 100644 --- a/src/main/java/me/goodandevil/skyblock/listeners/Interact.java +++ b/src/main/java/me/goodandevil/skyblock/listeners/Interact.java @@ -719,7 +719,7 @@ public class Interact implements Listener { if (player.getWorld().getName().equals(skyblock.getWorldManager().getWorld(Location.World.Normal).getName()) || player.getWorld().getName() .equals(skyblock.getWorldManager().getWorld(Location.World.Nether).getName())) { - if (!islandManager.hasPermission(player, "ArmorStand")) { + if (!islandManager.hasPermission(player, "ArmorStandUse")) { event.setCancelled(true); skyblock.getMessageManager().sendMessage(player,