Skip to content

Commit 899b831

Browse files
committed
Add world-specific teleport permissions with admin bypass support
1 parent e072221 commit 899b831

File tree

8 files changed

+26
-1
lines changed

8 files changed

+26
-1
lines changed

multiworld-bukkit/src/main/java/com/dev7ex/multiworld/listener/user/UserTeleportWorldListener.java

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import com.dev7ex.multiworld.api.bukkit.user.BukkitWorldUser;
77
import com.dev7ex.multiworld.api.bukkit.world.BukkitWorldHolder;
88
import com.dev7ex.multiworld.api.bukkit.world.location.BukkitWorldLocation;
9+
import com.dev7ex.multiworld.api.user.WorldUser;
910
import org.bukkit.Bukkit;
1011
import org.bukkit.entity.Player;
1112
import org.bukkit.event.EventHandler;
@@ -33,7 +34,7 @@ public UserTeleportWorldListener(@NotNull final MultiWorldBukkitApi multiWorldAp
3334
*/
3435
@EventHandler(priority = EventPriority.NORMAL)
3536
public void onUserGameModeChange(final WorldUserTeleportWorldEvent event) {
36-
final Player player = Bukkit.getPlayer(event.getUser().getUniqueId());
37+
final Player player = event.getUser().getEntity();
3738
if (!super.getConfiguration().isAutoGameModeEnabled()) {
3839
return;
3940
}
@@ -48,6 +49,23 @@ public void onUserGameModeChange(final WorldUserTeleportWorldEvent event) {
4849
player.setGameMode(event.getNextWorldHolder().getGameMode());
4950
}
5051

52+
@EventHandler(priority = EventPriority.NORMAL)
53+
public void handleUserTeleportWorld(final WorldUserTeleportWorldEvent event) {
54+
final BukkitWorldUser worldUser = event.getUser();
55+
final Player player = event.getUser().getEntity();
56+
final BukkitWorldHolder nextHolder = event.getNextWorldHolder();
57+
58+
if (player.hasPermission("multiworld.command.world.teleport.admin")) {
59+
return;
60+
}
61+
if (!player.hasPermission("multiworld.command.world.teleport." + nextHolder.getName())) {
62+
player.sendMessage(super.getTranslationProvider().getMessage(player, "commands.world.teleport.missing-permission")
63+
.replaceAll("%prefix%", super.getPrefix())
64+
.replaceAll("%world_name%", nextHolder.getName()));
65+
event.setCancelled(true);
66+
}
67+
}
68+
5169
/**
5270
* Handles user entering a world upon teleportation.
5371
*

multiworld-bukkit/src/main/resources/language/de_DE.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,7 @@
153153
"teleport": {
154154
"usage": "%prefix% §cUsage: /world teleport <Player> <World>",
155155
"message": "%prefix% §a%player_name% §7wird in die Welt §a%world_name% §7teleportiert!",
156+
"missing-permission": "%prefix% §7Du hast nicht genügend Rechte um die Welt §b%world_name% §7zu betreten",
156157
"sender-already-there": "%prefix% §7Du befindest dich bereits in der Welt §b%world_name%",
157158
"target-already-there": "%prefix% §7Der Spieler §a%player_name% §7befindet sich bereits in der Welt §b%world_name%"
158159
},

multiworld-bukkit/src/main/resources/language/en_US.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,7 @@
153153
"teleport": {
154154
"usage": "%prefix% §cUsage: /world teleport <Player> <World>",
155155
"message": "%prefix% §a%player_name% §7is teleported to the world §a%world_name%§7!",
156+
"missing-permission": "%prefix% §7You do not have sufficient permissions to enter the world §b%world_name%",
156157
"sender-already-there": "%prefix% §7You are already in the world §b%world_name%",
157158
"target-already-there": "%prefix% §7The player §a%player_name% §7is already in the world §b%world_name%"
158159
},

multiworld-bukkit/src/main/resources/language/fr_FR.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,7 @@
152152
"teleport": {
153153
"usage": "%prefix% §cUsage: /world teleport <joueur> <monde>",
154154
"message": "%prefix% §a%player_name% §7est téléporté dans le monde §a%world_name%§7!",
155+
"missing-permission": "%prefix% §7Vous n’avez pas les droits suffisants pour entrer dans le monde §b%world_name%",
155156
"sender-already-there": "%prefix% §7Tu es déjà dans le monde §b%world_name%",
156157
"target-already-there": "%prefix% §7Le joueur §a%player_name% §7est déjà dans le monde §b%world_name%"
157158
},

multiworld-bukkit/src/main/resources/language/it_IT.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,7 @@
153153
"teleport": {
154154
"usage": "%prefix% §cUsage: /world teleport <giocatore> <mondo>",
155155
"message": "%prefix% §a%player_name% §7è stato teletrasportato a §a%world_name%§7!",
156+
"missing-permission": "%prefix% §7Non hai i permessi sufficienti per entrare nel mondo §b%world_name%",
156157
"sender-already-there": "%prefix% §7Sei già nel mondo §b%world_name%",
157158
"target-already-there": "%prefix% §7Il giocatore §a%player_name% §7è già nel mondo §b%world_name%"
158159
},

multiworld-bukkit/src/main/resources/language/tr_TR.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,7 @@
153153
"teleport": {
154154
"usage": "%prefix% §cKullanımı: /world teleport <Oyuncu> <Dünya>",
155155
"message": "%prefix% §a%player_name% §7, §a%world_name% §7Dünya'sına ışınlandı!",
156+
"missing-permission": "%prefix% §7§b%world_name% §7dünyasına girmek için yeterli izniniz yok",
156157
"sender-already-there": "%prefix% §7Zaten §b%world_name% §7Dünya'sındasınız.",
157158
"target-already-there": "%prefix% §7Bu oyuncu §a%player_name% §7zaten §b%world_name% §7Dünya'sında."
158159
},

multiworld-bukkit/src/main/resources/language/uk_UA.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,7 @@
153153
"teleport": {
154154
"usage": "%prefix% §cВикористання: /world teleport <Гравець> <Назва світу>",
155155
"message": "%prefix% §a%player_name% §7телепортований до світу §a%world_name%§7!",
156+
"missing-permission": "%prefix% §7У вас немає достатніх прав, щоб увійти у світ §b%world_name%",
156157
"sender-already-there": "%prefix% §7Ти вже у світі §b%world_name%",
157158
"target-already-there": "%prefix% §7Гравець §a%player_name% §7вже знаходиться у світі §b%world_name%"
158159
},

multiworld-bukkit/src/main/resources/language/zh_CN.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,7 @@
151151
"teleport": {
152152
"usage": "%prefix% §c命令用法: /world teleport <玩家名称> <世界名称>",
153153
"message": "%prefix% §a%player_name% §7已被传送至世界 §a%world_name%§7!",
154+
"missing-permission": "%prefix% §7您没有足够的权限进入世界 §b%world_name%",
154155
"sender-already-there": "%prefix% §7你已经处于世界 §b%world_name% §7中",
155156
"target-already-there": "%prefix% §7玩家 §a%player_name% §7已经处于世界 §b%world_name% §7中"
156157
},

0 commit comments

Comments
 (0)