public boolean has(Player player, String node) {
		try {
			if (vaultPerms != null) {
				return vaultPerms.has(player, node);
			} else if (nijPerms != null) {
				return nijPerms.getHandler().has(player, node);
			}
//			System.out.println("no perm: checking superperm for " + player.getName() + ": " + node);
//			System.out.println(player.hasPermission(node));
//			for(PermissionAttachmentInfo i : player.getEffectivePermissions()){
//				System.out.println(i.getPermission());
//			}
			if (player.hasPermission(node)) {
				return true;
			} else if (!node.contains("*") && Str.count(node, '.') >= 2) {
				return player.hasPermission(node.substring(0, node.lastIndexOf('.') + 1) + "*");
			}
			return false;
		} catch (Exception e) {
			plugin.getLogger().log(Level.SEVERE, "Error Checking Permissions", e);
		}
		return node.length() < 16 // if invalid node, assume true
				|| (!node.substring(0, 16).equalsIgnoreCase("BetterShop.admin") // only ops have access to .admin
				&& !node.substring(0, 19).equalsIgnoreCase("BetterShop.discount"));
	}