private void chop() {
		final GameObject tree = ctx.objects.select().select(ObjectDefinition.name(ctx, "Tree")).nearest().select(new Filter<GameObject>() {
			@Override
			public boolean accept(GameObject o) {
				return o.tile().derive(-1, 0).matrix(ctx).reachable()
						|| o.tile().derive(1, 0).matrix(ctx).reachable()
						|| o.tile().derive(0, 1).matrix(ctx).reachable()
						|| o.tile().derive(0, -1).matrix(ctx).reachable();
			}
		}).limit(3).each(Interactive.doSetBounds(TREE_BOUNDS)).shuffle().poll();
		if (ctx.camera.prepare(tree)) {
			if (tree.interact("Chop down", "Tree")) {
				Condition.wait(new Callable<Boolean>() {
					@Override
					public Boolean call() throws Exception {
						return !tree.valid() || !ctx.inventory.select().id(LOGS).isEmpty();
					}
				}, 333, 10);
			}
		}
	}