From 2220a4b31440b78e0d85dc74c1a65b5cef33c483 Mon Sep 17 00:00:00 2001 From: GIKExe <72767917+GIKExe@users.noreply.github.com> Date: Sat, 3 May 2025 22:11:28 +0300 Subject: [PATCH] ? --- src/server/protocol/play.rs | 61 ++++++++++++++++++++++++++++++++++--- 1 file changed, 57 insertions(+), 4 deletions(-) diff --git a/src/server/protocol/play.rs b/src/server/protocol/play.rs index 40e2f3a..61947f4 100644 --- a/src/server/protocol/play.rs +++ b/src/server/protocol/play.rs @@ -1,18 +1,71 @@ -use std::sync::Arc; +use std::{collections::HashMap, sync::Arc}; +use craftflow_nbt::DynNBT; use rust_mc_proto::{DataWriter, Packet}; +use serde_json::json; use crate::server::{ - ServerError, player::context::ClientContext, + data::ReadWriteNBT, player::context::ClientContext, ServerError }; -use super::id::clientbound; +use super::id::{clientbound::{self, configuration::REGISTRY_DATA}, serverbound}; pub fn handle_configuration_state( client: Arc, // Контекст клиента ) -> Result<(), ServerError> { + + let mut p = Packet::empty(clientbound::configuration::KNOWN_PACKS); + p.write_varint(1)?; + p.write_string("minecraft")?; + p.write_string("core")?; + p.write_string("1.21.5")?; + client.write_packet(&p)?; + client.read_packet(serverbound::configuration::KNOWN_PACKS)?; + + let mut data = Vec::new(); + craftflow_nbt::to_writer(&mut data, &json!( + { + "ambient_light": 0.0, + "bed_works": 1, + "coordinate_scale": 1.0, + "effects": "minecraft:overworld", + "has_ceiling": 0, + "has_raids": 1, + "has_skylight": 1, + "height": 384, + "infiniburn": "#minecraft:infiniburn_overworld", + "logical_height": 384, + "min_y": -64, + "monster_spawn_block_light_limit": 0, + "monster_spawn_light_level": { + "max_inclusive": 7, + "min_inclusive": 0, + "type": "minecraft:uniform" + }, + "natural": 1, + "piglin_safe": 0, + "respawn_anchor_works": 0, + "ultrawarm": 0 + } + )).unwrap(); + + let mut p = Packet::empty(clientbound::configuration::REGISTRY_DATA); + p.write_string("minecraft:dimension_type")?; + p.write_varint(1)?; + p.write_string("minecraft:overworld")?; + p.write_boolean(true)?; + // p.write_nbt(&DynNBT::Compound(HashMap::from_iter([ + // ("bed_works".to_string(), DynNBT::Byte(1)), + // ("has_skylight".to_string(), DynNBT::Byte(1)), + // ("natural".to_string(), DynNBT::Byte(1)), + // ("coordinate_scale".to_string(), DynNBT::Double(1.0)), + // ("effects".to_string(), DynNBT::String("minecraft:overworld".to_string())), + // ])))?; + p.write_bytes(&data)?; + client.write_packet(&p)?; + Ok(()) -} +} // Отдельная функция для работы с самой игрой pub fn handle_play_state(