From 56bc8dc2325d00cbd95247bcc1d270ba0ed703a1 Mon Sep 17 00:00:00 2001 From: Shaun Bennett Date: Fri, 12 Dec 2014 04:18:47 -0600 Subject: [PATCH] Trying to do some hacky things! --- .../src/mineplex/bungee/motd/Motd.java | 14 ++++++-- .../src/mineplex/bungee/motd/MotdManager.java | 4 --- .../md_5/bungee/connection/CustomMotd.java | 1 + .../bungee/connection/InitialHandler.java | 36 ++++++++++++++----- .../md_5/bungee/connection/PingHandler.java | 1 + 5 files changed, 41 insertions(+), 15 deletions(-) diff --git a/Plugins/Mineplex.Bungee.Mineplexer/src/mineplex/bungee/motd/Motd.java b/Plugins/Mineplex.Bungee.Mineplexer/src/mineplex/bungee/motd/Motd.java index b049ac8c9..9b2a543a4 100644 --- a/Plugins/Mineplex.Bungee.Mineplexer/src/mineplex/bungee/motd/Motd.java +++ b/Plugins/Mineplex.Bungee.Mineplexer/src/mineplex/bungee/motd/Motd.java @@ -18,8 +18,8 @@ import net.md_5.bungee.api.ServerPing; import net.md_5.bungee.api.event.ProxyPingEvent; import net.md_5.bungee.connection.CustomMotd; import net.md_5.bungee.connection.InitialHandler; +import net.md_5.bungee.protocol.packet.PingPacket; import net.md_5.bungee.protocol.packet.StatusResponse; -import org.apache.commons.io.comparator.NameFileComparator; public class Motd implements CustomMotd { @@ -64,12 +64,22 @@ public class Motd implements CustomMotd initialHandler.unsafe().sendPacket(new StatusResponse(gson.toJson(ping))); _ticks++; + + if (_ticks > MAX_TICKS) + { + PingPacket packet = initialHandler.getPingPacket(); + if (packet != null) + { + initialHandler.unsafe().sendPacket(packet); + initialHandler.setPingPacket(null); + } + } } else { - _task.cancel(true); if (initialHandler.getChannelWrapper().getHandle().isOpen()) initialHandler.getChannelWrapper().getHandle().close(); + _task.cancel(true); } } }, 0, 200, TimeUnit.MILLISECONDS); diff --git a/Plugins/Mineplex.Bungee.Mineplexer/src/mineplex/bungee/motd/MotdManager.java b/Plugins/Mineplex.Bungee.Mineplexer/src/mineplex/bungee/motd/MotdManager.java index 9d1e1ee4a..e4b17b2b0 100644 --- a/Plugins/Mineplex.Bungee.Mineplexer/src/mineplex/bungee/motd/MotdManager.java +++ b/Plugins/Mineplex.Bungee.Mineplexer/src/mineplex/bungee/motd/MotdManager.java @@ -1,17 +1,13 @@ package mineplex.bungee.motd; -import java.util.ArrayList; import java.util.List; import java.util.concurrent.TimeUnit; -import net.md_5.bungee.api.event.PreLoginEvent; -import net.md_5.bungee.api.event.ProxyPingEvent; import net.md_5.bungee.api.plugin.Listener; import net.md_5.bungee.api.plugin.Plugin; import net.md_5.bungee.connection.CustomMotd; import net.md_5.bungee.connection.CustomMotdFactory; import net.md_5.bungee.connection.InitialHandler; -import net.md_5.bungee.event.EventHandler; public class MotdManager implements Listener, Runnable, CustomMotdFactory { diff --git a/Plugins/Mineplex.Bungee.Mineplexer/src/net/md_5/bungee/connection/CustomMotd.java b/Plugins/Mineplex.Bungee.Mineplexer/src/net/md_5/bungee/connection/CustomMotd.java index 2886bffd3..143306c0b 100644 --- a/Plugins/Mineplex.Bungee.Mineplexer/src/net/md_5/bungee/connection/CustomMotd.java +++ b/Plugins/Mineplex.Bungee.Mineplexer/src/net/md_5/bungee/connection/CustomMotd.java @@ -1,6 +1,7 @@ package net.md_5.bungee.connection; import net.md_5.bungee.api.event.ProxyPingEvent; +import net.md_5.bungee.protocol.packet.PingPacket; public interface CustomMotd { diff --git a/Plugins/Mineplex.Bungee.Mineplexer/src/net/md_5/bungee/connection/InitialHandler.java b/Plugins/Mineplex.Bungee.Mineplexer/src/net/md_5/bungee/connection/InitialHandler.java index a18770518..7f451af93 100644 --- a/Plugins/Mineplex.Bungee.Mineplexer/src/net/md_5/bungee/connection/InitialHandler.java +++ b/Plugins/Mineplex.Bungee.Mineplexer/src/net/md_5/bungee/connection/InitialHandler.java @@ -12,7 +12,6 @@ import java.beans.ConstructorProperties; import java.math.BigInteger; import java.net.InetSocketAddress; import java.net.URLEncoder; -import java.nio.channels.Channel; import java.security.MessageDigest; import java.util.ArrayList; import java.util.List; @@ -41,15 +40,12 @@ import net.md_5.bungee.api.config.ListenerInfo; import net.md_5.bungee.api.config.ServerInfo; import net.md_5.bungee.api.connection.PendingConnection; import net.md_5.bungee.api.connection.ProxiedPlayer; -import net.md_5.bungee.api.connection.Connection.Unsafe; import net.md_5.bungee.api.event.LoginEvent; import net.md_5.bungee.api.event.PlayerHandshakeEvent; import net.md_5.bungee.api.event.PostLoginEvent; import net.md_5.bungee.api.event.PreLoginEvent; import net.md_5.bungee.api.event.ProxyPingEvent; import net.md_5.bungee.chat.ComponentSerializer; -import net.md_5.bungee.connection.LoginResult; -import net.md_5.bungee.connection.UpstreamBridge; import net.md_5.bungee.http.HttpClient; import net.md_5.bungee.netty.ChannelWrapper; import net.md_5.bungee.netty.HandlerBoss; @@ -74,6 +70,7 @@ public class InitialHandler extends PacketHandler implements PendingConnection { private static CustomMotdFactory _customMotdFactory; + private PingPacket _pingPacket; private final ProxyServer bungee; private ChannelWrapper ch; private final ListenerInfo listener; @@ -180,11 +177,22 @@ public class InitialHandler extends PacketHandler implements PendingConnection { this.thisState = InitialHandler.State.PING; } - public void handle(PingPacket ping) throws Exception { - if (thisState == State.PING) return; // MINEPLEX - Preconditions.checkState(this.thisState == InitialHandler.State.PING, "Not expecting PING"); - this.unsafe.sendPacket(ping); - this.disconnect((String)""); + public void handle(final PingPacket ping) throws Exception { + + _pingPacket = ping; +// if (thisState == State.PING) return; // MINEPLEX +// Preconditions.checkState(this.thisState == InitialHandler.State.PING, "Not expecting PING"); +// getChannelWrapper().getHandle().eventLoop().schedule(new Runnable() +// { +// @Override +// public void run() +// { +// unsafe.sendPacket(ping); +// } +// }, 6, TimeUnit.SECONDS); +// +// this.unsafe.sendPacket(ping); +// this.disconnect((String)""); } public void handle(Handshake handshake) throws Exception { @@ -450,6 +458,16 @@ public class InitialHandler extends PacketHandler implements PendingConnection { return ch; //MINEPLEX } + public PingPacket getPingPacket() + { + return _pingPacket; // MINEPLEX + } + + public void setPingPacket(PingPacket packet) + { + _pingPacket = packet; + } + private static enum State { HANDSHAKE, STATUS, diff --git a/Plugins/Mineplex.Bungee.Mineplexer/src/net/md_5/bungee/connection/PingHandler.java b/Plugins/Mineplex.Bungee.Mineplexer/src/net/md_5/bungee/connection/PingHandler.java index f07679cd8..5a13701b8 100644 --- a/Plugins/Mineplex.Bungee.Mineplexer/src/net/md_5/bungee/connection/PingHandler.java +++ b/Plugins/Mineplex.Bungee.Mineplexer/src/net/md_5/bungee/connection/PingHandler.java @@ -43,6 +43,7 @@ public class PingHandler extends PacketHandler { public void handle(StatusResponse statusResponse) throws Exception { Gson gson = this.protocol == 4?BungeeCord.getInstance().gsonLegacy:BungeeCord.getInstance().gson; this.callback.done(gson.fromJson(statusResponse.getResponse(), ServerPing.class), (Throwable)null); + System.out.println("handle"); // this.channel.close(); //MINEPLEX }