Search in sources :

Example 1 with Membership

use of org.tyrannyofheaven.bukkit.zPermissions.model.Membership 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

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 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 Membership (org.tyrannyofheaven.bukkit.zPermissions.model.Membership)1 PermissionEntity (org.tyrannyofheaven.bukkit.zPermissions.model.PermissionEntity)1