From ee8602b77beeac093700f7db6aa8312cbbdffcb7 Mon Sep 17 00:00:00 2001 From: Matthew Miller Date: Sun, 18 Nov 2018 15:58:15 +1000 Subject: [PATCH] Added a Vault resolver to WEPIF. Means any Vault-enabled perm plugin will theoretically work with it --- config/checkstyle/import-control.xml | 1 + worldedit-bukkit/build.gradle | 2 + .../wepif/PermissionsResolverManager.java | 7 +- .../java/com/sk89q/wepif/VaultResolver.java | 116 ++++++++++++++++++ 4 files changed, 124 insertions(+), 2 deletions(-) create mode 100644 worldedit-bukkit/src/main/java/com/sk89q/wepif/VaultResolver.java diff --git a/config/checkstyle/import-control.xml b/config/checkstyle/import-control.xml index 2fe94d97d..8b40e60d5 100644 --- a/config/checkstyle/import-control.xml +++ b/config/checkstyle/import-control.xml @@ -30,6 +30,7 @@ + diff --git a/worldedit-bukkit/build.gradle b/worldedit-bukkit/build.gradle index 680926ac6..050ee45f9 100644 --- a/worldedit-bukkit/build.gradle +++ b/worldedit-bukkit/build.gradle @@ -6,6 +6,7 @@ repositories { maven { url "https://hub.spigotmc.org/nexus/content/groups/public" } maven { url "https://repo.codemc.org/repository/maven-public" } maven { url 'https://papermc.io/repo/repository/maven-public/' } + maven { url "http://nexus.hc.to/content/repositories/pub_releases" } } dependencies { @@ -14,6 +15,7 @@ dependencies { compile 'org.bukkit:bukkit:1.13-R0.1-SNAPSHOT' // zzz compile 'org.bstats:bstats-bukkit:1.4' compile "io.papermc:paperlib:1.0.1" + compileOnly "net.milkbowl.vault:VaultAPI:1.7" testCompile 'org.mockito:mockito-core:1.9.0-rc1' } diff --git a/worldedit-bukkit/src/main/java/com/sk89q/wepif/PermissionsResolverManager.java b/worldedit-bukkit/src/main/java/com/sk89q/wepif/PermissionsResolverManager.java index 01f04546b..4775d86c4 100644 --- a/worldedit-bukkit/src/main/java/com/sk89q/wepif/PermissionsResolverManager.java +++ b/worldedit-bukkit/src/main/java/com/sk89q/wepif/PermissionsResolverManager.java @@ -95,6 +95,7 @@ public class PermissionsResolverManager implements PermissionsResolver { bPermissionsResolver.class, GroupManagerResolver.class, NijiPermissionsResolver.class, + VaultResolver.class, DinnerPermsResolver.class, FlatFilePermissionsResolver.class }; @@ -283,7 +284,8 @@ public class PermissionsResolverManager implements PermissionsResolver { if (plugin instanceof PermissionsProvider) { setPluginPermissionsResolver(plugin); } else if ("permissions".equalsIgnoreCase(name) || "permissionsex".equalsIgnoreCase(name) - || "bpermissions".equalsIgnoreCase(name) || "groupmanager".equalsIgnoreCase(name)) { + || "bpermissions".equalsIgnoreCase(name) || "groupmanager".equalsIgnoreCase(name) + || "vault".equalsIgnoreCase(name)) { load(); } } @@ -294,7 +296,8 @@ public class PermissionsResolverManager implements PermissionsResolver { if (event.getPlugin() instanceof PermissionsProvider || "permissions".equalsIgnoreCase(name) || "permissionsex".equalsIgnoreCase(name) - || "bpermissions".equalsIgnoreCase(name) || "groupmanager".equalsIgnoreCase(name)) { + || "bpermissions".equalsIgnoreCase(name) || "groupmanager".equalsIgnoreCase(name) + || "vault".equalsIgnoreCase(name)) { load(); } } diff --git a/worldedit-bukkit/src/main/java/com/sk89q/wepif/VaultResolver.java b/worldedit-bukkit/src/main/java/com/sk89q/wepif/VaultResolver.java new file mode 100644 index 000000000..f20087196 --- /dev/null +++ b/worldedit-bukkit/src/main/java/com/sk89q/wepif/VaultResolver.java @@ -0,0 +1,116 @@ +/* + * WorldEdit, a Minecraft world manipulation toolkit + * Copyright (C) sk89q + * Copyright (C) WorldEdit team and contributors + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published by the + * Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License + * for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + */ + +package com.sk89q.wepif; + +import com.sk89q.util.yaml.YAMLProcessor; +import net.milkbowl.vault.permission.Permission; +import org.bukkit.OfflinePlayer; +import org.bukkit.Server; +import org.bukkit.entity.Player; +import org.bukkit.plugin.RegisteredServiceProvider; + +public class VaultResolver implements PermissionsResolver { + + private static Permission perms = null; + + public static PermissionsResolver factory(Server server, YAMLProcessor config) { + if (server.getPluginManager().getPlugin("Vault") == null) { + return null; + } + RegisteredServiceProvider rsp = server.getServicesManager().getRegistration(Permission.class); + perms = rsp.getProvider(); + if (perms == null) { + return null; + } + + return new VaultResolver(server); + } + + private final Server server; + + public VaultResolver(Server server) { + this.server = server; + } + + @Override + public void load() { + } + + @Override + public String getDetectionMessage() { + return "Vault detected! Using Vault for permissions"; + } + + @Override + public boolean hasPermission(String name, String permission) { + return hasPermission(server.getOfflinePlayer(name), permission); + } + + @Override + public boolean hasPermission(String worldName, String name, String permission) { + return hasPermission(worldName, server.getOfflinePlayer(name), permission); + } + + @Override + public boolean inGroup(String player, String group) { + return inGroup(server.getOfflinePlayer(player), group); + } + + @Override + public String[] getGroups(String player) { + return getGroups(server.getOfflinePlayer(player)); + } + + @Override + public boolean hasPermission(OfflinePlayer player, String permission) { + Player onlinePlayer = player.getPlayer(); + if (onlinePlayer == null) { + return perms.playerHas(null, player, permission); + } else { + return perms.playerHas(onlinePlayer.getWorld().getName(), player, permission); + } + } + + @Override + public boolean hasPermission(String worldName, OfflinePlayer player, String permission) { + return hasPermission(worldName, player.getName(), permission); + } + + @Override + public boolean inGroup(OfflinePlayer player, String group) { + Player onlinePlayer = player.getPlayer(); + if (onlinePlayer == null) { + return perms.playerInGroup(null, player, group); + } else { + return perms.playerInGroup(onlinePlayer, group); + } + } + + @Override + public String[] getGroups(OfflinePlayer player) { + Player onlinePlayer = player.getPlayer(); + if (onlinePlayer == null) { + return perms.getPlayerGroups(null, player); + } else { + return perms.getPlayerGroups(onlinePlayer); + } + } + +}