diff --git a/mcMMO/com/gmail/nossr50/mcMMO.java b/mcMMO/com/gmail/nossr50/mcMMO.java index e74ce68f1..3b04027cf 100644 --- a/mcMMO/com/gmail/nossr50/mcMMO.java +++ b/mcMMO/com/gmail/nossr50/mcMMO.java @@ -10,12 +10,9 @@ import com.gmail.nossr50.locale.mcLocale; import com.gmail.nossr50.party.Party; import com.gmail.nossr50.skills.*; import com.nijikokun.bukkit.Permissions.Permissions; -import com.nijiko.permissions.PermissionHandler; import org.bukkit.ChatColor; import org.bukkit.Location; -import org.bukkit.plugin.Plugin; - import java.io.BufferedReader; import java.io.File; import java.io.FileReader; @@ -49,13 +46,13 @@ public class mcMMO extends JavaPlugin * Donate via paypal to nossr50@gmail.com (A million thanks to anyone that does!) */ - public static String maindirectory = "plugins/mcMMO/"; + public static String maindirectory = "plugins + File.separator + mcMMO"; File file = new File(maindirectory + File.separator + "config.yml"); public static final Logger log = Logger.getLogger("Minecraft"); private final mcPlayerListener playerListener = new mcPlayerListener(this); private final mcBlockListener blockListener = new mcBlockListener(this); private final mcEntityListener entityListener = new mcEntityListener(this); - public static PermissionHandler permissionHandler; + public static mcPermissions permissionHandler = new mcPermissions(); private Permissions permissions; private Timer mcMMO_Timer = new Timer(true); //BLEED AND REGENERATION @@ -71,9 +68,9 @@ public class mcMMO extends JavaPlugin public void onEnable() { - //new File(maindirectory).mkdir(); + new File(maindirectory).mkdir(); - setupPermissions(); + mcPermissions.initialize(getServer()); config.configCheck(); if(!LoadProperties.useMySQL) @@ -121,25 +118,6 @@ public class mcMMO extends JavaPlugin //mcMMO_SpellTimer.schedule(new mcTimerSpells(this), (long)0, (long)(100)); } - private void setupPermissions() - { - if (permissionHandler != null) - { - return; - } - - Plugin permissionsPlugin = this.getServer().getPluginManager().getPlugin("Permissions"); - - if (permissionsPlugin == null) - { - //log.log(Level.INFO, "[mcMMO] Permission system not detected, defaulting to OP"); - return; - } - - permissionHandler = ((Permissions) permissionsPlugin).getHandler(); - //log.log(Level.INFO, "[mcMMO] Found and will use plugin "+((Permissions)permissionsPlugin).getDescription().getFullName()); - } - public boolean inSameParty(Player playera, Player playerb){ if(Users.getProfile(playera).inParty() && Users.getProfile(playerb).inParty()){ if(Users.getProfile(playera).getParty().equals(Users.getProfile(playerb).getParty())){ diff --git a/mcMMO/com/gmail/nossr50/mcPermissions.java b/mcMMO/com/gmail/nossr50/mcPermissions.java index d9ebbb622..65f255917 100644 --- a/mcMMO/com/gmail/nossr50/mcPermissions.java +++ b/mcMMO/com/gmail/nossr50/mcPermissions.java @@ -1,33 +1,52 @@ package com.gmail.nossr50; -import java.util.logging.Level; import java.util.logging.Logger; import org.bukkit.Server; import org.bukkit.entity.Player; import org.bukkit.plugin.Plugin; + +import ru.tehkode.permissions.PermissionManager; +import ru.tehkode.permissions.bukkit.PermissionsEx; + +import com.nijiko.permissions.PermissionHandler; import com.nijikokun.bukkit.Permissions.Permissions; public class mcPermissions { - private static Permissions permissionsPlugin; - public static boolean permissionsEnabled = false; private static volatile mcPermissions instance; + + private enum PermissionType { + PEX, PERMISSIONS, BUKKIT + } + + private static PermissionType permissionType; + private static Object PHandle; + public static boolean permissionsEnabled = false; public static void initialize(Server server) { - Plugin test = server.getPluginManager().getPlugin("Permissions"); - if (test != null) - { - Logger log = Logger.getLogger("Minecraft"); - permissionsPlugin = ((Permissions) test); - permissionsEnabled = true; - log.log(Level.INFO, "[mcMMO] Permissions enabled."); - } else - { - Logger log = Logger.getLogger("Minecraft"); - log.log(Level.SEVERE, "[mcMMO] Permissions isn't loaded, there are no restrictions."); - } + Logger log = Logger.getLogger("Minecraft"); + + if(permissionsEnabled && permissionType != PermissionType.PERMISSIONS) return; + + Plugin PEXtest = server.getPluginManager().getPlugin("PermissionsEx"); + Plugin test = server.getPluginManager().getPlugin("Permissions"); + if(PEXtest != null) { + PHandle = (PermissionManager) PermissionsEx.getPermissionManager(); + permissionType = PermissionType.PEX; + permissionsEnabled = true; + log.info("[mcMMO] PermissionsEx found, using PermissionsEx."); + } else if(test != null) { + PHandle = (PermissionHandler) ((Permissions) test).getHandler(); + permissionType = PermissionType.PERMISSIONS; + permissionsEnabled = true; + log.info("[mcMMO] Permissions version "+test.getDescription().getVersion()+" found, using Permissions."); + } else { + permissionType = PermissionType.BUKKIT; + permissionsEnabled = true; + log.info("[mcMMO] Using Bukkit Permissions."); + } } public static boolean getEnabled() @@ -35,10 +54,20 @@ public class mcPermissions return permissionsEnabled; } - private static boolean permission(Player player, String string) + private static boolean permission(Player player, String permission) { - return permissionsPlugin.getHandler().has(player, string); - } + if(!permissionsEnabled) return player.isOp(); + switch(permissionType) { + case PEX: + return ((PermissionManager) PHandle).has(player, permission); + case PERMISSIONS: + return ((PermissionHandler) PHandle).has(player, permission); + case BUKKIT: + return player.hasPermission(permission); + default: + return true; + } + } public boolean admin(Player player){ if (permissionsEnabled) { return permission(player, "mcmmo.admin"); diff --git a/mcMMO/plugin.yml b/mcMMO/plugin.yml index 79a1e80d4..bc7e566fa 100644 --- a/mcMMO/plugin.yml +++ b/mcMMO/plugin.yml @@ -63,4 +63,167 @@ commands: a: description: Toggle Admin chat or send admin chat messages sorcery: - description: Detailed skill info \ No newline at end of file + description: Detailed skill info +permissions: + mcmmo.*: + description: Implies all mcmmo permissions. + children: + mcmmo.admin: true + mcmmo.tools.*: true + mcmmo.ability.*: true + mcmmo.item.*: true + mcmmo.tools.*: true + mcmmo.regeneration: true + mcmmo.motd: true + mcmmo.commands.*: true + mcmmo.chat.*: true + mcmmo.skills.*: true + mcmmo.admin: + default: op + + mcmmo.tools.*: + description: Implies all mcmmo.tools permissions. + children: + mcmmo.tools.mcrefresh: true + mcmmo.tools.mmoedit: true + mcmmo.tools.mcgod: true + mcmmo.tools.mcrefresh: + default: op + mcmmo.tools.mmoedit: + default: op + mcmmo.tools.mcgod: + default: op + + mcmmo.ability.*: + description: Implies all mcmmo.ability permissions. + children: + mcmmo.ability.herbalism: true + mcmmo.ability.excavation: true + mcmmo.ability.unarmed: true + mcmmo.ability.mining: true + mcmmo.ability.axes: true + mcmmo.ability.swords: true + mcmmo.ability.woodcutting: true + mcmmo.ability.herbalism: + default: true + mcmmo.ability.excavation: + default: true + mcmmo.ability.unarmed: + default: true + mcmmo.ability.mining: + default: true + mcmmo.ability.axes: + default: true + mcmmo.ability.swords: + default: true + mcmmo.ability.woodcutting: + default: true + + mcmmo.item.*: + description: Implies all mcmmo.item permissions. + children: + mcmmo.item.chimaerawing: true + mcmmo.item.chimaerawing: + default: true + + mcmmo.regeneration: + default: true + + mcmmo.motd: + default: true + + mcmmo.commands.*: + description: Implies all mcmmo.commands permissions. + children: + mcmmo.commands.ability: true + mcmmo.commands.myspawn: true + mcmmo.commands.setmyspawn: true + mcmmo.commands.ptp: true + mcmmo.commands.whois: true + mcmmo.commands.party: true + mcmmo.commands.ability: + default: true + mcmmo.commands.myspawn: + default: true + mcmmo.commands.setmyspawn: + default: true + mcmmo.commands.ptp: + default: true + mcmmo.commands.whois: + default: true + mcmmo.commands.party: + default: true + + mcmmo.chat.*: + description: Implies all mcmmo.chat permissions. (Warning, contains adminchat) + children: + mcmmo.chat.adminchat: true + mcmmo.chat.partychat: true + mcmmo.chat.adminchat: + default: op + mcmmo.chat.partychat: + default: true + + mcmmo.skills.*: + description: Implies all mcmmo.skills permissions. + children: + mcmmo.skills.sorcery.*: true + mcmmo.skills.curative.*: true + mcmmo.skills.taming: true + mcmmo.skills.mining: true + mcmmo.skills.woodcutting: true + mcmmo.skills.repair: true + mcmmo.skills.unarmed: true + mcmmo.skills.archery: true + mcmmo.skills.herbalism: true + mcmmo.skills.excavation: true + mcmmo.skills.swords: true + mcmmo.skills.axes: true + mcmmo.skills.acrobatics: true + mcmmo.skills.sorcery.*: + description: Implies all mcmmo.skills.sorcery permissions. + children: + mcmmo.skills.sorcery: true + mcmmo.skills.sorcery.water: true + mcmmo.skills.sorcery.water.thunder: true + mcmmo.skills.curative.*: + description: Implies all mcmmo.skills.curative permissions. + children: + mcmmo.skills.curative: true + mcmmo.skills.curative.heal.other: true + mcmmo.skills.curative.heal.self: true + + mcmmo.skills.sorcery: + default: true + mcmmo.skills.sorcery.water: + default: true + mcmmo.skills.sorcery.water.thunder: + default: true + mcmmo.skills.curative: + default: true + mcmmo.skills.curative.heal.other: + default: true + mcmmo.skills.curative.heal.self: + default: true + mcmmo.skills.taming: + default: true + mcmmo.skills.mining: + default: true + mcmmo.skills.woodcutting: + default: true + mcmmo.skills.repair: + default: true + mcmmo.skills.unarmed: + default: true + mcmmo.skills.archery: + default: true + mcmmo.skills.herbalism: + default: true + mcmmo.skills.excavation: + default: true + mcmmo.skills.swords: + default: true + mcmmo.skills.axes: + default: true + mcmmo.skills.acrobatics: + default: true \ No newline at end of file