fix: revert bedrock buffer read
This commit is contained in:
parent
d9312141f6
commit
100b8791cf
@ -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<TaskTracker>,
|
||||
bedrock_clients: &Arc<Mutex<HashMap<SocketAddr, Arc<BedrockClient>>>>,
|
||||
) -> 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<UdpSocket>| {
|
||||
unsafe { udp_buf.set_len(1496) };
|
||||
sock.recv_from(&mut udp_buf[..])
|
||||
}) => {
|
||||
udp_result = resolve_some(self.udp_socket.as_ref(), |sock: &Arc<UdpSocket>| 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
|
||||
|
||||
Loading…
Reference in New Issue
Block a user