Reformat to new code style, lots of spaces for easy reading.
This commit is contained in:
parent
69d618c648
commit
23582a635b
@ -68,7 +68,7 @@ public class BungeeCord extends ProxyServer
|
|||||||
/**
|
/**
|
||||||
* locations.yml save thread.
|
* locations.yml save thread.
|
||||||
*/
|
*/
|
||||||
private final Timer saveThread = new Timer("Reconnect Saver");
|
private final Timer saveThread = new Timer( "Reconnect Saver" );
|
||||||
/**
|
/**
|
||||||
* Server socket listener.
|
* Server socket listener.
|
||||||
*/
|
*/
|
||||||
@ -98,15 +98,15 @@ public class BungeeCord extends ProxyServer
|
|||||||
|
|
||||||
|
|
||||||
{
|
{
|
||||||
getPluginManager().registerCommand(new CommandReload());
|
getPluginManager().registerCommand( new CommandReload() );
|
||||||
getPluginManager().registerCommand(new CommandEnd());
|
getPluginManager().registerCommand( new CommandEnd() );
|
||||||
getPluginManager().registerCommand(new CommandList());
|
getPluginManager().registerCommand( new CommandList() );
|
||||||
getPluginManager().registerCommand(new CommandServer());
|
getPluginManager().registerCommand( new CommandServer() );
|
||||||
getPluginManager().registerCommand(new CommandIP());
|
getPluginManager().registerCommand( new CommandIP() );
|
||||||
getPluginManager().registerCommand(new CommandAlert());
|
getPluginManager().registerCommand( new CommandAlert() );
|
||||||
getPluginManager().registerCommand(new CommandBungee());
|
getPluginManager().registerCommand( new CommandBungee() );
|
||||||
|
|
||||||
registerChannel("BungeeCord");
|
registerChannel( "BungeeCord" );
|
||||||
}
|
}
|
||||||
|
|
||||||
public static BungeeCord getInstance()
|
public static BungeeCord getInstance()
|
||||||
@ -123,20 +123,20 @@ public class BungeeCord extends ProxyServer
|
|||||||
public static void main(String[] args) throws IOException
|
public static void main(String[] args) throws IOException
|
||||||
{
|
{
|
||||||
BungeeCord bungee = new BungeeCord();
|
BungeeCord bungee = new BungeeCord();
|
||||||
ProxyServer.setInstance(bungee);
|
ProxyServer.setInstance( bungee );
|
||||||
$().info("Enabled BungeeCord version " + bungee.getVersion());
|
$().info( "Enabled BungeeCord version " + bungee.getVersion() );
|
||||||
bungee.start();
|
bungee.start();
|
||||||
|
|
||||||
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
|
BufferedReader br = new BufferedReader( new InputStreamReader( System.in ) );
|
||||||
while (bungee.isRunning)
|
while ( bungee.isRunning )
|
||||||
{
|
{
|
||||||
String line = br.readLine();
|
String line = br.readLine();
|
||||||
if (line != null)
|
if ( line != null )
|
||||||
{
|
{
|
||||||
boolean handled = getInstance().getPluginManager().dispatchCommand(ConsoleCommandSender.getInstance(), line);
|
boolean handled = getInstance().getPluginManager().dispatchCommand( ConsoleCommandSender.getInstance(), line );
|
||||||
if (!handled)
|
if ( !handled )
|
||||||
{
|
{
|
||||||
System.err.println("Command not found");
|
System.err.println( "Command not found" );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -150,31 +150,31 @@ public class BungeeCord extends ProxyServer
|
|||||||
*/
|
*/
|
||||||
public void start() throws IOException
|
public void start() throws IOException
|
||||||
{
|
{
|
||||||
File plugins = new File("plugins");
|
File plugins = new File( "plugins" );
|
||||||
plugins.mkdir();
|
plugins.mkdir();
|
||||||
pluginManager.loadPlugins(plugins);
|
pluginManager.loadPlugins( plugins );
|
||||||
config.load();
|
config.load();
|
||||||
reconnectHandler = new YamlReconnectHandler();
|
reconnectHandler = new YamlReconnectHandler();
|
||||||
isRunning = true;
|
isRunning = true;
|
||||||
|
|
||||||
pluginManager.enablePlugins();
|
pluginManager.enablePlugins();
|
||||||
|
|
||||||
for (ListenerInfo info : config.getListeners())
|
for ( ListenerInfo info : config.getListeners() )
|
||||||
{
|
{
|
||||||
$().info("Listening on " + info.getHost());
|
$().info( "Listening on " + info.getHost() );
|
||||||
ListenThread listener = new ListenThread(info);
|
ListenThread listener = new ListenThread( info );
|
||||||
listener.start();
|
listener.start();
|
||||||
listeners.add(listener);
|
listeners.add( listener );
|
||||||
}
|
}
|
||||||
|
|
||||||
saveThread.scheduleAtFixedRate(new TimerTask()
|
saveThread.scheduleAtFixedRate( new TimerTask()
|
||||||
{
|
{
|
||||||
@Override
|
@Override
|
||||||
public void run()
|
public void run()
|
||||||
{
|
{
|
||||||
getReconnectHandler().save();
|
getReconnectHandler().save();
|
||||||
}
|
}
|
||||||
}, 0, TimeUnit.MINUTES.toMillis(5));
|
}, 0, TimeUnit.MINUTES.toMillis( 5 ) );
|
||||||
|
|
||||||
new Metrics().start();
|
new Metrics().start();
|
||||||
}
|
}
|
||||||
@ -183,40 +183,40 @@ public class BungeeCord extends ProxyServer
|
|||||||
public void stop()
|
public void stop()
|
||||||
{
|
{
|
||||||
this.isRunning = false;
|
this.isRunning = false;
|
||||||
$().info("Disabling plugins");
|
$().info( "Disabling plugins" );
|
||||||
for (Plugin plugin : pluginManager.getPlugins())
|
for ( Plugin plugin : pluginManager.getPlugins() )
|
||||||
{
|
{
|
||||||
plugin.onDisable();
|
plugin.onDisable();
|
||||||
}
|
}
|
||||||
|
|
||||||
for (ListenThread listener : listeners)
|
for ( ListenThread listener : listeners )
|
||||||
{
|
{
|
||||||
$().log(Level.INFO, "Closing listen thread {0}", listener.socket);
|
$().log( Level.INFO, "Closing listen thread {0}", listener.socket );
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
listener.socket.close();
|
listener.socket.close();
|
||||||
listener.join();
|
listener.join();
|
||||||
} catch (InterruptedException | IOException ex)
|
} catch ( InterruptedException | IOException ex )
|
||||||
{
|
{
|
||||||
$().severe("Could not close listen thread");
|
$().severe( "Could not close listen thread" );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$().info("Closing pending connections");
|
$().info( "Closing pending connections" );
|
||||||
threadPool.shutdown();
|
threadPool.shutdown();
|
||||||
|
|
||||||
$().info("Disconnecting " + connections.size() + " connections");
|
$().info( "Disconnecting " + connections.size() + " connections" );
|
||||||
for (UserConnection user : connections.values())
|
for ( UserConnection user : connections.values() )
|
||||||
{
|
{
|
||||||
user.disconnect("Proxy restarting, brb.");
|
user.disconnect( "Proxy restarting, brb." );
|
||||||
}
|
}
|
||||||
|
|
||||||
$().info("Saving reconnect locations");
|
$().info( "Saving reconnect locations" );
|
||||||
reconnectHandler.save();
|
reconnectHandler.save();
|
||||||
saveThread.cancel();
|
saveThread.cancel();
|
||||||
|
|
||||||
$().info("Thank you and goodbye");
|
$().info( "Thank you and goodbye" );
|
||||||
System.exit(0);
|
System.exit( 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -228,9 +228,9 @@ public class BungeeCord extends ProxyServer
|
|||||||
*/
|
*/
|
||||||
public void setSocketOptions(Socket socket) throws IOException
|
public void setSocketOptions(Socket socket) throws IOException
|
||||||
{
|
{
|
||||||
socket.setSoTimeout(config.getTimeout());
|
socket.setSoTimeout( config.getTimeout() );
|
||||||
socket.setTrafficClass(0x18);
|
socket.setTrafficClass( 0x18 );
|
||||||
socket.setTcpNoDelay(true);
|
socket.setTcpNoDelay( true );
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -240,9 +240,9 @@ public class BungeeCord extends ProxyServer
|
|||||||
*/
|
*/
|
||||||
public void broadcast(DefinedPacket packet)
|
public void broadcast(DefinedPacket packet)
|
||||||
{
|
{
|
||||||
for (UserConnection con : connections.values())
|
for ( UserConnection con : connections.values() )
|
||||||
{
|
{
|
||||||
con.packetQueue.add(packet);
|
con.packetQueue.add( packet );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -255,7 +255,7 @@ public class BungeeCord extends ProxyServer
|
|||||||
@Override
|
@Override
|
||||||
public String getVersion()
|
public String getVersion()
|
||||||
{
|
{
|
||||||
return (BungeeCord.class.getPackage().getImplementationVersion() == null) ? "unknown" : BungeeCord.class.getPackage().getImplementationVersion();
|
return ( BungeeCord.class.getPackage().getImplementationVersion() == null ) ? "unknown" : BungeeCord.class.getPackage().getImplementationVersion();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -274,14 +274,14 @@ public class BungeeCord extends ProxyServer
|
|||||||
@Override
|
@Override
|
||||||
public ProxiedPlayer getPlayer(String name)
|
public ProxiedPlayer getPlayer(String name)
|
||||||
{
|
{
|
||||||
return connections.get(name);
|
return connections.get( name );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Server getServer(String name)
|
public Server getServer(String name)
|
||||||
{
|
{
|
||||||
Collection<ProxiedPlayer> users = getServers().get(name).getPlayers();
|
Collection<ProxiedPlayer> users = getServers().get( name ).getPlayers();
|
||||||
return (users != null && !users.isEmpty()) ? users.iterator().next().getServer() : null;
|
return ( users != null && !users.isEmpty() ) ? users.iterator().next().getServer() : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -293,40 +293,40 @@ public class BungeeCord extends ProxyServer
|
|||||||
@Override
|
@Override
|
||||||
public ServerInfo getServerInfo(String name)
|
public ServerInfo getServerInfo(String name)
|
||||||
{
|
{
|
||||||
return getServers().get(name);
|
return getServers().get( name );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Synchronized("pluginChannels")
|
@Synchronized("pluginChannels")
|
||||||
public void registerChannel(String channel)
|
public void registerChannel(String channel)
|
||||||
{
|
{
|
||||||
pluginChannels.add(channel);
|
pluginChannels.add( channel );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Synchronized("pluginChannels")
|
@Synchronized("pluginChannels")
|
||||||
public void unregisterChannel(String channel)
|
public void unregisterChannel(String channel)
|
||||||
{
|
{
|
||||||
pluginChannels.remove(channel);
|
pluginChannels.remove( channel );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Synchronized("pluginChannels")
|
@Synchronized("pluginChannels")
|
||||||
public Collection<String> getChannels()
|
public Collection<String> getChannels()
|
||||||
{
|
{
|
||||||
return Collections.unmodifiableCollection(pluginChannels);
|
return Collections.unmodifiableCollection( pluginChannels );
|
||||||
}
|
}
|
||||||
|
|
||||||
public PacketFAPluginMessage registerChannels()
|
public PacketFAPluginMessage registerChannels()
|
||||||
{
|
{
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
for (String s : getChannels())
|
for ( String s : getChannels() )
|
||||||
{
|
{
|
||||||
sb.append(s);
|
sb.append( s );
|
||||||
sb.append('\00');
|
sb.append( '\00' );
|
||||||
}
|
}
|
||||||
byte[] payload = sb.substring(0, sb.length() - 1).getBytes();
|
byte[] payload = sb.substring( 0, sb.length() - 1 ).getBytes();
|
||||||
return new PacketFAPluginMessage("REGISTER", payload);
|
return new PacketFAPluginMessage( "REGISTER", payload );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -344,6 +344,6 @@ public class BungeeCord extends ProxyServer
|
|||||||
@Override
|
@Override
|
||||||
public ServerInfo constructServerInfo(String name, InetSocketAddress address)
|
public ServerInfo constructServerInfo(String name, InetSocketAddress address)
|
||||||
{
|
{
|
||||||
return new BungeeServerInfo(name, address);
|
return new BungeeServerInfo( name, address );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -24,19 +24,19 @@ public class BungeeServerInfo extends ServerInfo
|
|||||||
|
|
||||||
public BungeeServerInfo(String name, InetSocketAddress address)
|
public BungeeServerInfo(String name, InetSocketAddress address)
|
||||||
{
|
{
|
||||||
super(name, address);
|
super( name, address );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void sendData(String channel, byte[] data)
|
public void sendData(String channel, byte[] data)
|
||||||
{
|
{
|
||||||
Server server = ProxyServer.getInstance().getServer(getName());
|
Server server = ProxyServer.getInstance().getServer( getName() );
|
||||||
if (server != null)
|
if ( server != null )
|
||||||
{
|
{
|
||||||
server.sendData(channel, data);
|
server.sendData( channel, data );
|
||||||
} else
|
} else
|
||||||
{
|
{
|
||||||
packetQueue.add(new PacketFAPluginMessage(channel, data));
|
packetQueue.add( new PacketFAPluginMessage( channel, data ) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -51,24 +51,24 @@ public class BungeeServerInfo extends ServerInfo
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
Socket socket = new Socket();
|
Socket socket = new Socket();
|
||||||
socket.connect(getAddress());
|
socket.connect( getAddress() );
|
||||||
try (DataOutputStream out = new DataOutputStream(socket.getOutputStream()))
|
try ( DataOutputStream out = new DataOutputStream( socket.getOutputStream() ) )
|
||||||
{
|
{
|
||||||
out.write(0xFE);
|
out.write( 0xFE );
|
||||||
out.write(0x01);
|
out.write( 0x01 );
|
||||||
}
|
}
|
||||||
try (PacketStream in = new PacketStream(socket.getInputStream()))
|
try ( PacketStream in = new PacketStream( socket.getInputStream() ) )
|
||||||
{
|
{
|
||||||
PacketFFKick response = new PacketFFKick(in.readPacket());
|
PacketFFKick response = new PacketFFKick( in.readPacket() );
|
||||||
|
|
||||||
String[] split = response.message.split("\00");
|
String[] split = response.message.split( "\00" );
|
||||||
|
|
||||||
ServerPing ping = new ServerPing(Byte.parseByte(split[1]), split[2], split[3], Integer.parseInt(split[4]), Integer.parseInt(split[5]));
|
ServerPing ping = new ServerPing( Byte.parseByte( split[1] ), split[2], split[3], Integer.parseInt( split[4] ), Integer.parseInt( split[5] ) );
|
||||||
callback.done(ping, null);
|
callback.done( ping, null );
|
||||||
}
|
}
|
||||||
} catch (Throwable t)
|
} catch ( Throwable t )
|
||||||
{
|
{
|
||||||
callback.done(null, t);
|
callback.done( null, t );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}.start();
|
}.start();
|
||||||
|
@ -41,69 +41,69 @@ public class EncryptionUtil
|
|||||||
|
|
||||||
static
|
static
|
||||||
{
|
{
|
||||||
Security.addProvider(new BouncyCastleProvider());
|
Security.addProvider( new BouncyCastleProvider() );
|
||||||
}
|
}
|
||||||
|
|
||||||
public static PacketFDEncryptionRequest encryptRequest() throws NoSuchAlgorithmException
|
public static PacketFDEncryptionRequest encryptRequest() throws NoSuchAlgorithmException
|
||||||
{
|
{
|
||||||
if (keys == null)
|
if ( keys == null )
|
||||||
{
|
{
|
||||||
keys = KeyPairGenerator.getInstance("RSA").generateKeyPair();
|
keys = KeyPairGenerator.getInstance( "RSA" ).generateKeyPair();
|
||||||
}
|
}
|
||||||
|
|
||||||
String hash = Long.toString(random.nextLong(), 16);
|
String hash = Long.toString( random.nextLong(), 16 );
|
||||||
byte[] pubKey = keys.getPublic().getEncoded();
|
byte[] pubKey = keys.getPublic().getEncoded();
|
||||||
byte[] verify = new byte[4];
|
byte[] verify = new byte[ 4 ];
|
||||||
random.nextBytes(verify);
|
random.nextBytes( verify );
|
||||||
return new PacketFDEncryptionRequest(hash, pubKey, verify);
|
return new PacketFDEncryptionRequest( hash, pubKey, verify );
|
||||||
}
|
}
|
||||||
|
|
||||||
public static SecretKey getSecret(PacketFCEncryptionResponse resp, PacketFDEncryptionRequest request) throws BadPaddingException, IllegalBlockSizeException, IllegalStateException, InvalidKeyException, NoSuchAlgorithmException, NoSuchPaddingException
|
public static SecretKey getSecret(PacketFCEncryptionResponse resp, PacketFDEncryptionRequest request) throws BadPaddingException, IllegalBlockSizeException, IllegalStateException, InvalidKeyException, NoSuchAlgorithmException, NoSuchPaddingException
|
||||||
{
|
{
|
||||||
Cipher cipher = Cipher.getInstance("RSA");
|
Cipher cipher = Cipher.getInstance( "RSA" );
|
||||||
cipher.init(Cipher.DECRYPT_MODE, keys.getPrivate());
|
cipher.init( Cipher.DECRYPT_MODE, keys.getPrivate() );
|
||||||
byte[] decrypted = cipher.doFinal(resp.verifyToken);
|
byte[] decrypted = cipher.doFinal( resp.verifyToken );
|
||||||
|
|
||||||
if (!Arrays.equals(request.verifyToken, decrypted))
|
if ( !Arrays.equals( request.verifyToken, decrypted ) )
|
||||||
{
|
{
|
||||||
throw new IllegalStateException("Key pairs do not match!");
|
throw new IllegalStateException( "Key pairs do not match!" );
|
||||||
}
|
}
|
||||||
|
|
||||||
cipher.init(Cipher.DECRYPT_MODE, keys.getPrivate());
|
cipher.init( Cipher.DECRYPT_MODE, keys.getPrivate() );
|
||||||
byte[] shared = resp.sharedSecret;
|
byte[] shared = resp.sharedSecret;
|
||||||
byte[] secret = cipher.doFinal(shared);
|
byte[] secret = cipher.doFinal( shared );
|
||||||
|
|
||||||
return new SecretKeySpec(secret, "AES");
|
return new SecretKeySpec( secret, "AES" );
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isAuthenticated(String username, String connectionHash, SecretKey shared) throws NoSuchAlgorithmException, IOException
|
public static boolean isAuthenticated(String username, String connectionHash, SecretKey shared) throws NoSuchAlgorithmException, IOException
|
||||||
{
|
{
|
||||||
String encName = URLEncoder.encode(username, "UTF-8");
|
String encName = URLEncoder.encode( username, "UTF-8" );
|
||||||
|
|
||||||
MessageDigest sha = MessageDigest.getInstance("SHA-1");
|
MessageDigest sha = MessageDigest.getInstance( "SHA-1" );
|
||||||
for (byte[] bit : new byte[][]
|
for ( byte[] bit : new byte[][]
|
||||||
{
|
{
|
||||||
connectionHash.getBytes("ISO_8859_1"), shared.getEncoded(), keys.getPublic().getEncoded()
|
connectionHash.getBytes( "ISO_8859_1" ), shared.getEncoded(), keys.getPublic().getEncoded()
|
||||||
})
|
} )
|
||||||
{
|
{
|
||||||
sha.update(bit);
|
sha.update( bit );
|
||||||
}
|
}
|
||||||
|
|
||||||
String encodedHash = URLEncoder.encode(new BigInteger(sha.digest()).toString(16), "UTF-8");
|
String encodedHash = URLEncoder.encode( new BigInteger( sha.digest() ).toString( 16 ), "UTF-8" );
|
||||||
String authURL = "http://session.minecraft.net/game/checkserver.jsp?user=" + encName + "&serverId=" + encodedHash;
|
String authURL = "http://session.minecraft.net/game/checkserver.jsp?user=" + encName + "&serverId=" + encodedHash;
|
||||||
String reply;
|
String reply;
|
||||||
try (BufferedReader in = new BufferedReader(new InputStreamReader(new URL(authURL).openStream())))
|
try ( BufferedReader in = new BufferedReader( new InputStreamReader( new URL( authURL ).openStream() ) ) )
|
||||||
{
|
{
|
||||||
reply = in.readLine();
|
reply = in.readLine();
|
||||||
}
|
}
|
||||||
|
|
||||||
return "YES".equals(reply);
|
return "YES".equals( reply );
|
||||||
}
|
}
|
||||||
|
|
||||||
public static BufferedBlockCipher getCipher(boolean forEncryption, Key shared)
|
public static BufferedBlockCipher getCipher(boolean forEncryption, Key shared)
|
||||||
{
|
{
|
||||||
BufferedBlockCipher cip = new BufferedBlockCipher(new CFBBlockCipher(new AESFastEngine(), 8));
|
BufferedBlockCipher cip = new BufferedBlockCipher( new CFBBlockCipher( new AESFastEngine(), 8 ) );
|
||||||
cip.init(forEncryption, new ParametersWithIV(new KeyParameter(shared.getEncoded()), shared.getEncoded()));
|
cip.init( forEncryption, new ParametersWithIV( new KeyParameter( shared.getEncoded() ), shared.getEncoded() ) );
|
||||||
return cip;
|
return cip;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6,7 +6,7 @@ package net.md_5.bungee;
|
|||||||
public class EntityMap
|
public class EntityMap
|
||||||
{
|
{
|
||||||
|
|
||||||
public final static int[][] entityIds = new int[256][];
|
public final static int[][] entityIds = new int[ 256 ][];
|
||||||
|
|
||||||
static
|
static
|
||||||
{
|
{
|
||||||
@ -115,34 +115,34 @@ public class EntityMap
|
|||||||
|
|
||||||
public static void rewrite(byte[] packet, int oldId, int newId)
|
public static void rewrite(byte[] packet, int oldId, int newId)
|
||||||
{
|
{
|
||||||
int packetId = Util.getId(packet);
|
int packetId = Util.getId( packet );
|
||||||
if (packetId == 0x1D)
|
if ( packetId == 0x1D )
|
||||||
{ // bulk entity
|
{ // bulk entity
|
||||||
for (int pos = 2; pos < packet.length; pos += 4)
|
for ( int pos = 2; pos < packet.length; pos += 4 )
|
||||||
{
|
{
|
||||||
int readId = readInt(packet, pos);
|
int readId = readInt( packet, pos );
|
||||||
if (readId == oldId)
|
if ( readId == oldId )
|
||||||
{
|
{
|
||||||
setInt(packet, pos, newId);
|
setInt( packet, pos, newId );
|
||||||
} else if (readId == newId)
|
} else if ( readId == newId )
|
||||||
{
|
{
|
||||||
setInt(packet, pos, oldId);
|
setInt( packet, pos, oldId );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else
|
} else
|
||||||
{
|
{
|
||||||
int[] idArray = entityIds[packetId];
|
int[] idArray = entityIds[packetId];
|
||||||
if (idArray != null)
|
if ( idArray != null )
|
||||||
{
|
{
|
||||||
for (int pos : idArray)
|
for ( int pos : idArray )
|
||||||
{
|
{
|
||||||
int readId = readInt(packet, pos);
|
int readId = readInt( packet, pos );
|
||||||
if (readId == oldId)
|
if ( readId == oldId )
|
||||||
{
|
{
|
||||||
setInt(packet, pos, newId);
|
setInt( packet, pos, newId );
|
||||||
} else if (readId == newId)
|
} else if ( readId == newId )
|
||||||
{
|
{
|
||||||
setInt(packet, pos, oldId);
|
setInt( packet, pos, oldId );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -151,14 +151,14 @@ public class EntityMap
|
|||||||
|
|
||||||
private static void setInt(byte[] buf, int pos, int i)
|
private static void setInt(byte[] buf, int pos, int i)
|
||||||
{
|
{
|
||||||
buf[pos] = (byte) (i >> 24);
|
buf[pos] = (byte) ( i >> 24 );
|
||||||
buf[pos + 1] = (byte) (i >> 16);
|
buf[pos + 1] = (byte) ( i >> 16 );
|
||||||
buf[pos + 2] = (byte) (i >> 8);
|
buf[pos + 2] = (byte) ( i >> 8 );
|
||||||
buf[pos + 3] = (byte) i;
|
buf[pos + 3] = (byte) i;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static int readInt(byte[] buf, int pos)
|
private static int readInt(byte[] buf, int pos)
|
||||||
{
|
{
|
||||||
return (((buf[pos] & 0xFF) << 24) | ((buf[pos + 1] & 0xFF) << 16) | ((buf[pos + 2] & 0xFF) << 8) | buf[pos + 3] & 0xFF);
|
return ( ( ( buf[pos] & 0xFF ) << 24 ) | ( ( buf[pos + 1] & 0xFF ) << 16 ) | ( ( buf[pos + 2] & 0xFF ) << 8 ) | buf[pos + 3] & 0xFF );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -32,15 +32,15 @@ public class GenericConnection
|
|||||||
*/
|
*/
|
||||||
public void disconnect(String reason)
|
public void disconnect(String reason)
|
||||||
{
|
{
|
||||||
if (socket.isClosed())
|
if ( socket.isClosed() )
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
log("disconnected with " + reason);
|
log( "disconnected with " + reason );
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
stream.write(new PacketFFKick("[Proxy] " + reason));
|
stream.write( new PacketFFKick( "[Proxy] " + reason ) );
|
||||||
} catch (IOException ex)
|
} catch ( IOException ex )
|
||||||
{
|
{
|
||||||
} finally
|
} finally
|
||||||
{
|
{
|
||||||
@ -48,7 +48,7 @@ public class GenericConnection
|
|||||||
{
|
{
|
||||||
socket.shutdownOutput();
|
socket.shutdownOutput();
|
||||||
socket.close();
|
socket.close();
|
||||||
} catch (IOException ioe)
|
} catch ( IOException ioe )
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -56,6 +56,6 @@ public class GenericConnection
|
|||||||
|
|
||||||
public void log(String message)
|
public void log(String message)
|
||||||
{
|
{
|
||||||
$().info(socket.getInetAddress() + ((name == null) ? " " : " [" + name + "] ") + message);
|
$().info( socket.getInetAddress() + ( ( name == null ) ? " " : " [" + name + "] " ) + message );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -43,7 +43,7 @@ public class InitialHandler extends PacketHandler implements Runnable, PendingCo
|
|||||||
{
|
{
|
||||||
this.socket = socket;
|
this.socket = socket;
|
||||||
this.listener = info;
|
this.listener = info;
|
||||||
stream = new PacketStream(socket.getInputStream(), socket.getOutputStream());
|
stream = new PacketStream( socket.getInputStream(), socket.getOutputStream() );
|
||||||
}
|
}
|
||||||
|
|
||||||
private enum State
|
private enum State
|
||||||
@ -55,69 +55,69 @@ public class InitialHandler extends PacketHandler implements Runnable, PendingCo
|
|||||||
@Override
|
@Override
|
||||||
public void handle(PacketFEPing ping) throws Exception
|
public void handle(PacketFEPing ping) throws Exception
|
||||||
{
|
{
|
||||||
socket.setSoTimeout(100);
|
socket.setSoTimeout( 100 );
|
||||||
boolean newPing = false;
|
boolean newPing = false;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
socket.getInputStream().read();
|
socket.getInputStream().read();
|
||||||
newPing = true;
|
newPing = true;
|
||||||
} catch (IOException ex)
|
} catch ( IOException ex )
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
ServerPing pingevent = new ServerPing(BungeeCord.PROTOCOL_VERSION, BungeeCord.GAME_VERSION,
|
ServerPing pingevent = new ServerPing( BungeeCord.PROTOCOL_VERSION, BungeeCord.GAME_VERSION,
|
||||||
listener.getMotd(), ProxyServer.getInstance().getPlayers().size(), listener.getMaxPlayers());
|
listener.getMotd(), ProxyServer.getInstance().getPlayers().size(), listener.getMaxPlayers() );
|
||||||
|
|
||||||
pingevent = ProxyServer.getInstance().getPluginManager().callEvent(new ProxyPingEvent(this, pingevent)).getResponse();
|
pingevent = ProxyServer.getInstance().getPluginManager().callEvent( new ProxyPingEvent( this, pingevent ) ).getResponse();
|
||||||
|
|
||||||
String response = (newPing) ? ChatColor.COLOR_CHAR + "1"
|
String response = ( newPing ) ? ChatColor.COLOR_CHAR + "1"
|
||||||
+ "\00" + pingevent.getProtocolVersion()
|
+ "\00" + pingevent.getProtocolVersion()
|
||||||
+ "\00" + pingevent.getGameVersion()
|
+ "\00" + pingevent.getGameVersion()
|
||||||
+ "\00" + pingevent.getMotd()
|
+ "\00" + pingevent.getMotd()
|
||||||
+ "\00" + pingevent.getCurrentPlayers()
|
+ "\00" + pingevent.getCurrentPlayers()
|
||||||
+ "\00" + pingevent.getMaxPlayers()
|
+ "\00" + pingevent.getMaxPlayers()
|
||||||
: pingevent.getMotd() + ChatColor.COLOR_CHAR + pingevent.getCurrentPlayers() + ChatColor.COLOR_CHAR + pingevent.getMaxPlayers();
|
: pingevent.getMotd() + ChatColor.COLOR_CHAR + pingevent.getCurrentPlayers() + ChatColor.COLOR_CHAR + pingevent.getMaxPlayers();
|
||||||
disconnect(response);
|
disconnect( response );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void handle(Packet2Handshake handshake) throws Exception
|
public void handle(Packet2Handshake handshake) throws Exception
|
||||||
{
|
{
|
||||||
Preconditions.checkState(thisState == State.HANDSHAKE, "Not expecting HANDSHAKE");
|
Preconditions.checkState( thisState == State.HANDSHAKE, "Not expecting HANDSHAKE" );
|
||||||
this.handshake = handshake;
|
this.handshake = handshake;
|
||||||
request = EncryptionUtil.encryptRequest();
|
request = EncryptionUtil.encryptRequest();
|
||||||
stream.write(request);
|
stream.write( request );
|
||||||
thisState = State.ENCRYPT;
|
thisState = State.ENCRYPT;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void handle(PacketFCEncryptionResponse encryptResponse) throws Exception
|
public void handle(PacketFCEncryptionResponse encryptResponse) throws Exception
|
||||||
{
|
{
|
||||||
Preconditions.checkState(thisState == State.ENCRYPT, "Not expecting ENCRYPT");
|
Preconditions.checkState( thisState == State.ENCRYPT, "Not expecting ENCRYPT" );
|
||||||
|
|
||||||
SecretKey shared = EncryptionUtil.getSecret(encryptResponse, request);
|
SecretKey shared = EncryptionUtil.getSecret( encryptResponse, request );
|
||||||
if (!EncryptionUtil.isAuthenticated(handshake.username, request.serverId, shared))
|
if ( !EncryptionUtil.isAuthenticated( handshake.username, request.serverId, shared ) )
|
||||||
{
|
{
|
||||||
throw new KickException("Not authenticated with minecraft.net");
|
throw new KickException( "Not authenticated with minecraft.net" );
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check for multiple connections
|
// Check for multiple connections
|
||||||
ProxiedPlayer old = ProxyServer.getInstance().getPlayer(handshake.username);
|
ProxiedPlayer old = ProxyServer.getInstance().getPlayer( handshake.username );
|
||||||
if (old != null)
|
if ( old != null )
|
||||||
{
|
{
|
||||||
old.disconnect("You are already connected to the server");
|
old.disconnect( "You are already connected to the server" );
|
||||||
}
|
}
|
||||||
|
|
||||||
// fire login event
|
// fire login event
|
||||||
LoginEvent event = new LoginEvent(this);
|
LoginEvent event = new LoginEvent( this );
|
||||||
if (event.isCancelled())
|
if ( event.isCancelled() )
|
||||||
{
|
{
|
||||||
disconnect(event.getCancelReason());
|
disconnect( event.getCancelReason() );
|
||||||
}
|
}
|
||||||
|
|
||||||
stream.write(new PacketFCEncryptionResponse());
|
stream.write( new PacketFCEncryptionResponse() );
|
||||||
stream = new PacketStream(new CipherInputStream(socket.getInputStream(),
|
stream = new PacketStream( new CipherInputStream( socket.getInputStream(),
|
||||||
EncryptionUtil.getCipher(false, shared)), new CipherOutputStream(socket.getOutputStream(), EncryptionUtil.getCipher(true, shared)));
|
EncryptionUtil.getCipher( false, shared ) ), new CipherOutputStream( socket.getOutputStream(), EncryptionUtil.getCipher( true, shared ) ) );
|
||||||
|
|
||||||
thisState = State.LOGIN;
|
thisState = State.LOGIN;
|
||||||
}
|
}
|
||||||
@ -125,12 +125,12 @@ public class InitialHandler extends PacketHandler implements Runnable, PendingCo
|
|||||||
@Override
|
@Override
|
||||||
public void handle(PacketCDClientStatus clientStatus) throws Exception
|
public void handle(PacketCDClientStatus clientStatus) throws Exception
|
||||||
{
|
{
|
||||||
Preconditions.checkState(thisState == State.LOGIN, "Not expecting LOGIN");
|
Preconditions.checkState( thisState == State.LOGIN, "Not expecting LOGIN" );
|
||||||
|
|
||||||
UserConnection userCon = new UserConnection(socket, this, stream, handshake);
|
UserConnection userCon = new UserConnection( socket, this, stream, handshake );
|
||||||
String server = ProxyServer.getInstance().getReconnectHandler().getServer(userCon);
|
String server = ProxyServer.getInstance().getReconnectHandler().getServer( userCon );
|
||||||
ServerInfo s = BungeeCord.getInstance().config.getServers().get(server);
|
ServerInfo s = BungeeCord.getInstance().config.getServers().get( server );
|
||||||
userCon.connect(s, true);
|
userCon.connect( s, true );
|
||||||
|
|
||||||
thisState = State.FINISHED;
|
thisState = State.FINISHED;
|
||||||
}
|
}
|
||||||
@ -140,15 +140,15 @@ public class InitialHandler extends PacketHandler implements Runnable, PendingCo
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
while (thisState != State.FINISHED)
|
while ( thisState != State.FINISHED )
|
||||||
{
|
{
|
||||||
byte[] buf = stream.readPacket();
|
byte[] buf = stream.readPacket();
|
||||||
DefinedPacket packet = DefinedPacket.packet(buf);
|
DefinedPacket packet = DefinedPacket.packet( buf );
|
||||||
packet.handle(this);
|
packet.handle( this );
|
||||||
}
|
}
|
||||||
} catch (Exception ex)
|
} catch ( Exception ex )
|
||||||
{
|
{
|
||||||
disconnect("[Proxy Error] " + Util.exception(ex));
|
disconnect( "[Proxy Error] " + Util.exception( ex ) );
|
||||||
ex.printStackTrace();
|
ex.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -159,8 +159,8 @@ public class InitialHandler extends PacketHandler implements Runnable, PendingCo
|
|||||||
thisState = State.FINISHED;
|
thisState = State.FINISHED;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
stream.write(new PacketFFKick(reason));
|
stream.write( new PacketFFKick( reason ) );
|
||||||
} catch (IOException ioe)
|
} catch ( IOException ioe )
|
||||||
{
|
{
|
||||||
} finally
|
} finally
|
||||||
{
|
{
|
||||||
@ -168,7 +168,7 @@ public class InitialHandler extends PacketHandler implements Runnable, PendingCo
|
|||||||
{
|
{
|
||||||
socket.shutdownOutput();
|
socket.shutdownOutput();
|
||||||
socket.close();
|
socket.close();
|
||||||
} catch (IOException ioe2)
|
} catch ( IOException ioe2 )
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -177,19 +177,19 @@ public class InitialHandler extends PacketHandler implements Runnable, PendingCo
|
|||||||
@Override
|
@Override
|
||||||
public String getName()
|
public String getName()
|
||||||
{
|
{
|
||||||
return (handshake == null) ? null : handshake.username;
|
return ( handshake == null ) ? null : handshake.username;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public byte getVersion()
|
public byte getVersion()
|
||||||
{
|
{
|
||||||
return (handshake == null) ? -1 : handshake.procolVersion;
|
return ( handshake == null ) ? -1 : handshake.procolVersion;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public InetSocketAddress getVirtualHost()
|
public InetSocketAddress getVirtualHost()
|
||||||
{
|
{
|
||||||
return (handshake == null) ? null : new InetSocketAddress(handshake.host, handshake.port);
|
return ( handshake == null ) ? null : new InetSocketAddress( handshake.host, handshake.port );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -9,6 +9,6 @@ public class KickException extends RuntimeException
|
|||||||
|
|
||||||
public KickException(String message)
|
public KickException(String message)
|
||||||
{
|
{
|
||||||
super(message);
|
super( message );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -18,27 +18,27 @@ public class ListenThread extends Thread
|
|||||||
|
|
||||||
public ListenThread(ListenerInfo info) throws IOException
|
public ListenThread(ListenerInfo info) throws IOException
|
||||||
{
|
{
|
||||||
super("Listen Thread - "+ info);
|
super( "Listen Thread - " + info );
|
||||||
this.info = info;
|
this.info = info;
|
||||||
socket = new ServerSocket();
|
socket = new ServerSocket();
|
||||||
socket.bind(info.getHost());
|
socket.bind( info.getHost() );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void run()
|
public void run()
|
||||||
{
|
{
|
||||||
while (BungeeCord.getInstance().isRunning)
|
while ( BungeeCord.getInstance().isRunning )
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
Socket client = socket.accept();
|
Socket client = socket.accept();
|
||||||
BungeeCord.getInstance().setSocketOptions(client);
|
BungeeCord.getInstance().setSocketOptions( client );
|
||||||
$().info(client.getInetAddress() + " has connected");
|
$().info( client.getInetAddress() + " has connected" );
|
||||||
InitialHandler handler = new InitialHandler(client,info);
|
InitialHandler handler = new InitialHandler( client, info );
|
||||||
BungeeCord.getInstance().threadPool.submit(handler);
|
BungeeCord.getInstance().threadPool.submit( handler );
|
||||||
} catch (SocketException ex)
|
} catch ( SocketException ex )
|
||||||
{
|
{
|
||||||
} catch (IOException ex)
|
} catch ( IOException ex )
|
||||||
{
|
{
|
||||||
ex.printStackTrace(); // TODO
|
ex.printStackTrace(); // TODO
|
||||||
}
|
}
|
||||||
|
@ -21,15 +21,15 @@ public class Logger extends java.util.logging.Logger
|
|||||||
|
|
||||||
public Logger()
|
public Logger()
|
||||||
{
|
{
|
||||||
super("RubberBand", null);
|
super( "RubberBand", null );
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
FileHandler handler = new FileHandler("proxy.log", 1 << 14, 1, true);
|
FileHandler handler = new FileHandler( "proxy.log", 1 << 14, 1, true );
|
||||||
handler.setFormatter(formatter);
|
handler.setFormatter( formatter );
|
||||||
addHandler(handler);
|
addHandler( handler );
|
||||||
} catch (IOException ex)
|
} catch ( IOException ex )
|
||||||
{
|
{
|
||||||
System.err.println("Could not register logger!");
|
System.err.println( "Could not register logger!" );
|
||||||
ex.printStackTrace();
|
ex.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -37,14 +37,14 @@ public class Logger extends java.util.logging.Logger
|
|||||||
@Override
|
@Override
|
||||||
public void log(LogRecord record)
|
public void log(LogRecord record)
|
||||||
{
|
{
|
||||||
super.log(record);
|
super.log( record );
|
||||||
String message = formatter.format(record);
|
String message = formatter.format( record );
|
||||||
if (record.getLevel() == Level.SEVERE || record.getLevel() == Level.WARNING)
|
if ( record.getLevel() == Level.SEVERE || record.getLevel() == Level.WARNING )
|
||||||
{
|
{
|
||||||
System.err.print(message);
|
System.err.print( message );
|
||||||
} else
|
} else
|
||||||
{
|
{
|
||||||
System.out.print(message);
|
System.out.print( message );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -61,46 +61,46 @@ public class Logger extends java.util.logging.Logger
|
|||||||
public static class ConsoleLogFormatter extends Formatter
|
public static class ConsoleLogFormatter extends Formatter
|
||||||
{
|
{
|
||||||
|
|
||||||
private SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss");
|
private SimpleDateFormat formatter = new SimpleDateFormat( "HH:mm:ss" );
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String format(LogRecord logrecord)
|
public String format(LogRecord logrecord)
|
||||||
{
|
{
|
||||||
StringBuilder formatted = new StringBuilder();
|
StringBuilder formatted = new StringBuilder();
|
||||||
|
|
||||||
formatted.append(formatter.format(logrecord.getMillis()));
|
formatted.append( formatter.format( logrecord.getMillis() ) );
|
||||||
Level level = logrecord.getLevel();
|
Level level = logrecord.getLevel();
|
||||||
|
|
||||||
if (level == Level.FINEST)
|
if ( level == Level.FINEST )
|
||||||
{
|
{
|
||||||
formatted.append(" [FINEST] ");
|
formatted.append( " [FINEST] " );
|
||||||
} else if (level == Level.FINER)
|
} else if ( level == Level.FINER )
|
||||||
{
|
{
|
||||||
formatted.append(" [FINER] ");
|
formatted.append( " [FINER] " );
|
||||||
} else if (level == Level.FINE)
|
} else if ( level == Level.FINE )
|
||||||
{
|
{
|
||||||
formatted.append(" [FINE] ");
|
formatted.append( " [FINE] " );
|
||||||
} else if (level == Level.INFO)
|
} else if ( level == Level.INFO )
|
||||||
{
|
{
|
||||||
formatted.append(" [INFO] ");
|
formatted.append( " [INFO] " );
|
||||||
} else if (level == Level.WARNING)
|
} else if ( level == Level.WARNING )
|
||||||
{
|
{
|
||||||
formatted.append(" [WARNING] ");
|
formatted.append( " [WARNING] " );
|
||||||
} else if (level == Level.SEVERE)
|
} else if ( level == Level.SEVERE )
|
||||||
{
|
{
|
||||||
formatted.append(" [SEVERE] ");
|
formatted.append( " [SEVERE] " );
|
||||||
}
|
}
|
||||||
|
|
||||||
formatted.append(MessageFormat.format(logrecord.getMessage(), logrecord.getParameters()));
|
formatted.append( MessageFormat.format( logrecord.getMessage(), logrecord.getParameters() ) );
|
||||||
formatted.append('\n');
|
formatted.append( '\n' );
|
||||||
Throwable throwable = logrecord.getThrown();
|
Throwable throwable = logrecord.getThrown();
|
||||||
|
|
||||||
if (throwable != null)
|
if ( throwable != null )
|
||||||
{
|
{
|
||||||
StringWriter writer = new StringWriter();
|
StringWriter writer = new StringWriter();
|
||||||
|
|
||||||
throwable.printStackTrace(new PrintWriter(writer));
|
throwable.printStackTrace( new PrintWriter( writer ) );
|
||||||
formatted.append(writer);
|
formatted.append( writer );
|
||||||
}
|
}
|
||||||
|
|
||||||
return formatted.toString();
|
return formatted.toString();
|
||||||
|
@ -33,34 +33,34 @@ public class Metrics extends Thread
|
|||||||
|
|
||||||
public Metrics()
|
public Metrics()
|
||||||
{
|
{
|
||||||
super("Metrics Gathering Thread");
|
super( "Metrics Gathering Thread" );
|
||||||
setDaemon(true);
|
setDaemon( true );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void run()
|
public void run()
|
||||||
{
|
{
|
||||||
boolean firstPost = true;
|
boolean firstPost = true;
|
||||||
while (true)
|
while ( true )
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
// We use the inverse of firstPost because if it is the first time we are posting,
|
// We use the inverse of firstPost because if it is the first time we are posting,
|
||||||
// it is not a interval ping, so it evaluates to FALSE
|
// it is not a interval ping, so it evaluates to FALSE
|
||||||
// Each time thereafter it will evaluate to TRUE, i.e PING!
|
// Each time thereafter it will evaluate to TRUE, i.e PING!
|
||||||
postPlugin(!firstPost);
|
postPlugin( !firstPost );
|
||||||
|
|
||||||
// After the first post we set firstPost to false
|
// After the first post we set firstPost to false
|
||||||
// Each post thereafter will be a ping
|
// Each post thereafter will be a ping
|
||||||
firstPost = false;
|
firstPost = false;
|
||||||
} catch (IOException ex)
|
} catch ( IOException ex )
|
||||||
{
|
{
|
||||||
$().info("[Metrics] " + ex.getMessage());
|
$().info( "[Metrics] " + ex.getMessage() );
|
||||||
}
|
}
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
sleep(PING_INTERVAL * 1000 * 60);
|
sleep( PING_INTERVAL * 1000 * 60 );
|
||||||
} catch (InterruptedException ex)
|
} catch ( InterruptedException ex )
|
||||||
{
|
{
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -74,41 +74,41 @@ public class Metrics extends Thread
|
|||||||
{
|
{
|
||||||
// Construct the post data
|
// Construct the post data
|
||||||
final StringBuilder data = new StringBuilder();
|
final StringBuilder data = new StringBuilder();
|
||||||
data.append(encode("guid")).append('=').append(encode(BungeeCord.getInstance().config.getUuid()));
|
data.append( encode( "guid" ) ).append( '=' ).append( encode( BungeeCord.getInstance().config.getUuid() ) );
|
||||||
encodeDataPair(data, "version", ProxyServer.getInstance().getVersion());
|
encodeDataPair( data, "version", ProxyServer.getInstance().getVersion() );
|
||||||
encodeDataPair(data, "server", "0");
|
encodeDataPair( data, "server", "0" );
|
||||||
encodeDataPair(data, "players", Integer.toString(ProxyServer.getInstance().getPlayers().size()));
|
encodeDataPair( data, "players", Integer.toString( ProxyServer.getInstance().getPlayers().size() ) );
|
||||||
encodeDataPair(data, "revision", String.valueOf(REVISION));
|
encodeDataPair( data, "revision", String.valueOf( REVISION ) );
|
||||||
|
|
||||||
// If we're pinging, append it
|
// If we're pinging, append it
|
||||||
if (isPing)
|
if ( isPing )
|
||||||
{
|
{
|
||||||
encodeDataPair(data, "ping", "true");
|
encodeDataPair( data, "ping", "true" );
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create the url
|
// Create the url
|
||||||
URL url = new URL(BASE_URL + String.format(REPORT_URL, encode("BungeeCord")));
|
URL url = new URL( BASE_URL + String.format( REPORT_URL, encode( "BungeeCord" ) ) );
|
||||||
|
|
||||||
// Connect to the website
|
// Connect to the website
|
||||||
URLConnection connection;
|
URLConnection connection;
|
||||||
|
|
||||||
connection = url.openConnection();
|
connection = url.openConnection();
|
||||||
|
|
||||||
connection.setDoOutput(true);
|
connection.setDoOutput( true );
|
||||||
final BufferedReader reader;
|
final BufferedReader reader;
|
||||||
final String response;
|
final String response;
|
||||||
try (OutputStreamWriter writer = new OutputStreamWriter(connection.getOutputStream()))
|
try ( OutputStreamWriter writer = new OutputStreamWriter( connection.getOutputStream() ) )
|
||||||
{
|
{
|
||||||
writer.write(data.toString());
|
writer.write( data.toString() );
|
||||||
writer.flush();
|
writer.flush();
|
||||||
reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
|
reader = new BufferedReader( new InputStreamReader( connection.getInputStream() ) );
|
||||||
response = reader.readLine();
|
response = reader.readLine();
|
||||||
}
|
}
|
||||||
reader.close();
|
reader.close();
|
||||||
|
|
||||||
if (response == null || response.startsWith("ERR"))
|
if ( response == null || response.startsWith( "ERR" ) )
|
||||||
{
|
{
|
||||||
throw new IOException(response); //Throw the exception
|
throw new IOException( response ); //Throw the exception
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -128,7 +128,7 @@ public class Metrics extends Thread
|
|||||||
*/
|
*/
|
||||||
private static void encodeDataPair(final StringBuilder buffer, final String key, final String value) throws UnsupportedEncodingException
|
private static void encodeDataPair(final StringBuilder buffer, final String key, final String value) throws UnsupportedEncodingException
|
||||||
{
|
{
|
||||||
buffer.append('&').append(encode(key)).append('=').append(encode(value));
|
buffer.append( '&' ).append( encode( key ) ).append( '=' ).append( encode( value ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -139,6 +139,6 @@ public class Metrics extends Thread
|
|||||||
*/
|
*/
|
||||||
private static String encode(final String text) throws UnsupportedEncodingException
|
private static String encode(final String text) throws UnsupportedEncodingException
|
||||||
{
|
{
|
||||||
return URLEncoder.encode(text, "UTF-8");
|
return URLEncoder.encode( text, "UTF-8" );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -33,7 +33,7 @@ public class ServerConnection extends GenericConnection implements Server
|
|||||||
|
|
||||||
public ServerConnection(Socket socket, ServerInfo info, PacketStream stream, Packet1Login loginPacket)
|
public ServerConnection(Socket socket, ServerInfo info, PacketStream stream, Packet1Login loginPacket)
|
||||||
{
|
{
|
||||||
super(socket, stream);
|
super( socket, stream );
|
||||||
this.info = info;
|
this.info = info;
|
||||||
this.loginPacket = loginPacket;
|
this.loginPacket = loginPacket;
|
||||||
}
|
}
|
||||||
@ -43,48 +43,48 @@ public class ServerConnection extends GenericConnection implements Server
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
Socket socket = new Socket();
|
Socket socket = new Socket();
|
||||||
socket.connect(info.getAddress(), BungeeCord.getInstance().config.getTimeout());
|
socket.connect( info.getAddress(), BungeeCord.getInstance().config.getTimeout() );
|
||||||
BungeeCord.getInstance().setSocketOptions(socket);
|
BungeeCord.getInstance().setSocketOptions( socket );
|
||||||
|
|
||||||
PacketStream stream = new PacketStream(socket.getInputStream(), socket.getOutputStream());
|
PacketStream stream = new PacketStream( socket.getInputStream(), socket.getOutputStream() );
|
||||||
|
|
||||||
stream.write(handshake);
|
stream.write( handshake );
|
||||||
stream.write(new PacketCDClientStatus((byte) 0));
|
stream.write( new PacketCDClientStatus( (byte) 0 ) );
|
||||||
stream.readPacket();
|
stream.readPacket();
|
||||||
|
|
||||||
byte[] loginResponse = stream.readPacket();
|
byte[] loginResponse = stream.readPacket();
|
||||||
if (Util.getId(loginResponse) == 0xFF)
|
if ( Util.getId( loginResponse ) == 0xFF )
|
||||||
{
|
{
|
||||||
throw new KickException("[Kicked] " + new PacketFFKick(loginResponse).message);
|
throw new KickException( "[Kicked] " + new PacketFFKick( loginResponse ).message );
|
||||||
}
|
}
|
||||||
Packet1Login login = new Packet1Login(loginResponse);
|
Packet1Login login = new Packet1Login( loginResponse );
|
||||||
|
|
||||||
ServerConnection server = new ServerConnection(socket, info, stream, login);
|
ServerConnection server = new ServerConnection( socket, info, stream, login );
|
||||||
ServerConnectedEvent event = new ServerConnectedEvent(user, server);
|
ServerConnectedEvent event = new ServerConnectedEvent( user, server );
|
||||||
ProxyServer.getInstance().getPluginManager().callEvent(event);
|
ProxyServer.getInstance().getPluginManager().callEvent( event );
|
||||||
|
|
||||||
stream.write(BungeeCord.getInstance().registerChannels());
|
stream.write( BungeeCord.getInstance().registerChannels() );
|
||||||
|
|
||||||
Queue<DefinedPacket> packetQueue = ((BungeeServerInfo) info).getPacketQueue();
|
Queue<DefinedPacket> packetQueue = ( (BungeeServerInfo) info ).getPacketQueue();
|
||||||
while (!packetQueue.isEmpty())
|
while ( !packetQueue.isEmpty() )
|
||||||
{
|
{
|
||||||
stream.write(packetQueue.poll());
|
stream.write( packetQueue.poll() );
|
||||||
}
|
}
|
||||||
|
|
||||||
return server;
|
return server;
|
||||||
} catch (KickException ex)
|
} catch ( KickException ex )
|
||||||
{
|
{
|
||||||
throw ex;
|
throw ex;
|
||||||
} catch (Exception ex)
|
} catch ( Exception ex )
|
||||||
{
|
{
|
||||||
ServerInfo def = ProxyServer.getInstance().getServers().get(user.getPendingConnection().getListener().getDefaultServer());
|
ServerInfo def = ProxyServer.getInstance().getServers().get( user.getPendingConnection().getListener().getDefaultServer() );
|
||||||
if (retry && !info.equals(def))
|
if ( retry && !info.equals( def ) )
|
||||||
{
|
{
|
||||||
user.sendMessage(ChatColor.RED + "Could not connect to target server, you have been moved to the default server");
|
user.sendMessage( ChatColor.RED + "Could not connect to target server, you have been moved to the default server" );
|
||||||
return connect(user, def, handshake, false);
|
return connect( user, def, handshake, false );
|
||||||
} else
|
} else
|
||||||
{
|
{
|
||||||
throw new RuntimeException("Could not connect to target server " + Util.exception(ex));
|
throw new RuntimeException( "Could not connect to target server " + Util.exception( ex ) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -92,13 +92,13 @@ public class ServerConnection extends GenericConnection implements Server
|
|||||||
@Override
|
@Override
|
||||||
public void sendData(String channel, byte[] data)
|
public void sendData(String channel, byte[] data)
|
||||||
{
|
{
|
||||||
packetQueue.add(new PacketFAPluginMessage(channel, data));
|
packetQueue.add( new PacketFAPluginMessage( channel, data ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void ping(final Callback<ServerPing> callback)
|
public void ping(final Callback<ServerPing> callback)
|
||||||
{
|
{
|
||||||
getInfo().ping(callback);
|
getInfo().ping( callback );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -5,14 +5,12 @@ import java.io.ByteArrayOutputStream;
|
|||||||
import java.io.DataInputStream;
|
import java.io.DataInputStream;
|
||||||
import java.io.DataOutputStream;
|
import java.io.DataOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.OutputStream;
|
|
||||||
import java.net.InetSocketAddress;
|
import java.net.InetSocketAddress;
|
||||||
import java.net.Socket;
|
import java.net.Socket;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Queue;
|
import java.util.Queue;
|
||||||
import java.util.concurrent.ConcurrentLinkedQueue;
|
import java.util.concurrent.ConcurrentLinkedQueue;
|
||||||
@ -56,25 +54,25 @@ public class UserConnection extends GenericConnection implements ProxiedPlayer
|
|||||||
|
|
||||||
public UserConnection(Socket socket, PendingConnection pendingConnection, PacketStream stream, Packet2Handshake handshake)
|
public UserConnection(Socket socket, PendingConnection pendingConnection, PacketStream stream, Packet2Handshake handshake)
|
||||||
{
|
{
|
||||||
super(socket, stream);
|
super( socket, stream );
|
||||||
this.handshake = handshake;
|
this.handshake = handshake;
|
||||||
this.pendingConnection = pendingConnection;
|
this.pendingConnection = pendingConnection;
|
||||||
name = handshake.username;
|
name = handshake.username;
|
||||||
displayName = handshake.username;
|
displayName = handshake.username;
|
||||||
|
|
||||||
Collection<String> g = ProxyServer.getInstance().getConfigurationAdapter().getGroups(name);
|
Collection<String> g = ProxyServer.getInstance().getConfigurationAdapter().getGroups( name );
|
||||||
for (String s : g)
|
for ( String s : g )
|
||||||
{
|
{
|
||||||
addGroups(s);
|
addGroups( s );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setDisplayName(String name)
|
public void setDisplayName(String name)
|
||||||
{
|
{
|
||||||
ProxyServer.getInstance().getTabListHandler().onDisconnect(this);
|
ProxyServer.getInstance().getTabListHandler().onDisconnect( this );
|
||||||
displayName = name;
|
displayName = name;
|
||||||
ProxyServer.getInstance().getTabListHandler().onConnect(this);
|
ProxyServer.getInstance().getTabListHandler().onConnect( this );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -85,36 +83,36 @@ public class UserConnection extends GenericConnection implements ProxiedPlayer
|
|||||||
|
|
||||||
public void connect(ServerInfo target, boolean force)
|
public void connect(ServerInfo target, boolean force)
|
||||||
{
|
{
|
||||||
if (server == null)
|
if ( server == null )
|
||||||
{
|
{
|
||||||
// First join
|
// First join
|
||||||
BungeeCord.getInstance().connections.put(name, this);
|
BungeeCord.getInstance().connections.put( name, this );
|
||||||
ProxyServer.getInstance().getTabListHandler().onConnect(this);
|
ProxyServer.getInstance().getTabListHandler().onConnect( this );
|
||||||
}
|
}
|
||||||
|
|
||||||
ServerConnectEvent event = new ServerConnectEvent(this, target);
|
ServerConnectEvent event = new ServerConnectEvent( this, target );
|
||||||
BungeeCord.getInstance().getPluginManager().callEvent(event);
|
BungeeCord.getInstance().getPluginManager().callEvent( event );
|
||||||
target = event.getTarget(); // Update in case the event changed target
|
target = event.getTarget(); // Update in case the event changed target
|
||||||
|
|
||||||
ProxyServer.getInstance().getTabListHandler().onServerChange(this);
|
ProxyServer.getInstance().getTabListHandler().onServerChange( this );
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
reconnecting = true;
|
reconnecting = true;
|
||||||
|
|
||||||
if (server != null)
|
if ( server != null )
|
||||||
{
|
{
|
||||||
stream.write(new Packet9Respawn((byte) 1, (byte) 0, (byte) 0, (short) 256, "DEFAULT"));
|
stream.write( new Packet9Respawn( (byte) 1, (byte) 0, (byte) 0, (short) 256, "DEFAULT" ) );
|
||||||
stream.write(new Packet9Respawn((byte) -1, (byte) 0, (byte) 0, (short) 256, "DEFAULT"));
|
stream.write( new Packet9Respawn( (byte) -1, (byte) 0, (byte) 0, (short) 256, "DEFAULT" ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
ServerConnection newServer = ServerConnection.connect(this, target, handshake, true);
|
ServerConnection newServer = ServerConnection.connect( this, target, handshake, true );
|
||||||
if (server == null)
|
if ( server == null )
|
||||||
{
|
{
|
||||||
// Once again, first connection
|
// Once again, first connection
|
||||||
clientEntityId = newServer.loginPacket.entityId;
|
clientEntityId = newServer.loginPacket.entityId;
|
||||||
serverEntityId = newServer.loginPacket.entityId;
|
serverEntityId = newServer.loginPacket.entityId;
|
||||||
stream.write(newServer.loginPacket);
|
stream.write( newServer.loginPacket );
|
||||||
stream.write(BungeeCord.getInstance().registerChannels());
|
stream.write( BungeeCord.getInstance().registerChannels() );
|
||||||
|
|
||||||
upBridge = new UpstreamBridge();
|
upBridge = new UpstreamBridge();
|
||||||
upBridge.start();
|
upBridge.start();
|
||||||
@ -124,68 +122,68 @@ public class UserConnection extends GenericConnection implements ProxiedPlayer
|
|||||||
{
|
{
|
||||||
downBridge.interrupt();
|
downBridge.interrupt();
|
||||||
downBridge.join();
|
downBridge.join();
|
||||||
} catch (InterruptedException ie)
|
} catch ( InterruptedException ie )
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
server.disconnect("Quitting");
|
server.disconnect( "Quitting" );
|
||||||
server.getInfo().removePlayer(this);
|
server.getInfo().removePlayer( this );
|
||||||
|
|
||||||
Packet1Login login = newServer.loginPacket;
|
Packet1Login login = newServer.loginPacket;
|
||||||
serverEntityId = login.entityId;
|
serverEntityId = login.entityId;
|
||||||
stream.write(new Packet9Respawn(login.dimension, login.difficulty, login.gameMode, (short) 256, login.levelType));
|
stream.write( new Packet9Respawn( login.dimension, login.difficulty, login.gameMode, (short) 256, login.levelType ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
// Reconnect process has finished, lets get the player moving again
|
// Reconnect process has finished, lets get the player moving again
|
||||||
reconnecting = false;
|
reconnecting = false;
|
||||||
|
|
||||||
// Add to new
|
// Add to new
|
||||||
target.addPlayer(this);
|
target.addPlayer( this );
|
||||||
|
|
||||||
// Start the bridges and move on
|
// Start the bridges and move on
|
||||||
server = newServer;
|
server = newServer;
|
||||||
downBridge = new DownstreamBridge();
|
downBridge = new DownstreamBridge();
|
||||||
downBridge.start();
|
downBridge.start();
|
||||||
} catch (KickException ex)
|
} catch ( KickException ex )
|
||||||
{
|
{
|
||||||
destroySelf(ex.getMessage());
|
destroySelf( ex.getMessage() );
|
||||||
} catch (Exception ex)
|
} catch ( Exception ex )
|
||||||
{
|
{
|
||||||
ex.printStackTrace(); // TODO: Remove
|
ex.printStackTrace(); // TODO: Remove
|
||||||
destroySelf("Could not connect to server - " + ex.getClass().getSimpleName());
|
destroySelf( "Could not connect to server - " + ex.getClass().getSimpleName() );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void destroySelf(String reason)
|
private void destroySelf(String reason)
|
||||||
{
|
{
|
||||||
ProxyServer.getInstance().getPlayers().remove(this);
|
ProxyServer.getInstance().getPlayers().remove( this );
|
||||||
|
|
||||||
disconnect(reason);
|
disconnect( reason );
|
||||||
if (server != null)
|
if ( server != null )
|
||||||
{
|
{
|
||||||
server.getInfo().removePlayer(this);
|
server.getInfo().removePlayer( this );
|
||||||
server.disconnect("Quitting");
|
server.disconnect( "Quitting" );
|
||||||
ProxyServer.getInstance().getReconnectHandler().setServer(this);
|
ProxyServer.getInstance().getReconnectHandler().setServer( this );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void disconnect(String reason)
|
public void disconnect(String reason)
|
||||||
{
|
{
|
||||||
ProxyServer.getInstance().getTabListHandler().onDisconnect(this);
|
ProxyServer.getInstance().getTabListHandler().onDisconnect( this );
|
||||||
super.disconnect(reason);
|
super.disconnect( reason );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void sendMessage(String message)
|
public void sendMessage(String message)
|
||||||
{
|
{
|
||||||
packetQueue.add(new Packet3Chat(message));
|
packetQueue.add( new Packet3Chat( message ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void sendData(String channel, byte[] data)
|
public void sendData(String channel, byte[] data)
|
||||||
{
|
{
|
||||||
server.packetQueue.add(new PacketFAPluginMessage(channel, data));
|
server.packetQueue.add( new PacketFAPluginMessage( channel, data ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -198,19 +196,19 @@ public class UserConnection extends GenericConnection implements ProxiedPlayer
|
|||||||
@Synchronized("permMutex")
|
@Synchronized("permMutex")
|
||||||
public Collection<String> getGroups()
|
public Collection<String> getGroups()
|
||||||
{
|
{
|
||||||
return Collections.unmodifiableCollection(groups);
|
return Collections.unmodifiableCollection( groups );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Synchronized("permMutex")
|
@Synchronized("permMutex")
|
||||||
public void addGroups(String... groups)
|
public void addGroups(String... groups)
|
||||||
{
|
{
|
||||||
for (String group : groups)
|
for ( String group : groups )
|
||||||
{
|
{
|
||||||
this.groups.add(group);
|
this.groups.add( group );
|
||||||
for (String permission : ProxyServer.getInstance().getConfigurationAdapter().getPermissions(group))
|
for ( String permission : ProxyServer.getInstance().getConfigurationAdapter().getPermissions( group ) )
|
||||||
{
|
{
|
||||||
setPermission(permission, true);
|
setPermission( permission, true );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -219,12 +217,12 @@ public class UserConnection extends GenericConnection implements ProxiedPlayer
|
|||||||
@Synchronized("permMutex")
|
@Synchronized("permMutex")
|
||||||
public void removeGroups(String... groups)
|
public void removeGroups(String... groups)
|
||||||
{
|
{
|
||||||
for (String group : groups)
|
for ( String group : groups )
|
||||||
{
|
{
|
||||||
this.groups.remove(group);
|
this.groups.remove( group );
|
||||||
for (String permission : ProxyServer.getInstance().getConfigurationAdapter().getPermissions(group))
|
for ( String permission : ProxyServer.getInstance().getConfigurationAdapter().getPermissions( group ) )
|
||||||
{
|
{
|
||||||
setPermission(permission, false);
|
setPermission( permission, false );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -233,15 +231,15 @@ public class UserConnection extends GenericConnection implements ProxiedPlayer
|
|||||||
@Synchronized("permMutex")
|
@Synchronized("permMutex")
|
||||||
public boolean hasPermission(String permission)
|
public boolean hasPermission(String permission)
|
||||||
{
|
{
|
||||||
Boolean val = permissions.get(permission);
|
Boolean val = permissions.get( permission );
|
||||||
return (val == null) ? false : val;
|
return ( val == null ) ? false : val;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Synchronized("permMutex")
|
@Synchronized("permMutex")
|
||||||
public void setPermission(String permission, boolean value)
|
public void setPermission(String permission, boolean value)
|
||||||
{
|
{
|
||||||
permissions.put(permission, value);
|
permissions.put( permission, value );
|
||||||
}
|
}
|
||||||
|
|
||||||
private class UpstreamBridge extends Thread
|
private class UpstreamBridge extends Thread
|
||||||
@ -249,82 +247,82 @@ public class UserConnection extends GenericConnection implements ProxiedPlayer
|
|||||||
|
|
||||||
public UpstreamBridge()
|
public UpstreamBridge()
|
||||||
{
|
{
|
||||||
super("Upstream Bridge - " + name);
|
super( "Upstream Bridge - " + name );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void run()
|
public void run()
|
||||||
{
|
{
|
||||||
while (!socket.isClosed())
|
while ( !socket.isClosed() )
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
byte[] packet = stream.readPacket();
|
byte[] packet = stream.readPacket();
|
||||||
boolean sendPacket = true;
|
boolean sendPacket = true;
|
||||||
int id = Util.getId(packet);
|
int id = Util.getId( packet );
|
||||||
|
|
||||||
switch (id)
|
switch ( id )
|
||||||
{
|
{
|
||||||
case 0x00:
|
case 0x00:
|
||||||
if (trackingPingId == new Packet0KeepAlive(packet).id)
|
if ( trackingPingId == new Packet0KeepAlive( packet ).id )
|
||||||
{
|
{
|
||||||
int newPing = (int) (System.currentTimeMillis() - pingTime);
|
int newPing = (int) ( System.currentTimeMillis() - pingTime );
|
||||||
ProxyServer.getInstance().getTabListHandler().onPingChange(UserConnection.this, newPing);
|
ProxyServer.getInstance().getTabListHandler().onPingChange( UserConnection.this, newPing );
|
||||||
ping = newPing;
|
ping = newPing;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 0x03:
|
case 0x03:
|
||||||
Packet3Chat chat = new Packet3Chat(packet);
|
Packet3Chat chat = new Packet3Chat( packet );
|
||||||
if (chat.message.startsWith("/"))
|
if ( chat.message.startsWith( "/" ) )
|
||||||
{
|
{
|
||||||
sendPacket = !ProxyServer.getInstance().getPluginManager().dispatchCommand(UserConnection.this, chat.message.substring(1));
|
sendPacket = !ProxyServer.getInstance().getPluginManager().dispatchCommand( UserConnection.this, chat.message.substring( 1 ) );
|
||||||
} else
|
} else
|
||||||
{
|
{
|
||||||
ChatEvent chatEvent = new ChatEvent(UserConnection.this, server, chat.message);
|
ChatEvent chatEvent = new ChatEvent( UserConnection.this, server, chat.message );
|
||||||
ProxyServer.getInstance().getPluginManager().callEvent(chatEvent);
|
ProxyServer.getInstance().getPluginManager().callEvent( chatEvent );
|
||||||
sendPacket = !chatEvent.isCancelled();
|
sendPacket = !chatEvent.isCancelled();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 0xFA:
|
case 0xFA:
|
||||||
// Call the onPluginMessage event
|
// Call the onPluginMessage event
|
||||||
PacketFAPluginMessage message = new PacketFAPluginMessage(packet);
|
PacketFAPluginMessage message = new PacketFAPluginMessage( packet );
|
||||||
|
|
||||||
// Might matter in the future
|
// Might matter in the future
|
||||||
if (message.tag.equals("BungeeCord"))
|
if ( message.tag.equals( "BungeeCord" ) )
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
PluginMessageEvent event = new PluginMessageEvent(UserConnection.this, server, message.tag, message.data);
|
PluginMessageEvent event = new PluginMessageEvent( UserConnection.this, server, message.tag, message.data );
|
||||||
ProxyServer.getInstance().getPluginManager().callEvent(event);
|
ProxyServer.getInstance().getPluginManager().callEvent( event );
|
||||||
|
|
||||||
if (event.isCancelled())
|
if ( event.isCancelled() )
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
while (!server.packetQueue.isEmpty())
|
while ( !server.packetQueue.isEmpty() )
|
||||||
{
|
{
|
||||||
DefinedPacket p = server.packetQueue.poll();
|
DefinedPacket p = server.packetQueue.poll();
|
||||||
if (p != null)
|
if ( p != null )
|
||||||
{
|
{
|
||||||
server.stream.write(p);
|
server.stream.write( p );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
EntityMap.rewrite(packet, clientEntityId, serverEntityId);
|
EntityMap.rewrite( packet, clientEntityId, serverEntityId );
|
||||||
if (sendPacket && !server.socket.isClosed())
|
if ( sendPacket && !server.socket.isClosed() )
|
||||||
{
|
{
|
||||||
server.stream.write(packet);
|
server.stream.write( packet );
|
||||||
}
|
}
|
||||||
} catch (IOException ex)
|
} catch ( IOException ex )
|
||||||
{
|
{
|
||||||
destroySelf("Reached end of stream");
|
destroySelf( "Reached end of stream" );
|
||||||
} catch (Exception ex)
|
} catch ( Exception ex )
|
||||||
{
|
{
|
||||||
destroySelf(Util.exception(ex));
|
destroySelf( Util.exception( ex ) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -335,7 +333,7 @@ public class UserConnection extends GenericConnection implements ProxiedPlayer
|
|||||||
|
|
||||||
public DownstreamBridge()
|
public DownstreamBridge()
|
||||||
{
|
{
|
||||||
super("Downstream Bridge - " + name);
|
super( "Downstream Bridge - " + name );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -344,180 +342,180 @@ public class UserConnection extends GenericConnection implements ProxiedPlayer
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
outer:
|
outer:
|
||||||
while (!reconnecting)
|
while ( !reconnecting )
|
||||||
{
|
{
|
||||||
byte[] packet = server.stream.readPacket();
|
byte[] packet = server.stream.readPacket();
|
||||||
int id = Util.getId(packet);
|
int id = Util.getId( packet );
|
||||||
|
|
||||||
switch (id)
|
switch ( id )
|
||||||
{
|
{
|
||||||
case 0x00:
|
case 0x00:
|
||||||
trackingPingId = new Packet0KeepAlive(packet).id;
|
trackingPingId = new Packet0KeepAlive( packet ).id;
|
||||||
pingTime = System.currentTimeMillis();
|
pingTime = System.currentTimeMillis();
|
||||||
break;
|
break;
|
||||||
case 0x03:
|
case 0x03:
|
||||||
Packet3Chat chat = new Packet3Chat(packet);
|
Packet3Chat chat = new Packet3Chat( packet );
|
||||||
ChatEvent chatEvent = new ChatEvent(server, UserConnection.this, chat.message);
|
ChatEvent chatEvent = new ChatEvent( server, UserConnection.this, chat.message );
|
||||||
ProxyServer.getInstance().getPluginManager().callEvent(chatEvent);
|
ProxyServer.getInstance().getPluginManager().callEvent( chatEvent );
|
||||||
|
|
||||||
if (chatEvent.isCancelled())
|
if ( chatEvent.isCancelled() )
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 0xC9:
|
case 0xC9:
|
||||||
PacketC9PlayerListItem playerList = new PacketC9PlayerListItem(packet);
|
PacketC9PlayerListItem playerList = new PacketC9PlayerListItem( packet );
|
||||||
if (!ProxyServer.getInstance().getTabListHandler().onListUpdate(UserConnection.this, playerList.username, playerList.online, playerList.ping))
|
if ( !ProxyServer.getInstance().getTabListHandler().onListUpdate( UserConnection.this, playerList.username, playerList.online, playerList.ping ) )
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 0xFA:
|
case 0xFA:
|
||||||
// Call the onPluginMessage event
|
// Call the onPluginMessage event
|
||||||
PacketFAPluginMessage message = new PacketFAPluginMessage(packet);
|
PacketFAPluginMessage message = new PacketFAPluginMessage( packet );
|
||||||
DataInputStream in = new DataInputStream(new ByteArrayInputStream(message.data));
|
DataInputStream in = new DataInputStream( new ByteArrayInputStream( message.data ) );
|
||||||
PluginMessageEvent event = new PluginMessageEvent(server, UserConnection.this, message.tag, message.data);
|
PluginMessageEvent event = new PluginMessageEvent( server, UserConnection.this, message.tag, message.data );
|
||||||
ProxyServer.getInstance().getPluginManager().callEvent(event);
|
ProxyServer.getInstance().getPluginManager().callEvent( event );
|
||||||
|
|
||||||
if (event.isCancelled())
|
if ( event.isCancelled() )
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (message.tag.equals("BungeeCord"))
|
if ( message.tag.equals( "BungeeCord" ) )
|
||||||
{
|
{
|
||||||
String subChannel = in.readUTF();
|
String subChannel = in.readUTF();
|
||||||
if (subChannel.equals("Forward"))
|
if ( subChannel.equals( "Forward" ) )
|
||||||
{
|
{
|
||||||
String target = in.readUTF();
|
String target = in.readUTF();
|
||||||
String channel = in.readUTF();
|
String channel = in.readUTF();
|
||||||
short len = in.readShort();
|
short len = in.readShort();
|
||||||
byte[] data = new byte[len];
|
byte[] data = new byte[ len ];
|
||||||
in.readFully(data);
|
in.readFully( data );
|
||||||
|
|
||||||
|
|
||||||
ByteArrayOutputStream b = new ByteArrayOutputStream();
|
ByteArrayOutputStream b = new ByteArrayOutputStream();
|
||||||
DataOutputStream out = new DataOutputStream(b);
|
DataOutputStream out = new DataOutputStream( b );
|
||||||
out.writeUTF(channel);
|
out.writeUTF( channel );
|
||||||
out.writeShort(data.length);
|
out.writeShort( data.length );
|
||||||
out.write(data);
|
out.write( data );
|
||||||
|
|
||||||
if (target.equals("ALL"))
|
if ( target.equals( "ALL" ) )
|
||||||
{
|
{
|
||||||
for (ServerInfo server : BungeeCord.getInstance().getServers().values())
|
for ( ServerInfo server : BungeeCord.getInstance().getServers().values() )
|
||||||
{
|
{
|
||||||
server.sendData("BungeeCord", b.toByteArray());
|
server.sendData( "BungeeCord", b.toByteArray() );
|
||||||
}
|
}
|
||||||
} else
|
} else
|
||||||
{
|
{
|
||||||
ServerInfo server = BungeeCord.getInstance().getServerInfo(target);
|
ServerInfo server = BungeeCord.getInstance().getServerInfo( target );
|
||||||
if (server != null)
|
if ( server != null )
|
||||||
{
|
{
|
||||||
server.sendData("BungeeCord", b.toByteArray());
|
server.sendData( "BungeeCord", b.toByteArray() );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (subChannel.equals("Connect"))
|
if ( subChannel.equals( "Connect" ) )
|
||||||
{
|
{
|
||||||
ServerInfo server = ProxyServer.getInstance().getServerInfo(in.readUTF());
|
ServerInfo server = ProxyServer.getInstance().getServerInfo( in.readUTF() );
|
||||||
if (server != null)
|
if ( server != null )
|
||||||
{
|
{
|
||||||
connect(server, true);
|
connect( server, true );
|
||||||
break outer;
|
break outer;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (subChannel.equals("IP"))
|
if ( subChannel.equals( "IP" ) )
|
||||||
{
|
{
|
||||||
ByteArrayOutputStream b = new ByteArrayOutputStream();
|
ByteArrayOutputStream b = new ByteArrayOutputStream();
|
||||||
DataOutputStream out = new DataOutputStream(b);
|
DataOutputStream out = new DataOutputStream( b );
|
||||||
out.writeUTF("IP");
|
out.writeUTF( "IP" );
|
||||||
out.writeUTF(getAddress().getHostString());
|
out.writeUTF( getAddress().getHostString() );
|
||||||
out.writeInt(getAddress().getPort());
|
out.writeInt( getAddress().getPort() );
|
||||||
getServer().sendData("BungeeCord", b.toByteArray());
|
getServer().sendData( "BungeeCord", b.toByteArray() );
|
||||||
}
|
}
|
||||||
if (subChannel.equals("PlayerCount"))
|
if ( subChannel.equals( "PlayerCount" ) )
|
||||||
{
|
{
|
||||||
ServerInfo server = ProxyServer.getInstance().getServerInfo(in.readUTF());
|
ServerInfo server = ProxyServer.getInstance().getServerInfo( in.readUTF() );
|
||||||
if (server != null)
|
if ( server != null )
|
||||||
{
|
{
|
||||||
ByteArrayOutputStream b = new ByteArrayOutputStream();
|
ByteArrayOutputStream b = new ByteArrayOutputStream();
|
||||||
DataOutputStream out = new DataOutputStream(b);
|
DataOutputStream out = new DataOutputStream( b );
|
||||||
out.writeUTF("PlayerCount");
|
out.writeUTF( "PlayerCount" );
|
||||||
out.writeUTF(server.getName());
|
out.writeUTF( server.getName() );
|
||||||
out.writeInt(server.getPlayers().size());
|
out.writeInt( server.getPlayers().size() );
|
||||||
getServer().sendData("BungeeCord", b.toByteArray());
|
getServer().sendData( "BungeeCord", b.toByteArray() );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (subChannel.equals("PlayerList"))
|
if ( subChannel.equals( "PlayerList" ) )
|
||||||
{
|
{
|
||||||
ServerInfo server = ProxyServer.getInstance().getServerInfo(in.readUTF());
|
ServerInfo server = ProxyServer.getInstance().getServerInfo( in.readUTF() );
|
||||||
if (server != null)
|
if ( server != null )
|
||||||
{
|
{
|
||||||
ByteArrayOutputStream b = new ByteArrayOutputStream();
|
ByteArrayOutputStream b = new ByteArrayOutputStream();
|
||||||
DataOutputStream out = new DataOutputStream(b);
|
DataOutputStream out = new DataOutputStream( b );
|
||||||
out.writeUTF("PlayerList");
|
out.writeUTF( "PlayerList" );
|
||||||
out.writeUTF(server.getName());
|
out.writeUTF( server.getName() );
|
||||||
|
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
for (ProxiedPlayer p : server.getPlayers())
|
for ( ProxiedPlayer p : server.getPlayers() )
|
||||||
{
|
{
|
||||||
sb.append(p.getName());
|
sb.append( p.getName() );
|
||||||
sb.append(",");
|
sb.append( "," );
|
||||||
}
|
}
|
||||||
out.writeUTF(sb.substring(0, sb.length() - 1));
|
out.writeUTF( sb.substring( 0, sb.length() - 1 ) );
|
||||||
|
|
||||||
getServer().sendData("BungeeCord", b.toByteArray());
|
getServer().sendData( "BungeeCord", b.toByteArray() );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (subChannel.equals("GetServers"))
|
if ( subChannel.equals( "GetServers" ) )
|
||||||
{
|
{
|
||||||
ByteArrayOutputStream b = new ByteArrayOutputStream();
|
ByteArrayOutputStream b = new ByteArrayOutputStream();
|
||||||
DataOutputStream out = new DataOutputStream(b);
|
DataOutputStream out = new DataOutputStream( b );
|
||||||
out.writeUTF("GetServers");
|
out.writeUTF( "GetServers" );
|
||||||
|
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
for (String server : ProxyServer.getInstance().getServers().keySet())
|
for ( String server : ProxyServer.getInstance().getServers().keySet() )
|
||||||
{
|
{
|
||||||
sb.append(server);
|
sb.append( server );
|
||||||
sb.append(",");
|
sb.append( "," );
|
||||||
}
|
}
|
||||||
out.writeUTF(sb.substring(0, sb.length() - 1));
|
out.writeUTF( sb.substring( 0, sb.length() - 1 ) );
|
||||||
|
|
||||||
getServer().sendData("BungeeCord", b.toByteArray());
|
getServer().sendData( "BungeeCord", b.toByteArray() );
|
||||||
}
|
}
|
||||||
if (subChannel.equals("Message"))
|
if ( subChannel.equals( "Message" ) )
|
||||||
{
|
{
|
||||||
ProxiedPlayer target = ProxyServer.getInstance().getPlayer(in.readUTF());
|
ProxiedPlayer target = ProxyServer.getInstance().getPlayer( in.readUTF() );
|
||||||
if (target != null)
|
if ( target != null )
|
||||||
{
|
{
|
||||||
target.sendMessage(in.readUTF());
|
target.sendMessage( in.readUTF() );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
while (!packetQueue.isEmpty())
|
while ( !packetQueue.isEmpty() )
|
||||||
{
|
{
|
||||||
DefinedPacket p = packetQueue.poll();
|
DefinedPacket p = packetQueue.poll();
|
||||||
if (p != null)
|
if ( p != null )
|
||||||
{
|
{
|
||||||
stream.write(p);
|
stream.write( p );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
EntityMap.rewrite(packet, serverEntityId, clientEntityId);
|
EntityMap.rewrite( packet, serverEntityId, clientEntityId );
|
||||||
stream.write(packet);
|
stream.write( packet );
|
||||||
|
|
||||||
if (nextServer != null)
|
if ( nextServer != null )
|
||||||
{
|
{
|
||||||
connect(nextServer, true);
|
connect( nextServer, true );
|
||||||
break outer;
|
break outer;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (Exception ex)
|
} catch ( Exception ex )
|
||||||
{
|
{
|
||||||
destroySelf(Util.exception(ex));
|
destroySelf( Util.exception( ex ) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -18,13 +18,13 @@ public class Util
|
|||||||
*/
|
*/
|
||||||
public static InetSocketAddress getAddr(String hostline)
|
public static InetSocketAddress getAddr(String hostline)
|
||||||
{
|
{
|
||||||
String[] split = hostline.split(":");
|
String[] split = hostline.split( ":" );
|
||||||
int port = DEFAULT_PORT;
|
int port = DEFAULT_PORT;
|
||||||
if (split.length > 1)
|
if ( split.length > 1 )
|
||||||
{
|
{
|
||||||
port = Integer.parseInt(split[1]);
|
port = Integer.parseInt( split[1] );
|
||||||
}
|
}
|
||||||
return new InetSocketAddress(split[0], port);
|
return new InetSocketAddress( split[0], port );
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -49,13 +49,13 @@ public class Util
|
|||||||
public static String normalize(String s)
|
public static String normalize(String s)
|
||||||
{
|
{
|
||||||
StringBuilder result = new StringBuilder();
|
StringBuilder result = new StringBuilder();
|
||||||
for (char c : s.toCharArray())
|
for ( char c : s.toCharArray() )
|
||||||
{
|
{
|
||||||
if (Character.isUpperCase(c))
|
if ( Character.isUpperCase( c ) )
|
||||||
{
|
{
|
||||||
result.append("_");
|
result.append( "_" );
|
||||||
}
|
}
|
||||||
result.append(Character.toLowerCase(c));
|
result.append( Character.toLowerCase( c ) );
|
||||||
}
|
}
|
||||||
return result.toString();
|
return result.toString();
|
||||||
}
|
}
|
||||||
@ -68,7 +68,7 @@ public class Util
|
|||||||
*/
|
*/
|
||||||
public static String hex(int i)
|
public static String hex(int i)
|
||||||
{
|
{
|
||||||
return String.format("0x%02X", i);
|
return String.format( "0x%02X", i );
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -18,7 +18,7 @@ public class YamlReconnectHandler implements ReconnectHandler
|
|||||||
{
|
{
|
||||||
|
|
||||||
private final Yaml yaml = new Yaml();
|
private final Yaml yaml = new Yaml();
|
||||||
private final File file = new File("locations.yml");
|
private final File file = new File( "locations.yml" );
|
||||||
/*========================================================================*/
|
/*========================================================================*/
|
||||||
private Map<String, String> data;
|
private Map<String, String> data;
|
||||||
|
|
||||||
@ -28,21 +28,21 @@ public class YamlReconnectHandler implements ReconnectHandler
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
file.createNewFile();
|
file.createNewFile();
|
||||||
try (FileReader rd = new FileReader(file))
|
try ( FileReader rd = new FileReader( file ) )
|
||||||
{
|
{
|
||||||
data = yaml.loadAs(rd, Map.class);
|
data = yaml.loadAs( rd, Map.class );
|
||||||
}
|
}
|
||||||
} catch (IOException ex)
|
} catch ( IOException ex )
|
||||||
{
|
{
|
||||||
ProxyServer.getInstance().getLogger().log(Level.WARNING, "Could not load reconnect locations", ex);
|
ProxyServer.getInstance().getLogger().log( Level.WARNING, "Could not load reconnect locations", ex );
|
||||||
}
|
}
|
||||||
|
|
||||||
if (data == null)
|
if ( data == null )
|
||||||
{
|
{
|
||||||
data = new ConcurrentHashMap<>();
|
data = new ConcurrentHashMap<>();
|
||||||
} else
|
} else
|
||||||
{
|
{
|
||||||
data = new ConcurrentHashMap<>(data);
|
data = new ConcurrentHashMap<>( data );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -50,19 +50,19 @@ public class YamlReconnectHandler implements ReconnectHandler
|
|||||||
public String getServer(ProxiedPlayer player)
|
public String getServer(ProxiedPlayer player)
|
||||||
{
|
{
|
||||||
ListenerInfo listener = player.getPendingConnection().getListener();
|
ListenerInfo listener = player.getPendingConnection().getListener();
|
||||||
if (listener.isForceDefault())
|
if ( listener.isForceDefault() )
|
||||||
{
|
{
|
||||||
return listener.getDefaultServer();
|
return listener.getDefaultServer();
|
||||||
}
|
}
|
||||||
String forced = listener.getForcedHosts().get(player.getPendingConnection().getVirtualHost().getHostName());
|
String forced = listener.getForcedHosts().get( player.getPendingConnection().getVirtualHost().getHostName() );
|
||||||
String server = (forced == null) ? data.get(key(player)) : forced;
|
String server = ( forced == null ) ? data.get( key( player ) ) : forced;
|
||||||
return (server != null) ? server : listener.getDefaultServer();
|
return ( server != null ) ? server : listener.getDefaultServer();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setServer(ProxiedPlayer player)
|
public void setServer(ProxiedPlayer player)
|
||||||
{
|
{
|
||||||
data.put(key(player), player.getServer().getInfo().getName());
|
data.put( key( player ), player.getServer().getInfo().getName() );
|
||||||
}
|
}
|
||||||
|
|
||||||
private String key(ProxiedPlayer player)
|
private String key(ProxiedPlayer player)
|
||||||
@ -74,12 +74,12 @@ public class YamlReconnectHandler implements ReconnectHandler
|
|||||||
@Override
|
@Override
|
||||||
public void save()
|
public void save()
|
||||||
{
|
{
|
||||||
try (FileWriter wr = new FileWriter(file))
|
try ( FileWriter wr = new FileWriter( file ) )
|
||||||
{
|
{
|
||||||
yaml.dump(data, wr);
|
yaml.dump( data, wr );
|
||||||
} catch (IOException ex)
|
} catch ( IOException ex )
|
||||||
{
|
{
|
||||||
ProxyServer.getInstance().getLogger().log(Level.WARNING, "Could not save reconnect locations", ex);
|
ProxyServer.getInstance().getLogger().log( Level.WARNING, "Could not save reconnect locations", ex );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -11,38 +11,38 @@ public class CommandAlert extends Command
|
|||||||
|
|
||||||
public CommandAlert()
|
public CommandAlert()
|
||||||
{
|
{
|
||||||
super("alert", "bungeecord.command.alert");
|
super( "alert", "bungeecord.command.alert" );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void execute(CommandSender sender, String[] args)
|
public void execute(CommandSender sender, String[] args)
|
||||||
{
|
{
|
||||||
if (args.length == 0)
|
if ( args.length == 0 )
|
||||||
{
|
{
|
||||||
sender.sendMessage(ChatColor.RED + "You must supply a message.");
|
sender.sendMessage( ChatColor.RED + "You must supply a message." );
|
||||||
} else
|
} else
|
||||||
{
|
{
|
||||||
StringBuilder builder = new StringBuilder();
|
StringBuilder builder = new StringBuilder();
|
||||||
if (args[0].startsWith("&h"))
|
if ( args[0].startsWith( "&h" ) )
|
||||||
{
|
{
|
||||||
// Remove &h
|
// Remove &h
|
||||||
args[0] = args[0].substring(2, args[0].length());
|
args[0] = args[0].substring( 2, args[0].length() );
|
||||||
} else
|
} else
|
||||||
{
|
{
|
||||||
builder.append(ChatColor.DARK_PURPLE);
|
builder.append( ChatColor.DARK_PURPLE );
|
||||||
builder.append("[Alert] ");
|
builder.append( "[Alert] " );
|
||||||
}
|
}
|
||||||
|
|
||||||
for (String s : args)
|
for ( String s : args )
|
||||||
{
|
{
|
||||||
builder.append(ChatColor.translateAlternateColorCodes('&', s));
|
builder.append( ChatColor.translateAlternateColorCodes( '&', s ) );
|
||||||
builder.append(" ");
|
builder.append( " " );
|
||||||
}
|
}
|
||||||
|
|
||||||
String message = builder.substring(0, builder.length() - 1);
|
String message = builder.substring( 0, builder.length() - 1 );
|
||||||
for (ProxiedPlayer player : ProxyServer.getInstance().getPlayers())
|
for ( ProxiedPlayer player : ProxyServer.getInstance().getPlayers() )
|
||||||
{
|
{
|
||||||
player.sendMessage(message);
|
player.sendMessage( message );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -10,12 +10,12 @@ public class CommandBungee extends Command
|
|||||||
|
|
||||||
public CommandBungee()
|
public CommandBungee()
|
||||||
{
|
{
|
||||||
super("bungee");
|
super( "bungee" );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void execute(CommandSender sender, String[] args)
|
public void execute(CommandSender sender, String[] args)
|
||||||
{
|
{
|
||||||
sender.sendMessage(ChatColor.BLUE + "This server is running BungeeCord version " + ProxyServer.getInstance().getVersion() + " by md_5");
|
sender.sendMessage( ChatColor.BLUE + "This server is running BungeeCord version " + ProxyServer.getInstance().getVersion() + " by md_5" );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -12,7 +12,7 @@ public class CommandEnd extends Command
|
|||||||
|
|
||||||
public CommandEnd()
|
public CommandEnd()
|
||||||
{
|
{
|
||||||
super("end", "bungeecord.command.end");
|
super( "end", "bungeecord.command.end" );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -11,24 +11,24 @@ public class CommandIP extends Command
|
|||||||
|
|
||||||
public CommandIP()
|
public CommandIP()
|
||||||
{
|
{
|
||||||
super("ip", "bungeecord.command.ip");
|
super( "ip", "bungeecord.command.ip" );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void execute(CommandSender sender, String[] args)
|
public void execute(CommandSender sender, String[] args)
|
||||||
{
|
{
|
||||||
if (args.length < 1)
|
if ( args.length < 1 )
|
||||||
{
|
{
|
||||||
sender.sendMessage(ChatColor.RED + "Please follow this command by a user name");
|
sender.sendMessage( ChatColor.RED + "Please follow this command by a user name" );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
ProxiedPlayer user = ProxyServer.getInstance().getPlayer(args[0]);
|
ProxiedPlayer user = ProxyServer.getInstance().getPlayer( args[0] );
|
||||||
if (user == null)
|
if ( user == null )
|
||||||
{
|
{
|
||||||
sender.sendMessage(ChatColor.RED + "That user is not online");
|
sender.sendMessage( ChatColor.RED + "That user is not online" );
|
||||||
} else
|
} else
|
||||||
{
|
{
|
||||||
sender.sendMessage(ChatColor.BLUE + "IP of " + args[0] + " is " + user.getAddress());
|
sender.sendMessage( ChatColor.BLUE + "IP of " + args[0] + " is " + user.getAddress() );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -15,7 +15,7 @@ public class CommandList extends Command
|
|||||||
|
|
||||||
public CommandList()
|
public CommandList()
|
||||||
{
|
{
|
||||||
super("glist", "bungeecord.command.list");
|
super( "glist", "bungeecord.command.list" );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -24,20 +24,20 @@ public class CommandList extends Command
|
|||||||
StringBuilder users = new StringBuilder();
|
StringBuilder users = new StringBuilder();
|
||||||
Collection<ProxiedPlayer> connections = ProxyServer.getInstance().getPlayers();
|
Collection<ProxiedPlayer> connections = ProxyServer.getInstance().getPlayers();
|
||||||
|
|
||||||
if (connections.isEmpty())
|
if ( connections.isEmpty() )
|
||||||
{
|
{
|
||||||
sender.sendMessage(ChatColor.BLUE + "Currently no players online.");
|
sender.sendMessage( ChatColor.BLUE + "Currently no players online." );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (ProxiedPlayer player : connections)
|
for ( ProxiedPlayer player : connections )
|
||||||
{
|
{
|
||||||
users.append(player.getDisplayName());
|
users.append( player.getDisplayName() );
|
||||||
users.append(", ");
|
users.append( ", " );
|
||||||
users.append(ChatColor.RESET);
|
users.append( ChatColor.RESET );
|
||||||
}
|
}
|
||||||
|
|
||||||
users.setLength(users.length() - 2);
|
users.setLength( users.length() - 2 );
|
||||||
sender.sendMessage(ChatColor.BLUE + "Currently online across all servers (" + connections.size() + "): " + ChatColor.RESET + users);
|
sender.sendMessage( ChatColor.BLUE + "Currently online across all servers (" + connections.size() + "): " + ChatColor.RESET + users );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -10,13 +10,13 @@ public class CommandReload extends Command
|
|||||||
|
|
||||||
public CommandReload()
|
public CommandReload()
|
||||||
{
|
{
|
||||||
super("greload", "bungeecord.command.reload");
|
super( "greload", "bungeecord.command.reload" );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void execute(CommandSender sender, String[] args)
|
public void execute(CommandSender sender, String[] args)
|
||||||
{
|
{
|
||||||
BungeeCord.getInstance().config.load();
|
BungeeCord.getInstance().config.load();
|
||||||
sender.sendMessage(ChatColor.GREEN + "Reloaded config, please restart if you have any issues");
|
sender.sendMessage( ChatColor.GREEN + "Reloaded config, please restart if you have any issues" );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,40 +16,40 @@ public class CommandServer extends Command
|
|||||||
|
|
||||||
public CommandServer()
|
public CommandServer()
|
||||||
{
|
{
|
||||||
super("server", "bungeecord.command.server");
|
super( "server", "bungeecord.command.server" );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void execute(CommandSender sender, String[] args)
|
public void execute(CommandSender sender, String[] args)
|
||||||
{
|
{
|
||||||
if (!(sender instanceof ProxiedPlayer))
|
if ( !( sender instanceof ProxiedPlayer ) )
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
ProxiedPlayer player = (ProxiedPlayer) sender;
|
ProxiedPlayer player = (ProxiedPlayer) sender;
|
||||||
Map<String, ServerInfo> servers = BungeeCord.getInstance().config.getServers();
|
Map<String, ServerInfo> servers = BungeeCord.getInstance().config.getServers();
|
||||||
if (args.length == 0)
|
if ( args.length == 0 )
|
||||||
{
|
{
|
||||||
StringBuilder serverList = new StringBuilder();
|
StringBuilder serverList = new StringBuilder();
|
||||||
for (String server : servers.keySet())
|
for ( String server : servers.keySet() )
|
||||||
{
|
{
|
||||||
serverList.append(server);
|
serverList.append( server );
|
||||||
serverList.append(", ");
|
serverList.append( ", " );
|
||||||
}
|
}
|
||||||
serverList.setLength(serverList.length() - 2);
|
serverList.setLength( serverList.length() - 2 );
|
||||||
player.sendMessage(ChatColor.GOLD + "You may connect to the following servers at this time: " + serverList.toString());
|
player.sendMessage( ChatColor.GOLD + "You may connect to the following servers at this time: " + serverList.toString() );
|
||||||
} else
|
} else
|
||||||
{
|
{
|
||||||
ServerInfo server = servers.get(args[0]);
|
ServerInfo server = servers.get( args[0] );
|
||||||
if (server == null)
|
if ( server == null )
|
||||||
{
|
{
|
||||||
player.sendMessage(ChatColor.RED + "The specified server does not exist");
|
player.sendMessage( ChatColor.RED + "The specified server does not exist" );
|
||||||
} else if (server.equals(player.getServer().getInfo()))
|
} else if ( server.equals( player.getServer().getInfo() ) )
|
||||||
{
|
{
|
||||||
player.sendMessage(ChatColor.RED + "You are already on this server.");
|
player.sendMessage( ChatColor.RED + "You are already on this server." );
|
||||||
} else
|
} else
|
||||||
{
|
{
|
||||||
player.connect(server);
|
player.connect( server );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -22,7 +22,7 @@ public class ConsoleCommandSender implements CommandSender
|
|||||||
@Override
|
@Override
|
||||||
public void sendMessage(String message)
|
public void sendMessage(String message)
|
||||||
{
|
{
|
||||||
System.out.println(ChatColor.stripColor(message));
|
System.out.println( ChatColor.stripColor( message ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -40,13 +40,13 @@ public class ConsoleCommandSender implements CommandSender
|
|||||||
@Override
|
@Override
|
||||||
public void addGroups(String... groups)
|
public void addGroups(String... groups)
|
||||||
{
|
{
|
||||||
throw new UnsupportedOperationException("Console may not have groups");
|
throw new UnsupportedOperationException( "Console may not have groups" );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void removeGroups(String... groups)
|
public void removeGroups(String... groups)
|
||||||
{
|
{
|
||||||
throw new UnsupportedOperationException("Console may not have groups");
|
throw new UnsupportedOperationException( "Console may not have groups" );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -58,6 +58,6 @@ public class ConsoleCommandSender implements CommandSender
|
|||||||
@Override
|
@Override
|
||||||
public void setPermission(String permission, boolean value)
|
public void setPermission(String permission, boolean value)
|
||||||
{
|
{
|
||||||
throw new UnsupportedOperationException("Console has all permissions");
|
throw new UnsupportedOperationException( "Console has all permissions" );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -49,36 +49,36 @@ public class Configuration
|
|||||||
{
|
{
|
||||||
ConfigurationAdapter adapter = ProxyServer.getInstance().getConfigurationAdapter();
|
ConfigurationAdapter adapter = ProxyServer.getInstance().getConfigurationAdapter();
|
||||||
|
|
||||||
timeout = adapter.getInt("timeout", timeout);
|
timeout = adapter.getInt( "timeout", timeout );
|
||||||
uuid = adapter.getString("stats", uuid);
|
uuid = adapter.getString( "stats", uuid );
|
||||||
|
|
||||||
DefaultTabList tab = DefaultTabList.valueOf(adapter.getString("tab_list", "GLOBAL_PING"));
|
DefaultTabList tab = DefaultTabList.valueOf( adapter.getString( "tab_list", "GLOBAL_PING" ) );
|
||||||
if (tab == null)
|
if ( tab == null )
|
||||||
{
|
{
|
||||||
tab = DefaultTabList.GLOBAL_PING;
|
tab = DefaultTabList.GLOBAL_PING;
|
||||||
}
|
}
|
||||||
switch (tab)
|
switch ( tab )
|
||||||
{
|
{
|
||||||
case GLOBAL:
|
case GLOBAL:
|
||||||
ProxyServer.getInstance().setTabListHandler(new GlobalTabList());
|
ProxyServer.getInstance().setTabListHandler( new GlobalTabList() );
|
||||||
break;
|
break;
|
||||||
case GLOBAL_PING:
|
case GLOBAL_PING:
|
||||||
ProxyServer.getInstance().setTabListHandler(new GlobalPingTabList());
|
ProxyServer.getInstance().setTabListHandler( new GlobalPingTabList() );
|
||||||
break;
|
break;
|
||||||
case SERVER:
|
case SERVER:
|
||||||
ProxyServer.getInstance().setTabListHandler(new ServerUniqueTabList());
|
ProxyServer.getInstance().setTabListHandler( new ServerUniqueTabList() );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
listeners = adapter.getListeners();
|
listeners = adapter.getListeners();
|
||||||
Preconditions.checkArgument(listeners != null && !listeners.isEmpty(), "No listeners defined.");
|
Preconditions.checkArgument( listeners != null && !listeners.isEmpty(), "No listeners defined." );
|
||||||
|
|
||||||
servers = adapter.getServers();
|
servers = adapter.getServers();
|
||||||
Preconditions.checkArgument(servers != null && !servers.isEmpty(), "No servers defined");
|
Preconditions.checkArgument( servers != null && !servers.isEmpty(), "No servers defined" );
|
||||||
|
|
||||||
for (ListenerInfo listener : listeners)
|
for ( ListenerInfo listener : listeners )
|
||||||
{
|
{
|
||||||
Preconditions.checkArgument(servers.containsKey(listener.getDefaultServer()));
|
Preconditions.checkArgument( servers.containsKey( listener.getDefaultServer() ) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -28,7 +28,7 @@ public class YamlConfig implements ConfigurationAdapter
|
|||||||
private boolean loaded;
|
private boolean loaded;
|
||||||
private Yaml yaml;
|
private Yaml yaml;
|
||||||
private Map config;
|
private Map config;
|
||||||
private final File file = new File("config.yml");
|
private final File file = new File( "config.yml" );
|
||||||
|
|
||||||
public void load()
|
public void load()
|
||||||
{
|
{
|
||||||
@ -36,79 +36,79 @@ public class YamlConfig implements ConfigurationAdapter
|
|||||||
{
|
{
|
||||||
file.createNewFile();
|
file.createNewFile();
|
||||||
DumperOptions options = new DumperOptions();
|
DumperOptions options = new DumperOptions();
|
||||||
options.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK);
|
options.setDefaultFlowStyle( DumperOptions.FlowStyle.BLOCK );
|
||||||
yaml = new Yaml(options);
|
yaml = new Yaml( options );
|
||||||
|
|
||||||
try (InputStream is = new FileInputStream(file))
|
try ( InputStream is = new FileInputStream( file ) )
|
||||||
{
|
{
|
||||||
config = (Map) yaml.load(is);
|
config = (Map) yaml.load( is );
|
||||||
}
|
}
|
||||||
|
|
||||||
if (config == null)
|
if ( config == null )
|
||||||
{
|
{
|
||||||
config = new HashMap();
|
config = new HashMap();
|
||||||
}
|
}
|
||||||
|
|
||||||
loaded = true;
|
loaded = true;
|
||||||
} catch (IOException ex)
|
} catch ( IOException ex )
|
||||||
{
|
{
|
||||||
throw new RuntimeException("Could not load configuration!", ex);
|
throw new RuntimeException( "Could not load configuration!", ex );
|
||||||
}
|
}
|
||||||
|
|
||||||
Map<String, Object> permissions = get("permissions", new HashMap<String, Object>());
|
Map<String, Object> permissions = get( "permissions", new HashMap<String, Object>() );
|
||||||
if (permissions.isEmpty())
|
if ( permissions.isEmpty() )
|
||||||
{
|
{
|
||||||
permissions.put("default", Arrays.asList(new String[]
|
permissions.put( "default", Arrays.asList( new String[]
|
||||||
{
|
{
|
||||||
"bungeecord.command.server", "bungeecord.command.list"
|
"bungeecord.command.server", "bungeecord.command.list"
|
||||||
}));
|
} ) );
|
||||||
permissions.put("admin", Arrays.asList(new String[]
|
permissions.put( "admin", Arrays.asList( new String[]
|
||||||
{
|
{
|
||||||
"bungeecord.command.alert", "bungeecord.command.end", "bungeecord.command.ip", "bungeecord.command.reload"
|
"bungeecord.command.alert", "bungeecord.command.end", "bungeecord.command.ip", "bungeecord.command.reload"
|
||||||
}));
|
} ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
Map<String, Object> groups = get("groups", new HashMap<String, Object>());
|
Map<String, Object> groups = get( "groups", new HashMap<String, Object>() );
|
||||||
if (groups.isEmpty())
|
if ( groups.isEmpty() )
|
||||||
{
|
{
|
||||||
groups.put("md_5", Collections.singletonList("admin"));
|
groups.put( "md_5", Collections.singletonList( "admin" ) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private <T> T get(String path, T def)
|
private <T> T get(String path, T def)
|
||||||
{
|
{
|
||||||
if (!loaded)
|
if ( !loaded )
|
||||||
{
|
{
|
||||||
load();
|
load();
|
||||||
}
|
}
|
||||||
return get(path, def, config);
|
return get( path, def, config );
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
private <T> T get(String path, T def, Map submap)
|
private <T> T get(String path, T def, Map submap)
|
||||||
{
|
{
|
||||||
if (!loaded)
|
if ( !loaded )
|
||||||
{
|
{
|
||||||
load();
|
load();
|
||||||
}
|
}
|
||||||
|
|
||||||
int index = path.indexOf('.');
|
int index = path.indexOf( '.' );
|
||||||
if (index == -1)
|
if ( index == -1 )
|
||||||
{
|
{
|
||||||
Object val = submap.get(path);
|
Object val = submap.get( path );
|
||||||
if (val == null && def != null)
|
if ( val == null && def != null )
|
||||||
{
|
{
|
||||||
val = def;
|
val = def;
|
||||||
submap.put(path, def);
|
submap.put( path, def );
|
||||||
save();
|
save();
|
||||||
}
|
}
|
||||||
return (T) val;
|
return (T) val;
|
||||||
} else
|
} else
|
||||||
{
|
{
|
||||||
String first = path.substring(0, index);
|
String first = path.substring( 0, index );
|
||||||
String second = path.substring(index + 1, path.length());
|
String second = path.substring( index + 1, path.length() );
|
||||||
Map sub = (Map) submap.get(first);
|
Map sub = (Map) submap.get( first );
|
||||||
return (sub != null) ? get(second, def, sub) : def;
|
return ( sub != null ) ? get( second, def, sub ) : def;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -116,43 +116,43 @@ public class YamlConfig implements ConfigurationAdapter
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
try (FileWriter wr = new FileWriter(file))
|
try ( FileWriter wr = new FileWriter( file ) )
|
||||||
{
|
{
|
||||||
yaml.dump(config, wr);
|
yaml.dump( config, wr );
|
||||||
}
|
}
|
||||||
} catch (IOException ex)
|
} catch ( IOException ex )
|
||||||
{
|
{
|
||||||
ProxyServer.getInstance().getLogger().log(Level.WARNING, "Could not save config", ex);
|
ProxyServer.getInstance().getLogger().log( Level.WARNING, "Could not save config", ex );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getInt(String path, int def)
|
public int getInt(String path, int def)
|
||||||
{
|
{
|
||||||
return get(path, def);
|
return get( path, def );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getString(String path, String def)
|
public String getString(String path, String def)
|
||||||
{
|
{
|
||||||
return get(path, def);
|
return get( path, def );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public Map<String, ServerInfo> getServers()
|
public Map<String, ServerInfo> getServers()
|
||||||
{
|
{
|
||||||
Map<String, Map<String, Object>> base = get("servers", (Map) Collections.singletonMap("lobby", new HashMap<>()));
|
Map<String, Map<String, Object>> base = get( "servers", (Map) Collections.singletonMap( "lobby", new HashMap<>() ) );
|
||||||
Map<String, ServerInfo> ret = new HashMap<>();
|
Map<String, ServerInfo> ret = new HashMap<>();
|
||||||
|
|
||||||
for (Map.Entry<String, Map<String, Object>> entry : base.entrySet())
|
for ( Map.Entry<String, Map<String, Object>> entry : base.entrySet() )
|
||||||
{
|
{
|
||||||
Map<String, Object> val = entry.getValue();
|
Map<String, Object> val = entry.getValue();
|
||||||
String name = entry.getKey();
|
String name = entry.getKey();
|
||||||
String addr = get("address", "localhost:25565", val);
|
String addr = get( "address", "localhost:25565", val );
|
||||||
InetSocketAddress address = Util.getAddr(addr);
|
InetSocketAddress address = Util.getAddr( addr );
|
||||||
ServerInfo info = ProxyServer.getInstance().constructServerInfo(name, address);
|
ServerInfo info = ProxyServer.getInstance().constructServerInfo( name, address );
|
||||||
ret.put(name, info);
|
ret.put( name, info );
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
@ -162,28 +162,28 @@ public class YamlConfig implements ConfigurationAdapter
|
|||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public Collection<ListenerInfo> getListeners()
|
public Collection<ListenerInfo> getListeners()
|
||||||
{
|
{
|
||||||
Collection<Map<String, Object>> base = get("listeners", (Collection) Arrays.asList(new Map[]
|
Collection<Map<String, Object>> base = get( "listeners", (Collection) Arrays.asList( new Map[]
|
||||||
{
|
{
|
||||||
new HashMap()
|
new HashMap()
|
||||||
}));
|
} ) );
|
||||||
Map<String, String> forcedDef = new HashMap<>();
|
Map<String, String> forcedDef = new HashMap<>();
|
||||||
forcedDef.put("pvp.md-5.net", "pvp");
|
forcedDef.put( "pvp.md-5.net", "pvp" );
|
||||||
|
|
||||||
Collection<ListenerInfo> ret = new HashSet<>();
|
Collection<ListenerInfo> ret = new HashSet<>();
|
||||||
|
|
||||||
for (Map<String, Object> val : base)
|
for ( Map<String, Object> val : base )
|
||||||
{
|
{
|
||||||
String motd = get("motd", "Another Bungee server", val);
|
String motd = get( "motd", "Another Bungee server", val );
|
||||||
motd = ChatColor.translateAlternateColorCodes('&', motd);
|
motd = ChatColor.translateAlternateColorCodes( '&', motd );
|
||||||
|
|
||||||
int maxPlayers = get("max_players", 1, val);
|
int maxPlayers = get( "max_players", 1, val );
|
||||||
String defaultServer = get("default_server", "lobby", val);
|
String defaultServer = get( "default_server", "lobby", val );
|
||||||
boolean forceDefault = get("force_default_server", false, val);
|
boolean forceDefault = get( "force_default_server", false, val );
|
||||||
String host = get("host", "0.0.0.0:25577", val);
|
String host = get( "host", "0.0.0.0:25577", val );
|
||||||
InetSocketAddress address = Util.getAddr(host);
|
InetSocketAddress address = Util.getAddr( host );
|
||||||
Map<String, String> forced = get("forced_hosts", forcedDef, val);
|
Map<String, String> forced = get( "forced_hosts", forcedDef, val );
|
||||||
ListenerInfo info = new ListenerInfo(address, motd, maxPlayers, defaultServer, forceDefault, forced);
|
ListenerInfo info = new ListenerInfo( address, motd, maxPlayers, defaultServer, forceDefault, forced );
|
||||||
ret.add(info);
|
ret.add( info );
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
@ -193,9 +193,9 @@ public class YamlConfig implements ConfigurationAdapter
|
|||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public Collection<String> getGroups(String player)
|
public Collection<String> getGroups(String player)
|
||||||
{
|
{
|
||||||
Collection<String> groups = get("groups." + player, null);
|
Collection<String> groups = get( "groups." + player, null );
|
||||||
Collection<String> ret = (groups == null) ? new HashSet<String>() : new HashSet<>(groups);
|
Collection<String> ret = ( groups == null ) ? new HashSet<String>() : new HashSet<>( groups );
|
||||||
ret.add("default");
|
ret.add( "default" );
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -203,6 +203,6 @@ public class YamlConfig implements ConfigurationAdapter
|
|||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public Collection<String> getPermissions(String group)
|
public Collection<String> getPermissions(String group)
|
||||||
{
|
{
|
||||||
return get("permissions." + group, Collections.EMPTY_LIST);
|
return get( "permissions." + group, Collections.EMPTY_LIST );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -40,10 +40,10 @@ public abstract class DefinedPacket implements DataInput, DataOutput
|
|||||||
|
|
||||||
public DefinedPacket(int id, byte[] buf)
|
public DefinedPacket(int id, byte[] buf)
|
||||||
{
|
{
|
||||||
in = ByteStreams.newDataInput(buf);
|
in = ByteStreams.newDataInput( buf );
|
||||||
if (readUnsignedByte() != id)
|
if ( readUnsignedByte() != id )
|
||||||
{
|
{
|
||||||
throw new IllegalArgumentException("Wasn't expecting packet id " + Util.hex(id));
|
throw new IllegalArgumentException( "Wasn't expecting packet id " + Util.hex( id ) );
|
||||||
}
|
}
|
||||||
this.id = id;
|
this.id = id;
|
||||||
packet = buf;
|
packet = buf;
|
||||||
@ -53,7 +53,7 @@ public abstract class DefinedPacket implements DataInput, DataOutput
|
|||||||
{
|
{
|
||||||
out = ByteStreams.newDataOutput();
|
out = ByteStreams.newDataOutput();
|
||||||
this.id = id;
|
this.id = id;
|
||||||
writeByte(id);
|
writeByte( id );
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -70,33 +70,33 @@ public abstract class DefinedPacket implements DataInput, DataOutput
|
|||||||
@Override
|
@Override
|
||||||
public void writeUTF(String s)
|
public void writeUTF(String s)
|
||||||
{
|
{
|
||||||
writeShort(s.length());
|
writeShort( s.length() );
|
||||||
writeChars(s);
|
writeChars( s );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String readUTF()
|
public String readUTF()
|
||||||
{
|
{
|
||||||
short len = readShort();
|
short len = readShort();
|
||||||
char[] chars = new char[len];
|
char[] chars = new char[ len ];
|
||||||
for (int i = 0; i < len; i++)
|
for ( int i = 0; i < len; i++ )
|
||||||
{
|
{
|
||||||
chars[i] = this.readChar();
|
chars[i] = this.readChar();
|
||||||
}
|
}
|
||||||
return new String(chars);
|
return new String( chars );
|
||||||
}
|
}
|
||||||
|
|
||||||
public void writeArray(byte[] b)
|
public void writeArray(byte[] b)
|
||||||
{
|
{
|
||||||
writeShort(b.length);
|
writeShort( b.length );
|
||||||
write(b);
|
write( b );
|
||||||
}
|
}
|
||||||
|
|
||||||
public byte[] readArray()
|
public byte[] readArray()
|
||||||
{
|
{
|
||||||
short len = readShort();
|
short len = readShort();
|
||||||
byte[] ret = new byte[len];
|
byte[] ret = new byte[ len ];
|
||||||
readFully(ret);
|
readFully( ret );
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -111,25 +111,25 @@ public abstract class DefinedPacket implements DataInput, DataOutput
|
|||||||
|
|
||||||
public void handle(PacketHandler handler) throws Exception
|
public void handle(PacketHandler handler) throws Exception
|
||||||
{
|
{
|
||||||
handler.handle(this);
|
handler.handle( this );
|
||||||
}
|
}
|
||||||
private static Class<? extends DefinedPacket>[] classes = new Class[256];
|
private static Class<? extends DefinedPacket>[] classes = new Class[ 256 ];
|
||||||
|
|
||||||
public static DefinedPacket packet(byte[] buf)
|
public static DefinedPacket packet(byte[] buf)
|
||||||
{
|
{
|
||||||
int id = Util.getId(buf);
|
int id = Util.getId( buf );
|
||||||
Class<? extends DefinedPacket> clazz = classes[id];
|
Class<? extends DefinedPacket> clazz = classes[id];
|
||||||
DefinedPacket ret = null;
|
DefinedPacket ret = null;
|
||||||
if (clazz != null)
|
if ( clazz != null )
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
Constructor<? extends DefinedPacket> constructor = clazz.getDeclaredConstructor(byte[].class);
|
Constructor<? extends DefinedPacket> constructor = clazz.getDeclaredConstructor( byte[].class );
|
||||||
if (constructor != null)
|
if ( constructor != null )
|
||||||
{
|
{
|
||||||
ret = constructor.newInstance(buf);
|
ret = constructor.newInstance( buf );
|
||||||
}
|
}
|
||||||
} catch (IllegalAccessException | InstantiationException | InvocationTargetException | NoSuchMethodException ex)
|
} catch ( IllegalAccessException | InstantiationException | InvocationTargetException | NoSuchMethodException ex )
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -12,7 +12,7 @@ public class Packet0KeepAlive extends DefinedPacket
|
|||||||
|
|
||||||
public Packet0KeepAlive(byte[] buffer)
|
public Packet0KeepAlive(byte[] buffer)
|
||||||
{
|
{
|
||||||
super(0x00, buffer);
|
super( 0x00, buffer );
|
||||||
id = readInt();
|
id = readInt();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -18,19 +18,19 @@ public class Packet1Login extends DefinedPacket
|
|||||||
|
|
||||||
public Packet1Login(int entityId, String levelType, byte gameMode, byte dimension, byte difficulty, byte unused, byte maxPlayers)
|
public Packet1Login(int entityId, String levelType, byte gameMode, byte dimension, byte difficulty, byte unused, byte maxPlayers)
|
||||||
{
|
{
|
||||||
super(0x01);
|
super( 0x01 );
|
||||||
writeInt(entityId);
|
writeInt( entityId );
|
||||||
writeUTF(levelType);
|
writeUTF( levelType );
|
||||||
writeByte(gameMode);
|
writeByte( gameMode );
|
||||||
writeByte(dimension);
|
writeByte( dimension );
|
||||||
writeByte(difficulty);
|
writeByte( difficulty );
|
||||||
writeByte(unused);
|
writeByte( unused );
|
||||||
writeByte(maxPlayers);
|
writeByte( maxPlayers );
|
||||||
}
|
}
|
||||||
|
|
||||||
public Packet1Login(byte[] buf)
|
public Packet1Login(byte[] buf)
|
||||||
{
|
{
|
||||||
super(0x01, buf);
|
super( 0x01, buf );
|
||||||
this.entityId = readInt();
|
this.entityId = readInt();
|
||||||
this.levelType = readUTF();
|
this.levelType = readUTF();
|
||||||
this.gameMode = readByte();
|
this.gameMode = readByte();
|
||||||
@ -43,6 +43,6 @@ public class Packet1Login extends DefinedPacket
|
|||||||
@Override
|
@Override
|
||||||
public void handle(PacketHandler handler) throws Exception
|
public void handle(PacketHandler handler) throws Exception
|
||||||
{
|
{
|
||||||
handler.handle(this);
|
handler.handle( this );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -15,16 +15,16 @@ public class Packet2Handshake extends DefinedPacket
|
|||||||
|
|
||||||
public Packet2Handshake(byte protocolVersion, String username, String host, int port)
|
public Packet2Handshake(byte protocolVersion, String username, String host, int port)
|
||||||
{
|
{
|
||||||
super(0x02);
|
super( 0x02 );
|
||||||
writeByte(protocolVersion);
|
writeByte( protocolVersion );
|
||||||
writeUTF(username);
|
writeUTF( username );
|
||||||
writeUTF(host);
|
writeUTF( host );
|
||||||
writeInt(port);
|
writeInt( port );
|
||||||
}
|
}
|
||||||
|
|
||||||
public Packet2Handshake(byte[] buf)
|
public Packet2Handshake(byte[] buf)
|
||||||
{
|
{
|
||||||
super(0x02, buf);
|
super( 0x02, buf );
|
||||||
this.procolVersion = readByte();
|
this.procolVersion = readByte();
|
||||||
this.username = readUTF();
|
this.username = readUTF();
|
||||||
this.host = readUTF();
|
this.host = readUTF();
|
||||||
@ -34,6 +34,6 @@ public class Packet2Handshake extends DefinedPacket
|
|||||||
@Override
|
@Override
|
||||||
public void handle(PacketHandler handler) throws Exception
|
public void handle(PacketHandler handler) throws Exception
|
||||||
{
|
{
|
||||||
handler.handle(this);
|
handler.handle( this );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -12,13 +12,13 @@ public class Packet3Chat extends DefinedPacket
|
|||||||
|
|
||||||
public Packet3Chat(String message)
|
public Packet3Chat(String message)
|
||||||
{
|
{
|
||||||
super(0x03);
|
super( 0x03 );
|
||||||
writeUTF(message);
|
writeUTF( message );
|
||||||
}
|
}
|
||||||
|
|
||||||
public Packet3Chat(byte[] buf)
|
public Packet3Chat(byte[] buf)
|
||||||
{
|
{
|
||||||
super(0x03, buf);
|
super( 0x03, buf );
|
||||||
this.message = readUTF();
|
this.message = readUTF();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,17 +16,17 @@ public class Packet9Respawn extends DefinedPacket
|
|||||||
|
|
||||||
public Packet9Respawn(int dimension, byte difficulty, byte gameMode, short worldHeight, String levelType)
|
public Packet9Respawn(int dimension, byte difficulty, byte gameMode, short worldHeight, String levelType)
|
||||||
{
|
{
|
||||||
super(0x09);
|
super( 0x09 );
|
||||||
writeInt(dimension);
|
writeInt( dimension );
|
||||||
writeByte(difficulty);
|
writeByte( difficulty );
|
||||||
writeByte(gameMode);
|
writeByte( gameMode );
|
||||||
writeShort(worldHeight);
|
writeShort( worldHeight );
|
||||||
writeUTF(levelType);
|
writeUTF( levelType );
|
||||||
}
|
}
|
||||||
|
|
||||||
public Packet9Respawn(byte[] buf)
|
public Packet9Respawn(byte[] buf)
|
||||||
{
|
{
|
||||||
super(0x09, buf);
|
super( 0x09, buf );
|
||||||
this.dimension = readInt();
|
this.dimension = readInt();
|
||||||
this.difficulty = readByte();
|
this.difficulty = readByte();
|
||||||
this.gameMode = readByte();
|
this.gameMode = readByte();
|
||||||
|
@ -14,7 +14,7 @@ public class PacketC9PlayerListItem extends DefinedPacket
|
|||||||
|
|
||||||
public PacketC9PlayerListItem(byte[] packet)
|
public PacketC9PlayerListItem(byte[] packet)
|
||||||
{
|
{
|
||||||
super(0xC9, packet);
|
super( 0xC9, packet );
|
||||||
username = readUTF();
|
username = readUTF();
|
||||||
online = readBoolean();
|
online = readBoolean();
|
||||||
ping = readShort();
|
ping = readShort();
|
||||||
@ -22,9 +22,9 @@ public class PacketC9PlayerListItem extends DefinedPacket
|
|||||||
|
|
||||||
public PacketC9PlayerListItem(String username, boolean online, int ping)
|
public PacketC9PlayerListItem(String username, boolean online, int ping)
|
||||||
{
|
{
|
||||||
super(0xC9);
|
super( 0xC9 );
|
||||||
writeUTF(username);
|
writeUTF( username );
|
||||||
writeBoolean(online);
|
writeBoolean( online );
|
||||||
writeShort(ping);
|
writeShort( ping );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -15,18 +15,18 @@ public class PacketCDClientStatus extends DefinedPacket
|
|||||||
*/
|
*/
|
||||||
public PacketCDClientStatus(byte payload)
|
public PacketCDClientStatus(byte payload)
|
||||||
{
|
{
|
||||||
super(0xCD);
|
super( 0xCD );
|
||||||
writeByte(payload);
|
writeByte( payload );
|
||||||
}
|
}
|
||||||
|
|
||||||
public PacketCDClientStatus(byte[] buf)
|
public PacketCDClientStatus(byte[] buf)
|
||||||
{
|
{
|
||||||
super(0xCD, buf);
|
super( 0xCD, buf );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void handle(PacketHandler handler) throws Exception
|
public void handle(PacketHandler handler) throws Exception
|
||||||
{
|
{
|
||||||
handler.handle(this);
|
handler.handle( this );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -13,16 +13,16 @@ public class PacketFAPluginMessage extends DefinedPacket
|
|||||||
|
|
||||||
public PacketFAPluginMessage(String tag, byte[] data)
|
public PacketFAPluginMessage(String tag, byte[] data)
|
||||||
{
|
{
|
||||||
super(0xFA);
|
super( 0xFA );
|
||||||
writeUTF(tag);
|
writeUTF( tag );
|
||||||
writeArray(data);
|
writeArray( data );
|
||||||
this.tag = tag;
|
this.tag = tag;
|
||||||
this.data = data;
|
this.data = data;
|
||||||
}
|
}
|
||||||
|
|
||||||
public PacketFAPluginMessage(byte[] buf)
|
public PacketFAPluginMessage(byte[] buf)
|
||||||
{
|
{
|
||||||
super(0xFA, buf);
|
super( 0xFA, buf );
|
||||||
this.tag = readUTF();
|
this.tag = readUTF();
|
||||||
this.data = readArray();
|
this.data = readArray();
|
||||||
}
|
}
|
||||||
@ -30,6 +30,6 @@ public class PacketFAPluginMessage extends DefinedPacket
|
|||||||
@Override
|
@Override
|
||||||
public void handle(PacketHandler handler) throws Exception
|
public void handle(PacketHandler handler) throws Exception
|
||||||
{
|
{
|
||||||
handler.handle(this);
|
handler.handle( this );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -13,21 +13,21 @@ public class PacketFCEncryptionResponse extends DefinedPacket
|
|||||||
|
|
||||||
public PacketFCEncryptionResponse()
|
public PacketFCEncryptionResponse()
|
||||||
{
|
{
|
||||||
super(0xFC);
|
super( 0xFC );
|
||||||
writeArray(new byte[0]);
|
writeArray( new byte[ 0 ] );
|
||||||
writeArray(new byte[0]);
|
writeArray( new byte[ 0 ] );
|
||||||
}
|
}
|
||||||
|
|
||||||
public PacketFCEncryptionResponse(byte[] sharedSecret, byte[] verifyToken)
|
public PacketFCEncryptionResponse(byte[] sharedSecret, byte[] verifyToken)
|
||||||
{
|
{
|
||||||
super(0xFC);
|
super( 0xFC );
|
||||||
writeArray(sharedSecret);
|
writeArray( sharedSecret );
|
||||||
writeArray(verifyToken);
|
writeArray( verifyToken );
|
||||||
}
|
}
|
||||||
|
|
||||||
public PacketFCEncryptionResponse(byte[] buf)
|
public PacketFCEncryptionResponse(byte[] buf)
|
||||||
{
|
{
|
||||||
super(0xFC, buf);
|
super( 0xFC, buf );
|
||||||
this.sharedSecret = readArray();
|
this.sharedSecret = readArray();
|
||||||
this.verifyToken = readArray();
|
this.verifyToken = readArray();
|
||||||
}
|
}
|
||||||
@ -35,6 +35,6 @@ public class PacketFCEncryptionResponse extends DefinedPacket
|
|||||||
@Override
|
@Override
|
||||||
public void handle(PacketHandler handler) throws Exception
|
public void handle(PacketHandler handler) throws Exception
|
||||||
{
|
{
|
||||||
handler.handle(this);
|
handler.handle( this );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -14,10 +14,10 @@ public class PacketFDEncryptionRequest extends DefinedPacket
|
|||||||
|
|
||||||
public PacketFDEncryptionRequest(String serverId, byte[] publicKey, byte[] verifyToken)
|
public PacketFDEncryptionRequest(String serverId, byte[] publicKey, byte[] verifyToken)
|
||||||
{
|
{
|
||||||
super(0xFD);
|
super( 0xFD );
|
||||||
writeUTF(serverId);
|
writeUTF( serverId );
|
||||||
writeArray(publicKey);
|
writeArray( publicKey );
|
||||||
writeArray(verifyToken);
|
writeArray( verifyToken );
|
||||||
this.serverId = serverId;
|
this.serverId = serverId;
|
||||||
this.publicKey = publicKey;
|
this.publicKey = publicKey;
|
||||||
this.verifyToken = verifyToken;
|
this.verifyToken = verifyToken;
|
||||||
@ -25,7 +25,7 @@ public class PacketFDEncryptionRequest extends DefinedPacket
|
|||||||
|
|
||||||
public PacketFDEncryptionRequest(byte[] buf)
|
public PacketFDEncryptionRequest(byte[] buf)
|
||||||
{
|
{
|
||||||
super(0xFD, buf);
|
super( 0xFD, buf );
|
||||||
serverId = readUTF();
|
serverId = readUTF();
|
||||||
publicKey = readArray();
|
publicKey = readArray();
|
||||||
verifyToken = readArray();
|
verifyToken = readArray();
|
||||||
@ -34,6 +34,6 @@ public class PacketFDEncryptionRequest extends DefinedPacket
|
|||||||
@Override
|
@Override
|
||||||
public void handle(PacketHandler handler) throws Exception
|
public void handle(PacketHandler handler) throws Exception
|
||||||
{
|
{
|
||||||
handler.handle(this);
|
handler.handle( this );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -10,12 +10,12 @@ public class PacketFEPing extends DefinedPacket
|
|||||||
|
|
||||||
public PacketFEPing(byte[] buffer)
|
public PacketFEPing(byte[] buffer)
|
||||||
{
|
{
|
||||||
super(0xFE, buffer);
|
super( 0xFE, buffer );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void handle(PacketHandler handler) throws Exception
|
public void handle(PacketHandler handler) throws Exception
|
||||||
{
|
{
|
||||||
handler.handle(this);
|
handler.handle( this );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -12,13 +12,13 @@ public class PacketFFKick extends DefinedPacket
|
|||||||
|
|
||||||
public PacketFFKick(String message)
|
public PacketFFKick(String message)
|
||||||
{
|
{
|
||||||
super(0xFF);
|
super( 0xFF );
|
||||||
writeUTF(message);
|
writeUTF( message );
|
||||||
}
|
}
|
||||||
|
|
||||||
public PacketFFKick(byte[] buf)
|
public PacketFFKick(byte[] buf)
|
||||||
{
|
{
|
||||||
super(0xFF, buf);
|
super( 0xFF, buf );
|
||||||
this.message = readUTF();
|
this.message = readUTF();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,7 +5,7 @@ public abstract class PacketHandler
|
|||||||
|
|
||||||
public void handle(DefinedPacket packet) throws Exception
|
public void handle(DefinedPacket packet) throws Exception
|
||||||
{
|
{
|
||||||
throw new UnsupportedOperationException("No handler defined for packet " + packet.getClass());
|
throw new UnsupportedOperationException( "No handler defined for packet " + packet.getClass() );
|
||||||
}
|
}
|
||||||
|
|
||||||
public void handle(Packet1Login login) throws Exception
|
public void handle(Packet1Login login) throws Exception
|
||||||
|
@ -21,28 +21,28 @@ public class PacketStream implements AutoCloseable
|
|||||||
@Getter
|
@Getter
|
||||||
private OutputStream out;
|
private OutputStream out;
|
||||||
private final TrackingInputStream tracker;
|
private final TrackingInputStream tracker;
|
||||||
private final byte[] buffer = new byte[1 << 18];
|
private final byte[] buffer = new byte[ 1 << 18 ];
|
||||||
|
|
||||||
public PacketStream(InputStream in)
|
public PacketStream(InputStream in)
|
||||||
{
|
{
|
||||||
this(in, null);
|
this( in, null );
|
||||||
}
|
}
|
||||||
|
|
||||||
public PacketStream(InputStream in, OutputStream out)
|
public PacketStream(InputStream in, OutputStream out)
|
||||||
{
|
{
|
||||||
tracker = new TrackingInputStream(in);
|
tracker = new TrackingInputStream( in );
|
||||||
dataInput = new DataInputStream(tracker);
|
dataInput = new DataInputStream( tracker );
|
||||||
this.out = out;
|
this.out = out;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void write(byte[] b) throws IOException
|
public void write(byte[] b) throws IOException
|
||||||
{
|
{
|
||||||
out.write(b);
|
out.write( b );
|
||||||
}
|
}
|
||||||
|
|
||||||
public void write(DefinedPacket packet) throws IOException
|
public void write(DefinedPacket packet) throws IOException
|
||||||
{
|
{
|
||||||
out.write(packet.getPacket());
|
out.write( packet.getPacket() );
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -54,7 +54,7 @@ public class PacketStream implements AutoCloseable
|
|||||||
public byte[] readPacket() throws IOException
|
public byte[] readPacket() throws IOException
|
||||||
{
|
{
|
||||||
tracker.out.reset();
|
tracker.out.reset();
|
||||||
DataInputPacketReader.readPacket(dataInput, buffer);
|
DataInputPacketReader.readPacket( dataInput, buffer );
|
||||||
return tracker.out.toByteArray();
|
return tracker.out.toByteArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -75,22 +75,22 @@ public class PacketStream implements AutoCloseable
|
|||||||
|
|
||||||
public TrackingInputStream(InputStream in)
|
public TrackingInputStream(InputStream in)
|
||||||
{
|
{
|
||||||
super(in);
|
super( in );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int read() throws IOException
|
public int read() throws IOException
|
||||||
{
|
{
|
||||||
int ret = in.read();
|
int ret = in.read();
|
||||||
out.write(ret);
|
out.write( ret );
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int read(byte[] b, int off, int len) throws IOException
|
public int read(byte[] b, int off, int len) throws IOException
|
||||||
{
|
{
|
||||||
int ret = in.read(b, off, len);
|
int ret = in.read( b, off, len );
|
||||||
out.write(b, off, ret);
|
out.write( b, off, ret );
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -15,18 +15,18 @@ public class GlobalPingTabList extends GlobalTabList
|
|||||||
@Override
|
@Override
|
||||||
public void onDisconnect(ProxiedPlayer player)
|
public void onDisconnect(ProxiedPlayer player)
|
||||||
{
|
{
|
||||||
lastPings.remove(player);
|
lastPings.remove( player );
|
||||||
super.onDisconnect(player);
|
super.onDisconnect( player );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onPingChange(ProxiedPlayer player, int ping)
|
public void onPingChange(ProxiedPlayer player, int ping)
|
||||||
{
|
{
|
||||||
Integer lastPing = lastPings.get(player);
|
Integer lastPing = lastPings.get( player );
|
||||||
if (lastPing == null || (ping - PING_THRESHOLD > lastPing && ping + PING_THRESHOLD < lastPing))
|
if ( lastPing == null || ( ping - PING_THRESHOLD > lastPing && ping + PING_THRESHOLD < lastPing ) )
|
||||||
{
|
{
|
||||||
BungeeCord.getInstance().broadcast(new PacketC9PlayerListItem(player.getDisplayName(), true, ping));
|
BungeeCord.getInstance().broadcast( new PacketC9PlayerListItem( player.getDisplayName(), true, ping ) );
|
||||||
lastPings.put(player, ping);
|
lastPings.put( player, ping );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -20,28 +20,28 @@ public class GlobalTabList implements TabListHandler
|
|||||||
public void onConnect(ProxiedPlayer player)
|
public void onConnect(ProxiedPlayer player)
|
||||||
{
|
{
|
||||||
UserConnection con = (UserConnection) player;
|
UserConnection con = (UserConnection) player;
|
||||||
for (ProxiedPlayer p : ProxyServer.getInstance().getPlayers())
|
for ( ProxiedPlayer p : ProxyServer.getInstance().getPlayers() )
|
||||||
{
|
{
|
||||||
con.packetQueue.add(new PacketC9PlayerListItem(p.getDisplayName(), true, p.getPing()));
|
con.packetQueue.add( new PacketC9PlayerListItem( p.getDisplayName(), true, p.getPing() ) );
|
||||||
}
|
}
|
||||||
BungeeCord.getInstance().broadcast(new PacketC9PlayerListItem(player.getDisplayName(), true, player.getPing()));
|
BungeeCord.getInstance().broadcast( new PacketC9PlayerListItem( player.getDisplayName(), true, player.getPing() ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onPingChange(ProxiedPlayer player, int ping)
|
public void onPingChange(ProxiedPlayer player, int ping)
|
||||||
{
|
{
|
||||||
if (!sentPings.containsKey(player))
|
if ( !sentPings.containsKey( player ) )
|
||||||
{
|
{
|
||||||
BungeeCord.getInstance().broadcast(new PacketC9PlayerListItem(player.getDisplayName(), true, player.getPing()));
|
BungeeCord.getInstance().broadcast( new PacketC9PlayerListItem( player.getDisplayName(), true, player.getPing() ) );
|
||||||
sentPings.put(player, PRESENT);
|
sentPings.put( player, PRESENT );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onDisconnect(ProxiedPlayer player)
|
public void onDisconnect(ProxiedPlayer player)
|
||||||
{
|
{
|
||||||
BungeeCord.getInstance().broadcast(new PacketC9PlayerListItem(player.getDisplayName(), false, 9999));
|
BungeeCord.getInstance().broadcast( new PacketC9PlayerListItem( player.getDisplayName(), false, 9999 ) );
|
||||||
sentPings.remove(player);
|
sentPings.remove( player );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -27,20 +27,20 @@ public class ServerUniqueTabList implements TabListHandler
|
|||||||
@Override
|
@Override
|
||||||
public void onDisconnect(ProxiedPlayer player)
|
public void onDisconnect(ProxiedPlayer player)
|
||||||
{
|
{
|
||||||
sentUsernames.remove(player);
|
sentUsernames.remove( player );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onServerChange(ProxiedPlayer player)
|
public void onServerChange(ProxiedPlayer player)
|
||||||
{
|
{
|
||||||
Set<String> usernames = sentUsernames.get(player);
|
Set<String> usernames = sentUsernames.get( player );
|
||||||
if (usernames != null)
|
if ( usernames != null )
|
||||||
{
|
{
|
||||||
synchronized (usernames)
|
synchronized ( usernames )
|
||||||
{
|
{
|
||||||
for (String username : usernames)
|
for ( String username : usernames )
|
||||||
{
|
{
|
||||||
((UserConnection) player).packetQueue.add(new PacketC9PlayerListItem(username, false, 9999));
|
( (UserConnection) player ).packetQueue.add( new PacketC9PlayerListItem( username, false, 9999 ) );
|
||||||
}
|
}
|
||||||
usernames.clear();
|
usernames.clear();
|
||||||
}
|
}
|
||||||
@ -50,21 +50,21 @@ public class ServerUniqueTabList implements TabListHandler
|
|||||||
@Override
|
@Override
|
||||||
public boolean onListUpdate(ProxiedPlayer player, String name, boolean online, int ping)
|
public boolean onListUpdate(ProxiedPlayer player, String name, boolean online, int ping)
|
||||||
{
|
{
|
||||||
Set<String> usernames = sentUsernames.get(player);
|
Set<String> usernames = sentUsernames.get( player );
|
||||||
if (usernames == null)
|
if ( usernames == null )
|
||||||
{
|
{
|
||||||
usernames = new HashSet<>();
|
usernames = new HashSet<>();
|
||||||
sentUsernames.put(player, usernames);
|
sentUsernames.put( player, usernames );
|
||||||
}
|
}
|
||||||
|
|
||||||
synchronized (usernames)
|
synchronized ( usernames )
|
||||||
{
|
{
|
||||||
if (online)
|
if ( online )
|
||||||
{
|
{
|
||||||
usernames.add(name);
|
usernames.add( name );
|
||||||
} else
|
} else
|
||||||
{
|
{
|
||||||
usernames.remove(name);
|
usernames.remove( name );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user