public boolean cast (Sorcerer sorcerer, Trigger trigger, Event event)
      {
        PlayerInteractEvent interactEvent = (PlayerInteractEvent) event;
        interactEvent.setCancelled(true);
        final Location origin;
        if (trigger.isBlockTriggered())
          {
            origin = interactEvent.getClickedBlock().getLocation().add(0, 1, 0);
          }
        else
          {
            origin = sorcerer.getPlayer().getLocation();
          }
        int radius = 5;
        final World world = origin.getWorld();
        final int blockX = origin.getBlockX();
        final int blockY = origin.getBlockY();
        final int blockZ = origin.getBlockZ();
        int iter = 0;
        int x = radius, z = 0;
        int radiusError = 1 - x;
        while (x >= z)
          {
            final int finalX = x, finalZ = z;
            Merlin.getInstance().getServer().getScheduler()
                .scheduleSyncDelayedTask(Merlin.getInstance(), new Runnable()
                  {
                    public void run ()
                      {
                        setFires(world, blockX, blockY, blockZ, finalX, finalZ);
                      }
                  }, iter);
            z++;
            if (radiusError < 0)
              {
                radiusError += 2 * z + 1;
              }
            else
              {
                x--;
                radiusError += 2 * (z - x) + 1;
              }
            iter += 3;
          }
        return true;
      }