diff --git a/bukkit/src/main/java/me/lucko/luckperms/bukkit/WorldCalculator.java b/bukkit/src/main/java/me/lucko/luckperms/bukkit/WorldCalculator.java index 5d87a6dbc..1a953ed1d 100644 --- a/bukkit/src/main/java/me/lucko/luckperms/bukkit/WorldCalculator.java +++ b/bukkit/src/main/java/me/lucko/luckperms/bukkit/WorldCalculator.java @@ -27,8 +27,6 @@ package me.lucko.luckperms.bukkit; import lombok.RequiredArgsConstructor; -import com.google.common.collect.Maps; - import me.lucko.luckperms.api.context.ContextCalculator; import me.lucko.luckperms.api.context.MutableContextSet; import me.lucko.luckperms.common.config.ConfigKeys; @@ -44,11 +42,10 @@ public class WorldCalculator implements ContextCalculator { @Override public MutableContextSet giveApplicableContext(Player subject, MutableContextSet accumulator) { - String world = subject.getWorld().getName(); - world = plugin.getConfiguration().get(ConfigKeys.WORLD_REWRITES).getOrDefault(world, world); - - if (world != null) { - accumulator.add(Maps.immutableEntry(WORLD_KEY, world.toLowerCase())); + String world = subject.getWorld().getName().toLowerCase(); + while (!accumulator.has(WORLD_KEY, world)) { + accumulator.add(WORLD_KEY, world); + world = plugin.getConfiguration().get(ConfigKeys.WORLD_REWRITES).getOrDefault(world, world).toLowerCase(); } return accumulator; diff --git a/bungee/src/main/java/me/lucko/luckperms/bungee/BackendServerCalculator.java b/bungee/src/main/java/me/lucko/luckperms/bungee/BackendServerCalculator.java index dac61606e..c6f806aae 100644 --- a/bungee/src/main/java/me/lucko/luckperms/bungee/BackendServerCalculator.java +++ b/bungee/src/main/java/me/lucko/luckperms/bungee/BackendServerCalculator.java @@ -25,13 +25,16 @@ package me.lucko.luckperms.bungee; -import com.google.common.collect.Maps; +import lombok.RequiredArgsConstructor; import me.lucko.luckperms.api.context.ContextCalculator; import me.lucko.luckperms.api.context.MutableContextSet; +import me.lucko.luckperms.common.config.ConfigKeys; +import me.lucko.luckperms.common.plugin.LuckPermsPlugin; import net.md_5.bungee.api.connection.ProxiedPlayer; +@RequiredArgsConstructor public class BackendServerCalculator implements ContextCalculator { private static final String WORLD_KEY = "world"; @@ -39,12 +42,14 @@ public class BackendServerCalculator implements ContextCalculator return player.getServer() == null ? null : (player.getServer().getInfo() == null ? null : player.getServer().getInfo().getName()); } + private final LuckPermsPlugin plugin; + @Override public MutableContextSet giveApplicableContext(ProxiedPlayer subject, MutableContextSet accumulator) { String server = getServer(subject); - - if (server != null) { - accumulator.add(Maps.immutableEntry(WORLD_KEY, server.toLowerCase())); + while (server != null && !accumulator.has(WORLD_KEY, server)) { + accumulator.add(WORLD_KEY, server); + server = plugin.getConfiguration().get(ConfigKeys.WORLD_REWRITES).getOrDefault(server, server); } return accumulator; diff --git a/bungee/src/main/java/me/lucko/luckperms/bungee/LPBungeePlugin.java b/bungee/src/main/java/me/lucko/luckperms/bungee/LPBungeePlugin.java index 89769f529..299d08025 100644 --- a/bungee/src/main/java/me/lucko/luckperms/bungee/LPBungeePlugin.java +++ b/bungee/src/main/java/me/lucko/luckperms/bungee/LPBungeePlugin.java @@ -218,7 +218,7 @@ public class LPBungeePlugin extends Plugin implements LuckPermsPlugin { cachedStateManager = new CachedStateManager(this); contextManager = new ContextManager<>(); - BackendServerCalculator serverCalculator = new BackendServerCalculator(); + BackendServerCalculator serverCalculator = new BackendServerCalculator(this); contextManager.registerCalculator(serverCalculator); StaticCalculator staticCalculator = new StaticCalculator<>(getConfiguration()); diff --git a/sponge/src/main/java/me/lucko/luckperms/sponge/LPSpongePlugin.java b/sponge/src/main/java/me/lucko/luckperms/sponge/LPSpongePlugin.java index f4c062c27..029628a86 100644 --- a/sponge/src/main/java/me/lucko/luckperms/sponge/LPSpongePlugin.java +++ b/sponge/src/main/java/me/lucko/luckperms/sponge/LPSpongePlugin.java @@ -267,7 +267,7 @@ public class LPSpongePlugin implements LuckPermsPlugin { cachedStateManager = new CachedStateManager(this); contextManager = new ContextManager<>(); - contextManager.registerCalculator(new WorldCalculator()); + contextManager.registerCalculator(new WorldCalculator(this)); StaticCalculator staticCalculator = new StaticCalculator<>(getConfiguration()); contextManager.registerCalculator(staticCalculator); diff --git a/sponge/src/main/java/me/lucko/luckperms/sponge/contexts/WorldCalculator.java b/sponge/src/main/java/me/lucko/luckperms/sponge/contexts/WorldCalculator.java index 460cf1ddf..0ccc4c93e 100644 --- a/sponge/src/main/java/me/lucko/luckperms/sponge/contexts/WorldCalculator.java +++ b/sponge/src/main/java/me/lucko/luckperms/sponge/contexts/WorldCalculator.java @@ -29,14 +29,18 @@ import lombok.RequiredArgsConstructor; import me.lucko.luckperms.api.context.ContextCalculator; import me.lucko.luckperms.api.context.MutableContextSet; +import me.lucko.luckperms.common.config.ConfigKeys; +import me.lucko.luckperms.common.plugin.LuckPermsPlugin; import org.spongepowered.api.command.CommandSource; import org.spongepowered.api.entity.living.player.Player; -import org.spongepowered.api.service.context.Context; import org.spongepowered.api.service.permission.Subject; @RequiredArgsConstructor public class WorldCalculator implements ContextCalculator { + private static final String WORLD_KEY = "world"; + + private final LuckPermsPlugin plugin; @Override public MutableContextSet giveApplicableContext(Subject subject, MutableContextSet accumulator) { @@ -46,7 +50,12 @@ public class WorldCalculator implements ContextCalculator { } Player p = ((Player) source); - accumulator.add(Context.WORLD_KEY, p.getWorld().getName().toLowerCase()); + String world = p.getWorld().getName().toLowerCase(); + while (!accumulator.has(WORLD_KEY, world)) { + accumulator.add(WORLD_KEY, world); + world = plugin.getConfiguration().get(ConfigKeys.WORLD_REWRITES).getOrDefault(world, world).toLowerCase(); + } + return accumulator; }