public boolean cast(Spell spell) {
		if (spell.getSpellbook().isOpen(ctx)) {
			final Action action = ctx.combatBar.select().id(spell.id()).poll();
			if (action.valid() && ctx.combatBar.expanded(true) && action.component().interact("Cast")) {
				return true;
			}

			if (spell.getWindow().open(ctx)) {
				final Component component = spell.getComponent(ctx);
				return component.valid() && component.visible() && component.interact("Cast");
			}
		}
		return false;
	}