Minecraft 1.20.2-rc1 support

This commit is contained in:
md_5
2023-09-17 08:01:45 +10:00
parent a7cd79eb41
commit d68ebd1eaf
27 changed files with 574 additions and 102 deletions

View File

@@ -11,6 +11,7 @@ import net.md_5.bungee.protocol.packet.Commands;
import net.md_5.bungee.protocol.packet.EncryptionRequest;
import net.md_5.bungee.protocol.packet.EncryptionResponse;
import net.md_5.bungee.protocol.packet.EntityStatus;
import net.md_5.bungee.protocol.packet.FinishConfiguration;
import net.md_5.bungee.protocol.packet.GameState;
import net.md_5.bungee.protocol.packet.Handshake;
import net.md_5.bungee.protocol.packet.KeepAlive;
@@ -18,6 +19,7 @@ import net.md_5.bungee.protocol.packet.Kick;
import net.md_5.bungee.protocol.packet.LegacyHandshake;
import net.md_5.bungee.protocol.packet.LegacyPing;
import net.md_5.bungee.protocol.packet.Login;
import net.md_5.bungee.protocol.packet.LoginAcknowledged;
import net.md_5.bungee.protocol.packet.LoginPayloadRequest;
import net.md_5.bungee.protocol.packet.LoginPayloadResponse;
import net.md_5.bungee.protocol.packet.LoginRequest;
@@ -34,6 +36,7 @@ import net.md_5.bungee.protocol.packet.ScoreboardObjective;
import net.md_5.bungee.protocol.packet.ScoreboardScore;
import net.md_5.bungee.protocol.packet.ServerData;
import net.md_5.bungee.protocol.packet.SetCompression;
import net.md_5.bungee.protocol.packet.StartConfiguration;
import net.md_5.bungee.protocol.packet.StatusRequest;
import net.md_5.bungee.protocol.packet.StatusResponse;
import net.md_5.bungee.protocol.packet.Subtitle;
@@ -223,4 +226,16 @@ public abstract class AbstractPacketHandler
public void handle(ServerData serverData) throws Exception
{
}
public void handle(LoginAcknowledged loginAcknowledged) throws Exception
{
}
public void handle(StartConfiguration startConfiguration) throws Exception
{
}
public void handle(FinishConfiguration finishConfiguration) throws Exception
{
}
}

View File

