package me.gnat008.perworldinventory.permission;
import me.gnat008.perworldinventory.ConsoleLogger;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.PluginManager;
import javax.inject.Inject;
public class PermissionManager {
private final PluginManager pluginManager;
private boolean usingPermissionsPlugin;
@Inject
PermissionManager(PluginManager pluginManager) {
this.pluginManager = pluginManager;
checkForPlugins();
}
/**
* Evaluate whether the sender has permission to perform an action.
*
* @param sender The sender to evaluate.
* @param node The permission node.
* @return If the sender has permission.
*/
public boolean hasPermission(CommandSender sender, PermissionNode node) {
if (node == null)
return true;
if (!(sender instanceof Player) || !usingPermissionsPlugin)
return node.getDefaultPermission().evaluate(sender);
Player player = (Player) sender;
return player.hasPermission(node.getNode());
}
public void onPluginDisable(String pluginName) {
if (PermissionSystem.isPermissionSystem(pluginName)) {
checkForPlugins();
}
}
public void onPluginEnable(String pluginName) {
if (PermissionSystem.isPermissionSystem(pluginName))
checkForPlugins();
}
private void checkForPlugins() {
this.usingPermissionsPlugin = false;
for (PermissionSystem type : PermissionSystem.values()) {
try {
Plugin plugin = pluginManager.getPlugin(type.getPluginName());
if (plugin == null)
continue;
if (!plugin.isEnabled())
continue;
this.usingPermissionsPlugin = true;
} catch (Exception ex) {
ConsoleLogger.warning("Error encountered while checking for permission plugin:", ex);
}
}
}
}