Refactor some Sponge service details
This commit is contained in:
@@ -57,7 +57,6 @@ import me.lucko.luckperms.common.logging.SenderLogger;
|
||||
import me.lucko.luckperms.common.managers.track.StandardTrackManager;
|
||||
import me.lucko.luckperms.common.messaging.ExtendedMessagingService;
|
||||
import me.lucko.luckperms.common.model.User;
|
||||
import me.lucko.luckperms.common.plugin.LuckPermsPlugin;
|
||||
import me.lucko.luckperms.common.plugin.SchedulerAdapter;
|
||||
import me.lucko.luckperms.common.storage.Storage;
|
||||
import me.lucko.luckperms.common.storage.StorageFactory;
|
||||
@@ -82,6 +81,7 @@ import me.lucko.luckperms.sponge.service.LuckPermsService;
|
||||
import me.lucko.luckperms.sponge.service.model.LPPermissionService;
|
||||
import me.lucko.luckperms.sponge.service.model.LPSubject;
|
||||
import me.lucko.luckperms.sponge.service.model.LPSubjectCollection;
|
||||
import me.lucko.luckperms.sponge.service.model.LuckPermsSpongePlugin;
|
||||
import me.lucko.luckperms.sponge.service.persisted.PersistedCollection;
|
||||
import me.lucko.luckperms.sponge.tasks.ServiceCacheHousekeepingTask;
|
||||
import me.lucko.luckperms.sponge.utils.VersionData;
|
||||
@@ -136,7 +136,7 @@ import java.util.stream.Stream;
|
||||
description = "A permissions plugin",
|
||||
url = "https://github.com/lucko/LuckPerms"
|
||||
)
|
||||
public class LPSpongePlugin implements LuckPermsPlugin {
|
||||
public class LPSpongePlugin implements LuckPermsSpongePlugin {
|
||||
|
||||
@Inject
|
||||
private Logger logger;
|
||||
|
||||
@@ -39,7 +39,7 @@ import me.lucko.luckperms.common.locale.LocaleManager;
|
||||
import me.lucko.luckperms.common.plugin.LuckPermsPlugin;
|
||||
import me.lucko.luckperms.common.utils.Predicates;
|
||||
import me.lucko.luckperms.sponge.service.model.LPSubjectData;
|
||||
import me.lucko.luckperms.sponge.service.model.SubjectReference;
|
||||
import me.lucko.luckperms.sponge.service.reference.LPSubjectReference;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@@ -54,18 +54,18 @@ public class ParentInfo extends SubCommand<LPSubjectData> {
|
||||
ImmutableContextSet contextSet = ArgumentUtils.handleContextSponge(0, args);
|
||||
if (contextSet.isEmpty()) {
|
||||
CommandUtils.sendPluginMessage(sender, "&aShowing parents matching contexts &bANY&a.");
|
||||
Map<ImmutableContextSet, ImmutableList<SubjectReference>> parents = subjectData.getAllParents();
|
||||
Map<ImmutableContextSet, ImmutableList<LPSubjectReference>> parents = subjectData.getAllParents();
|
||||
if (parents.isEmpty()) {
|
||||
CommandUtils.sendPluginMessage(sender, "That subject does not have any parents defined.");
|
||||
return CommandResult.SUCCESS;
|
||||
}
|
||||
|
||||
for (Map.Entry<ImmutableContextSet, ImmutableList<SubjectReference>> e : parents.entrySet()) {
|
||||
for (Map.Entry<ImmutableContextSet, ImmutableList<LPSubjectReference>> e : parents.entrySet()) {
|
||||
CommandUtils.sendPluginMessage(sender, "&3>> &bContext: " + SpongeCommandUtils.contextToString(e.getKey()) + "\n" + SpongeCommandUtils.parentsToString(e.getValue()));
|
||||
}
|
||||
|
||||
} else {
|
||||
List<SubjectReference> parents = subjectData.getParents(contextSet);
|
||||
List<LPSubjectReference> parents = subjectData.getParents(contextSet);
|
||||
if (parents.isEmpty()) {
|
||||
CommandUtils.sendPluginMessage(sender, "That subject does not have any parents defined in those contexts.");
|
||||
return CommandResult.SUCCESS;
|
||||
|
||||
@@ -29,7 +29,7 @@ import me.lucko.luckperms.api.Tristate;
|
||||
import me.lucko.luckperms.api.context.ContextSet;
|
||||
import me.lucko.luckperms.common.commands.utils.ArgumentUtils;
|
||||
import me.lucko.luckperms.common.commands.utils.CommandUtils;
|
||||
import me.lucko.luckperms.sponge.service.model.SubjectReference;
|
||||
import me.lucko.luckperms.sponge.service.reference.LPSubjectReference;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@@ -73,9 +73,9 @@ public final class SpongeCommandUtils {
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
public static String parentsToString(Iterable<SubjectReference> parents) {
|
||||
public static String parentsToString(Iterable<LPSubjectReference> parents) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
for (SubjectReference s : parents) {
|
||||
for (LPSubjectReference s : parents) {
|
||||
sb.append("&3> &a")
|
||||
.append(s.getSubjectIdentifier())
|
||||
.append(" &bfrom collection &a")
|
||||
|
||||
@@ -45,8 +45,8 @@ import me.lucko.luckperms.sponge.service.LuckPermsService;
|
||||
import me.lucko.luckperms.sponge.service.ProxyFactory;
|
||||
import me.lucko.luckperms.sponge.service.model.LPSubject;
|
||||
import me.lucko.luckperms.sponge.service.model.LPSubjectCollection;
|
||||
import me.lucko.luckperms.sponge.service.model.SubjectReference;
|
||||
import me.lucko.luckperms.sponge.service.model.SubjectReferenceFactory;
|
||||
import me.lucko.luckperms.sponge.service.reference.LPSubjectReference;
|
||||
import me.lucko.luckperms.sponge.service.reference.SubjectReferenceFactory;
|
||||
|
||||
import org.spongepowered.api.service.permission.PermissionService;
|
||||
import org.spongepowered.api.service.permission.SubjectCollection;
|
||||
@@ -129,9 +129,7 @@ public class SpongeGroupManager extends AbstractGroupManager<SpongeGroup> implem
|
||||
@Override
|
||||
public CompletableFuture<LPSubject> loadSubject(String identifier) {
|
||||
if (!DataConstraints.GROUP_NAME_TEST.test(identifier)) {
|
||||
CompletableFuture<LPSubject> fut = new CompletableFuture<>();
|
||||
fut.completeExceptionally(new IllegalArgumentException("Illegal subject identifier"));
|
||||
return fut;
|
||||
throw new IllegalArgumentException("Illegal subject identifier");
|
||||
}
|
||||
|
||||
LPSubject present = this.subjectLoadingCache.getIfPresent(identifier.toLowerCase());
|
||||
@@ -144,16 +142,20 @@ public class SpongeGroupManager extends AbstractGroupManager<SpongeGroup> implem
|
||||
|
||||
@Override
|
||||
public Optional<LPSubject> getSubject(String identifier) {
|
||||
if (!DataConstraints.GROUP_NAME_TEST.test(identifier)) {
|
||||
return Optional.empty();
|
||||
}
|
||||
|
||||
return Optional.ofNullable(getIfLoaded(identifier.toLowerCase())).map(SpongeGroup::sponge);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CompletableFuture<Boolean> hasRegistered(String identifier) {
|
||||
if (isLoaded(identifier.toLowerCase())) {
|
||||
return CompletableFuture.completedFuture(true);
|
||||
} else {
|
||||
if (!DataConstraints.GROUP_NAME_TEST.test(identifier)) {
|
||||
return CompletableFuture.completedFuture(false);
|
||||
}
|
||||
|
||||
return CompletableFuture.completedFuture(isLoaded(identifier.toLowerCase()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -161,6 +163,9 @@ public class SpongeGroupManager extends AbstractGroupManager<SpongeGroup> implem
|
||||
return CompletableFuture.supplyAsync(() -> {
|
||||
ImmutableSet.Builder<LPSubject> ret = ImmutableSet.builder();
|
||||
for (String id : identifiers) {
|
||||
if (!DataConstraints.GROUP_NAME_TEST.test(id)) {
|
||||
continue;
|
||||
}
|
||||
ret.add(loadSubject(id.toLowerCase()).join());
|
||||
}
|
||||
|
||||
@@ -179,9 +184,9 @@ public class SpongeGroupManager extends AbstractGroupManager<SpongeGroup> implem
|
||||
}
|
||||
|
||||
@Override
|
||||
public CompletableFuture<ImmutableMap<SubjectReference, Boolean>> getAllWithPermission(String permission) {
|
||||
public CompletableFuture<ImmutableMap<LPSubjectReference, Boolean>> getAllWithPermission(String permission) {
|
||||
return CompletableFuture.supplyAsync(() -> {
|
||||
ImmutableMap.Builder<SubjectReference, Boolean> ret = ImmutableMap.builder();
|
||||
ImmutableMap.Builder<LPSubjectReference, Boolean> ret = ImmutableMap.builder();
|
||||
|
||||
List<HeldPermission<String>> lookup = this.plugin.getStorage().getGroupsWithPermission(permission).join();
|
||||
for (HeldPermission<String> holder : lookup) {
|
||||
@@ -195,9 +200,9 @@ public class SpongeGroupManager extends AbstractGroupManager<SpongeGroup> implem
|
||||
}
|
||||
|
||||
@Override
|
||||
public CompletableFuture<ImmutableMap<SubjectReference, Boolean>> getAllWithPermission(ImmutableContextSet contexts, String permission) {
|
||||
public CompletableFuture<ImmutableMap<LPSubjectReference, Boolean>> getAllWithPermission(ImmutableContextSet contexts, String permission) {
|
||||
return CompletableFuture.supplyAsync(() -> {
|
||||
ImmutableMap.Builder<SubjectReference, Boolean> ret = ImmutableMap.builder();
|
||||
ImmutableMap.Builder<LPSubjectReference, Boolean> ret = ImmutableMap.builder();
|
||||
|
||||
List<HeldPermission<String>> lookup = this.plugin.getStorage().getGroupsWithPermission(permission).join();
|
||||
for (HeldPermission<String> holder : lookup) {
|
||||
|
||||
@@ -39,14 +39,15 @@ import me.lucko.luckperms.common.managers.user.AbstractUserManager;
|
||||
import me.lucko.luckperms.common.managers.user.UserHousekeeper;
|
||||
import me.lucko.luckperms.common.references.UserIdentifier;
|
||||
import me.lucko.luckperms.common.utils.ImmutableCollectors;
|
||||
import me.lucko.luckperms.common.utils.Uuids;
|
||||
import me.lucko.luckperms.sponge.LPSpongePlugin;
|
||||
import me.lucko.luckperms.sponge.model.SpongeUser;
|
||||
import me.lucko.luckperms.sponge.service.LuckPermsService;
|
||||
import me.lucko.luckperms.sponge.service.ProxyFactory;
|
||||
import me.lucko.luckperms.sponge.service.model.LPSubject;
|
||||
import me.lucko.luckperms.sponge.service.model.LPSubjectCollection;
|
||||
import me.lucko.luckperms.sponge.service.model.SubjectReference;
|
||||
import me.lucko.luckperms.sponge.service.model.SubjectReferenceFactory;
|
||||
import me.lucko.luckperms.sponge.service.reference.LPSubjectReference;
|
||||
import me.lucko.luckperms.sponge.service.reference.SubjectReferenceFactory;
|
||||
|
||||
import org.spongepowered.api.service.permission.PermissionService;
|
||||
import org.spongepowered.api.service.permission.SubjectCollection;
|
||||
@@ -133,26 +134,14 @@ public class SpongeUserManager extends AbstractUserManager<SpongeUser> implement
|
||||
|
||||
@Override
|
||||
public Predicate<String> getIdentifierValidityPredicate() {
|
||||
return s -> {
|
||||
try {
|
||||
//noinspection ResultOfMethodCallIgnored
|
||||
UUID.fromString(s);
|
||||
return true;
|
||||
} catch (IllegalArgumentException e) {
|
||||
return false;
|
||||
}
|
||||
};
|
||||
return Uuids.PREDICATE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CompletableFuture<LPSubject> loadSubject(String identifier) {
|
||||
UUID uuid;
|
||||
try {
|
||||
uuid = UUID.fromString(identifier);
|
||||
} catch (IllegalArgumentException e) {
|
||||
CompletableFuture<LPSubject> fut = new CompletableFuture<>();
|
||||
fut.completeExceptionally(e);
|
||||
return fut;
|
||||
UUID uuid = Uuids.parseNullable(identifier);
|
||||
if (uuid == null) {
|
||||
throw new IllegalArgumentException("Identifier is not a UUID: " + identifier);
|
||||
}
|
||||
|
||||
LPSubject present = this.subjectLoadingCache.getIfPresent(uuid);
|
||||
@@ -165,32 +154,25 @@ public class SpongeUserManager extends AbstractUserManager<SpongeUser> implement
|
||||
|
||||
@Override
|
||||
public Optional<LPSubject> getSubject(String identifier) {
|
||||
UUID uuid = UUID.fromString(identifier);
|
||||
UUID uuid = Uuids.parseNullable(identifier);
|
||||
if (uuid == null) {
|
||||
return Optional.empty();
|
||||
}
|
||||
return Optional.ofNullable(getIfLoaded(uuid)).map(SpongeUser::sponge);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CompletableFuture<Boolean> hasRegistered(String identifier) {
|
||||
UUID uuid = null;
|
||||
IllegalArgumentException ex = null;
|
||||
try {
|
||||
uuid = UUID.fromString(identifier);
|
||||
} catch (IllegalArgumentException e) {
|
||||
ex = e;
|
||||
UUID uuid = Uuids.parseNullable(identifier);
|
||||
if (uuid == null) {
|
||||
return CompletableFuture.completedFuture(false);
|
||||
}
|
||||
|
||||
if (uuid != null && isLoaded(UserIdentifier.of(uuid, null))) {
|
||||
if (isLoaded(UserIdentifier.of(uuid, null))) {
|
||||
return CompletableFuture.completedFuture(true);
|
||||
}
|
||||
|
||||
if (uuid == null) {
|
||||
CompletableFuture<Boolean> fut = new CompletableFuture<>();
|
||||
fut.completeExceptionally(ex);
|
||||
return fut;
|
||||
}
|
||||
|
||||
UUID finalUuid = uuid;
|
||||
return this.plugin.getStorage().getUniqueUsers().thenApply(set -> set.contains(finalUuid));
|
||||
return this.plugin.getStorage().getUniqueUsers().thenApply(set -> set.contains(uuid));
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -198,13 +180,10 @@ public class SpongeUserManager extends AbstractUserManager<SpongeUser> implement
|
||||
return CompletableFuture.supplyAsync(() -> {
|
||||
ImmutableSet.Builder<LPSubject> ret = ImmutableSet.builder();
|
||||
for (String id : identifiers) {
|
||||
UUID uuid;
|
||||
try {
|
||||
uuid = UUID.fromString(id);
|
||||
} catch (IllegalArgumentException e) {
|
||||
UUID uuid = Uuids.parseNullable(id);
|
||||
if (uuid == null) {
|
||||
continue;
|
||||
}
|
||||
|
||||
ret.add(loadSubject(uuid.toString()).join());
|
||||
}
|
||||
|
||||
@@ -230,9 +209,9 @@ public class SpongeUserManager extends AbstractUserManager<SpongeUser> implement
|
||||
}
|
||||
|
||||
@Override
|
||||
public CompletableFuture<ImmutableMap<SubjectReference, Boolean>> getAllWithPermission(String permission) {
|
||||
public CompletableFuture<ImmutableMap<LPSubjectReference, Boolean>> getAllWithPermission(String permission) {
|
||||
return CompletableFuture.supplyAsync(() -> {
|
||||
ImmutableMap.Builder<SubjectReference, Boolean> ret = ImmutableMap.builder();
|
||||
ImmutableMap.Builder<LPSubjectReference, Boolean> ret = ImmutableMap.builder();
|
||||
|
||||
List<HeldPermission<UUID>> lookup = this.plugin.getStorage().getUsersWithPermission(permission).join();
|
||||
for (HeldPermission<UUID> holder : lookup) {
|
||||
@@ -246,9 +225,9 @@ public class SpongeUserManager extends AbstractUserManager<SpongeUser> implement
|
||||
}
|
||||
|
||||
@Override
|
||||
public CompletableFuture<ImmutableMap<SubjectReference, Boolean>> getAllWithPermission(ImmutableContextSet contexts, String permission) {
|
||||
public CompletableFuture<ImmutableMap<LPSubjectReference, Boolean>> getAllWithPermission(ImmutableContextSet contexts, String permission) {
|
||||
return CompletableFuture.supplyAsync(() -> {
|
||||
ImmutableMap.Builder<SubjectReference, Boolean> ret = ImmutableMap.builder();
|
||||
ImmutableMap.Builder<LPSubjectReference, Boolean> ret = ImmutableMap.builder();
|
||||
|
||||
List<HeldPermission<UUID>> lookup = this.plugin.getStorage().getUsersWithPermission(permission).join();
|
||||
for (HeldPermission<UUID> holder : lookup) {
|
||||
|
||||
+2
-2
@@ -31,7 +31,6 @@ import me.lucko.luckperms.common.commands.CommandResult;
|
||||
import me.lucko.luckperms.common.commands.abstraction.SubCommand;
|
||||
import me.lucko.luckperms.common.commands.impl.migration.MigrationUtils;
|
||||
import me.lucko.luckperms.common.commands.sender.Sender;
|
||||
import me.lucko.luckperms.common.commands.utils.CommandUtils;
|
||||
import me.lucko.luckperms.common.locale.CommandSpec;
|
||||
import me.lucko.luckperms.common.locale.LocaleManager;
|
||||
import me.lucko.luckperms.common.logging.ProgressLogger;
|
||||
@@ -40,6 +39,7 @@ import me.lucko.luckperms.common.model.User;
|
||||
import me.lucko.luckperms.common.plugin.LuckPermsPlugin;
|
||||
import me.lucko.luckperms.common.utils.Predicates;
|
||||
import me.lucko.luckperms.common.utils.SafeIterator;
|
||||
import me.lucko.luckperms.common.utils.Uuids;
|
||||
import me.lucko.luckperms.sponge.LPSpongePlugin;
|
||||
import me.lucko.luckperms.sponge.service.LuckPermsService;
|
||||
|
||||
@@ -119,7 +119,7 @@ public class MigrationPermissionManager extends SubCommand<Object> {
|
||||
log.log("Starting user migration.");
|
||||
AtomicInteger userCount = new AtomicInteger(0);
|
||||
SafeIterator.iterate(pmService.getUserSubjects().getAllSubjects(), pmUser -> {
|
||||
UUID uuid = CommandUtils.parseUuid(pmUser.getIdentifier());
|
||||
UUID uuid = Uuids.parseNullable(pmUser.getIdentifier());
|
||||
if (uuid == null) {
|
||||
log.logErr("Could not parse UUID for user: " + pmUser.getIdentifier());
|
||||
return;
|
||||
|
||||
+2
-2
@@ -31,7 +31,6 @@ import me.lucko.luckperms.common.commands.CommandResult;
|
||||
import me.lucko.luckperms.common.commands.abstraction.SubCommand;
|
||||
import me.lucko.luckperms.common.commands.impl.migration.MigrationUtils;
|
||||
import me.lucko.luckperms.common.commands.sender.Sender;
|
||||
import me.lucko.luckperms.common.commands.utils.CommandUtils;
|
||||
import me.lucko.luckperms.common.locale.CommandSpec;
|
||||
import me.lucko.luckperms.common.locale.LocaleManager;
|
||||
import me.lucko.luckperms.common.logging.ProgressLogger;
|
||||
@@ -41,6 +40,7 @@ import me.lucko.luckperms.common.model.User;
|
||||
import me.lucko.luckperms.common.plugin.LuckPermsPlugin;
|
||||
import me.lucko.luckperms.common.utils.Predicates;
|
||||
import me.lucko.luckperms.common.utils.SafeIterator;
|
||||
import me.lucko.luckperms.common.utils.Uuids;
|
||||
import me.lucko.luckperms.sponge.LPSpongePlugin;
|
||||
import me.lucko.luckperms.sponge.service.LuckPermsService;
|
||||
|
||||
@@ -172,7 +172,7 @@ public class MigrationPermissionsEx extends SubCommand<Object> {
|
||||
int userWeight = maxWeight + 5;
|
||||
|
||||
SafeIterator.iterate(pexService.getUserSubjects().getAllSubjects(), pexUser -> {
|
||||
UUID uuid = CommandUtils.parseUuid(pexUser.getIdentifier());
|
||||
UUID uuid = Uuids.parseNullable(pexUser.getIdentifier());
|
||||
if (uuid == null) {
|
||||
log.logErr("Could not parse UUID for user: " + pexUser.getIdentifier());
|
||||
return;
|
||||
|
||||
@@ -40,7 +40,7 @@ import me.lucko.luckperms.sponge.service.LuckPermsSubjectData;
|
||||
import me.lucko.luckperms.sponge.service.ProxyFactory;
|
||||
import me.lucko.luckperms.sponge.service.model.LPSubject;
|
||||
import me.lucko.luckperms.sponge.service.model.LPSubjectCollection;
|
||||
import me.lucko.luckperms.sponge.service.model.SubjectReference;
|
||||
import me.lucko.luckperms.sponge.service.reference.LPSubjectReference;
|
||||
|
||||
import org.spongepowered.api.command.CommandSource;
|
||||
import org.spongepowered.api.service.permission.PermissionService;
|
||||
@@ -123,13 +123,13 @@ public class SpongeGroup extends Group {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isChildOf(ImmutableContextSet contexts, SubjectReference parent) {
|
||||
public boolean isChildOf(ImmutableContextSet contexts, LPSubjectReference parent) {
|
||||
return parent.getCollectionIdentifier().equals(PermissionService.SUBJECTS_GROUP) && getPermissionValue(contexts, NodeFactory.groupNode(parent.getSubjectIdentifier())).asBoolean();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ImmutableList<SubjectReference> getParents(ImmutableContextSet contexts) {
|
||||
ImmutableSet.Builder<SubjectReference> subjects = ImmutableSet.builder();
|
||||
public ImmutableList<LPSubjectReference> getParents(ImmutableContextSet contexts) {
|
||||
ImmutableSet.Builder<LPSubjectReference> subjects = ImmutableSet.builder();
|
||||
|
||||
for (Map.Entry<String, Boolean> entry : this.parent.getCachedData().getPermissionData(this.plugin.getContextManager().formContexts(contexts)).getImmutableBacking().entrySet()) {
|
||||
if (!entry.getValue()) {
|
||||
@@ -180,11 +180,6 @@ public class SpongeGroup extends Group {
|
||||
return this.plugin.getService().getDefaults().getOption(contexts, s);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ImmutableContextSet getActiveContextSet() {
|
||||
return this.plugin.getContextManager().getApplicableContext(this.sponge());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void invalidateCaches(CacheLevel cacheLevel) {
|
||||
// invalidate for all changes
|
||||
|
||||
@@ -40,7 +40,7 @@ import me.lucko.luckperms.sponge.service.LuckPermsSubjectData;
|
||||
import me.lucko.luckperms.sponge.service.ProxyFactory;
|
||||
import me.lucko.luckperms.sponge.service.model.LPSubject;
|
||||
import me.lucko.luckperms.sponge.service.model.LPSubjectCollection;
|
||||
import me.lucko.luckperms.sponge.service.model.SubjectReference;
|
||||
import me.lucko.luckperms.sponge.service.reference.LPSubjectReference;
|
||||
|
||||
import org.spongepowered.api.Sponge;
|
||||
import org.spongepowered.api.command.CommandSource;
|
||||
@@ -132,13 +132,13 @@ public class SpongeUser extends User {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isChildOf(ImmutableContextSet contexts, SubjectReference parent) {
|
||||
public boolean isChildOf(ImmutableContextSet contexts, LPSubjectReference parent) {
|
||||
return parent.getCollectionIdentifier().equals(PermissionService.SUBJECTS_GROUP) && getPermissionValue(contexts, NodeFactory.groupNode(parent.getSubjectIdentifier())).asBoolean();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ImmutableList<SubjectReference> getParents(ImmutableContextSet contexts) {
|
||||
ImmutableSet.Builder<SubjectReference> subjects = ImmutableSet.builder();
|
||||
public ImmutableList<LPSubjectReference> getParents(ImmutableContextSet contexts) {
|
||||
ImmutableSet.Builder<LPSubjectReference> subjects = ImmutableSet.builder();
|
||||
|
||||
for (Map.Entry<String, Boolean> entry : this.parent.getCachedData().getPermissionData(this.plugin.getContextManager().formContexts(contexts)).getImmutableBacking().entrySet()) {
|
||||
if (!entry.getValue()) {
|
||||
@@ -189,11 +189,6 @@ public class SpongeUser extends User {
|
||||
return this.plugin.getService().getDefaults().getOption(contexts, s);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ImmutableContextSet getActiveContextSet() {
|
||||
return this.plugin.getContextManager().getApplicableContext(this.sponge());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void invalidateCaches(CacheLevel cacheLevel) {
|
||||
// invalidate for all changes
|
||||
|
||||
@@ -0,0 +1,66 @@
|
||||
/*
|
||||
* This file is part of LuckPerms, licensed under the MIT License.
|
||||
*
|
||||
* Copyright (c) lucko (Luck) <luck@lucko.me>
|
||||
* Copyright (c) contributors
|
||||
*
|
||||
* 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.sponge.processors;
|
||||
|
||||
import me.lucko.luckperms.api.Tristate;
|
||||
import me.lucko.luckperms.api.context.ImmutableContextSet;
|
||||
import me.lucko.luckperms.common.processors.PermissionProcessor;
|
||||
import me.lucko.luckperms.sponge.service.LuckPermsService;
|
||||
import me.lucko.luckperms.sponge.service.model.LPSubject;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
public abstract class DefaultsProcessor implements PermissionProcessor {
|
||||
private final LuckPermsService service;
|
||||
private final ImmutableContextSet contexts;
|
||||
|
||||
public DefaultsProcessor(LuckPermsService service, ImmutableContextSet contexts) {
|
||||
this.service = service;
|
||||
this.contexts = contexts;
|
||||
}
|
||||
|
||||
protected abstract LPSubject getTypeDefaults(LuckPermsService service);
|
||||
|
||||
@Override
|
||||
public Tristate hasPermission(String permission) {
|
||||
Tristate t = getTypeDefaults(this.service).getPermissionValue(this.contexts, permission);
|
||||
if (t != Tristate.UNDEFINED) {
|
||||
return t;
|
||||
}
|
||||
|
||||
t = this.service.getDefaults().getPermissionValue(this.contexts, permission);
|
||||
if (t != Tristate.UNDEFINED) {
|
||||
return t;
|
||||
}
|
||||
|
||||
return Tristate.UNDEFINED;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateBacking(Map<String, Boolean> map) {
|
||||
// Do nothing, this doesn't use the backing
|
||||
}
|
||||
}
|
||||
+5
-26
@@ -25,39 +25,18 @@
|
||||
|
||||
package me.lucko.luckperms.sponge.processors;
|
||||
|
||||
import me.lucko.luckperms.api.Tristate;
|
||||
import me.lucko.luckperms.api.context.ImmutableContextSet;
|
||||
import me.lucko.luckperms.common.processors.PermissionProcessor;
|
||||
import me.lucko.luckperms.sponge.service.LuckPermsService;
|
||||
import me.lucko.luckperms.sponge.service.model.LPSubject;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
public class GroupDefaultsProcessor implements PermissionProcessor {
|
||||
private final LuckPermsService service;
|
||||
private final ImmutableContextSet contexts;
|
||||
|
||||
public class GroupDefaultsProcessor extends DefaultsProcessor implements PermissionProcessor {
|
||||
public GroupDefaultsProcessor(LuckPermsService service, ImmutableContextSet contexts) {
|
||||
this.service = service;
|
||||
this.contexts = contexts;
|
||||
super(service, contexts);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Tristate hasPermission(String permission) {
|
||||
Tristate t = this.service.getGroupSubjects().getDefaults().getPermissionValue(this.contexts, permission);
|
||||
if (t != Tristate.UNDEFINED) {
|
||||
return t;
|
||||
}
|
||||
|
||||
t = this.service.getDefaults().getPermissionValue(this.contexts, permission);
|
||||
if (t != Tristate.UNDEFINED) {
|
||||
return t;
|
||||
}
|
||||
|
||||
return Tristate.UNDEFINED;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateBacking(Map<String, Boolean> map) {
|
||||
// Do nothing, this doesn't use the backing
|
||||
protected LPSubject getTypeDefaults(LuckPermsService service) {
|
||||
return service.getGroupSubjects().getDefaults();
|
||||
}
|
||||
}
|
||||
|
||||
+5
-26
@@ -25,39 +25,18 @@
|
||||
|
||||
package me.lucko.luckperms.sponge.processors;
|
||||
|
||||
import me.lucko.luckperms.api.Tristate;
|
||||
import me.lucko.luckperms.api.context.ImmutableContextSet;
|
||||
import me.lucko.luckperms.common.processors.PermissionProcessor;
|
||||
import me.lucko.luckperms.sponge.service.LuckPermsService;
|
||||
import me.lucko.luckperms.sponge.service.model.LPSubject;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
public class UserDefaultsProcessor implements PermissionProcessor {
|
||||
private final LuckPermsService service;
|
||||
private final ImmutableContextSet contexts;
|
||||
|
||||
public class UserDefaultsProcessor extends DefaultsProcessor implements PermissionProcessor {
|
||||
public UserDefaultsProcessor(LuckPermsService service, ImmutableContextSet contexts) {
|
||||
this.service = service;
|
||||
this.contexts = contexts;
|
||||
super(service, contexts);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Tristate hasPermission(String permission) {
|
||||
Tristate t = this.service.getUserSubjects().getDefaults().getPermissionValue(this.contexts, permission);
|
||||
if (t != Tristate.UNDEFINED) {
|
||||
return t;
|
||||
}
|
||||
|
||||
t = this.service.getDefaults().getPermissionValue(this.contexts, permission);
|
||||
if (t != Tristate.UNDEFINED) {
|
||||
return t;
|
||||
}
|
||||
|
||||
return Tristate.UNDEFINED;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateBacking(Map<String, Boolean> map) {
|
||||
// Do nothing, this doesn't use the backing
|
||||
protected LPSubject getTypeDefaults(LuckPermsService service) {
|
||||
return service.getUserSubjects().getDefaults();
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -29,7 +29,7 @@ import me.lucko.luckperms.sponge.service.model.LPPermissionDescription;
|
||||
import me.lucko.luckperms.sponge.service.model.LPPermissionService;
|
||||
import me.lucko.luckperms.sponge.service.model.LPSubject;
|
||||
import me.lucko.luckperms.sponge.service.model.LPSubjectCollection;
|
||||
import me.lucko.luckperms.sponge.service.model.SubjectReference;
|
||||
import me.lucko.luckperms.sponge.service.reference.LPSubjectReference;
|
||||
|
||||
import org.spongepowered.api.plugin.PluginContainer;
|
||||
import org.spongepowered.api.service.permission.PermissionDescription;
|
||||
@@ -89,7 +89,7 @@ public final class LuckPermsPermissionDescription implements LPPermissionDescrip
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public CompletableFuture<Map<SubjectReference, Boolean>> findAssignedSubjects(String id) {
|
||||
public CompletableFuture<Map<LPSubjectReference, Boolean>> findAssignedSubjects(String id) {
|
||||
LPSubjectCollection collection = this.service.getCollection(id);
|
||||
return (CompletableFuture) collection.getAllWithPermission(this.id);
|
||||
}
|
||||
|
||||
@@ -42,9 +42,9 @@ import me.lucko.luckperms.sponge.service.model.LPPermissionDescription;
|
||||
import me.lucko.luckperms.sponge.service.model.LPPermissionService;
|
||||
import me.lucko.luckperms.sponge.service.model.LPSubject;
|
||||
import me.lucko.luckperms.sponge.service.model.LPSubjectCollection;
|
||||
import me.lucko.luckperms.sponge.service.model.SubjectReference;
|
||||
import me.lucko.luckperms.sponge.service.model.SubjectReferenceFactory;
|
||||
import me.lucko.luckperms.sponge.service.persisted.PersistedCollection;
|
||||
import me.lucko.luckperms.sponge.service.reference.LPSubjectReference;
|
||||
import me.lucko.luckperms.sponge.service.reference.SubjectReferenceFactory;
|
||||
import me.lucko.luckperms.sponge.service.storage.SubjectStorage;
|
||||
|
||||
import org.spongepowered.api.plugin.PluginContainer;
|
||||
@@ -211,8 +211,8 @@ public class LuckPermsService implements LPPermissionService {
|
||||
}
|
||||
|
||||
@Override
|
||||
public ImmutableList<SubjectReference> sortSubjects(Collection<SubjectReference> s) {
|
||||
List<SubjectReference> ret = new ArrayList<>(s);
|
||||
public ImmutableList<LPSubjectReference> sortSubjects(Collection<LPSubjectReference> s) {
|
||||
List<LPSubjectReference> ret = new ArrayList<>(s);
|
||||
ret.sort(Collections.reverseOrder((o1, o2) -> {
|
||||
if (o1.equals(o2)) {
|
||||
return 0;
|
||||
|
||||
@@ -40,7 +40,7 @@ import me.lucko.luckperms.common.model.User;
|
||||
import me.lucko.luckperms.common.node.NodeFactory;
|
||||
import me.lucko.luckperms.sponge.service.model.LPSubject;
|
||||
import me.lucko.luckperms.sponge.service.model.LPSubjectData;
|
||||
import me.lucko.luckperms.sponge.service.model.SubjectReference;
|
||||
import me.lucko.luckperms.sponge.service.reference.LPSubjectReference;
|
||||
|
||||
import org.spongepowered.api.service.permission.PermissionService;
|
||||
|
||||
@@ -178,11 +178,11 @@ public class LuckPermsSubjectData implements LPSubjectData {
|
||||
}
|
||||
|
||||
@Override
|
||||
public ImmutableMap<ImmutableContextSet, ImmutableList<SubjectReference>> getAllParents() {
|
||||
Map<ImmutableContextSet, ImmutableList.Builder<SubjectReference>> parents = new HashMap<>();
|
||||
public ImmutableMap<ImmutableContextSet, ImmutableList<LPSubjectReference>> getAllParents() {
|
||||
Map<ImmutableContextSet, ImmutableList.Builder<LPSubjectReference>> parents = new HashMap<>();
|
||||
|
||||
for (Map.Entry<ImmutableContextSet, Collection<Node>> e : (this.enduring ? this.holder.getEnduringNodes() : this.holder.getTransientNodes()).asMap().entrySet()) {
|
||||
ImmutableList.Builder<SubjectReference> results = ImmutableList.builder();
|
||||
ImmutableList.Builder<LPSubjectReference> results = ImmutableList.builder();
|
||||
for (Node n : e.getValue()) {
|
||||
if (n.isGroupNode()) {
|
||||
results.add(this.service.getGroupSubjects().loadSubject(n.getGroupName()).join().toReference());
|
||||
@@ -191,15 +191,15 @@ public class LuckPermsSubjectData implements LPSubjectData {
|
||||
parents.put(e.getKey(), results);
|
||||
}
|
||||
|
||||
ImmutableMap.Builder<ImmutableContextSet, ImmutableList<SubjectReference>> map = ImmutableMap.builder();
|
||||
for (Map.Entry<ImmutableContextSet, ImmutableList.Builder<SubjectReference>> e : parents.entrySet()) {
|
||||
ImmutableMap.Builder<ImmutableContextSet, ImmutableList<LPSubjectReference>> map = ImmutableMap.builder();
|
||||
for (Map.Entry<ImmutableContextSet, ImmutableList.Builder<LPSubjectReference>> e : parents.entrySet()) {
|
||||
map.put(e.getKey(), e.getValue().build());
|
||||
}
|
||||
return map.build();
|
||||
}
|
||||
|
||||
@Override
|
||||
public CompletableFuture<Boolean> addParent(ImmutableContextSet contexts, SubjectReference subject) {
|
||||
public CompletableFuture<Boolean> addParent(ImmutableContextSet contexts, LPSubjectReference subject) {
|
||||
Objects.requireNonNull(contexts, "contexts");
|
||||
Objects.requireNonNull(subject, "subject");
|
||||
|
||||
@@ -228,7 +228,7 @@ public class LuckPermsSubjectData implements LPSubjectData {
|
||||
}
|
||||
|
||||
@Override
|
||||
public CompletableFuture<Boolean> removeParent(ImmutableContextSet contexts, SubjectReference subject) {
|
||||
public CompletableFuture<Boolean> removeParent(ImmutableContextSet contexts, LPSubjectReference subject) {
|
||||
Objects.requireNonNull(contexts, "contexts");
|
||||
Objects.requireNonNull(subject, "subject");
|
||||
|
||||
|
||||
+13
-13
@@ -45,7 +45,7 @@ import me.lucko.luckperms.sponge.processors.SpongeWildcardProcessor;
|
||||
import me.lucko.luckperms.sponge.service.model.LPPermissionService;
|
||||
import me.lucko.luckperms.sponge.service.model.LPSubject;
|
||||
import me.lucko.luckperms.sponge.service.model.LPSubjectData;
|
||||
import me.lucko.luckperms.sponge.service.model.SubjectReference;
|
||||
import me.lucko.luckperms.sponge.service.reference.LPSubjectReference;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
@@ -70,7 +70,7 @@ public class CalculatedSubjectData implements LPSubjectData {
|
||||
private final String calculatorDisplayName;
|
||||
|
||||
private final Map<ImmutableContextSet, Map<String, Boolean>> permissions = new ConcurrentHashMap<>();
|
||||
private final Map<ImmutableContextSet, Set<SubjectReference>> parents = new ConcurrentHashMap<>();
|
||||
private final Map<ImmutableContextSet, Set<LPSubjectReference>> parents = new ConcurrentHashMap<>();
|
||||
private final Map<ImmutableContextSet, Map<String, String>> options = new ConcurrentHashMap<>();
|
||||
|
||||
private final LoadingCache<ImmutableContextSet, CalculatorHolder> permissionCache = Caffeine.newBuilder()
|
||||
@@ -121,10 +121,10 @@ public class CalculatedSubjectData implements LPSubjectData {
|
||||
this.service.invalidateAllCaches(LPSubject.CacheLevel.PERMISSION);
|
||||
}
|
||||
|
||||
public void replaceParents(Map<ImmutableContextSet, List<SubjectReference>> map) {
|
||||
public void replaceParents(Map<ImmutableContextSet, List<LPSubjectReference>> map) {
|
||||
this.parents.clear();
|
||||
for (Map.Entry<ImmutableContextSet, List<SubjectReference>> e : map.entrySet()) {
|
||||
Set<SubjectReference> set = ConcurrentHashMap.newKeySet();
|
||||
for (Map.Entry<ImmutableContextSet, List<LPSubjectReference>> e : map.entrySet()) {
|
||||
Set<LPSubjectReference> set = ConcurrentHashMap.newKeySet();
|
||||
set.addAll(e.getValue());
|
||||
this.parents.put(e.getKey(), set);
|
||||
}
|
||||
@@ -194,17 +194,17 @@ public class CalculatedSubjectData implements LPSubjectData {
|
||||
}
|
||||
|
||||
@Override
|
||||
public ImmutableMap<ImmutableContextSet, ImmutableList<SubjectReference>> getAllParents() {
|
||||
ImmutableMap.Builder<ImmutableContextSet, ImmutableList<SubjectReference>> map = ImmutableMap.builder();
|
||||
for (Map.Entry<ImmutableContextSet, Set<SubjectReference>> e : this.parents.entrySet()) {
|
||||
public ImmutableMap<ImmutableContextSet, ImmutableList<LPSubjectReference>> getAllParents() {
|
||||
ImmutableMap.Builder<ImmutableContextSet, ImmutableList<LPSubjectReference>> map = ImmutableMap.builder();
|
||||
for (Map.Entry<ImmutableContextSet, Set<LPSubjectReference>> e : this.parents.entrySet()) {
|
||||
map.put(e.getKey(), this.service.sortSubjects(e.getValue()));
|
||||
}
|
||||
return map.build();
|
||||
}
|
||||
|
||||
@Override
|
||||
public CompletableFuture<Boolean> addParent(ImmutableContextSet contexts, SubjectReference parent) {
|
||||
Set<SubjectReference> set = this.parents.computeIfAbsent(contexts, c -> ConcurrentHashMap.newKeySet());
|
||||
public CompletableFuture<Boolean> addParent(ImmutableContextSet contexts, LPSubjectReference parent) {
|
||||
Set<LPSubjectReference> set = this.parents.computeIfAbsent(contexts, c -> ConcurrentHashMap.newKeySet());
|
||||
boolean b = set.add(parent);
|
||||
if (b) {
|
||||
this.service.invalidateAllCaches(LPSubject.CacheLevel.PARENT);
|
||||
@@ -213,8 +213,8 @@ public class CalculatedSubjectData implements LPSubjectData {
|
||||
}
|
||||
|
||||
@Override
|
||||
public CompletableFuture<Boolean> removeParent(ImmutableContextSet contexts, SubjectReference parent) {
|
||||
Set<SubjectReference> set = this.parents.get(contexts);
|
||||
public CompletableFuture<Boolean> removeParent(ImmutableContextSet contexts, LPSubjectReference parent) {
|
||||
Set<LPSubjectReference> set = this.parents.get(contexts);
|
||||
boolean b = set != null && set.remove(parent);
|
||||
if (b) {
|
||||
this.service.invalidateAllCaches(LPSubject.CacheLevel.PARENT);
|
||||
@@ -235,7 +235,7 @@ public class CalculatedSubjectData implements LPSubjectData {
|
||||
|
||||
@Override
|
||||
public CompletableFuture<Boolean> clearParents(ImmutableContextSet contexts) {
|
||||
Set<SubjectReference> set = this.parents.get(contexts);
|
||||
Set<LPSubjectReference> set = this.parents.get(contexts);
|
||||
if (set == null) {
|
||||
return CompletableFuture.completedFuture(false);
|
||||
}
|
||||
|
||||
+1
-1
@@ -27,7 +27,7 @@ package me.lucko.luckperms.sponge.service.legacy;
|
||||
|
||||
import me.lucko.luckperms.api.context.ImmutableContextSet;
|
||||
import me.lucko.luckperms.sponge.service.model.LPPermissionService;
|
||||
import me.lucko.luckperms.sponge.service.model.SubjectReferenceFactory;
|
||||
import me.lucko.luckperms.sponge.service.reference.SubjectReferenceFactory;
|
||||
import me.lucko.luckperms.sponge.service.storage.SubjectStorageModel;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
+9
-6
@@ -40,12 +40,13 @@ import me.lucko.luckperms.sponge.service.LuckPermsService;
|
||||
import me.lucko.luckperms.sponge.service.ProxyFactory;
|
||||
import me.lucko.luckperms.sponge.service.model.LPSubject;
|
||||
import me.lucko.luckperms.sponge.service.model.LPSubjectCollection;
|
||||
import me.lucko.luckperms.sponge.service.model.SubjectReference;
|
||||
import me.lucko.luckperms.sponge.service.reference.LPSubjectReference;
|
||||
import me.lucko.luckperms.sponge.service.storage.SubjectStorageModel;
|
||||
|
||||
import org.spongepowered.api.service.permission.SubjectCollection;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
@@ -73,7 +74,9 @@ public class PersistedCollection implements LPSubjectCollection {
|
||||
Map<String, SubjectStorageModel> holders = this.service.getStorage().loadAllFromFile(this.identifier);
|
||||
for (Map.Entry<String, SubjectStorageModel> e : holders.entrySet()) {
|
||||
PersistedSubject subject = this.subjects.get(e.getKey().toLowerCase());
|
||||
subject.loadData(e.getValue());
|
||||
if (subject != null) {
|
||||
subject.loadData(e.getValue());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -104,7 +107,7 @@ public class PersistedCollection implements LPSubjectCollection {
|
||||
|
||||
@Override
|
||||
public Optional<LPSubject> getSubject(String identifier) {
|
||||
return Optional.of(this.subjects.get(identifier.toLowerCase()));
|
||||
return Optional.of(Objects.requireNonNull(this.subjects.get(identifier.toLowerCase())));
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -116,7 +119,7 @@ public class PersistedCollection implements LPSubjectCollection {
|
||||
public CompletableFuture<ImmutableCollection<LPSubject>> loadSubjects(Set<String> identifiers) {
|
||||
ImmutableSet.Builder<LPSubject> ret = ImmutableSet.builder();
|
||||
for (String id : identifiers) {
|
||||
ret.add(this.subjects.get(id.toLowerCase()));
|
||||
ret.add(Objects.requireNonNull(this.subjects.get(id.toLowerCase())));
|
||||
}
|
||||
return CompletableFuture.completedFuture(ret.build());
|
||||
}
|
||||
@@ -132,13 +135,13 @@ public class PersistedCollection implements LPSubjectCollection {
|
||||
}
|
||||
|
||||
@Override
|
||||
public CompletableFuture<ImmutableMap<SubjectReference, Boolean>> getAllWithPermission(String permission) {
|
||||
public CompletableFuture<ImmutableMap<LPSubjectReference, Boolean>> getAllWithPermission(String permission) {
|
||||
return CompletableFuture.completedFuture(getLoadedWithPermission(permission).entrySet().stream()
|
||||
.collect(ImmutableCollectors.toMap(e -> e.getKey().toReference(), Map.Entry::getValue)));
|
||||
}
|
||||
|
||||
@Override
|
||||
public CompletableFuture<ImmutableMap<SubjectReference, Boolean>> getAllWithPermission(ImmutableContextSet contexts, String permission) {
|
||||
public CompletableFuture<ImmutableMap<LPSubjectReference, Boolean>> getAllWithPermission(ImmutableContextSet contexts, String permission) {
|
||||
return CompletableFuture.completedFuture(getLoadedWithPermission(contexts, permission).entrySet().stream()
|
||||
.collect(ImmutableCollectors.toMap(e -> e.getKey().toReference(), Map.Entry::getValue)));
|
||||
}
|
||||
|
||||
+8
-13
@@ -37,7 +37,7 @@ import me.lucko.luckperms.sponge.service.LuckPermsService;
|
||||
import me.lucko.luckperms.sponge.service.ProxyFactory;
|
||||
import me.lucko.luckperms.sponge.service.calculated.CalculatedSubjectData;
|
||||
import me.lucko.luckperms.sponge.service.model.LPSubject;
|
||||
import me.lucko.luckperms.sponge.service.model.SubjectReference;
|
||||
import me.lucko.luckperms.sponge.service.reference.LPSubjectReference;
|
||||
import me.lucko.luckperms.sponge.service.storage.SubjectStorageModel;
|
||||
|
||||
import org.spongepowered.api.command.CommandSource;
|
||||
@@ -66,7 +66,7 @@ public class PersistedSubject implements LPSubject {
|
||||
.expireAfterAccess(20, TimeUnit.MINUTES)
|
||||
.build(lookup -> lookupPermissionValue(lookup.getContexts(), lookup.getNode()));
|
||||
|
||||
private final LoadingCache<ImmutableContextSet, ImmutableList<SubjectReference>> parentLookupCache = Caffeine.newBuilder()
|
||||
private final LoadingCache<ImmutableContextSet, ImmutableList<LPSubjectReference>> parentLookupCache = Caffeine.newBuilder()
|
||||
.expireAfterAccess(20, TimeUnit.MINUTES)
|
||||
.build(this::lookupParents);
|
||||
|
||||
@@ -194,7 +194,7 @@ public class PersistedSubject implements LPSubject {
|
||||
}
|
||||
}
|
||||
|
||||
for (SubjectReference parent : getParents(contexts)) {
|
||||
for (LPSubjectReference parent : getParents(contexts)) {
|
||||
res = parent.resolveLp().join().getPermissionValue(contexts, node);
|
||||
if (res != Tristate.UNDEFINED) {
|
||||
return res;
|
||||
@@ -214,8 +214,8 @@ public class PersistedSubject implements LPSubject {
|
||||
return res;
|
||||
}
|
||||
|
||||
private ImmutableList<SubjectReference> lookupParents(ImmutableContextSet contexts) {
|
||||
List<SubjectReference> s = new ArrayList<>();
|
||||
private ImmutableList<LPSubjectReference> lookupParents(ImmutableContextSet contexts) {
|
||||
List<LPSubjectReference> s = new ArrayList<>();
|
||||
s.addAll(this.subjectData.getParents(contexts));
|
||||
s.addAll(this.transientSubjectData.getParents(contexts));
|
||||
|
||||
@@ -253,7 +253,7 @@ public class PersistedSubject implements LPSubject {
|
||||
}
|
||||
}
|
||||
|
||||
for (SubjectReference parent : getParents(contexts)) {
|
||||
for (LPSubjectReference parent : getParents(contexts)) {
|
||||
res = parent.resolveLp().join().getOption(contexts, key);
|
||||
if (res.isPresent()) {
|
||||
return res;
|
||||
@@ -283,7 +283,7 @@ public class PersistedSubject implements LPSubject {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isChildOf(ImmutableContextSet contexts, SubjectReference subject) {
|
||||
public boolean isChildOf(ImmutableContextSet contexts, LPSubjectReference subject) {
|
||||
Objects.requireNonNull(contexts, "contexts");
|
||||
Objects.requireNonNull(subject, "subject");
|
||||
|
||||
@@ -299,7 +299,7 @@ public class PersistedSubject implements LPSubject {
|
||||
}
|
||||
|
||||
@Override
|
||||
public ImmutableList<SubjectReference> getParents(ImmutableContextSet contexts) {
|
||||
public ImmutableList<LPSubjectReference> getParents(ImmutableContextSet contexts) {
|
||||
Objects.requireNonNull(contexts, "contexts");
|
||||
return this.parentLookupCache.get(contexts);
|
||||
}
|
||||
@@ -308,9 +308,4 @@ public class PersistedSubject implements LPSubject {
|
||||
public Optional<String> getOption(ImmutableContextSet contexts, String key) {
|
||||
return this.optionLookupCache.get(OptionLookupKey.of(key, contexts));
|
||||
}
|
||||
|
||||
@Override
|
||||
public ImmutableContextSet getActiveContextSet() {
|
||||
return this.service.getPlugin().getContextManager().getApplicableContext(sponge());
|
||||
}
|
||||
}
|
||||
|
||||
+3
-3
@@ -29,7 +29,7 @@ import me.lucko.luckperms.api.Tristate;
|
||||
import me.lucko.luckperms.api.context.ImmutableContextSet;
|
||||
import me.lucko.luckperms.sponge.service.LuckPermsService;
|
||||
import me.lucko.luckperms.sponge.service.calculated.CalculatedSubjectData;
|
||||
import me.lucko.luckperms.sponge.service.model.SubjectReference;
|
||||
import me.lucko.luckperms.sponge.service.reference.LPSubjectReference;
|
||||
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
import java.util.function.Function;
|
||||
@@ -79,12 +79,12 @@ public class PersistedSubjectData extends CalculatedSubjectData implements Funct
|
||||
}
|
||||
|
||||
@Override
|
||||
public CompletableFuture<Boolean> addParent(ImmutableContextSet contexts, SubjectReference parent) {
|
||||
public CompletableFuture<Boolean> addParent(ImmutableContextSet contexts, LPSubjectReference parent) {
|
||||
return super.addParent(contexts, parent).thenApply(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CompletableFuture<Boolean> removeParent(ImmutableContextSet contexts, SubjectReference parent) {
|
||||
public CompletableFuture<Boolean> removeParent(ImmutableContextSet contexts, LPSubjectReference parent) {
|
||||
return super.removeParent(contexts, parent).thenApply(this);
|
||||
}
|
||||
|
||||
|
||||
+10
-10
@@ -38,8 +38,8 @@ import me.lucko.luckperms.common.contexts.ContextSetJsonSerializer;
|
||||
import me.lucko.luckperms.common.utils.CollationKeyCache;
|
||||
import me.lucko.luckperms.sponge.service.calculated.CalculatedSubjectData;
|
||||
import me.lucko.luckperms.sponge.service.model.LPPermissionService;
|
||||
import me.lucko.luckperms.sponge.service.model.SubjectReference;
|
||||
import me.lucko.luckperms.sponge.service.model.SubjectReferenceFactory;
|
||||
import me.lucko.luckperms.sponge.service.reference.LPSubjectReference;
|
||||
import me.lucko.luckperms.sponge.service.reference.SubjectReferenceFactory;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
@@ -52,9 +52,9 @@ public class SubjectStorageModel {
|
||||
private final LPPermissionService service;
|
||||
private final Map<ImmutableContextSet, Map<String, Boolean>> permissions;
|
||||
private final Map<ImmutableContextSet, Map<String, String>> options;
|
||||
private final Map<ImmutableContextSet, List<SubjectReference>> parents;
|
||||
private final Map<ImmutableContextSet, List<LPSubjectReference>> parents;
|
||||
|
||||
public SubjectStorageModel(LPPermissionService service, Map<ImmutableContextSet, ? extends Map<String, Boolean>> permissions, Map<ImmutableContextSet, ? extends Map<String, String>> options, Map<ImmutableContextSet, ? extends List<SubjectReference>> parents) {
|
||||
public SubjectStorageModel(LPPermissionService service, Map<ImmutableContextSet, ? extends Map<String, Boolean>> permissions, Map<ImmutableContextSet, ? extends Map<String, String>> options, Map<ImmutableContextSet, ? extends List<LPSubjectReference>> parents) {
|
||||
this.service = service;
|
||||
|
||||
ImmutableMap.Builder<ImmutableContextSet, Map<String, Boolean>> permissionsBuilder = ImmutableMap.builder();
|
||||
@@ -69,8 +69,8 @@ public class SubjectStorageModel {
|
||||
}
|
||||
this.options = optionsBuilder.build();
|
||||
|
||||
ImmutableMap.Builder<ImmutableContextSet, List<SubjectReference>> parentsBuilder = ImmutableMap.builder();
|
||||
for (Map.Entry<ImmutableContextSet, ? extends List<SubjectReference>> e : parents.entrySet()) {
|
||||
ImmutableMap.Builder<ImmutableContextSet, List<LPSubjectReference>> parentsBuilder = ImmutableMap.builder();
|
||||
for (Map.Entry<ImmutableContextSet, ? extends List<LPSubjectReference>> e : parents.entrySet()) {
|
||||
parentsBuilder.put(e.getKey(), ImmutableList.copyOf(e.getValue()));
|
||||
}
|
||||
this.parents = parentsBuilder.build();
|
||||
@@ -137,7 +137,7 @@ public class SubjectStorageModel {
|
||||
}
|
||||
this.options = optionsBuilder.build();
|
||||
|
||||
ImmutableMap.Builder<ImmutableContextSet, List<SubjectReference>> parentsBuilder = ImmutableMap.builder();
|
||||
ImmutableMap.Builder<ImmutableContextSet, List<LPSubjectReference>> parentsBuilder = ImmutableMap.builder();
|
||||
for (JsonElement e : parents) {
|
||||
if (!e.isJsonObject()) {
|
||||
continue;
|
||||
@@ -151,7 +151,7 @@ public class SubjectStorageModel {
|
||||
JsonArray data = section.get("data").getAsJsonArray();
|
||||
|
||||
ImmutableContextSet contextSet = ContextSetJsonSerializer.deserializeContextSet(context).makeImmutable();
|
||||
ImmutableList.Builder<SubjectReference> pars = ImmutableList.builder();
|
||||
ImmutableList.Builder<LPSubjectReference> pars = ImmutableList.builder();
|
||||
for (JsonElement p : data) {
|
||||
if (!p.isJsonObject()) {
|
||||
continue;
|
||||
@@ -228,7 +228,7 @@ public class SubjectStorageModel {
|
||||
root.add("options", options);
|
||||
|
||||
JsonArray parents = new JsonArray();
|
||||
for (Map.Entry<ImmutableContextSet, List<SubjectReference>> e : sortContextMap(this.parents)) {
|
||||
for (Map.Entry<ImmutableContextSet, List<LPSubjectReference>> e : sortContextMap(this.parents)) {
|
||||
if (e.getValue().isEmpty()) {
|
||||
continue;
|
||||
}
|
||||
@@ -237,7 +237,7 @@ public class SubjectStorageModel {
|
||||
section.add("context", ContextSetJsonSerializer.serializeContextSet(e.getKey()));
|
||||
|
||||
JsonArray data = new JsonArray();
|
||||
for (SubjectReference ref : e.getValue()) {
|
||||
for (LPSubjectReference ref : e.getValue()) {
|
||||
JsonObject parent = new JsonObject();
|
||||
parent.addProperty("collection", ref.getCollectionIdentifier());
|
||||
parent.addProperty("subject", ref.getCollectionIdentifier());
|
||||
|
||||
Reference in New Issue
Block a user