61 lines
1.6 KiB
Rust
61 lines
1.6 KiB
Rust
#[macro_use]
|
|
extern crate minecraft_protocol_derive;
|
|
|
|
use minecraft_protocol::decoder::Decoder;
|
|
use minecraft_protocol::encoder::Encoder;
|
|
use minecraft_protocol::error::{DecodeError, EncodeError};
|
|
|
|
#[derive(Packet)]
|
|
pub struct Abilities {
|
|
#[packet(bitfield(size = 4))]
|
|
pub _unused: u8,
|
|
#[packet(bitfield(size = 1))]
|
|
pub creative_mode: bool,
|
|
#[packet(bitfield(size = 1))]
|
|
pub allow_flying: bool,
|
|
#[packet(bitfield(size = 1))]
|
|
pub flying: bool,
|
|
#[packet(bitfield(size = 1))]
|
|
pub invulnerable: bool,
|
|
}
|
|
|
|
#[cfg(test)]
|
|
mod tests {
|
|
use crate::Abilities;
|
|
use minecraft_protocol::decoder::Decoder;
|
|
use minecraft_protocol::encoder::Encoder;
|
|
use minecraft_protocol::error::{DecodeError, EncodeError};
|
|
use std::io::Cursor;
|
|
|
|
#[test]
|
|
fn test_encode_abilities_i8_bitfield() {
|
|
let abilities = Abilities {
|
|
_unused: 0,
|
|
creative_mode: true,
|
|
allow_flying: true,
|
|
flying: true,
|
|
invulnerable: true,
|
|
};
|
|
let mut vec = Vec::new();
|
|
|
|
abilities
|
|
.encode(&mut vec)
|
|
.expect("Failed to encode abilities");
|
|
assert_eq!(vec, [15]);
|
|
}
|
|
|
|
#[test]
|
|
fn test_decode_abilities_i8_bitfield() {
|
|
let value = 15i8;
|
|
|
|
let vec = value.to_be_bytes().to_vec();
|
|
let mut cursor = Cursor::new(vec);
|
|
|
|
let abilities = Abilities::decode(&mut cursor).expect("Failed to decode abilities");
|
|
assert!(abilities.invulnerable);
|
|
assert!(abilities.flying);
|
|
assert!(abilities.allow_flying);
|
|
assert!(abilities.creative_mode);
|
|
}
|
|
}
|