Add optional 1.17 (21w19a) snapshot protocol support
Accessible via the net.md_5.bungee.protocol.snapshot JVM property.
This commit is contained in:
parent
5fa596fee9
commit
f0908b663f
@ -2,6 +2,7 @@ package net.md_5.bungee.protocol;
|
||||
|
||||
import net.md_5.bungee.protocol.packet.BossBar;
|
||||
import net.md_5.bungee.protocol.packet.Chat;
|
||||
import net.md_5.bungee.protocol.packet.ClearTitles;
|
||||
import net.md_5.bungee.protocol.packet.ClientSettings;
|
||||
import net.md_5.bungee.protocol.packet.ClientStatus;
|
||||
import net.md_5.bungee.protocol.packet.Commands;
|
||||
@ -30,10 +31,12 @@ import net.md_5.bungee.protocol.packet.ScoreboardScore;
|
||||
import net.md_5.bungee.protocol.packet.SetCompression;
|
||||
import net.md_5.bungee.protocol.packet.StatusRequest;
|
||||
import net.md_5.bungee.protocol.packet.StatusResponse;
|
||||
import net.md_5.bungee.protocol.packet.Subtitle;
|
||||
import net.md_5.bungee.protocol.packet.TabCompleteRequest;
|
||||
import net.md_5.bungee.protocol.packet.TabCompleteResponse;
|
||||
import net.md_5.bungee.protocol.packet.Team;
|
||||
import net.md_5.bungee.protocol.packet.Title;
|
||||
import net.md_5.bungee.protocol.packet.TitleTimes;
|
||||
import net.md_5.bungee.protocol.packet.ViewDistance;
|
||||
|
||||
public abstract class AbstractPacketHandler
|
||||
@ -127,6 +130,18 @@ public abstract class AbstractPacketHandler
|
||||
{
|
||||
}
|
||||
|
||||
public void handle(Subtitle title) throws Exception
|
||||
{
|
||||
}
|
||||
|
||||
public void handle(TitleTimes title) throws Exception
|
||||
{
|
||||
}
|
||||
|
||||
public void handle(ClearTitles title) throws Exception
|
||||
{
|
||||
}
|
||||
|
||||
public void handle(PluginMessage pluginMessage) throws Exception
|
||||
{
|
||||
}
|
||||
|
@ -11,6 +11,7 @@ import lombok.Data;
|
||||
import lombok.Getter;
|
||||
import net.md_5.bungee.protocol.packet.BossBar;
|
||||
import net.md_5.bungee.protocol.packet.Chat;
|
||||
import net.md_5.bungee.protocol.packet.ClearTitles;
|
||||
import net.md_5.bungee.protocol.packet.ClientSettings;
|
||||
import net.md_5.bungee.protocol.packet.Commands;
|
||||
import net.md_5.bungee.protocol.packet.EncryptionRequest;
|
||||
@ -36,10 +37,12 @@ import net.md_5.bungee.protocol.packet.ScoreboardScore;
|
||||
import net.md_5.bungee.protocol.packet.SetCompression;
|
||||
import net.md_5.bungee.protocol.packet.StatusRequest;
|
||||
import net.md_5.bungee.protocol.packet.StatusResponse;
|
||||
import net.md_5.bungee.protocol.packet.Subtitle;
|
||||
import net.md_5.bungee.protocol.packet.TabCompleteRequest;
|
||||
import net.md_5.bungee.protocol.packet.TabCompleteResponse;
|
||||
import net.md_5.bungee.protocol.packet.Team;
|
||||
import net.md_5.bungee.protocol.packet.Title;
|
||||
import net.md_5.bungee.protocol.packet.TitleTimes;
|
||||
import net.md_5.bungee.protocol.packet.ViewDistance;
|
||||
|
||||
public enum Protocol
|
||||
@ -69,7 +72,8 @@ public enum Protocol
|
||||
map( ProtocolConstants.MINECRAFT_1_14, 0x20 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_15, 0x21 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_16, 0x20 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_16_2, 0x1F )
|
||||
map( ProtocolConstants.MINECRAFT_1_16_2, 0x1F ),
|
||||
map( ProtocolConstants.MINECRAFT_1_17, 0x21 )
|
||||
);
|
||||
TO_CLIENT.registerPacket(
|
||||
Login.class,
|
||||
@ -78,7 +82,8 @@ public enum Protocol
|
||||
map( ProtocolConstants.MINECRAFT_1_13, 0x25 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_15, 0x26 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_16, 0x25 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_16_2, 0x24 )
|
||||
map( ProtocolConstants.MINECRAFT_1_16_2, 0x24 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_17, 0x26 )
|
||||
);
|
||||
TO_CLIENT.registerPacket(
|
||||
Chat.class,
|
||||
@ -86,7 +91,8 @@ public enum Protocol
|
||||
map( ProtocolConstants.MINECRAFT_1_9, 0x0F ),
|
||||
map( ProtocolConstants.MINECRAFT_1_13, 0x0E ),
|
||||
map( ProtocolConstants.MINECRAFT_1_15, 0x0F ),
|
||||
map( ProtocolConstants.MINECRAFT_1_16, 0x0E )
|
||||
map( ProtocolConstants.MINECRAFT_1_16, 0x0E ),
|
||||
map( ProtocolConstants.MINECRAFT_1_17, 0x0F )
|
||||
);
|
||||
TO_CLIENT.registerPacket(
|
||||
Respawn.class,
|
||||
@ -98,13 +104,15 @@ public enum Protocol
|
||||
map( ProtocolConstants.MINECRAFT_1_14, 0x3A ),
|
||||
map( ProtocolConstants.MINECRAFT_1_15, 0x3B ),
|
||||
map( ProtocolConstants.MINECRAFT_1_16, 0x3A ),
|
||||
map( ProtocolConstants.MINECRAFT_1_16_2, 0x39 )
|
||||
map( ProtocolConstants.MINECRAFT_1_16_2, 0x39 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_17, 0x3D )
|
||||
);
|
||||
TO_CLIENT.registerPacket(
|
||||
BossBar.class,
|
||||
map( ProtocolConstants.MINECRAFT_1_9, 0x0C ),
|
||||
map( ProtocolConstants.MINECRAFT_1_15, 0x0D ),
|
||||
map( ProtocolConstants.MINECRAFT_1_16, 0x0C )
|
||||
map( ProtocolConstants.MINECRAFT_1_16, 0x0C ),
|
||||
map( ProtocolConstants.MINECRAFT_1_17, 0x0D )
|
||||
);
|
||||
TO_CLIENT.registerPacket(
|
||||
PlayerListItem.class, // PlayerInfo
|
||||
@ -115,7 +123,8 @@ public enum Protocol
|
||||
map( ProtocolConstants.MINECRAFT_1_14, 0x33 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_15, 0x34 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_16, 0x33 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_16_2, 0x32 )
|
||||
map( ProtocolConstants.MINECRAFT_1_16_2, 0x32 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_17, 0x36 )
|
||||
);
|
||||
TO_CLIENT.registerPacket(
|
||||
TabCompleteResponse.class,
|
||||
@ -124,7 +133,8 @@ public enum Protocol
|
||||
map( ProtocolConstants.MINECRAFT_1_13, 0x10 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_15, 0x11 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_16, 0x10 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_16_2, 0x0F )
|
||||
map( ProtocolConstants.MINECRAFT_1_16_2, 0x0F ),
|
||||
map( ProtocolConstants.MINECRAFT_1_17, 0x11 )
|
||||
);
|
||||
TO_CLIENT.registerPacket(
|
||||
ScoreboardObjective.class,
|
||||
@ -134,7 +144,8 @@ public enum Protocol
|
||||
map( ProtocolConstants.MINECRAFT_1_12_1, 0x42 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_13, 0x45 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_14, 0x49 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_15, 0x4A )
|
||||
map( ProtocolConstants.MINECRAFT_1_15, 0x4A ),
|
||||
map( ProtocolConstants.MINECRAFT_1_17, 0x53 )
|
||||
);
|
||||
TO_CLIENT.registerPacket(
|
||||
ScoreboardScore.class,
|
||||
@ -144,7 +155,8 @@ public enum Protocol
|
||||
map( ProtocolConstants.MINECRAFT_1_12_1, 0x45 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_13, 0x48 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_14, 0x4C ),
|
||||
map( ProtocolConstants.MINECRAFT_1_15, 0x4D )
|
||||
map( ProtocolConstants.MINECRAFT_1_15, 0x4D ),
|
||||
map( ProtocolConstants.MINECRAFT_1_17, 0x56 )
|
||||
);
|
||||
TO_CLIENT.registerPacket(
|
||||
ScoreboardDisplay.class,
|
||||
@ -154,7 +166,8 @@ public enum Protocol
|
||||
map( ProtocolConstants.MINECRAFT_1_12_1, 0x3B ),
|
||||
map( ProtocolConstants.MINECRAFT_1_13, 0x3E ),
|
||||
map( ProtocolConstants.MINECRAFT_1_14, 0x42 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_15, 0x43 )
|
||||
map( ProtocolConstants.MINECRAFT_1_15, 0x43 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_17, 0x4C )
|
||||
);
|
||||
TO_CLIENT.registerPacket(
|
||||
Team.class,
|
||||
@ -164,7 +177,8 @@ public enum Protocol
|
||||
map( ProtocolConstants.MINECRAFT_1_12_1, 0x44 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_13, 0x47 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_14, 0x4B ),
|
||||
map( ProtocolConstants.MINECRAFT_1_15, 0x4C )
|
||||
map( ProtocolConstants.MINECRAFT_1_15, 0x4C ),
|
||||
map( ProtocolConstants.MINECRAFT_1_17, 0x55 )
|
||||
);
|
||||
TO_CLIENT.registerPacket(
|
||||
PluginMessage.class,
|
||||
@ -174,7 +188,8 @@ public enum Protocol
|
||||
map( ProtocolConstants.MINECRAFT_1_14, 0x18 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_15, 0x19 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_16, 0x18 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_16_2, 0x17 )
|
||||
map( ProtocolConstants.MINECRAFT_1_16_2, 0x17 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_17, 0x18 )
|
||||
);
|
||||
TO_CLIENT.registerPacket(
|
||||
Kick.class,
|
||||
@ -184,7 +199,8 @@ public enum Protocol
|
||||
map( ProtocolConstants.MINECRAFT_1_14, 0x1A ),
|
||||
map( ProtocolConstants.MINECRAFT_1_15, 0x1B ),
|
||||
map( ProtocolConstants.MINECRAFT_1_16, 0x1A ),
|
||||
map( ProtocolConstants.MINECRAFT_1_16_2, 0x19 )
|
||||
map( ProtocolConstants.MINECRAFT_1_16_2, 0x19 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_17, 0x1A )
|
||||
);
|
||||
TO_CLIENT.registerPacket(
|
||||
Title.class,
|
||||
@ -194,7 +210,18 @@ public enum Protocol
|
||||
map( ProtocolConstants.MINECRAFT_1_13, 0x4B ),
|
||||
map( ProtocolConstants.MINECRAFT_1_14, 0x4F ),
|
||||
map( ProtocolConstants.MINECRAFT_1_15, 0x50 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_16, 0x4F )
|
||||
map( ProtocolConstants.MINECRAFT_1_16, 0x4F ),
|
||||
map( ProtocolConstants.MINECRAFT_1_17, 0x59 )
|
||||
);
|
||||
TO_CLIENT.registerPacket( ClearTitles.class,
|
||||
map( ProtocolConstants.MINECRAFT_1_17, 0x10 )
|
||||
);
|
||||
TO_CLIENT.registerPacket(
|
||||
Subtitle.class,
|
||||
map( ProtocolConstants.MINECRAFT_1_17, 0x57 )
|
||||
);
|
||||
TO_CLIENT.registerPacket( TitleTimes.class,
|
||||
map( ProtocolConstants.MINECRAFT_1_17, 0x5A )
|
||||
);
|
||||
TO_CLIENT.registerPacket(
|
||||
PlayerListHeaderFooter.class,
|
||||
@ -206,7 +233,8 @@ public enum Protocol
|
||||
map( ProtocolConstants.MINECRAFT_1_13, 0x4E ),
|
||||
map( ProtocolConstants.MINECRAFT_1_14, 0x53 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_15, 0x54 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_16, 0x53 )
|
||||
map( ProtocolConstants.MINECRAFT_1_16, 0x53 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_17, 0x5E )
|
||||
);
|
||||
TO_CLIENT.registerPacket(
|
||||
EntityStatus.class,
|
||||
@ -216,26 +244,30 @@ public enum Protocol
|
||||
map( ProtocolConstants.MINECRAFT_1_14, 0x1B ),
|
||||
map( ProtocolConstants.MINECRAFT_1_15, 0x1C ),
|
||||
map( ProtocolConstants.MINECRAFT_1_16, 0x1B ),
|
||||
map( ProtocolConstants.MINECRAFT_1_16_2, 0x1A )
|
||||
map( ProtocolConstants.MINECRAFT_1_16_2, 0x1A ),
|
||||
map( ProtocolConstants.MINECRAFT_1_17, 0x1B )
|
||||
);
|
||||
TO_CLIENT.registerPacket(
|
||||
Commands.class,
|
||||
map( ProtocolConstants.MINECRAFT_1_13, 0x11 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_15, 0x12 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_16, 0x11 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_16_2, 0x10 )
|
||||
map( ProtocolConstants.MINECRAFT_1_16_2, 0x10 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_17, 0x12 )
|
||||
);
|
||||
TO_CLIENT.registerPacket(
|
||||
GameState.class,
|
||||
map( ProtocolConstants.MINECRAFT_1_15, 0x1F ),
|
||||
map( ProtocolConstants.MINECRAFT_1_16, 0x1E ),
|
||||
map( ProtocolConstants.MINECRAFT_1_16_2, 0x1D )
|
||||
map( ProtocolConstants.MINECRAFT_1_16_2, 0x1D ),
|
||||
map( ProtocolConstants.MINECRAFT_1_17, 0x1E )
|
||||
);
|
||||
TO_CLIENT.registerPacket(
|
||||
ViewDistance.class,
|
||||
map( ProtocolConstants.MINECRAFT_1_14, 0x41 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_15, 0x42 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_16, 0x41 )
|
||||
map( ProtocolConstants.MINECRAFT_1_16, 0x41 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_17, 0x4A )
|
||||
);
|
||||
|
||||
TO_SERVER.registerPacket(
|
||||
@ -246,7 +278,8 @@ public enum Protocol
|
||||
map( ProtocolConstants.MINECRAFT_1_12_1, 0x0B ),
|
||||
map( ProtocolConstants.MINECRAFT_1_13, 0x0E ),
|
||||
map( ProtocolConstants.MINECRAFT_1_14, 0x0F ),
|
||||
map( ProtocolConstants.MINECRAFT_1_16, 0x10 )
|
||||
map( ProtocolConstants.MINECRAFT_1_16, 0x10 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_17, 0x0F )
|
||||
);
|
||||
TO_SERVER.registerPacket(
|
||||
Chat.class,
|
||||
@ -280,7 +313,8 @@ public enum Protocol
|
||||
map( ProtocolConstants.MINECRAFT_1_12, 0x0A ),
|
||||
map( ProtocolConstants.MINECRAFT_1_12_1, 0x09 ),
|
||||
map( ProtocolConstants.MINECRAFT_1_13, 0x0A ),
|
||||
map( ProtocolConstants.MINECRAFT_1_14, 0x0B )
|
||||
map( ProtocolConstants.MINECRAFT_1_14, 0x0B ),
|
||||
map( ProtocolConstants.MINECRAFT_1_17, 0x0A )
|
||||
);
|
||||
}
|
||||
},
|
||||
|
@ -1,11 +1,12 @@
|
||||
package net.md_5.bungee.protocol;
|
||||
|
||||
import java.util.Arrays;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import java.util.List;
|
||||
|
||||
public class ProtocolConstants
|
||||
{
|
||||
|
||||
private static final boolean SNAPSHOT_SUPPORT = Boolean.getBoolean( "net.md_5.bungee.protocol.snapshot" );
|
||||
public static final int MINECRAFT_1_8 = 47;
|
||||
public static final int MINECRAFT_1_9 = 107;
|
||||
public static final int MINECRAFT_1_9_1 = 108;
|
||||
@ -33,7 +34,13 @@ public class ProtocolConstants
|
||||
public static final int MINECRAFT_1_16_2 = 751;
|
||||
public static final int MINECRAFT_1_16_3 = 753;
|
||||
public static final int MINECRAFT_1_16_4 = 754;
|
||||
public static final List<String> SUPPORTED_VERSIONS = Arrays.asList(
|
||||
public static final int MINECRAFT_1_17 = 1073741851;
|
||||
public static final List<String> SUPPORTED_VERSIONS;
|
||||
public static final List<Integer> SUPPORTED_VERSION_IDS;
|
||||
|
||||
static
|
||||
{
|
||||
ImmutableList.Builder<String> supportedVersions = ImmutableList.<String>builder().add(
|
||||
"1.8.x",
|
||||
"1.9.x",
|
||||
"1.10.x",
|
||||
@ -44,7 +51,7 @@ public class ProtocolConstants
|
||||
"1.15.x",
|
||||
"1.16.x"
|
||||
);
|
||||
public static final List<Integer> SUPPORTED_VERSION_IDS = Arrays.asList(
|
||||
ImmutableList.Builder<Integer> supportedVersionIds = ImmutableList.<Integer>builder().add(
|
||||
ProtocolConstants.MINECRAFT_1_8,
|
||||
ProtocolConstants.MINECRAFT_1_9,
|
||||
ProtocolConstants.MINECRAFT_1_9_1,
|
||||
@ -74,6 +81,16 @@ public class ProtocolConstants
|
||||
ProtocolConstants.MINECRAFT_1_16_4
|
||||
);
|
||||
|
||||
if ( SNAPSHOT_SUPPORT )
|
||||
{
|
||||
supportedVersions.add( "1.17.x" );
|
||||
supportedVersionIds.add( ProtocolConstants.MINECRAFT_1_17 );
|
||||
}
|
||||
|
||||
SUPPORTED_VERSIONS = supportedVersions.build();
|
||||
SUPPORTED_VERSION_IDS = supportedVersionIds.build();
|
||||
}
|
||||
|
||||
public enum Direction
|
||||
{
|
||||
|
||||
|
@ -0,0 +1,38 @@
|
||||
package net.md_5.bungee.protocol.packet;
|
||||
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
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
|
||||
@AllArgsConstructor
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
public class ClearTitles extends DefinedPacket
|
||||
{
|
||||
|
||||
private boolean reset;
|
||||
|
||||
@Override
|
||||
public void read(ByteBuf buf, ProtocolConstants.Direction direction, int protocolVersion)
|
||||
{
|
||||
reset = buf.readBoolean();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void write(ByteBuf buf, ProtocolConstants.Direction direction, int protocolVersion)
|
||||
{
|
||||
buf.writeBoolean( reset );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handle(AbstractPacketHandler handler) throws Exception
|
||||
{
|
||||
handler.handle( this );
|
||||
}
|
||||
}
|
@ -23,6 +23,7 @@ public class ClientSettings extends DefinedPacket
|
||||
private byte difficulty;
|
||||
private byte skinParts;
|
||||
private int mainHand;
|
||||
private boolean disableTextFiltering;
|
||||
|
||||
@Override
|
||||
public void read(ByteBuf buf, ProtocolConstants.Direction direction, int protocolVersion)
|
||||
@ -36,6 +37,10 @@ public class ClientSettings extends DefinedPacket
|
||||
{
|
||||
mainHand = DefinedPacket.readVarInt( buf );
|
||||
}
|
||||
if ( protocolVersion >= ProtocolConstants.MINECRAFT_1_17 )
|
||||
{
|
||||
disableTextFiltering = buf.readBoolean();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -56,6 +61,10 @@ public class ClientSettings extends DefinedPacket
|
||||
{
|
||||
DefinedPacket.writeVarInt( mainHand, buf );
|
||||
}
|
||||
if ( protocolVersion >= ProtocolConstants.MINECRAFT_1_17 )
|
||||
{
|
||||
buf.writeBoolean( disableTextFiltering );
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -0,0 +1,36 @@
|
||||
package net.md_5.bungee.protocol.packet;
|
||||
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import lombok.Data;
|
||||
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
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
public class Subtitle extends DefinedPacket
|
||||
{
|
||||
|
||||
private String text;
|
||||
|
||||
@Override
|
||||
public void read(ByteBuf buf, ProtocolConstants.Direction direction, int protocolVersion)
|
||||
{
|
||||
text = readString( buf );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void write(ByteBuf buf, ProtocolConstants.Direction direction, int protocolVersion)
|
||||
{
|
||||
writeString( text, buf );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handle(AbstractPacketHandler handler) throws Exception
|
||||
{
|
||||
handler.handle( this );
|
||||
}
|
||||
}
|
@ -24,9 +24,20 @@ public class Title extends DefinedPacket
|
||||
private int stay;
|
||||
private int fadeOut;
|
||||
|
||||
public Title(Action action)
|
||||
{
|
||||
this.action = action;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void read(ByteBuf buf, ProtocolConstants.Direction direction, int protocolVersion)
|
||||
{
|
||||
if ( protocolVersion >= ProtocolConstants.MINECRAFT_1_17 )
|
||||
{
|
||||
text = readString( buf );
|
||||
return;
|
||||
}
|
||||
|
||||
int index = readVarInt( buf );
|
||||
|
||||
// If we're working on 1.10 or lower, increment the value of the index so we pull out the correct value.
|
||||
@ -54,6 +65,12 @@ public class Title extends DefinedPacket
|
||||
@Override
|
||||
public void write(ByteBuf buf, ProtocolConstants.Direction direction, int protocolVersion)
|
||||
{
|
||||
if ( protocolVersion >= ProtocolConstants.MINECRAFT_1_17 )
|
||||
{
|
||||
writeString( text, buf );
|
||||
return;
|
||||
}
|
||||
|
||||
int index = action.ordinal();
|
||||
|
||||
// If we're working on 1.10 or lower, increment the value of the index so we pull out the correct value.
|
||||
|
@ -0,0 +1,42 @@
|
||||
package net.md_5.bungee.protocol.packet;
|
||||
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import lombok.Data;
|
||||
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
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
public class TitleTimes extends DefinedPacket
|
||||
{
|
||||
|
||||
private int fadeIn;
|
||||
private int stay;
|
||||
private int fadeOut;
|
||||
|
||||
@Override
|
||||
public void read(ByteBuf buf, ProtocolConstants.Direction direction, int protocolVersion)
|
||||
{
|
||||
fadeIn = buf.readInt();
|
||||
stay = buf.readInt();
|
||||
fadeOut = buf.readInt();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void write(ByteBuf buf, ProtocolConstants.Direction direction, int protocolVersion)
|
||||
{
|
||||
buf.writeInt( fadeIn );
|
||||
buf.writeInt( stay );
|
||||
buf.writeInt( fadeOut );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handle(AbstractPacketHandler handler) throws Exception
|
||||
{
|
||||
handler.handle( this );
|
||||
}
|
||||
}
|
@ -1,29 +1,46 @@
|
||||
package net.md_5.bungee;
|
||||
|
||||
import lombok.Data;
|
||||
import net.md_5.bungee.api.Title;
|
||||
import net.md_5.bungee.api.chat.BaseComponent;
|
||||
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
||||
import net.md_5.bungee.chat.ComponentSerializer;
|
||||
import net.md_5.bungee.protocol.DefinedPacket;
|
||||
import net.md_5.bungee.protocol.ProtocolConstants;
|
||||
import net.md_5.bungee.protocol.packet.ClearTitles;
|
||||
import net.md_5.bungee.protocol.packet.Subtitle;
|
||||
import net.md_5.bungee.protocol.packet.Title.Action;
|
||||
import net.md_5.bungee.protocol.packet.TitleTimes;
|
||||
|
||||
public class BungeeTitle implements Title
|
||||
{
|
||||
|
||||
private net.md_5.bungee.protocol.packet.Title title, subtitle, times, clear, reset;
|
||||
private TitlePacketHolder<net.md_5.bungee.protocol.packet.Title> title;
|
||||
private TitlePacketHolder<Subtitle> subtitle;
|
||||
private TitlePacketHolder<TitleTimes> times;
|
||||
private TitlePacketHolder<ClearTitles> clear;
|
||||
private TitlePacketHolder<ClearTitles> reset;
|
||||
|
||||
private static net.md_5.bungee.protocol.packet.Title createPacket(Action action)
|
||||
@Data
|
||||
private static class TitlePacketHolder<T extends DefinedPacket>
|
||||
{
|
||||
net.md_5.bungee.protocol.packet.Title title = new net.md_5.bungee.protocol.packet.Title();
|
||||
title.setAction( action );
|
||||
|
||||
if ( action == Action.TIMES )
|
||||
{
|
||||
// Set packet to default values first
|
||||
title.setFadeIn( 20 );
|
||||
title.setStay( 60 );
|
||||
title.setFadeOut( 20 );
|
||||
private final net.md_5.bungee.protocol.packet.Title oldPacket;
|
||||
private final T newPacket;
|
||||
}
|
||||
|
||||
private static TitlePacketHolder<TitleTimes> createAnimationPacket()
|
||||
{
|
||||
TitlePacketHolder<TitleTimes> title = new TitlePacketHolder<>( new net.md_5.bungee.protocol.packet.Title( Action.TIMES ), new TitleTimes() );
|
||||
|
||||
title.oldPacket.setFadeIn( 20 );
|
||||
title.oldPacket.setStay( 60 );
|
||||
title.oldPacket.setFadeOut( 20 );
|
||||
|
||||
title.newPacket.setFadeIn( 20 );
|
||||
title.newPacket.setStay( 60 );
|
||||
title.newPacket.setFadeOut( 20 );
|
||||
|
||||
return title;
|
||||
}
|
||||
|
||||
@ -32,10 +49,11 @@ public class BungeeTitle implements Title
|
||||
{
|
||||
if ( title == null )
|
||||
{
|
||||
title = createPacket( Action.TITLE );
|
||||
net.md_5.bungee.protocol.packet.Title packet = new net.md_5.bungee.protocol.packet.Title( Action.TITLE );
|
||||
title = new TitlePacketHolder<>( packet, packet );
|
||||
}
|
||||
|
||||
title.setText( ComponentSerializer.toString( text ) );
|
||||
title.oldPacket.setText( ComponentSerializer.toString( text ) ); // = newPacket
|
||||
return this;
|
||||
}
|
||||
|
||||
@ -44,10 +62,11 @@ public class BungeeTitle implements Title
|
||||
{
|
||||
if ( title == null )
|
||||
{
|
||||
title = createPacket( Action.TITLE );
|
||||
net.md_5.bungee.protocol.packet.Title packet = new net.md_5.bungee.protocol.packet.Title( Action.TITLE );
|
||||
title = new TitlePacketHolder<>( packet, packet );
|
||||
}
|
||||
|
||||
title.setText( ComponentSerializer.toString( text ) );
|
||||
title.oldPacket.setText( ComponentSerializer.toString( text ) ); // = newPacket
|
||||
return this;
|
||||
}
|
||||
|
||||
@ -56,10 +75,12 @@ public class BungeeTitle implements Title
|
||||
{
|
||||
if ( subtitle == null )
|
||||
{
|
||||
subtitle = createPacket( Action.SUBTITLE );
|
||||
subtitle = new TitlePacketHolder<>( new net.md_5.bungee.protocol.packet.Title( Action.SUBTITLE ), new Subtitle() );
|
||||
}
|
||||
|
||||
subtitle.setText( ComponentSerializer.toString( text ) );
|
||||
String serialized = ComponentSerializer.toString( text );
|
||||
subtitle.oldPacket.setText( serialized );
|
||||
subtitle.newPacket.setText( serialized );
|
||||
return this;
|
||||
}
|
||||
|
||||
@ -68,10 +89,12 @@ public class BungeeTitle implements Title
|
||||
{
|
||||
if ( subtitle == null )
|
||||
{
|
||||
subtitle = createPacket( Action.SUBTITLE );
|
||||
subtitle = new TitlePacketHolder<>( new net.md_5.bungee.protocol.packet.Title( Action.SUBTITLE ), new Subtitle() );
|
||||
}
|
||||
|
||||
subtitle.setText( ComponentSerializer.toString( text ) );
|
||||
String serialized = ComponentSerializer.toString( text );
|
||||
subtitle.oldPacket.setText( serialized );
|
||||
subtitle.newPacket.setText( serialized );
|
||||
return this;
|
||||
}
|
||||
|
||||
@ -80,10 +103,11 @@ public class BungeeTitle implements Title
|
||||
{
|
||||
if ( times == null )
|
||||
{
|
||||
times = createPacket( Action.TIMES );
|
||||
times = createAnimationPacket();
|
||||
}
|
||||
|
||||
times.setFadeIn( ticks );
|
||||
times.oldPacket.setFadeIn( ticks );
|
||||
times.newPacket.setFadeIn( ticks );
|
||||
return this;
|
||||
}
|
||||
|
||||
@ -92,10 +116,11 @@ public class BungeeTitle implements Title
|
||||
{
|
||||
if ( times == null )
|
||||
{
|
||||
times = createPacket( Action.TIMES );
|
||||
times = createAnimationPacket();
|
||||
}
|
||||
|
||||
times.setStay( ticks );
|
||||
times.oldPacket.setStay( ticks );
|
||||
times.newPacket.setStay( ticks );
|
||||
return this;
|
||||
}
|
||||
|
||||
@ -104,10 +129,11 @@ public class BungeeTitle implements Title
|
||||
{
|
||||
if ( times == null )
|
||||
{
|
||||
times = createPacket( Action.TIMES );
|
||||
times = createAnimationPacket();
|
||||
}
|
||||
|
||||
times.setFadeOut( ticks );
|
||||
times.oldPacket.setFadeOut( ticks );
|
||||
times.newPacket.setFadeOut( ticks );
|
||||
return this;
|
||||
}
|
||||
|
||||
@ -116,7 +142,7 @@ public class BungeeTitle implements Title
|
||||
{
|
||||
if ( clear == null )
|
||||
{
|
||||
clear = createPacket( Action.CLEAR );
|
||||
clear = new TitlePacketHolder<>( new net.md_5.bungee.protocol.packet.Title( Action.CLEAR ), new ClearTitles() );
|
||||
}
|
||||
|
||||
title = null; // No need to send title if we clear it after that again
|
||||
@ -129,7 +155,7 @@ public class BungeeTitle implements Title
|
||||
{
|
||||
if ( reset == null )
|
||||
{
|
||||
reset = createPacket( Action.RESET );
|
||||
reset = new TitlePacketHolder<>( new net.md_5.bungee.protocol.packet.Title( Action.RESET ), new ClearTitles( true ) );
|
||||
}
|
||||
|
||||
// No need to send these packets if we reset them later
|
||||
@ -140,11 +166,17 @@ public class BungeeTitle implements Title
|
||||
return this;
|
||||
}
|
||||
|
||||
private static void sendPacket(ProxiedPlayer player, DefinedPacket packet)
|
||||
private static void sendPacket(ProxiedPlayer player, TitlePacketHolder packet)
|
||||
{
|
||||
if ( packet != null )
|
||||
{
|
||||
player.unsafe().sendPacket( packet );
|
||||
if ( player.getPendingConnection().getVersion() >= ProtocolConstants.MINECRAFT_1_17 )
|
||||
{
|
||||
player.unsafe().sendPacket( packet.newPacket );
|
||||
} else
|
||||
{
|
||||
player.unsafe().sendPacket( packet.oldPacket );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -68,6 +68,8 @@ public abstract class EntityMap
|
||||
case ProtocolConstants.MINECRAFT_1_16_3:
|
||||
case ProtocolConstants.MINECRAFT_1_16_4:
|
||||
return EntityMap_1_16_2.INSTANCE_1_16_2;
|
||||
case ProtocolConstants.MINECRAFT_1_17:
|
||||
return EntityMap_1_16_2.INSTANCE_1_17;
|
||||
}
|
||||
throw new RuntimeException( "Version " + version + " has no entity map" );
|
||||
}
|
||||
|
@ -15,6 +15,7 @@ class EntityMap_1_16_2 extends EntityMap
|
||||
{
|
||||
|
||||
static final EntityMap_1_16_2 INSTANCE_1_16_2 = new EntityMap_1_16_2( 0x04, 0x2D );
|
||||
static final EntityMap_1_16_2 INSTANCE_1_17 = new EntityMap_1_16_2( 0x04, 0x2D );
|
||||
//
|
||||
private final int spawnPlayerId;
|
||||
private final int spectateId;
|
||||
|
Loading…
Reference in New Issue
Block a user