]> Witch of Git - minecraft-eda/blob - mc-mask/src/main.rs
Generate the libery with a script
[minecraft-eda] / mc-mask / src / main.rs
1 use rcon::{self, Connection};
2 use regex::Regex;
3 use std::error::Error;
4
5 fn block_below_player(conn: &mut Connection, user: &str)
6 -> Result<(i32, i32, i32), Box<dyn Error>>
7 {
8 let cmd = format!("execute at {user} run tp {user} ~ ~ ~", user=user);
9 let text = conn.cmd(&cmd)?;
10 let re = Regex::new(r"Teleported .* to (.*), (.*), (.*)").unwrap();
11 if let Some(cap) = re.captures(&text) {
12 let x = (cap[1].parse::<f32>()? + 0.0) as i32;
13 let y = (cap[2].parse::<f32>()? - 1.0) as i32;
14 let z = (cap[3].parse::<f32>()? - 1.0) as i32;
15 Ok((x, y, z))
16 } else {
17 Err(text)?
18 }
19 }
20
21 fn main() -> Result<(), Box<dyn Error>> {
22 if std::env::args().len() != 4 {
23 println!(
24 "Usage: {} <server> <rcon-password> <user>",
25 std::env::args().nth(0).unwrap(),
26 );
27 return Ok(());
28 }
29 let addr = std::env::args().nth(1).unwrap();
30 let password = std::env::args().nth(2).unwrap();
31 let user = std::env::args().nth(3).unwrap();
32 let mut conn = Connection::connect(&addr, &password)?;
33 let (x, y, z) = block_below_player(&mut conn, &user)?;
34 let cmd = format!("setblock {} {} {} gold_block", x, y, z);
35 conn.cmd(&cmd)?;
36 Ok(())
37 }