Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added jars/PowerRanks.jar
Binary file not shown.
4 changes: 1 addition & 3 deletions powerranks/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,7 @@ dependencies {
implementation project(':common')
compileOnly 'org.bukkit:bukkit:1.15.2-R0.1-SNAPSHOT'

compileOnly('nl.svenar:powerranks:1.9.9') {
exclude(module: 'nametagedit')
}
compileOnly files('../jars/PowerRanks.jar')
}

shadowJar {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,21 +26,26 @@
package me.lucko.luckperms.migration;

import net.luckperms.api.LuckPerms;
import net.luckperms.api.context.DefaultContextKeys;
import net.luckperms.api.model.group.Group;
import net.luckperms.api.model.user.User;
import net.luckperms.api.node.types.InheritanceNode;

import nl.svenar.PowerRanks.Cache.CachedPlayers;
import nl.svenar.PowerRanks.Data.Users;
import nl.svenar.PowerRanks.PowerRanks;
import nl.svenar.PowerRanks.api.PowerRanksAPI;

import net.luckperms.api.node.types.PrefixNode;
import net.luckperms.api.node.types.SuffixNode;
import net.luckperms.api.node.types.MetaNode;
import net.luckperms.api.node.types.WeightNode;

import nl.svenar.powerranks.bukkit.data.Users;
import nl.svenar.powerranks.bukkit.PowerRanks;
import nl.svenar.powerranks.api.PowerRanksAPI;

import nl.svenar.powerranks.common.structure.PRPermission;
import nl.svenar.powerranks.common.structure.PRPlayer;
import nl.svenar.powerranks.common.structure.PRPlayerRank;
import nl.svenar.powerranks.common.structure.PRRank;
import org.bukkit.command.CommandSender;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.plugin.java.JavaPlugin;

import java.util.Set;
import java.util.List;
import java.util.UUID;
import java.util.concurrent.atomic.AtomicInteger;

Expand All @@ -58,64 +63,65 @@ public void onEnable() {
public void runMigration(CommandSender sender, String[] args) {
log(sender, "Starting.");

PowerRanksAPI prApi = pr.loadAPI();
PowerRanksAPI prApi = PowerRanks.getAPI();
Users prUsers = new Users(pr);

// Migrate all groups
log(sender, "Starting groups migration.");
Set<String> ranks = prApi.getRanks();
List<PRRank> ranks = prApi.getRanksAPI().getRanks();
AtomicInteger groupCount = new AtomicInteger(0);
for (String rank : ranks) {
Group group = this.luckPerms.getGroupManager().createAndLoadGroup(rank).join();
for (PRRank rank : ranks) {
Group group = this.luckPerms.getGroupManager().createAndLoadGroup(rank.getName()).join();

for (String node : prApi.getPermissions(rank)) {
if (node.isEmpty()) continue;
group.data().add(MigrationUtils.parseNode(node, true).build());
for (PRPermission node : prApi.getRanksAPI().getPermissions(rank)) {
if (node.getName().isEmpty()) continue;
group.data().add(MigrationUtils.parseNode(node.getName(), node.getValue()).build());
}

for (String parent : prApi.getInheritances(rank)) {
if (parent.isEmpty()) continue;
group.data().add(InheritanceNode.builder(MigrationUtils.standardizeName(parent)).build());
for (PRRank parent : prApi.getRanksAPI().getInheritances(rank)) {
if (parent.getName().isEmpty()) continue;
group.data().add(InheritanceNode.builder(MigrationUtils.standardizeName(parent.getName())).build());
}

group.data().add(WeightNode.builder().weight(rank.getWeight()).build());
group.data().add(PrefixNode.builder().prefix(rank.getPrefix()).priority(rank.getWeight()).build());
group.data().add(SuffixNode.builder().suffix(rank.getSuffix()).priority(rank.getWeight()).build());

this.luckPerms.getGroupManager().saveGroup(group);
log(sender, "Migrated " + groupCount.incrementAndGet() + " groups so far.");
}
log(sender, "Migrated " + groupCount.get() + " groups.");

// Migrate all users
log(sender, "Starting user migration.");
Set<String> playerUuids = prUsers.getCachedPlayers();
List<PRPlayer> players = prUsers.getCachedPlayers();
AtomicInteger userCount = new AtomicInteger(0);
for (String uuidString : playerUuids) {
UUID uuid = lookupUuid(uuidString);
if (uuid == null) {
continue;
}
for (PRPlayer player : players) {
UUID uuid = player.getUUID();
if (uuid == null) continue;

User user = this.luckPerms.getUserManager().loadUser(uuid, null).join();

user.data().add(InheritanceNode.builder(CachedPlayers.getString("players." + uuidString + ".rank")).build());

final ConfigurationSection subGroups = CachedPlayers.getConfigurationSection("players." + uuidString + ".subranks");
if (subGroups != null) {
for (String subGroup : subGroups.getKeys(false)) {
InheritanceNode.Builder builder = InheritanceNode.builder(subGroup);
for (String worldName : CachedPlayers.getStringList("players." + uuidString + ".subranks." + subGroup + ".worlds")) {
if (!worldName.equalsIgnoreCase("all")) {
builder.withContext(DefaultContextKeys.WORLD_KEY, worldName);
}
}
user.data().add(builder.build());
for (PRPlayerRank rank : player.getRanks()) {
if (rank.getName().isEmpty()) continue;
InheritanceNode.Builder builder = InheritanceNode.builder(MigrationUtils.standardizeName(rank.getName()));

for (String tag : rank.getTags().keySet()) { // I'm assuming those are contexts, right? There's no documentation about these "tags"
if (tag.equalsIgnoreCase("all")) continue;
builder.withContext(tag, String.valueOf(rank.getTags().get(tag)));
}

user.data().add(builder.build());
}

for (String node : CachedPlayers.getStringList("players." + uuidString + ".permissions")) {
if (node.isEmpty()) continue;
user.data().add(MigrationUtils.parseNode(node, true).build());
for (String tag : player.getUsertags()) {
user.data().add(MetaNode.builder().key(tag).value(prUsers.getUserTagValue(tag)).build());
}

user.setPrimaryGroup(CachedPlayers.getString("players." + uuidString + ".rank"));
for (PRPermission permission : player.getPermissions()) {
if (permission.getName().isEmpty()) continue;
user.data().add(MigrationUtils.parseNode(permission.getName(), permission.getValue()).build());
}

this.luckPerms.getUserManager().cleanupUser(user);
this.luckPerms.getUserManager().saveUser(user);
Expand All @@ -130,20 +136,4 @@ public void runMigration(CommandSender sender, String[] args) {
"LuckPerms may not take over as the server permission handler until this is done.");
}

public UUID lookupUuid(String s) {
UUID uuid = Uuids.parse(s);
if (uuid == null) {
try {
//noinspection deprecation
uuid = getServer().getOfflinePlayer(s).getUniqueId();
} catch (Exception ex) {
ex.printStackTrace();
}
}
if (uuid == null) {
getLogger().warning("Unable to get a UUID for user identifier: " + s);
}
return uuid;
}

}