@Override
	public boolean valid() {
		if (ctx.players.local().animation() == -1 && (!ctx.players.local().inMotion() || ctx.movement.distance(ctx.players.local(), ctx.movement.destination()) < 4)) {
			if (npc().valid()) {
				return true;
			}

			final GameObject rock = rock(TIN_FILTER);
			if (rock.valid()) {
				LogicailArea area = new LogicailArea(rock.tile().derive(-1, -1), rock.tile().derive(1, 1));
				Set<Tile> tiles = area.getReachable(ctx);
				return !tiles.isEmpty();
			}
		}
		return false;
	}