@@ -15,7 +15,9 @@ import java.util.EnumSet;
import java.util.List;
import java.util.UUID;
import lombok.RequiredArgsConstructor;
import se.llbit.nbt.ErrorTag;
import se.llbit.nbt.NamedTag;
import se.llbit.nbt.SpecificTag;
import se.llbit.nbt.Tag;
@RequiredArgsConstructor
@@ -293,14 +295,35 @@ public abstract class DefinedPacket
return null;
}
public static Tag readTag(ByteBuf input)
public static Tag readTag(ByteBuf input, int protocolVersion)
{
Tag tag = NamedTag.read( new DataInputStream( new ByteBufInputStream( input ) ) );
DataInputStream in = new DataInputStream( new ByteBufInputStream( input ) );
Tag tag;
if ( protocolVersion >= ProtocolConstants.MINECRAFT_1_20_2 )
{
try
{
byte type = in.readByte();
if ( type == 0 )
{
return Tag.END;
} else
{
tag = SpecificTag.read( type, in );
}
} catch ( IOException ex )
{
tag = new ErrorTag( "IOException while reading tag type:\n" + ex.getMessage() );
}
} else
{
tag = NamedTag.read( in );
}
Preconditions.checkArgument( !tag.isError(), "Error reading tag: %s", tag.error() );
return tag;
}
public static void writeTag(Tag tag, ByteBuf output)
public static void writeTag(Tag tag, ByteBuf output, int protocolVersion)
{
try
{
@@ -378,6 +401,11 @@ public abstract class DefinedPacket
write( buf );
}
public Protocol nextProtocol()
{
return null;
}
public abstract void handle(AbstractPacketHandler handler) throws Exception;
@Override

View File

@@ -5,12 +5,14 @@ import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.MessageToMessageDecoder;
import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;
@AllArgsConstructor
public class MinecraftDecoder extends MessageToMessageDecoder<ByteBuf>
{
@Getter
@Setter
private Protocol protocol;
private final boolean server;

View File

@@ -4,12 +4,14 @@ import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.MessageToByteEncoder;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;
@AllArgsConstructor
public class MinecraftEncoder extends MessageToByteEncoder<DefinedPacket>
{
@Getter
@Setter
private Protocol protocol;
private boolean server;

View File

@@ -19,11 +19,13 @@ import net.md_5.bungee.protocol.packet.Commands;
import net.md_5.bungee.protocol.packet.EncryptionRequest;
import net.md_5.bungee.protocol.packet.EncryptionResponse;
import net.md_5.bungee.protocol.packet.EntityStatus;
import net.md_5.bungee.protocol.packet.FinishConfiguration;
import net.md_5.bungee.protocol.packet.GameState;
import net.md_5.bungee.protocol.packet.Handshake;
import net.md_5.bungee.protocol.packet.KeepAlive;
import net.md_5.bungee.protocol.packet.Kick;
import net.md_5.bungee.protocol.packet.Login;
import net.md_5.bungee.protocol.packet.LoginAcknowledged;
import net.md_5.bungee.protocol.packet.LoginPayloadRequest;
import net.md_5.bungee.protocol.packet.LoginPayloadResponse;
import net.md_5.bungee.protocol.packet.LoginRequest;
@@ -40,6 +42,7 @@ import net.md_5.bungee.protocol.packet.ScoreboardObjective;
import net.md_5.bungee.protocol.packet.ScoreboardScore;
import net.md_5.bungee.protocol.packet.ServerData;
import net.md_5.bungee.protocol.packet.SetCompression;
import net.md_5.bungee.protocol.packet.StartConfiguration;
import net.md_5.bungee.protocol.packet.StatusRequest;
import net.md_5.bungee.protocol.packet.StatusResponse;
import net.md_5.bungee.protocol.packet.Subtitle;
@@ -85,7 +88,8 @@ public enum Protocol
map( ProtocolConstants.MINECRAFT_1_19, 0x1E ),
map( ProtocolConstants.MINECRAFT_1_19_1, 0x20 ),
map( ProtocolConstants.MINECRAFT_1_19_3, 0x1F ),
map( ProtocolConstants.MINECRAFT_1_19_4, 0x23 )
map( ProtocolConstants.MINECRAFT_1_19_4, 0x23 ),
map( ProtocolConstants.MINECRAFT_1_20_2, 0x24 )
);
TO_CLIENT.registerPacket(
Login.class,
@@ -100,7 +104,8 @@ public enum Protocol
map( ProtocolConstants.MINECRAFT_1_19, 0x23 ),
map( ProtocolConstants.MINECRAFT_1_19_1, 0x25 ),
map( ProtocolConstants.MINECRAFT_1_19_3, 0x24 ),
map( ProtocolConstants.MINECRAFT_1_19_4, 0x28 )
map( ProtocolConstants.MINECRAFT_1_19_4, 0x28 ),
map( ProtocolConstants.MINECRAFT_1_20_2, 0x29 )
);
TO_CLIENT.registerPacket( Chat.class,
Chat::new,
@@ -128,7 +133,8 @@ public enum Protocol
map( ProtocolConstants.MINECRAFT_1_19, 0x3B ),
map( ProtocolConstants.MINECRAFT_1_19_1, 0x3E ),
map( ProtocolConstants.MINECRAFT_1_19_3, 0x3D ),
map( ProtocolConstants.MINECRAFT_1_19_4, 0x41 )
map( ProtocolConstants.MINECRAFT_1_19_4, 0x41 ),
map( ProtocolConstants.MINECRAFT_1_20_2, 0x43 )
);
TO_CLIENT.registerPacket(
BossBar.class,
@@ -138,7 +144,8 @@ public enum Protocol
map( ProtocolConstants.MINECRAFT_1_16, 0x0C ),
map( ProtocolConstants.MINECRAFT_1_17, 0x0D ),
map( ProtocolConstants.MINECRAFT_1_19, 0x0A ),
map( ProtocolConstants.MINECRAFT_1_19_4, 0xB )
map( ProtocolConstants.MINECRAFT_1_19_4, 0x0B ),
map( ProtocolConstants.MINECRAFT_1_20_2, 0x0A )
);
TO_CLIENT.registerPacket(
PlayerListItem.class, // PlayerInfo
@@ -168,7 +175,8 @@ public enum Protocol
map( ProtocolConstants.MINECRAFT_1_17, 0x11 ),
map( ProtocolConstants.MINECRAFT_1_19, 0x0E ),
map( ProtocolConstants.MINECRAFT_1_19_3, 0x0D ),
map( ProtocolConstants.MINECRAFT_1_19_4, 0xF )
map( ProtocolConstants.MINECRAFT_1_19_4, 0x0F ),
map( ProtocolConstants.MINECRAFT_1_20_2, 0x10 )
);
TO_CLIENT.registerPacket(
ScoreboardObjective.class,
@@ -183,7 +191,8 @@ public enum Protocol
map( ProtocolConstants.MINECRAFT_1_17, 0x53 ),
map( ProtocolConstants.MINECRAFT_1_19_1, 0x56 ),
map( ProtocolConstants.MINECRAFT_1_19_3, 0x54 ),
map( ProtocolConstants.MINECRAFT_1_19_4, 0x58 )
map( ProtocolConstants.MINECRAFT_1_19_4, 0x58 ),
map( ProtocolConstants.MINECRAFT_1_20_2, 0x5A )
);
TO_CLIENT.registerPacket(
ScoreboardScore.class,
@@ -198,7 +207,8 @@ public enum Protocol
map( ProtocolConstants.MINECRAFT_1_17, 0x56 ),
map( ProtocolConstants.MINECRAFT_1_19_1, 0x59 ),
map( ProtocolConstants.MINECRAFT_1_19_3, 0x57 ),
map( ProtocolConstants.MINECRAFT_1_19_4, 0x5B )
map( ProtocolConstants.MINECRAFT_1_19_4, 0x5B ),
map( ProtocolConstants.MINECRAFT_1_20_2, 0x5D )
);
TO_CLIENT.registerPacket(
ScoreboardDisplay.class,
@@ -213,7 +223,8 @@ public enum Protocol
map( ProtocolConstants.MINECRAFT_1_17, 0x4C ),
map( ProtocolConstants.MINECRAFT_1_19_1, 0x4F ),
map( ProtocolConstants.MINECRAFT_1_19_3, 0x4D ),
map( ProtocolConstants.MINECRAFT_1_19_4, 0x51 )
map( ProtocolConstants.MINECRAFT_1_19_4, 0x51 ),
map( ProtocolConstants.MINECRAFT_1_20_2, 0x53 )
);
TO_CLIENT.registerPacket(
Team.class,
@@ -228,7 +239,8 @@ public enum Protocol
map( ProtocolConstants.MINECRAFT_1_17, 0x55 ),
map( ProtocolConstants.MINECRAFT_1_19_1, 0x58 ),
map( ProtocolConstants.MINECRAFT_1_19_3, 0x56 ),
map( ProtocolConstants.MINECRAFT_1_19_4, 0x5A )
map( ProtocolConstants.MINECRAFT_1_19_4, 0x5A ),
map( ProtocolConstants.MINECRAFT_1_20_2, 0x5C )
);
TO_CLIENT.registerPacket(
PluginMessage.class,
@@ -244,7 +256,8 @@ public enum Protocol
map( ProtocolConstants.MINECRAFT_1_19, 0x15 ),
map( ProtocolConstants.MINECRAFT_1_19_1, 0x16 ),
map( ProtocolConstants.MINECRAFT_1_19_3, 0x15 ),
map( ProtocolConstants.MINECRAFT_1_19_4, 0x17 )
map( ProtocolConstants.MINECRAFT_1_19_4, 0x17 ),
map( ProtocolConstants.MINECRAFT_1_20_2, 0x18 )
);
TO_CLIENT.registerPacket(
Kick.class,
@@ -260,7 +273,8 @@ public enum Protocol
map( ProtocolConstants.MINECRAFT_1_19, 0x17 ),
map( ProtocolConstants.MINECRAFT_1_19_1, 0x19 ),
map( ProtocolConstants.MINECRAFT_1_19_3, 0x17 ),
map( ProtocolConstants.MINECRAFT_1_19_4, 0x1A )
map( ProtocolConstants.MINECRAFT_1_19_4, 0x1A ),
map( ProtocolConstants.MINECRAFT_1_20_2, 0x1B )
);
TO_CLIENT.registerPacket(
Title.class,
@@ -276,7 +290,8 @@ public enum Protocol
map( ProtocolConstants.MINECRAFT_1_18, 0x5A ),
map( ProtocolConstants.MINECRAFT_1_19_1, 0x5D ),
map( ProtocolConstants.MINECRAFT_1_19_3, 0x5B ),
map( ProtocolConstants.MINECRAFT_1_19_4, 0x5F )
map( ProtocolConstants.MINECRAFT_1_19_4, 0x5F ),
map( ProtocolConstants.MINECRAFT_1_20_2, 0x61 )
);
TO_CLIENT.registerPacket(
ClearTitles.class,
@@ -284,7 +299,8 @@ public enum Protocol
map( ProtocolConstants.MINECRAFT_1_17, 0x10 ),
map( ProtocolConstants.MINECRAFT_1_19, 0x0D ),
map( ProtocolConstants.MINECRAFT_1_19_3, 0x0C ),
map( ProtocolConstants.MINECRAFT_1_19_4, 0xE )
map( ProtocolConstants.MINECRAFT_1_19_4, 0x0E ),
map( ProtocolConstants.MINECRAFT_1_20_2, 0x0F )
);
TO_CLIENT.registerPacket(
Subtitle.class,
@@ -293,7 +309,8 @@ public enum Protocol
map( ProtocolConstants.MINECRAFT_1_18, 0x58 ),
map( ProtocolConstants.MINECRAFT_1_19_1, 0x5B ),
map( ProtocolConstants.MINECRAFT_1_19_3, 0x59 ),
map( ProtocolConstants.MINECRAFT_1_19_4, 0x5D )
map( ProtocolConstants.MINECRAFT_1_19_4, 0x5D ),
map( ProtocolConstants.MINECRAFT_1_20_2, 0x5F )
);
TO_CLIENT.registerPacket(
TitleTimes.class,
@@ -302,7 +319,8 @@ public enum Protocol
map( ProtocolConstants.MINECRAFT_1_18, 0x5B ),
map( ProtocolConstants.MINECRAFT_1_19_1, 0x5E ),
map( ProtocolConstants.MINECRAFT_1_19_3, 0x5C ),
map( ProtocolConstants.MINECRAFT_1_19_4, 0x60 )
map( ProtocolConstants.MINECRAFT_1_19_4, 0x60 ),
map( ProtocolConstants.MINECRAFT_1_20_2, 0x62 )
);
TO_CLIENT.registerPacket(
SystemChat.class,
@@ -310,7 +328,8 @@ public enum Protocol
map( ProtocolConstants.MINECRAFT_1_19, 0x5F ),
map( ProtocolConstants.MINECRAFT_1_19_1, 0x62 ),
map( ProtocolConstants.MINECRAFT_1_19_3, 0x60 ),
map( ProtocolConstants.MINECRAFT_1_19_4, 0x64 )
map( ProtocolConstants.MINECRAFT_1_19_4, 0x64 ),
map( ProtocolConstants.MINECRAFT_1_20_2, 0x67 )
);
TO_CLIENT.registerPacket(
PlayerListHeaderFooter.class,
@@ -329,7 +348,8 @@ public enum Protocol
map( ProtocolConstants.MINECRAFT_1_19, 0x60 ),
map( ProtocolConstants.MINECRAFT_1_19_1, 0x63 ),
map( ProtocolConstants.MINECRAFT_1_19_3, 0x61 ),
map( ProtocolConstants.MINECRAFT_1_19_4, 0x65 )
map( ProtocolConstants.MINECRAFT_1_19_4, 0x65 ),
map( ProtocolConstants.MINECRAFT_1_20_2, 0x68 )
);
TO_CLIENT.registerPacket(
EntityStatus.class,
@@ -345,7 +365,8 @@ public enum Protocol
map( ProtocolConstants.MINECRAFT_1_19, 0x18 ),
map( ProtocolConstants.MINECRAFT_1_19_1, 0x1A ),
map( ProtocolConstants.MINECRAFT_1_19_3, 0x19 ),
map( ProtocolConstants.MINECRAFT_1_19_4, 0x1C )
map( ProtocolConstants.MINECRAFT_1_19_4, 0x1C ),
map( ProtocolConstants.MINECRAFT_1_20_2, 0x1D )
);
TO_CLIENT.registerPacket(
Commands.class,
@@ -357,7 +378,8 @@ public enum Protocol
map( ProtocolConstants.MINECRAFT_1_17, 0x12 ),
map( ProtocolConstants.MINECRAFT_1_19, 0x0F ),
map( ProtocolConstants.MINECRAFT_1_19_3, 0x0E ),
map( ProtocolConstants.MINECRAFT_1_19_4, 0x10 )
map( ProtocolConstants.MINECRAFT_1_19_4, 0x10 ),
map( ProtocolConstants.MINECRAFT_1_20_2, 0x11 )
);
TO_CLIENT.registerPacket(
GameState.class,
@@ -369,7 +391,8 @@ public enum Protocol
map( ProtocolConstants.MINECRAFT_1_19, 0x1B ),
map( ProtocolConstants.MINECRAFT_1_19_1, 0x1D ),
map( ProtocolConstants.MINECRAFT_1_19_3, 0x1C ),
map( ProtocolConstants.MINECRAFT_1_19_4, 0x1F )
map( ProtocolConstants.MINECRAFT_1_19_4, 0x1F ),
map( ProtocolConstants.MINECRAFT_1_20_2, 0x20 )
);
TO_CLIENT.registerPacket(
ViewDistance.class,
@@ -381,7 +404,8 @@ public enum Protocol
map( ProtocolConstants.MINECRAFT_1_19, 0x49 ),
map( ProtocolConstants.MINECRAFT_1_19_1, 0x4C ),
map( ProtocolConstants.MINECRAFT_1_19_3, 0x4B ),
map( ProtocolConstants.MINECRAFT_1_19_4, 0x4F )
map( ProtocolConstants.MINECRAFT_1_19_4, 0x4F ),
map( ProtocolConstants.MINECRAFT_1_20_2, 0x51 )
);
TO_CLIENT.registerPacket(
ServerData.class,
@@ -389,19 +413,27 @@ public enum Protocol
map( ProtocolConstants.MINECRAFT_1_19, 0x3F ),
map( ProtocolConstants.MINECRAFT_1_19_1, 0x42 ),
map( ProtocolConstants.MINECRAFT_1_19_3, 0x41 ),
map( ProtocolConstants.MINECRAFT_1_19_4, 0x45 )
map( ProtocolConstants.MINECRAFT_1_19_4, 0x45 ),
map( ProtocolConstants.MINECRAFT_1_20_2, 0x47 )
);
TO_CLIENT.registerPacket(
PlayerListItemRemove.class,
PlayerListItemRemove::new,
map( ProtocolConstants.MINECRAFT_1_19_3, 0x35 ),
map( ProtocolConstants.MINECRAFT_1_19_4, 0x39 )
map( ProtocolConstants.MINECRAFT_1_19_4, 0x39 ),
map( ProtocolConstants.MINECRAFT_1_20_2, 0x3B )
);
TO_CLIENT.registerPacket(
PlayerListItemUpdate.class,
PlayerListItemUpdate::new,
map( ProtocolConstants.MINECRAFT_1_19_3, 0x36 ),
map( ProtocolConstants.MINECRAFT_1_19_4, 0x3A )
map( ProtocolConstants.MINECRAFT_1_19_4, 0x3A ),
map( ProtocolConstants.MINECRAFT_1_20_2, 0x3C )
);
TO_CLIENT.registerPacket(
StartConfiguration.class,
StartConfiguration::new,
map( ProtocolConstants.MINECRAFT_1_20_2, 0x65 )
);
TO_SERVER.registerPacket(
@@ -418,7 +450,8 @@ public enum Protocol
map( ProtocolConstants.MINECRAFT_1_19, 0x11 ),
map( ProtocolConstants.MINECRAFT_1_19_1, 0x12 ),
map( ProtocolConstants.MINECRAFT_1_19_3, 0x11 ),
map( ProtocolConstants.MINECRAFT_1_19_4, 0x12 )
map( ProtocolConstants.MINECRAFT_1_19_4, 0x12 ),
map( ProtocolConstants.MINECRAFT_1_20_2, 0x14 )
);
TO_SERVER.registerPacket( Chat.class,
Chat::new,
@@ -453,7 +486,8 @@ public enum Protocol
map( ProtocolConstants.MINECRAFT_1_19, 0x08 ),
map( ProtocolConstants.MINECRAFT_1_19_1, 0x09 ),
map( ProtocolConstants.MINECRAFT_1_19_3, 0x08 ),
map( ProtocolConstants.MINECRAFT_1_19_4, 0x09 )
map( ProtocolConstants.MINECRAFT_1_19_4, 0x09 ),
map( ProtocolConstants.MINECRAFT_1_20_2, 0x0A )
);
TO_SERVER.registerPacket(
ClientSettings.class,
@@ -466,7 +500,8 @@ public enum Protocol
map( ProtocolConstants.MINECRAFT_1_19, 0x07 ),
map( ProtocolConstants.MINECRAFT_1_19_1, 0x08 ),
map( ProtocolConstants.MINECRAFT_1_19_3, 0x07 ),
map( ProtocolConstants.MINECRAFT_1_19_4, 0x08 )
map( ProtocolConstants.MINECRAFT_1_19_4, 0x08 ),
map( ProtocolConstants.MINECRAFT_1_20_2, 0x09 )
);
TO_SERVER.registerPacket(
PluginMessage.class,
@@ -481,7 +516,13 @@ public enum Protocol
map( ProtocolConstants.MINECRAFT_1_19, 0x0C ),
map( ProtocolConstants.MINECRAFT_1_19_1, 0x0D ),
map( ProtocolConstants.MINECRAFT_1_19_3, 0x0C ),
map( ProtocolConstants.MINECRAFT_1_19_4, 0x0D )
map( ProtocolConstants.MINECRAFT_1_19_4, 0x0D ),
map( ProtocolConstants.MINECRAFT_1_20_2, 0x0F )
);
TO_SERVER.registerPacket(
StartConfiguration.class,
StartConfiguration::new,
map( ProtocolConstants.MINECRAFT_1_20_2, 0x0B )
);
}
},
@@ -559,6 +600,59 @@ public enum Protocol
LoginPayloadResponse::new,
map( ProtocolConstants.MINECRAFT_1_13, 0x02 )
);
TO_SERVER.registerPacket(
LoginAcknowledged.class,
LoginAcknowledged::new,
map( ProtocolConstants.MINECRAFT_1_20_2, 0x03 )
);
}
},
// 3
CONFIGURATION
{
{
TO_CLIENT.registerPacket(
PluginMessage.class,
PluginMessage::new,
map( ProtocolConstants.MINECRAFT_1_20_2, 0x00 )
);
TO_CLIENT.registerPacket(
Kick.class,
Kick::new,
map( ProtocolConstants.MINECRAFT_1_20_2, 0x01 )
);
TO_CLIENT.registerPacket(
FinishConfiguration.class,
FinishConfiguration::new,
map( ProtocolConstants.MINECRAFT_1_20_2, 0x02 )
);
TO_CLIENT.registerPacket(
KeepAlive.class,
KeepAlive::new,
map( ProtocolConstants.MINECRAFT_1_20_2, 0x03 )
);
TO_SERVER.registerPacket(
ClientSettings.class,
ClientSettings::new,
map( ProtocolConstants.MINECRAFT_1_20_2, 0x00 )
);
TO_SERVER.registerPacket(
PluginMessage.class,
PluginMessage::new,
map( ProtocolConstants.MINECRAFT_1_20_2, 0x01 )
);
TO_SERVER.registerPacket(
FinishConfiguration.class,
FinishConfiguration::new,
map( ProtocolConstants.MINECRAFT_1_20_2, 0x02 )
);
TO_SERVER.registerPacket(
KeepAlive.class,
KeepAlive::new,
map( ProtocolConstants.MINECRAFT_1_20_2, 0x03 )
);
}
};
/*========================================================================*/

