Search in sources :

Example 1 with PermissionEntity

use of org.tyrannyofheaven.bukkit.zPermissions.model.PermissionEntity in project LuckPerms by lucko.

the class MigrationZPermissions method migrateEntity.

private void migrateEntity(PermissionHolder holder, PermissionEntity entity, int weight) {
    for (Entry e : entity.getPermissions()) {
        if (e.getPermission().isEmpty())
            continue;
        if (e.getWorld() != null && !e.getWorld().getName().equals("")) {
            holder.setPermission(NodeFactory.builder(e.getPermission()).setValue(e.isValue()).setWorld(e.getWorld().getName()).build());
        } else {
            holder.setPermission(NodeFactory.builder(e.getPermission()).setValue(e.isValue()).build());
        }
    }
    // only migrate inheritances for groups
    if (entity.isGroup()) {
        for (PermissionEntity inheritance : entity.getParents()) {
            if (!inheritance.getDisplayName().equals(holder.getObjectName())) {
                holder.setPermission(NodeFactory.buildGroupNode(MigrationUtils.standardizeName(inheritance.getDisplayName())).build());
            }
        }
    }
    for (EntityMetadata metadata : entity.getMetadata()) {
        String key = metadata.getName().toLowerCase();
        if (key.isEmpty() || metadata.getStringValue().isEmpty())
            continue;
        if (key.equals(NodeFactory.PREFIX_KEY) || key.equals(NodeFactory.SUFFIX_KEY)) {
            ChatMetaType type = ChatMetaType.valueOf(key.toUpperCase());
            holder.setPermission(NodeFactory.buildChatMetaNode(type, weight, metadata.getStringValue()).build());
        } else {
            holder.setPermission(NodeFactory.buildMetaNode(key, metadata.getStringValue()).build());
        }
    }
}
Also used : Entry(org.tyrannyofheaven.bukkit.zPermissions.model.Entry) EntityMetadata(org.tyrannyofheaven.bukkit.zPermissions.model.EntityMetadata) ChatMetaType(me.lucko.luckperms.api.ChatMetaType) PermissionEntity(org.tyrannyofheaven.bukkit.zPermissions.model.PermissionEntity)

Example 2 with PermissionEntity

use of org.tyrannyofheaven.bukkit.zPermissions.model.PermissionEntity in project LuckPerms by lucko.

the class MigrationZPermissions method execute.

