diff --git a/lib/KPerms.jar b/lib/KPerms.jar
new file mode 100644
index 0000000..38f4b1f
Binary files /dev/null and b/lib/KPerms.jar differ
diff --git a/pom.xml b/pom.xml
index 7c9bb94..86f9960 100644
--- a/pom.xml
+++ b/pom.xml
@@ -10,7 +10,7 @@
http://dev.bukkit.org/server-mods/vault/
Vault is a Permissions & Economy API to allow plugins to more easily hook into these systems without needing to hook each individual system themselves.
-Vault currently supports the following: Permissions 3, PEX, GroupManager, bPerms, bPerms2, SimplyPerms, DroxPerms, zPermissions, rscPermissions, Starburst, iConomy (4/5/6) BOSEconomy *6/7), EssentialsEcon, 3Co, MultiConomy, MineConomy, EconXP, eWallet, CurrencyCore, XPBank, CraftConomy, AEco, SDFEconomy, TAEcon
+Vault currently supports the following: Permissions 3, PEX, GroupManager, bPerms, bPerms2, SimplyPerms, DroxPerms, zPermissions, rscPermissions, KPerms, Starburst, iConomy (4/5/6) BOSEconomy *6/7), EssentialsEcon, 3Co, MultiConomy, MineConomy, EconXP, eWallet, CurrencyCore, XPBank, CraftConomy, AEco, SDFEconomy, TAEcon
UTF-8
@@ -377,6 +377,13 @@ Vault currently supports the following: Permissions 3, PEX, GroupManager, bPerms
system
${project.basedir}/lib/TAEcon.jar
+
+ KPerms
+ KPerms
+ 1.0
+ system
+ ${project.basedir}/lib/KPerms.jar
+
diff --git a/src/net/milkbowl/vault/Vault.java b/src/net/milkbowl/vault/Vault.java
index 1c309ea..8b6cbb5 100644
--- a/src/net/milkbowl/vault/Vault.java
+++ b/src/net/milkbowl/vault/Vault.java
@@ -82,6 +82,7 @@ import net.milkbowl.vault.permission.plugins.Permission_bPermissions2;
import net.milkbowl.vault.permission.plugins.Permission_zPermissions;
import net.milkbowl.vault.permission.plugins.Permission_TotalPermissions;
import net.milkbowl.vault.permission.plugins.Permission_rscPermissions;
+import net.milkbowl.vault.permission.plugins.Permission_KPerms;
import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
@@ -376,6 +377,9 @@ public class Vault extends JavaPlugin {
// Try to load rscPermissions
hookPermission("rscPermissions", Permission_rscPermissions.class, ServicePriority.Normal, "ru.simsonic.rscPermissions.MainPluginClass");
+ //Try to load KPerms
+ hookPermission("KPerms", Permission_KPerms.class, ServicePriority.Normal, "com.lightniinja.kperms.KPermsPlugin");
+
Permission perms = new Permission_SuperPerms(this);
sm.register(Permission.class, perms, this, ServicePriority.Lowest);
log.info(String.format("[%s][Permission] SuperPermissions loaded as backup permission system.", getDescription().getName()));
diff --git a/src/net/milkbowl/vault/permission/plugins/Permission_KPerms.java b/src/net/milkbowl/vault/permission/plugins/Permission_KPerms.java
new file mode 100644
index 0000000..6165c8b
--- /dev/null
+++ b/src/net/milkbowl/vault/permission/plugins/Permission_KPerms.java
@@ -0,0 +1,159 @@
+/* This file is part of Vault.
+
+ Vault 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.
+
+ Vault 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 Vault. If not, see .
+ */
+package net.milkbowl.vault.permission.plugins;
+
+import net.milkbowl.vault.permission.Permission;
+
+import org.bukkit.Bukkit;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.EventPriority;
+import org.bukkit.event.Listener;
+import org.bukkit.event.server.PluginDisableEvent;
+import org.bukkit.event.server.PluginEnableEvent;
+import org.bukkit.plugin.Plugin;
+
+import java.util.List;
+
+public class Permission_KPerms extends Permission {
+
+ private final Plugin vault;
+ private com.lightniinja.kperms.KPermsPlugin kperms = null;
+
+ public Permission_KPerms(Plugin plugin) {
+ super();
+ this.vault = plugin;
+ Bukkit.getServer().getPluginManager().registerEvents(new PermissionServerListener(this), vault);
+ if (kperms == null) {
+ Plugin perms = plugin.getServer().getPluginManager().getPlugin("KPerms");
+ if (perms != null && perms.isEnabled()) {
+ this.kperms = (com.lightniinja.kperms.KPermsPlugin) perms;
+ plugin.getLogger().info(String.format("[%s][Permission] %s hooked.", plugin.getDescription().getName(), "KPerms"));
+ }
+ }
+ }
+
+ private class PermissionServerListener implements Listener {
+ private final Permission_KPerms bridge;
+
+ public PermissionServerListener(Permission_KPerms bridge) {
+ this.bridge = bridge;
+ }
+
+ @EventHandler(priority = EventPriority.MONITOR)
+ public void onPluginEnable(PluginEnableEvent event) {
+ if(bridge.kperms == null) {
+ Plugin plugin = event.getPlugin();
+ if (plugin.getDescription().getName().equals("KPerms")) {
+ bridge.kperms = (com.lightniinja.kperms.KPermsPlugin) plugin;
+ log.info(String.format("[%s][Permission] %s hooked.", vault.getDescription().getName(), "KPerms"));
+ }
+ }
+ }
+
+ @EventHandler(priority = EventPriority.MONITOR)
+ public void onPluginDisable(PluginDisableEvent event) {
+ if(bridge.kperms != null){
+ if(event.getPlugin().getDescription().getName().equals(bridge.kperms.getName())) {
+ bridge.kperms = null;
+ log.info(String.format("[%s][Permission] %s un-hooked.", vault.getDescription().getName(), "KPerms"));
+ }
+ }
+ }
+ }
+
+ @Override
+ public String getName() {
+ return "KPerms";
+ }
+
+ @Override
+ public boolean isEnabled() {
+ return kperms.isEnabled();
+ }
+
+ @Override
+ public boolean hasSuperPermsCompat() {
+ return true;
+ }
+
+ @Override
+ public boolean hasGroupSupport() {
+ return true;
+ }
+
+ @Override
+ public boolean playerHas(String world, String player, String permission) {
+ return new com.lightniinja.kperms.KPlayer(player, kperms).hasPermission(permission);
+ }
+
+ @Override
+ public boolean playerAdd(String world, String player, String permission) {
+ return new com.lightniinja.kperms.KPlayer(player, kperms).addPermission(permission);
+ }
+
+ @Override
+ public boolean playerRemove(String world, String player, String permission) {
+ return new com.lightniinja.kperms.KPlayer(player, kperms).removePermission(permission);
+ }
+
+ @Override
+ public boolean groupHas(String world, String group, String permission) {
+ return new com.lightniinja.kperms.KGroup(group, kperms).hasPermission(permission);
+ }
+
+ @Override
+ public boolean groupAdd(String world, String group, String permission) {
+ return new com.lightniinja.kperms.KGroup(group, kperms).addPermission(permission);
+ }
+
+ @Override
+ public boolean groupRemove(String world, String group, String permission) {
+ return new com.lightniinja.kperms.KGroup(group, kperms).removePermission(permission);
+ }
+
+ @Override
+ public boolean playerInGroup(String world, String player, String group) {
+ return new com.lightniinja.kperms.KPlayer(player, kperms).isMemberOfGroup(group);
+ }
+
+ @Override
+ public boolean playerAddGroup(String world, String player, String group) {
+ return new com.lightniinja.kperms.KPlayer(player, kperms).addGroup(group);
+ }
+
+ @Override
+ public boolean playerRemoveGroup(String world, String player, String group) {
+ return new com.lightniinja.kperms.KPlayer(player, kperms).removeGroup(group);
+ }
+
+ @Override
+ public String[] getPlayerGroups(String world, String player) {
+ List groups = new com.lightniinja.kperms.KPlayer(player, kperms).getGroups();
+ String[] gr = new String[groups.size()];
+ gr = groups.toArray(gr);
+ return gr;
+ }
+
+ @Override
+ public String getPrimaryGroup(String world, String player) {
+ return new com.lightniinja.kperms.KPlayer(player, kperms).getPrimaryGroup();
+ }
+
+ @Override
+ public String[] getGroups() {
+ return new com.lightniinja.kperms.Utilities(kperms).getGroups();
+ }
+}