Skip to content

Commit

Permalink
Start working on 1.20.40 protocol
Browse files Browse the repository at this point in the history
  • Loading branch information
Alemiz112 committed Oct 16, 2023
1 parent 9cecfbc commit bb8e406
Show file tree
Hide file tree
Showing 11 changed files with 228 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,17 @@ public class BedrockCompat {
.helper(() -> NoopBedrockCodecHelper.INSTANCE)
.registerPacket(LoginPacket::new, LoginSerializerCompat.INSTANCE, 1)
.registerPacket(PlayStatusPacket::new, PlayStatusSerializerCompat.INSTANCE, 2)
.registerPacket(DisconnectPacket::new, DisconnectSerializerCompat.INSTANCE, 5)
.registerPacket(DisconnectPacket::new, new DisconnectSerializerCompat(true), 5)
.registerPacket(RequestNetworkSettingsPacket::new, RequestNetworkSettingsSerializerCompat.INSTANCE, 193)
.protocolVersion(0)
.minecraftVersion("0.0.0")
.build();

/**
* This is legacy version of the compat codec which does not use DisconnectFailReason in DisconnectPacket.
* Use this for servers that do not support Minecraft: Bedrock Edition 1.20.40 and above.
*/
public static BedrockCodec CODEC_LEGACY = CODEC.toBuilder()
.updateSerializer(DisconnectPacket.class, new DisconnectSerializerCompat(false))
.build();
}
Original file line number Diff line number Diff line change
@@ -1,18 +1,22 @@
package org.cloudburstmc.protocol.bedrock.codec.compat.serializer;

import io.netty.buffer.ByteBuf;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import lombok.RequiredArgsConstructor;
import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper;
import org.cloudburstmc.protocol.bedrock.codec.BedrockPacketSerializer;
import org.cloudburstmc.protocol.bedrock.data.DisconnectFailReason;
import org.cloudburstmc.protocol.bedrock.packet.DisconnectPacket;
import org.cloudburstmc.protocol.common.util.VarInts;

