diff --git a/src/me/aleksilassila/islands/Islands.java b/src/me/aleksilassila/islands/Islands.java index e2171db..4bedf27 100644 --- a/src/me/aleksilassila/islands/Islands.java +++ b/src/me/aleksilassila/islands/Islands.java @@ -203,8 +203,6 @@ public int getSmallestIslandSize() { @NotNull public String getCreatePermission(int islandSize) { - // FIXME: Explain in wiki - for (String definedSize : definedIslandSizes.keySet()) { if (definedIslandSizes.get(definedSize) == islandSize) return Permissions.command.create + "." + definedSize; } diff --git a/src/me/aleksilassila/islands/commands/IslandCommands.java b/src/me/aleksilassila/islands/commands/IslandCommands.java index b65941d..42b0fc7 100644 --- a/src/me/aleksilassila/islands/commands/IslandCommands.java +++ b/src/me/aleksilassila/islands/commands/IslandCommands.java @@ -41,7 +41,7 @@ public boolean onCommand(CommandSender sender, Command command, String label, St plugin.confirmations.remove(player.getUniqueId().toString()); - if (!Permissions.checkPermission(player, Permissions.command.visit)) { + if (!player.hasPermission(Permissions.command.visit)) { player.sendMessage(Messages.error.NO_PERMISSION); return true; } @@ -52,7 +52,7 @@ public boolean onCommand(CommandSender sender, Command command, String label, St return true; } - if (!canTeleport(player) && !Permissions.checkPermission(player, Permissions.bypass.home)) { + if (!canTeleport(player) && !player.hasPermission(Permissions.bypass.home)) { player.sendMessage(Messages.error.COOLDOWN(teleportCooldown(player))); return true; } @@ -87,7 +87,7 @@ public boolean onCommand(CommandSender sender, Command command, String label, St plugin.confirmations.remove(player.getUniqueId().toString()); if (args.length == 1 && args[0].equalsIgnoreCase("list") || label.equalsIgnoreCase("homes")) { - if (!Permissions.checkPermission(player, Permissions.command.listHomes)) { + if (!player.hasPermission(Permissions.command.listHomes)) { player.sendMessage(Messages.error.NO_PERMISSION); return true; } @@ -103,12 +103,12 @@ public boolean onCommand(CommandSender sender, Command command, String label, St return true; } else { - if (!Permissions.checkPermission(player, Permissions.command.home)) { + if (!player.hasPermission(Permissions.command.home)) { player.sendMessage(Messages.error.NO_PERMISSION); return true; } - if (!canTeleport(player) && !Permissions.checkPermission(player, Permissions.bypass.home)) { + if (!canTeleport(player) && !player.hasPermission(Permissions.bypass.home)) { player.sendMessage(Messages.error.COOLDOWN(teleportCooldown(player))); return true; } @@ -123,12 +123,12 @@ public boolean onCommand(CommandSender sender, Command command, String label, St } } - if (player.getWorld().getName().equals("world_nether") && !Permissions.checkPermission(player, Permissions.bypass.home)) { + if (player.getWorld().getName().equals("world_nether") && !player.hasPermission(Permissions.bypass.home)) { player.sendMessage(Messages.info.IN_OVERWORLD); return true; } - if (player.getWorld().getName().equals("world") && !Permissions.checkPermission(player, Permissions.bypass.home)) { + if (player.getWorld().getName().equals("world") && !player.hasPermission(Permissions.bypass.home)) { // Check if is on surface Location playerLocation = player.getLocation(); diff --git a/src/me/aleksilassila/islands/commands/IslandManagmentCommands.java b/src/me/aleksilassila/islands/commands/IslandManagmentCommands.java index e0cced1..2085d27 100644 --- a/src/me/aleksilassila/islands/commands/IslandManagmentCommands.java +++ b/src/me/aleksilassila/islands/commands/IslandManagmentCommands.java @@ -43,7 +43,7 @@ public boolean onCommand(CommandSender sender, Command command, String label, St Player player = (Player) sender; - if (!Permissions.checkPermission(player, Permissions.command.island)) { + if (!player.hasPermission(Permissions.command.island)) { player.sendMessage(Messages.error.NO_PERMISSION); return true; } diff --git a/src/me/aleksilassila/islands/commands/TrustCommands.java b/src/me/aleksilassila/islands/commands/TrustCommands.java index 474c04a..6a9c0d9 100644 --- a/src/me/aleksilassila/islands/commands/TrustCommands.java +++ b/src/me/aleksilassila/islands/commands/TrustCommands.java @@ -32,7 +32,7 @@ public boolean onCommand(CommandSender sender, Command command, String label, St plugin.confirmations.remove(player.getUniqueId().toString()); - if (!Permissions.checkPermission(player, Permissions.command.untrust)) { + if (!player.hasPermission(Permissions.command.untrust)) { player.sendMessage(Messages.error.NO_PERMISSION); return true; } @@ -57,7 +57,7 @@ public boolean onCommand(CommandSender sender, Command command, String label, St return true; } - if (!ownerUUID.equals(player.getUniqueId().toString()) && !Permissions.checkPermission(player, Permissions.bypass.untrust)) { + if (!ownerUUID.equals(player.getUniqueId().toString()) && !player.hasPermission(Permissions.bypass.untrust)) { player.sendMessage(Messages.error.NOT_OWNED); return true; } @@ -90,7 +90,7 @@ public boolean onCommand(CommandSender sender, Command command, String label, St plugin.confirmations.remove(player.getUniqueId().toString()); - if (!Permissions.checkPermission(player, Permissions.command.trust)) { + if (!player.hasPermission(Permissions.command.trust)) { player.sendMessage(Messages.error.NO_PERMISSION); return true; } @@ -108,7 +108,7 @@ public boolean onCommand(CommandSender sender, Command command, String label, St return true; } - if (!ownerUUID.equals(player.getUniqueId().toString()) && !Permissions.checkPermission(player, Permissions.bypass.trust)) { + if (!ownerUUID.equals(player.getUniqueId().toString()) && !player.hasPermission(Permissions.bypass.trust)) { player.sendMessage(Messages.error.NOT_OWNED); return true; } @@ -141,7 +141,7 @@ public boolean onCommand(CommandSender sender, Command command, String label, St plugin.confirmations.remove(player.getUniqueId().toString()); - if (!Permissions.checkPermission(player, Permissions.command.listTrusted)) { + if (!player.hasPermission(Permissions.command.listTrusted)) { player.sendMessage(Messages.error.NO_PERMISSION); return true; } @@ -154,7 +154,7 @@ public boolean onCommand(CommandSender sender, Command command, String label, St return true; } - if (!ownerUUID.equals(player.getUniqueId().toString()) && !Permissions.checkPermission(player, Permissions.bypass.listTrusted)) { + if (!ownerUUID.equals(player.getUniqueId().toString()) && !player.hasPermission(Permissions.bypass.listTrusted)) { player.sendMessage(Messages.error.NOT_OWNED); return true; } diff --git a/src/me/aleksilassila/islands/commands/subcommands/createSubcommand.java b/src/me/aleksilassila/islands/commands/subcommands/createSubcommand.java index 38401b9..80378ee 100644 --- a/src/me/aleksilassila/islands/commands/subcommands/createSubcommand.java +++ b/src/me/aleksilassila/islands/commands/subcommands/createSubcommand.java @@ -29,7 +29,7 @@ public createSubcommand(Islands plugin) { @Override public void onCommand(Player player, String[] args, boolean confirmed) { - if (!Permissions.checkPermission(player, Permissions.command.create)) { + if (!player.hasPermission(Permissions.command.create)) { player.sendMessage(Messages.error.NO_PERMISSION); return; } @@ -38,7 +38,7 @@ public void onCommand(Player player, String[] args, boolean confirmed) { String permissionRequired = plugin.getCreatePermission(islandSize); - if (!Permissions.checkPermission(player, permissionRequired)) { + if (!player.hasPermission(permissionRequired)) { player.sendMessage(Messages.error.NO_PERMISSION); return; } @@ -78,7 +78,7 @@ public void onCommand(Player player, String[] args, boolean confirmed) { } } - if (previousIslands >= islandsLimit && !Permissions.checkPermission(player, Permissions.bypass.create)) { + if (previousIslands >= islandsLimit && !player.hasPermission(Permissions.bypass.create)) { player.sendMessage(Messages.error.ISLAND_LIMIT); return; } diff --git a/src/me/aleksilassila/islands/commands/subcommands/deleteSubcommand.java b/src/me/aleksilassila/islands/commands/subcommands/deleteSubcommand.java index ca267f3..03fdb2c 100644 --- a/src/me/aleksilassila/islands/commands/subcommands/deleteSubcommand.java +++ b/src/me/aleksilassila/islands/commands/subcommands/deleteSubcommand.java @@ -20,7 +20,7 @@ public deleteSubcommand(Islands plugin) { @Override public void onCommand(Player player, String[] args, boolean confirmed) { - if (!Permissions.checkPermission(player, Permissions.command.delete)) { + if (!player.hasPermission(Permissions.command.delete)) { player.sendMessage(Messages.error.NO_PERMISSION); return; } @@ -38,7 +38,7 @@ public void onCommand(Player player, String[] args, boolean confirmed) { } if (!layout.getUUID(islandId).equals(player.getUniqueId().toString()) - && !Permissions.checkPermission(player, Permissions.bypass.delete)) { + && !player.hasPermission(Permissions.bypass.delete)) { player.sendMessage(Messages.error.UNAUTHORIZED); return; } diff --git a/src/me/aleksilassila/islands/commands/subcommands/giveSubcommand.java b/src/me/aleksilassila/islands/commands/subcommands/giveSubcommand.java index eedeb24..d378c30 100644 --- a/src/me/aleksilassila/islands/commands/subcommands/giveSubcommand.java +++ b/src/me/aleksilassila/islands/commands/subcommands/giveSubcommand.java @@ -22,7 +22,7 @@ public giveSubcommand(Islands plugin) { @Override public void onCommand(Player player, String[] args, boolean confirmed) { - if (!Permissions.checkPermission(player, Permissions.command.give)) { + if (!player.hasPermission(Permissions.command.give)) { player.sendMessage(Messages.error.NO_PERMISSION); return; } @@ -32,8 +32,8 @@ public void onCommand(Player player, String[] args, boolean confirmed) { return; } - if ((args.length != 1 && !Permissions.checkPermission(player, Permissions.bypass.give)) - || (Permissions.checkPermission(player, Permissions.bypass.give) && args.length > 1)) { + if ((args.length != 1 && !player.hasPermission(Permissions.bypass.give)) + || (player.hasPermission(Permissions.bypass.give) && args.length > 1)) { player.sendMessage(Messages.help.GIVE); return; } @@ -46,7 +46,7 @@ public void onCommand(Player player, String[] args, boolean confirmed) { } ConfigurationSection section = plugin.getIslandsConfig().getConfigurationSection(islandId + ".UUID"); if ((section != null && layout.getUUID(islandId).equals(player.getUniqueId().toString())) - || Permissions.checkPermission(player, Permissions.bypass.give)) { + || player.hasPermission(Permissions.bypass.give)) { if (plugin.getIslandsConfig().getBoolean(islandId + ".public")) { if (!confirmed) { player.sendMessage(Messages.info.CONFIRM); diff --git a/src/me/aleksilassila/islands/commands/subcommands/nameSubcommand.java b/src/me/aleksilassila/islands/commands/subcommands/nameSubcommand.java index 070db7a..ed228b5 100644 --- a/src/me/aleksilassila/islands/commands/subcommands/nameSubcommand.java +++ b/src/me/aleksilassila/islands/commands/subcommands/nameSubcommand.java @@ -22,7 +22,7 @@ public nameSubcommand(Islands plugin) { @Override public void onCommand(Player player, String[] args, boolean confirmed) { - if (!Permissions.checkPermission(player, Permissions.command.name)) { + if (!player.hasPermission(Permissions.command.name)) { player.sendMessage(Messages.error.NO_PERMISSION); return; } @@ -45,7 +45,7 @@ public void onCommand(Player player, String[] args, boolean confirmed) { } if (layout.getUUID(islandId).equals(player.getUniqueId().toString()) - || Permissions.checkPermission(player, Permissions.bypass.name)) { + || player.hasPermission(Permissions.bypass.name)) { if (layout.getIslandByName(args[0]) != null) { player.sendMessage(Messages.error.NAME_TAKEN); return; diff --git a/src/me/aleksilassila/islands/commands/subcommands/recreateSubcommand.java b/src/me/aleksilassila/islands/commands/subcommands/recreateSubcommand.java index 2a603ef..708a6f0 100644 --- a/src/me/aleksilassila/islands/commands/subcommands/recreateSubcommand.java +++ b/src/me/aleksilassila/islands/commands/subcommands/recreateSubcommand.java @@ -32,7 +32,7 @@ public void onCommand(Player player, String[] args, boolean confirmed) { String islandId; Biome targetBiome; - if (!Permissions.checkPermission(player, Permissions.command.recreate)) { + if (!player.hasPermission(Permissions.command.recreate)) { player.sendMessage(Messages.error.NO_PERMISSION); return; } @@ -41,7 +41,7 @@ public void onCommand(Player player, String[] args, boolean confirmed) { String permissionRequired = plugin.getCreatePermission(islandSize); - if (!Permissions.checkPermission(player, permissionRequired)) { + if (!player.hasPermission(permissionRequired)) { player.sendMessage(Messages.error.NO_PERMISSION); return; } @@ -73,7 +73,7 @@ public void onCommand(Player player, String[] args, boolean confirmed) { if (islandId == null || (!layout.getUUID(islandId).equals(player.getUniqueId().toString()) - && !Permissions.checkPermission(player, Permissions.bypass.recreate))) { + && !player.hasPermission(Permissions.bypass.recreate))) { player.sendMessage(Messages.error.UNAUTHORIZED); return; } diff --git a/src/me/aleksilassila/islands/commands/subcommands/setSpawnSubcommand.java b/src/me/aleksilassila/islands/commands/subcommands/setSpawnSubcommand.java index 1d0578b..5d841e3 100644 --- a/src/me/aleksilassila/islands/commands/subcommands/setSpawnSubcommand.java +++ b/src/me/aleksilassila/islands/commands/subcommands/setSpawnSubcommand.java @@ -20,7 +20,7 @@ public setSpawnSubcommand(Islands plugin) { @Override public void onCommand(Player player, String[] args, boolean confirmed) { - if (!Permissions.checkPermission(player, Permissions.command.setSpawn)) { + if (!player.hasPermission(Permissions.command.setSpawn)) { player.sendMessage(Messages.error.NO_PERMISSION); return; } @@ -38,7 +38,7 @@ public void onCommand(Player player, String[] args, boolean confirmed) { } if (layout.getUUID(islandId).equals(player.getUniqueId().toString()) - || Permissions.checkPermission(player, Permissions.bypass.setSpawn)) { + || player.hasPermission(Permissions.bypass.setSpawn)) { layout.setSpawnPoint(islandId, player.getLocation().getBlockX(), player.getLocation().getBlockZ()); player.sendMessage(Messages.success.SPAWNPOINT_CHANGED); diff --git a/src/me/aleksilassila/islands/commands/subcommands/unnameSubcommand.java b/src/me/aleksilassila/islands/commands/subcommands/unnameSubcommand.java index 15e8114..9796885 100644 --- a/src/me/aleksilassila/islands/commands/subcommands/unnameSubcommand.java +++ b/src/me/aleksilassila/islands/commands/subcommands/unnameSubcommand.java @@ -20,7 +20,7 @@ public unnameSubcommand(Islands plugin) { @Override public void onCommand(Player player, String[] args, boolean confirmed) { - if (!Permissions.checkPermission(player, Permissions.command.unname)) { + if (!player.hasPermission(Permissions.command.unname)) { player.sendMessage(Messages.error.NO_PERMISSION); return; } @@ -49,7 +49,7 @@ public void onCommand(Player player, String[] args, boolean confirmed) { } if (layout.getUUID(islandId).equals(player.getUniqueId().toString()) - || Permissions.checkPermission(player, Permissions.bypass.unname)) { + || player.hasPermission(Permissions.bypass.unname)) { layout.unnameIsland(islandId); player.sendMessage(Messages.success.UNNAMED); diff --git a/src/me/aleksilassila/islands/listeners/IslandsListener.java b/src/me/aleksilassila/islands/listeners/IslandsListener.java index 82180a2..b7ff24e 100644 --- a/src/me/aleksilassila/islands/listeners/IslandsListener.java +++ b/src/me/aleksilassila/islands/listeners/IslandsListener.java @@ -124,7 +124,7 @@ public void onDamageEvent(EntityDamageEvent e) { @EventHandler public void onEntityDamageEvent(EntityDamageByEntityEvent e) { if (e.getEntity().getWorld().equals(plugin.islandsWorld) && e.getDamager() instanceof Player) { - if (Permissions.checkPermission((Player) e.getDamager(), Permissions.bypass.interactEverywhere)) return; + if (e.getDamager().hasPermission(Permissions.bypass.interactEverywhere)) return; int x = e.getEntity().getLocation().getBlockX(); int z = e.getEntity().getLocation().getBlockZ(); @@ -145,7 +145,7 @@ public void onEntityDamageEvent(EntityDamageByEntityEvent e) { @EventHandler // Player interact restriction public void onPlayerInteract(PlayerInteractEvent event) { if (event.getClickedBlock() == null) return; - if (Permissions.checkPermission(event.getPlayer(), Permissions.bypass.interactEverywhere)) return; + if (event.getPlayer().hasPermission(Permissions.bypass.interactEverywhere)) return; if (event.getPlayer().getWorld().equals(plugin.islandsWorld)) { int x = event.getClickedBlock().getX(); @@ -169,7 +169,7 @@ public void onPlayerInteract(PlayerInteractEvent event) { @EventHandler private void onBlockPlace(BlockPlaceEvent event) { if (event.isCancelled()) return; - if (Permissions.checkPermission(event.getPlayer(), Permissions.bypass.interactEverywhere)) return; + if (event.getPlayer().hasPermission(Permissions.bypass.interactEverywhere)) return; if (event.getBlock().getWorld().equals(plugin.islandsWorld)) { int x = event.getBlock().getX(); diff --git a/src/me/aleksilassila/islands/utils/Permissions.java b/src/me/aleksilassila/islands/utils/Permissions.java index 29a9c52..f1e49f7 100644 --- a/src/me/aleksilassila/islands/utils/Permissions.java +++ b/src/me/aleksilassila/islands/utils/Permissions.java @@ -1,25 +1,6 @@ package me.aleksilassila.islands.utils; -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; - -import java.util.Arrays; - public class Permissions { - public static boolean checkPermission(Player player, String permission) { - if (player.hasPermission(permission)) return true; - if (player.hasPermission("*")) return true; - - String[] parts = permission.split("\\."); - - for (int index = 0; index < parts.length; index++) { - String joined = String.join(".", Arrays.copyOfRange(parts, 0, index + 1)); - if (player.hasPermission(joined + ".*")) return true; - } - - return false; - } - public static class bypass { public static final String create = "islands.bypass.islandLimit"; // Create unlimited islands public static final String recreate = "islands.bypass.recreate"; // Recreate any island diff --git a/src/plugin.yml b/src/plugin.yml index dc6e818..f850afe 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -28,3 +28,133 @@ commands: untrust: description: Untrust a player usage: / player +permissions: + islands.*: + description: All islands commands and bypasses + children: + islands.command.*: true + islands.bypass.*: true + islands.command.*: + description: Access to all island commands + children: + islands.command: true + islands.command.create: true + islands.command.recreate: true + islands.command.delete: true + islands.command.give: true + islands.command.name: true + islands.command.unname: true + islands.command.home.*: true + islands.command.turst.*: true + islands.command.visit: true + islands.command.setspawn: true + islands.command.create.custom: true + islands.bypass.*: + description: Access to all island bypasses + children: + islands.bypass.islandLimit: true + islands.bypass.recreate: true + islands.bypass.delete: true + islands.bypass.give: true + islands.bypass.name: true + islands.bypass.unname: true + islands.bypass.trust: true + islands.bypass.setspawn: true + islands.bypass.untrust: true + islands.bypass.protection: true + islands.bypass.home: true + islands.bypass.trust.list: true + islands.command.home.*: + description: Access to home commands + children: + islands.command.home: true + islands.command.home.list: true + islands.command.trust.*: + description: Access to trust commands + children: + islands.command.trust: true + islands.command.trust.list: true + islands.command.untrust: true + + islands.command: + description: Access to island command + default: true + islands.command.create: + description: Access to island create command + default: true + islands.command.recreate: + description: Access to island recreate command + default: true + islands.command.home: + description: Access to home command + default: true + islands.command.home.list: + description: Access to homes command + default: true + islands.command.visit: + description: Access to island visit command + default: true + islands.command.setspawn: + description: Access to island setspawn command + default: true + islands.command.create.custom: + description: Access to island create custom size command + default: "op" + islands.command.delete: + description: Access to island delete command + default: "op" + islands.command.give: + description: Access to island command + default: "op" + islands.command.name: + description: Access to island name command + default: "op" + islands.command.unname: + description: Access to island unname command + default: "op" + islands.command.turst: + description: Access to trust command + default: "op" + islands.command.turst.list: + description: Access to trusted command + default: "op" + islands.command.untrust: + description: Access to untrust command + default: "op" + + islands.bypass.islandLimit: + description: Bypass island limit restrictions + default: "op" + islands.bypass.recreate: + description: Bypass recreate restrictions + default: "op" + islands.bypass.delete: + description: Bypass delete restrictions + default: "op" + islands.bypass.give: + description: Bypass give restrictions + default: "op" + islands.bypass.name: + description: Bypass name restrictions + default: "op" + islands.bypass.unname: + description: Bypass unname restrictions + default: "op" + islands.bypass.setspawn: + description: Bypass setspawn restrictions + default: "op" + islands.bypass.trust: + description: Bypass trust restrictions + default: "op" + islands.bypass.untrust: + description: Bypass untrust restrictions + default: "op" + islands.bypass.turst.list: + description: Bypass trusted restrictions + default: "op" + islands.bypass.protection: + description: Bypass protection restrictions + default: "op" + islands.bypass.home: + description: Bypass home restrictions + default: "op"