mirror of
https://github.com/ViaVersion/VIAaaS.git
synced 2025-01-31 23:11:44 +01:00
0.1.1, steal code from velocity
This commit is contained in:
parent
3344fca1c8
commit
686a6344af
@ -18,7 +18,7 @@ java {
|
|||||||
val gitVersion: groovy.lang.Closure<String> by extra
|
val gitVersion: groovy.lang.Closure<String> by extra
|
||||||
|
|
||||||
group = "com.github.creeper123123321.viaaas"
|
group = "com.github.creeper123123321.viaaas"
|
||||||
version = "0.1.0-SNAPSHOT+" + try {
|
version = "0.1.1-SNAPSHOT+" + try {
|
||||||
gitVersion()
|
gitVersion()
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
"unknown"
|
"unknown"
|
||||||
|
@ -19,7 +19,6 @@ import java.util.zip.Deflater
|
|||||||
import java.util.zip.Inflater
|
import java.util.zip.Inflater
|
||||||
import javax.crypto.Cipher
|
import javax.crypto.Cipher
|
||||||
|
|
||||||
|
|
||||||
object ChannelInit : ChannelInitializer<Channel>() {
|
object ChannelInit : ChannelInitializer<Channel>() {
|
||||||
override fun initChannel(ch: Channel) {
|
override fun initChannel(ch: Channel) {
|
||||||
ch.pipeline().addLast("timeout", ReadTimeoutHandler(30, TimeUnit.SECONDS))
|
ch.pipeline().addLast("timeout", ReadTimeoutHandler(30, TimeUnit.SECONDS))
|
||||||
@ -27,9 +26,13 @@ object ChannelInit : ChannelInitializer<Channel>() {
|
|||||||
.addLast("frame", FrameCodec())
|
.addLast("frame", FrameCodec())
|
||||||
// "compress" / dummy "decompress"
|
// "compress" / dummy "decompress"
|
||||||
.addLast("flow-handler", FlowControlHandler())
|
.addLast("flow-handler", FlowControlHandler())
|
||||||
.addLast("handler", CloudMinecraftHandler(ConnectionData(
|
.addLast(
|
||||||
|
"handler", CloudMinecraftHandler(
|
||||||
|
ConnectionData(
|
||||||
frontChannel = ch,
|
frontChannel = ch,
|
||||||
), other = null, frontEnd = true))
|
), other = null, frontEnd = true
|
||||||
|
)
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -113,8 +116,11 @@ class CloudCompressionCodec(val threshold: Int) : MessageToMessageCodec<ByteBuf,
|
|||||||
inflater.setInput(input.nioBuffer())
|
inflater.setInput(input.nioBuffer())
|
||||||
val output = ctx.alloc().buffer(outLength, outLength)
|
val output = ctx.alloc().buffer(outLength, outLength)
|
||||||
try {
|
try {
|
||||||
output.writerIndex(output.writerIndex() + inflater.inflate(
|
output.writerIndex(
|
||||||
output.nioBuffer(output.writerIndex(), output.writableBytes())))
|
output.writerIndex() + inflater.inflate(
|
||||||
|
output.nioBuffer(output.writerIndex(), output.writableBytes())
|
||||||
|
)
|
||||||
|
)
|
||||||
out.add(output.retain())
|
out.add(output.retain())
|
||||||
} finally {
|
} finally {
|
||||||
inflater.reset()
|
inflater.reset()
|
||||||
|
@ -34,7 +34,7 @@ import javax.crypto.spec.SecretKeySpec
|
|||||||
import javax.naming.NameNotFoundException
|
import javax.naming.NameNotFoundException
|
||||||
import javax.naming.directory.InitialDirContext
|
import javax.naming.directory.InitialDirContext
|
||||||
|
|
||||||
val chLogger = LoggerFactory.getLogger("VIAaaS MC Handler")
|
val mcLogger = LoggerFactory.getLogger("VIAaaS MC")
|
||||||
|
|
||||||
class ConnectionData(
|
class ConnectionData(
|
||||||
val frontChannel: Channel,
|
val frontChannel: Channel,
|
||||||
@ -90,7 +90,7 @@ class CloudMinecraftHandler(
|
|||||||
override fun exceptionCaught(ctx: ChannelHandlerContext, cause: Throwable) {
|
override fun exceptionCaught(ctx: ChannelHandlerContext, cause: Throwable) {
|
||||||
if (cause is CancelCodecException) return
|
if (cause is CancelCodecException) return
|
||||||
disconnect("Exception: $cause")
|
disconnect("Exception: $cause")
|
||||||
chLogger.debug("Exception: ", cause)
|
mcLogger.debug("Exception: ", cause)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun disconnect(s: String) {
|
fun disconnect(s: String) {
|
||||||
@ -105,11 +105,11 @@ interface MinecraftConnectionState {
|
|||||||
)
|
)
|
||||||
|
|
||||||
fun disconnect(handler: CloudMinecraftHandler, msg: String) {
|
fun disconnect(handler: CloudMinecraftHandler, msg: String) {
|
||||||
chLogger.info("Disconnected ${handler.remoteAddress}: $msg")
|
mcLogger.info("Disconnected ${handler.remoteAddress}: $msg")
|
||||||
}
|
}
|
||||||
|
|
||||||
fun onInactivated(handler: CloudMinecraftHandler) {
|
fun onInactivated(handler: CloudMinecraftHandler) {
|
||||||
chLogger.info(handler.remoteAddress?.toString() + " inactivated")
|
mcLogger.info(handler.remoteAddress?.toString() + " inactivated")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -146,7 +146,7 @@ class HandshakeState : MinecraftConnectionState {
|
|||||||
handler.data.backName = parsed.altUsername
|
handler.data.backName = parsed.altUsername
|
||||||
|
|
||||||
val playerAddr = handler.data.frontHandler.remoteAddress
|
val playerAddr = handler.data.frontHandler.remoteAddress
|
||||||
chLogger.info("Connecting $playerAddr (${handler.data.frontVer}) -> ${packet.address}:${packet.port} ($backProto)")
|
mcLogger.info("Connecting $playerAddr (${handler.data.frontVer}) -> ${packet.address}:${packet.port} ($backProto)")
|
||||||
|
|
||||||
if (!hadHostname && VIAaaSConfig.requireHostName) {
|
if (!hadHostname && VIAaaSConfig.requireHostName) {
|
||||||
throw UnsupportedOperationException("This VIAaaS instance requires you to use the hostname")
|
throw UnsupportedOperationException("This VIAaaS instance requires you to use the hostname")
|
||||||
@ -174,7 +174,7 @@ class HandshakeState : MinecraftConnectionState {
|
|||||||
|
|
||||||
bootstrap.addListener {
|
bootstrap.addListener {
|
||||||
if (it.isSuccess) {
|
if (it.isSuccess) {
|
||||||
chLogger.info("Connected ${frontHandler.remoteAddress} -> $socketAddr")
|
mcLogger.info("Connected ${frontHandler.remoteAddress} -> $socketAddr")
|
||||||
|
|
||||||
val backChan = bootstrap.channel() as SocketChannel
|
val backChan = bootstrap.channel() as SocketChannel
|
||||||
handler.data.backChannel = backChan
|
handler.data.backChannel = backChan
|
||||||
|
@ -36,9 +36,6 @@ import java.util.concurrent.Future
|
|||||||
import java.util.concurrent.TimeUnit
|
import java.util.concurrent.TimeUnit
|
||||||
import java.util.logging.Logger
|
import java.util.logging.Logger
|
||||||
|
|
||||||
val viaaasVer = GsonUtil.getGson().fromJson(CloudPlatform::class.java.classLoader.getResourceAsStream("viaaas_info.json")!!
|
|
||||||
.reader(Charsets.UTF_8).readText(), JsonObject::class.java).get("version").asString
|
|
||||||
|
|
||||||
object CloudBackwards : ViaBackwardsPlatform {
|
object CloudBackwards : ViaBackwardsPlatform {
|
||||||
val log = LoggerWrapper(LoggerFactory.getLogger("ViaBackwards"))
|
val log = LoggerWrapper(LoggerFactory.getLogger("ViaBackwards"))
|
||||||
override fun getDataFolder() = File("config/viabackwards")
|
override fun getDataFolder() = File("config/viabackwards")
|
||||||
@ -78,11 +75,14 @@ object CloudInjector : ViaInjector {
|
|||||||
override fun getServerProtocolVersion() = 47 // Dummy
|
override fun getServerProtocolVersion() = 47 // Dummy
|
||||||
}
|
}
|
||||||
|
|
||||||
class CloudBossBar(title: String, health: Float, style: BossStyle, color: BossColor) : CommonBoss<Unit>(title, health, color, style)
|
class CloudBossBar(title: String, health: Float, style: BossStyle, color: BossColor) :
|
||||||
|
CommonBoss<Unit>(title, health, color, style)
|
||||||
|
|
||||||
object CloudAPI : ViaAPI<Unit> {
|
object CloudAPI : ViaAPI<Unit> {
|
||||||
override fun isInjected(p0: UUID): Boolean = false
|
override fun isInjected(p0: UUID): Boolean = false
|
||||||
override fun createBossBar(p0: String, p1: BossColor, p2: BossStyle): BossBar<*> = CloudBossBar(p0, 0f, p2, p1)
|
override fun createBossBar(p0: String, p1: BossColor, p2: BossStyle): BossBar<*> = CloudBossBar(p0, 0f, p2, p1)
|
||||||
override fun createBossBar(p0: String, p1: Float, p2: BossColor, p3: BossStyle): BossBar<*> = CloudBossBar(p0, p1, p3, p2)
|
override fun createBossBar(p0: String, p1: Float, p2: BossColor, p3: BossStyle): BossBar<*> =
|
||||||
|
CloudBossBar(p0, p1, p3, p2)
|
||||||
|
|
||||||
override fun sendRawPacket(p0: Unit?, p1: ByteBuf?) {
|
override fun sendRawPacket(p0: Unit?, p1: ByteBuf?) {
|
||||||
TODO("Not yet implemented")
|
TODO("Not yet implemented")
|
||||||
@ -126,8 +126,12 @@ object CloudPlatform : ViaPlatform<Unit> {
|
|||||||
|
|
||||||
override fun getDump(): JsonObject = JsonObject()
|
override fun getDump(): JsonObject = JsonObject()
|
||||||
override fun runSync(runnable: Runnable): TaskId = CloudTask(eventLoop.submit(runnable))
|
override fun runSync(runnable: Runnable): TaskId = CloudTask(eventLoop.submit(runnable))
|
||||||
override fun runSync(p0: Runnable, p1: Long): TaskId = CloudTask(eventLoop.schedule(p0, p1 * 50L, TimeUnit.MILLISECONDS))
|
override fun runSync(p0: Runnable, p1: Long): TaskId =
|
||||||
override fun runRepeatingSync(p0: Runnable, p1: Long): TaskId = CloudTask(eventLoop.scheduleAtFixedRate(p0, 0, p1 * 50L, TimeUnit.MILLISECONDS))
|
CloudTask(eventLoop.schedule(p0, p1 * 50L, TimeUnit.MILLISECONDS))
|
||||||
|
|
||||||
|
override fun runRepeatingSync(p0: Runnable, p1: Long): TaskId =
|
||||||
|
CloudTask(eventLoop.scheduleAtFixedRate(p0, 0, p1 * 50L, TimeUnit.MILLISECONDS))
|
||||||
|
|
||||||
override fun runAsync(p0: Runnable): TaskId = CloudTask(CompletableFuture.runAsync(p0, executor))
|
override fun runAsync(p0: Runnable): TaskId = CloudTask(CompletableFuture.runAsync(p0, executor))
|
||||||
override fun getLogger(): Logger = LoggerWrapper(LoggerFactory.getLogger("ViaVersion"))
|
override fun getLogger(): Logger = LoggerWrapper(LoggerFactory.getLogger("ViaVersion"))
|
||||||
override fun getConnectionManager(): ViaConnectionManager = connMan
|
override fun getConnectionManager(): ViaConnectionManager = connMan
|
||||||
@ -146,7 +150,7 @@ object CloudPlatform : ViaPlatform<Unit> {
|
|||||||
override fun isProxy(): Boolean = true
|
override fun isProxy(): Boolean = true
|
||||||
}
|
}
|
||||||
|
|
||||||
class CloudConnectionManager: ViaConnectionManager() {
|
class CloudConnectionManager : ViaConnectionManager() {
|
||||||
override fun isFrontEnd(conn: UserConnection): Boolean = false
|
override fun isFrontEnd(conn: UserConnection): Boolean = false
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -168,10 +172,12 @@ object CloudConfig : AbstractViaConfig(File("config/viaversion.yml")) {
|
|||||||
override fun is1_14HitboxFix(): Boolean = false
|
override fun is1_14HitboxFix(): Boolean = false
|
||||||
|
|
||||||
// Based on Sponge ViaVersion
|
// Based on Sponge ViaVersion
|
||||||
private val UNSUPPORTED = listOf("anti-xray-patch", "bungee-ping-interval",
|
private val UNSUPPORTED = listOf(
|
||||||
|
"anti-xray-patch", "bungee-ping-interval",
|
||||||
"bungee-ping-save", "bungee-servers", "quick-move-action-fix", "nms-player-ticking",
|
"bungee-ping-save", "bungee-servers", "quick-move-action-fix", "nms-player-ticking",
|
||||||
"item-cache", "velocity-ping-interval", "velocity-ping-save", "velocity-servers",
|
"item-cache", "velocity-ping-interval", "velocity-ping-save", "velocity-servers",
|
||||||
"blockconnection-method", "change-1_9-hitbox", "change-1_14-hitbox")
|
"blockconnection-method", "change-1_9-hitbox", "change-1_14-hitbox"
|
||||||
|
)
|
||||||
|
|
||||||
init {
|
init {
|
||||||
// Load config
|
// Load config
|
||||||
|
@ -38,6 +38,8 @@ import us.myles.ViaVersion.api.command.ViaCommandSender
|
|||||||
import us.myles.ViaVersion.api.data.MappingDataLoader
|
import us.myles.ViaVersion.api.data.MappingDataLoader
|
||||||
import us.myles.ViaVersion.api.protocol.ProtocolVersion
|
import us.myles.ViaVersion.api.protocol.ProtocolVersion
|
||||||
import us.myles.ViaVersion.util.Config
|
import us.myles.ViaVersion.util.Config
|
||||||
|
import us.myles.ViaVersion.util.GsonUtil
|
||||||
|
import us.myles.viaversion.libs.gson.JsonObject
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.net.InetAddress
|
import java.net.InetAddress
|
||||||
import java.security.KeyPairGenerator
|
import java.security.KeyPairGenerator
|
||||||
@ -45,6 +47,11 @@ import java.security.SecureRandom
|
|||||||
import java.util.*
|
import java.util.*
|
||||||
import java.util.concurrent.CompletableFuture
|
import java.util.concurrent.CompletableFuture
|
||||||
|
|
||||||
|
val viaaasVer = GsonUtil.getGson().fromJson(
|
||||||
|
CloudPlatform::class.java.classLoader.getResourceAsStream("viaaas_info.json")!!
|
||||||
|
.reader(Charsets.UTF_8).readText(), JsonObject::class.java
|
||||||
|
).get("version").asString
|
||||||
|
|
||||||
var runningServer = true
|
var runningServer = true
|
||||||
val viaaasLogger = LoggerFactory.getLogger("VIAaaS")
|
val viaaasLogger = LoggerFactory.getLogger("VIAaaS")
|
||||||
|
|
||||||
@ -92,16 +99,23 @@ fun channelSocketFactory(): ChannelFactory<SocketChannel> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun main(args: Array<String>) {
|
fun main(args: Array<String>) {
|
||||||
|
// Stolen from https://github.com/VelocityPowered/Velocity/blob/dev/1.1.0/proxy/src/main/java/com/velocitypowered/proxy/Velocity.java
|
||||||
|
if (System.getProperty("io.netty.allocator.maxOrder") == null) {
|
||||||
|
System.setProperty("io.netty.allocator.maxOrder", "9");
|
||||||
|
}
|
||||||
|
|
||||||
File("config/https.jks").apply {
|
File("config/https.jks").apply {
|
||||||
parentFile.mkdirs()
|
parentFile.mkdirs()
|
||||||
if (!exists()) generateCertificate(this)
|
if (!exists()) generateCertificate(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
Via.init(ViaManager.builder()
|
Via.init(
|
||||||
|
ViaManager.builder()
|
||||||
.injector(CloudInjector)
|
.injector(CloudInjector)
|
||||||
.loader(CloudLoader)
|
.loader(CloudLoader)
|
||||||
.commandHandler(CloudCommands)
|
.commandHandler(CloudCommands)
|
||||||
.platform(CloudPlatform).build())
|
.platform(CloudPlatform).build()
|
||||||
|
)
|
||||||
MappingDataLoader.enableMappingsCache()
|
MappingDataLoader.enableMappingsCache()
|
||||||
Via.getManager().init()
|
Via.getManager().init()
|
||||||
CloudRewind.init(ViaRewindConfigImpl(File("config/viarewind.yml")))
|
CloudRewind.init(ViaRewindConfigImpl(File("config/viarewind.yml")))
|
||||||
@ -157,21 +171,29 @@ class VIAaaSConsole : SimpleTerminalConsole(), ViaCommandSender {
|
|||||||
}
|
}
|
||||||
commands["viaver"] = commands["viaversion"]!!
|
commands["viaver"] = commands["viaversion"]!!
|
||||||
commands["vvcloud"] = commands["viaversion"]!!
|
commands["vvcloud"] = commands["viaversion"]!!
|
||||||
commands["help"] = { suggestion , _, _ ->
|
commands["help"] = { suggestion, _, _ ->
|
||||||
if (suggestion == null) sendMessage(commands.keys.toString())
|
if (suggestion == null) sendMessage(commands.entries.groupBy { it.value }.entries.joinToString(", ") {
|
||||||
|
it.value.joinToString("/") { it.key }
|
||||||
|
})
|
||||||
}
|
}
|
||||||
commands["?"] = commands["help"]!!
|
commands["?"] = commands["help"]!!
|
||||||
|
commands["ver"] = { suggestion, _, _ ->
|
||||||
|
if (suggestion == null) sendMessage(viaaasVer)
|
||||||
|
}
|
||||||
commands["list"] = { suggestion, _, _ ->
|
commands["list"] = { suggestion, _, _ ->
|
||||||
if (suggestion == null) {
|
if (suggestion == null) {
|
||||||
sendMessage("List of player connections: ")
|
sendMessage("List of player connections: ")
|
||||||
Via.getPlatform().connectionManager.connections.forEach {
|
Via.getPlatform().connectionManager.connections.forEach {
|
||||||
val pAddr = it.channel?.remoteAddress()
|
val pAddr = it.channel?.remoteAddress()
|
||||||
val pVer = it.protocolInfo?.protocolVersion?.let {
|
val pVer = it.protocolInfo?.protocolVersion?.let {
|
||||||
ProtocolVersion.getProtocol(it)}
|
ProtocolVersion.getProtocol(it)
|
||||||
|
}
|
||||||
val backName = it.protocolInfo?.username
|
val backName = it.protocolInfo?.username
|
||||||
val backVer = it.protocolInfo?.serverProtocolVersion?.let {
|
val backVer = it.protocolInfo?.serverProtocolVersion?.let {
|
||||||
ProtocolVersion.getProtocol(it)}
|
ProtocolVersion.getProtocol(it)
|
||||||
val backAddr = it.channel?.pipeline()?.get(CloudMinecraftHandler::class.java)?.other?.remoteAddress()
|
}
|
||||||
|
val backAddr =
|
||||||
|
it.channel?.pipeline()?.get(CloudMinecraftHandler::class.java)?.other?.remoteAddress()
|
||||||
val pName = it.channel?.pipeline()?.get(CloudMinecraftHandler::class.java)?.data?.frontName
|
val pName = it.channel?.pipeline()?.get(CloudMinecraftHandler::class.java)?.data?.frontName
|
||||||
sendMessage("$pAddr ($pVer) ($pName) -> ($backVer) ($backName) $backAddr")
|
sendMessage("$pAddr ($pVer) ($pName) -> ($backVer) ($backName) $backAddr")
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user