From a9f191c1a19cd4618be5d950de5220f0d748240f Mon Sep 17 00:00:00 2001 From: GenOpenDiesel <83091816+GenOpenDiesel@users.noreply.github.com> Date: Tue, 9 Jun 2026 13:39:35 +0200 Subject: [PATCH] Add essentials.tptoggle.bypass permission Staff with bypass, tpo, or tpohere can teleport to players who disabled tptoggle via /tp and related commands. Co-authored-by: Cursor --- .../main/java/com/earth2me/essentials/UserData.java | 12 ++++++++++++ .../com/earth2me/essentials/commands/Commandtp.java | 8 ++++---- .../com/earth2me/essentials/commands/Commandtpa.java | 2 +- .../earth2me/essentials/commands/Commandtpahere.java | 2 +- .../earth2me/essentials/commands/Commandtphere.java | 2 +- Essentials/src/main/resources/plugin.yml | 2 ++ 6 files changed, 21 insertions(+), 7 deletions(-) diff --git a/Essentials/src/main/java/com/earth2me/essentials/UserData.java b/Essentials/src/main/java/com/earth2me/essentials/UserData.java index 2f2a2c8e87b..fc8ff6d8bdf 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/UserData.java +++ b/Essentials/src/main/java/com/earth2me/essentials/UserData.java @@ -399,6 +399,18 @@ public boolean isTeleportEnabled() { return holder.teleportEnabled(); } + public boolean isTeleportAllowedFor(final IUser teleporter) { + if (isTeleportEnabled()) { + return true; + } + if (teleporter == null) { + return true; + } + return teleporter.isAuthorized("essentials.tptoggle.bypass") + || teleporter.isAuthorized("essentials.tpo") + || teleporter.isAuthorized("essentials.tpohere"); + } + public void setTeleportEnabled(final boolean set) { holder.teleportEnabled(set); config.save(); diff --git a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandtp.java b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandtp.java index f596ee094fd..fa74dd1da16 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandtp.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandtp.java @@ -27,7 +27,7 @@ public void run(final Server server, final User user, final String commandLabel, case 1: final User player = getPlayer(server, user, args, 0, false, true); - if (!player.isTeleportEnabled()) { + if (!player.isTeleportAllowedFor(user)) { throw new TranslatableException("teleportDisabled", player.getDisplayName()); } @@ -78,7 +78,7 @@ public void run(final Server server, final User user, final String commandLabel, throw new NotEnoughArgumentsException(user.playerTl("teleportInvalidLocation")); } final Location locposother = new Location(target2.getWorld(), x, y, z, target2.getLocation().getYaw(), target2.getLocation().getPitch()); - if (!target2.isTeleportEnabled()) { + if (!target2.isTeleportAllowedFor(user)) { throw new TranslatableException("teleportDisabled", target2.getDisplayName()); } user.sendTl("teleporting", locposother.getWorld().getName(), locposother.getBlockX(), locposother.getBlockY(), locposother.getBlockZ()); @@ -96,10 +96,10 @@ public void run(final Server server, final User user, final String commandLabel, } final User target = getPlayer(server, user, args, 0); final User toPlayer = getPlayer(server, user, args, 1); - if (!target.isTeleportEnabled()) { + if (!target.isTeleportAllowedFor(user)) { throw new TranslatableException("teleportDisabled", target.getDisplayName()); } - if (!toPlayer.isTeleportEnabled()) { + if (!toPlayer.isTeleportAllowedFor(user)) { throw new TranslatableException("teleportDisabled", toPlayer.getDisplayName()); } if (target.getWorld() != toPlayer.getWorld() && ess.getSettings().isWorldTeleportPermissions() && !user.isAuthorized("essentials.worlds." + toPlayer.getWorld().getName())) { diff --git a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandtpa.java b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandtpa.java index 151d5654130..1d2c0fe204f 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandtpa.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandtpa.java @@ -30,7 +30,7 @@ public void run(final Server server, final User user, final String commandLabel, if (!player.isAuthorized("essentials.tpaccept")) { throw new TranslatableException("teleportNoAcceptPermission", player.getDisplayName()); } - if (!player.isTeleportEnabled()) { + if (!player.isTeleportAllowedFor(user)) { throw new TranslatableException("teleportDisabled", player.getDisplayName()); } if (user.getWorld() != player.getWorld() && ess.getSettings().isWorldTeleportPermissions() && !user.isAuthorized("essentials.worlds." + player.getWorld().getName())) { diff --git a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandtpahere.java b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandtpahere.java index 71b35889e79..e58cd21b448 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandtpahere.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandtpahere.java @@ -26,7 +26,7 @@ public void run(final Server server, final User user, final String commandLabel, if (!player.isAuthorized("essentials.tpaccept")) { throw new TranslatableException("teleportNoAcceptPermission", player.getDisplayName()); } - if (!player.isTeleportEnabled()) { + if (!player.isTeleportAllowedFor(user)) { throw new TranslatableException("teleportDisabled", player.getDisplayName()); } if (user.getWorld() != player.getWorld() && ess.getSettings().isWorldTeleportPermissions() && !user.isAuthorized("essentials.worlds." + user.getWorld().getName())) { diff --git a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandtphere.java b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandtphere.java index 895bad58c27..98622aa8ce4 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandtphere.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandtphere.java @@ -17,7 +17,7 @@ public Commandtphere() { @Override public void run(final Server server, final User user, final String commandLabel, final String[] args) throws Exception { final User player = getPlayer(server, user, args, 0); - if (!player.isTeleportEnabled()) { + if (!player.isTeleportAllowedFor(user)) { throw new TranslatableException("teleportDisabled", player.getDisplayName()); } if (user.getWorld() != player.getWorld() && ess.getSettings().isWorldTeleportPermissions() && !user.isAuthorized("essentials.worlds." + user.getWorld().getName())) { diff --git a/Essentials/src/main/resources/plugin.yml b/Essentials/src/main/resources/plugin.yml index 68496ebbbdf..c6de4616b75 100644 --- a/Essentials/src/main/resources/plugin.yml +++ b/Essentials/src/main/resources/plugin.yml @@ -1350,6 +1350,8 @@ permissions: description: Allows access to the /tptoggle command essentials.tptoggle.others: description: Allows access to the /tptoggle command for other players + essentials.tptoggle.bypass: + description: Allows the bearer to bypass the tptoggle setting for other players essentials.tpr: description: Allows access to the /tpr command essentials.settpr: