Search in sources :

Example 1 with PermissionGroup

use of ru.tehkode.permissions.PermissionGroup in project LuckPerms by lucko.

the class MigrationPermissionsEx method migrateEntity.

private static void migrateEntity(PermissionEntity entity, PermissionHolder holder, int weight) {
    // migrate permanent permissions
    for (Map.Entry<String, List<String>> worldData : getPermanentPermissions(entity).entrySet()) {
        String world = standardizeWorld(worldData.getKey());
        for (String node : worldData.getValue()) {
            if (node.isEmpty())
                continue;
            holder.setPermission(MigrationUtils.parseNode(node, true).setWorld(world).build());
        }
    }
    // migrate temporary permissions
    Map<String, List<String>> timedPermissions;
    Map<String, Long> timedPermissionsTime;
    try {
        // noinspection unchecked
        timedPermissions = (Map<String, List<String>>) TIMED_PERMISSIONS_FIELD.get(entity);
        // noinspection unchecked
        timedPermissionsTime = (Map<String, Long>) TIMED_PERMISSIONS_TIME_FIELD.get(entity);
    } catch (IllegalAccessException e) {
        throw new RuntimeException(e);
    }
    for (Map.Entry<String, List<String>> worldData : timedPermissions.entrySet()) {
        String world = standardizeWorld(worldData.getKey());
        for (String node : worldData.getValue()) {
            if (node.isEmpty())
                continue;
            long expiry = timedPermissionsTime.getOrDefault(Strings.nullToEmpty(world) + ":" + node, 0L);
            holder.setPermission(MigrationUtils.parseNode(node, true).setWorld(world).setExpiry(expiry).build());
        }
    }
    // migrate parents
    for (Map.Entry<String, List<PermissionGroup>> worldData : entity.getAllParents().entrySet()) {
        String world = standardizeWorld(worldData.getKey());
        // keep track of primary group
        String primary = null;
        int primaryWeight = Integer.MAX_VALUE;
        for (PermissionGroup parent : worldData.getValue()) {
            String parentName = parent.getName();
            long expiry = 0L;
            // check for temporary parent
            if (entity instanceof PermissionUser) {
                String expiryOption = entity.getOption("group-" + parentName + "-until", world);
                if (expiryOption != null) {
                    try {
                        expiry = Long.parseLong(expiryOption);
                    } catch (NumberFormatException e) {
                    // ignore
                    }
                }
            }
            holder.setPermission(NodeFactory.buildGroupNode(MigrationUtils.standardizeName(parentName)).setWorld(world).setExpiry(expiry).build());
            // migrate primary groups
            if (world == null && holder instanceof User && expiry == 0) {
                if (parent.getRank() < primaryWeight) {
                    primary = parent.getName();
                    primaryWeight = parent.getRank();
                }
            }
        }
        if (primary != null && !primary.isEmpty() && !primary.equalsIgnoreCase(NodeFactory.DEFAULT_GROUP_NAME)) {
            User user = ((User) holder);
            user.getPrimaryGroup().setStoredValue(primary);
            user.unsetPermission(NodeFactory.buildGroupNode(NodeFactory.DEFAULT_GROUP_NAME).build());
        }
    }
    // migrate prefix / suffix
    String prefix = entity.getOwnPrefix();
    String suffix = entity.getOwnSuffix();
    if (prefix != null && !prefix.isEmpty()) {
        holder.setPermission(NodeFactory.buildPrefixNode(weight, prefix).build());
    }
    if (suffix != null && !suffix.isEmpty()) {
        holder.setPermission(NodeFactory.buildSuffixNode(weight, suffix).build());
    }
    // migrate options
    for (Map.Entry<String, Map<String, String>> worldData : entity.getAllOptions().entrySet()) {
        String world = standardizeWorld(worldData.getKey());
        for (Map.Entry<String, String> opt : worldData.getValue().entrySet()) {
            if (opt.getKey() == null || opt.getKey().isEmpty() || opt.getValue() == null || opt.getValue().isEmpty()) {
                continue;
            }
            String key = opt.getKey().toLowerCase();
            boolean ignore = key.equals(NodeFactory.PREFIX_KEY) || key.equals(NodeFactory.SUFFIX_KEY) || key.equals(NodeFactory.WEIGHT_KEY) || key.equals("rank") || key.equals("rank-ladder") || key.equals("name") || key.equals("username") || (key.startsWith("group-") && key.endsWith("-until"));
            if (ignore) {
                continue;
            }
            holder.setPermission(NodeFactory.buildMetaNode(opt.getKey(), opt.getValue()).setWorld(world).build());
        }
    }
}
Also used : PermissionUser(ru.tehkode.permissions.PermissionUser) User(me.lucko.luckperms.common.model.User) PermissionGroup(ru.tehkode.permissions.PermissionGroup) PermissionUser(ru.tehkode.permissions.PermissionUser) List(java.util.List) Map(java.util.Map)

