mirror of
https://github.com/LuckPerms/LuckPerms.git
synced 2024-11-28 05:35:26 +01:00
Remove world cache - fixes #135
This commit is contained in:
parent
aea44fc8bc
commit
1db777cd31
@ -33,13 +33,12 @@ import org.bukkit.event.EventHandler;
|
|||||||
import org.bukkit.event.EventPriority;
|
import org.bukkit.event.EventPriority;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
import org.bukkit.event.player.AsyncPlayerPreLoginEvent;
|
import org.bukkit.event.player.AsyncPlayerPreLoginEvent;
|
||||||
|
import org.bukkit.event.player.PlayerChangedWorldEvent;
|
||||||
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
|
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
|
||||||
import org.bukkit.event.player.PlayerLoginEvent;
|
import org.bukkit.event.player.PlayerLoginEvent;
|
||||||
import org.bukkit.event.player.PlayerQuitEvent;
|
import org.bukkit.event.player.PlayerQuitEvent;
|
||||||
import org.bukkit.event.server.PluginEnableEvent;
|
import org.bukkit.event.server.PluginEnableEvent;
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
|
|
||||||
class BukkitListener extends AbstractListener implements Listener {
|
class BukkitListener extends AbstractListener implements Listener {
|
||||||
private final LPBukkitPlugin plugin;
|
private final LPBukkitPlugin plugin;
|
||||||
|
|
||||||
@ -92,6 +91,8 @@ class BukkitListener extends AbstractListener implements Listener {
|
|||||||
t.printStackTrace();
|
t.printStackTrace();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
plugin.refreshAutoOp(player);
|
||||||
|
|
||||||
if (player.isOp()) {
|
if (player.isOp()) {
|
||||||
|
|
||||||
// We assume all users are not op, but those who are need extra calculation.
|
// 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.
|
// The player got denied on sync login.
|
||||||
onLeave(e.getPlayer().getUniqueId());
|
onLeave(e.getPlayer().getUniqueId());
|
||||||
|
} else {
|
||||||
|
plugin.refreshAutoOp(e.getPlayer());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.MONITOR) // Allow other plugins to see data when this event gets called.
|
@EventHandler(priority = EventPriority.MONITOR) // Allow other plugins to see data when this event gets called.
|
||||||
public void onPlayerQuit(PlayerQuitEvent e) {
|
public void onPlayerQuit(PlayerQuitEvent e) {
|
||||||
final Player player = e.getPlayer();
|
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
|
// Remove the custom permissible
|
||||||
Injector.unInject(player, true);
|
Injector.unInject(player, true);
|
||||||
@ -152,4 +151,9 @@ class BukkitListener extends AbstractListener implements Listener {
|
|||||||
plugin.tryVaultHook(true);
|
plugin.tryVaultHook(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void onWorldChange(PlayerChangedWorldEvent e) {
|
||||||
|
plugin.refreshAutoOp(e.getPlayer());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -32,7 +32,6 @@ import me.lucko.luckperms.api.LuckPermsApi;
|
|||||||
import me.lucko.luckperms.api.PlatformType;
|
import me.lucko.luckperms.api.PlatformType;
|
||||||
import me.lucko.luckperms.api.context.ContextSet;
|
import me.lucko.luckperms.api.context.ContextSet;
|
||||||
import me.lucko.luckperms.api.context.MutableContextSet;
|
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.inject.Injector;
|
||||||
import me.lucko.luckperms.bukkit.model.ChildPermissionProvider;
|
import me.lucko.luckperms.bukkit.model.ChildPermissionProvider;
|
||||||
import me.lucko.luckperms.bukkit.model.DefaultsProvider;
|
import me.lucko.luckperms.bukkit.model.DefaultsProvider;
|
||||||
@ -87,6 +86,7 @@ import java.util.HashSet;
|
|||||||
import java.util.LinkedHashMap;
|
import java.util.LinkedHashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Optional;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
@ -238,11 +238,6 @@ public class LPBukkitPlugin extends JavaPlugin implements LuckPermsPlugin {
|
|||||||
contextManager.registerCalculator(worldCalculator);
|
contextManager.registerCalculator(worldCalculator);
|
||||||
contextManager.registerCalculator(new ServerCalculator<>(getConfiguration().getServer()));
|
contextManager.registerCalculator(new ServerCalculator<>(getConfiguration().getServer()));
|
||||||
|
|
||||||
// handle server operators
|
|
||||||
if (getConfiguration().isAutoOp()) {
|
|
||||||
contextManager.registerListener(new AutoOPListener());
|
|
||||||
}
|
|
||||||
|
|
||||||
// Provide vault support
|
// Provide vault support
|
||||||
tryVaultHook(false);
|
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<String, Boolean> 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
|
@Override
|
||||||
public void doAsync(Runnable r) {
|
public void doAsync(Runnable r) {
|
||||||
asyncExecutor.execute(r);
|
asyncExecutor.execute(r);
|
||||||
@ -570,7 +580,6 @@ public class LPBukkitPlugin extends JavaPlugin implements LuckPermsPlugin {
|
|||||||
map.put("Vault Server", configuration.getVaultServer());
|
map.put("Vault Server", configuration.getVaultServer());
|
||||||
map.put("Bukkit Defaults count", defaultsProvider.size());
|
map.put("Bukkit Defaults count", defaultsProvider.size());
|
||||||
map.put("Bukkit Child Permissions count", childPermissionProvider.getPermissions().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 Including Global", configuration.isVaultIncludingGlobal());
|
||||||
map.put("Vault Ignoring World", configuration.isVaultIgnoreWorld());
|
map.put("Vault Ignoring World", configuration.isVaultIgnoreWorld());
|
||||||
map.put("Vault Primary Group Overrides", configuration.isVaultPrimaryGroupOverrides());
|
map.put("Vault Primary Group Overrides", configuration.isVaultPrimaryGroupOverrides());
|
||||||
|
@ -22,7 +22,6 @@
|
|||||||
|
|
||||||
package me.lucko.luckperms.bukkit;
|
package me.lucko.luckperms.bukkit;
|
||||||
|
|
||||||
import lombok.Getter;
|
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
|
|
||||||
import com.google.common.collect.Maps;
|
import com.google.common.collect.Maps;
|
||||||
@ -32,15 +31,9 @@ import me.lucko.luckperms.api.context.MutableContextSet;
|
|||||||
import me.lucko.luckperms.common.LuckPermsPlugin;
|
import me.lucko.luckperms.common.LuckPermsPlugin;
|
||||||
|
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.EventHandler;
|
|
||||||
import org.bukkit.event.EventPriority;
|
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
import org.bukkit.event.player.PlayerChangedWorldEvent;
|
|
||||||
import org.bukkit.event.player.PlayerLoginEvent;
|
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.UUID;
|
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
|
||||||
|
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
public class WorldCalculator extends ContextCalculator<Player> implements Listener {
|
public class WorldCalculator extends ContextCalculator<Player> implements Listener {
|
||||||
@ -48,9 +41,6 @@ public class WorldCalculator extends ContextCalculator<Player> implements Listen
|
|||||||
|
|
||||||
private final LuckPermsPlugin plugin;
|
private final LuckPermsPlugin plugin;
|
||||||
|
|
||||||
@Getter
|
|
||||||
private final Map<UUID, String> worldCache = new ConcurrentHashMap<>();
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public MutableContextSet giveApplicableContext(Player subject, MutableContextSet accumulator) {
|
public MutableContextSet giveApplicableContext(Player subject, MutableContextSet accumulator) {
|
||||||
String world = getWorld(subject);
|
String world = getWorld(subject);
|
||||||
@ -73,34 +63,7 @@ public class WorldCalculator extends ContextCalculator<Player> implements Listen
|
|||||||
}
|
}
|
||||||
|
|
||||||
private String getWorld(Player player) {
|
private String getWorld(Player player) {
|
||||||
UUID internal = plugin.getUuidCache().getUUID(player.getUniqueId());
|
String world = player.getWorld().getName();
|
||||||
String world = worldCache.get(internal);
|
|
||||||
if (world == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return plugin.getConfiguration().getWorldRewrites().getOrDefault(world, world);
|
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())
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -1,50 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2016 Lucko (Luck) <luck@lucko.me>
|
|
||||||
*
|
|
||||||
* 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<Player> {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onContextChange(Player subject, Map.Entry<String, String> before, Map.Entry<String, String> current) throws Exception {
|
|
||||||
try {
|
|
||||||
LPPermissible permissible = Injector.getPermissible(subject.getUniqueId());
|
|
||||||
if (permissible == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Map<String, Boolean> backing = permissible.getUser().getUserData().getPermissionData(permissible.calculateContexts()).getImmutableBacking();
|
|
||||||
boolean op = Optional.ofNullable(backing.get("luckperms.autoop")).orElse(false);
|
|
||||||
subject.setOp(op);
|
|
||||||
} catch (Exception ignored) {}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user