diff --git a/PermissionsBukkit.jar b/PermissionsBukkit.jar
new file mode 100644
index 00000000..aed1d272
Binary files /dev/null and b/PermissionsBukkit.jar differ
diff --git a/PermissionsEx.jar b/PermissionsEx.jar
new file mode 100644
index 00000000..5e7443ad
Binary files /dev/null and b/PermissionsEx.jar differ
diff --git a/bpermissions.jar b/bpermissions.jar
new file mode 100644
index 00000000..1a675375
Binary files /dev/null and b/bpermissions.jar differ
diff --git a/pom.xml b/pom.xml
index acbc2522..c3f97dee 100644
--- a/pom.xml
+++ b/pom.xml
@@ -158,5 +158,26 @@
dev-SNAPSHOT
compile
+
+ ru.tehkode
+ PermissionsEx
+ 1.19.1
+ system
+ ${project.basedir}/PermissionsEx.jar
+
+
+ de.bananaco
+ bPermissions
+ 2.9.1
+ system
+ ${project.basedir}/bpermissions.jar
+
+
+ com.platymuus.bukkit.permissions
+ PermissionsBukkit
+ 1.6
+ system
+ ${project.basedir}/PermissionsBukkit.jar
+
diff --git a/src/main/java/org/dynmap/bukkit/DynmapPlugin.java b/src/main/java/org/dynmap/bukkit/DynmapPlugin.java
index c6144ca7..d017cdb9 100644
--- a/src/main/java/org/dynmap/bukkit/DynmapPlugin.java
+++ b/src/main/java/org/dynmap/bukkit/DynmapPlugin.java
@@ -63,7 +63,10 @@ import org.dynmap.PlayerList;
import org.dynmap.bukkit.permissions.BukkitPermissions;
import org.dynmap.bukkit.permissions.NijikokunPermissions;
import org.dynmap.bukkit.permissions.OpPermissions;
+import org.dynmap.bukkit.permissions.PEXPermissions;
+import org.dynmap.bukkit.permissions.PermBukkitPermissions;
import org.dynmap.bukkit.permissions.PermissionProvider;
+import org.dynmap.bukkit.permissions.bPermPermissions;
import org.dynmap.common.BiomeMap;
import org.dynmap.common.DynmapCommandSender;
import org.dynmap.common.DynmapPlayer;
@@ -417,7 +420,13 @@ public class DynmapPlugin extends JavaPlugin implements DynmapAPI {
/* Set up player login/quit event handler */
registerPlayerLoginListener();
- permissions = NijikokunPermissions.create(getServer(), "dynmap");
+ permissions = PEXPermissions.create(getServer(), "dynmap");
+ if (permissions == null)
+ permissions = bPermPermissions.create(getServer(), "dynmap");
+ if (permissions == null)
+ permissions = PermBukkitPermissions.create(getServer(), "dynmap");
+ if (permissions == null)
+ permissions = NijikokunPermissions.create(getServer(), "dynmap");
if (permissions == null)
permissions = BukkitPermissions.create("dynmap");
if (permissions == null)
diff --git a/src/main/java/org/dynmap/bukkit/permissions/PEXPermissions.java b/src/main/java/org/dynmap/bukkit/permissions/PEXPermissions.java
new file mode 100644
index 00000000..07149d31
--- /dev/null
+++ b/src/main/java/org/dynmap/bukkit/permissions/PEXPermissions.java
@@ -0,0 +1,37 @@
+package org.dynmap.bukkit.permissions;
+
+import org.bukkit.Server;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
+import org.bukkit.plugin.Plugin;
+import org.dynmap.Log;
+
+import ru.tehkode.permissions.PermissionManager;
+import ru.tehkode.permissions.bukkit.PermissionsEx;
+
+public class PEXPermissions implements PermissionProvider {
+ String name;
+ PermissionManager pm;
+
+ public static PEXPermissions create(Server server, String name) {
+ Plugin permissionsPlugin = server.getPluginManager().getPlugin("PermissionsEx");
+ if (permissionsPlugin == null)
+ return null;
+ server.getPluginManager().enablePlugin(permissionsPlugin);
+ if(PermissionsEx.isAvailable() == false)
+ return null;
+ Log.info("Using PermissionsEx " + permissionsPlugin.getDescription().getVersion() + " for access control");
+ return new PEXPermissions(name);
+ }
+
+ public PEXPermissions(String name) {
+ this.name = name;
+ pm = PermissionsEx.getPermissionManager();
+ }
+
+ @Override
+ public boolean has(CommandSender sender, String permission) {
+ Player player = sender instanceof Player ? (Player) sender : null;
+ return (player != null) ? pm.has(player, name + "." + permission) : true;
+ }
+}
diff --git a/src/main/java/org/dynmap/bukkit/permissions/PermBukkitPermissions.java b/src/main/java/org/dynmap/bukkit/permissions/PermBukkitPermissions.java
new file mode 100644
index 00000000..21bc54b2
--- /dev/null
+++ b/src/main/java/org/dynmap/bukkit/permissions/PermBukkitPermissions.java
@@ -0,0 +1,36 @@
+package org.dynmap.bukkit.permissions;
+
+import org.bukkit.Server;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
+import org.bukkit.plugin.Plugin;
+import org.dynmap.Log;
+
+import com.nijiko.permissions.PermissionHandler;
+import com.platymuus.bukkit.permissions.PermissionsPlugin;
+
+public class PermBukkitPermissions implements PermissionProvider {
+ String name;
+ PermissionsPlugin plugin;
+
+ public static PermBukkitPermissions create(Server server, String name) {
+ Plugin permissionsPlugin = server.getPluginManager().getPlugin("PermissionsBukkit");
+ if (permissionsPlugin == null)
+ return null;
+
+ server.getPluginManager().enablePlugin(permissionsPlugin);
+ Log.info("Using PermissionsBukkit " + permissionsPlugin.getDescription().getVersion() + " for access control");
+ return new PermBukkitPermissions(permissionsPlugin, name);
+ }
+
+ public PermBukkitPermissions(Plugin permissionsPlugin, String name) {
+ this.name = name;
+ plugin = (PermissionsPlugin) permissionsPlugin;
+ }
+
+ @Override
+ public boolean has(CommandSender sender, String permission) {
+ Player player = sender instanceof Player ? (Player) sender : null;
+ return (player != null) ? plugin.getPlayerInfo(player.getName()).getPermissions().containsKey(name + "." + permission) : true;
+ }
+}
diff --git a/src/main/java/org/dynmap/bukkit/permissions/bPermPermissions.java b/src/main/java/org/dynmap/bukkit/permissions/bPermPermissions.java
new file mode 100644
index 00000000..e5643139
--- /dev/null
+++ b/src/main/java/org/dynmap/bukkit/permissions/bPermPermissions.java
@@ -0,0 +1,35 @@
+package org.dynmap.bukkit.permissions;
+
+import org.bukkit.Server;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
+import org.bukkit.plugin.Plugin;
+import org.dynmap.Log;
+
+import ru.tehkode.permissions.bukkit.PermissionsEx;
+
+import de.bananaco.bpermissions.api.ApiLayer;
+import de.bananaco.bpermissions.api.util.CalculableType;
+
+public class bPermPermissions implements PermissionProvider {
+ String name;
+
+ public static bPermPermissions create(Server server, String name) {
+ Plugin permissionsPlugin = server.getPluginManager().getPlugin("bPermissions");
+ if (permissionsPlugin == null)
+ return null;
+ server.getPluginManager().enablePlugin(permissionsPlugin);
+ Log.info("Using bPermissions " + permissionsPlugin.getDescription().getVersion() + " for access control");
+ return new bPermPermissions(name);
+ }
+
+ public bPermPermissions(String name) {
+ this.name = name;
+ }
+
+ @Override
+ public boolean has(CommandSender sender, String permission) {
+ Player player = sender instanceof Player ? (Player) sender : null;
+ return (player != null) ? ApiLayer.hasPermission(player.getWorld().getName(), CalculableType.USER, player.getName(), name + "." + permission) : true;
+ }
+}