aboutsummaryrefslogtreecommitdiff
path: root/azalea-core/src
diff options
context:
space:
mode:
authormat <git@matdoes.dev>2023-12-16 14:29:49 -0600
committermat <git@matdoes.dev>2023-12-16 14:29:49 -0600
commita069ffe9827dc554cbb749f5e7d88c2d36906c3d (patch)
tree9c6a7b8ecf281a5addba0c6b825f9771c0b17ca9 /azalea-core/src
parent92d33ad0a325b8cb7c78e13a344621e34fb4bd99 (diff)
downloadazalea-drasl-a069ffe9827dc554cbb749f5e7d88c2d36906c3d.tar.xz
fix non-u8 gamemodes
love you wynncraft
Diffstat (limited to 'azalea-core/src')
-rw-r--r--azalea-core/src/game_type.rs14
1 files changed, 11 insertions, 3 deletions
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<Self, BufReadError> {
- 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
+ }))
}
}