View File

@@ -43,6 +43,7 @@ public class ProtocolConstants
public static final int MINECRAFT_1_19_3 = 761;
public static final int MINECRAFT_1_19_4 = 762;
public static final int MINECRAFT_1_20 = 763;
public static final int MINECRAFT_1_20_2 = 1073741976;
public static final List<String> SUPPORTED_VERSIONS;
public static final List<Integer> SUPPORTED_VERSION_IDS;
@@ -105,7 +106,7 @@ public class ProtocolConstants
if ( SNAPSHOT_SUPPORT )
{
// supportedVersions.add( "1.20.x" );
// supportedVersionIds.add( ProtocolConstants.MINECRAFT_1_20 );
supportedVersionIds.add( ProtocolConstants.MINECRAFT_1_20_2 );
}
SUPPORTED_VERSIONS = supportedVersions.build();

View File

@@ -0,0 +1,37 @@
package net.md_5.bungee.protocol.packet;
import io.netty.buffer.ByteBuf;
import lombok.Data;
import lombok.EqualsAndHashCode;
import net.md_5.bungee.protocol.AbstractPacketHandler;
import net.md_5.bungee.protocol.DefinedPacket;
import net.md_5.bungee.protocol.Protocol;
import net.md_5.bungee.protocol.ProtocolConstants;
@Data
@EqualsAndHashCode(callSuper = false)
public class FinishConfiguration extends DefinedPacket
{
@Override
public void read(ByteBuf buf, ProtocolConstants.Direction direction, int protocolVersion)
{
}
@Override
public void write(ByteBuf buf, ProtocolConstants.Direction direction, int protocolVersion)
{
}
@Override
public Protocol nextProtocol()
{
return Protocol.GAME;
}
@Override
public void handle(AbstractPacketHandler handler) throws Exception
{
handler.handle( this );
}
}

