#minecraft #utilities #lua-script #script-file #content

computercraft_websocket_control

一个旨在通过 WebSocket 控制 Computer Craft 计算机的 crate

2 个版本

0.1.1 2023 年 10 月 27 日
0.1.0 2023 年 10 月 27 日

#185WebSocket

MIT/Apache

51KB
1K SLoC

描述

一个旨在通过 WebSocket 控制 Computer Craft 计算机的 crate

用法

使用 utils::save_lua_scripts 函数可以将客户端 Lua 脚本保存到特定文件

解压缩文件并将内容放置到 Computer Craft 计算机的脚本文件夹中。

编写 Rust 代码

在 Computer Craft 计算机的终端上运行脚本

示例

视频

更多示例 这里

服务器端 Rust 代码

use computercraft_websocket_control::{
    serve_tick_func,
    utils::{AsIfPixel, LocalMonitor},
    ColorId, Errors, Ports, Side, ToErrorsResult,
};
use std::time::Duration;
fn main() {
    serve_tick_func(
        &([127, 0, 0, 1], 14111).into(),
        tick,
        LocalMonitor::new(0, 0, AsIfPixel::colored_whitespace(ColorId::Orange)),
    );
}

async fn tick(state: &mut LocalMonitor, mut ports: Ports<'_>, _dt: Duration) -> Result<(), Errors> {
    let mut p1 = ports.get_port("p1").to_errors_result()?;
    state.sync(Side::Top, &mut p1).await?;

    let (size_x, size_y) = p1.monitor_get_size(Side::Top).await?.to_errors_result()?;
    if state.size() != (size_x, size_y) {
        let pixel = AsIfPixel::new(' ', ColorId::Lime, ColorId::Orange).unwrap();
        state.resize(size_x, size_y, pixel);
    }

    let y = (size_y + 1) / 2;
    for x in 1..size_x + 1 {
        let c1 = ColorId::from_number_overflow(rand::random());
        let c2 = ColorId::from_number_overflow(rand::random());
        let text = char::from_u32(rand::random::<u32>() % 26 + 65).unwrap();

        state.write(x, y, AsIfPixel::new(text, c1, c2).unwrap());
    }

    Ok(())
}

并在 Computer Craft 计算机的壳中运行此代码

ws_control p1 14111

依赖项

~8–15MB
~189K SLoC