Minecraft 1.20.2-rc1 support
This commit is contained in:
@@ -96,7 +96,7 @@
|
||||
<dependency>
|
||||
<groupId>com.mysql</groupId>
|
||||
<artifactId>mysql-connector-j</artifactId>
|
||||
<version>8.0.33</version>
|
||||
<version>8.1.0</version>
|
||||
<scope>runtime</scope>
|
||||
</dependency>
|
||||
<!-- add these back in as they are not exposed by the API -->
|
||||
|
@@ -43,6 +43,7 @@ import net.md_5.bungee.protocol.packet.GameState;
|
||||
import net.md_5.bungee.protocol.packet.Handshake;
|
||||
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;
|
||||
@@ -52,6 +53,7 @@ import net.md_5.bungee.protocol.packet.Respawn;
|
||||
import net.md_5.bungee.protocol.packet.ScoreboardObjective;
|
||||
import net.md_5.bungee.protocol.packet.ScoreboardScore;
|
||||
import net.md_5.bungee.protocol.packet.SetCompression;
|
||||
import net.md_5.bungee.protocol.packet.StartConfiguration;
|
||||
import net.md_5.bungee.protocol.packet.ViewDistance;
|
||||
import net.md_5.bungee.util.AddressUtil;
|
||||
import net.md_5.bungee.util.BufUtil;
|
||||
@@ -145,8 +147,15 @@ public class ServerConnector extends PacketHandler
|
||||
public void handle(LoginSuccess loginSuccess) throws Exception
|
||||
{
|
||||
Preconditions.checkState( thisState == State.LOGIN_SUCCESS, "Not expecting LOGIN_SUCCESS" );
|
||||
ch.setProtocol( Protocol.GAME );
|
||||
thisState = State.LOGIN;
|
||||
if ( user.getPendingConnection().getVersion() >= ProtocolConstants.MINECRAFT_1_20_2 )
|
||||
{
|
||||
ServerConnection server = new ServerConnection( ch, target );
|
||||
cutThrough( server );
|
||||
} else
|
||||
{
|
||||
ch.setProtocol( Protocol.GAME );
|
||||
thisState = State.LOGIN;
|
||||
}
|
||||
|
||||
// Only reset the Forge client when:
|
||||
// 1) The user is switching servers (so has a current server)
|
||||
@@ -182,6 +191,12 @@ public class ServerConnector extends PacketHandler
|
||||
Preconditions.checkState( thisState == State.LOGIN, "Not expecting LOGIN" );
|
||||
|
||||
ServerConnection server = new ServerConnection( ch, target );
|
||||
handleLogin( bungee, ch, user, target, handshakeHandler, server, login );
|
||||
cutThrough( server );
|
||||
}
|
||||
|
||||
public static void handleLogin(ProxyServer bungee, ChannelWrapper ch, UserConnection user, BungeeServerInfo target, ForgeServerHandler handshakeHandler, ServerConnection server, Login login) throws Exception
|
||||
{
|
||||
ServerConnectedEvent event = new ServerConnectedEvent( user, server );
|
||||
bungee.getPluginManager().callEvent( event );
|
||||
|
||||
@@ -225,14 +240,13 @@ public class ServerConnector extends PacketHandler
|
||||
|
||||
// Set tab list size, TODO: what shall we do about packet mutability
|
||||
Login modLogin = new Login( login.getEntityId(), login.isHardcore(), login.getGameMode(), login.getPreviousGameMode(), login.getWorldNames(), login.getDimensions(), login.getDimension(), login.getWorldName(), login.getSeed(), login.getDifficulty(),
|
||||
(byte) user.getPendingConnection().getListener().getTabListSize(), login.getLevelType(), login.getViewDistance(), login.getSimulationDistance(), login.isReducedDebugInfo(), login.isNormalRespawn(), login.isDebug(), login.isFlat(), login.getDeathLocation(),
|
||||
(byte) user.getPendingConnection().getListener().getTabListSize(), login.getLevelType(), login.getViewDistance(), login.getSimulationDistance(), login.isReducedDebugInfo(), login.isNormalRespawn(), login.isLimitedCrafting(), login.isDebug(), login.isFlat(), login.getDeathLocation(),
|
||||
login.getPortalCooldown() );
|
||||
|
||||
user.unsafe().sendPacket( modLogin );
|
||||
|
||||
if ( user.getServer() != null )
|
||||
if ( user.getDimension() != null )
|
||||
{
|
||||
user.getServer().setObsolete( true );
|
||||
user.getTabListHandler().onServerChange();
|
||||
|
||||
user.getServerSentScoreboard().clear();
|
||||
@@ -244,14 +258,15 @@ public class ServerConnector extends PacketHandler
|
||||
}
|
||||
user.getSentBossBars().clear();
|
||||
|
||||
user.unsafe().sendPacket( new Respawn( login.getDimension(), login.getWorldName(), login.getSeed(), login.getDifficulty(), login.getGameMode(), login.getPreviousGameMode(), login.getLevelType(), login.isDebug(), login.isFlat(), false, login.getDeathLocation(),
|
||||
user.unsafe().sendPacket( new Respawn( login.getDimension(), login.getWorldName(), login.getSeed(), login.getDifficulty(), login.getGameMode(), login.getPreviousGameMode(), login.getLevelType(), login.isDebug(), login.isFlat(), (byte) 0, login.getDeathLocation(),
|
||||
login.getPortalCooldown() ) );
|
||||
user.getServer().disconnect( "Quitting" );
|
||||
} else
|
||||
{
|
||||
user.unsafe().sendPacket( BungeeCord.getInstance().registerChannels( user.getPendingConnection().getVersion() ) );
|
||||
|
||||
ByteBuf brand = ByteBufAllocator.DEFAULT.heapBuffer();
|
||||
DefinedPacket.writeString( bungee.getName() + " (" + bungee.getVersion() + ")", brand );
|
||||
user.unsafe().sendPacket( new PluginMessage( user.getPendingConnection().getVersion() >= ProtocolConstants.MINECRAFT_1_13 ? "minecraft:brand" : "MC|Brand", DefinedPacket.toArray( brand ), handshakeHandler.isServerForge() ) );
|
||||
user.unsafe().sendPacket( new PluginMessage( user.getPendingConnection().getVersion() >= ProtocolConstants.MINECRAFT_1_13 ? "minecraft:brand" : "MC|Brand", DefinedPacket.toArray( brand ), handshakeHandler != null && handshakeHandler.isServerForge() ) );
|
||||
brand.release();
|
||||
}
|
||||
|
||||
@@ -295,19 +310,40 @@ public class ServerConnector extends PacketHandler
|
||||
if ( login.getDimension() == user.getDimension() )
|
||||
{
|
||||
user.unsafe().sendPacket( new Respawn( (Integer) login.getDimension() >= 0 ? -1 : 0, login.getWorldName(), login.getSeed(), login.getDifficulty(), login.getGameMode(), login.getPreviousGameMode(), login.getLevelType(), login.isDebug(), login.isFlat(),
|
||||
false, login.getDeathLocation(), login.getPortalCooldown() ) );
|
||||
(byte) 0, login.getDeathLocation(), login.getPortalCooldown() ) );
|
||||
}
|
||||
|
||||
user.setServerEntityId( login.getEntityId() );
|
||||
user.unsafe().sendPacket( new Respawn( login.getDimension(), login.getWorldName(), login.getSeed(), login.getDifficulty(), login.getGameMode(), login.getPreviousGameMode(), login.getLevelType(), login.isDebug(), login.isFlat(),
|
||||
false, login.getDeathLocation(), login.getPortalCooldown() ) );
|
||||
(byte) 0, login.getDeathLocation(), login.getPortalCooldown() ) );
|
||||
if ( user.getPendingConnection().getVersion() >= ProtocolConstants.MINECRAFT_1_14 )
|
||||
{
|
||||
user.unsafe().sendPacket( new ViewDistance( login.getViewDistance() ) );
|
||||
}
|
||||
user.setDimension( login.getDimension() );
|
||||
}
|
||||
}
|
||||
|
||||
// Remove from old servers
|
||||
private void cutThrough(ServerConnection server)
|
||||
{
|
||||
if ( user.getPendingConnection().getVersion() >= ProtocolConstants.MINECRAFT_1_20_2 )
|
||||
{
|
||||
if ( user.getServer() != null )
|
||||
{
|
||||
// Begin config mode
|
||||
user.unsafe().sendPacket( new StartConfiguration() );
|
||||
} else
|
||||
{
|
||||
ch.setDecodeProtocol( Protocol.CONFIGURATION );
|
||||
ch.write( new LoginAcknowledged() );
|
||||
ch.setEncodeProtocol( Protocol.CONFIGURATION );
|
||||
}
|
||||
}
|
||||
|
||||
// Remove from old servers
|
||||
if ( user.getServer() != null )
|
||||
{
|
||||
user.getServer().setObsolete( true );
|
||||
user.getServer().disconnect( "Quitting" );
|
||||
}
|
||||
|
||||
|
@@ -72,6 +72,7 @@ public final class UserConnection implements ProxiedPlayer
|
||||
/*========================================================================*/
|
||||
@NonNull
|
||||
private final ProxyServer bungee;
|
||||
@Getter
|
||||
@NonNull
|
||||
private final ChannelWrapper ch;
|
||||
@Getter
|
||||
|
@@ -26,6 +26,7 @@ import java.util.stream.Collectors;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import net.md_5.bungee.ServerConnection;
|
||||
import net.md_5.bungee.ServerConnection.KeepAliveData;
|
||||
import net.md_5.bungee.ServerConnector;
|
||||
import net.md_5.bungee.UserConnection;
|
||||
import net.md_5.bungee.Util;
|
||||
import net.md_5.bungee.api.ProxyServer;
|
||||
@@ -51,11 +52,13 @@ import net.md_5.bungee.netty.ChannelWrapper;
|
||||
import net.md_5.bungee.netty.PacketHandler;
|
||||
import net.md_5.bungee.protocol.DefinedPacket;
|
||||
import net.md_5.bungee.protocol.PacketWrapper;
|
||||
import net.md_5.bungee.protocol.Protocol;
|
||||
import net.md_5.bungee.protocol.ProtocolConstants;
|
||||
import net.md_5.bungee.protocol.packet.BossBar;
|
||||
import net.md_5.bungee.protocol.packet.Commands;
|
||||
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.PlayerListItem;
|
||||
import net.md_5.bungee.protocol.packet.PlayerListItemRemove;
|
||||
import net.md_5.bungee.protocol.packet.PlayerListItemUpdate;
|
||||
@@ -83,6 +86,7 @@ public class DownstreamBridge extends PacketHandler
|
||||
private final ProxyServer bungee;
|
||||
private final UserConnection con;
|
||||
private final ServerConnection server;
|
||||
private boolean receivedLogin;
|
||||
|
||||
@Override
|
||||
public void exception(Throwable t) throws Exception
|
||||
@@ -134,7 +138,7 @@ public class DownstreamBridge extends PacketHandler
|
||||
public void handle(PacketWrapper packet) throws Exception
|
||||
{
|
||||
EntityMap rewrite = con.getEntityRewrite();
|
||||
if ( rewrite != null )
|
||||
if ( rewrite != null && con.getCh().getEncodeProtocol() == Protocol.GAME )
|
||||
{
|
||||
rewrite.rewriteClientbound( packet.buf, con.getServerEntityId(), con.getClientEntityId(), con.getPendingConnection().getVersion() );
|
||||
}
|
||||
@@ -756,6 +760,17 @@ public class DownstreamBridge extends PacketHandler
|
||||
throw CancelSendSignal.INSTANCE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handle(Login login) throws Exception
|
||||
{
|
||||
Preconditions.checkState( !receivedLogin, "Not expecting login" );
|
||||
|
||||
receivedLogin = true;
|
||||
ServerConnector.handleLogin( bungee, server.getCh(), con, server.getInfo(), null, server, login );
|
||||
|
||||
throw CancelSendSignal.INSTANCE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
|
@@ -59,6 +59,7 @@ import net.md_5.bungee.protocol.packet.Handshake;
|
||||
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.LoginAcknowledged;
|
||||
import net.md_5.bungee.protocol.packet.LoginPayloadResponse;
|
||||
import net.md_5.bungee.protocol.packet.LoginRequest;
|
||||
import net.md_5.bungee.protocol.packet.LoginSuccess;
|
||||
@@ -111,6 +112,7 @@ public class InitialHandler extends PacketHandler implements PendingConnection
|
||||
private boolean legacy;
|
||||
@Getter
|
||||
private String extraDataInHandshake = "";
|
||||
private UserConnection userCon;
|
||||
|
||||
@Override
|
||||
public boolean shouldHandle(PacketWrapper packet) throws Exception
|
||||
@@ -121,12 +123,12 @@ public class InitialHandler extends PacketHandler implements PendingConnection
|
||||
private enum State
|
||||
{
|
||||
|
||||
HANDSHAKE, STATUS, PING, USERNAME, ENCRYPT, FINISHING;
|
||||
HANDSHAKE, STATUS, PING, USERNAME, ENCRYPT, FINISHING, CONFIGURING;
|
||||
}
|
||||
|
||||
private boolean canSendKickMessage()
|
||||
{
|
||||
return thisState == State.USERNAME || thisState == State.ENCRYPT || thisState == State.FINISHING;
|
||||
return thisState == State.USERNAME || thisState == State.ENCRYPT || thisState == State.FINISHING || thisState == State.CONFIGURING;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -593,29 +595,18 @@ public class InitialHandler extends PacketHandler implements PendingConnection
|
||||
{
|
||||
if ( !ch.isClosing() )
|
||||
{
|
||||
UserConnection userCon = new UserConnection( bungee, ch, getName(), InitialHandler.this );
|
||||
userCon = new UserConnection( bungee, ch, getName(), InitialHandler.this );
|
||||
userCon.setCompressionThreshold( BungeeCord.getInstance().config.getCompressionThreshold() );
|
||||
userCon.init();
|
||||
|
||||
unsafe.sendPacket( new LoginSuccess( getUniqueId(), getName(), ( loginProfile == null ) ? null : loginProfile.getProperties() ) );
|
||||
ch.setProtocol( Protocol.GAME );
|
||||
|
||||
ch.getHandle().pipeline().get( HandlerBoss.class ).setHandler( new UpstreamBridge( bungee, userCon ) );
|
||||
bungee.getPluginManager().callEvent( new PostLoginEvent( userCon ) );
|
||||
ServerInfo server;
|
||||
if ( bungee.getReconnectHandler() != null )
|
||||
if ( getVersion() >= ProtocolConstants.MINECRAFT_1_20_2 )
|
||||
{
|
||||
server = bungee.getReconnectHandler().getServer( userCon );
|
||||
thisState = State.CONFIGURING;
|
||||
} else
|
||||
{
|
||||
server = AbstractReconnectHandler.getForcedHost( InitialHandler.this );
|
||||
ch.setProtocol( Protocol.GAME );
|
||||
finish2();
|
||||
}
|
||||
if ( server == null )
|
||||
{
|
||||
server = bungee.getServerInfo( listener.getDefaultServer() );
|
||||
}
|
||||
|
||||
userCon.connect( server, null, true, ServerConnectEvent.Reason.JOIN_PROXY );
|
||||
}
|
||||
}
|
||||
} );
|
||||
@@ -626,6 +617,37 @@ public class InitialHandler extends PacketHandler implements PendingConnection
|
||||
bungee.getPluginManager().callEvent( new LoginEvent( InitialHandler.this, complete ) );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handle(LoginAcknowledged loginAcknowledged) throws Exception
|
||||
{
|
||||
Preconditions.checkState( thisState == State.CONFIGURING, "Not expecting CONFIGURING" );
|
||||
|
||||
finish2();
|
||||
ch.setEncodeProtocol( Protocol.CONFIGURATION );
|
||||
}
|
||||
|
||||
private void finish2()
|
||||
{
|
||||
userCon.init();
|
||||
|
||||
ch.getHandle().pipeline().get( HandlerBoss.class ).setHandler( new UpstreamBridge( bungee, userCon ) );
|
||||
bungee.getPluginManager().callEvent( new PostLoginEvent( userCon ) );
|
||||
ServerInfo server;
|
||||
if ( bungee.getReconnectHandler() != null )
|
||||
{
|
||||
server = bungee.getReconnectHandler().getServer( userCon );
|
||||
} else
|
||||
{
|
||||
server = AbstractReconnectHandler.getForcedHost( InitialHandler.this );
|
||||
}
|
||||
if ( server == null )
|
||||
{
|
||||
server = bungee.getServerInfo( listener.getDefaultServer() );
|
||||
}
|
||||
|
||||
userCon.connect( server, null, true, ServerConnectEvent.Reason.JOIN_PROXY );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handle(LoginPayloadResponse response) throws Exception
|
||||
{
|
||||
|
@@ -25,15 +25,18 @@ import net.md_5.bungee.forge.ForgeConstants;
|
||||
import net.md_5.bungee.netty.ChannelWrapper;
|
||||
import net.md_5.bungee.netty.PacketHandler;
|
||||
import net.md_5.bungee.protocol.PacketWrapper;
|
||||
import net.md_5.bungee.protocol.Protocol;
|
||||
import net.md_5.bungee.protocol.ProtocolConstants;
|
||||
import net.md_5.bungee.protocol.packet.Chat;
|
||||
import net.md_5.bungee.protocol.packet.ClientChat;
|
||||
import net.md_5.bungee.protocol.packet.ClientCommand;
|
||||
import net.md_5.bungee.protocol.packet.ClientSettings;
|
||||
import net.md_5.bungee.protocol.packet.KeepAlive;
|
||||
import net.md_5.bungee.protocol.packet.LoginAcknowledged;
|
||||
import net.md_5.bungee.protocol.packet.PlayerListItem;
|
||||
import net.md_5.bungee.protocol.packet.PlayerListItemRemove;
|
||||
import net.md_5.bungee.protocol.packet.PluginMessage;
|
||||
import net.md_5.bungee.protocol.packet.StartConfiguration;
|
||||
import net.md_5.bungee.protocol.packet.TabCompleteRequest;
|
||||
import net.md_5.bungee.protocol.packet.TabCompleteResponse;
|
||||
import net.md_5.bungee.util.AllowedCharacters;
|
||||
@@ -51,7 +54,6 @@ public class UpstreamBridge extends PacketHandler
|
||||
|
||||
BungeeCord.getInstance().addConnection( con );
|
||||
con.getTabListHandler().onConnect();
|
||||
con.unsafe().sendPacket( BungeeCord.getInstance().registerChannels( con.getPendingConnection().getVersion() ) );
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -134,7 +136,7 @@ public class UpstreamBridge extends PacketHandler
|
||||
if ( con.getServer() != null )
|
||||
{
|
||||
EntityMap rewrite = con.getEntityRewrite();
|
||||
if ( rewrite != null )
|
||||
if ( rewrite != null && con.getServer().getCh().getEncodeProtocol() == Protocol.GAME )
|
||||
{
|
||||
rewrite.rewriteServerbound( packet.buf, con.getClientEntityId(), con.getServerEntityId(), con.getPendingConnection().getVersion() );
|
||||
}
|
||||
@@ -319,6 +321,19 @@ public class UpstreamBridge extends PacketHandler
|
||||
con.getPendingConnection().relayMessage( pluginMessage );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handle(StartConfiguration startConfiguration) throws Exception
|
||||
{
|
||||
ChannelWrapper ch = con.getServer().getCh();
|
||||
if ( ch.getDecodeProtocol() == Protocol.LOGIN )
|
||||
{
|
||||
ch.setDecodeProtocol( Protocol.CONFIGURATION );
|
||||
ch.write( new LoginAcknowledged() );
|
||||
ch.setEncodeProtocol( Protocol.CONFIGURATION );
|
||||
throw CancelSendSignal.INSTANCE;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
|
@@ -82,6 +82,8 @@ public abstract class EntityMap
|
||||
case ProtocolConstants.MINECRAFT_1_19_4:
|
||||
case ProtocolConstants.MINECRAFT_1_20:
|
||||
return EntityMap_1_16_2.INSTANCE_1_19_4;
|
||||
case ProtocolConstants.MINECRAFT_1_20_2:
|
||||
return EntityMap_1_16_2.INSTANCE_1_20_2;
|
||||
}
|
||||
throw new RuntimeException( "Version " + version + " has no entity map" );
|
||||
}
|
||||
|
@@ -20,6 +20,7 @@ class EntityMap_1_16_2 extends EntityMap
|
||||
static final EntityMap_1_16_2 INSTANCE_1_19 = new EntityMap_1_16_2( 0x02, 0x2F );
|
||||
static final EntityMap_1_16_2 INSTANCE_1_19_1 = new EntityMap_1_16_2( 0x02, 0x30 );
|
||||
static final EntityMap_1_16_2 INSTANCE_1_19_4 = new EntityMap_1_16_2( 0x03, 0x30 );
|
||||
static final EntityMap_1_16_2 INSTANCE_1_20_2 = new EntityMap_1_16_2( -1, 0x33 );
|
||||
//
|
||||
private final int spawnPlayerId;
|
||||
private final int spectateId;
|
||||
|
@@ -11,6 +11,7 @@ import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import net.md_5.bungee.compress.PacketCompressor;
|
||||
import net.md_5.bungee.compress.PacketDecompressor;
|
||||
import net.md_5.bungee.protocol.DefinedPacket;
|
||||
import net.md_5.bungee.protocol.MinecraftDecoder;
|
||||
import net.md_5.bungee.protocol.MinecraftEncoder;
|
||||
import net.md_5.bungee.protocol.PacketWrapper;
|
||||
@@ -35,12 +36,33 @@ public class ChannelWrapper
|
||||
this.remoteAddress = ( this.ch.remoteAddress() == null ) ? this.ch.parent().localAddress() : this.ch.remoteAddress();
|
||||
}
|
||||
|
||||
public void setProtocol(Protocol protocol)
|
||||
public Protocol getDecodeProtocol()
|
||||
{
|
||||
return ch.pipeline().get( MinecraftDecoder.class ).getProtocol();
|
||||
}
|
||||
|
||||
public void setDecodeProtocol(Protocol protocol)
|
||||
{
|
||||
ch.pipeline().get( MinecraftDecoder.class ).setProtocol( protocol );
|
||||
}
|
||||
|
||||
public Protocol getEncodeProtocol()
|
||||
{
|
||||
return ch.pipeline().get( MinecraftEncoder.class ).getProtocol();
|
||||
|
||||
}
|
||||
|
||||
public void setEncodeProtocol(Protocol protocol)
|
||||
{
|
||||
ch.pipeline().get( MinecraftEncoder.class ).setProtocol( protocol );
|
||||
}
|
||||
|
||||
public void setProtocol(Protocol protocol)
|
||||
{
|
||||
setDecodeProtocol( protocol );
|
||||
setEncodeProtocol( protocol );
|
||||
}
|
||||
|
||||
public void setVersion(int protocol)
|
||||
{
|
||||
ch.pipeline().get( MinecraftDecoder.class ).setProtocolVersion( protocol );
|
||||
@@ -51,13 +73,29 @@ public class ChannelWrapper
|
||||
{
|
||||
if ( !closed )
|
||||
{
|
||||
DefinedPacket defined = null;
|
||||
if ( packet instanceof PacketWrapper )
|
||||
{
|
||||
( (PacketWrapper) packet ).setReleased( true );
|
||||
ch.writeAndFlush( ( (PacketWrapper) packet ).buf, ch.voidPromise() );
|
||||
PacketWrapper wrapper = (PacketWrapper) packet;
|
||||
wrapper.setReleased( true );
|
||||
ch.writeAndFlush( wrapper.buf, ch.voidPromise() );
|
||||
defined = wrapper.packet;
|
||||
} else
|
||||
{
|
||||
ch.writeAndFlush( packet, ch.voidPromise() );
|
||||
if ( packet instanceof DefinedPacket )
|
||||
{
|
||||
defined = (DefinedPacket) packet;
|
||||
}
|
||||
}
|
||||
|
||||
if ( defined != null )
|
||||
{
|
||||
Protocol nextProtocol = defined.nextProtocol();
|
||||
if ( nextProtocol != null )
|
||||
{
|
||||
setEncodeProtocol( nextProtocol );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -17,6 +17,7 @@ import net.md_5.bungee.connection.PingHandler;
|
||||
import net.md_5.bungee.protocol.BadPacketException;
|
||||
import net.md_5.bungee.protocol.OverflowPacketException;
|
||||
import net.md_5.bungee.protocol.PacketWrapper;
|
||||
import net.md_5.bungee.protocol.Protocol;
|
||||
import net.md_5.bungee.util.QuietException;
|
||||
|
||||
/**
|
||||
@@ -101,9 +102,18 @@ public class HandlerBoss extends ChannelInboundHandlerAdapter
|
||||
return;
|
||||
}
|
||||
|
||||
PacketWrapper packet = (PacketWrapper) msg;
|
||||
if ( packet.packet != null )
|
||||
{
|
||||
Protocol nextProtocol = packet.packet.nextProtocol();
|
||||
if ( nextProtocol != null )
|
||||
{
|
||||
channel.setDecodeProtocol( nextProtocol );
|
||||
}
|
||||
}
|
||||
|
||||
if ( handler != null )
|
||||
{
|
||||
PacketWrapper packet = (PacketWrapper) msg;
|
||||
boolean sendPacket = handler.shouldHandle( packet );
|
||||
try
|
||||
{
|
||||
|
Reference in New Issue
Block a user