Skip to main content
Glama

fly-to

Navigate to specific coordinates in Minecraft by providing X, Y, and Z values for precise positioning.

Instructions

Make the bot fly to a specific position

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
xYesX coordinate
yYesY coordinate
zYesZ coordinate

Implementation Reference

  • Handler function for the 'fly-to' tool. Uses bot.creative.flyTo to fly to the specified coordinates with timeout and cancellation support.
    async ({ x, y, z }) => {
      const bot = getBot();
    
      if (!bot.creative) {
        return factory.createResponse("Creative mode is not available. Cannot fly.");
      }
    
      const controller = new AbortController();
      const FLIGHT_TIMEOUT_MS = 20000;
    
      const timeoutId = setTimeout(() => {
        if (!controller.signal.aborted) {
          controller.abort();
        }
      }, FLIGHT_TIMEOUT_MS);
    
      try {
        const destination = new Vec3(x, y, z);
        await createCancellableFlightOperation(bot, destination, controller);
        return factory.createResponse(`Successfully flew to position (${x}, ${y}, ${z}).`);
      } catch (error) {
        if (controller.signal.aborted) {
          const currentPosAfterTimeout = bot.entity.position;
          return factory.createErrorResponse(
            `Flight timed out after ${FLIGHT_TIMEOUT_MS / 1000} seconds. The destination may be unreachable. ` +
            `Current position: (${Math.floor(currentPosAfterTimeout.x)}, ${Math.floor(currentPosAfterTimeout.y)}, ${Math.floor(currentPosAfterTimeout.z)})`
          );
        }
        throw error;
      } finally {
        clearTimeout(timeoutId);
        bot.creative.stopFlying();
      }
    }
  • Input schema for 'fly-to' tool using Zod, defining x, y, z coordinates as numbers.
      x: z.number().describe("X coordinate"),
      y: z.number().describe("Y coordinate"),
      z: z.number().describe("Z coordinate")
    },
  • Registers the 'fly-to' tool with the ToolFactory, including name, description, schema, and handler.
    factory.registerTool(
      "fly-to",
      "Make the bot fly to a specific position",
      {
        x: z.number().describe("X coordinate"),
        y: z.number().describe("Y coordinate"),
        z: z.number().describe("Z coordinate")
      },
      async ({ x, y, z }) => {
        const bot = getBot();
    
        if (!bot.creative) {
          return factory.createResponse("Creative mode is not available. Cannot fly.");
        }
    
        const controller = new AbortController();
        const FLIGHT_TIMEOUT_MS = 20000;
    
        const timeoutId = setTimeout(() => {
          if (!controller.signal.aborted) {
            controller.abort();
          }
        }, FLIGHT_TIMEOUT_MS);
    
        try {
          const destination = new Vec3(x, y, z);
          await createCancellableFlightOperation(bot, destination, controller);
          return factory.createResponse(`Successfully flew to position (${x}, ${y}, ${z}).`);
        } catch (error) {
          if (controller.signal.aborted) {
            const currentPosAfterTimeout = bot.entity.position;
            return factory.createErrorResponse(
              `Flight timed out after ${FLIGHT_TIMEOUT_MS / 1000} seconds. The destination may be unreachable. ` +
              `Current position: (${Math.floor(currentPosAfterTimeout.x)}, ${Math.floor(currentPosAfterTimeout.y)}, ${Math.floor(currentPosAfterTimeout.z)})`
            );
          }
          throw error;
        } finally {
          clearTimeout(timeoutId);
          bot.creative.stopFlying();
        }
      }
    );
  • src/main.ts:56-56 (registration)
    Calls registerFlightTools in main to initialize and register all flight tools including 'fly-to'.
    registerFlightTools(factory, getBot);
  • Helper utility that makes the flight operation cancellable via AbortController.
    function createCancellableFlightOperation(
      bot: mineflayer.Bot,
      destination: Vec3,
      controller: AbortController
    ): Promise<boolean> {
      return new Promise((resolve, reject) => {
        let aborted = false;
    
        controller.signal.addEventListener('abort', () => {
          aborted = true;
          bot.creative.stopFlying();
          reject(new Error("Flight operation cancelled"));
        });
    
        bot.creative.flyTo(destination)
          .then(() => {
            if (!aborted) {
              resolve(true);
            }
          })
          .catch((err: Error) => {
            if (!aborted) {
              reject(err);
            }
          });
      });
    }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/yuniko-software/minecraft-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server