mirror of
https://github.com/LuckPerms/LuckPerms.git
synced 2024-12-27 11:37:35 +01:00
Remove subjects from cache when they leave the server
This commit is contained in:
parent
9fdb4fa25f
commit
d4cf6a5ad7
@ -93,6 +93,7 @@ public class LPSpongePlugin implements LuckPermsPlugin {
|
||||
private me.lucko.luckperms.api.Logger log;
|
||||
private Importer importer;
|
||||
private ConsecutiveExecutor consecutiveExecutor;
|
||||
private LuckPermsService service;
|
||||
|
||||
@Listener
|
||||
public void onEnable(GamePreInitializationEvent event) {
|
||||
@ -121,7 +122,7 @@ public class LPSpongePlugin implements LuckPermsPlugin {
|
||||
consecutiveExecutor = new ConsecutiveExecutor(commandManager);
|
||||
|
||||
getLog().info("Registering PermissionService...");
|
||||
Sponge.getServiceManager().setProvider(this, PermissionService.class, new LuckPermsService(this));
|
||||
Sponge.getServiceManager().setProvider(this, PermissionService.class, (service = new LuckPermsService(this)));
|
||||
|
||||
getLog().info("Registering API...");
|
||||
apiProvider = new ApiProvider(this);
|
||||
|
@ -22,6 +22,7 @@
|
||||
|
||||
package me.lucko.luckperms;
|
||||
|
||||
import me.lucko.luckperms.api.sponge.LuckPermsSubject;
|
||||
import me.lucko.luckperms.constants.Message;
|
||||
import me.lucko.luckperms.users.User;
|
||||
import me.lucko.luckperms.utils.AbstractListener;
|
||||
@ -30,6 +31,8 @@ import org.spongepowered.api.event.network.ClientConnectionEvent;
|
||||
import org.spongepowered.api.profile.GameProfile;
|
||||
import org.spongepowered.api.text.serializer.TextSerializers;
|
||||
|
||||
import java.util.Iterator;
|
||||
|
||||
@SuppressWarnings("WeakerAccess")
|
||||
public class SpongeListener extends AbstractListener {
|
||||
private final LPSpongePlugin plugin;
|
||||
@ -75,5 +78,12 @@ public class SpongeListener extends AbstractListener {
|
||||
@Listener
|
||||
public void onClientLeave(ClientConnectionEvent.Disconnect e) {
|
||||
onLeave(e.getTargetEntity().getUniqueId());
|
||||
Iterator<LuckPermsSubject> iterator = plugin.getService().getUserSubjects().getCache().iterator();
|
||||
while (iterator.hasNext()) {
|
||||
LuckPermsSubject subject = iterator.next();
|
||||
if (subject.getIdentifier().equalsIgnoreCase(e.getTargetEntity().getUniqueId().toString())) {
|
||||
iterator.remove();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -23,6 +23,7 @@
|
||||
package me.lucko.luckperms.api.sponge.collections;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
import lombok.NonNull;
|
||||
import me.lucko.luckperms.api.sponge.LuckPermsService;
|
||||
import me.lucko.luckperms.api.sponge.LuckPermsSubject;
|
||||
@ -47,6 +48,8 @@ import java.util.stream.Collectors;
|
||||
public class UserCollection implements SubjectCollection {
|
||||
private final LuckPermsService service;
|
||||
private final UserManager manager;
|
||||
|
||||
@Getter
|
||||
private final Set<LuckPermsSubject> cache = ConcurrentHashMap.newKeySet();
|
||||
|
||||
@Override
|
||||
@ -82,6 +85,8 @@ public class UserCollection implements SubjectCollection {
|
||||
return subject;
|
||||
}
|
||||
|
||||
service.getPlugin().getLog().warn("Couldn't get subject for: " + id);
|
||||
|
||||
// What am I meant to do here? What if no user is loaded? Load it? Create it?
|
||||
// If I do load/create it, this method should always be called async??.... errr.
|
||||
return new SimpleSubject(id, service, this);
|
||||
|
Loading…
Reference in New Issue
Block a user