Register Sponge PermDescriptions to the LP permission registry

This commit is contained in:
Luck
2018-04-03 21:56:15 +01:00
Unverified
parent 7684ac5d3a
commit f33c540efb
25 changed files with 62 additions and 62 deletions
@@ -43,6 +43,7 @@ import me.lucko.luckperms.common.sender.DummySender;
import me.lucko.luckperms.common.sender.Sender;
import me.lucko.luckperms.common.tasks.CacheHousekeepingTask;
import me.lucko.luckperms.common.tasks.ExpireTemporaryTask;
import me.lucko.luckperms.common.treeview.PermissionRegistry;
import me.lucko.luckperms.sponge.calculators.SpongeCalculatorFactory;
import me.lucko.luckperms.sponge.commands.SpongeMainCommand;
import me.lucko.luckperms.sponge.contexts.SpongeContextManager;
@@ -60,6 +61,7 @@ import me.lucko.luckperms.sponge.service.persisted.PersistedCollection;
import me.lucko.luckperms.sponge.tasks.ServiceCacheHousekeepingTask;
import org.spongepowered.api.entity.living.player.Player;
import org.spongepowered.api.service.permission.PermissionDescription;
import org.spongepowered.api.service.permission.PermissionService;
import org.spongepowered.api.service.permission.Subject;
@@ -151,6 +153,11 @@ public class LPSpongePlugin extends AbstractLuckPermsPlugin {
this.updateEventHandler = UpdateEventHandler.obtain(this);
this.service = new LuckPermsService(this);
// before registering our permission service, copy any existing permission descriptions
PermissionRegistry permissionRegistry = getPermissionRegistry();
this.bootstrap.getGame().getServiceManager().provide(PermissionService.class)
.ifPresent(ps -> ps.getDescriptions().stream().map(PermissionDescription::getId).forEach(permissionRegistry::offer));
if (this.bootstrap.getGame().getPluginManager().getPlugin("permissionsex").isPresent()) {
getLogger().warn("Detected PermissionsEx - assuming it's loaded for migration.");
getLogger().warn("Delaying LuckPerms PermissionService registration.");
@@ -55,10 +55,10 @@ import org.spongepowered.api.service.permission.Subject;
import org.spongepowered.api.text.Text;
import java.io.File;
import java.util.HashSet;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Predicate;
@@ -95,7 +95,7 @@ public class LuckPermsService implements LPPermissionService {
/**
* A set of registered permission description instances
*/
private final Set<LPPermissionDescription> permissionDescriptions;
private final Map<String, LPPermissionDescription> permissionDescriptions;
/**
* The loaded collections in this service
@@ -107,7 +107,7 @@ public class LuckPermsService implements LPPermissionService {
this.plugin = plugin;
this.referenceFactory = new SubjectReferenceFactory(this);
this.spongeProxy = ProxyFactory.toSponge(this);
this.permissionDescriptions = ConcurrentHashMap.newKeySet();
this.permissionDescriptions = new ConcurrentHashMap<>();
// init subject storage
this.storage = new SubjectStorage(this, new File(plugin.getBootstrap().getDataDirectory(), "sponge-data"));
@@ -199,37 +199,30 @@ public class LuckPermsService implements LPPermissionService {
@Override
public LPPermissionDescription registerPermissionDescription(String id, Text description, PluginContainer owner) {
SimplePermissionDescription desc = new SimplePermissionDescription(this, id, description, owner);
this.permissionDescriptions.add(desc);
this.permissionDescriptions.put(id, desc);
this.plugin.getPermissionRegistry().offer(id);
return desc;
}
@Override
public Optional<LPPermissionDescription> getDescription(String s) {
Objects.requireNonNull(s);
for (LPPermissionDescription d : this.permissionDescriptions) {
if (d.getId().equals(s)) {
return Optional.of(d);
}
}
return Optional.empty();
return Optional.ofNullable(this.permissionDescriptions.get(s));
}
@Override
public ImmutableSet<LPPermissionDescription> getDescriptions() {
Set<LPPermissionDescription> descriptions = new HashSet<>(this.permissionDescriptions);
Map<String, LPPermissionDescription> descriptions = new HashMap<>(this.permissionDescriptions);
// collect known values from the permission vault
for (String knownPermission : this.plugin.getPermissionVault().getKnownPermissions()) {
LPPermissionDescription desc = new SimplePermissionDescription(this, knownPermission, null, null);
for (String perm : this.plugin.getPermissionRegistry().getKnownPermissions()) {
// don't override plugin defined values
if (!descriptions.contains(desc)) {
descriptions.add(desc);
if (!descriptions.containsKey(perm)) {
descriptions.put(perm, new SimplePermissionDescription(this, perm, null, null));
}
}
return ImmutableSet.copyOf(descriptions);
return ImmutableSet.copyOf(descriptions.values());
}
@Override