View File

@@ -36,6 +36,7 @@ public class Login extends DefinedPacket
private int simulationDistance;
private boolean reducedDebugInfo;
private boolean normalRespawn;
private boolean limitedCrafting;
private boolean debug;
private boolean flat;
private Location deathLocation;
@@ -49,10 +50,16 @@ public class Login extends DefinedPacket
{
hardcore = buf.readBoolean();
}
gameMode = buf.readUnsignedByte();
if ( protocolVersion < ProtocolConstants.MINECRAFT_1_20_2 )
{
gameMode = buf.readUnsignedByte();
}
if ( protocolVersion >= ProtocolConstants.MINECRAFT_1_16 )
{
previousGameMode = buf.readUnsignedByte();
if ( protocolVersion < ProtocolConstants.MINECRAFT_1_20_2 )
{
previousGameMode = buf.readUnsignedByte();
}
worldNames = new HashSet<>();
int worldCount = readVarInt( buf );
@@ -61,19 +68,25 @@ public class Login extends DefinedPacket
worldNames.add( readString( buf ) );
}
dimensions = readTag( buf );
if ( protocolVersion < ProtocolConstants.MINECRAFT_1_20_2 )
{
dimensions = readTag( buf, protocolVersion );
}
}
if ( protocolVersion >= ProtocolConstants.MINECRAFT_1_16 )
{
if ( protocolVersion >= ProtocolConstants.MINECRAFT_1_16_2 && protocolVersion < ProtocolConstants.MINECRAFT_1_19 )
{
dimension = readTag( buf );
} else
dimension = readTag( buf, protocolVersion );
} else if ( protocolVersion < ProtocolConstants.MINECRAFT_1_20_2 )
{
dimension = readString( buf );
}
worldName = readString( buf );
if ( protocolVersion < ProtocolConstants.MINECRAFT_1_20_2 )
{
worldName = readString( buf );
}
} else if ( protocolVersion > ProtocolConstants.MINECRAFT_1_9 )
{
dimension = buf.readInt();
@@ -81,7 +94,7 @@ public class Login extends DefinedPacket
{
dimension = (int) buf.readByte();
}
if ( protocolVersion >= ProtocolConstants.MINECRAFT_1_15 )
if ( protocolVersion >= ProtocolConstants.MINECRAFT_1_15 && protocolVersion < ProtocolConstants.MINECRAFT_1_20_2 )
{
seed = buf.readLong();
}
@@ -116,6 +129,15 @@ public class Login extends DefinedPacket
{
normalRespawn = buf.readBoolean();
}
if ( protocolVersion >= ProtocolConstants.MINECRAFT_1_20_2 )
{
limitedCrafting = buf.readBoolean();
dimension = readString( buf );
worldName = readString( buf );
seed = buf.readLong();
gameMode = buf.readUnsignedByte();
previousGameMode = buf.readByte();
}
if ( protocolVersion >= ProtocolConstants.MINECRAFT_1_16 )
{
debug = buf.readBoolean();
@@ -142,10 +164,16 @@ public class Login extends DefinedPacket
{
buf.writeBoolean( hardcore );
}
buf.writeByte( gameMode );
if ( protocolVersion < ProtocolConstants.MINECRAFT_1_20_2 )
{
buf.writeByte( gameMode );
}
if ( protocolVersion >= ProtocolConstants.MINECRAFT_1_16 )
{
buf.writeByte( previousGameMode );
if ( protocolVersion < ProtocolConstants.MINECRAFT_1_20_2 )
{
buf.writeByte( previousGameMode );
}
writeVarInt( worldNames.size(), buf );
for ( String world : worldNames )
@@ -153,19 +181,25 @@ public class Login extends DefinedPacket
writeString( world, buf );
}
writeTag( dimensions, buf );
if ( protocolVersion < ProtocolConstants.MINECRAFT_1_20_2 )
{
writeTag( dimensions, buf, protocolVersion );
}
}
if ( protocolVersion >= ProtocolConstants.MINECRAFT_1_16 )
{
if ( protocolVersion >= ProtocolConstants.MINECRAFT_1_16_2 && protocolVersion < ProtocolConstants.MINECRAFT_1_19 )
{
writeTag( (Tag) dimension, buf );
} else
writeTag( (Tag) dimension, buf, protocolVersion );
} else if ( protocolVersion < ProtocolConstants.MINECRAFT_1_20_2 )
{
writeString( (String) dimension, buf );
}
writeString( worldName, buf );
if ( protocolVersion < ProtocolConstants.MINECRAFT_1_20_2 )
{
writeString( worldName, buf );
}
} else if ( protocolVersion > ProtocolConstants.MINECRAFT_1_9 )
{
buf.writeInt( (Integer) dimension );
@@ -175,7 +209,10 @@ public class Login extends DefinedPacket
}
if ( protocolVersion >= ProtocolConstants.MINECRAFT_1_15 )
{
buf.writeLong( seed );
if ( protocolVersion < ProtocolConstants.MINECRAFT_1_20_2 )
{
buf.writeLong( seed );
}
}
if ( protocolVersion < ProtocolConstants.MINECRAFT_1_14 )
{
@@ -208,6 +245,15 @@ public class Login extends DefinedPacket
{
buf.writeBoolean( normalRespawn );
}
if ( protocolVersion >= ProtocolConstants.MINECRAFT_1_20_2 )
{
buf.writeBoolean( limitedCrafting );
writeString( (String) dimension, buf );
writeString( worldName, buf );
buf.writeLong( seed );
buf.writeByte( gameMode );
buf.writeByte( previousGameMode );
}
if ( protocolVersion >= ProtocolConstants.MINECRAFT_1_16 )
{
buf.writeBoolean( debug );

View File

@@ -0,0 +1,37 @@
package net.md_5.bungee.protocol.packet;
import io.netty.buffer.ByteBuf;
import lombok.Data;
import lombok.EqualsAndHashCode;
import net.md_5.bungee.protocol.AbstractPacketHandler;
import net.md_5.bungee.protocol.DefinedPacket;
import net.md_5.bungee.protocol.Protocol;
import net.md_5.bungee.protocol.ProtocolConstants;
@Data
@EqualsAndHashCode(callSuper = false)
public class LoginAcknowledged extends DefinedPacket
{
@Override
public void read(ByteBuf buf, ProtocolConstants.Direction direction, int protocolVersion)
{
}
@Override
public void write(ByteBuf buf, ProtocolConstants.Direction direction, int protocolVersion)
{
}
@Override
public Protocol nextProtocol()
{
return Protocol.CONFIGURATION;
}
@Override
public void handle(AbstractPacketHandler handler) throws Exception
{
handler.handle( this );
}
}

View File

@@ -32,7 +32,7 @@ public class LoginRequest extends DefinedPacket
}
if ( protocolVersion >= ProtocolConstants.MINECRAFT_1_19_1 )
{
if ( buf.readBoolean() )
if ( protocolVersion >= ProtocolConstants.MINECRAFT_1_20_2 || buf.readBoolean() )
{
uuid = readUUID( buf );
}
@@ -49,13 +49,19 @@ public class LoginRequest extends DefinedPacket
}
if ( protocolVersion >= ProtocolConstants.MINECRAFT_1_19_1 )
{
if ( uuid != null )
if ( protocolVersion >= ProtocolConstants.MINECRAFT_1_20_2 )
{
buf.writeBoolean( true );
writeUUID( uuid, buf );
} else
{
buf.writeBoolean( false );
if ( uuid != null )
{
buf.writeBoolean( true );
writeUUID( uuid, buf );
} else
{
buf.writeBoolean( false );
}
}
}
}

