From a069ffe9827dc554cbb749f5e7d88c2d36906c3d Mon Sep 17 00:00:00 2001 From: mat Date: Sat, 16 Dec 2023 14:29:49 -0600 Subject: fix non-u8 gamemodes love you wynncraft --- azalea-core/src/game_type.rs | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) (limited to 'azalea-core/src') diff --git a/azalea-core/src/game_type.rs b/azalea-core/src/game_type.rs index 118fdbb9..99f0c0fe 100644 --- a/azalea-core/src/game_type.rs +++ b/azalea-core/src/game_type.rs @@ -1,5 +1,6 @@ -use azalea_buf::{BufReadError, McBufReadable, McBufWritable}; +use azalea_buf::{BufReadError, McBufReadable, McBufVarReadable, McBufWritable}; use std::io::{Cursor, Write}; +use tracing::warn; /// A Minecraft gamemode, like survival or creative. #[derive(Hash, Copy, Clone, Debug, Default, Eq, PartialEq)] @@ -93,8 +94,15 @@ impl GameMode { impl McBufReadable for GameMode { fn read_from(buf: &mut Cursor<&[u8]>) -> Result { - let id = u8::read_from(buf)?; - Ok(GameMode::from_id(id).unwrap_or_default()) + let id = u32::var_read_from(buf)?; + let id = id.try_into().unwrap_or_else(|_| { + warn!("Unknown game mode id {id}, defaulting to survival"); + 0 + }); + Ok(GameMode::from_id(id).unwrap_or_else(|| { + warn!("Unknown game mode id {id}, defaulting to survival"); + GameMode::Survival + })) } } -- cgit v1.2.3