Changed Vec3 to TileVec3 and added a Vec3 using f32 type, added ::from() and ::from_vector() to both of them, added get_player_pos() and set_player_pos()
This commit is contained in:
parent
d0f9743ad3
commit
2dad32ba4a
77
src/lib.rs
77
src/lib.rs
|
@ -5,13 +5,16 @@ use std::cmp::{min, max};
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use crate::{create};
|
use crate::{create, Vec3};
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn it_works() {
|
fn development_tests() {
|
||||||
assert_eq!(2 + 2, 4);
|
assert_eq!(2 + 2, 4);
|
||||||
|
let pos1 = Vec3::from(-31.0, 7.0, -11.0);
|
||||||
let mut mc = create("localhost:4711");
|
let mut mc = create("localhost:4711");
|
||||||
mc.post_to_chat("Hello World!");
|
mc.post_to_chat("Hello World!");
|
||||||
|
println!("{:?}",mc.get_player_pos());
|
||||||
|
mc.set_player_pos(pos1)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -23,13 +26,56 @@ struct Connection {
|
||||||
stream:TcpStream
|
stream:TcpStream
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone, Copy)]
|
#[derive(Clone, Copy, Debug)]
|
||||||
pub struct Vec3 {
|
pub struct TileVec3 {
|
||||||
pub x:i32,
|
pub x:i32,
|
||||||
pub y:i32,
|
pub y:i32,
|
||||||
pub z:i32
|
pub z:i32
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Clone, Copy, Debug)]
|
||||||
|
pub struct Vec3 {
|
||||||
|
pub x:f32,
|
||||||
|
pub y:f32,
|
||||||
|
pub z:f32
|
||||||
|
}
|
||||||
|
|
||||||
|
impl TileVec3 {
|
||||||
|
pub fn from(x:i32, y:i32, z:i32) -> TileVec3 {
|
||||||
|
TileVec3 {
|
||||||
|
x,
|
||||||
|
y,
|
||||||
|
z
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn from_vector(vec:&Vec<i32>) -> TileVec3 {
|
||||||
|
TileVec3 {
|
||||||
|
x: vec[0],
|
||||||
|
y: vec[1],
|
||||||
|
z: vec[2]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Vec3 {
|
||||||
|
pub fn from(x:f32, y:f32, z:f32) -> Vec3 {
|
||||||
|
Vec3 {
|
||||||
|
x,
|
||||||
|
y,
|
||||||
|
z
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn from_vector(vec:&Vec<f32>) -> Vec3 {
|
||||||
|
Vec3{
|
||||||
|
x: vec[0],
|
||||||
|
y: vec[1],
|
||||||
|
z: vec[2]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl Connection {
|
impl Connection {
|
||||||
pub fn send(&mut self, msg:&str) {
|
pub fn send(&mut self, msg:&str) {
|
||||||
self.stream.write(&format!("{}\n", msg).as_bytes()).expect("Failed to send! Is MCPI still running?");
|
self.stream.write(&format!("{}\n", msg).as_bytes()).expect("Failed to send! Is MCPI still running?");
|
||||||
|
@ -53,15 +99,15 @@ impl Minecraft {
|
||||||
self.conn.send(&format!("chat.post({})", msg));
|
self.conn.send(&format!("chat.post({})", msg));
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_block(&mut self, pos:Vec3) -> u8 {
|
pub fn get_block(&mut self, pos:TileVec3) -> u8 {
|
||||||
self.conn.send_receive(&format!("world.getBlock({},{},{})", pos.x, pos.y, pos.z)).parse::<u8>().unwrap()
|
self.conn.send_receive(&format!("world.getBlock({},{},{})", pos.x, pos.y, pos.z)).parse::<u8>().unwrap()
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_block_with_data(&mut self, pos:Vec3) -> Vec<u8> {
|
pub fn get_block_with_data(&mut self, pos:TileVec3) -> Vec<u8> {
|
||||||
self.conn.send_receive(&format!("world.getBlockWithData({},{},{})", pos.x, pos.y, pos.z)).split(',').map(|s| s.parse()).collect::<Result<Vec<u8>, _>>().unwrap()
|
self.conn.send_receive(&format!("world.getBlockWithData({},{},{})", pos.x, pos.y, pos.z)).split(',').map(|s| s.parse()).collect::<Result<Vec<u8>, _>>().unwrap()
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_blocks(&mut self, pos1:Vec3, pos2:Vec3) -> Vec<u8> {
|
pub fn get_blocks(&mut self, pos1:TileVec3, pos2:TileVec3) -> Vec<u8> {
|
||||||
let mut results:Vec<u8> = vec![];
|
let mut results:Vec<u8> = vec![];
|
||||||
for y in min(pos1.y, pos2.y)..max(pos1.y, pos2.y)+1 {
|
for y in min(pos1.y, pos2.y)..max(pos1.y, pos2.y)+1 {
|
||||||
for x in min(pos1.x, pos2.x)..max(pos1.x, pos2.x)+1 {
|
for x in min(pos1.x, pos2.x)..max(pos1.x, pos2.x)+1 {
|
||||||
|
@ -73,7 +119,7 @@ impl Minecraft {
|
||||||
results
|
results
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_blocks_with_data(&mut self, pos1:Vec3, pos2:Vec3) -> Vec<Vec<u8>> {
|
pub fn get_blocks_with_data(&mut self, pos1:TileVec3, pos2:TileVec3) -> Vec<Vec<u8>> {
|
||||||
let mut results:Vec<Vec<u8>> = vec![];
|
let mut results:Vec<Vec<u8>> = vec![];
|
||||||
for y in min(pos1.y, pos2.y)..max(pos1.y, pos2.y)+1 {
|
for y in min(pos1.y, pos2.y)..max(pos1.y, pos2.y)+1 {
|
||||||
for x in min(pos1.x, pos2.x)..max(pos1.x, pos2.x)+1 {
|
for x in min(pos1.x, pos2.x)..max(pos1.x, pos2.x)+1 {
|
||||||
|
@ -85,15 +131,15 @@ impl Minecraft {
|
||||||
results
|
results
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn set_block(&mut self, pos:Vec3, blocktype:u8, blockdata:u8) {
|
pub fn set_block(&mut self, pos:TileVec3, blocktype:u8, blockdata:u8) {
|
||||||
self.conn.send(&format!("world.setBlock({},{},{},{},{})", pos.x, pos.y, pos.z, blocktype, blockdata));
|
self.conn.send(&format!("world.setBlock({},{},{},{},{})", pos.x, pos.y, pos.z, blocktype, blockdata));
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn set_blocks(&mut self, pos1:Vec3, pos2:Vec3, blocktype:u8, blockdata:u8) {
|
pub fn set_blocks(&mut self, pos1:TileVec3, pos2:TileVec3, blocktype:u8, blockdata:u8) {
|
||||||
self.conn.send(&format!("world.setBlocks({},{},{},{},{},{},{},{})", pos1.x,pos1.y,pos1.z,pos2.x,pos2.y,pos2.z,blocktype,blockdata));
|
self.conn.send(&format!("world.setBlocks({},{},{},{},{},{},{},{})", pos1.x,pos1.y,pos1.z,pos2.x,pos2.y,pos2.z,blocktype,blockdata));
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_height(&mut self, pos:Vec3) -> i8 {
|
pub fn get_height(&mut self, pos:TileVec3) -> i8 {
|
||||||
self.conn.send_receive(&format!("world.getHeight({},{})", pos.x,pos.z)).parse::<i8>().unwrap()
|
self.conn.send_receive(&format!("world.getHeight({},{})", pos.x,pos.z)).parse::<i8>().unwrap()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -112,6 +158,15 @@ impl Minecraft {
|
||||||
pub fn get_player_entity_ids(&mut self) -> Vec<u16> {
|
pub fn get_player_entity_ids(&mut self) -> Vec<u16> {
|
||||||
self.conn.send_receive(&format!("world.getPlayerIds()")).split("|").map(|s| s.parse()).collect::<Result<Vec<u16>, _>>().unwrap()
|
self.conn.send_receive(&format!("world.getPlayerIds()")).split("|").map(|s| s.parse()).collect::<Result<Vec<u16>, _>>().unwrap()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn get_player_pos(&mut self) -> Vec3 {
|
||||||
|
let vec:Vec<f32> = self.conn.send_receive(&format!("player.getPos()")).split(',').map(|s| s.parse()).collect::<Result<Vec<f32>, _>>().unwrap();
|
||||||
|
Vec3::from_vector(&vec)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn set_player_pos(&mut self, pos:Vec3) {
|
||||||
|
self.conn.send(&format!("player.setPos({},{},{})", pos.x, pos.y, pos.z));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn create(adress:&str) -> Minecraft {
|
pub fn create(adress:&str) -> Minecraft {
|
||||||
|
|
Loading…
Reference in a new issue