From 3553a0f9fec67adab1b0cb1a497b4e0ac0b6ab02 Mon Sep 17 00:00:00 2001 From: Luck Date: Thu, 26 Mar 2020 22:32:53 +0000 Subject: [PATCH] Don't attempt to migrate empty users in PEX migration (#2102) --- .../migration/MigrationPermissionsEx.java | 37 ++++++++++++++++++- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/bukkit/src/main/java/me/lucko/luckperms/bukkit/migration/MigrationPermissionsEx.java b/bukkit/src/main/java/me/lucko/luckperms/bukkit/migration/MigrationPermissionsEx.java index a9cf2273c..9bbf6d7b9 100644 --- a/bukkit/src/main/java/me/lucko/luckperms/bukkit/migration/MigrationPermissionsEx.java +++ b/bukkit/src/main/java/me/lucko/luckperms/bukkit/migration/MigrationPermissionsEx.java @@ -67,6 +67,7 @@ import ru.tehkode.permissions.events.PermissionEvent; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; +import java.util.Collection; import java.util.Comparator; import java.util.HashSet; import java.util.List; @@ -78,6 +79,7 @@ import java.util.stream.Collectors; public class MigrationPermissionsEx extends ChildCommand { private static final Method GET_DATA_METHOD; + private static final Method GET_USER_METHOD; private static final Field TIMED_PERMISSIONS_FIELD; private static final Field TIMED_PERMISSIONS_TIME_FIELD; private static final Field NATIVE_INTERFACE_FIELD; @@ -86,6 +88,9 @@ public class MigrationPermissionsEx extends ChildCommand { GET_DATA_METHOD = PermissionEntity.class.getDeclaredMethod("getData"); GET_DATA_METHOD.setAccessible(true); + GET_USER_METHOD = PermissionManager.class.getDeclaredMethod("getUser", String.class, String.class, boolean.class); + GET_USER_METHOD.setAccessible(true); + TIMED_PERMISSIONS_FIELD = PermissionEntity.class.getDeclaredField("timedPermissions"); TIMED_PERMISSIONS_FIELD.setAccessible(true); @@ -181,8 +186,14 @@ public class MigrationPermissionsEx extends ChildCommand { // Increment the max weight from the group migrations. All user meta should override. int userWeight = maxWeight + 5; - Iterators.tryIterate(manager.getUsers(), user -> { - UUID u = BukkitUuids.lookupUuid(log, user.getIdentifier()); + Collection userIdentifiers = manager.getBackend().getUserIdentifiers(); + Iterators.tryIterate(userIdentifiers, id -> { + PermissionUser user = (PermissionUser) GET_USER_METHOD.invoke(manager, id, null, false); + if (isUserEmpty(user)) { + return; + } + + UUID u = BukkitUuids.lookupUuid(log, id); if (u == null) { return; } @@ -221,6 +232,28 @@ public class MigrationPermissionsEx extends ChildCommand { } } + private static boolean isUserEmpty(PermissionUser user) { + for (List permissions : user.getAllPermissions().values()) { + if (!permissions.isEmpty()) { + return false; + } + } + + for (List parents : user.getAllParents().values()) { + if (!parents.isEmpty()) { + return false; + } + } + + for (Map options : user.getAllOptions().values()) { + if (!options.isEmpty()) { + return false; + } + } + + return true; + } + private static void migrateEntity(PermissionEntity entity, PermissionHolder holder, int weight) { // migrate permanent permissions for (Map.Entry> worldData : getPermanentPermissions(entity).entrySet()) {