diff --git a/connector/src/main/java/org/geysermc/connector/thread/PingPassthroughThread.java b/connector/src/main/java/org/geysermc/connector/thread/PingPassthroughThread.java new file mode 100644 index 000000000..ce7e54a0b --- /dev/null +++ b/connector/src/main/java/org/geysermc/connector/thread/PingPassthroughThread.java @@ -0,0 +1,40 @@ +package org.geysermc.connector.thread; + +import com.github.steveice10.mc.protocol.MinecraftConstants; +import com.github.steveice10.mc.protocol.MinecraftProtocol; +import com.github.steveice10.mc.protocol.data.SubProtocol; +import com.github.steveice10.mc.protocol.data.status.ServerStatusInfo; +import com.github.steveice10.mc.protocol.data.status.handler.ServerInfoHandler; +import com.github.steveice10.packetlib.Client; +import com.github.steveice10.packetlib.tcp.TcpSessionFactory; +import lombok.Getter; +import org.geysermc.connector.GeyserConnector; + +public class PingPassthroughThread implements Runnable { + + private GeyserConnector connector; + + public PingPassthroughThread(GeyserConnector connector) { + this.connector = connector; + } + + @Getter + private ServerStatusInfo info; + + private Client client; + + @Override + public void run() { + try { + this.client = new Client(connector.getConfig().getRemote().getAddress(), connector.getConfig().getRemote().getPort(), new MinecraftProtocol(SubProtocol.STATUS), new TcpSessionFactory()); + this.client.getSession().setFlag(MinecraftConstants.SERVER_INFO_HANDLER_KEY, (ServerInfoHandler) (session, info) -> { + this.info = info; + this.client.getSession().disconnect(null); + }); + + client.getSession().connect(); + } catch (Exception ex) { + ex.printStackTrace(); + } + } +}