1
2
Fork 0
mirror of https://github.com/mat-1/azalea.git synced 2025-08-02 06:16:04 +00:00
azalea/azalea-protocol/src/packets/game/c_map_item_data.rs
mat 08958c2278
Refactor azalea-protocol (#190)
* start updating to 1.21.4

* fix block codegen and stop using block data from burger

* rename packet related modules and structs to be simpler

* ItemSlot -> ItemStack for more consistency with mojmap

* .get() -> .into_packet()

* simplify declare_state_packets by removing packet ids

* rename read_from and write_into to azalea_read and azalea_write

* rename McBufReadable and McBufWritable to AzaleaRead and AzaleaWrite

* McBuf -> AzBuf

* remove most uses of into_variant

* update codegen and use resourcelocation names for packets

* implement #[limit(i)] attribute for AzBuf derive macro

* fixes for 1.21.4

* fix examples

* update some physics code and fix ChatType

* remove unused imports in codegen

* re-add some things to migrate.py and update +mc version numbers automatically

* downgrade to 1.21.3 lol
2024-11-27 19:31:40 -06:00

88 lines
2 KiB
Rust
Executable file

use azalea_buf::{AzBuf, AzaleaRead, AzaleaWrite};
use azalea_chat::FormattedText;
use azalea_protocol_macros::ClientboundGamePacket;
#[derive(Clone, Debug, ClientboundGamePacket, AzBuf)]
pub struct ClientboundMapItemData {
#[var]
pub map_id: u32,
pub scale: u8,
pub locked: bool,
pub decorations: Option<Vec<MapDecoration>>,
pub color_patch: OptionalMapPatch,
}
#[derive(Clone, Debug, AzBuf)]
pub struct MapDecoration {
pub decoration_type: DecorationType,
pub x: i8,
pub y: i8,
/// Minecraft does & 15 on this value, azalea-protocol doesn't. I don't
/// think it matters.
pub rot: i8,
pub name: Option<FormattedText>,
}
#[derive(Debug, Clone)]
pub struct OptionalMapPatch(pub Option<MapPatch>);
impl AzaleaRead for OptionalMapPatch {
fn azalea_read(buf: &mut std::io::Cursor<&[u8]>) -> Result<Self, azalea_buf::BufReadError> {
let pos = buf.position();
Ok(Self(if u8::azalea_read(buf)? == 0 {
None
} else {
buf.set_position(pos);
Some(MapPatch::azalea_read(buf)?)
}))
}
}
impl AzaleaWrite for OptionalMapPatch {
fn azalea_write(&self, buf: &mut impl std::io::Write) -> Result<(), std::io::Error> {
match &self.0 {
None => 0u8.azalea_write(buf),
Some(m) => m.azalea_write(buf),
}
}
}
#[derive(Debug, Clone, AzBuf)]
pub struct MapPatch {
pub width: u8,
pub height: u8,
pub start_x: u8,
pub start_y: u8,
pub map_colors: Vec<u8>,
}
#[derive(Clone, Copy, Debug, AzBuf)]
pub enum DecorationType {
Player,
Frame,
RedMarker,
BlueMarker,
TargetX,
TargetPoint,
PlayerOffMap,
PlayerOffLimits,
Mansion,
Monument,
BannerWhite,
BannerOrange,
BannerMagenta,
BannerLightBlue,
BannerYellow,
BannerLime,
BannerPink,
BannerGray,
BannerLightGray,
BannerCyan,
BannerPurple,
BannerBlue,
BannerBrown,
BannerGreen,
BannerRed,
BannerBlack,
RedX,
}