mirror of
https://github.com/SpigotMC/BungeeCord.git
synced 2024-11-24 03:05:49 +01:00
Make ProxyPingEvent async
This commit is contained in:
parent
65ae8b4c6a
commit
bc48ab3fb8
@ -1,9 +1,9 @@
|
||||
package net.md_5.bungee.api.event;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.ToString;
|
||||
import net.md_5.bungee.api.Callback;
|
||||
import net.md_5.bungee.api.ServerPing;
|
||||
import net.md_5.bungee.api.connection.PendingConnection;
|
||||
import net.md_5.bungee.api.plugin.Event;
|
||||
@ -12,10 +12,9 @@ import net.md_5.bungee.api.plugin.Event;
|
||||
* Called when the proxy is pinged with packet 0xFE from the server list.
|
||||
*/
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@ToString(callSuper = false)
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
public class ProxyPingEvent extends Event
|
||||
public class ProxyPingEvent extends AsyncEvent<ProxyPingEvent>
|
||||
{
|
||||
|
||||
/**
|
||||
@ -26,4 +25,11 @@ public class ProxyPingEvent extends Event
|
||||
* The data to respond with.
|
||||
*/
|
||||
private ServerPing response;
|
||||
|
||||
public ProxyPingEvent(PendingConnection connection, ServerPing response, Callback<ProxyPingEvent> done)
|
||||
{
|
||||
super( done );
|
||||
this.connection = connection;
|
||||
this.response = response;
|
||||
}
|
||||
}
|
||||
|
@ -134,18 +134,33 @@ public class InitialHandler extends PacketHandler implements PendingConnection
|
||||
{
|
||||
ServerPing legacy = new ServerPing( new ServerPing.Protocol( bungee.getName() + " " + bungee.getGameVersion(), bungee.getProtocolVersion() ),
|
||||
new ServerPing.Players( listener.getMaxPlayers(), bungee.getOnlineCount(), null ), listener.getMotd(), (Favicon) null );
|
||||
legacy = bungee.getPluginManager().callEvent( new ProxyPingEvent( this, legacy ) ).getResponse();
|
||||
|
||||
Callback<ProxyPingEvent> callback = new Callback<ProxyPingEvent>()
|
||||
{
|
||||
@Override
|
||||
public void done(ProxyPingEvent result, Throwable error)
|
||||
{
|
||||
if ( ch.isClosed() )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
ServerPing ping = result.getResponse();
|
||||
|
||||
String kickMessage = ChatColor.DARK_BLUE
|
||||
+ "\00" + 127
|
||||
+ "\00" + legacy.getVersion().getName()
|
||||
+ "\00" + legacy.getDescription()
|
||||
+ "\00" + legacy.getPlayers().getOnline()
|
||||
+ "\00" + legacy.getPlayers().getMax();
|
||||
+ "\00" + ping.getVersion().getName()
|
||||
+ "\00" + ping.getDescription()
|
||||
+ "\00" + ping.getPlayers().getOnline()
|
||||
+ "\00" + ping.getPlayers().getMax();
|
||||
|
||||
ch.getHandle().writeAndFlush( kickMessage );
|
||||
ch.close();
|
||||
}
|
||||
};
|
||||
|
||||
bungee.getPluginManager().callEvent( new ProxyPingEvent( this, legacy, callback ) );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handle(StatusRequest statusRequest) throws Exception
|
||||
@ -166,11 +181,19 @@ public class InitialHandler extends PacketHandler implements PendingConnection
|
||||
result.setDescription( bungee.getTranslation( "ping_cannot_connect" ) );
|
||||
bungee.getLogger().log( Level.WARNING, "Error pinging remote server", error );
|
||||
}
|
||||
result = bungee.getPluginManager().callEvent( new ProxyPingEvent( InitialHandler.this, result ) ).getResponse();
|
||||
|
||||
Callback<ProxyPingEvent> callback = new Callback<ProxyPingEvent>()
|
||||
{
|
||||
@Override
|
||||
public void done(ProxyPingEvent pingResult, Throwable error)
|
||||
{
|
||||
BungeeCord.getInstance().getConnectionThrottle().unthrottle( getAddress().getAddress() );
|
||||
Gson gson = handshake.getProtocolVersion() == ProtocolConstants.MINECRAFT_1_7_2 ? BungeeCord.getInstance().gsonLegacy : BungeeCord.getInstance().gson;
|
||||
unsafe.sendPacket( new StatusResponse( gson.toJson( result ) ) );
|
||||
unsafe.sendPacket( new StatusResponse( gson.toJson( pingResult.getResponse() ) ) );
|
||||
}
|
||||
};
|
||||
|
||||
bungee.getPluginManager().callEvent( new ProxyPingEvent( InitialHandler.this, result, callback ) );
|
||||
}
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user