Example 2 with PermissionGroup

use of ru.tehkode.permissions.PermissionGroup in project LuckPerms by lucko.

the class MigrationPermissionsEx method execute.

@SuppressWarnings("deprecation")
@Override
public CommandResult execute(LuckPermsPlugin plugin, Sender sender, Object o, List<String> args, String label) {
    ProgressLogger log = new ProgressLogger("PermissionsEx");
    log.addListener(plugin.getConsoleSender());
    log.addListener(sender);
    log.log("Starting.");
    if (!Bukkit.getPluginManager().isPluginEnabled("PermissionsEx")) {
        log.logError("Plugin not loaded.");
        return CommandResult.STATE_ERROR;
    }
    PermissionsEx pex = (PermissionsEx) Bukkit.getPluginManager().getPlugin("PermissionsEx");
    PermissionManager manager = pex.getPermissionsManager();
    log.log("Calculating group weightings.");
    int i = 0;
    for (PermissionGroup group : manager.getGroupList()) {
        i = Math.max(i, group.getRank());
    }
    int maxWeight = i + 5;
    // Migrate all groups.
    log.log("Starting group migration.");
    AtomicInteger groupCount = new AtomicInteger(0);
    Set<String> ladders = new HashSet<>();
    Iterators.iterate(manager.getGroupList(), group -> {
        int groupWeight = maxWeight - group.getRank();
        final String groupName = MigrationUtils.standardizeName(group.getName());
        Group lpGroup = plugin.getStorage().createAndLoadGroup(groupName, CreationCause.INTERNAL).join();
        MigrationUtils.setGroupWeight(lpGroup, groupWeight);
        // migrate data
        migrateEntity(group, lpGroup, groupWeight);
        // remember known ladders
        if (group.isRanked()) {
            ladders.add(group.getRankLadder().toLowerCase());
        }
        plugin.getStorage().saveGroup(lpGroup).join();
        log.logAllProgress("Migrated {} groups so far.", groupCount.incrementAndGet());
    });
    log.log("Migrated " + groupCount.get() + " groups");
    // Migrate all ladders/tracks.
    log.log("Starting tracks migration.");
    for (String rankLadder : ladders) {
        Track track = plugin.getStorage().createAndLoadTrack(rankLadder, CreationCause.INTERNAL).join();
        // Get a list of all groups in a ladder
        List<String> ladder = manager.getRankLadder(rankLadder).entrySet().stream().sorted(Comparator.<Map.Entry<Integer, PermissionGroup>>comparingInt(Map.Entry::getKey).reversed()).map(e -> MigrationUtils.standardizeName(e.getValue().getName())).collect(Collectors.toList());
        track.setGroups(ladder);
        plugin.getStorage().saveTrack(track);
    }
    log.log("Migrated " + ladders.size() + " tracks");
    // Migrate all users
    log.log("Starting user migration.");
    AtomicInteger userCount = new AtomicInteger(0);
    // Increment the max weight from the group migrations. All user meta should override.
    int userWeight = maxWeight + 5;
    Iterators.iterate(manager.getUsers(), user -> {
        UUID u = BukkitMigrationUtils.lookupUuid(log, user.getIdentifier());
        if (u == null) {
            return;
        }
        // load in a user instance
        User lpUser = plugin.getStorage().loadUser(u, user.getName()).join();
        // migrate data
        migrateEntity(user, lpUser, userWeight);
        plugin.getUserManager().cleanup(lpUser);
        plugin.getStorage().saveUser(lpUser);
        log.logProgress("Migrated {} users so far.", userCount.incrementAndGet());
    });
    log.log("Migrated " + userCount.get() + " users.");
    log.log("Success! Migration complete.");
    return CommandResult.SUCCESS;
}
Also used : SubCommand(me.lucko.luckperms.common.command.abstraction.SubCommand) LocaleManager(me.lucko.luckperms.common.locale.LocaleManager) PermissionEntity(ru.tehkode.permissions.PermissionEntity) HashSet(java.util.HashSet) Strings(com.google.common.base.Strings) PermissionsEx(ru.tehkode.permissions.bukkit.PermissionsEx) CommandSpec(me.lucko.luckperms.common.locale.command.CommandSpec) ProgressLogger(me.lucko.luckperms.common.logging.ProgressLogger) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) Map(java.util.Map) LuckPermsPlugin(me.lucko.luckperms.common.plugin.LuckPermsPlugin) Method(java.lang.reflect.Method) Bukkit(org.bukkit.Bukkit) PermissionsData(ru.tehkode.permissions.PermissionsData) CreationCause(me.lucko.luckperms.api.event.cause.CreationCause) MigrationUtils(me.lucko.luckperms.common.commands.migration.MigrationUtils) PermissionHolder(me.lucko.luckperms.common.model.PermissionHolder) PermissionGroup(ru.tehkode.permissions.PermissionGroup) Set(java.util.Set) NodeFactory(me.lucko.luckperms.common.node.NodeFactory) Sender(me.lucko.luckperms.common.sender.Sender) PermissionManager(ru.tehkode.permissions.PermissionManager) UUID(java.util.UUID) Iterators(me.lucko.luckperms.common.utils.Iterators) Field(java.lang.reflect.Field) Collectors(java.util.stream.Collectors) CommandResult(me.lucko.luckperms.common.command.CommandResult) InvocationTargetException(java.lang.reflect.InvocationTargetException) PermissionUser(ru.tehkode.permissions.PermissionUser) CommandPermission(me.lucko.luckperms.common.command.access.CommandPermission) Track(me.lucko.luckperms.common.model.Track) List(java.util.List) Group(me.lucko.luckperms.common.model.Group) Comparator(java.util.Comparator) User(me.lucko.luckperms.common.model.User) Predicates(me.lucko.luckperms.common.utils.Predicates) PermissionGroup(ru.tehkode.permissions.PermissionGroup) Group(me.lucko.luckperms.common.model.Group) PermissionUser(ru.tehkode.permissions.PermissionUser) User(me.lucko.luckperms.common.model.User) PermissionManager(ru.tehkode.permissions.PermissionManager) PermissionGroup(ru.tehkode.permissions.PermissionGroup) ProgressLogger(me.lucko.luckperms.common.logging.ProgressLogger) PermissionsEx(ru.tehkode.permissions.bukkit.PermissionsEx) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) UUID(java.util.UUID) Track(me.lucko.luckperms.common.model.Track) HashSet(java.util.HashSet)

Aggregations

List (java.util.List)2 Map (java.util.Map)2 User (me.lucko.luckperms.common.model.User)2 PermissionGroup (ru.tehkode.permissions.PermissionGroup)2 PermissionUser (ru.tehkode.permissions.PermissionUser)2 Strings (com.google.common.base.Strings)1 Field (java.lang.reflect.Field)1 InvocationTargetException (java.lang.reflect.InvocationTargetException)1 Method (java.lang.reflect.Method)1 Comparator (java.util.Comparator)1 HashSet (java.util.HashSet)1 Set (java.util.Set)1 UUID (java.util.UUID)1 AtomicInteger (java.util.concurrent.atomic.AtomicInteger)1 Collectors (java.util.stream.Collectors)1 CreationCause (me.lucko.luckperms.api.event.cause.CreationCause)1 CommandResult (me.lucko.luckperms.common.command.CommandResult)1 SubCommand (me.lucko.luckperms.common.command.abstraction.SubCommand)1 CommandPermission (me.lucko.luckperms.common.command.access.CommandPermission)1 MigrationUtils (me.lucko.luckperms.common.commands.migration.MigrationUtils)1