#![allow(
unused_imports,
unused_variables,
unused_mut,
unused_parens,
unused_braces,
clippy::all,
clippy::pedantic,
non_camel_case_types,
non_snake_case
)]
use crate::codec::{Decode, DecodeResult, Encode, EncodeResult, McWrite, Reader, decode_exact};
use crate::error::{DecodeError, EncodeError};
use crate::nbt::RawNbt;
use crate::packet::{Direction, PacketSet, RawPacket, State};
#[cfg(feature = "testgen")]
use crate::testgen::{Gen, Generate};
use crate::types::{BlockPos, ByteString, PositionLayout, Uuid};
use crate::v1_16_5::types;
use bytes::{BufMut, Bytes, BytesMut};
pub mod id {
pub const LOGIN_START: i32 = 0x00;
pub const ENCRYPTION_BEGIN: i32 = 0x01;
pub const LOGIN_PLUGIN_RESPONSE: i32 = 0x02;
}
#[derive(Debug, Clone, PartialEq)]
pub struct LoginStart {
pub username: ByteString,
}
impl crate::packet::Packet for LoginStart {
const ID: i32 = id::LOGIN_START;
const NAME: &'static str = "login_start";
const STATE: State = State::Login;
const DIRECTION: Direction = Direction::Serverbound;
}
impl Decode for LoginStart {
fn decode(r: &mut Reader<'_>) -> DecodeResult<Self> {
Ok({
let v37 = r.read_string()?;
LoginStart { username: v37 }
})
}
}
impl Encode for LoginStart {
fn encode(&self, w: &mut BytesMut) -> EncodeResult {
w.put_string(&(*self).username)?;
Ok(())
}
}
#[cfg(feature = "testgen")]
impl Generate for LoginStart {
fn generate(g: &mut Gen) -> Self {
{
let v38 = g.string();
LoginStart { username: v38 }
}
}
}
impl From<LoginStart> for ServerboundLoginPacket {
fn from(p: LoginStart) -> Self {
Self::LoginStart(p)
}
}
#[derive(Debug, Clone, PartialEq)]
pub struct EncryptionBegin {
pub shared_secret: Bytes,
pub verify_token: Bytes,
}
impl crate::packet::Packet for EncryptionBegin {
const ID: i32 = id::ENCRYPTION_BEGIN;
const NAME: &'static str = "encryption_begin";
const STATE: State = State::Login;
const DIRECTION: Direction = Direction::Serverbound;
}
impl Decode for EncryptionBegin {
fn decode(r: &mut Reader<'_>) -> DecodeResult<Self> {
Ok({
let v39 = r.read_byte_array()?;
let v40 = r.read_byte_array()?;
EncryptionBegin {
shared_secret: v39,
verify_token: v40,
}
})
}
}
impl Encode for EncryptionBegin {
fn encode(&self, w: &mut BytesMut) -> EncodeResult {
w.put_byte_array(&(*self).shared_secret)?;
w.put_byte_array(&(*self).verify_token)?;
Ok(())
}
}
#[cfg(feature = "testgen")]
impl Generate for EncryptionBegin {
fn generate(g: &mut Gen) -> Self {
{
let v41 = g.bytes();
let v42 = g.bytes();
EncryptionBegin {
shared_secret: v41,
verify_token: v42,
}
}
}
}
impl From<EncryptionBegin> for ServerboundLoginPacket {
fn from(p: EncryptionBegin) -> Self {
Self::EncryptionBegin(p)
}
}
#[derive(Debug, Clone, PartialEq)]
pub struct LoginPluginResponse {
pub message_id: i32,
pub data: Option<Bytes>,
}
impl crate::packet::Packet for LoginPluginResponse {
const ID: i32 = id::LOGIN_PLUGIN_RESPONSE;
const NAME: &'static str = "login_plugin_response";
const STATE: State = State::Login;
const DIRECTION: Direction = Direction::Serverbound;
}
impl Decode for LoginPluginResponse {
fn decode(r: &mut Reader<'_>) -> DecodeResult<Self> {
Ok({
let v43 = r.read_varint()?;
let v44 = if r.read_bool()? {
Some(r.read_rest())
} else {
None
};
LoginPluginResponse {
message_id: v43,
data: v44,
}
})
}
}
impl Encode for LoginPluginResponse {
fn encode(&self, w: &mut BytesMut) -> EncodeResult {
w.put_varint((*self).message_id);
match &(*self).data {
Some(v45) => {
w.put_u8(1);
w.put_slice(&(*v45));
}
None => w.put_u8(0),
}
Ok(())
}
}
#[cfg(feature = "testgen")]
impl Generate for LoginPluginResponse {
fn generate(g: &mut Gen) -> Self {
{
let v46 = (g.int_in(-2147483648, 2147483647, &[]) as i32);
let v47 = if g.bool() { Some(g.bytes()) } else { None };
LoginPluginResponse {
message_id: v46,
data: v47,
}
}
}
}
impl From<LoginPluginResponse> for ServerboundLoginPacket {
fn from(p: LoginPluginResponse) -> Self {
Self::LoginPluginResponse(p)
}
}
#[derive(Debug, Clone, PartialEq)]
pub enum ServerboundLoginPacket {
LoginStart(LoginStart),
EncryptionBegin(EncryptionBegin),
LoginPluginResponse(LoginPluginResponse),
}
impl PacketSet for ServerboundLoginPacket {
const STATE: State = State::Login;
const DIRECTION: Direction = Direction::Serverbound;
fn decode_raw(raw: &RawPacket) -> DecodeResult<Self> {
match raw.id {
id::LOGIN_START => decode_exact(&raw.body).map(Self::LoginStart),
id::ENCRYPTION_BEGIN => decode_exact(&raw.body).map(Self::EncryptionBegin),
id::LOGIN_PLUGIN_RESPONSE => decode_exact(&raw.body).map(Self::LoginPluginResponse),
other => Err(DecodeError::UnknownPacketId(other)),
}
}
fn id(&self) -> i32 {
match *self {
Self::LoginStart(_) => id::LOGIN_START,
Self::EncryptionBegin(_) => id::ENCRYPTION_BEGIN,
Self::LoginPluginResponse(_) => id::LOGIN_PLUGIN_RESPONSE,
}
}
fn name(&self) -> &'static str {
match *self {
Self::LoginStart(_) => "login_start",
Self::EncryptionBegin(_) => "encryption_begin",
Self::LoginPluginResponse(_) => "login_plugin_response",
}
}
fn encode_body(&self, w: &mut BytesMut) -> EncodeResult {
match *self {
Self::LoginStart(ref p) => p.encode(w),
Self::EncryptionBegin(ref p) => p.encode(w),
Self::LoginPluginResponse(ref p) => p.encode(w),
}
}
fn name_of(id: i32) -> Option<&'static str> {
match id {
id::LOGIN_START => Some("login_start"),
id::ENCRYPTION_BEGIN => Some("encryption_begin"),
id::LOGIN_PLUGIN_RESPONSE => Some("login_plugin_response"),
_ => None,
}
}
}
impl ServerboundLoginPacket {
pub const IDS: &'static [i32] = &[
id::LOGIN_START,
id::ENCRYPTION_BEGIN,
id::LOGIN_PLUGIN_RESPONSE,
];
#[cfg(feature = "testgen")]
pub fn generate_by_id(id: i32, g: &mut Gen) -> Option<Self> {
match id {
id::LOGIN_START => Some(Self::LoginStart(<LoginStart as Generate>::generate(g))),
id::ENCRYPTION_BEGIN => Some(Self::EncryptionBegin(
<EncryptionBegin as Generate>::generate(g),
)),
id::LOGIN_PLUGIN_RESPONSE => Some(Self::LoginPluginResponse(
<LoginPluginResponse as Generate>::generate(g),
)),
_ => None,
}
}
}