final PermissionBackend backend = plugin.getPermissionsManager().getBackend();
if (!plugin.getServer().getOnlineMode() && !"force".equals(args.get("force"))) {
sender.sendMessage(ChatColor.RED + "This server is running in offline mode and UUIDs may not be stable. Please run '/pex convert uuid force' to perform conversion anyway, or switch to online mode.");
return;
}
final ProfileRepository repo = new HttpProfileRepository("minecraft");
final Collection<String> userIdentifiers = new HashSet<>(backend.getUserIdentifiers());
for (Iterator<String> it = userIdentifiers.iterator(); it.hasNext(); ) {
try {
UUID.fromString(it.next());
it.remove();
} catch (IllegalArgumentException ex) {
}
}
if (userIdentifiers.isEmpty()) {
sender.sendMessage(ChatColor.RED + "No users to convert!");
return;
}
sender.sendMessage("Beginning conversion to UUID in " + (int) Math.ceil(userIdentifiers.size() / 50000.0) + " batches of max 50k (1 batch is executed every 10 minutes)");
backend.setPersistent(false);
final Iterator<List<String>> splitIdentifiers = Iterables.partition(userIdentifiers, 50 * 1000).iterator(); // 50k users per 10 minutes
final AtomicInteger batchNum = new AtomicInteger(1);
plugin.getPermissionsManager().getExecutor().execute(new Runnable() {
@Override
public void run() {
List<String> names = splitIdentifiers.next();
try {
for (Profile profile : repo.findProfilesByNames(names.toArray(new String[names.size()]))) {
PermissionsUserData data = backend.getUserData(profile.getName());
data.setIdentifier(profile.getId().replaceFirst("(\\w{8})(\\w{4})(\\w{4})(\\w{4})(\\w{12})", "$1-$2-$3-$4-$5"));
data.setOption("name", profile.getName(), null);
}
} catch (Exception e) {