diff --git a/common/pom.xml b/common/pom.xml index 80b4dd495..6d484959e 100644 --- a/common/pom.xml +++ b/common/pom.xml @@ -119,6 +119,12 @@ 1.4 provided + + net.alpenblock + BungeePerms + 3.0-dev-52 + provided + diff --git a/common/src/main/java/me/lucko/luckperms/commands/migration/MigrationMainCommand.java b/common/src/main/java/me/lucko/luckperms/commands/migration/MigrationMainCommand.java index 181c3d69a..9dab30d4e 100644 --- a/common/src/main/java/me/lucko/luckperms/commands/migration/MigrationMainCommand.java +++ b/common/src/main/java/me/lucko/luckperms/commands/migration/MigrationMainCommand.java @@ -27,10 +27,7 @@ import me.lucko.luckperms.commands.CommandResult; import me.lucko.luckperms.commands.MainCommand; import me.lucko.luckperms.commands.Sender; import me.lucko.luckperms.commands.SubCommand; -import me.lucko.luckperms.commands.migration.subcommands.MigrationGroupManager; -import me.lucko.luckperms.commands.migration.subcommands.MigrationPermissionsEx; -import me.lucko.luckperms.commands.migration.subcommands.MigrationPowerfulPerms; -import me.lucko.luckperms.commands.migration.subcommands.MigrationZPermissions; +import me.lucko.luckperms.commands.migration.subcommands.*; import me.lucko.luckperms.constants.Constants; import me.lucko.luckperms.constants.Message; @@ -64,6 +61,11 @@ public class MigrationMainCommand extends MainCommand { subCommands.add(new MigrationZPermissions()); } catch (Throwable ignored) {} + try { + Class.forName("net.alpenblock.bungeeperms.BungeePerms"); + subCommands.add(new MigrationBungeePerms()); + } catch (Throwable ignored) {} + } @Override diff --git a/common/src/main/java/me/lucko/luckperms/commands/migration/subcommands/MigrationBungeePerms.java b/common/src/main/java/me/lucko/luckperms/commands/migration/subcommands/MigrationBungeePerms.java new file mode 100644 index 000000000..83a25c2bb --- /dev/null +++ b/common/src/main/java/me/lucko/luckperms/commands/migration/subcommands/MigrationBungeePerms.java @@ -0,0 +1,145 @@ +/* + * Copyright (c) 2016 Lucko (Luck) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package me.lucko.luckperms.commands.migration.subcommands; + +import me.lucko.luckperms.LuckPermsPlugin; +import me.lucko.luckperms.api.Logger; +import me.lucko.luckperms.commands.CommandResult; +import me.lucko.luckperms.commands.Predicate; +import me.lucko.luckperms.commands.Sender; +import me.lucko.luckperms.commands.SubCommand; +import me.lucko.luckperms.constants.Permission; +import me.lucko.luckperms.exceptions.ObjectAlreadyHasException; +import net.alpenblock.bungeeperms.*; + +import java.util.List; +import java.util.Map; + +/** + * BungeePerms is actually pretty nice. huh. + */ +public class MigrationBungeePerms extends SubCommand { + public MigrationBungeePerms() { + super("bungeeperms", "Migration from BungeePerms", "/%s migration bungeeperms", + Permission.MIGRATION, Predicate.alwaysFalse()); + } + + @Override + public CommandResult execute(LuckPermsPlugin plugin, Sender sender, Object o, List args, String label) { + final Logger log = plugin.getLog(); + + BungeePerms bp = BungeePerms.getInstance(); + if (bp == null) { + log.severe("BungeePerms Migration: Error -> BungeePerms is not loaded."); + return CommandResult.STATE_ERROR; + } + + // Migrate all users. + log.info("BungeePerms Migration: Starting user migration."); + int userCount = 0; + for (User u : bp.getPermissionsManager().getBackEnd().loadUsers()) { + if (u.getUUID() == null) continue; + + userCount++; + plugin.getDatastore().loadOrCreateUser(u.getUUID(), "null"); + me.lucko.luckperms.users.User user = plugin.getUserManager().get(u.getUUID()); + + for (String perm : u.getPerms()) { + try { + user.setPermission(perm, true); + } catch (ObjectAlreadyHasException ignored) {} + } + + for (Map.Entry e : u.getServers().entrySet()) { + for (String perm : e.getValue().getPerms()) { + try { + user.setPermission(perm, true, e.getKey()); + } catch (ObjectAlreadyHasException ignored) {} + } + + for (Map.Entry we : e.getValue().getWorlds().entrySet()) { + for (String perm : we.getValue().getPerms()) { + try { + user.setPermission(perm, true, e.getKey(), we.getKey()); + } catch (ObjectAlreadyHasException ignored) {} + } + } + } + + for (String group : u.getGroupsString()) { + try { + user.setPermission("group." + group, true); + } catch (ObjectAlreadyHasException ignored) {} + } + + plugin.getDatastore().saveUser(user); + plugin.getUserManager().cleanup(user); + } + + log.info("BungeePerms Migration: Migrated " + userCount + " users."); + + // Migrate all groups. + log.info("BungeePerms Migration: Starting group migration."); + int groupCount = 0; + for (Group g : bp.getPermissionsManager().getBackEnd().loadGroups()) { + groupCount ++; + plugin.getDatastore().createAndLoadGroup(g.getName().toLowerCase()); + me.lucko.luckperms.groups.Group group = plugin.getGroupManager().get(g.getName().toLowerCase()); + + for (String perm : g.getPerms()) { + try { + group.setPermission(perm, true); + } catch (ObjectAlreadyHasException ignored) {} + } + + for (Map.Entry e : g.getServers().entrySet()) { + for (String perm : e.getValue().getPerms()) { + try { + group.setPermission(perm, true, e.getKey()); + } catch (ObjectAlreadyHasException ignored) {} + } + + for (Map.Entry we : e.getValue().getWorlds().entrySet()) { + for (String perm : we.getValue().getPerms()) { + try { + group.setPermission(perm, true, e.getKey(), we.getKey()); + } catch (ObjectAlreadyHasException ignored) {} + } + } + } + + for (String inherit : g.getInheritances()) { + try { + group.setPermission("group." + inherit, true); + } catch (ObjectAlreadyHasException ignored) {} + } + + plugin.getDatastore().saveGroup(group); + } + + log.info("BungeePerms Migration: Migrated " + groupCount + " groups"); + + log.info("BungeePerms Migration: Success! Completed without any errors."); + return CommandResult.SUCCESS; + } +} diff --git a/common/src/main/java/me/lucko/luckperms/commands/migration/subcommands/MigrationGroupManager.java b/common/src/main/java/me/lucko/luckperms/commands/migration/subcommands/MigrationGroupManager.java index f1d764aa6..d4709f19b 100644 --- a/common/src/main/java/me/lucko/luckperms/commands/migration/subcommands/MigrationGroupManager.java +++ b/common/src/main/java/me/lucko/luckperms/commands/migration/subcommands/MigrationGroupManager.java @@ -46,8 +46,8 @@ import java.util.stream.Collectors; public class MigrationGroupManager extends SubCommand { public MigrationGroupManager() { - super("groupmanager", "Migration from GroupManager", - "/%s migration groupmanager [world names]", Permission.MIGRATION, Predicate.is(0)); + super("groupmanager", "Migration from GroupManager", "/%s migration groupmanager [world names]", + Permission.MIGRATION, Predicate.is(0)); } @Override diff --git a/common/src/main/java/me/lucko/luckperms/commands/migration/subcommands/MigrationPermissionsEx.java b/common/src/main/java/me/lucko/luckperms/commands/migration/subcommands/MigrationPermissionsEx.java index 64a01c552..90d72cd99 100644 --- a/common/src/main/java/me/lucko/luckperms/commands/migration/subcommands/MigrationPermissionsEx.java +++ b/common/src/main/java/me/lucko/luckperms/commands/migration/subcommands/MigrationPermissionsEx.java @@ -76,8 +76,8 @@ public class MigrationPermissionsEx extends SubCommand { } public MigrationPermissionsEx() { - super("permissionsex", "Migration from PermissionsEx", - "/%s migration permissionsex [world names]", Permission.MIGRATION, Predicate.alwaysFalse()); + super("permissionsex", "Migration from PermissionsEx", "/%s migration permissionsex [world names]", + Permission.MIGRATION, Predicate.alwaysFalse()); } @SuppressWarnings("deprecation") diff --git a/common/src/main/java/me/lucko/luckperms/commands/migration/subcommands/MigrationZPermissions.java b/common/src/main/java/me/lucko/luckperms/commands/migration/subcommands/MigrationZPermissions.java index 02548d022..a6900a976 100644 --- a/common/src/main/java/me/lucko/luckperms/commands/migration/subcommands/MigrationZPermissions.java +++ b/common/src/main/java/me/lucko/luckperms/commands/migration/subcommands/MigrationZPermissions.java @@ -46,8 +46,8 @@ import java.util.stream.Collectors; */ public class MigrationZPermissions extends SubCommand { public MigrationZPermissions() { - super("zpermissions", "Migration from zPermissions", - "/%s migration zpermissions [world names]", Permission.MIGRATION, Predicate.alwaysFalse()); + super("zpermissions", "Migration from zPermissions", "/%s migration zpermissions [world names]", + Permission.MIGRATION, Predicate.alwaysFalse()); } @Override diff --git a/pom.xml b/pom.xml index 2b45b66e8..49aa56796 100644 --- a/pom.xml +++ b/pom.xml @@ -79,5 +79,9 @@ alskebo-repo http://repo.alskebo.com/repository/maven-releases + + bungeeperms-repo + http://repo.wea-ondara.net/repository/public/ +