From 8d83cc65762575c893a29c1a78fd0fb6092021a8 Mon Sep 17 00:00:00 2001 From: Matthew Nickson Date: Sun, 5 Jan 2014 20:27:43 +1300 Subject: [PATCH 1/2] Add support for KPerms Add support for KPerms (http://dev.bukkit.org/bukkit-plugins/kperms) --- lib/KPerms.jar | Bin 0 -> 30175 bytes pom.xml | 9 +- src/net/milkbowl/vault/Vault.java | 4 + .../permission/plugins/Permission_KPerms.java | 159 ++++++++++++++++++ 4 files changed, 171 insertions(+), 1 deletion(-) create mode 100644 lib/KPerms.jar create mode 100644 src/net/milkbowl/vault/permission/plugins/Permission_KPerms.java diff --git a/lib/KPerms.jar b/lib/KPerms.jar new file mode 100644 index 0000000000000000000000000000000000000000..38f4b1f5b304ab63d9e1e4c65c4e1f76920c4c93 GIT binary patch literal 30175 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 literal 0 HcmV?d00001 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(); + } +} From 9edd6d68177499dcf9abf3b4c580720e15c7494e Mon Sep 17 00:00:00 2001 From: Matthew Nickson Date: Tue, 7 Jan 2014 08:26:34 +1300 Subject: [PATCH 2/2] Add imports add imports instead of using package name infront of classes. --- .../permission/plugins/Permission_KPerms.java | 35 +++++++++++-------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/src/net/milkbowl/vault/permission/plugins/Permission_KPerms.java b/src/net/milkbowl/vault/permission/plugins/Permission_KPerms.java index 6165c8b..4cc24b8 100644 --- a/src/net/milkbowl/vault/permission/plugins/Permission_KPerms.java +++ b/src/net/milkbowl/vault/permission/plugins/Permission_KPerms.java @@ -27,10 +27,15 @@ import org.bukkit.plugin.Plugin; import java.util.List; +import com.lightniinja.kperms.KPlayer; +import com.lightniinja.kperms.KGroup; +import com.lightniinja.kperms.Utilities; +import com.lightniinja.kperms.KPermsPlugin; + public class Permission_KPerms extends Permission { private final Plugin vault; - private com.lightniinja.kperms.KPermsPlugin kperms = null; + private KPermsPlugin kperms = null; public Permission_KPerms(Plugin plugin) { super(); @@ -39,7 +44,7 @@ public class Permission_KPerms extends Permission { if (kperms == null) { Plugin perms = plugin.getServer().getPluginManager().getPlugin("KPerms"); if (perms != null && perms.isEnabled()) { - this.kperms = (com.lightniinja.kperms.KPermsPlugin) perms; + this.kperms = (KPermsPlugin) perms; plugin.getLogger().info(String.format("[%s][Permission] %s hooked.", plugin.getDescription().getName(), "KPerms")); } } @@ -57,7 +62,7 @@ public class Permission_KPerms extends Permission { if(bridge.kperms == null) { Plugin plugin = event.getPlugin(); if (plugin.getDescription().getName().equals("KPerms")) { - bridge.kperms = (com.lightniinja.kperms.KPermsPlugin) plugin; + bridge.kperms = (KPermsPlugin) plugin; log.info(String.format("[%s][Permission] %s hooked.", vault.getDescription().getName(), "KPerms")); } } @@ -96,52 +101,52 @@ public class Permission_KPerms extends Permission { @Override public boolean playerHas(String world, String player, String permission) { - return new com.lightniinja.kperms.KPlayer(player, kperms).hasPermission(permission); + return new 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); + return new 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); + return new 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); + return new 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); + return new 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); + return new 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); + return new 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); + return new 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); + return new KPlayer(player, kperms).removeGroup(group); } @Override public String[] getPlayerGroups(String world, String player) { - List groups = new com.lightniinja.kperms.KPlayer(player, kperms).getGroups(); + List groups = new KPlayer(player, kperms).getGroups(); String[] gr = new String[groups.size()]; gr = groups.toArray(gr); return gr; @@ -149,11 +154,11 @@ public class Permission_KPerms extends Permission { @Override public String getPrimaryGroup(String world, String player) { - return new com.lightniinja.kperms.KPlayer(player, kperms).getPrimaryGroup(); + return new KPlayer(player, kperms).getPrimaryGroup(); } @Override public String[] getGroups() { - return new com.lightniinja.kperms.Utilities(kperms).getGroups(); + return new Utilities(kperms).getGroups(); } }