@NoArgsConstructor(access = AccessLevel.PRIVATE)
@RequiredArgsConstructor
public class DisconnectSerializerCompat implements BedrockPacketSerializer<DisconnectPacket> {
public static final DisconnectSerializerCompat INSTANCE = new DisconnectSerializerCompat();
private final boolean reasonEnum;

@Override
public void serialize(ByteBuf buffer, BedrockCodecHelper helper, DisconnectPacket packet) {
if (this.reasonEnum) {
VarInts.writeInt(buffer, packet.getReason().ordinal());
}
buffer.writeBoolean(packet.isMessageSkipped());
if (!packet.isMessageSkipped()) {
helper.writeString(buffer, packet.getKickMessage());
Expand All @@ -21,6 +25,9 @@ public void serialize(ByteBuf buffer, BedrockCodecHelper helper, DisconnectPacke

@Override
public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, DisconnectPacket packet) {
if (this.reasonEnum) {
packet.setReason(DisconnectFailReason.values()[VarInts.readInt(buffer)]);
}
packet.setMessageSkipped(buffer.readBoolean());
if (!packet.isMessageSkipped()) {
packet.setKickMessage(helper.readString(buffer));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@
import org.cloudburstmc.protocol.common.util.TypeMap;

public class Bedrock_v618 extends Bedrock_v594 {
// TODO: check command params

protected static final TypeMap<SoundEvent> SOUND_EVENTS = Bedrock_v594.SOUND_EVENTS
.toBuilder()
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package org.cloudburstmc.protocol.bedrock.codec.v622;

import org.cloudburstmc.protocol.bedrock.codec.BedrockCodec;
import org.cloudburstmc.protocol.bedrock.codec.EntityDataTypeMap;
import org.cloudburstmc.protocol.bedrock.codec.v291.serializer.LevelSoundEvent1Serializer_v291;
import org.cloudburstmc.protocol.bedrock.codec.v313.serializer.LevelSoundEvent2Serializer_v313;
import org.cloudburstmc.protocol.bedrock.codec.v332.serializer.LevelSoundEventSerializer_v332;
import org.cloudburstmc.protocol.bedrock.codec.v575.BedrockCodecHelper_v575;
import org.cloudburstmc.protocol.bedrock.codec.v618.Bedrock_v618;
import org.cloudburstmc.protocol.bedrock.codec.v622.serializer.DisconnectSerializer_v622;
import org.cloudburstmc.protocol.bedrock.data.SoundEvent;
import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes;
import org.cloudburstmc.protocol.bedrock.data.entity.EntityFlag;
import org.cloudburstmc.protocol.bedrock.packet.DisconnectPacket;
import org.cloudburstmc.protocol.bedrock.packet.LevelSoundEvent1Packet;
import org.cloudburstmc.protocol.bedrock.packet.LevelSoundEvent2Packet;
import org.cloudburstmc.protocol.bedrock.packet.LevelSoundEventPacket;
import org.cloudburstmc.protocol.bedrock.transformer.FlagTransformer;
import org.cloudburstmc.protocol.common.util.TypeMap;

public class Bedrock_v622 extends Bedrock_v618 {

protected static final TypeMap<EntityFlag> ENTITY_FLAGS = Bedrock_v618.ENTITY_FLAGS
.toBuilder()
.insert(115, EntityFlag.TIMER_FLAG_1)
.insert(116, EntityFlag.TIMER_FLAG_2)
.insert(117, EntityFlag.TIMER_FLAG_3)
.build();

protected static final EntityDataTypeMap ENTITY_DATA = Bedrock_v618.ENTITY_DATA
.toBuilder()
.update(EntityDataTypes.FLAGS, new FlagTransformer(ENTITY_FLAGS, 0))
.update(EntityDataTypes.FLAGS_2, new FlagTransformer(ENTITY_FLAGS, 1))
.build();

protected static final TypeMap<SoundEvent> SOUND_EVENTS = Bedrock_v618.SOUND_EVENTS
.toBuilder()
.replace(477, SoundEvent.BOTTLE_FILL)
.insert(478, SoundEvent.BOTTLE_EMPTY)
.insert(479, SoundEvent.UNDEFINED)
.build();

public static final BedrockCodec CODEC = Bedrock_v618.CODEC.toBuilder()
.raknetProtocolVersion(11)
.protocolVersion(622)
.minecraftVersion("1.20.40")
.helper(() -> new BedrockCodecHelper_v575(ENTITY_DATA, GAME_RULE_TYPES, ITEM_STACK_REQUEST_TYPES, CONTAINER_SLOT_TYPES, PLAYER_ABILITIES, TEXT_PROCESSING_ORIGINS))
.updateSerializer(DisconnectPacket.class, DisconnectSerializer_v622.INSTANCE)
.updateSerializer(LevelSoundEvent1Packet.class, new LevelSoundEvent1Serializer_v291(SOUND_EVENTS))
.updateSerializer(LevelSoundEvent2Packet.class, new LevelSoundEvent2Serializer_v313(SOUND_EVENTS))
.updateSerializer(LevelSoundEventPacket.class, new LevelSoundEventSerializer_v332(SOUND_EVENTS))
.build();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package org.cloudburstmc.protocol.bedrock.codec.v622.serializer;

import io.netty.buffer.ByteBuf;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper;
import org.cloudburstmc.protocol.bedrock.codec.v291.serializer.DisconnectSerializer_v291;
import org.cloudburstmc.protocol.bedrock.data.DisconnectFailReason;
import org.cloudburstmc.protocol.bedrock.packet.DisconnectPacket;
import org.cloudburstmc.protocol.common.util.VarInts;

@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class DisconnectSerializer_v622 extends DisconnectSerializer_v291 {
public static final DisconnectSerializer_v622 INSTANCE = new DisconnectSerializer_v622();

@Override
public void serialize(ByteBuf buffer, BedrockCodecHelper helper, DisconnectPacket packet) {
VarInts.writeInt(buffer, packet.getReason().ordinal());
super.serialize(buffer, helper, packet);
}

@Override
public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, DisconnectPacket packet) {
packet.setReason(DisconnectFailReason.values()[VarInts.readInt(buffer)]);
super.deserialize(buffer, helper, packet);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
package org.cloudburstmc.protocol.bedrock.data;

public enum DisconnectFailReason {
UNKNOWN,
CANT_CONNECT_NO_INTERNET,
NO_PERMISSIONS,
UNRECOVERABLE_ERROR,
THIRD_PARTY_BLOCKED,
THIRD_PARTY_NO_INTERNET,
THIRD_PARTY_BAD_IP,
THIRD_PARTY_NO_SERVER_OR_SERVER_LOCKED,
VERSION_MISMATCH,
SKIN_ISSUE,
INVITE_SESSION_NOT_FOUND,
EDU_LEVEL_SETTINGS_MISSING,
LOCAL_SERVER_NOT_FOUND,
LEGACY_DISCONNECT,
USER_LEAVE_GAME_ATTEMPTED,
PLATFORM_LOCKED_SKINS_ERROR,
REALMS_WORLD_UNASSIGNED,
REALMS_SERVER_CANT_CONNECT,
REALMS_SERVER_HIDDEN,
REALMS_SERVER_DISABLED_BETA,
REALMS_SERVER_DISABLED,
CROSS_PLATFORM_DISALLOWED,
CANT_CONNECT,
SESSION_NOT_FOUND,
CLIENT_SETTINGS_INCOMPATIBLE_WITH_SERVER,
SERVER_FULL,
INVALID_PLATFORM_SKIN,
EDITION_VERSION_MISMATCH,
EDITION_MISMATCH,
LEVEL_NEWER_THAN_EXE_VERSION,
NO_FAIL_OCCURRED,
BANNED_SKIN,
TIMEOUT,
SERVER_NOT_FOUND,
OUTDATED_SERVER,
OUTDATED_CLIENT,
NO_PREMIUM_PLATFORM,
MULTIPLAYER_DISABLED,
NO_WIFI,
WORLD_CORRUPTION,
NO_REASON,
DISCONNECTED,
INVALID_PLAYER,
LOGGED_IN_OTHER_LOCATION,
SERVER_ID_CONFLICT,
NOT_ALLOWED,
NOT_AUTHENTICATED,
INVALID_TENANT,
UNKNOWN_PACKET,
UNEXPECTED_PACKET,
INVALID_COMMAND_REQUEST_PACKET,
HOST_SUSPENDED,
LOGIN_PACKET_NO_REQUEST,
LOGIN_PACKET_NO_CERT,
MISSING_CLIENT,
KICKED,
KICKED_FOR_EXPLOIT,
KICKED_FOR_IDLE,
RESOURCE_PACK_PROBLEM,
INCOMPATIBLE_PACK,
OUT_OF_STORAGE,
INVALID_LEVEL,
DISCONNECT_PACKET_DEPRECATED,
BLOCK_MISMATCH,
INVALID_HEIGHTS,
INVALID_WIDTHS,
CONNECTION_LOST,
ZOMBIE_CONNECTION,
SHUTDOWN,
REASON_NOT_SET,
LOADING_STATE_TIMEOUT,
RESOURCE_PACK_LOADING_FAILED,
SEARCHING_FOR_SESSION_LOADING_SCREEN_FAILED,
CONN_PROTOCOL_VERSION,
SUBSYSTEM_STATUS_ERROR,
EMPTY_AUTH_FROM_DISCOVERY,
EMPTY_URL_FROM_DISCOVERY,
EXPIRED_AUTH_FROM_DISCOVERY,
UNKNOWN_SIGNAL_SERVICE_SIGN_IN_FAILURE,
XBL_JOIN_LOBBY_FAILURE,
UNSPECIFIED_CLIENT_INSTANCE_DISCONNECTION,
CONN_SESSION_NOT_FOUND,
CONN_CREATE_PEER_CONNECTION,
CONN_ICE,
CONN_CONNECT_REQUEST,
CONN_CONNECT_RESPONSE,
CONN_NEGOTIATION_TIMEOUT,
CONN_INACTIVITY_TIMEOUT,
STALE_CONNECTION_BEING_REPLACED,
REALMS_SESSION_NOT_FOUND,
BAD_PACKET
}
Original file line number Diff line number Diff line change
Expand Up @@ -66,5 +66,9 @@ public enum PlayerActionType {
/**
* @since v618
*/
STOP_FLYING
STOP_FLYING,
/**
* @since v622
*/
RECEIVED_SERVER_DATA
}
Original file line number Diff line number Diff line change
Expand Up @@ -65,5 +65,9 @@ public enum PlayerAuthInputData {
/**
* @since v618
*/
STOP_FLYING
STOP_FLYING,
/**
* @since v622
*/
RECEIVED_SERVER_DATA
}
Original file line number Diff line number Diff line change
Expand Up @@ -529,6 +529,14 @@ public enum SoundEvent {
* @since v618
*/
AMBIENT_UNDERWATER_EXIT,
/**
* @since v622
*/
BOTTLE_FILL,
/**
* @since v622
*/
BOTTLE_EMPTY,

UNDEFINED
}
Original file line number Diff line number Diff line change
Expand Up @@ -130,5 +130,17 @@ public enum EntityFlag {
/**
* @since v594
*/
CRAWLING
CRAWLING,
/**
* @since v622
*/
TIMER_FLAG_1,
/**
* @since v622
*/
TIMER_FLAG_2,
/**
* @since v622
*/
TIMER_FLAG_3
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,14 @@
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import org.cloudburstmc.protocol.bedrock.data.DisconnectFailReason;
import org.cloudburstmc.protocol.common.PacketSignal;

@Data
@EqualsAndHashCode(doNotUseGetters = true)
@ToString(doNotUseGetters = true)
public class DisconnectPacket implements BedrockPacket {
private DisconnectFailReason reason = DisconnectFailReason.UNKNOWN;
private boolean messageSkipped;
private String kickMessage;

Expand Down

0 comments on commit bb8e406

Please sign in to comment.