Skip to content

Алғашқы Rust модыңыз ​

Rust модтары WebAssembly компонентіне құрастырылады. Олар Lua модтары сияқты құмсалғышта жұмыс істейді және Lua модтарын шақыра алады, керісінше де.

Серверлер WASM модтарын іске қосады

Blockheads Server әзірлеу құрастырмаларында Lua модтарымен қатар WASM модтарын да іске қосады. Олар мод жүйесінің қалған бөлігімен бірге шығарылымда шығады.

1. Дайындық ​

sh
cargo install --git https://github.com/Blockheads-Club/mod-sdk bhmod
rustup target add wasm32-wasip2

2. Жасаңыз және құрастырыңыз ​

sh
bhmod new my-mod --lang rust
cd my-mod
./build.sh          # cargo build --target wasm32-wasip2, содан кейін server/mod.wasm көшіреді
bhmod check .
bhmod pack .        # my-mod-0.1.0.bhmod

.bhmod ішіне тек mod.toml, LICENSE және пакет қалталары кіреді; src/, Cargo.toml және target/ кірмейді.

3. Код ​

Байланыстар API-дің WIT файлдарынан wit-bindgen арқылы жасалады. Мод guest интерфейсін іске асырады:

rust
wit_bindgen::generate!({ path: "bindings/blockheads-api", world: "server-mod" }); // bhmod new WIT файлдарын осында көшіреді

use blockheads::api::events::{self, Event, EventKind, Outcome};
use blockheads::api::types::Priority;
use exports::blockheads::api::guest::Guest;

struct MyMod;

impl Guest for MyMod {
    fn on_enable() -> Result<(), String> {
        events::subscribe(EventKind::PlayerJoin, Priority::Normal, false).map_err(|e| format!("{e:?}"))?;
        Ok(())
    }

    fn handle_event(_sub: u32, ev: Event) -> Outcome {
        if let Event::PlayerJoin(join) = ev {
            let _ = join.player.send_chat(&format!("Welcome, {}!", join.player.alias()));
        }
        Outcome { cancelled: false, mutation: None }
    }

    // on_disable, run_command, run_task, call_service, on_channel_message: үлгіні қараңыз.
}

export!(MyMod);

Lua функцияларды береді (bh.events.on(kind, fn)); Rust әр оқиғаны handle_event арқылы, әр пәрменді run_command арқылы алады, оларды subscribe немесе register қайтарған id арқылы ажыратады. Барлық функциялар: API анықтамасы, guest.

Мысалдар ​

Ресми емес қауымдастық жобасы. Majic Jungle Software немесе Noodlecake компанияларымен байланысы жоқ. Ойын файлдары қамтылмаған.