From e4e1c950b5c04ebb48742379f2fa06272ca1b28c Mon Sep 17 00:00:00 2001 From: KHobbits Date: Sun, 20 May 2012 23:58:03 +0100 Subject: Make /home and /back obey the world perm system. This will prevent players from moving between words using virtually all essentials commands. ATM /warp is excepted, because we already have per warp permissions. Ess3 may see warp permissions altered to: essentials.warp.. --- .../src/com/earth2me/essentials/commands/Commandback.java | 5 +++++ .../src/com/earth2me/essentials/commands/Commandhome.java | 14 ++++++++++++-- Essentials/src/config.yml | 3 ++- 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandback.java b/Essentials/src/com/earth2me/essentials/commands/Commandback.java index 2ad39ceea..d2ed98e69 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandback.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandback.java @@ -16,6 +16,11 @@ public class Commandback extends EssentialsCommand @Override protected void run(final Server server, final User user, final String commandLabel, final String[] args) throws Exception { + if (user.getWorld() != user.getLastLocation().getWorld() && ess.getSettings().isWorldTeleportPermissions() + && !user.isAuthorized("essentials.world." + user.getLastLocation().getWorld().getName())) + { + throw new Exception(_("noPerm", "essentials.world." + user.getLastLocation().getWorld().getName())); + } final Trade charge = new Trade(this.getName(), ess); charge.isAffordableFor(user); user.sendMessage(_("backUsageMsg")); diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandhome.java b/Essentials/src/com/earth2me/essentials/commands/Commandhome.java index f14422efd..bc59f4c2b 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandhome.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandhome.java @@ -54,7 +54,7 @@ public class Commandhome extends EssentialsCommand throw new NoChargeException(); } } - user.getTeleport().home(player, homeName.toLowerCase(Locale.ENGLISH), charge); + goHome(user, player, homeName.toLowerCase(Locale.ENGLISH), charge); } catch (NotEnoughArgumentsException e) { @@ -80,7 +80,7 @@ public class Commandhome extends EssentialsCommand } else if (homes.size() == 1 && player.equals(user)) { - user.getTeleport().home(player, homes.get(0), charge); + goHome(user, player, homes.get(0), charge); } else { @@ -93,4 +93,14 @@ public class Commandhome extends EssentialsCommand } throw new NoChargeException(); } + + private void goHome(final User user, final User player, final String home, final Trade charge) throws Exception + { + if (user.getWorld() != player.getHome(home).getWorld() && ess.getSettings().isWorldTeleportPermissions() + && !user.isAuthorized("essentials.world." + player.getHome(home).getWorld().getName())) + { + throw new Exception(_("noPerm", "essentials.world." + player.getHome(home).getWorld().getName())); + } + user.getTeleport().home(player, home, charge); + } } diff --git a/Essentials/src/config.yml b/Essentials/src/config.yml index c7c9decb0..06ca57ad5 100644 --- a/Essentials/src/config.yml +++ b/Essentials/src/config.yml @@ -284,7 +284,8 @@ death-messages: true no-god-in-worlds: # - world_nether -# Set to true to enable per-world permissions for teleporting with /world, /tp ,/tpa and /tpo. +# Set to true to enable per-world permissions for teleporting between worlds with essentials commands +# This applies to /world, /home, /back, /tp[a|o][here|all], but not warps. # Give someone permission to teleport to a world with essentials.world. world-teleport-permissions: false -- cgit v1.2.3