mirror of
https://github.com/LuckPerms/LuckPerms.git
synced 2024-11-28 05:35:26 +01:00
Fixes for offline mode servers
This commit is contained in:
parent
f2e06b56e7
commit
be74b50762
@ -80,7 +80,7 @@ public class LuckPermsPlaceholderExpansion extends PlaceholderExpansion {
|
|||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
Optional<User> u = api.getUserSafe(player.getUniqueId());
|
Optional<User> u = api.getUserSafe(api.getUuidCache().getUUID(player.getUniqueId()));
|
||||||
if (!u.isPresent()) {
|
if (!u.isPresent()) {
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
@ -33,6 +33,8 @@ import org.bukkit.event.EventHandler;
|
|||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
import org.bukkit.event.player.*;
|
import org.bukkit.event.player.*;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
class BukkitListener extends AbstractListener implements Listener {
|
class BukkitListener extends AbstractListener implements Listener {
|
||||||
private final LPBukkitPlugin plugin;
|
private final LPBukkitPlugin plugin;
|
||||||
|
|
||||||
@ -80,20 +82,22 @@ class BukkitListener extends AbstractListener implements Listener {
|
|||||||
@EventHandler
|
@EventHandler
|
||||||
public void onPlayerJoin(PlayerJoinEvent e) {
|
public void onPlayerJoin(PlayerJoinEvent e) {
|
||||||
// Refresh permissions again
|
// Refresh permissions again
|
||||||
plugin.getUserManager().getWorldCache().put(e.getPlayer().getUniqueId(), e.getPlayer().getWorld().getName());
|
UUID internal = plugin.getUuidCache().getUUID(e.getPlayer().getUniqueId());
|
||||||
plugin.doAsync(() -> refreshPlayer(e.getPlayer().getUniqueId()));
|
plugin.getUserManager().getWorldCache().put(internal, e.getPlayer().getWorld().getName());
|
||||||
|
plugin.doAsync(() -> refreshPlayer(internal));
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onPlayerChangedWorld(PlayerChangedWorldEvent e) {
|
public void onPlayerChangedWorld(PlayerChangedWorldEvent e) {
|
||||||
plugin.getUserManager().getWorldCache().put(e.getPlayer().getUniqueId(), e.getPlayer().getWorld().getName());
|
UUID internal = plugin.getUuidCache().getUUID(e.getPlayer().getUniqueId());
|
||||||
plugin.doAsync(() -> refreshPlayer(e.getPlayer().getUniqueId()));
|
plugin.getUserManager().getWorldCache().put(internal, e.getPlayer().getWorld().getName());
|
||||||
|
plugin.doAsync(() -> refreshPlayer(internal));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onPlayerQuit(PlayerQuitEvent e) {
|
public void onPlayerQuit(PlayerQuitEvent e) {
|
||||||
plugin.getUserManager().getWorldCache().remove(e.getPlayer().getUniqueId());
|
plugin.getUserManager().getWorldCache().remove(plugin.getUuidCache().getUUID(e.getPlayer().getUniqueId()));
|
||||||
onLeave(e.getPlayer().getUniqueId());
|
onLeave(e.getPlayer().getUniqueId());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -55,7 +55,7 @@ public class BungeeListener extends AbstractListener implements Listener {
|
|||||||
|
|
||||||
final ProxiedPlayer player = ((ProxiedPlayer) e.getSender());
|
final ProxiedPlayer player = ((ProxiedPlayer) e.getSender());
|
||||||
|
|
||||||
BungeePlayerCache playerCache = plugin.getPlayerCache().get(player.getUniqueId());
|
BungeePlayerCache playerCache = plugin.getPlayerCache().get(plugin.getUuidCache().getUUID(player.getUniqueId()));
|
||||||
if (playerCache == null) {
|
if (playerCache == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -69,11 +69,11 @@ public class AbstractListener {
|
|||||||
protected void onLeave(UUID uuid) {
|
protected void onLeave(UUID uuid) {
|
||||||
final UuidCache cache = plugin.getUuidCache();
|
final UuidCache cache = plugin.getUuidCache();
|
||||||
|
|
||||||
// Unload the user from memory when they disconnect;
|
|
||||||
cache.clearCache(uuid);
|
|
||||||
|
|
||||||
final User user = plugin.getUserManager().get(cache.getUUID(uuid));
|
final User user = plugin.getUserManager().get(cache.getUUID(uuid));
|
||||||
plugin.getUserManager().unload(user);
|
plugin.getUserManager().unload(user);
|
||||||
|
|
||||||
|
// Unload the user from memory when they disconnect;
|
||||||
|
cache.clearCache(uuid);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void refreshPlayer(UUID uuid) {
|
protected void refreshPlayer(UUID uuid) {
|
||||||
|
@ -35,9 +35,7 @@ import me.lucko.luckperms.exceptions.ObjectAlreadyHasException;
|
|||||||
import me.lucko.luckperms.exceptions.ObjectLacksException;
|
import me.lucko.luckperms.exceptions.ObjectLacksException;
|
||||||
import me.lucko.luckperms.groups.Group;
|
import me.lucko.luckperms.groups.Group;
|
||||||
import me.lucko.luckperms.users.User;
|
import me.lucko.luckperms.users.User;
|
||||||
import org.spongepowered.api.Sponge;
|
|
||||||
import org.spongepowered.api.command.CommandSource;
|
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.context.Context;
|
||||||
import org.spongepowered.api.service.permission.Subject;
|
import org.spongepowered.api.service.permission.Subject;
|
||||||
import org.spongepowered.api.service.permission.SubjectCollection;
|
import org.spongepowered.api.service.permission.SubjectCollection;
|
||||||
@ -86,15 +84,6 @@ public class LuckPermsSubject implements Subject {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Optional<CommandSource> getCommandSource() {
|
public Optional<CommandSource> getCommandSource() {
|
||||||
if (holder instanceof User) {
|
|
||||||
final UUID uuid = ((User) holder).getUuid();
|
|
||||||
|
|
||||||
Optional<Player> p = Sponge.getServer().getPlayer(uuid);
|
|
||||||
if (p.isPresent()) {
|
|
||||||
return Optional.of(p.get());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return Optional.empty();
|
return Optional.empty();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -26,12 +26,13 @@ import com.google.common.base.Splitter;
|
|||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.NonNull;
|
import lombok.NonNull;
|
||||||
import me.lucko.luckperms.users.User;
|
import me.lucko.luckperms.users.User;
|
||||||
|
import org.spongepowered.api.Sponge;
|
||||||
|
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.context.Context;
|
||||||
import org.spongepowered.api.util.Tristate;
|
import org.spongepowered.api.util.Tristate;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.*;
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
|
||||||
public class LuckPermsUserSubject extends LuckPermsSubject {
|
public class LuckPermsUserSubject extends LuckPermsSubject {
|
||||||
@ -109,4 +110,21 @@ public class LuckPermsUserSubject extends LuckPermsSubject {
|
|||||||
|
|
||||||
return service.getDefaults().getPermissionValue(contexts, permission);
|
return service.getDefaults().getPermissionValue(contexts, permission);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getIdentifier() {
|
||||||
|
return service.getPlugin().getUuidCache().getExternalUUID(user.getUuid()).toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Optional<CommandSource> getCommandSource() {
|
||||||
|
final UUID uuid = service.getPlugin().getUuidCache().getExternalUUID(user.getUuid());
|
||||||
|
|
||||||
|
Optional<Player> p = Sponge.getServer().getPlayer(uuid);
|
||||||
|
if (p.isPresent()) {
|
||||||
|
return Optional.of(p.get());
|
||||||
|
}
|
||||||
|
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -61,22 +61,23 @@ public class UserCollection implements SubjectCollection {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void load(UUID uuid) {
|
private void load(UUID uuid) {
|
||||||
if (!manager.isLoaded(uuid)) {
|
UUID internal = service.getPlugin().getUuidCache().getUUID(uuid);
|
||||||
|
if (!manager.isLoaded(internal)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
User user = manager.get(uuid);
|
User user = manager.get(internal);
|
||||||
users.put(uuid, LuckPermsUserSubject.wrapUser(user, service));
|
users.put(internal, LuckPermsUserSubject.wrapUser(user, service));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void unload(UUID uuid) {
|
public void unload(UUID uuid) {
|
||||||
users.remove(uuid);
|
users.remove(service.getPlugin().getUuidCache().getUUID(uuid));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public synchronized Subject get(@NonNull String id) {
|
public synchronized Subject get(@NonNull String id) {
|
||||||
try {
|
try {
|
||||||
UUID u = UUID.fromString(id);
|
UUID u = service.getPlugin().getUuidCache().getUUID(UUID.fromString(id));
|
||||||
if (users.containsKey(u)) {
|
if (users.containsKey(u)) {
|
||||||
return users.get(u);
|
return users.get(u);
|
||||||
}
|
}
|
||||||
@ -105,7 +106,7 @@ public class UserCollection implements SubjectCollection {
|
|||||||
public boolean hasRegistered(@NonNull String id) {
|
public boolean hasRegistered(@NonNull String id) {
|
||||||
try {
|
try {
|
||||||
UUID u = UUID.fromString(id);
|
UUID u = UUID.fromString(id);
|
||||||
return manager.isLoaded(u);
|
return manager.isLoaded(service.getPlugin().getUuidCache().getUUID(u));
|
||||||
} catch (IllegalArgumentException e) {
|
} catch (IllegalArgumentException e) {
|
||||||
User user = manager.get(id);
|
User user = manager.get(id);
|
||||||
return user != null;
|
return user != null;
|
||||||
|
Loading…
Reference in New Issue
Block a user