View File

@@ -27,7 +27,7 @@ public class Respawn extends DefinedPacket
private String levelType;
private boolean debug;
private boolean flat;
private boolean copyMeta;
private byte copyMeta;
private Location deathLocation;
private int portalCooldown;
@@ -38,7 +38,7 @@ public class Respawn extends DefinedPacket
{
if ( protocolVersion >= ProtocolConstants.MINECRAFT_1_16_2 && protocolVersion < ProtocolConstants.MINECRAFT_1_19 )
{
dimension = readTag( buf );
dimension = readTag( buf, protocolVersion );
} else
{
dimension = readString( buf );
@@ -62,7 +62,10 @@ public class Respawn extends DefinedPacket
previousGameMode = buf.readUnsignedByte();
debug = buf.readBoolean();
flat = buf.readBoolean();
copyMeta = buf.readBoolean();
if ( protocolVersion < ProtocolConstants.MINECRAFT_1_20_2 )
{
copyMeta = buf.readByte();
}
} else
{
levelType = readString( buf );
@@ -78,6 +81,10 @@ public class Respawn extends DefinedPacket
{
portalCooldown = readVarInt( buf );
}
if ( protocolVersion >= ProtocolConstants.MINECRAFT_1_20_2 )
{
copyMeta = buf.readByte();
}
}
@Override
@@ -87,7 +94,7 @@ public class Respawn extends DefinedPacket
{
if ( protocolVersion >= ProtocolConstants.MINECRAFT_1_16_2 && protocolVersion < ProtocolConstants.MINECRAFT_1_19 )
{
writeTag( (Tag) dimension, buf );
writeTag( (Tag) dimension, buf, protocolVersion );
} else
{
writeString( (String) dimension, buf );
@@ -111,7 +118,10 @@ public class Respawn extends DefinedPacket
buf.writeByte( previousGameMode );
buf.writeBoolean( debug );
buf.writeBoolean( flat );
buf.writeBoolean( copyMeta );
if ( protocolVersion < ProtocolConstants.MINECRAFT_1_20_2 )
{
buf.writeByte( copyMeta );
}
} else
{
writeString( levelType, buf );
@@ -132,6 +142,10 @@ public class Respawn extends DefinedPacket
{
writeVarInt( portalCooldown, buf );
}
if ( protocolVersion >= ProtocolConstants.MINECRAFT_1_20_2 )
{
buf.writeByte( copyMeta );
}
}
@Override

View File

@@ -7,6 +7,7 @@ import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import net.md_5.bungee.protocol.AbstractPacketHandler;
import net.md_5.bungee.protocol.DefinedPacket;
import net.md_5.bungee.protocol.ProtocolConstants;
@Data
@NoArgsConstructor
@@ -18,20 +19,32 @@ public class ScoreboardDisplay extends DefinedPacket
/**
* 0 = list, 1 = side, 2 = below.
*/
private byte position;
private int position;
private String name;
@Override
public void read(ByteBuf buf)
public void read(ByteBuf buf, ProtocolConstants.Direction direction, int protocolVersion)
{
position = buf.readByte();
if ( protocolVersion >= ProtocolConstants.MINECRAFT_1_20_2 )
{
position = readVarInt( buf );
} else
{
position = buf.readByte();
}
name = readString( buf );
}
@Override
public void write(ByteBuf buf)
public void write(ByteBuf buf, ProtocolConstants.Direction direction, int protocolVersion)
{
buf.writeByte( position );
if ( protocolVersion >= ProtocolConstants.MINECRAFT_1_20_2 )
{
writeVarInt( position, buf );
} else
{
buf.writeByte( position );
}
writeString( name, buf );
}

View File

@@ -0,0 +1,37 @@
package net.md_5.bungee.protocol.packet;
import io.netty.buffer.ByteBuf;
import lombok.Data;
import lombok.EqualsAndHashCode;
import net.md_5.bungee.protocol.AbstractPacketHandler;
import net.md_5.bungee.protocol.DefinedPacket;
import net.md_5.bungee.protocol.Protocol;
import net.md_5.bungee.protocol.ProtocolConstants;
@Data
@EqualsAndHashCode(callSuper = false)
public class StartConfiguration extends DefinedPacket
{
@Override
public void read(ByteBuf buf, ProtocolConstants.Direction direction, int protocolVersion)
{
}
@Override
public void write(ByteBuf buf, ProtocolConstants.Direction direction, int protocolVersion)
{
}
@Override
public Protocol nextProtocol()
{
return Protocol.CONFIGURATION;
}
@Override
public void handle(AbstractPacketHandler handler) throws Exception
{
handler.handle( this );
}
}