Add 'unsafe' api for things like packet sending that may be implementation specific or break at any time
This commit is contained in:
parent
9fd69068ae
commit
639e5f3c1d
@ -37,6 +37,12 @@
|
||||
<version>${project.version}</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>net.md-5</groupId>
|
||||
<artifactId>bungeecord-protocol</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.yaml</groupId>
|
||||
<artifactId>snakeyaml</artifactId>
|
||||
|
@ -1,6 +1,7 @@
|
||||
package net.md_5.bungee.api.connection;
|
||||
|
||||
import java.net.InetSocketAddress;
|
||||
import net.md_5.bungee.protocol.packet.DefinedPacket;
|
||||
|
||||
/**
|
||||
* A proxy connection is defined as a connection directly connected to a socket.
|
||||
@ -15,7 +16,7 @@ public interface Connection
|
||||
*
|
||||
* @return the remote address
|
||||
*/
|
||||
public InetSocketAddress getAddress();
|
||||
InetSocketAddress getAddress();
|
||||
|
||||
/**
|
||||
* Disconnects this end of the connection for the specified reason. If this
|
||||
@ -25,5 +26,23 @@ public interface Connection
|
||||
* @param reason the reason shown to the player / sent to the server on
|
||||
* disconnect
|
||||
*/
|
||||
public void disconnect(String reason);
|
||||
void disconnect(String reason);
|
||||
|
||||
/**
|
||||
* Get the unsafe methods of this class.
|
||||
*
|
||||
* @return the unsafe method interface
|
||||
*/
|
||||
Unsafe unsafe();
|
||||
|
||||
interface Unsafe
|
||||
{
|
||||
|
||||
/**
|
||||
* Send a packet to this connection.
|
||||
*
|
||||
* @param packet the packet to send
|
||||
*/
|
||||
void sendPacket(DefinedPacket packet);
|
||||
}
|
||||
}
|
||||
|
@ -331,7 +331,7 @@ public class BungeeCord extends ProxyServer
|
||||
{
|
||||
for ( UserConnection con : connections.values() )
|
||||
{
|
||||
con.sendPacket( packet );
|
||||
con.unsafe().sendPacket( packet );
|
||||
}
|
||||
} finally
|
||||
{
|
||||
|
@ -7,6 +7,7 @@ import lombok.RequiredArgsConstructor;
|
||||
import lombok.Setter;
|
||||
import net.md_5.bungee.api.connection.Server;
|
||||
import net.md_5.bungee.netty.ChannelWrapper;
|
||||
import net.md_5.bungee.protocol.packet.DefinedPacket;
|
||||
import net.md_5.bungee.protocol.packet.PacketFAPluginMessage;
|
||||
import net.md_5.bungee.protocol.packet.PacketFFKick;
|
||||
|
||||
@ -21,11 +22,19 @@ public class ServerConnection implements Server
|
||||
@Getter
|
||||
@Setter
|
||||
private boolean isObsolete;
|
||||
private final Unsafe unsafe = new Unsafe()
|
||||
{
|
||||
@Override
|
||||
public void sendPacket(DefinedPacket packet)
|
||||
{
|
||||
unsafe().sendPacket( packet );
|
||||
}
|
||||
};
|
||||
|
||||
@Override
|
||||
public void sendData(String channel, byte[] data)
|
||||
{
|
||||
ch.write( new PacketFAPluginMessage( channel, data ) );
|
||||
unsafe().sendPacket( new PacketFAPluginMessage( channel, data ) );
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -33,7 +42,7 @@ public class ServerConnection implements Server
|
||||
{
|
||||
if ( !ch.isClosed() )
|
||||
{
|
||||
ch.write( new PacketFFKick( reason ) );
|
||||
unsafe().sendPacket( new PacketFFKick( reason ) );
|
||||
ch.getHandle().eventLoop().schedule( new Runnable()
|
||||
{
|
||||
@Override
|
||||
@ -50,4 +59,10 @@ public class ServerConnection implements Server
|
||||
{
|
||||
return getInfo().getAddress();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Unsafe unsafe()
|
||||
{
|
||||
return unsafe;
|
||||
}
|
||||
}
|
||||
|
@ -147,7 +147,7 @@ public class ServerConnector extends PacketHandler
|
||||
modLogin = new Packet1Login( login.getEntityId(), login.getLevelType(), login.getGameMode(), (byte) login.getDimension(), login.getDifficulty(), login.getUnused(),
|
||||
(byte) user.getPendingConnection().getListener().getTabListSize() );
|
||||
}
|
||||
user.sendPacket( modLogin );
|
||||
user.unsafe().sendPacket( modLogin );
|
||||
} else
|
||||
{
|
||||
bungee.getTabListHandler().onServerChange( user );
|
||||
@ -155,18 +155,18 @@ public class ServerConnector extends PacketHandler
|
||||
Scoreboard serverScoreboard = user.getServerSentScoreboard();
|
||||
for ( Objective objective : serverScoreboard.getObjectives() )
|
||||
{
|
||||
user.sendPacket( new PacketCEScoreboardObjective( objective.getName(), objective.getValue(), (byte) 1 ) );
|
||||
user.unsafe().sendPacket( new PacketCEScoreboardObjective( objective.getName(), objective.getValue(), (byte) 1 ) );
|
||||
}
|
||||
for ( Team team : serverScoreboard.getTeams() )
|
||||
{
|
||||
user.sendPacket( new PacketD1Team( team.getName() ) );
|
||||
user.unsafe().sendPacket( new PacketD1Team( team.getName() ) );
|
||||
}
|
||||
serverScoreboard.clear();
|
||||
|
||||
user.sendDimensionSwitch();
|
||||
|
||||
user.setServerEntityId( login.getEntityId() );
|
||||
user.sendPacket( new Packet9Respawn( login.getDimension(), login.getDifficulty(), login.getGameMode(), (short) 256, login.getLevelType() ) );
|
||||
user.unsafe().sendPacket( new Packet9Respawn( login.getDimension(), login.getDifficulty(), login.getGameMode(), (short) 256, login.getLevelType() ) );
|
||||
|
||||
// Remove from old servers
|
||||
user.getServer().setObsolete( true );
|
||||
@ -282,7 +282,7 @@ public class ServerConnector extends PacketHandler
|
||||
}
|
||||
}
|
||||
|
||||
user.sendPacket( pluginMessage ); // We have to forward these to the user, especially with Forge as stuff might break
|
||||
user.unsafe().sendPacket( pluginMessage ); // We have to forward these to the user, especially with Forge as stuff might break
|
||||
if ( !sentMessages && user.getPendingConnection().getForgeLogin() != null )
|
||||
{
|
||||
for ( PacketFAPluginMessage message : user.getPendingConnection().getLoginMessages() )
|
||||
|
@ -88,6 +88,14 @@ public final class UserConnection implements ProxiedPlayer
|
||||
@Getter
|
||||
private String displayName;
|
||||
/*========================================================================*/
|
||||
private final Unsafe unsafe = new Unsafe()
|
||||
{
|
||||
@Override
|
||||
public void sendPacket(DefinedPacket packet)
|
||||
{
|
||||
ch.write( packet );
|
||||
}
|
||||
};
|
||||
|
||||
public void init()
|
||||
{
|
||||
@ -100,11 +108,6 @@ public final class UserConnection implements ProxiedPlayer
|
||||
}
|
||||
}
|
||||
|
||||
public void sendPacket(DefinedPacket p)
|
||||
{
|
||||
ch.write( p );
|
||||
}
|
||||
|
||||
public void sendPacket(byte[] b)
|
||||
{
|
||||
ch.write( b );
|
||||
@ -134,8 +137,8 @@ public final class UserConnection implements ProxiedPlayer
|
||||
|
||||
void sendDimensionSwitch()
|
||||
{
|
||||
sendPacket( PacketConstants.DIM1_SWITCH );
|
||||
sendPacket( PacketConstants.DIM2_SWITCH );
|
||||
unsafe().sendPacket( PacketConstants.DIM1_SWITCH );
|
||||
unsafe().sendPacket( PacketConstants.DIM2_SWITCH );
|
||||
}
|
||||
|
||||
public void connectNow(ServerInfo target)
|
||||
@ -220,7 +223,7 @@ public final class UserConnection implements ProxiedPlayer
|
||||
if ( ch.getHandle().isActive() )
|
||||
{
|
||||
bungee.getLogger().log( Level.INFO, "[" + getName() + "] disconnected with: " + reason );
|
||||
sendPacket( new PacketFFKick( reason ) );
|
||||
unsafe().sendPacket( new PacketFFKick( reason ) );
|
||||
ch.getHandle().close();
|
||||
if ( server != null )
|
||||
{
|
||||
@ -239,7 +242,7 @@ public final class UserConnection implements ProxiedPlayer
|
||||
@Override
|
||||
public void sendMessage(String message)
|
||||
{
|
||||
sendPacket( new Packet3Chat( message ) );
|
||||
unsafe().sendPacket( new Packet3Chat( message ) );
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -254,7 +257,7 @@ public final class UserConnection implements ProxiedPlayer
|
||||
@Override
|
||||
public void sendData(String channel, byte[] data)
|
||||
{
|
||||
sendPacket( new PacketFAPluginMessage( channel, data ) );
|
||||
unsafe().sendPacket( new PacketFAPluginMessage( channel, data ) );
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -322,6 +325,12 @@ public final class UserConnection implements ProxiedPlayer
|
||||
@Override
|
||||
public void setTexturePack(TexturePackInfo pack)
|
||||
{
|
||||
sendPacket( new PacketFAPluginMessage( "MC|TPack", ( pack.getUrl() + "\00" + pack.getSize() ).getBytes() ) );
|
||||
unsafe().sendPacket( new PacketFAPluginMessage( "MC|TPack", ( pack.getUrl() + "\00" + pack.getSize() ).getBytes() ) );
|
||||
}
|
||||
|
||||
@Override
|
||||
public Unsafe unsafe()
|
||||
{
|
||||
return unsafe;
|
||||
}
|
||||
}
|
||||
|
@ -36,6 +36,7 @@ import net.md_5.bungee.netty.CipherEncoder;
|
||||
import net.md_5.bungee.netty.PacketDecoder;
|
||||
import net.md_5.bungee.netty.PacketHandler;
|
||||
import net.md_5.bungee.protocol.Forge;
|
||||
import net.md_5.bungee.protocol.packet.DefinedPacket;
|
||||
import net.md_5.bungee.protocol.packet.Packet1Login;
|
||||
import net.md_5.bungee.protocol.packet.Packet2Handshake;
|
||||
import net.md_5.bungee.protocol.packet.PacketCDClientStatus;
|
||||
@ -44,7 +45,6 @@ import net.md_5.bungee.protocol.packet.PacketFCEncryptionResponse;
|
||||
import net.md_5.bungee.protocol.packet.PacketFDEncryptionRequest;
|
||||
import net.md_5.bungee.protocol.packet.PacketFEPing;
|
||||
import net.md_5.bungee.protocol.packet.PacketFFKick;
|
||||
import net.md_5.bungee.protocol.Vanilla;
|
||||
|
||||
@RequiredArgsConstructor
|
||||
public class InitialHandler extends PacketHandler implements PendingConnection
|
||||
@ -63,6 +63,14 @@ public class InitialHandler extends PacketHandler implements PendingConnection
|
||||
private List<PacketFAPluginMessage> loginMessages = new ArrayList<>();
|
||||
private State thisState = State.HANDSHAKE;
|
||||
private SecretKey sharedKey;
|
||||
private final Unsafe unsafe = new Unsafe()
|
||||
{
|
||||
@Override
|
||||
public void sendPacket(DefinedPacket packet)
|
||||
{
|
||||
unsafe().sendPacket( packet );
|
||||
}
|
||||
};
|
||||
private static final PacketFAPluginMessage forgeMods = new PacketFAPluginMessage( "FML", new byte[]
|
||||
{
|
||||
0, 0, 0, 0, 0, 2
|
||||
@ -144,8 +152,8 @@ public class InitialHandler extends PacketHandler implements PendingConnection
|
||||
}
|
||||
|
||||
this.handshake = handshake;
|
||||
ch.write( forgeMods );
|
||||
ch.write( request = EncryptionUtil.encryptRequest() );
|
||||
unsafe().sendPacket( forgeMods );
|
||||
unsafe().sendPacket( request = EncryptionUtil.encryptRequest() );
|
||||
thisState = State.ENCRYPT;
|
||||
}
|
||||
|
||||
@ -224,7 +232,7 @@ public class InitialHandler extends PacketHandler implements PendingConnection
|
||||
}
|
||||
|
||||
thisState = InitialHandler.State.LOGIN;
|
||||
ch.write( new PacketFCEncryptionResponse( new byte[ 0 ], new byte[ 0 ] ) );
|
||||
unsafe().sendPacket( new PacketFCEncryptionResponse( new byte[ 0 ], new byte[ 0 ] ) );
|
||||
try
|
||||
{
|
||||
Cipher encrypt = EncryptionUtil.getCipher( Cipher.ENCRYPT_MODE, sharedKey );
|
||||
@ -264,7 +272,7 @@ public class InitialHandler extends PacketHandler implements PendingConnection
|
||||
{
|
||||
if ( !ch.isClosed() )
|
||||
{
|
||||
ch.write( new PacketFFKick( reason ) );
|
||||
unsafe().sendPacket( new PacketFFKick( reason ) );
|
||||
ch.close();
|
||||
}
|
||||
}
|
||||
@ -293,6 +301,12 @@ public class InitialHandler extends PacketHandler implements PendingConnection
|
||||
return (InetSocketAddress) ch.getHandle().remoteAddress();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Unsafe unsafe()
|
||||
{
|
||||
return unsafe;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
|
@ -27,9 +27,9 @@ public class UpstreamBridge extends PacketHandler
|
||||
this.bungee = bungee;
|
||||
this.con = con;
|
||||
|
||||
BungeeCord.getInstance().addConnection( con );
|
||||
bungee.getTabListHandler().onConnect( con );
|
||||
con.sendPacket( BungeeCord.getInstance().registerChannels() );
|
||||
BungeeCord.getInstance().addConnection( con );
|
||||
con.unsafe().sendPacket( BungeeCord.getInstance().registerChannels() );
|
||||
|
||||
TexturePackInfo texture = con.getPendingConnection().getListener().getTexturePack();
|
||||
if ( texture != null )
|
||||
|
@ -3,7 +3,6 @@ package net.md_5.bungee.tablist;
|
||||
import java.util.Collection;
|
||||
import java.util.HashSet;
|
||||
import net.md_5.bungee.BungeeCord;
|
||||
import net.md_5.bungee.UserConnection;
|
||||
import net.md_5.bungee.api.ProxyServer;
|
||||
import net.md_5.bungee.api.TabListHandler;
|
||||
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
||||
@ -17,10 +16,9 @@ public class Global implements TabListHandler
|
||||
@Override
|
||||
public void onConnect(ProxiedPlayer player)
|
||||
{
|
||||
UserConnection con = (UserConnection) player;
|
||||
for ( ProxiedPlayer p : ProxyServer.getInstance().getPlayers() )
|
||||
{
|
||||
con.sendPacket( new PacketC9PlayerListItem( p.getDisplayName(), true, (short) p.getPing() ) );
|
||||
player.unsafe().sendPacket( new PacketC9PlayerListItem( p.getDisplayName(), true, (short) p.getPing() ) );
|
||||
}
|
||||
BungeeCord.getInstance().broadcast( new PacketC9PlayerListItem( player.getDisplayName(), true, (short) player.getPing() ) );
|
||||
}
|
||||
|
@ -38,7 +38,7 @@ public class ServerUnique implements TabListHandler
|
||||
{
|
||||
for ( String username : usernames )
|
||||
{
|
||||
( (UserConnection) player ).sendPacket( new PacketC9PlayerListItem( username, false, (short) 9999 ) );
|
||||
player.unsafe().sendPacket( new PacketC9PlayerListItem( username, false, (short) 9999 ) );
|
||||
}
|
||||
usernames.clear();
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user