2021-04-05 14:22:51 +02:00
|
|
|
package com.viaversion.aas.handler.autoprotocol
|
2021-02-13 16:08:13 +01:00
|
|
|
|
2021-05-04 22:15:06 +02:00
|
|
|
import com.google.gson.JsonParser
|
2021-04-05 14:22:51 +02:00
|
|
|
import com.viaversion.aas.handler.MinecraftHandler
|
|
|
|
import com.viaversion.aas.handler.state.MinecraftConnectionState
|
|
|
|
import com.viaversion.aas.mcLogger
|
|
|
|
import com.viaversion.aas.packet.Packet
|
|
|
|
import com.viaversion.aas.packet.status.StatusResponse
|
|
|
|
import com.viaversion.aas.parseProtocol
|
|
|
|
import com.viaversion.aas.util.StacklessException
|
2021-04-27 21:28:53 +02:00
|
|
|
import com.viaversion.viaversion.api.protocol.packet.State
|
2021-05-04 22:15:06 +02:00
|
|
|
import com.viaversion.viaversion.api.protocol.version.ProtocolVersion
|
|
|
|
import io.netty.channel.ChannelHandlerContext
|
2021-02-13 16:08:13 +01:00
|
|
|
import java.util.concurrent.CompletableFuture
|
|
|
|
|
|
|
|
class ProtocolDetectionState(val future: CompletableFuture<ProtocolVersion>) : MinecraftConnectionState {
|
|
|
|
override val state: State
|
|
|
|
get() = State.STATUS
|
|
|
|
|
|
|
|
override fun handlePacket(handler: MinecraftHandler, ctx: ChannelHandlerContext, packet: Packet) {
|
|
|
|
handler.data.frontChannel.close()
|
2021-04-05 14:22:51 +02:00
|
|
|
if (packet !is StatusResponse) throw StacklessException("unexpected packet")
|
2021-03-26 01:51:44 +01:00
|
|
|
val ver = JsonParser.parseString(packet.json).asJsonObject
|
2021-05-04 22:15:06 +02:00
|
|
|
.getAsJsonObject("version").get("protocol").asInt.parseProtocol()
|
2021-02-13 16:08:13 +01:00
|
|
|
future.complete(ver)
|
2021-03-26 01:51:44 +01:00
|
|
|
mcLogger.info("A.D.: ${handler.endRemoteAddress} $ver")
|
2021-02-13 16:08:13 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
override fun disconnect(handler: MinecraftHandler, msg: String) {
|
|
|
|
super.disconnect(handler, msg)
|
|
|
|
handler.data.frontChannel.close()
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun onInactivated(handler: MinecraftHandler) {
|
2021-04-05 14:22:51 +02:00
|
|
|
future.completeExceptionally(StacklessException("closed"))
|
2021-02-13 16:08:13 +01:00
|
|
|
}
|
2021-03-07 17:39:46 +01:00
|
|
|
}
|