From 100b8791cfdf0e760f75c42e9ff7aa178c8c4146 Mon Sep 17 00:00:00 2001 From: Alexander Medvedev Date: Sun, 24 May 2026 17:36:27 +0200 Subject: [PATCH] fix: revert bedrock buffer read --- pumpkin/src/lib.rs | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/pumpkin/src/lib.rs b/pumpkin/src/lib.rs index eb37c490f..8d7ad77cb 100644 --- a/pumpkin/src/lib.rs +++ b/pumpkin/src/lib.rs @@ -9,7 +9,6 @@ use crate::net::java::{JavaClient, PacketHandlerResult}; use crate::net::{ClientPlatform, DisconnectReason}; use crate::net::{lan_broadcast::LANBroadcast, query, rcon::RCONServer}; use crate::server::{Server, ticker::Ticker}; -use bytes::BytesMut; use plugin::server::server_command::ServerCommandEvent; use pumpkin_config::{AdvancedConfiguration, BasicConfiguration}; use pumpkin_macros::send_cancellable; @@ -19,7 +18,7 @@ use rustyline::Editor; use rustyline::history::FileHistory; use rustyline::{Config, error::ReadlineError}; use std::collections::HashMap; -use std::io::{ErrorKind, IsTerminal, stdin}; +use std::io::{Cursor, ErrorKind, IsTerminal, stdin}; use std::process::exit; use std::str::FromStr; use std::sync::atomic::{AtomicBool, AtomicI32, Ordering}; @@ -425,7 +424,7 @@ impl PumpkinServer { tasks: &Arc, bedrock_clients: &Arc>>>, ) -> bool { - let mut udp_buf = BytesMut::with_capacity(1496); + let mut udp_buf = [0; 1496]; // Buffer for UDP receive select! { // Branch for TCP connections (Java Edition) @@ -491,10 +490,7 @@ impl PumpkinServer { }, // Branch for UDP packets (Bedrock Edition) - udp_result = resolve_some(self.udp_socket.as_ref(), |sock: &Arc| { - unsafe { udp_buf.set_len(1496) }; - sock.recv_from(&mut udp_buf[..]) - }) => { + udp_result = resolve_some(self.udp_socket.as_ref(), |sock: &Arc| sock.recv_from(&mut udp_buf)) => { match udp_result { Ok((len, client_addr)) => { if len > 0 { @@ -518,20 +514,25 @@ impl PumpkinServer { new_client }).clone(); - let packet_bytes = udp_buf.split_to(len).freeze(); - udp_buf.clear(); + let packet_bytes = udp_buf[..len].to_vec(); let server = self.server.clone(); tasks.spawn(async move { - client.process_packet(&server, packet_bytes).await; + client.process_packet(&server, packet_bytes.into()).await; }); + } else if let Some(sock) = self.udp_socket.as_ref() { + let _ = BedrockClient::handle_offline_packet( + &self.server, + id, + &mut Cursor::new(&udp_buf[1..len]), + client_addr, + sock + ).await; } } } - Err(e) => { - error!("Failed to receive UDP packet: {e}"); - } - } + Err(e) => error!("UDP socket error: {e}"), + } }, // Branch for the global stop signal