From 520398a3318ea655c31077c73b77005b173a86db Mon Sep 17 00:00:00 2001 From: Andrew Brower Date: Wed, 6 Nov 2024 04:55:32 -0500 Subject: [PATCH] fix(net): use positive number for previous gamemode (wiki incorrect?) --- src/net/mod.rs | 6 +----- src/net/player.rs | 4 ++-- src/protocol/datatypes/position.rs | 3 +-- src/protocol/encoder.rs | 8 ++++++++ src/protocol/packets/login/registry/dimension.rs | 2 +- src/protocol/packets/login/registry/mod.rs | 10 +++++----- src/protocol/packets/play/login.rs | 13 ++++++++++++- src/server/mod.rs | 13 +++---------- src/server/ticker.rs | 1 - src/state.rs | 2 +- 10 files changed, 34 insertions(+), 28 deletions(-) diff --git a/src/net/mod.rs b/src/net/mod.rs index 0dc61d3..607494c 100644 --- a/src/net/mod.rs +++ b/src/net/mod.rs @@ -17,14 +17,10 @@ * . */ -use std::time::Duration; use color_eyre::eyre::Result; use player::SharedPlayer; -use tokio::{ - net::{TcpListener, UdpSocket}, - time, -}; +use tokio::net::TcpListener; mod io; pub mod player; diff --git a/src/net/player.rs b/src/net/player.rs index 4314654..620d42e 100644 --- a/src/net/player.rs +++ b/src/net/player.rs @@ -248,11 +248,11 @@ impl SharedPlayer { reduced_debug_info: !cfg!(debug_assertions), enable_respawn_screen: false, do_limited_crafting: false, - dimension_type: VarInt(0), + dimension_type: VarInt(2), dimension_name: Bounded::<&'static str>("minecraft:the_end"), hashed_seed: 0, gamemode: Gamemode::Adventure, - previous_gamemode: None, + previous_gamemode: Some(Gamemode::Adventure), is_debug: false, is_superflat: false, death_location: None, diff --git a/src/protocol/datatypes/position.rs b/src/protocol/datatypes/position.rs index 63331fa..0f7825a 100644 --- a/src/protocol/datatypes/position.rs +++ b/src/protocol/datatypes/position.rs @@ -17,11 +17,10 @@ * . */ -use std::error::Error; use bitfield_struct::bitfield; use byteorder::{BigEndian, WriteBytesExt}; -use color_eyre::eyre::{bail, Result}; +use color_eyre::eyre::Result; use thiserror::Error; use crate::protocol::Encode; diff --git a/src/protocol/encoder.rs b/src/protocol/encoder.rs index 74b1b0e..862546e 100644 --- a/src/protocol/encoder.rs +++ b/src/protocol/encoder.rs @@ -70,6 +70,14 @@ impl Encoder { { let initial_len = self.buf.len(); packet.encode_packet((&mut self.buf).writer())?; + trace!( + "after appending: {:#?}", + (&self.buf as &[u8]) + .iter() + .map(|a| a.to_string()) + .collect::>() + .join(" ") + ); let packet_size = self.buf.len() - initial_len; diff --git a/src/protocol/packets/login/registry/dimension.rs b/src/protocol/packets/login/registry/dimension.rs index b91d2f0..1975a52 100644 --- a/src/protocol/packets/login/registry/dimension.rs +++ b/src/protocol/packets/login/registry/dimension.rs @@ -19,7 +19,7 @@ use serde::{Deserialize, Serialize}; -use super::{deserialize_bool, RegistryItem}; +use super::RegistryItem; #[derive(Clone, Debug, Serialize, Deserialize)] pub struct DimensionType { diff --git a/src/protocol/packets/login/registry/mod.rs b/src/protocol/packets/login/registry/mod.rs index 13337b8..edd69ef 100644 --- a/src/protocol/packets/login/registry/mod.rs +++ b/src/protocol/packets/login/registry/mod.rs @@ -42,6 +42,11 @@ pub use painting::*; pub use trim::*; pub use wolf::*; +pub static ALL_REGISTRIES: LazyLock = LazyLock::new(|| { + serde_json::from_str(include_str!("../../../../../assets/registries.json")) + .expect("registries.json should be parseable") +}); + #[derive(Clone, Debug, Serialize, Deserialize)] pub struct Registry { registry_id: String, @@ -139,11 +144,6 @@ enum StringOrCompound { Compound(T), } -pub static ALL_REGISTRIES: LazyLock = LazyLock::new(|| { - serde_json::from_str(include_str!("../../../../../assets/registries.json")) - .expect("registries.json should be parseable") -}); - fn deserialize_bool<'de, D>(deserializer: D) -> Result where D: de::Deserializer<'de>, diff --git a/src/protocol/packets/play/login.rs b/src/protocol/packets/play/login.rs index 7b341fc..92e544a 100644 --- a/src/protocol/packets/play/login.rs +++ b/src/protocol/packets/play/login.rs @@ -74,6 +74,17 @@ impl From for u8 { } } +impl From for i8 { + fn from(value: Gamemode) -> Self { + match value { + Gamemode::Survival => 0, + Gamemode::Creative => 1, + Gamemode::Adventure => 2, + Gamemode::Spectator => 3, + } + } +} + #[derive(Debug)] pub struct DeathLocation<'a> { dimension_name: Bounded<&'a str>, @@ -103,7 +114,7 @@ impl<'a> Encode for LoginPlayC<'a> { match self.previous_gamemode { None => (-1).encode(&mut w)?, - Some(g) => u8::from(g).encode(&mut w)?, + Some(g) => i8::from(g).encode(&mut w)?, } self.is_debug.encode(&mut w)?; diff --git a/src/server/mod.rs b/src/server/mod.rs index a77193d..9c94243 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -25,10 +25,7 @@ use std::sync::Arc; use world::World; -use crate::{ - net::player::{Player, SharedPlayer}, - CrawlState, -}; +use crate::{net::player::SharedPlayer, CrawlState}; use self::ticker::Ticker; @@ -36,7 +33,7 @@ use self::ticker::Ticker; pub struct Server { pub ticker: Ticker, - _world: Option>, + world: Option>, players: Vec, crawlstate: CrawlState, @@ -47,7 +44,7 @@ impl Server { pub fn new(state: CrawlState, tick_rate: u8) -> Self { Server { ticker: Ticker::new(tick_rate), - _world: None, + world: None, players: Vec::new(), crawlstate: state, } @@ -61,9 +58,5 @@ impl Server { while let Ok(p) = player_recv.try_recv() { self.players.push(p); } - - self.players - .iter() - .for_each(|p| trace!("Ticking {}", p.id())); } } diff --git a/src/server/ticker.rs b/src/server/ticker.rs index 61b1fd6..cd0ca5a 100644 --- a/src/server/ticker.rs +++ b/src/server/ticker.rs @@ -47,7 +47,6 @@ impl Ticker { } self.last_tick = now; - trace!("{}ms elapsed, ticking full server", elapsed.as_millis(),); server.tick().await; } } diff --git a/src/state.rs b/src/state.rs index 3111ce8..0ffdd03 100644 --- a/src/state.rs +++ b/src/state.rs @@ -21,7 +21,7 @@ use std::sync::{atomic::AtomicUsize, Arc}; use tokio::sync::{mpsc, Mutex, Semaphore}; -use crate::net::player::{Player, SharedPlayer}; +use crate::net::player::SharedPlayer; #[derive(Debug)] pub struct State { -- 2.51.2