From 1db777cd31c20b70413ef2a4b669fb8a36f5534e Mon Sep 17 00:00:00 2001 From: Luck Date: Wed, 18 Jan 2017 21:05:14 +0000 Subject: [PATCH] Remove world cache - fixes #135 --- .../luckperms/bukkit/BukkitListener.java | 16 +++--- .../luckperms/bukkit/LPBukkitPlugin.java | 23 ++++++--- .../luckperms/bukkit/WorldCalculator.java | 39 +-------------- .../bukkit/calculators/AutoOPListener.java | 50 ------------------- 4 files changed, 27 insertions(+), 101 deletions(-) delete mode 100644 bukkit/src/main/java/me/lucko/luckperms/bukkit/calculators/AutoOPListener.java diff --git a/bukkit/src/main/java/me/lucko/luckperms/bukkit/BukkitListener.java b/bukkit/src/main/java/me/lucko/luckperms/bukkit/BukkitListener.java index c320da72e..ea9feb6bf 100644 --- a/bukkit/src/main/java/me/lucko/luckperms/bukkit/BukkitListener.java +++ b/bukkit/src/main/java/me/lucko/luckperms/bukkit/BukkitListener.java @@ -33,13 +33,12 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.player.AsyncPlayerPreLoginEvent; +import org.bukkit.event.player.PlayerChangedWorldEvent; import org.bukkit.event.player.PlayerCommandPreprocessEvent; import org.bukkit.event.player.PlayerLoginEvent; import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.event.server.PluginEnableEvent; -import java.util.UUID; - class BukkitListener extends AbstractListener implements Listener { private final LPBukkitPlugin plugin; @@ -92,6 +91,8 @@ class BukkitListener extends AbstractListener implements Listener { t.printStackTrace(); } + plugin.refreshAutoOp(player); + if (player.isOp()) { // We assume all users are not op, but those who are need extra calculation. @@ -105,16 +106,14 @@ class BukkitListener extends AbstractListener implements Listener { // The player got denied on sync login. onLeave(e.getPlayer().getUniqueId()); + } else { + plugin.refreshAutoOp(e.getPlayer()); } } @EventHandler(priority = EventPriority.MONITOR) // Allow other plugins to see data when this event gets called. public void onPlayerQuit(PlayerQuitEvent e) { final Player player = e.getPlayer(); - final UUID internal = plugin.getUuidCache().getUUID(player.getUniqueId()); - - // Remove from World cache - plugin.getWorldCalculator().getWorldCache().remove(internal); // Remove the custom permissible Injector.unInject(player, true); @@ -152,4 +151,9 @@ class BukkitListener extends AbstractListener implements Listener { plugin.tryVaultHook(true); } } + + @EventHandler + public void onWorldChange(PlayerChangedWorldEvent e) { + plugin.refreshAutoOp(e.getPlayer()); + } } diff --git a/bukkit/src/main/java/me/lucko/luckperms/bukkit/LPBukkitPlugin.java b/bukkit/src/main/java/me/lucko/luckperms/bukkit/LPBukkitPlugin.java index dfc4148c9..56b4093f3 100644 --- a/bukkit/src/main/java/me/lucko/luckperms/bukkit/LPBukkitPlugin.java +++ b/bukkit/src/main/java/me/lucko/luckperms/bukkit/LPBukkitPlugin.java @@ -32,7 +32,6 @@ import me.lucko.luckperms.api.LuckPermsApi; import me.lucko.luckperms.api.PlatformType; import me.lucko.luckperms.api.context.ContextSet; import me.lucko.luckperms.api.context.MutableContextSet; -import me.lucko.luckperms.bukkit.calculators.AutoOPListener; import me.lucko.luckperms.bukkit.inject.Injector; import me.lucko.luckperms.bukkit.model.ChildPermissionProvider; import me.lucko.luckperms.bukkit.model.DefaultsProvider; @@ -87,6 +86,7 @@ import java.util.HashSet; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.Set; import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; @@ -238,11 +238,6 @@ public class LPBukkitPlugin extends JavaPlugin implements LuckPermsPlugin { contextManager.registerCalculator(worldCalculator); contextManager.registerCalculator(new ServerCalculator<>(getConfiguration().getServer())); - // handle server operators - if (getConfiguration().isAutoOp()) { - contextManager.registerListener(new AutoOPListener()); - } - // Provide vault support tryVaultHook(false); @@ -399,6 +394,21 @@ public class LPBukkitPlugin extends JavaPlugin implements LuckPermsPlugin { } } + public void refreshAutoOp(Player player) { + if (getConfiguration().isAutoOp()) { + try { + LPPermissible permissible = Injector.getPermissible(player.getUniqueId()); + if (permissible == null) { + return; + } + + Map backing = permissible.getUser().getUserData().getPermissionData(permissible.calculateContexts()).getImmutableBacking(); + boolean op = Optional.ofNullable(backing.get("luckperms.autoop")).orElse(false); + player.setOp(op); + } catch (Exception ignored) {} + } + } + @Override public void doAsync(Runnable r) { asyncExecutor.execute(r); @@ -570,7 +580,6 @@ public class LPBukkitPlugin extends JavaPlugin implements LuckPermsPlugin { map.put("Vault Server", configuration.getVaultServer()); map.put("Bukkit Defaults count", defaultsProvider.size()); map.put("Bukkit Child Permissions count", childPermissionProvider.getPermissions().size()); - map.put("World Cache size", worldCalculator.getWorldCache().size()); map.put("Vault Including Global", configuration.isVaultIncludingGlobal()); map.put("Vault Ignoring World", configuration.isVaultIgnoreWorld()); map.put("Vault Primary Group Overrides", configuration.isVaultPrimaryGroupOverrides()); 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 f8b1a5332..a6cd9aec6 100644 --- a/bukkit/src/main/java/me/lucko/luckperms/bukkit/WorldCalculator.java +++ b/bukkit/src/main/java/me/lucko/luckperms/bukkit/WorldCalculator.java @@ -22,7 +22,6 @@ package me.lucko.luckperms.bukkit; -import lombok.Getter; import lombok.RequiredArgsConstructor; import com.google.common.collect.Maps; @@ -32,15 +31,9 @@ import me.lucko.luckperms.api.context.MutableContextSet; import me.lucko.luckperms.common.LuckPermsPlugin; import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; -import org.bukkit.event.player.PlayerChangedWorldEvent; -import org.bukkit.event.player.PlayerLoginEvent; import java.util.Map; -import java.util.UUID; -import java.util.concurrent.ConcurrentHashMap; @RequiredArgsConstructor public class WorldCalculator extends ContextCalculator implements Listener { @@ -48,9 +41,6 @@ public class WorldCalculator extends ContextCalculator implements Listen private final LuckPermsPlugin plugin; - @Getter - private final Map worldCache = new ConcurrentHashMap<>(); - @Override public MutableContextSet giveApplicableContext(Player subject, MutableContextSet accumulator) { String world = getWorld(subject); @@ -73,34 +63,7 @@ public class WorldCalculator extends ContextCalculator implements Listen } private String getWorld(Player player) { - UUID internal = plugin.getUuidCache().getUUID(player.getUniqueId()); - String world = worldCache.get(internal); - if (world == null) { - return null; - } - + String world = player.getWorld().getName(); return plugin.getConfiguration().getWorldRewrites().getOrDefault(world, world); } - - @EventHandler(priority = EventPriority.LOW) - public void onPlayerJoin(PlayerLoginEvent e) { - UUID internal = plugin.getUuidCache().getUUID(e.getPlayer().getUniqueId()); - worldCache.put(internal, e.getPlayer().getWorld().getName()); - pushUpdate( - e.getPlayer(), - Maps.immutableEntry(WORLD_KEY, null), - Maps.immutableEntry(WORLD_KEY, e.getPlayer().getWorld().getName()) - ); - } - - @EventHandler(priority = EventPriority.LOWEST) - public void onPlayerChangedWorld(PlayerChangedWorldEvent e) { - UUID internal = plugin.getUuidCache().getUUID(e.getPlayer().getUniqueId()); - worldCache.put(internal, e.getPlayer().getWorld().getName()); - pushUpdate( - e.getPlayer(), - Maps.immutableEntry(WORLD_KEY, e.getFrom().getName()), - Maps.immutableEntry(WORLD_KEY, e.getPlayer().getWorld().getName()) - ); - } } diff --git a/bukkit/src/main/java/me/lucko/luckperms/bukkit/calculators/AutoOPListener.java b/bukkit/src/main/java/me/lucko/luckperms/bukkit/calculators/AutoOPListener.java deleted file mode 100644 index b77437632..000000000 --- a/bukkit/src/main/java/me/lucko/luckperms/bukkit/calculators/AutoOPListener.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright (c) 2016 Lucko (Luck) - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -package me.lucko.luckperms.bukkit.calculators; - -import me.lucko.luckperms.api.context.ContextListener; -import me.lucko.luckperms.bukkit.inject.Injector; -import me.lucko.luckperms.bukkit.model.LPPermissible; - -import org.bukkit.entity.Player; - -import java.util.Map; -import java.util.Optional; - -public class AutoOPListener implements ContextListener { - - @Override - public void onContextChange(Player subject, Map.Entry before, Map.Entry current) throws Exception { - try { - LPPermissible permissible = Injector.getPermissible(subject.getUniqueId()); - if (permissible == null) { - return; - } - - Map backing = permissible.getUser().getUserData().getPermissionData(permissible.calculateContexts()).getImmutableBacking(); - boolean op = Optional.ofNullable(backing.get("luckperms.autoop")).orElse(false); - subject.setOp(op); - } catch (Exception ignored) {} - } - -}