Compare commits
18 Commits
cf36174de7
...
87b3d814dd
Author | SHA1 | Date | |
---|---|---|---|
87b3d814dd | |||
7b45fdcf98 | |||
4dde9b0e5e | |||
7022c64432 | |||
d2dd9089e3 | |||
24f3f21386 | |||
|
a7dbbc2f0a | ||
|
68b2df2b1e | ||
|
1ef4d27dbe | ||
|
94a1fb5117 | ||
|
78aef86a8f | ||
|
b34cfcde5a | ||
|
86e079a4b1 | ||
|
1c42c34081 | ||
|
fed646d18b | ||
|
653f1691d7 | ||
|
3cb7a12738 | ||
|
f3397b3003 |
@ -52,7 +52,7 @@
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-shade-plugin</artifactId>
|
||||
<version>3.5.0</version>
|
||||
<version>3.5.1</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<phase>package</phase>
|
||||
|
@ -33,6 +33,13 @@ public final class SelectorComponent extends BaseComponent
|
||||
*/
|
||||
private String selector;
|
||||
|
||||
/**
|
||||
* The separator of multiple selected entities.
|
||||
* <br>
|
||||
* The default is {@code {"color": "gray", "text": ", "}}.
|
||||
*/
|
||||
private BaseComponent separator;
|
||||
|
||||
/**
|
||||
* Creates a selector component from the original to clone it.
|
||||
*
|
||||
@ -42,6 +49,17 @@ public final class SelectorComponent extends BaseComponent
|
||||
{
|
||||
super( original );
|
||||
setSelector( original.getSelector() );
|
||||
setSeparator( original.getSeparator() );
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a selector component from the selector
|
||||
*
|
||||
* @param selector the selector as a String
|
||||
*/
|
||||
public SelectorComponent(String selector)
|
||||
{
|
||||
setSelector( selector );
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -22,6 +22,12 @@ public class SelectorComponentSerializer extends BaseComponentSerializer impleme
|
||||
throw new JsonParseException( "Could not parse JSON: missing 'selector' property" );
|
||||
}
|
||||
SelectorComponent component = new SelectorComponent( object.get( "selector" ).getAsString() );
|
||||
|
||||
if ( object.has( "separator" ) )
|
||||
{
|
||||
component.setSeparator( ComponentSerializer.deserialize( object.get( "separator" ).getAsString() ) );
|
||||
}
|
||||
|
||||
deserialize( object, component, context );
|
||||
return component;
|
||||
}
|
||||
@ -32,6 +38,11 @@ public class SelectorComponentSerializer extends BaseComponentSerializer impleme
|
||||
JsonObject object = new JsonObject();
|
||||
serialize( object, component, context );
|
||||
object.addProperty( "selector", component.getSelector() );
|
||||
|
||||
if ( component.getSeparator() != null )
|
||||
{
|
||||
object.addProperty( "separator", ComponentSerializer.toString( component.getSeparator() ) );
|
||||
}
|
||||
return object;
|
||||
}
|
||||
}
|
||||
|
2
pom.xml
2
pom.xml
@ -82,7 +82,7 @@
|
||||
<dependency>
|
||||
<groupId>io.netty</groupId>
|
||||
<artifactId>netty-bom</artifactId>
|
||||
<version>4.1.97.Final</version>
|
||||
<version>4.1.99.Final</version>
|
||||
<type>pom</type>
|
||||
<scope>import</scope>
|
||||
</dependency>
|
||||
|
@ -31,12 +31,12 @@ public class LegacyDecoder extends ByteToMessageDecoder
|
||||
|
||||
if ( packetID == 0xFE )
|
||||
{
|
||||
out.add( new PacketWrapper( new LegacyPing( in.isReadable() && in.readUnsignedByte() == 0x01 ), Unpooled.EMPTY_BUFFER ) );
|
||||
out.add( new PacketWrapper( new LegacyPing( in.isReadable() && in.readUnsignedByte() == 0x01 ), Unpooled.EMPTY_BUFFER, Protocol.STATUS ) );
|
||||
return;
|
||||
} else if ( packetID == 0x02 && in.isReadable() )
|
||||
{
|
||||
in.skipBytes( in.readableBytes() );
|
||||
out.add( new PacketWrapper( new LegacyHandshake(), Unpooled.EMPTY_BUFFER ) );
|
||||
out.add( new PacketWrapper( new LegacyHandshake(), Unpooled.EMPTY_BUFFER, Protocol.STATUS ) );
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -50,7 +50,7 @@ public class MinecraftDecoder extends MessageToMessageDecoder<ByteBuf>
|
||||
in.skipBytes( in.readableBytes() );
|
||||
}
|
||||
|
||||
out.add( new PacketWrapper( packet, slice ) );
|
||||
out.add( new PacketWrapper( packet, slice, protocol ) );
|
||||
slice = null;
|
||||
} finally
|
||||
{
|
||||
|
@ -10,6 +10,7 @@ public class PacketWrapper
|
||||
|
||||
public final DefinedPacket packet;
|
||||
public final ByteBuf buf;
|
||||
public final Protocol protocol;
|
||||
@Setter
|
||||
private boolean released;
|
||||
|
||||
|
@ -172,7 +172,7 @@ public class BungeeTitle implements Title
|
||||
{
|
||||
if ( player.getPendingConnection().getVersion() >= ProtocolConstants.MINECRAFT_1_17 )
|
||||
{
|
||||
player.unsafe().sendPacket( packet.newPacket );
|
||||
( (UserConnection) player ).sendPacketQueued( packet.newPacket );
|
||||
} else
|
||||
{
|
||||
player.unsafe().sendPacket( packet.oldPacket );
|
||||
|
@ -43,7 +43,6 @@ 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;
|
||||
@ -334,9 +333,9 @@ public class ServerConnector extends PacketHandler
|
||||
user.unsafe().sendPacket( new StartConfiguration() );
|
||||
} else
|
||||
{
|
||||
ch.setDecodeProtocol( Protocol.CONFIGURATION );
|
||||
ch.write( new LoginAcknowledged() );
|
||||
ch.setEncodeProtocol( Protocol.CONFIGURATION );
|
||||
LoginResult loginProfile = user.getPendingConnection().getLoginProfile();
|
||||
user.unsafe().sendPacket( new LoginSuccess( user.getUniqueId(), user.getName(), ( loginProfile == null ) ? null : loginProfile.getProperties() ) );
|
||||
user.getCh().setEncodeProtocol( Protocol.CONFIGURATION );
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -59,7 +59,6 @@ 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;
|
||||
@ -132,12 +131,12 @@ public class InitialHandler extends PacketHandler implements PendingConnection
|
||||
private enum State
|
||||
{
|
||||
|
||||
HANDSHAKE, STATUS, PING, USERNAME, ENCRYPT, FINISHING, CONFIGURING;
|
||||
HANDSHAKE, STATUS, PING, USERNAME, ENCRYPT, FINISHING;
|
||||
}
|
||||
|
||||
private boolean canSendKickMessage()
|
||||
{
|
||||
return thisState == State.USERNAME || thisState == State.ENCRYPT || thisState == State.FINISHING || thisState == State.CONFIGURING;
|
||||
return thisState == State.USERNAME || thisState == State.ENCRYPT || thisState == State.FINISHING;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -625,15 +624,12 @@ public class InitialHandler extends PacketHandler implements PendingConnection
|
||||
userCon = new UserConnection( bungee, ch, getName(), InitialHandler.this );
|
||||
userCon.setCompressionThreshold( BungeeCord.getInstance().config.getCompressionThreshold() );
|
||||
|
||||
unsafe.sendPacket( new LoginSuccess( getUniqueId(), getName(), ( loginProfile == null ) ? null : loginProfile.getProperties() ) );
|
||||
if ( getVersion() >= ProtocolConstants.MINECRAFT_1_20_2 )
|
||||
{
|
||||
thisState = State.CONFIGURING;
|
||||
} else
|
||||
if ( getVersion() < ProtocolConstants.MINECRAFT_1_20_2 )
|
||||
{
|
||||
unsafe.sendPacket( new LoginSuccess( getUniqueId(), getName(), ( loginProfile == null ) ? null : loginProfile.getProperties() ) );
|
||||
ch.setProtocol( Protocol.GAME );
|
||||
finish2();
|
||||
}
|
||||
finish2();
|
||||
}
|
||||
}
|
||||
} );
|
||||
@ -644,15 +640,6 @@ 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();
|
||||
|
@ -9,6 +9,7 @@ import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
import net.md_5.bungee.BungeeCord;
|
||||
import net.md_5.bungee.ServerConnection;
|
||||
import net.md_5.bungee.ServerConnection.KeepAliveData;
|
||||
import net.md_5.bungee.UserConnection;
|
||||
import net.md_5.bungee.Util;
|
||||
@ -134,14 +135,22 @@ public class UpstreamBridge extends PacketHandler
|
||||
@Override
|
||||
public void handle(PacketWrapper packet) throws Exception
|
||||
{
|
||||
if ( con.getServer() != null )
|
||||
ServerConnection server = con.getServer();
|
||||
if ( server != null && server.isConnected() )
|
||||
{
|
||||
Protocol serverEncode = server.getCh().getEncodeProtocol();
|
||||
// #3527: May still have old packets from client in game state when switching server to configuration state - discard those
|
||||
if ( packet.protocol != serverEncode )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
EntityMap rewrite = con.getEntityRewrite();
|
||||
if ( rewrite != null && con.getServer().getCh().getEncodeProtocol() == Protocol.GAME )
|
||||
if ( rewrite != null && serverEncode == Protocol.GAME )
|
||||
{
|
||||
rewrite.rewriteServerbound( packet.buf, con.getClientEntityId(), con.getServerEntityId(), con.getPendingConnection().getVersion() );
|
||||
}
|
||||
con.getServer().getCh().write( packet );
|
||||
server.getCh().write( packet );
|
||||
}
|
||||
}
|
||||
|
||||
@ -332,8 +341,19 @@ public class UpstreamBridge extends PacketHandler
|
||||
con.getPendingConnection().relayMessage( pluginMessage );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handle(LoginAcknowledged loginAcknowledged) throws Exception
|
||||
{
|
||||
configureServer();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handle(StartConfiguration startConfiguration) throws Exception
|
||||
{
|
||||
configureServer();
|
||||
}
|
||||
|
||||
private void configureServer()
|
||||
{
|
||||
ChannelWrapper ch = con.getServer().getCh();
|
||||
if ( ch.getDecodeProtocol() == Protocol.LOGIN )
|
||||
@ -352,8 +372,6 @@ public class UpstreamBridge extends PacketHandler
|
||||
public void handle(FinishConfiguration finishConfiguration) throws Exception
|
||||
{
|
||||
con.sendQueuedPackets();
|
||||
|
||||
super.handle( finishConfiguration );
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -174,7 +174,7 @@ public class HandlerBoss extends ChannelInboundHandlerAdapter
|
||||
{
|
||||
ProxyServer.getInstance().getLogger().log( Level.WARNING, "{0} - could not decode packet! {1}", new Object[]
|
||||
{
|
||||
handler, cause.getCause() != null ? cause.getCause() : cause
|
||||
handler, cause
|
||||
} );
|
||||
}
|
||||
} else if ( cause instanceof IOException || ( cause instanceof IllegalStateException && handler instanceof InitialHandler ) )
|
||||
|
Loading…
Reference in New Issue
Block a user