mirror of https://github.com/webbukkit/dynmap.git
Merge pull request #2769 from PEXPlugins/feature/vaultperms
Add Vault compatibility and fix PEX v2 usage
This commit is contained in:
commit
9e70e2ce53
|
@ -8,10 +8,9 @@ plugins {
|
|||
allprojects {
|
||||
repositories {
|
||||
mavenLocal()
|
||||
mavenCentral()
|
||||
maven { url "https://oss.sonatype.org/content/repositories/releases" }
|
||||
maven { url "http://repo.mikeprimm.com" }
|
||||
maven { url "http://repo.maven.apache.org/maven2" }
|
||||
maven { url "https://repo.maven.apache.org/maven2" }
|
||||
maven { url "https://hub.spigotmc.org/nexus/content/repositories/snapshots/" }
|
||||
maven { url "https://repo.codemc.org/repository/maven-public/" }
|
||||
}
|
||||
|
|
|
@ -1,11 +1,18 @@
|
|||
|
||||
description = 'dynmap'
|
||||
|
||||
repositories {
|
||||
maven {
|
||||
url 'https://jitpack.io'
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
compile group: 'org.bukkit', name: 'bukkit', version:'1.7.10-R0.1-SNAPSHOT'
|
||||
compile 'com.nijikokun.bukkit:Permissions:3.1.6'
|
||||
compile 'me.lucko.luckperms:luckperms-api:4.3'
|
||||
compile 'net.luckperms:api:5.0'
|
||||
compile('com.github.MilkBowl:VaultAPI:1.7') { transitive = false }
|
||||
compile project(":dynmap-api")
|
||||
compile project(path: ":DynmapCore", configuration: "shadow")
|
||||
compile group: 'ru.tehkode', name: 'PermissionsEx', version:'1.19.1'
|
||||
|
|
|
@ -89,6 +89,7 @@ import org.dynmap.bukkit.permissions.PEXPermissions;
|
|||
import org.dynmap.bukkit.permissions.PermBukkitPermissions;
|
||||
import org.dynmap.bukkit.permissions.GroupManagerPermissions;
|
||||
import org.dynmap.bukkit.permissions.PermissionProvider;
|
||||
import org.dynmap.bukkit.permissions.VaultPermissions;
|
||||
import org.dynmap.bukkit.permissions.bPermPermissions;
|
||||
import org.dynmap.bukkit.permissions.LuckPermsPermissions;
|
||||
import org.dynmap.bukkit.permissions.LuckPerms5Permissions;
|
||||
|
@ -854,6 +855,7 @@ public class DynmapPlugin extends JavaPlugin implements DynmapAPI {
|
|||
perdefs.put(p.getName(), p.getDefault() == PermissionDefault.TRUE);
|
||||
}
|
||||
|
||||
|
||||
permissions = PEXPermissions.create(getServer(), "dynmap");
|
||||
if (permissions == null)
|
||||
permissions = bPermPermissions.create(getServer(), "dynmap", perdefs);
|
||||
|
@ -867,6 +869,8 @@ public class DynmapPlugin extends JavaPlugin implements DynmapAPI {
|
|||
permissions = LuckPermsPermissions.create(getServer(), "dynmap");
|
||||
if (permissions == null)
|
||||
permissions = LuckPerms5Permissions.create(getServer(), "dynmap");
|
||||
if (permissions == null)
|
||||
permissions = VaultPermissions.create(this, "dynmap");
|
||||
if (permissions == null)
|
||||
permissions = BukkitPermissions.create("dynmap", perdefs);
|
||||
if (permissions == null)
|
||||
|
|
|
@ -21,9 +21,17 @@ public class PEXPermissions implements PermissionProvider {
|
|||
Plugin permissionsPlugin = server.getPluginManager().getPlugin("PermissionsEx");
|
||||
if (permissionsPlugin == null)
|
||||
return null;
|
||||
|
||||
try {
|
||||
Class.forName("ru.tehkode.permissions.bukkit.PermissionsEx");
|
||||
} catch (ClassNotFoundException e) {
|
||||
return null;
|
||||
}
|
||||
|
||||
server.getPluginManager().enablePlugin(permissionsPlugin);
|
||||
if(permissionsPlugin.isEnabled() == false)
|
||||
return null;
|
||||
|
||||
//Broken in new dev builds, apparently
|
||||
//if(PermissionsEx.isAvailable() == false)
|
||||
// return null;
|
||||
|
|
|
@ -0,0 +1,90 @@
|
|||
package org.dynmap.bukkit.permissions;
|
||||
|
||||
import net.milkbowl.vault.permission.Permission;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.server.ServiceRegisterEvent;
|
||||
import org.bukkit.plugin.RegisteredServiceProvider;
|
||||
import org.dynmap.Log;
|
||||
import org.dynmap.bukkit.DynmapPlugin;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
public class VaultPermissions implements PermissionProvider, Listener {
|
||||
private RegisteredServiceProvider<Permission> permissionProvider;
|
||||
private final String prefix;
|
||||
|
||||
public static VaultPermissions create(DynmapPlugin plugin, String name) {
|
||||
try {
|
||||
Class.forName("net.milkbowl.vault.permission.Permission");
|
||||
} catch (ClassNotFoundException cnfx) {
|
||||
return null;
|
||||
}
|
||||
|
||||
RegisteredServiceProvider<Permission> provider = plugin.getServer().getServicesManager().getRegistration(Permission.class);
|
||||
if (provider == null || provider.getProvider() == null)
|
||||
return null;
|
||||
|
||||
Log.info("Using Vault provider " + provider.getProvider().getName() + " for access control");
|
||||
VaultPermissions ret = new VaultPermissions(name, provider);
|
||||
plugin.getServer().getPluginManager().registerEvents(ret, plugin);
|
||||
return ret;
|
||||
}
|
||||
|
||||
private VaultPermissions(String prefix, RegisteredServiceProvider<Permission> initialProvider) {
|
||||
this.prefix = prefix;
|
||||
this.permissionProvider = initialProvider;
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the used permission provider if a new one becomes available
|
||||
*
|
||||
* @param event The event with new service registration details
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
@EventHandler
|
||||
public void onServiceRegister(ServiceRegisterEvent event) {
|
||||
if (event.getProvider().getService().equals(Permission.class)) {
|
||||
RegisteredServiceProvider<Permission> newProvider = (RegisteredServiceProvider<Permission>) event.getProvider().getProvider();
|
||||
if (newProvider != this.permissionProvider && newProvider.getPriority().compareTo(this.permissionProvider.getPriority()) >= 0) {
|
||||
this.permissionProvider = newProvider;
|
||||
Log.info("Using Vault provider " + this.permissionProvider.getProvider().getName() + " for access control");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean has(CommandSender sender, String permission) {
|
||||
return permissionProvider.getProvider().has(sender, processPermission(permission));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<String> hasOfflinePermissions(String playerName, Set<String> perms) {
|
||||
final Permission vault = this.permissionProvider.getProvider();
|
||||
OfflinePlayer player = Bukkit.getOfflinePlayer(playerName);
|
||||
|
||||
Set<String> hasperms = new HashSet<>();
|
||||
|
||||
for (String perm : perms) {
|
||||
if (vault.playerHas(null, player, processPermission(perm))) {
|
||||
hasperms.add(perm);
|
||||
}
|
||||
}
|
||||
|
||||
return hasperms;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasOfflinePermission(String playerName, String perm) {
|
||||
OfflinePlayer player = Bukkit.getOfflinePlayer(playerName);
|
||||
return permissionProvider.getProvider().playerHas(null, player, processPermission(perm));
|
||||
}
|
||||
|
||||
private String processPermission(String perm) {
|
||||
return prefix + "." + perm;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue