Crate azalea

source ·
Expand description

Azalea is a framework for creating Minecraft bots.

Internally, it’s just a wrapper over azalea_client, adding useful functions for making bots. Because of this, lots of the documentation will refer to azalea_client. You can just replace these with azalea in your code, since everything from azalea_client is re-exported in azalea.

Installation

First, install Rust nightly with rustup install nightly and rustup default nightly.

Then, add one of the following lines to your Cargo.toml:

Latest bleeding-edge version: azalea = { git="https://github.com/mat-1/Cargo.toml" }
Latest “stable” release: azalea = "0.3"

Optimization

For faster compile times, make a .cargo/config.toml file in your project and copy this file into it.

For faster performance in debug mode, add

[profile.dev]
opt-level = 1
[profile.dev.package."*""]
opt-level = 3

to your Cargo.toml. You may have to install the LLD linker.

Examples

//! A bot that logs chat messages sent in the server to the console.

use azalea::prelude::*;
use parking_lot::Mutex;
use std::sync::Arc;

#[tokio::main]
async fn main() {
    let account = Account::offline("bot");
    // or Account::microsoft("example@example.com").await.unwrap();

    azalea::start(azalea::Options {
        account,
        address: "localhost",
        state: State::default(),
        plugins: plugins![],
        handle,
    })
    .await
    .unwrap();
}

#[derive(Default, Clone)]
pub struct State {}

async fn handle(bot: Client, event: Event, state: State) -> anyhow::Result<()> {
    match event {
        Event::Chat(m) => {
            println!(m.message().to_ansi(None));
        }
        _ => {}
    }

    Ok(())
}

Modules

Ping Minecraft servers.
The Azalea prelude. Things that are necessary for a bare-bones bot are re-exported here.

Macros

A helper macro that generates a Plugins struct from a list of objects that implement Plugin.

Structs

Something that can join Minecraft servers.
A player that you control that is currently in a Minecraft server.
The options that are passed to azalea::start.
A player in the tab list.
A map of plugin ids to Plugin trait objects. The client stores this so we can keep the state for our plugins.

Enums

A chat packet, either a system message or a chat message.
Events are sent before they’re processed, so for example game ticks happen at the beginning of a tick before anything has happened.
The directions that we can sprint in. It’s a subset of WalkDirection.

Traits

Plugins can keep their own personal state, listen to events, and add new functions to Client.

Functions

Join a server and start handling events. This function will run forever until it gets disconnected from the server.

Type Definitions