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