@Override
public CommandResult execute(LuckPermsPlugin plugin, Sender sender, Object o, List<String> args, String label) {
    ProgressLogger log = new ProgressLogger("zPermissions");
    log.addListener(plugin.getConsoleSender());
    log.addListener(sender);
    log.log("Starting.");
    if (!Bukkit.getPluginManager().isPluginEnabled("zPermissions")) {
        log.logError("Plugin not loaded.");
        return CommandResult.STATE_ERROR;
    }
    if (!Bukkit.getServicesManager().isProvidedFor(ZPermissionsService.class)) {
        log.logError("Plugin not loaded.");
        return CommandResult.STATE_ERROR;
    }
    ZPermissionsService service = Bukkit.getServicesManager().getRegistration(ZPermissionsService.class).getProvider();
    PermissionService internalService;
    try {
        Field psField = service.getClass().getDeclaredField("permissionService");
        psField.setAccessible(true);
        internalService = (PermissionService) psField.get(service);
    } catch (Exception e) {
        e.printStackTrace();
        return CommandResult.FAILURE;
    }
    // Migrate all groups
    log.log("Starting group migration.");
    Map<UUID, Set<Node>> userParents = new HashMap<>();
    AtomicInteger groupCount = new AtomicInteger(0);
    AtomicInteger maxWeight = new AtomicInteger(0);
    Iterators.iterate(internalService.getEntities(true), entity -> {
        String groupName = MigrationUtils.standardizeName(entity.getDisplayName());
        Group group = plugin.getStorage().createAndLoadGroup(groupName, CreationCause.INTERNAL).join();
        int weight = entity.getPriority();
        maxWeight.set(Math.max(maxWeight.get(), weight));
        migrateEntity(group, entity, weight);
        MigrationUtils.setGroupWeight(group, weight);
        // store user data for later
        Set<Membership> members = entity.getMemberships();
        for (Membership membership : members) {
            UUID uuid = BukkitMigrationUtils.lookupUuid(log, membership.getMember());
            if (uuid == null) {
                continue;
            }
            Set<Node> nodes = userParents.computeIfAbsent(uuid, u -> new HashSet<>());
            if (membership.getExpiration() == null) {
                nodes.add(NodeFactory.buildGroupNode(groupName).build());
            } else {
                long expiry = membership.getExpiration().toInstant().getEpochSecond();
                nodes.add(NodeFactory.buildGroupNode(groupName).setExpiry(expiry).build());
            }
        }
        plugin.getStorage().saveGroup(group);
        log.logAllProgress("Migrated {} groups so far.", groupCount.incrementAndGet());
    });
    log.log("Migrated " + groupCount.get() + " groups");
    // Migrate all tracks
    log.log("Starting track migration.");
    AtomicInteger trackCount = new AtomicInteger(0);
    Iterators.iterate(service.getAllTracks(), t -> {
        String trackName = MigrationUtils.standardizeName(t);
        Track track = plugin.getStorage().createAndLoadTrack(trackName, CreationCause.INTERNAL).join();
        track.setGroups(service.getTrackGroups(t));
        plugin.getStorage().saveTrack(track);
        log.logAllProgress("Migrated {} tracks so far.", trackCount.incrementAndGet());
    });
    log.log("Migrated " + trackCount.get() + " tracks");
    // Migrate all users.
    log.log("Starting user migration.");
    maxWeight.addAndGet(10);
    AtomicInteger userCount = new AtomicInteger(0);
    Set<UUID> usersToMigrate = new HashSet<>(userParents.keySet());
    usersToMigrate.addAll(service.getAllPlayersUUID());
    Iterators.iterate(usersToMigrate, u -> {
        PermissionEntity entity = internalService.getEntity(null, u, false);
        String username = null;
        if (entity != null) {
            username = entity.getDisplayName();
        }
        User user = plugin.getStorage().loadUser(u, username).join();
        // migrate permissions & meta
        if (entity != null) {
            migrateEntity(user, entity, maxWeight.get());
        }
        // migrate groups
        Set<Node> parents = userParents.get(u);
        if (parents != null) {
            parents.forEach(user::setPermission);
        }
        user.getPrimaryGroup().setStoredValue(MigrationUtils.standardizeName(service.getPlayerPrimaryGroup(u)));
        plugin.getUserManager().cleanup(user);
        plugin.getStorage().saveUser(user);
        log.logProgress("Migrated {} users so far.", userCount.incrementAndGet());
    });
    log.log("Migrated " + userCount.get() + " users.");
    log.log("Success! Migration complete.");
    return CommandResult.SUCCESS;
}
Also used : Group(me.lucko.luckperms.common.model.Group) HashSet(java.util.HashSet) Set(java.util.Set) User(me.lucko.luckperms.common.model.User) HashMap(java.util.HashMap) Node(me.lucko.luckperms.api.Node) ProgressLogger(me.lucko.luckperms.common.logging.ProgressLogger) PermissionService(org.tyrannyofheaven.bukkit.zPermissions.dao.PermissionService) Field(java.lang.reflect.Field) Membership(org.tyrannyofheaven.bukkit.zPermissions.model.Membership) UUID(java.util.UUID) PermissionEntity(org.tyrannyofheaven.bukkit.zPermissions.model.PermissionEntity) HashSet(java.util.HashSet) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) Track(me.lucko.luckperms.common.model.Track) ZPermissionsService(org.tyrannyofheaven.bukkit.zPermissions.ZPermissionsService)

Aggregations

PermissionEntity (org.tyrannyofheaven.bukkit.zPermissions.model.PermissionEntity)2 Field (java.lang.reflect.Field)1 HashMap (java.util.HashMap)1 HashSet (java.util.HashSet)1 Set (java.util.Set)1 UUID (java.util.UUID)1 AtomicInteger (java.util.concurrent.atomic.AtomicInteger)1 ChatMetaType (me.lucko.luckperms.api.ChatMetaType)1 Node (me.lucko.luckperms.api.Node)1 ProgressLogger (me.lucko.luckperms.common.logging.ProgressLogger)1 Group (me.lucko.luckperms.common.model.Group)1 Track (me.lucko.luckperms.common.model.Track)1 User (me.lucko.luckperms.common.model.User)1 ZPermissionsService (org.tyrannyofheaven.bukkit.zPermissions.ZPermissionsService)1 PermissionService (org.tyrannyofheaven.bukkit.zPermissions.dao.PermissionService)1 EntityMetadata (org.tyrannyofheaven.bukkit.zPermissions.model.EntityMetadata)1 Entry (org.tyrannyofheaven.bukkit.zPermissions.model.Entry)1 Membership (org.tyrannyofheaven.bukkit.zPermissions.model.Membership)1