diff --git a/Essentials/src/com/earth2me/essentials/EssentialsPluginListener.java b/Essentials/src/com/earth2me/essentials/EssentialsPluginListener.java index 1dd13021a..bf60a115c 100644 --- a/Essentials/src/com/earth2me/essentials/EssentialsPluginListener.java +++ b/Essentials/src/com/earth2me/essentials/EssentialsPluginListener.java @@ -1,6 +1,5 @@ package com.earth2me.essentials; -import com.earth2me.essentials.perm.PermissionsHandler; import com.earth2me.essentials.register.payment.Methods; import net.ess3.api.IEssentials; import org.bukkit.event.EventHandler; @@ -36,14 +35,10 @@ public class EssentialsPluginListener implements Listener, IConf { if (event.getPlugin().getName().equals("EssentialsChat")) { ess.getSettings().setEssentialsChatActive(false); } - PermissionsHandler permHandler = ess.getPermissionsHandler(); - if (permHandler != null) { - permHandler.checkPermissions(); - } ess.getAlternativeCommandsHandler().removePlugin(event.getPlugin()); // Check to see if the plugin thats being disabled is the one we are using if (ess.getPaymentMethod() != null && Methods.hasMethod() && Methods.checkDisabled(event.getPlugin())) { - ess.getPaymentMethod().reset(); + Methods.reset(); ess.getLogger().log(Level.INFO, "Payment method was disabled. No longer accepting payments."); } } diff --git a/Essentials/src/com/earth2me/essentials/perm/IPermissionsHandler.java b/Essentials/src/com/earth2me/essentials/perm/IPermissionsHandler.java index f926d16c2..bae9eeb58 100644 --- a/Essentials/src/com/earth2me/essentials/perm/IPermissionsHandler.java +++ b/Essentials/src/com/earth2me/essentials/perm/IPermissionsHandler.java @@ -19,4 +19,6 @@ public interface IPermissionsHandler { String getPrefix(Player base); String getSuffix(Player base); + + boolean tryProvider(); } diff --git a/Essentials/src/com/earth2me/essentials/perm/NullPermissionsHandler.java b/Essentials/src/com/earth2me/essentials/perm/NullPermissionsHandler.java deleted file mode 100644 index fdda7b8ec..000000000 --- a/Essentials/src/com/earth2me/essentials/perm/NullPermissionsHandler.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.earth2me.essentials.perm; - -import org.bukkit.entity.Player; - -import java.util.Collections; -import java.util.List; - - -public class NullPermissionsHandler implements IPermissionsHandler { - @Override - public String getGroup(final Player base) { - return null; - } - - @Override - public List getGroups(final Player base) { - return Collections.emptyList(); - } - - @Override - public boolean canBuild(final Player base, final String group) { - return false; - } - - @Override - public boolean inGroup(final Player base, final String group) { - return false; - } - - @Override - public boolean hasPermission(final Player base, final String node) { - return false; - } - - @Override - public String getPrefix(final Player base) { - return null; - } - - @Override - public String getSuffix(final Player base) { - return null; - } -} diff --git a/Essentials/src/com/earth2me/essentials/perm/PermissionsHandler.java b/Essentials/src/com/earth2me/essentials/perm/PermissionsHandler.java index f2e13d0cd..61f909b6e 100644 --- a/Essentials/src/com/earth2me/essentials/perm/PermissionsHandler.java +++ b/Essentials/src/com/earth2me/essentials/perm/PermissionsHandler.java @@ -1,36 +1,25 @@ package com.earth2me.essentials.perm; import com.earth2me.essentials.Essentials; +import com.earth2me.essentials.perm.impl.*; import org.bukkit.entity.Player; -import org.bukkit.plugin.Plugin; -import org.bukkit.plugin.PluginManager; import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.logging.Level; - public class PermissionsHandler implements IPermissionsHandler { - private transient IPermissionsHandler handler = new NullPermissionsHandler(); + private transient IPermissionsHandler handler = null; private transient String defaultGroup = "default"; private final transient Essentials ess; private transient boolean useSuperperms = false; - public PermissionsHandler(final Essentials plugin) { - this.ess = plugin; - } - public PermissionsHandler(final Essentials plugin, final boolean useSuperperms) { this.ess = plugin; this.useSuperperms = useSuperperms; } - public PermissionsHandler(final Essentials plugin, final String defaultGroup) { - this.ess = plugin; - this.defaultGroup = defaultGroup; - } - @Override public String getGroup(final Player base) { final long start = System.nanoTime(); @@ -93,68 +82,55 @@ public class PermissionsHandler implements IPermissionsHandler { return suffix; } + @Override + public boolean tryProvider() { + return true; + } + public void checkPermissions() { - final PluginManager pluginManager = ess.getServer().getPluginManager(); - String enabledPermsPlugin = ""; - List specialCasePlugins = Arrays.asList("PermissionsEx", "GroupManager", - "SimplyPerms", "Privileges", "bPermissions", "zPermissions", "PermissionsBukkit", - "DroxPerms", "xPerms"); - for (Plugin plugin : pluginManager.getPlugins()) { - if (specialCasePlugins.contains(plugin.getName())) { - enabledPermsPlugin = plugin.getName(); - break; - } - } - final Plugin vaultAPI = pluginManager.getPlugin("Vault"); - if (vaultAPI != null && vaultAPI.isEnabled()) { - if (!(handler instanceof AbstractVaultHandler)) { - AbstractVaultHandler vaultHandler; - switch (enabledPermsPlugin) { - case "PermissionsEx": - vaultHandler = new PermissionsExHandler(); - break; - case "GroupManager": - vaultHandler = new GroupManagerHandler(); - break; - case "SimplyPerms": - vaultHandler = new SimplyPermsHandler(); - break; - case "Privileges": - vaultHandler = new PrivilegesHandler(); - break; - case "bPermissions": - vaultHandler = new BPermissions2Handler(); - break; - default: - vaultHandler = new GenericVaultHandler(); - break; + // load and assign a handler + List> providerClazz = Arrays.asList( + BPermissions2Handler.class, + GroupManagerHandler.class, + PermissionsExHandler.class, + PrivilegesHandler.class, + SimplyPermsHandler.class, + GenericVaultHandler.class, + SuperpermsHandler.class + ); + for (Class providerClass : providerClazz) { + try { + IPermissionsHandler provider = providerClass.newInstance(); + this.handler = provider; + if (provider.tryProvider()) { + break; } - if (enabledPermsPlugin.equals("")) { - enabledPermsPlugin = "generic"; - } - vaultHandler.setupProviders(); - ess.getLogger().info("Using Vault based permissions (" + enabledPermsPlugin + ")"); - handler = vaultHandler; + } catch (Throwable ignored) { } - return; } - if (!enabledPermsPlugin.equals("") && !(handler instanceof SuperpermsHandler)) { - ess.getLogger().warning("Detected supported permissions plugin " + enabledPermsPlugin + " without Vault installed."); - ess.getLogger().warning("Features such as chat prefixes/suffixes and group-related functionality will not " + - "work until you install Vault."); - useSuperperms = true; + if (handler == null) { + handler = new ConfigPermissionsHandler(ess); } - if (useSuperperms) { - if (!(handler instanceof SuperpermsHandler)) { - ess.getLogger().info("Using superperms based permissions."); - handler = new SuperpermsHandler(); - } - } else { - if (!(handler instanceof ConfigPermissionsHandler)) { - ess.getLogger().info("Using config file enhanced permissions."); - ess.getLogger().info("Permissions listed in as player-commands will be given to all users."); - handler = new ConfigPermissionsHandler(ess); + if (useSuperperms && handler instanceof ConfigPermissionsHandler) { + handler = new SuperpermsHandler(); + } + // output handler info + if (handler instanceof GenericVaultHandler) { + String enabledPermsPlugin = ((GenericVaultHandler) handler).getEnabledPermsPlugin(); + if (enabledPermsPlugin == null) enabledPermsPlugin = "generic"; + ess.getLogger().info("Using Vault based permissions (" + enabledPermsPlugin + ")"); + } else if (handler instanceof SuperpermsHandler) { + if (handler.tryProvider()) { + ess.getLogger().warning("Detected supported permissions plugin " + + ((SuperpermsHandler) handler).getEnabledPermsPlugin() + " without Vault installed."); + ess.getLogger().warning("Features such as chat prefixes/suffixes and group-related functionality will not " + + "work until you install Vault."); + } else { + ess.getLogger().info("Using superperms-based permissions."); } + } else if (handler instanceof ConfigPermissionsHandler) { + ess.getLogger().info("Using config file enhanced permissions."); + ess.getLogger().info("Permissions listed in as player-commands will be given to all users."); } } @@ -163,7 +139,7 @@ public class PermissionsHandler implements IPermissionsHandler { } public String getName() { - return handler.getClass().getSimpleName().replace("Handler", ""); + return handler.getClass().getSimpleName().replace("Provider", ""); } private void checkPermLag(long start, String summary) { diff --git a/Essentials/src/com/earth2me/essentials/perm/AbstractVaultHandler.java b/Essentials/src/com/earth2me/essentials/perm/impl/AbstractVaultHandler.java similarity index 91% rename from Essentials/src/com/earth2me/essentials/perm/AbstractVaultHandler.java rename to Essentials/src/com/earth2me/essentials/perm/impl/AbstractVaultHandler.java index 5c5aa966c..222a0d17e 100644 --- a/Essentials/src/com/earth2me/essentials/perm/AbstractVaultHandler.java +++ b/Essentials/src/com/earth2me/essentials/perm/impl/AbstractVaultHandler.java @@ -1,4 +1,4 @@ -package com.earth2me.essentials.perm; +package com.earth2me.essentials.perm.impl; import net.milkbowl.vault.chat.Chat; import net.milkbowl.vault.permission.Permission; @@ -64,4 +64,12 @@ public abstract class AbstractVaultHandler extends SuperpermsHandler { return playerSuffix; } } + + public boolean canLoad() { + try { + return setupProviders(); + } catch (Throwable t) { + return false; + } + } } diff --git a/Essentials/src/com/earth2me/essentials/perm/BPermissions2Handler.java b/Essentials/src/com/earth2me/essentials/perm/impl/BPermissions2Handler.java similarity index 53% rename from Essentials/src/com/earth2me/essentials/perm/BPermissions2Handler.java rename to Essentials/src/com/earth2me/essentials/perm/impl/BPermissions2Handler.java index 4b2162af1..c89c5da5d 100644 --- a/Essentials/src/com/earth2me/essentials/perm/BPermissions2Handler.java +++ b/Essentials/src/com/earth2me/essentials/perm/impl/BPermissions2Handler.java @@ -1,5 +1,6 @@ -package com.earth2me.essentials.perm; +package com.earth2me.essentials.perm.impl; +import org.bukkit.Bukkit; import org.bukkit.entity.Player; @@ -8,4 +9,9 @@ public class BPermissions2Handler extends AbstractVaultHandler { public boolean canBuild(final Player base, final String group) { return hasPermission(base, "bPermissions.build"); } + + @Override + public boolean tryProvider() { + return super.canLoad() && Bukkit.getPluginManager().getPlugin("bPermissions") != null; + } } diff --git a/Essentials/src/com/earth2me/essentials/perm/ConfigPermissionsHandler.java b/Essentials/src/com/earth2me/essentials/perm/impl/ConfigPermissionsHandler.java similarity index 85% rename from Essentials/src/com/earth2me/essentials/perm/ConfigPermissionsHandler.java rename to Essentials/src/com/earth2me/essentials/perm/impl/ConfigPermissionsHandler.java index b1e0e23d9..6f4af7f66 100644 --- a/Essentials/src/com/earth2me/essentials/perm/ConfigPermissionsHandler.java +++ b/Essentials/src/com/earth2me/essentials/perm/impl/ConfigPermissionsHandler.java @@ -1,4 +1,4 @@ -package com.earth2me.essentials.perm; +package com.earth2me.essentials.perm.impl; import net.ess3.api.IEssentials; import org.bukkit.entity.Player; @@ -23,4 +23,8 @@ public class ConfigPermissionsHandler extends SuperpermsHandler { return ess.getSettings().isPlayerCommand(cmds[cmds.length - 1]) || super.hasPermission(base, node); } + @Override + public boolean tryProvider() { + return true; + } } diff --git a/Essentials/src/com/earth2me/essentials/perm/GenericVaultHandler.java b/Essentials/src/com/earth2me/essentials/perm/impl/GenericVaultHandler.java similarity index 60% rename from Essentials/src/com/earth2me/essentials/perm/GenericVaultHandler.java rename to Essentials/src/com/earth2me/essentials/perm/impl/GenericVaultHandler.java index 2a41489b3..911e207ff 100644 --- a/Essentials/src/com/earth2me/essentials/perm/GenericVaultHandler.java +++ b/Essentials/src/com/earth2me/essentials/perm/impl/GenericVaultHandler.java @@ -1,4 +1,4 @@ -package com.earth2me.essentials.perm; +package com.earth2me.essentials.perm.impl; public class GenericVaultHandler extends AbstractVaultHandler { } diff --git a/Essentials/src/com/earth2me/essentials/perm/GroupManagerHandler.java b/Essentials/src/com/earth2me/essentials/perm/impl/GroupManagerHandler.java similarity index 87% rename from Essentials/src/com/earth2me/essentials/perm/GroupManagerHandler.java rename to Essentials/src/com/earth2me/essentials/perm/impl/GroupManagerHandler.java index fd53a3215..70962db0b 100644 --- a/Essentials/src/com/earth2me/essentials/perm/GroupManagerHandler.java +++ b/Essentials/src/com/earth2me/essentials/perm/impl/GroupManagerHandler.java @@ -1,11 +1,10 @@ -package com.earth2me.essentials.perm; +package com.earth2me.essentials.perm.impl; import org.anjocaido.groupmanager.GroupManager; import org.anjocaido.groupmanager.dataholder.worlds.WorldsHolder; import org.anjocaido.groupmanager.permissions.AnjoPermissionsHandler; import org.bukkit.Bukkit; import org.bukkit.entity.Player; -import org.bukkit.plugin.Plugin; public class GroupManagerHandler extends AbstractVaultHandler { @@ -32,4 +31,9 @@ public class GroupManagerHandler extends AbstractVaultHandler { return null; } } + + @Override + public boolean tryProvider() { + return super.canLoad() && groupManager != null; + } } diff --git a/Essentials/src/com/earth2me/essentials/perm/PermissionsExHandler.java b/Essentials/src/com/earth2me/essentials/perm/impl/PermissionsExHandler.java similarity index 68% rename from Essentials/src/com/earth2me/essentials/perm/PermissionsExHandler.java rename to Essentials/src/com/earth2me/essentials/perm/impl/PermissionsExHandler.java index 9dd3c9194..846314372 100644 --- a/Essentials/src/com/earth2me/essentials/perm/PermissionsExHandler.java +++ b/Essentials/src/com/earth2me/essentials/perm/impl/PermissionsExHandler.java @@ -1,5 +1,6 @@ -package com.earth2me.essentials.perm; +package com.earth2me.essentials.perm.impl; +import org.bukkit.Bukkit; import org.bukkit.entity.Player; import ru.tehkode.permissions.PermissionUser; import ru.tehkode.permissions.bukkit.PermissionsEx; @@ -10,4 +11,9 @@ public class PermissionsExHandler extends AbstractVaultHandler { final PermissionUser user = PermissionsEx.getPermissionManager().getUser(base.getUniqueId()); return user != null && user.getOptionBoolean("build", base.getWorld().getName(), false); } + + @Override + public boolean tryProvider() { + return super.canLoad() && Bukkit.getPluginManager().getPlugin("PermissionsEx") != null; + } } diff --git a/Essentials/src/com/earth2me/essentials/perm/PrivilegesHandler.java b/Essentials/src/com/earth2me/essentials/perm/impl/PrivilegesHandler.java similarity index 51% rename from Essentials/src/com/earth2me/essentials/perm/PrivilegesHandler.java rename to Essentials/src/com/earth2me/essentials/perm/impl/PrivilegesHandler.java index 9456313b8..8fdd79188 100644 --- a/Essentials/src/com/earth2me/essentials/perm/PrivilegesHandler.java +++ b/Essentials/src/com/earth2me/essentials/perm/impl/PrivilegesHandler.java @@ -1,5 +1,6 @@ -package com.earth2me.essentials.perm; +package com.earth2me.essentials.perm.impl; +import org.bukkit.Bukkit; import org.bukkit.entity.Player; public class PrivilegesHandler extends AbstractVaultHandler { @@ -7,4 +8,9 @@ public class PrivilegesHandler extends AbstractVaultHandler { public boolean canBuild(Player base, String group) { return hasPermission(base, "privileges.build"); } + + @Override + public boolean tryProvider() { + return super.canLoad() && Bukkit.getPluginManager().getPlugin("Privileges") != null; + } } diff --git a/Essentials/src/com/earth2me/essentials/perm/SimplyPermsHandler.java b/Essentials/src/com/earth2me/essentials/perm/impl/SimplyPermsHandler.java similarity index 52% rename from Essentials/src/com/earth2me/essentials/perm/SimplyPermsHandler.java rename to Essentials/src/com/earth2me/essentials/perm/impl/SimplyPermsHandler.java index 703d8650c..ee289eb47 100644 --- a/Essentials/src/com/earth2me/essentials/perm/SimplyPermsHandler.java +++ b/Essentials/src/com/earth2me/essentials/perm/impl/SimplyPermsHandler.java @@ -1,5 +1,6 @@ -package com.earth2me.essentials.perm; +package com.earth2me.essentials.perm.impl; +import org.bukkit.Bukkit; import org.bukkit.entity.Player; public class SimplyPermsHandler extends AbstractVaultHandler { @@ -7,4 +8,9 @@ public class SimplyPermsHandler extends AbstractVaultHandler { public boolean canBuild(Player base, String group) { return hasPermission(base, "permissions.allow.build"); } + + @Override + public boolean tryProvider() { + return super.canLoad() && Bukkit.getPluginManager().getPlugin("SimplyPerms") != null; + } } diff --git a/Essentials/src/com/earth2me/essentials/perm/SuperpermsHandler.java b/Essentials/src/com/earth2me/essentials/perm/impl/SuperpermsHandler.java similarity index 58% rename from Essentials/src/com/earth2me/essentials/perm/SuperpermsHandler.java rename to Essentials/src/com/earth2me/essentials/perm/impl/SuperpermsHandler.java index b12a2a7cc..34df82d6a 100644 --- a/Essentials/src/com/earth2me/essentials/perm/SuperpermsHandler.java +++ b/Essentials/src/com/earth2me/essentials/perm/impl/SuperpermsHandler.java @@ -1,7 +1,11 @@ -package com.earth2me.essentials.perm; +package com.earth2me.essentials.perm.impl; +import com.earth2me.essentials.perm.IPermissionsHandler; +import org.bukkit.Bukkit; import org.bukkit.entity.Player; +import org.bukkit.plugin.Plugin; +import java.util.Arrays; import java.util.List; @@ -54,4 +58,24 @@ public class SuperpermsHandler implements IPermissionsHandler { public String getSuffix(final Player base) { return null; } + + @Override + public boolean tryProvider() { + return getEnabledPermsPlugin() != null; + } + + public String getEnabledPermsPlugin() { + + String enabledPermsPlugin = null; + List specialCasePlugins = Arrays.asList("PermissionsEx", "GroupManager", + "SimplyPerms", "Privileges", "bPermissions", "zPermissions", "PermissionsBukkit", + "DroxPerms", "xPerms"); + for (Plugin plugin : Bukkit.getPluginManager().getPlugins()) { + if (specialCasePlugins.contains(plugin.getName())) { + enabledPermsPlugin = plugin.getName(); + break; + } + } + return enabledPermsPlugin; + } }