From 10484eb58b8409e697273be3f360d8ff56eb7396 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 | 4 +- .../wepif/PermissionsResolverManager.java | 7 +- .../java/com/sk89q/wepif/VaultResolver.java | 116 ++++++++++++++++++ 4 files changed, 124 insertions(+), 4 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 7795bc73a..87c28ceb9 100644 --- a/worldedit-bukkit/build.gradle +++ b/worldedit-bukkit/build.gradle @@ -13,7 +13,7 @@ dependencies { compile 'com.destroystokyo.paper:paper-api:1.13.2-R0.1-SNAPSHOT' compile 'org.spigotmc:spigot:1.13.2-R0.1-SNAPSHOT' testCompile 'org.mockito:mockito-core:1.9.0-rc1' - compile 'net.milkbowl.vault:VaultAPI:1.5.6' + compile 'net.milkbowl.vault:VaultAPI:1.7' compile 'com.massivecraft:factions:2.8.0' compile 'com.drtshock:factions:1.6.9.5' compile 'com.factionsone:FactionsOne:1.2.2' @@ -87,4 +87,4 @@ shadowJar { build.dependsOn(shadowJar) build.finalizedBy(copyFiles) -copyFiles.dependsOn(createPom) +copyFiles.dependsOn(createPom) \ No newline at end of file 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); + } + } + +}