public boolean cast (Sorcerer sorcerer, Trigger trigger, Event event)
      {
        if (isOnCooldown(sorcerer))
          return false;
        cooldowns.put(sorcerer, System.currentTimeMillis() + 1000);
        if (trigger.isInteractTriggered())
          {
            PlayerInteractEvent interactEvent = (PlayerInteractEvent) event;
            interactEvent.setCancelled(true);
            Location origin;
            if (trigger.isBlockTriggered())
              {
                origin = interactEvent.getClickedBlock().getLocation();
              }
            else
              {
                Block originBlock =
                    sorcerer.getPlayer().getTargetBlock(transparentBlocks, 100);
                if (originBlock.getType() == Material.AIR)
                  {
                    sorcerer.getPlayer().sendMessage(
                        ChatColor.RED + "No block in sight");
                    return false;
                  }
                origin = originBlock.getLocation();
              }
            bigStrike(origin);
          }
        else if (trigger.isDamageTriggered())
          {
            EntityDamageByEntityEvent damageEvent =
                (EntityDamageByEntityEvent) event;
            littleStrike(damageEvent.getEntity().getLocation());
          }
        return true;
      }