Pass the protocol version through when using ping pass through

This commit is contained in:
Thinkofdeath 2014-04-09 16:42:08 +01:00
parent cd518690fd
commit 86ef046544
3 changed files with 11 additions and 4 deletions

View File

@ -19,6 +19,7 @@ import lombok.RequiredArgsConstructor;
import lombok.Synchronized;
import net.md_5.bungee.api.Callback;
import net.md_5.bungee.api.CommandSender;
import net.md_5.bungee.api.ProxyServer;
import net.md_5.bungee.api.ServerPing;
import net.md_5.bungee.api.config.ServerInfo;
import net.md_5.bungee.api.connection.ProxiedPlayer;
@ -105,6 +106,11 @@ public class BungeeServerInfo implements ServerInfo
@Override
public void ping(final Callback<ServerPing> callback)
{
ping( callback, ProxyServer.getInstance().getProtocolVersion() );
}
public void ping(final Callback<ServerPing> callback, final int protocolVersion)
{
Preconditions.checkNotNull( callback, "callback" );
@ -115,7 +121,7 @@ public class BungeeServerInfo implements ServerInfo
{
if ( future.isSuccess() )
{
future.channel().pipeline().get( HandlerBoss.class ).setHandler( new PingHandler( BungeeServerInfo.this, callback ) );
future.channel().pipeline().get( HandlerBoss.class ).setHandler( new PingHandler( BungeeServerInfo.this, callback, protocolVersion ) );
} else
{
callback.done( null, future.cause() );

View File

@ -167,7 +167,7 @@ public class InitialHandler extends PacketHandler implements PendingConnection
if ( forced != null && listener.isPingPassthrough() )
{
forced.ping( pingBack );
((BungeeServerInfo) forced).ping( pingBack, handshake.getProtocolVersion() );
} else
{
int protocol = ( Protocol.supportedVersions.contains( handshake.getProtocolVersion() ) ) ? handshake.getProtocolVersion() : -1;

View File

@ -22,18 +22,19 @@ public class PingHandler extends PacketHandler
private final ServerInfo target;
private final Callback<ServerPing> callback;
private final int protocol;
private ChannelWrapper channel;
@Override
public void connected(ChannelWrapper channel) throws Exception
{
this.channel = channel;
MinecraftEncoder encoder = new MinecraftEncoder( Protocol.HANDSHAKE, false, ProxyServer.getInstance().getProtocolVersion() );
MinecraftEncoder encoder = new MinecraftEncoder( Protocol.HANDSHAKE, false, protocol );
channel.getHandle().pipeline().addAfter( PipelineUtils.FRAME_DECODER, PipelineUtils.PACKET_DECODER, new MinecraftDecoder( Protocol.STATUS, false, ProxyServer.getInstance().getProtocolVersion() ) );
channel.getHandle().pipeline().addAfter( PipelineUtils.FRAME_PREPENDER, PipelineUtils.PACKET_ENCODER, encoder );
channel.write( new Handshake( ProxyServer.getInstance().getProtocolVersion(), target.getAddress().getHostString(), target.getAddress().getPort(), 1 ) );
channel.write( new Handshake( protocol, target.getAddress().getHostString(), target.getAddress().getPort(), 1 ) );
encoder.setProtocol( Protocol.STATUS );
channel.write( new StatusRequest() );