Skip to content

Examples

Event Handler

Respond to chat messages:

import bot

@on("chat_message")
def handle_chat(sender, message, msg_type):
    if message == "!hello":
        bot.chat(f"Hello {sender}!")

Query Bot State

Get bot information:

import bot

pos = bot.position()
health = bot.health()
hunger = bot.hunger()
dim = bot.dimension()

print(f"Position: {pos['x']}, {pos['y']}, {pos['z']}")
print(f"Health: {health}, Hunger: {hunger}")
print(f"Dimension: {dim}")

Control Baritone

Navigate and mine:

import baritone

# Go to coordinates
baritone.goto(100, 64, 200)

# Follow player
baritone.follow("PlayerName")

# Mine blocks
baritone.mine("diamond_ore")

# Cancel task
baritone.cancel()

Control Meteor

Enable modules and configure settings:

import meteor

# Enable module
meteor.enable("auto-totem")

# Configure setting
meteor.set_setting("auto-totem", "health", 10.0)

# Toggle module
meteor.toggle("kill-aura")

# Disable module
meteor.disable("auto-totem")

Logging

Log messages to console:

import utils

utils.log("Script started")
utils.error("Something went wrong")

Combined Example

Full script using multiple features:

import bot
import baritone
import meteor
import utils

# Enable modules on connect
@on("player_state")
def on_connect(state):
    meteor.enable("auto-totem")
    utils.log("auto-totem enabled")

# Handle chat commands
@on("chat_message")
def handle_commands(sender, message, msg_type):
    if message == "!follow":
        baritone.follow(sender)
        bot.chat(f"Following {sender}")

    elif message == "!stop":
        baritone.cancel()
        bot.chat("Stopped")

    elif message == "!status":
        pos = bot.position()
        health = bot.health()
        bot.chat(f"HP: {health} Pos: {pos['x']:.0f}, {pos['y']:.0f}, {pos['z']:.0f}")

# Monitor health
@on("health_change")
def health_monitor(old_health, new_health):
    if new_health < 10:
        baritone.cancel()
        utils.log("Low health!")

Orchestrator and Workers

A global script (Global Scripts tab) that hands out mining tasks and reacts to worker reports, plus a worker script that lives in each bot's Scripts tab. See the comms module for the messaging details.

Worker - miner.py in a bot's Scripts tab:

import bot
import baritone
import comms
import utils

comms.subscribe()  # open the mailbox for addressed sends

while True:
    msg = comms.receive(timeout=5.0)
    if msg is None:
        continue

    cmd = msg["data"]["cmd"]
    if cmd == "mine":
        block = msg["data"]["block"]
        utils.log(f"Mining {block}")
        baritone.mine(block)
    elif cmd == "stop":
        baritone.cancel()

    # Report status back to whoever sent the command
    picks = sum(1 for i in bot.inventory() if "pickaxe" in i["item_id"])
    if picks == 0:
        comms.send(msg["sender_scope"], {"status": "no_pickaxes"}, topic="reports")

Orchestrator - global script:

import bot
import comms
import manager
import utils

def command_bot(name, task):
    # Start the worker script (and the game client) on demand, then send.
    if not bot.is_online(name):
        bot.start(name)
        if not bot.wait_for_online(timeout=120, bot_name=name):
            utils.error(f"{name} failed to come online")
            return
    if comms.send(name, task) == 0:
        manager.run_script("miner.py", name)
        import time
        time.sleep(1)  # let it start and subscribe
        comms.send(name, task)

@on("script_message")
def on_report(msg):
    if msg["data"].get("status") == "no_pickaxes":
        worker = msg["sender_scope"]
        utils.log(f"{worker} is out of pickaxes - sending it to restock")
        comms.send(worker, {"cmd": "stop"})

@on("bot_disconnected")
def on_bot_lost(bot_name, uptime_seconds):
    utils.log(f"{bot_name} disconnected after {uptime_seconds:.0f}s")

command_bot("Miner1", {"cmd": "mine", "block": "diamond_ore"})
command_bot("Miner2", {"cmd": "mine", "block": "iron_ore"})
# The script's body is done, but the @on handlers keep it alive and reacting.