mirror of
https://github.com/ViaVersion/VIAaaS.git
synced 2024-11-21 11:55:15 +01:00
cleanup, clean PacketRegistry
This commit is contained in:
parent
ccfed4f20c
commit
60a63ec9f1
8
.github/FUNDING.yml
vendored
8
.github/FUNDING.yml
vendored
@ -1,5 +1,5 @@
|
|||||||
custom:
|
custom:
|
||||||
- 'https://viaversion.com/donate'
|
- 'https://viaversion.com/donate'
|
||||||
- 'https://viaversion.com/backwards'
|
- 'https://viaversion.com/backwards'
|
||||||
- 'https://viaversion.com/rewind'
|
- 'https://viaversion.com/rewind'
|
||||||
- 'https://creeper123123321.github.io/#donate'
|
- 'https://creeper123123321.github.io/#donate'
|
||||||
|
22
.github/workflows/gradle.yml
vendored
22
.github/workflows/gradle.yml
vendored
@ -1,18 +1,18 @@
|
|||||||
# This workflow will build a Java project with Gradle
|
# This workflow will build a Java project with Gradle
|
||||||
# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-gradle
|
# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-gradle
|
||||||
name: Java CI with Gradle
|
name: Java CI with Gradle
|
||||||
on: [push, pull_request]
|
on: [ push, pull_request ]
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
- uses: actions/setup-java@v1
|
- uses: actions/setup-java@v1
|
||||||
with:
|
with:
|
||||||
java-version: 16
|
java-version: 16
|
||||||
- name: Build with Gradle
|
- name: Build with Gradle
|
||||||
run: ./gradlew build
|
run: ./gradlew build
|
||||||
- uses: actions/upload-artifact@v2
|
- uses: actions/upload-artifact@v2
|
||||||
with:
|
with:
|
||||||
name: artifact
|
name: artifact
|
||||||
path: build/libs/
|
path: build/libs/
|
||||||
|
81
README.md
81
README.md
@ -10,53 +10,71 @@ Discord: https://viaversion.com/discord
|
|||||||
Supported versions: https://viaversion.com/
|
Supported versions: https://viaversion.com/
|
||||||
|
|
||||||
## How does it work?
|
## How does it work?
|
||||||
- [ViaVersion](https://viaversion.com), [ViaBackwards](https://viaversion.com/backwards) and [ViaRewind](https://viaversion.com/rewind) translates the connections to backend server.
|
|
||||||
- VIAaaS auth page stores account credentials in the player's browser local storage. Check for XSS vulnerabilities on your domain.
|
- [ViaVersion](https://viaversion.com), [ViaBackwards](https://viaversion.com/backwards)
|
||||||
- Due to technical/security reasons, it requires a CORS Proxy for calling Mojang APIs, which may make Mojang see that
|
and [ViaRewind](https://viaversion.com/rewind) translates the connections to backend server.
|
||||||
as suspicious and reset/block your account password if the IP address seems suspect.
|
- VIAaaS auth page stores account credentials in the player's browser local storage. Check for XSS vulnerabilities on
|
||||||
|
your domain.
|
||||||
|
- Due to technical/security reasons, it requires a CORS Proxy for calling Mojang APIs, which may make Mojang see that as
|
||||||
|
suspicious and reset/block your account password if the IP address seems suspect.
|
||||||
- Account credentials aren't sent to VIAaaS instance, though it's intermediated by CORS Proxy.
|
- Account credentials aren't sent to VIAaaS instance, though it's intermediated by CORS Proxy.
|
||||||
- VIAaaS receives a the session hash from instance and then the browser validates it to Mojang.
|
- VIAaaS receives a the session hash from instance and then the browser validates it to Mojang.
|
||||||
|
|
||||||
## Setting up server instance
|
## Setting up server instance
|
||||||
Download: [GitHub Actions](https://github.com/ViaVersion/VIAaaS/actions) (needs to be logged into GitHub) or [JitPack](https://jitpack.io/com/github/viaversion/viaaas/master-SNAPSHOT/viaaas-master-SNAPSHOT-all.jar)
|
|
||||||
|
Download: [GitHub Actions](https://github.com/ViaVersion/VIAaaS/actions) (needs to be logged into GitHub)
|
||||||
|
or [JitPack](https://jitpack.io/com/github/viaversion/viaaas/master-SNAPSHOT/viaaas-master-SNAPSHOT-all.jar)
|
||||||
|
|
||||||
How to start VIAaaS server:
|
How to start VIAaaS server:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
java -jar VIAaaS-all.jar
|
java -jar VIAaaS-all.jar
|
||||||
```
|
```
|
||||||
|
|
||||||
- Requires Java 11
|
- Requires Java 11
|
||||||
- Default Minecraft: ```via.localhost``` with port 25565
|
- Default Minecraft: ```via.localhost``` with port 25565
|
||||||
- Default HTTPS: ```https://localhost:25543/```
|
- Default HTTPS: ```https://localhost:25543/```
|
||||||
- Default WS URL: ```wss://localhost:25543/ws```
|
- Default WS URL: ```wss://localhost:25543/ws```
|
||||||
|
|
||||||
### How to create a public server
|
### How to create a public server
|
||||||
- You need a domain wildcarding to VIAaaS instance, like ``*.example.com -> 192.168.123.123``. You can use [DuckDNS](https://duckdns.org/) DDNS service.
|
|
||||||
|
- You need a domain wildcarding to VIAaaS instance, like ``*.example.com -> 192.168.123.123``. You can
|
||||||
|
use [DuckDNS](https://duckdns.org/) DDNS service.
|
||||||
- Configure the hostname in the config
|
- Configure the hostname in the config
|
||||||
- Open the Minecraft port (25565)
|
- Open the Minecraft port (25565)
|
||||||
- The HTTPS page needs a certificate, you can use [Apache](https://httpd.apache.org/) (with a [Let's Encrypt](https://letsencrypt.org/) certificate) as a proxy. See apache_copypasta.txt file.
|
- The HTTPS page needs a certificate, you can use [Apache](https://httpd.apache.org/) (with
|
||||||
|
a [Let's Encrypt](https://letsencrypt.org/) certificate) as a proxy. See apache_copypasta.txt file.
|
||||||
|
|
||||||
## CORS Proxy
|
## CORS Proxy
|
||||||
|
|
||||||
- For less chance of Mojang seeing the login as suspect, you (the player) should set up a CORS proxy on your machine.
|
- For less chance of Mojang seeing the login as suspect, you (the player) should set up a CORS proxy on your machine.
|
||||||
- Note the ending slash in cors-anywhere address
|
- Note the ending slash in cors-anywhere address
|
||||||
- You can use my public instance at https://crp123-cors.herokuapp.com/ ([source](https://github.com/creeper123123321/cors-anywhere/)) too,
|
- You can use my public instance
|
||||||
but proxies have a bit more chance of being seen as suspect.
|
at https://crp123-cors.herokuapp.com/ ([source](https://github.com/creeper123123321/cors-anywhere/)) too, but proxies
|
||||||
|
have a bit more chance of being seen as suspect.
|
||||||
|
|
||||||
Setting up [cors-anywhere](https://www.npmjs.com/package/cors-anywhere) on local machine:
|
Setting up [cors-anywhere](https://www.npmjs.com/package/cors-anywhere) on local machine:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
git clone https://github.com/Rob--W/cors-anywhere
|
git clone https://github.com/Rob--W/cors-anywhere
|
||||||
cd cors-anywhere
|
cd cors-anywhere
|
||||||
npm install
|
npm install
|
||||||
node server.js
|
node server.js
|
||||||
```
|
```
|
||||||
|
|
||||||
- It will be available at ```http://localhost:8080/```
|
- It will be available at ```http://localhost:8080/```
|
||||||
|
|
||||||
## Usage for players
|
## Usage for players
|
||||||
|
|
||||||
Usage for offline mode:
|
Usage for offline mode:
|
||||||
|
|
||||||
- Connect to ```mc.example.net.via.localhost```
|
- Connect to ```mc.example.net.via.localhost```
|
||||||
|
|
||||||
Usage for online mode:
|
Usage for online mode:
|
||||||
- You can use two accounts (avoids Bad Login error), the same account for front-end and back-end connections, or use ```_of```
|
|
||||||
(offline mode in frontend. May be useful if you have a client which is incompatible with online mode).
|
- You can use two accounts (avoids Bad Login error), the same account for front-end and back-end connections, or
|
||||||
|
use ```_of```
|
||||||
|
(offline mode in frontend. May be useful if you have a client which is incompatible with online mode).
|
||||||
- Go to VIAaaS auth webpage (default is https://localhost:25543/)
|
- Go to VIAaaS auth webpage (default is https://localhost:25543/)
|
||||||
- Configure CORS proxy, see above in "CORS Proxy" section
|
- Configure CORS proxy, see above in "CORS Proxy" section
|
||||||
- Listen to the username A you'll use to connect to the proxy.
|
- Listen to the username A you'll use to connect to the proxy.
|
||||||
@ -65,62 +83,83 @@ Usage for online mode:
|
|||||||
- Connect to ```mc.example.com._u(B).via.localhost``` (```_u``` can be removed if you are using the same username)
|
- Connect to ```mc.example.com._u(B).via.localhost``` (```_u``` can be removed if you are using the same username)
|
||||||
- Approve the login in the webpage
|
- Approve the login in the webpage
|
||||||
- If you use the same online mode account, your client may show Bad Login. You can use a mod like
|
- If you use the same online mode account, your client may show Bad Login. You can use a mod like
|
||||||
[Auth Me](https://www.curseforge.com/minecraft/mc-mods/auth-me) or [ReAuth](https://www.curseforge.com/minecraft/mc-mods/reauth).
|
[Auth Me](https://www.curseforge.com/minecraft/mc-mods/auth-me)
|
||||||
|
or [ReAuth](https://www.curseforge.com/minecraft/mc-mods/reauth).
|
||||||
|
|
||||||
### Address options
|
### Address options
|
||||||
|
|
||||||
Example address:
|
Example address:
|
||||||
|
|
||||||
- ```server.example.net._p25565._v1_12_2._of._uBACKUSERNAME.via.example.com```
|
- ```server.example.net._p25565._v1_12_2._of._uBACKUSERNAME.via.example.com```
|
||||||
- ```server.example.net.v_1_8.via.example.com```
|
- ```server.example.net.v_1_8.via.example.com```
|
||||||
- It's inspired by [Tor2web](https://www.tor2web.org/) proxies.
|
- It's inspired by [Tor2web](https://www.tor2web.org/) proxies.
|
||||||
|
|
||||||
Address parts:
|
Address parts:
|
||||||
|
|
||||||
- You can use ``(option)_(value)`` too, like ``p_25565``.
|
- You can use ``(option)_(value)`` too, like ``p_25565``.
|
||||||
- ```server.example.net```: backend server address
|
- ```server.example.net```: backend server address
|
||||||
- ```_p```: backend port
|
- ```_p```: backend port
|
||||||
- ```_v```: backend version ([protocol id](https://wiki.vg/Protocol_version_numbers) or name with underline instead of dots). ```AUTO``` is default and ``-1`` is fallback if it fails.
|
- ```_v```: backend version ([protocol id](https://wiki.vg/Protocol_version_numbers) or name with underline instead of
|
||||||
- ```_o```: ```t``` to force online mode in frontend, ```f``` to disable online mode in frontend. If not set, it will be based on backend online mode.
|
dots). ```AUTO``` is default and ``-1`` is fallback if it fails.
|
||||||
|
- ```_o```: ```t``` to force online mode in frontend, ```f``` to disable online mode in frontend. If not set, it will be
|
||||||
|
based on backend online mode.
|
||||||
- ```_u```: username to use in backend connection
|
- ```_u```: username to use in backend connection
|
||||||
- ```via.example.com```: instance address (defined in config)
|
- ```via.example.com```: instance address (defined in config)
|
||||||
|
|
||||||
## WARNING
|
## WARNING
|
||||||
|
|
||||||
- VIAaaS may trigger anti-cheats, due to block, item, movement and other differences between versions. USE AT OWN RISK
|
- VIAaaS may trigger anti-cheats, due to block, item, movement and other differences between versions. USE AT OWN RISK
|
||||||
- Take care of browser local storage. Check for XSS vulnerabilities on your domain.
|
- Take care of browser local storage. Check for XSS vulnerabilities on your domain.
|
||||||
- Check the security of CORS proxy, it will intermediate Mojang API calls.
|
- Check the security of CORS proxy, it will intermediate Mojang API calls.
|
||||||
- Mojang may lock your account when API is called from a suspect IP address
|
- Mojang may lock your account when API is called from a suspect IP address
|
||||||
|
|
||||||
## FAQ
|
## FAQ
|
||||||
|
|
||||||
### Accounts
|
### Accounts
|
||||||
|
|
||||||
My Microsoft account <18 years old is not able to log in, it's giving XSTS error:
|
My Microsoft account <18 years old is not able to log in, it's giving XSTS error:
|
||||||
|
|
||||||
- Add your account to a family (see https://wiki.vg/Microsoft_Authentication_Scheme#Authenticate_with_XSTS)
|
- Add your account to a family (see https://wiki.vg/Microsoft_Authentication_Scheme#Authenticate_with_XSTS)
|
||||||
|
|
||||||
Why a online webpage for online mode?:
|
Why a online webpage for online mode?:
|
||||||
- It's easier to maintain in that way, because providing login via chat requires encoding and decoding more packets which change through versions.
|
|
||||||
|
- It's easier to maintain in that way, because providing login via chat requires encoding and decoding more packets
|
||||||
|
which change through versions.
|
||||||
- It allows your account password and token to be kept with you.
|
- It allows your account password and token to be kept with you.
|
||||||
|
|
||||||
How to use Microsoft Account?:
|
How to use Microsoft Account?:
|
||||||
- If you are using a public VIAaaS instance, use this page https://viaversion.github.io/VIAaaS/ and configure the WebSocket address.
|
|
||||||
|
- If you are using a public VIAaaS instance, use this page https://viaversion.github.io/VIAaaS/ and configure the
|
||||||
|
WebSocket address.
|
||||||
|
|
||||||
### Connection
|
### Connection
|
||||||
|
|
||||||
How to use IPv6?:
|
How to use IPv6?:
|
||||||
|
|
||||||
- When listening to 0.0.0.0, it should listen on IPv6 too.
|
- When listening to 0.0.0.0, it should listen on IPv6 too.
|
||||||
- To use IPv6 in backend address, you need to use a instance with IPv6 connectivity. The hostname parser currently doesn't support
|
- To use IPv6 in backend address, you need to use a instance with IPv6 connectivity. The hostname parser currently
|
||||||
direct IPv6, but you can use a DNS name with https://sslip.io/
|
doesn't support direct IPv6, but you can use a DNS name with https://sslip.io/
|
||||||
|
|
||||||
I'm getting a DNS error/"Unknown host" while connecting to (...).localhost
|
I'm getting a DNS error/"Unknown host" while connecting to (...).localhost
|
||||||
|
|
||||||
- Try configuring via-127-0-0-1.nip.io as hostname suffix
|
- Try configuring via-127-0-0-1.nip.io as hostname suffix
|
||||||
|
|
||||||
How to use with Geyser?
|
How to use with Geyser?
|
||||||
|
|
||||||
- Currently you need to set the parameters (at least the hostname) in Geyser's `address` field:
|
- Currently you need to set the parameters (at least the hostname) in Geyser's `address` field:
|
||||||
```yml
|
```yml
|
||||||
remote:
|
remote:
|
||||||
# The IP address of the remote (Java Edition) server
|
# The IP address of the remote (Java Edition) server
|
||||||
address: 2b2t.org._v1_12_2.via.localhost
|
address: 2b2t.org._v1_12_2.via.localhost
|
||||||
```
|
```
|
||||||
- If you are using a public GeyserConnect instance: connect to a publicly available VIAaaS instance, like ```mc.example.com.via.example.net``` as a Java Edition server.
|
- If you are using a public GeyserConnect instance: connect to a publicly available VIAaaS instance,
|
||||||
|
like ```mc.example.com.via.example.net``` as a Java Edition server.
|
||||||
|
|
||||||
Can I use it to connect to .onion Minecraft hidden servers?
|
Can I use it to connect to .onion Minecraft hidden servers?
|
||||||
- You can use .onion addresses if the instance is proxying the backend connections to TOR.
|
|
||||||
Note that VIAaaS may log your requests.
|
- You can use .onion addresses if the instance is proxying the backend connections to TOR. Note that VIAaaS may log your
|
||||||
|
requests.
|
||||||
|
|
||||||
Can you support more versions?
|
Can you support more versions?
|
||||||
|
|
||||||
- See [DirtMultiVersion](https://github.com/DirtPowered/DirtMultiversion)
|
- See [DirtMultiVersion](https://github.com/DirtPowered/DirtMultiversion)
|
||||||
|
@ -102,9 +102,11 @@ tasks {
|
|||||||
|
|
||||||
tasks.named<ProcessResources>("processResources") {
|
tasks.named<ProcessResources>("processResources") {
|
||||||
filesMatching("viaaas_info.json") {
|
filesMatching("viaaas_info.json") {
|
||||||
filter<org.apache.tools.ant.filters.ReplaceTokens>("tokens" to mapOf(
|
filter<org.apache.tools.ant.filters.ReplaceTokens>(
|
||||||
|
"tokens" to mapOf(
|
||||||
"version" to project.property("version")
|
"version" to project.property("version")
|
||||||
))
|
)
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1 +1 @@
|
|||||||
<meta http-equiv="refresh" content="0; url=https://viaversion.github.io/VIAaaS/src/main/resources/web/">
|
<meta content="0; url=https://viaversion.github.io/VIAaaS/src/main/resources/web/" http-equiv="refresh">
|
||||||
|
@ -7,14 +7,14 @@ import com.google.common.primitives.Ints
|
|||||||
import com.google.gson.JsonObject
|
import com.google.gson.JsonObject
|
||||||
import com.viaversion.aas.config.VIAaaSConfig
|
import com.viaversion.aas.config.VIAaaSConfig
|
||||||
import com.viaversion.aas.util.StacklessException
|
import com.viaversion.aas.util.StacklessException
|
||||||
|
import com.viaversion.viaversion.api.protocol.version.ProtocolVersion
|
||||||
|
import com.viaversion.viaversion.api.type.Type
|
||||||
import io.ktor.client.request.*
|
import io.ktor.client.request.*
|
||||||
import io.netty.buffer.ByteBuf
|
import io.netty.buffer.ByteBuf
|
||||||
import io.netty.channel.Channel
|
import io.netty.channel.Channel
|
||||||
import io.netty.channel.ChannelFutureListener
|
import io.netty.channel.ChannelFutureListener
|
||||||
import io.netty.handler.codec.DecoderException
|
import io.netty.handler.codec.DecoderException
|
||||||
import org.slf4j.LoggerFactory
|
import org.slf4j.LoggerFactory
|
||||||
import com.viaversion.viaversion.api.protocol.version.ProtocolVersion
|
|
||||||
import com.viaversion.viaversion.api.type.Type
|
|
||||||
import java.math.BigInteger
|
import java.math.BigInteger
|
||||||
import java.net.InetAddress
|
import java.net.InetAddress
|
||||||
import java.net.InetSocketAddress
|
import java.net.InetSocketAddress
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
package com.viaversion.aas
|
package com.viaversion.aas
|
||||||
|
|
||||||
import com.google.gson.JsonObject
|
|
||||||
import com.google.gson.JsonParser
|
import com.google.gson.JsonParser
|
||||||
import com.viaversion.aas.command.VIAaaSConsole
|
import com.viaversion.aas.command.VIAaaSConsole
|
||||||
import com.viaversion.aas.command.ViaAspirinCommand
|
import com.viaversion.aas.command.ViaAspirinCommand
|
||||||
@ -11,6 +10,10 @@ import com.viaversion.aas.platform.*
|
|||||||
import com.viaversion.aas.protocol.registerAspirinProtocols
|
import com.viaversion.aas.protocol.registerAspirinProtocols
|
||||||
import com.viaversion.aas.web.ViaWebApp
|
import com.viaversion.aas.web.ViaWebApp
|
||||||
import com.viaversion.aas.web.WebDashboardServer
|
import com.viaversion.aas.web.WebDashboardServer
|
||||||
|
import com.viaversion.viaversion.ViaManagerImpl
|
||||||
|
import com.viaversion.viaversion.api.Via
|
||||||
|
import com.viaversion.viaversion.api.data.MappingDataLoader
|
||||||
|
import com.viaversion.viaversion.api.protocol.version.ProtocolVersion
|
||||||
import de.gerrygames.viarewind.api.ViaRewindConfigImpl
|
import de.gerrygames.viarewind.api.ViaRewindConfigImpl
|
||||||
import io.ktor.application.*
|
import io.ktor.application.*
|
||||||
import io.ktor.client.*
|
import io.ktor.client.*
|
||||||
@ -37,15 +40,9 @@ import io.netty.channel.socket.nio.NioSocketChannel
|
|||||||
import io.netty.util.concurrent.Future
|
import io.netty.util.concurrent.Future
|
||||||
import org.apache.logging.log4j.Level
|
import org.apache.logging.log4j.Level
|
||||||
import org.apache.logging.log4j.io.IoBuilder
|
import org.apache.logging.log4j.io.IoBuilder
|
||||||
import com.viaversion.viaversion.ViaManagerImpl
|
|
||||||
import com.viaversion.viaversion.api.Via
|
|
||||||
import com.viaversion.viaversion.api.data.MappingDataLoader
|
|
||||||
import com.viaversion.viaversion.api.protocol.version.ProtocolVersion
|
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.net.InetAddress
|
import java.net.InetAddress
|
||||||
import java.security.KeyPairGenerator
|
import java.security.KeyPairGenerator
|
||||||
import java.security.SecureRandom
|
|
||||||
import java.util.*
|
|
||||||
import java.util.concurrent.CompletableFuture
|
import java.util.concurrent.CompletableFuture
|
||||||
|
|
||||||
val viaaasVer = JsonParser.parseString(
|
val viaaasVer = JsonParser.parseString(
|
||||||
|
@ -41,20 +41,20 @@ class VIAaaSAddress {
|
|||||||
|
|
||||||
fun parseOption(part: String): Boolean {
|
fun parseOption(part: String): Boolean {
|
||||||
val option = when {
|
val option = when {
|
||||||
part.length < 2 -> null
|
part.length < 2 -> null
|
||||||
part.startsWith("_") -> part[1]
|
part.startsWith("_") -> part[1]
|
||||||
part[1] == '_' -> part[0]
|
part[1] == '_' -> part[0]
|
||||||
else -> null
|
else -> null
|
||||||
}?.toString()
|
}?.toString()
|
||||||
if (option != null) {
|
if (option != null) {
|
||||||
val arg = part.substring(2)
|
val arg = part.substring(2)
|
||||||
when (option.toLowerCase(Locale.ROOT)) {
|
when (option.toLowerCase(Locale.ROOT)) {
|
||||||
"p" -> port = arg.toInt()
|
"p" -> port = arg.toInt()
|
||||||
"o" -> online = when {
|
"o" -> online = when {
|
||||||
arg.startsWith("t", ignoreCase = true) -> true
|
arg.startsWith("t", ignoreCase = true) -> true
|
||||||
arg.startsWith("f", ignoreCase = true) -> false
|
arg.startsWith("f", ignoreCase = true) -> false
|
||||||
else -> null
|
else -> null
|
||||||
}
|
}
|
||||||
"v" -> parseProtocol(arg)
|
"v" -> parseProtocol(arg)
|
||||||
"u" -> {
|
"u" -> {
|
||||||
if (arg.length > 16) throw StacklessException("Invalid username")
|
if (arg.length > 16) throw StacklessException("Invalid username")
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
package com.viaversion.aas.codec
|
package com.viaversion.aas.codec
|
||||||
|
|
||||||
|
import com.viaversion.viaversion.api.type.Type
|
||||||
import io.netty.buffer.ByteBuf
|
import io.netty.buffer.ByteBuf
|
||||||
import io.netty.channel.ChannelHandlerContext
|
import io.netty.channel.ChannelHandlerContext
|
||||||
import io.netty.handler.codec.DecoderException
|
import io.netty.handler.codec.DecoderException
|
||||||
import io.netty.handler.codec.MessageToMessageCodec
|
import io.netty.handler.codec.MessageToMessageCodec
|
||||||
import com.viaversion.viaversion.api.type.Type
|
|
||||||
import java.util.zip.Deflater
|
import java.util.zip.Deflater
|
||||||
import java.util.zip.Inflater
|
import java.util.zip.Inflater
|
||||||
|
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
package com.viaversion.aas.codec
|
package com.viaversion.aas.codec
|
||||||
|
|
||||||
import com.viaversion.aas.badLength
|
import com.viaversion.aas.badLength
|
||||||
|
import com.viaversion.viaversion.api.type.Type
|
||||||
|
import com.viaversion.viaversion.exception.CancelDecoderException
|
||||||
import io.netty.buffer.ByteBuf
|
import io.netty.buffer.ByteBuf
|
||||||
import io.netty.channel.ChannelHandlerContext
|
import io.netty.channel.ChannelHandlerContext
|
||||||
import io.netty.handler.codec.ByteToMessageCodec
|
import io.netty.handler.codec.ByteToMessageCodec
|
||||||
import com.viaversion.viaversion.api.type.Type
|
|
||||||
import com.viaversion.viaversion.exception.CancelDecoderException
|
|
||||||
|
|
||||||
class FrameCodec : ByteToMessageCodec<ByteBuf>() {
|
class FrameCodec : ByteToMessageCodec<ByteBuf>() {
|
||||||
override fun decode(ctx: ChannelHandlerContext, input: ByteBuf, out: MutableList<Any>) {
|
override fun decode(ctx: ChannelHandlerContext, input: ByteBuf, out: MutableList<Any>) {
|
||||||
|
@ -4,11 +4,12 @@ import com.viaversion.aas.handler.MinecraftHandler
|
|||||||
import com.viaversion.aas.packet.Packet
|
import com.viaversion.aas.packet.Packet
|
||||||
import com.viaversion.aas.packet.PacketRegistry
|
import com.viaversion.aas.packet.PacketRegistry
|
||||||
import com.viaversion.aas.util.StacklessException
|
import com.viaversion.aas.util.StacklessException
|
||||||
|
import com.viaversion.viaversion.api.protocol.packet.Direction
|
||||||
|
import com.viaversion.viaversion.exception.CancelEncoderException
|
||||||
import io.netty.buffer.ByteBuf
|
import io.netty.buffer.ByteBuf
|
||||||
import io.netty.buffer.ByteBufAllocator
|
import io.netty.buffer.ByteBufAllocator
|
||||||
import io.netty.channel.ChannelHandlerContext
|
import io.netty.channel.ChannelHandlerContext
|
||||||
import io.netty.handler.codec.MessageToMessageCodec
|
import io.netty.handler.codec.MessageToMessageCodec
|
||||||
import com.viaversion.viaversion.exception.CancelEncoderException
|
|
||||||
|
|
||||||
class MinecraftCodec : MessageToMessageCodec<ByteBuf, Packet>() {
|
class MinecraftCodec : MessageToMessageCodec<ByteBuf, Packet>() {
|
||||||
override fun encode(ctx: ChannelHandlerContext, msg: Packet, out: MutableList<Any>) {
|
override fun encode(ctx: ChannelHandlerContext, msg: Packet, out: MutableList<Any>) {
|
||||||
@ -16,7 +17,12 @@ class MinecraftCodec : MessageToMessageCodec<ByteBuf, Packet>() {
|
|||||||
val buf = ByteBufAllocator.DEFAULT.buffer()
|
val buf = ByteBufAllocator.DEFAULT.buffer()
|
||||||
try {
|
try {
|
||||||
val handler = ctx.pipeline().get(MinecraftHandler::class.java)
|
val handler = ctx.pipeline().get(MinecraftHandler::class.java)
|
||||||
PacketRegistry.encode(msg, buf, handler.data.frontVer!!, serverBound = !handler.frontEnd)
|
PacketRegistry.encode(
|
||||||
|
msg,
|
||||||
|
buf,
|
||||||
|
handler.data.frontVer!!,
|
||||||
|
if (handler.frontEnd) Direction.CLIENTBOUND else Direction.SERVERBOUND
|
||||||
|
)
|
||||||
out.add(buf.retain())
|
out.add(buf.retain())
|
||||||
} finally {
|
} finally {
|
||||||
buf.release()
|
buf.release()
|
||||||
@ -30,7 +36,8 @@ class MinecraftCodec : MessageToMessageCodec<ByteBuf, Packet>() {
|
|||||||
PacketRegistry.decode(
|
PacketRegistry.decode(
|
||||||
msg,
|
msg,
|
||||||
handler.data.frontVer ?: 0,
|
handler.data.frontVer ?: 0,
|
||||||
handler.data.state.state, handler.frontEnd
|
handler.data.state.state,
|
||||||
|
if (handler.frontEnd) Direction.SERVERBOUND else Direction.CLIENTBOUND
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
if (msg.isReadable) throw StacklessException("Remaining bytes!!!")
|
if (msg.isReadable) throw StacklessException("Remaining bytes!!!")
|
||||||
|
@ -2,12 +2,12 @@ package com.viaversion.aas.command
|
|||||||
|
|
||||||
import com.viaversion.aas.command.sub.StopSubCommand
|
import com.viaversion.aas.command.sub.StopSubCommand
|
||||||
import com.viaversion.aas.serverFinishing
|
import com.viaversion.aas.serverFinishing
|
||||||
|
import com.viaversion.viaversion.api.command.ViaCommandSender
|
||||||
import net.minecrell.terminalconsole.SimpleTerminalConsole
|
import net.minecrell.terminalconsole.SimpleTerminalConsole
|
||||||
import org.jline.reader.Candidate
|
import org.jline.reader.Candidate
|
||||||
import org.jline.reader.LineReader
|
import org.jline.reader.LineReader
|
||||||
import org.jline.reader.LineReaderBuilder
|
import org.jline.reader.LineReaderBuilder
|
||||||
import org.slf4j.LoggerFactory
|
import org.slf4j.LoggerFactory
|
||||||
import com.viaversion.viaversion.api.command.ViaCommandSender
|
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
object VIAaaSConsole : SimpleTerminalConsole(), ViaCommandSender {
|
object VIAaaSConsole : SimpleTerminalConsole(), ViaCommandSender {
|
||||||
|
@ -4,7 +4,7 @@ import com.viaversion.aas.config.VIAaaSConfig
|
|||||||
import com.viaversion.viaversion.api.command.ViaCommandSender
|
import com.viaversion.viaversion.api.command.ViaCommandSender
|
||||||
import com.viaversion.viaversion.api.command.ViaSubCommand
|
import com.viaversion.viaversion.api.command.ViaSubCommand
|
||||||
|
|
||||||
object AspirinReloadSubCommand: ViaSubCommand() {
|
object AspirinReloadSubCommand : ViaSubCommand() {
|
||||||
override fun name() = "aasreload"
|
override fun name() = "aasreload"
|
||||||
override fun description() = "Reloads VIAaaS config"
|
override fun description() = "Reloads VIAaaS config"
|
||||||
|
|
||||||
|
@ -3,11 +3,11 @@ package com.viaversion.aas.handler
|
|||||||
import com.viaversion.aas.codec.FrameCodec
|
import com.viaversion.aas.codec.FrameCodec
|
||||||
import com.viaversion.aas.codec.MinecraftCodec
|
import com.viaversion.aas.codec.MinecraftCodec
|
||||||
import com.viaversion.aas.handler.autoprotocol.ProtocolDetectorHandler
|
import com.viaversion.aas.handler.autoprotocol.ProtocolDetectorHandler
|
||||||
|
import com.viaversion.viaversion.connection.UserConnectionImpl
|
||||||
|
import com.viaversion.viaversion.protocol.ProtocolPipelineImpl
|
||||||
import io.netty.channel.Channel
|
import io.netty.channel.Channel
|
||||||
import io.netty.channel.ChannelInitializer
|
import io.netty.channel.ChannelInitializer
|
||||||
import io.netty.handler.timeout.ReadTimeoutHandler
|
import io.netty.handler.timeout.ReadTimeoutHandler
|
||||||
import com.viaversion.viaversion.connection.UserConnectionImpl
|
|
||||||
import com.viaversion.viaversion.protocol.ProtocolPipelineImpl
|
|
||||||
import java.util.concurrent.TimeUnit
|
import java.util.concurrent.TimeUnit
|
||||||
|
|
||||||
class BackEndInit(val connectionData: ConnectionData) : ChannelInitializer<Channel>() {
|
class BackEndInit(val connectionData: ConnectionData) : ChannelInitializer<Channel>() {
|
||||||
|
@ -3,11 +3,11 @@ package com.viaversion.aas.handler
|
|||||||
import com.viaversion.aas.mcLogger
|
import com.viaversion.aas.mcLogger
|
||||||
import com.viaversion.aas.packet.Packet
|
import com.viaversion.aas.packet.Packet
|
||||||
import com.viaversion.aas.setAutoRead
|
import com.viaversion.aas.setAutoRead
|
||||||
|
import com.viaversion.viaversion.exception.CancelCodecException
|
||||||
import io.netty.channel.Channel
|
import io.netty.channel.Channel
|
||||||
import io.netty.channel.ChannelHandlerContext
|
import io.netty.channel.ChannelHandlerContext
|
||||||
import io.netty.channel.SimpleChannelInboundHandler
|
import io.netty.channel.SimpleChannelInboundHandler
|
||||||
import io.netty.handler.proxy.Socks5ProxyHandler
|
import io.netty.handler.proxy.Socks5ProxyHandler
|
||||||
import com.viaversion.viaversion.exception.CancelCodecException
|
|
||||||
import java.net.SocketAddress
|
import java.net.SocketAddress
|
||||||
import java.nio.channels.ClosedChannelException
|
import java.nio.channels.ClosedChannelException
|
||||||
|
|
||||||
|
@ -3,9 +3,9 @@ package com.viaversion.aas.handler
|
|||||||
import com.viaversion.aas.config.VIAaaSConfig
|
import com.viaversion.aas.config.VIAaaSConfig
|
||||||
import com.viaversion.aas.packet.Packet
|
import com.viaversion.aas.packet.Packet
|
||||||
import com.viaversion.aas.send
|
import com.viaversion.aas.send
|
||||||
|
import com.viaversion.viaversion.api.protocol.version.ProtocolVersion
|
||||||
import io.netty.channel.ChannelPipeline
|
import io.netty.channel.ChannelPipeline
|
||||||
import io.netty.handler.proxy.Socks5ProxyHandler
|
import io.netty.handler.proxy.Socks5ProxyHandler
|
||||||
import com.viaversion.viaversion.api.protocol.version.ProtocolVersion
|
|
||||||
import java.net.InetSocketAddress
|
import java.net.InetSocketAddress
|
||||||
|
|
||||||
fun forward(handler: MinecraftHandler, packet: Packet, flush: Boolean = false) {
|
fun forward(handler: MinecraftHandler, packet: Packet, flush: Boolean = false) {
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
package com.viaversion.aas.handler
|
package com.viaversion.aas.handler
|
||||||
|
|
||||||
import io.netty.buffer.ByteBuf
|
|
||||||
import io.netty.channel.ChannelHandlerContext
|
|
||||||
import io.netty.handler.codec.MessageToMessageCodec
|
|
||||||
import com.viaversion.viaversion.api.connection.UserConnection
|
import com.viaversion.viaversion.api.connection.UserConnection
|
||||||
import com.viaversion.viaversion.exception.CancelDecoderException
|
import com.viaversion.viaversion.exception.CancelDecoderException
|
||||||
import com.viaversion.viaversion.exception.CancelEncoderException
|
import com.viaversion.viaversion.exception.CancelEncoderException
|
||||||
|
import io.netty.buffer.ByteBuf
|
||||||
|
import io.netty.channel.ChannelHandlerContext
|
||||||
|
import io.netty.handler.codec.MessageToMessageCodec
|
||||||
|
|
||||||
class ViaCodec(val info: UserConnection) : MessageToMessageCodec<ByteBuf, ByteBuf>() {
|
class ViaCodec(val info: UserConnection) : MessageToMessageCodec<ByteBuf, ByteBuf>() {
|
||||||
override fun decode(ctx: ChannelHandlerContext, bytebuf: ByteBuf, out: MutableList<Any>) {
|
override fun decode(ctx: ChannelHandlerContext, bytebuf: ByteBuf, out: MutableList<Any>) {
|
||||||
|
@ -1,17 +1,16 @@
|
|||||||
package com.viaversion.aas.handler.autoprotocol
|
package com.viaversion.aas.handler.autoprotocol
|
||||||
|
|
||||||
|
import com.google.gson.JsonParser
|
||||||
import com.viaversion.aas.handler.MinecraftHandler
|
import com.viaversion.aas.handler.MinecraftHandler
|
||||||
import com.viaversion.aas.handler.state.MinecraftConnectionState
|
import com.viaversion.aas.handler.state.MinecraftConnectionState
|
||||||
import com.viaversion.aas.mcLogger
|
import com.viaversion.aas.mcLogger
|
||||||
import com.viaversion.aas.packet.Packet
|
import com.viaversion.aas.packet.Packet
|
||||||
import com.viaversion.aas.packet.status.StatusResponse
|
import com.viaversion.aas.packet.status.StatusResponse
|
||||||
import com.viaversion.aas.parseProtocol
|
import com.viaversion.aas.parseProtocol
|
||||||
import com.google.gson.JsonParser
|
|
||||||
import com.viaversion.aas.util.StacklessException
|
import com.viaversion.aas.util.StacklessException
|
||||||
import io.netty.channel.ChannelHandlerContext
|
|
||||||
import com.viaversion.viaversion.api.protocol.version.ProtocolVersion
|
|
||||||
import com.viaversion.viaversion.api.protocol.packet.State
|
import com.viaversion.viaversion.api.protocol.packet.State
|
||||||
import java.nio.channels.ClosedChannelException
|
import com.viaversion.viaversion.api.protocol.version.ProtocolVersion
|
||||||
|
import io.netty.channel.ChannelHandlerContext
|
||||||
import java.util.concurrent.CompletableFuture
|
import java.util.concurrent.CompletableFuture
|
||||||
|
|
||||||
class ProtocolDetectionState(val future: CompletableFuture<ProtocolVersion>) : MinecraftConnectionState {
|
class ProtocolDetectionState(val future: CompletableFuture<ProtocolVersion>) : MinecraftConnectionState {
|
||||||
@ -22,7 +21,7 @@ class ProtocolDetectionState(val future: CompletableFuture<ProtocolVersion>) : M
|
|||||||
handler.data.frontChannel.close()
|
handler.data.frontChannel.close()
|
||||||
if (packet !is StatusResponse) throw StacklessException("unexpected packet")
|
if (packet !is StatusResponse) throw StacklessException("unexpected packet")
|
||||||
val ver = JsonParser.parseString(packet.json).asJsonObject
|
val ver = JsonParser.parseString(packet.json).asJsonObject
|
||||||
.getAsJsonObject("version").get("protocol").asInt.parseProtocol()
|
.getAsJsonObject("version").get("protocol").asInt.parseProtocol()
|
||||||
future.complete(ver)
|
future.complete(ver)
|
||||||
mcLogger.info("A.D.: ${handler.endRemoteAddress} $ver")
|
mcLogger.info("A.D.: ${handler.endRemoteAddress} $ver")
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
package com.viaversion.aas.handler.autoprotocol
|
package com.viaversion.aas.handler.autoprotocol
|
||||||
|
|
||||||
|
import com.google.common.cache.CacheBuilder
|
||||||
|
import com.google.common.cache.CacheLoader
|
||||||
import com.viaversion.aas.channelSocketFactory
|
import com.viaversion.aas.channelSocketFactory
|
||||||
import com.viaversion.aas.childLoop
|
import com.viaversion.aas.childLoop
|
||||||
import com.viaversion.aas.codec.FrameCodec
|
import com.viaversion.aas.codec.FrameCodec
|
||||||
@ -11,8 +13,8 @@ import com.viaversion.aas.mcLogger
|
|||||||
import com.viaversion.aas.packet.handshake.Handshake
|
import com.viaversion.aas.packet.handshake.Handshake
|
||||||
import com.viaversion.aas.packet.status.StatusRequest
|
import com.viaversion.aas.packet.status.StatusRequest
|
||||||
import com.viaversion.aas.send
|
import com.viaversion.aas.send
|
||||||
import com.google.common.cache.CacheBuilder
|
import com.viaversion.viaversion.api.protocol.packet.State
|
||||||
import com.google.common.cache.CacheLoader
|
import com.viaversion.viaversion.api.protocol.version.ProtocolVersion
|
||||||
import io.netty.bootstrap.Bootstrap
|
import io.netty.bootstrap.Bootstrap
|
||||||
import io.netty.channel.Channel
|
import io.netty.channel.Channel
|
||||||
import io.netty.channel.ChannelFuture
|
import io.netty.channel.ChannelFuture
|
||||||
@ -21,8 +23,6 @@ import io.netty.channel.ChannelOption
|
|||||||
import io.netty.handler.timeout.ReadTimeoutHandler
|
import io.netty.handler.timeout.ReadTimeoutHandler
|
||||||
import io.netty.resolver.NoopAddressResolverGroup
|
import io.netty.resolver.NoopAddressResolverGroup
|
||||||
import io.netty.util.concurrent.Future
|
import io.netty.util.concurrent.Future
|
||||||
import com.viaversion.viaversion.api.protocol.version.ProtocolVersion
|
|
||||||
import com.viaversion.viaversion.api.protocol.packet.State
|
|
||||||
import java.net.InetSocketAddress
|
import java.net.InetSocketAddress
|
||||||
import java.util.concurrent.CompletableFuture
|
import java.util.concurrent.CompletableFuture
|
||||||
import java.util.concurrent.ExecutionException
|
import java.util.concurrent.ExecutionException
|
||||||
|
@ -3,12 +3,11 @@ package com.viaversion.aas.handler.autoprotocol
|
|||||||
import com.viaversion.aas.handler.ConnectionData
|
import com.viaversion.aas.handler.ConnectionData
|
||||||
import com.viaversion.aas.handler.MinecraftHandler
|
import com.viaversion.aas.handler.MinecraftHandler
|
||||||
import com.viaversion.aas.mcLogger
|
import com.viaversion.aas.mcLogger
|
||||||
|
import io.netty.channel.ChannelDuplexHandler
|
||||||
import io.netty.channel.ChannelHandlerContext
|
import io.netty.channel.ChannelHandlerContext
|
||||||
import io.netty.channel.ChannelPromise
|
import io.netty.channel.ChannelPromise
|
||||||
import java.net.InetSocketAddress
|
import java.net.InetSocketAddress
|
||||||
import java.util.concurrent.TimeUnit
|
import java.util.concurrent.TimeUnit
|
||||||
import io.netty.channel.ChannelDuplexHandler
|
|
||||||
import java.lang.Exception
|
|
||||||
import java.util.function.Consumer
|
import java.util.function.Consumer
|
||||||
|
|
||||||
// https://github.com/ViaVersion/ViaFabric/blob/mc-1.16/src/main/java/com/github/creeper123123321/viafabric/handler/clientside/ProtocolDetectionHandler.java
|
// https://github.com/ViaVersion/ViaFabric/blob/mc-1.16/src/main/java/com/github/creeper123123321/viafabric/handler/clientside/ProtocolDetectionHandler.java
|
||||||
@ -28,15 +27,15 @@ class ProtocolDetectorHandler(val connectionData: ConnectionData) : ChannelDuple
|
|||||||
ctx.pipeline().remove(this)
|
ctx.pipeline().remove(this)
|
||||||
}, 10, TimeUnit.SECONDS)
|
}, 10, TimeUnit.SECONDS)
|
||||||
ProtocolDetector.detectVersion(address).whenComplete { protocol, _ ->
|
ProtocolDetector.detectVersion(address).whenComplete { protocol, _ ->
|
||||||
if (protocol != null && protocol.version != -1) {
|
if (protocol != null && protocol.version != -1) {
|
||||||
connectionData.viaBackServerVer = protocol.version
|
connectionData.viaBackServerVer = protocol.version
|
||||||
} else {
|
} else {
|
||||||
connectionData.viaBackServerVer = -1 // fallback
|
connectionData.viaBackServerVer = -1 // fallback
|
||||||
}
|
|
||||||
|
|
||||||
ctx.pipeline().remove(this)
|
|
||||||
timeoutRun.cancel(false)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ctx.pipeline().remove(this)
|
||||||
|
timeoutRun.cancel(false)
|
||||||
|
}
|
||||||
// Let's cache it before we need it
|
// Let's cache it before we need it
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,18 +1,18 @@
|
|||||||
package com.viaversion.aas.handler.state
|
package com.viaversion.aas.handler.state
|
||||||
|
|
||||||
|
import com.google.common.cache.CacheBuilder
|
||||||
|
import com.google.common.cache.CacheLoader
|
||||||
|
import com.google.common.net.HostAndPort
|
||||||
|
import com.google.common.util.concurrent.RateLimiter
|
||||||
import com.viaversion.aas.VIAaaSAddress
|
import com.viaversion.aas.VIAaaSAddress
|
||||||
import com.viaversion.aas.config.VIAaaSConfig
|
import com.viaversion.aas.config.VIAaaSConfig
|
||||||
import com.viaversion.aas.handler.MinecraftHandler
|
import com.viaversion.aas.handler.MinecraftHandler
|
||||||
import com.viaversion.aas.mcLogger
|
import com.viaversion.aas.mcLogger
|
||||||
import com.viaversion.aas.packet.Packet
|
import com.viaversion.aas.packet.Packet
|
||||||
import com.viaversion.aas.packet.handshake.Handshake
|
import com.viaversion.aas.packet.handshake.Handshake
|
||||||
import com.google.common.cache.CacheBuilder
|
|
||||||
import com.google.common.cache.CacheLoader
|
|
||||||
import com.google.common.net.HostAndPort
|
|
||||||
import com.google.common.util.concurrent.RateLimiter
|
|
||||||
import com.viaversion.aas.util.StacklessException
|
import com.viaversion.aas.util.StacklessException
|
||||||
import io.netty.channel.ChannelHandlerContext
|
|
||||||
import com.viaversion.viaversion.api.protocol.packet.State
|
import com.viaversion.viaversion.api.protocol.packet.State
|
||||||
|
import io.netty.channel.ChannelHandlerContext
|
||||||
import java.net.InetAddress
|
import java.net.InetAddress
|
||||||
import java.net.InetSocketAddress
|
import java.net.InetSocketAddress
|
||||||
import java.util.concurrent.TimeUnit
|
import java.util.concurrent.TimeUnit
|
||||||
|
@ -10,13 +10,13 @@ import com.viaversion.aas.handler.forward
|
|||||||
import com.viaversion.aas.packet.Packet
|
import com.viaversion.aas.packet.Packet
|
||||||
import com.viaversion.aas.packet.login.*
|
import com.viaversion.aas.packet.login.*
|
||||||
import com.viaversion.aas.util.StacklessException
|
import com.viaversion.aas.util.StacklessException
|
||||||
|
import com.viaversion.viaversion.api.protocol.packet.State
|
||||||
import io.netty.channel.Channel
|
import io.netty.channel.Channel
|
||||||
import io.netty.channel.ChannelHandlerContext
|
import io.netty.channel.ChannelHandlerContext
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.GlobalScope
|
import kotlinx.coroutines.GlobalScope
|
||||||
import kotlinx.coroutines.future.await
|
import kotlinx.coroutines.future.await
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import com.viaversion.viaversion.api.protocol.packet.State
|
|
||||||
import java.util.*
|
import java.util.*
|
||||||
import java.util.concurrent.CompletableFuture
|
import java.util.concurrent.CompletableFuture
|
||||||
import javax.crypto.Cipher
|
import javax.crypto.Cipher
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
package com.viaversion.aas.handler.state
|
package com.viaversion.aas.handler.state
|
||||||
|
|
||||||
import com.viaversion.aas.packet.Packet
|
|
||||||
import com.viaversion.aas.handler.MinecraftHandler
|
import com.viaversion.aas.handler.MinecraftHandler
|
||||||
import com.viaversion.aas.mcLogger
|
import com.viaversion.aas.mcLogger
|
||||||
import io.netty.channel.ChannelHandlerContext
|
import com.viaversion.aas.packet.Packet
|
||||||
import com.viaversion.viaversion.api.protocol.packet.State
|
import com.viaversion.viaversion.api.protocol.packet.State
|
||||||
|
import io.netty.channel.ChannelHandlerContext
|
||||||
|
|
||||||
interface MinecraftConnectionState {
|
interface MinecraftConnectionState {
|
||||||
val state: State
|
val state: State
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package com.viaversion.aas.handler.state
|
package com.viaversion.aas.handler.state
|
||||||
|
|
||||||
|
import com.google.gson.JsonPrimitive
|
||||||
import com.viaversion.aas.config.VIAaaSConfig
|
import com.viaversion.aas.config.VIAaaSConfig
|
||||||
import com.viaversion.aas.handler.MinecraftHandler
|
import com.viaversion.aas.handler.MinecraftHandler
|
||||||
import com.viaversion.aas.handler.forward
|
import com.viaversion.aas.handler.forward
|
||||||
@ -10,14 +11,13 @@ import com.viaversion.aas.packet.play.Kick
|
|||||||
import com.viaversion.aas.packet.play.PluginMessage
|
import com.viaversion.aas.packet.play.PluginMessage
|
||||||
import com.viaversion.aas.parseProtocol
|
import com.viaversion.aas.parseProtocol
|
||||||
import com.viaversion.aas.readRemainingBytes
|
import com.viaversion.aas.readRemainingBytes
|
||||||
import com.viaversion.aas.writeFlushClose
|
|
||||||
import com.google.gson.JsonPrimitive
|
|
||||||
import com.viaversion.aas.util.StacklessException
|
import com.viaversion.aas.util.StacklessException
|
||||||
|
import com.viaversion.aas.writeFlushClose
|
||||||
|
import com.viaversion.viaversion.api.protocol.packet.State
|
||||||
|
import com.viaversion.viaversion.api.type.Type
|
||||||
import io.netty.buffer.ByteBufAllocator
|
import io.netty.buffer.ByteBufAllocator
|
||||||
import io.netty.buffer.Unpooled
|
import io.netty.buffer.Unpooled
|
||||||
import io.netty.channel.ChannelHandlerContext
|
import io.netty.channel.ChannelHandlerContext
|
||||||
import com.viaversion.viaversion.api.type.Type
|
|
||||||
import com.viaversion.viaversion.api.protocol.packet.State
|
|
||||||
|
|
||||||
object PlayState : MinecraftConnectionState {
|
object PlayState : MinecraftConnectionState {
|
||||||
override val state: State
|
override val state: State
|
||||||
@ -40,7 +40,8 @@ object PlayState : MinecraftConnectionState {
|
|||||||
} else {
|
} else {
|
||||||
Type.STRING.read(Unpooled.wrappedBuffer(pluginMessage.data))
|
Type.STRING.read(Unpooled.wrappedBuffer(pluginMessage.data))
|
||||||
} + " (VIAaaS C: ${handler.data.frontVer!!.parseProtocol()} S: ${
|
} + " (VIAaaS C: ${handler.data.frontVer!!.parseProtocol()} S: ${
|
||||||
handler.data.viaBackServerVer!!.parseProtocol()})"
|
handler.data.viaBackServerVer!!.parseProtocol()
|
||||||
|
})"
|
||||||
|
|
||||||
if (is1_7(handler)) {
|
if (is1_7(handler)) {
|
||||||
pluginMessage.data = brand.toByteArray(Charsets.UTF_8)
|
pluginMessage.data = brand.toByteArray(Charsets.UTF_8)
|
||||||
|
@ -1,5 +1,8 @@
|
|||||||
package com.viaversion.aas.handler.state
|
package com.viaversion.aas.handler.state
|
||||||
|
|
||||||
|
import com.google.gson.JsonArray
|
||||||
|
import com.google.gson.JsonObject
|
||||||
|
import com.google.gson.JsonParser
|
||||||
import com.viaversion.aas.config.VIAaaSConfig
|
import com.viaversion.aas.config.VIAaaSConfig
|
||||||
import com.viaversion.aas.handler.MinecraftHandler
|
import com.viaversion.aas.handler.MinecraftHandler
|
||||||
import com.viaversion.aas.handler.forward
|
import com.viaversion.aas.handler.forward
|
||||||
@ -7,14 +10,11 @@ import com.viaversion.aas.packet.Packet
|
|||||||
import com.viaversion.aas.packet.UnknownPacket
|
import com.viaversion.aas.packet.UnknownPacket
|
||||||
import com.viaversion.aas.packet.status.StatusResponse
|
import com.viaversion.aas.packet.status.StatusResponse
|
||||||
import com.viaversion.aas.parseProtocol
|
import com.viaversion.aas.parseProtocol
|
||||||
import com.viaversion.aas.writeFlushClose
|
|
||||||
import com.google.gson.JsonArray
|
|
||||||
import com.google.gson.JsonObject
|
|
||||||
import com.google.gson.JsonParser
|
|
||||||
import com.viaversion.aas.util.StacklessException
|
import com.viaversion.aas.util.StacklessException
|
||||||
import io.netty.channel.ChannelHandlerContext
|
import com.viaversion.aas.writeFlushClose
|
||||||
import com.viaversion.viaversion.api.Via
|
import com.viaversion.viaversion.api.Via
|
||||||
import com.viaversion.viaversion.api.protocol.packet.State
|
import com.viaversion.viaversion.api.protocol.packet.State
|
||||||
|
import io.netty.channel.ChannelHandlerContext
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
object StatusState : MinecraftConnectionState {
|
object StatusState : MinecraftConnectionState {
|
||||||
|
@ -8,6 +8,7 @@ import com.viaversion.aas.handler.MinecraftHandler
|
|||||||
import com.viaversion.aas.handler.forward
|
import com.viaversion.aas.handler.forward
|
||||||
import com.viaversion.aas.packet.handshake.Handshake
|
import com.viaversion.aas.packet.handshake.Handshake
|
||||||
import com.viaversion.aas.util.StacklessException
|
import com.viaversion.aas.util.StacklessException
|
||||||
|
import com.viaversion.viaversion.api.protocol.packet.State
|
||||||
import io.netty.bootstrap.Bootstrap
|
import io.netty.bootstrap.Bootstrap
|
||||||
import io.netty.channel.ChannelFuture
|
import io.netty.channel.ChannelFuture
|
||||||
import io.netty.channel.ChannelFutureListener
|
import io.netty.channel.ChannelFutureListener
|
||||||
@ -17,7 +18,6 @@ import io.netty.resolver.NoopAddressResolverGroup
|
|||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.GlobalScope
|
import kotlinx.coroutines.GlobalScope
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import com.viaversion.viaversion.api.protocol.packet.State
|
|
||||||
import java.net.Inet4Address
|
import java.net.Inet4Address
|
||||||
import java.net.InetAddress
|
import java.net.InetAddress
|
||||||
import java.net.InetSocketAddress
|
import java.net.InetSocketAddress
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package com.viaversion.aas.packet
|
package com.viaversion.aas.packet
|
||||||
|
|
||||||
|
import com.google.common.collect.Range
|
||||||
import com.viaversion.aas.packet.handshake.Handshake
|
import com.viaversion.aas.packet.handshake.Handshake
|
||||||
import com.viaversion.aas.packet.login.*
|
import com.viaversion.aas.packet.login.*
|
||||||
import com.viaversion.aas.packet.play.Kick
|
import com.viaversion.aas.packet.play.Kick
|
||||||
@ -8,91 +9,100 @@ import com.viaversion.aas.packet.status.StatusPing
|
|||||||
import com.viaversion.aas.packet.status.StatusPong
|
import com.viaversion.aas.packet.status.StatusPong
|
||||||
import com.viaversion.aas.packet.status.StatusRequest
|
import com.viaversion.aas.packet.status.StatusRequest
|
||||||
import com.viaversion.aas.packet.status.StatusResponse
|
import com.viaversion.aas.packet.status.StatusResponse
|
||||||
import com.google.common.collect.Range
|
|
||||||
import com.viaversion.aas.util.StacklessException
|
import com.viaversion.aas.util.StacklessException
|
||||||
import io.netty.buffer.ByteBuf
|
import com.viaversion.viaversion.api.protocol.packet.Direction
|
||||||
|
import com.viaversion.viaversion.api.protocol.packet.State
|
||||||
import com.viaversion.viaversion.api.protocol.version.ProtocolVersion
|
import com.viaversion.viaversion.api.protocol.version.ProtocolVersion
|
||||||
import com.viaversion.viaversion.api.type.Type
|
import com.viaversion.viaversion.api.type.Type
|
||||||
import com.viaversion.viaversion.api.protocol.packet.State
|
import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.ClientboundPackets1_13
|
||||||
|
import com.viaversion.viaversion.protocols.protocol1_14to1_13_2.ClientboundPackets1_14
|
||||||
|
import com.viaversion.viaversion.protocols.protocol1_15to1_14_4.ClientboundPackets1_15
|
||||||
|
import com.viaversion.viaversion.protocols.protocol1_16_2to1_16_1.ClientboundPackets1_16_2
|
||||||
|
import com.viaversion.viaversion.protocols.protocol1_16to1_15_2.ClientboundPackets1_16
|
||||||
|
import com.viaversion.viaversion.protocols.protocol1_17to1_16_4.ClientboundPackets1_17
|
||||||
|
import com.viaversion.viaversion.protocols.protocol1_8.ClientboundPackets1_8
|
||||||
|
import com.viaversion.viaversion.protocols.protocol1_9to1_8.ClientboundPackets1_9
|
||||||
|
import io.netty.buffer.ByteBuf
|
||||||
import java.util.function.Supplier
|
import java.util.function.Supplier
|
||||||
|
|
||||||
object PacketRegistry {
|
object PacketRegistry {
|
||||||
val entries = mutableListOf<RegistryEntry>()
|
val entries = mutableListOf<RegistryEntry>()
|
||||||
|
|
||||||
init {
|
init {
|
||||||
// Obviosly stolen from https://github.com/VelocityPowered/Velocity/blob/dev/1.1.0/proxy/src/main/java/com/velocitypowered/proxy/protocol/StateRegistry.java
|
// Obviously stolen from https://github.com/VelocityPowered/Velocity/blob/dev/1.1.0/proxy/src/main/java/com/velocitypowered/proxy/protocol/StateRegistry.java
|
||||||
register(Range.all(), State.HANDSHAKE, 0, true, ::Handshake)
|
register(State.HANDSHAKE, Direction.SERVERBOUND, ::Handshake, Range.all(), 0)
|
||||||
register(Range.all(), State.LOGIN, 0, true, ::LoginStart)
|
|
||||||
register(Range.all(), State.LOGIN, 1, true, ::CryptoResponse)
|
register(State.LOGIN, Direction.SERVERBOUND, ::LoginStart, Range.all(), 0)
|
||||||
register(Range.atLeast(ProtocolVersion.v1_13.version), State.LOGIN, 2, true, ::PluginResponse)
|
register(State.LOGIN, Direction.SERVERBOUND, ::CryptoResponse, Range.all(), 1)
|
||||||
register(Range.all(), State.LOGIN, 0, false, ::LoginDisconnect)
|
register(State.LOGIN, Direction.SERVERBOUND, ::PluginResponse, Range.atLeast(ProtocolVersion.v1_13.version), 2)
|
||||||
register(Range.all(), State.LOGIN, 1, false, ::CryptoRequest)
|
|
||||||
register(Range.all(), State.LOGIN, 2, false, ::LoginSuccess)
|
register(State.LOGIN, Direction.CLIENTBOUND, ::LoginDisconnect, Range.all(), 0)
|
||||||
register(Range.all(), State.LOGIN, 3, false, ::SetCompression)
|
register(State.LOGIN, Direction.CLIENTBOUND, ::CryptoRequest, Range.all(), 1)
|
||||||
register(Range.atLeast(ProtocolVersion.v1_13.version), State.LOGIN, 4, false, ::PluginRequest)
|
register(State.LOGIN, Direction.CLIENTBOUND, ::LoginSuccess, Range.all(), 2)
|
||||||
register(Range.all(), State.STATUS, 0, true, ::StatusRequest)
|
register(State.LOGIN, Direction.CLIENTBOUND, ::SetCompression, Range.all(), 3)
|
||||||
register(Range.all(), State.STATUS, 1, true, ::StatusPing)
|
register(State.LOGIN, Direction.CLIENTBOUND, ::PluginRequest, Range.atLeast(ProtocolVersion.v1_13.version), 4)
|
||||||
register(Range.all(), State.STATUS, 0, false, ::StatusResponse)
|
|
||||||
register(Range.all(), State.STATUS, 1, false, ::StatusPong)
|
register(State.STATUS, Direction.SERVERBOUND, ::StatusRequest, Range.all(), 0)
|
||||||
|
register(State.STATUS, Direction.SERVERBOUND, ::StatusPing, Range.all(), 1)
|
||||||
|
register(State.STATUS, Direction.CLIENTBOUND, ::StatusResponse, Range.all(), 0)
|
||||||
|
register(State.STATUS, Direction.CLIENTBOUND, ::StatusPong, Range.all(), 1)
|
||||||
|
|
||||||
|
// Play
|
||||||
register(
|
register(
|
||||||
::Kick, State.PLAY, false, mapOf(
|
State.PLAY, Direction.CLIENTBOUND, ::Kick, mapOf(
|
||||||
Range.closed(ProtocolVersion.v1_7_1.version, ProtocolVersion.v1_8.version) to 0x40,
|
ProtocolVersion.v1_7_1..ProtocolVersion.v1_8 to ClientboundPackets1_8.DISCONNECT.id,
|
||||||
Range.closed(ProtocolVersion.v1_9.version, ProtocolVersion.v1_12_2.version) to 0x1A,
|
ProtocolVersion.v1_9..ProtocolVersion.v1_12_2 to ClientboundPackets1_9.DISCONNECT.id,
|
||||||
Range.closed(ProtocolVersion.v1_13.version, ProtocolVersion.v1_13_2.version) to 0x1B,
|
ProtocolVersion.v1_13..ProtocolVersion.v1_13_2 to ClientboundPackets1_13.DISCONNECT.id,
|
||||||
Range.closed(ProtocolVersion.v1_14.version, ProtocolVersion.v1_14_4.version) to 0x1A,
|
ProtocolVersion.v1_14..ProtocolVersion.v1_14_4 to ClientboundPackets1_14.DISCONNECT.id,
|
||||||
Range.closed(ProtocolVersion.v1_15.version, ProtocolVersion.v1_15_2.version) to 0x1B,
|
ProtocolVersion.v1_15..ProtocolVersion.v1_15_2 to ClientboundPackets1_15.DISCONNECT.id,
|
||||||
Range.closed(ProtocolVersion.v1_16.version, ProtocolVersion.v1_16_1.version) to 0x1A,
|
ProtocolVersion.v1_16..ProtocolVersion.v1_16_1 to ClientboundPackets1_16.DISCONNECT.id,
|
||||||
Range.closed(ProtocolVersion.v1_16_2.version, ProtocolVersion.v1_16_4.version) to 0x19
|
ProtocolVersion.v1_16_2..ProtocolVersion.v1_16_4 to ClientboundPackets1_16_2.DISCONNECT.id,
|
||||||
|
Range.singleton(ProtocolVersion.v1_17.fullSnapshotVersion) to ClientboundPackets1_17.DISCONNECT.id
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
register(
|
register(
|
||||||
::PluginMessage, State.PLAY, true, mapOf(
|
State.PLAY, Direction.CLIENTBOUND, ::PluginMessage, mapOf(
|
||||||
Range.closed(ProtocolVersion.v1_7_1.version, ProtocolVersion.v1_8.version) to 0x17,
|
ProtocolVersion.v1_7_1..ProtocolVersion.v1_8 to ClientboundPackets1_8.PLUGIN_MESSAGE.id,
|
||||||
Range.closed(ProtocolVersion.v1_9.version, ProtocolVersion.v1_11_1.version) to 0x09,
|
ProtocolVersion.v1_9..ProtocolVersion.v1_12_2 to ClientboundPackets1_9.PLUGIN_MESSAGE.id,
|
||||||
Range.singleton(ProtocolVersion.v1_12.version) to 0x0A,
|
ProtocolVersion.v1_13..ProtocolVersion.v1_13_2 to ClientboundPackets1_13.PLUGIN_MESSAGE.id,
|
||||||
Range.closed(ProtocolVersion.v1_12_1.version, ProtocolVersion.v1_12_2.version) to 0x09,
|
ProtocolVersion.v1_14..ProtocolVersion.v1_14_4 to ClientboundPackets1_14.PLUGIN_MESSAGE.id,
|
||||||
Range.closed(ProtocolVersion.v1_13.version, ProtocolVersion.v1_13_2.version) to 0x0A,
|
ProtocolVersion.v1_15..ProtocolVersion.v1_15_2 to ClientboundPackets1_15.PLUGIN_MESSAGE.id,
|
||||||
Range.closed(ProtocolVersion.v1_14.version, ProtocolVersion.v1_16_4.version) to 0x0B
|
ProtocolVersion.v1_16..ProtocolVersion.v1_16_1 to ClientboundPackets1_16.PLUGIN_MESSAGE.id,
|
||||||
)
|
ProtocolVersion.v1_16_2..ProtocolVersion.v1_16_4 to ClientboundPackets1_16_2.PLUGIN_MESSAGE.id,
|
||||||
)
|
Range.singleton(ProtocolVersion.v1_17.fullSnapshotVersion) to ClientboundPackets1_17.PLUGIN_MESSAGE.id
|
||||||
register(
|
|
||||||
::PluginMessage, State.PLAY, false,
|
|
||||||
mapOf(
|
|
||||||
Range.closed(ProtocolVersion.v1_7_1.version, ProtocolVersion.v1_8.version) to 0x3F,
|
|
||||||
Range.closed(ProtocolVersion.v1_9.version, ProtocolVersion.v1_12_2.version) to 0x18,
|
|
||||||
Range.closed(ProtocolVersion.v1_13.version, ProtocolVersion.v1_13_2.version) to 0x19,
|
|
||||||
Range.closed(ProtocolVersion.v1_14.version, ProtocolVersion.v1_14_4.version) to 0x18,
|
|
||||||
Range.closed(ProtocolVersion.v1_15.version, ProtocolVersion.v1_15_2.version) to 0x19,
|
|
||||||
Range.closed(ProtocolVersion.v1_16.version, ProtocolVersion.v1_16_1.version) to 0x18,
|
|
||||||
Range.closed(ProtocolVersion.v1_16_2.version, ProtocolVersion.v1_16_4.version) to 0x17
|
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
operator fun ProtocolVersion.rangeTo(o: ProtocolVersion): Range<Int> {
|
||||||
|
return Range.closed(this.originalVersion, o.originalVersion)
|
||||||
|
}
|
||||||
|
|
||||||
inline fun <reified P : Packet> register(
|
inline fun <reified P : Packet> register(
|
||||||
protocol: Range<Int>,
|
|
||||||
state: State,
|
state: State,
|
||||||
id: Int,
|
direction: Direction,
|
||||||
serverBound: Boolean,
|
|
||||||
constructor: Supplier<P>
|
|
||||||
) {
|
|
||||||
entries.add(RegistryEntry(protocol, state, id, serverBound, constructor, P::class.java))
|
|
||||||
}
|
|
||||||
|
|
||||||
inline fun <reified P : Packet> register(
|
|
||||||
constructor: Supplier<P>,
|
constructor: Supplier<P>,
|
||||||
state: State,
|
idByProtocol: Map<Range<Int>, Int>,
|
||||||
serverBound: Boolean,
|
klass: Class<P> = P::class.java,
|
||||||
idByProtocol: Map<Range<Int>, Int>
|
|
||||||
) {
|
) {
|
||||||
idByProtocol.forEach { (protocol, id) -> register(protocol, state, id, serverBound, constructor) }
|
entries.add(RegistryEntry(idByProtocol, state, direction, constructor, klass))
|
||||||
|
}
|
||||||
|
|
||||||
|
inline fun <reified P : Packet> register(
|
||||||
|
state: State,
|
||||||
|
direction: Direction,
|
||||||
|
constructor: Supplier<P>,
|
||||||
|
protocol: Range<Int>,
|
||||||
|
id: Int
|
||||||
|
) {
|
||||||
|
register(constructor = constructor, direction = direction, state = state, idByProtocol = mapOf(protocol to id))
|
||||||
}
|
}
|
||||||
|
|
||||||
data class RegistryEntry(
|
data class RegistryEntry(
|
||||||
val versionRange: Range<Int>,
|
val idByVersion: Map<Range<Int>, Int>,
|
||||||
val state: State,
|
val state: State,
|
||||||
val id: Int,
|
val direction: Direction,
|
||||||
val serverBound: Boolean,
|
|
||||||
val constructor: Supplier<out Packet>,
|
val constructor: Supplier<out Packet>,
|
||||||
val packetClass: Class<out Packet>
|
val packetClass: Class<out Packet>
|
||||||
)
|
)
|
||||||
@ -101,34 +111,35 @@ object PacketRegistry {
|
|||||||
protocolVersion: Int,
|
protocolVersion: Int,
|
||||||
state: State,
|
state: State,
|
||||||
id: Int,
|
id: Int,
|
||||||
serverBound: Boolean
|
direction: Direction
|
||||||
): Supplier<out Packet>? {
|
): Supplier<out Packet>? {
|
||||||
return entries.firstOrNull {
|
return entries.firstOrNull {
|
||||||
it.serverBound == serverBound && it.state == state
|
it.direction == direction
|
||||||
&& it.versionRange.contains(protocolVersion) && it.id == id
|
&& it.state == state
|
||||||
|
&& it.idByVersion.entries.firstOrNull { it.key.contains(protocolVersion) }?.value == id
|
||||||
}?.constructor
|
}?.constructor
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getPacketId(packetClass: Class<out Packet>, protocolVersion: Int, serverBound: Boolean): Int? {
|
fun getPacketId(packetClass: Class<out Packet>, protocolVersion: Int, direction: Direction): Int? {
|
||||||
return entries.firstOrNull {
|
return entries.firstOrNull {
|
||||||
it.versionRange.contains(protocolVersion) && it.packetClass == packetClass && it.serverBound == serverBound
|
it.packetClass == packetClass && it.direction == direction
|
||||||
}?.id
|
}?.idByVersion?.entries?.firstOrNull { it.key.contains(protocolVersion) }?.value
|
||||||
}
|
}
|
||||||
|
|
||||||
fun decode(byteBuf: ByteBuf, protocolVersion: Int, state: State, serverBound: Boolean): Packet {
|
fun decode(byteBuf: ByteBuf, protocolVersion: Int, state: State, direction: Direction): Packet {
|
||||||
val packetId = Type.VAR_INT.readPrimitive(byteBuf)
|
val packetId = Type.VAR_INT.readPrimitive(byteBuf)
|
||||||
val packet =
|
val packet =
|
||||||
getPacketConstructor(protocolVersion, state, packetId, serverBound)?.get() ?: UnknownPacket(packetId)
|
getPacketConstructor(protocolVersion, state, packetId, direction)?.get() ?: UnknownPacket(packetId)
|
||||||
packet.decode(byteBuf, protocolVersion)
|
packet.decode(byteBuf, protocolVersion)
|
||||||
if (byteBuf.isReadable) throw StacklessException("Remaining bytes!")
|
if (byteBuf.isReadable) throw StacklessException("Remaining bytes!")
|
||||||
return packet
|
return packet
|
||||||
}
|
}
|
||||||
|
|
||||||
fun encode(packet: Packet, byteBuf: ByteBuf, protocolVersion: Int, serverBound: Boolean) {
|
fun encode(packet: Packet, byteBuf: ByteBuf, protocolVersion: Int, direction: Direction) {
|
||||||
val id = if (packet is UnknownPacket) {
|
val id = if (packet is UnknownPacket) {
|
||||||
packet.id
|
packet.id
|
||||||
} else {
|
} else {
|
||||||
getPacketId(packet.javaClass, protocolVersion, serverBound)!!
|
getPacketId(packet.javaClass, protocolVersion, direction)!!
|
||||||
}
|
}
|
||||||
Type.VAR_INT.writePrimitive(byteBuf, id)
|
Type.VAR_INT.writePrimitive(byteBuf, id)
|
||||||
packet.encode(byteBuf, protocolVersion)
|
packet.encode(byteBuf, protocolVersion)
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
package com.viaversion.aas.packet.handshake
|
package com.viaversion.aas.packet.handshake
|
||||||
|
|
||||||
import com.viaversion.aas.packet.Packet
|
import com.viaversion.aas.packet.Packet
|
||||||
import io.netty.buffer.ByteBuf
|
|
||||||
import com.viaversion.viaversion.api.type.Type
|
|
||||||
import com.viaversion.viaversion.api.protocol.packet.State
|
import com.viaversion.viaversion.api.protocol.packet.State
|
||||||
|
import com.viaversion.viaversion.api.type.Type
|
||||||
|
import io.netty.buffer.ByteBuf
|
||||||
import kotlin.properties.Delegates
|
import kotlin.properties.Delegates
|
||||||
|
|
||||||
class Handshake : Packet {
|
class Handshake : Packet {
|
||||||
|
@ -2,9 +2,9 @@ package com.viaversion.aas.packet.login
|
|||||||
|
|
||||||
import com.viaversion.aas.packet.Packet
|
import com.viaversion.aas.packet.Packet
|
||||||
import com.viaversion.aas.readByteArray
|
import com.viaversion.aas.readByteArray
|
||||||
import io.netty.buffer.ByteBuf
|
|
||||||
import com.viaversion.viaversion.api.protocol.version.ProtocolVersion
|
import com.viaversion.viaversion.api.protocol.version.ProtocolVersion
|
||||||
import com.viaversion.viaversion.api.type.Type
|
import com.viaversion.viaversion.api.type.Type
|
||||||
|
import io.netty.buffer.ByteBuf
|
||||||
import java.security.KeyFactory
|
import java.security.KeyFactory
|
||||||
import java.security.PublicKey
|
import java.security.PublicKey
|
||||||
import java.security.spec.X509EncodedKeySpec
|
import java.security.spec.X509EncodedKeySpec
|
||||||
|
@ -2,9 +2,9 @@ package com.viaversion.aas.packet.login
|
|||||||
|
|
||||||
import com.viaversion.aas.packet.Packet
|
import com.viaversion.aas.packet.Packet
|
||||||
import com.viaversion.aas.readByteArray
|
import com.viaversion.aas.readByteArray
|
||||||
import io.netty.buffer.ByteBuf
|
|
||||||
import com.viaversion.viaversion.api.protocol.version.ProtocolVersion
|
import com.viaversion.viaversion.api.protocol.version.ProtocolVersion
|
||||||
import com.viaversion.viaversion.api.type.Type
|
import com.viaversion.viaversion.api.type.Type
|
||||||
|
import io.netty.buffer.ByteBuf
|
||||||
|
|
||||||
class CryptoResponse : Packet {
|
class CryptoResponse : Packet {
|
||||||
lateinit var encryptedKey: ByteArray
|
lateinit var encryptedKey: ByteArray
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
package com.viaversion.aas.packet.login
|
package com.viaversion.aas.packet.login
|
||||||
|
|
||||||
import com.viaversion.aas.packet.Packet
|
import com.viaversion.aas.packet.Packet
|
||||||
import io.netty.buffer.ByteBuf
|
|
||||||
import com.viaversion.viaversion.api.type.Type
|
import com.viaversion.viaversion.api.type.Type
|
||||||
|
import io.netty.buffer.ByteBuf
|
||||||
|
|
||||||
class LoginDisconnect : Packet {
|
class LoginDisconnect : Packet {
|
||||||
lateinit var msg: String
|
lateinit var msg: String
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
package com.viaversion.aas.packet.login
|
package com.viaversion.aas.packet.login
|
||||||
|
|
||||||
import com.viaversion.aas.packet.Packet
|
import com.viaversion.aas.packet.Packet
|
||||||
import io.netty.buffer.ByteBuf
|
|
||||||
import com.viaversion.viaversion.api.type.Type
|
import com.viaversion.viaversion.api.type.Type
|
||||||
|
import io.netty.buffer.ByteBuf
|
||||||
|
|
||||||
class LoginStart : Packet {
|
class LoginStart : Packet {
|
||||||
lateinit var username: String
|
lateinit var username: String
|
||||||
|
@ -2,9 +2,9 @@ package com.viaversion.aas.packet.login
|
|||||||
|
|
||||||
import com.viaversion.aas.packet.Packet
|
import com.viaversion.aas.packet.Packet
|
||||||
import com.viaversion.aas.parseUndashedId
|
import com.viaversion.aas.parseUndashedId
|
||||||
import io.netty.buffer.ByteBuf
|
|
||||||
import com.viaversion.viaversion.api.protocol.version.ProtocolVersion
|
import com.viaversion.viaversion.api.protocol.version.ProtocolVersion
|
||||||
import com.viaversion.viaversion.api.type.Type
|
import com.viaversion.viaversion.api.type.Type
|
||||||
|
import io.netty.buffer.ByteBuf
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
class LoginSuccess : Packet {
|
class LoginSuccess : Packet {
|
||||||
|
@ -2,8 +2,8 @@ package com.viaversion.aas.packet.login
|
|||||||
|
|
||||||
import com.viaversion.aas.packet.Packet
|
import com.viaversion.aas.packet.Packet
|
||||||
import com.viaversion.aas.readRemainingBytes
|
import com.viaversion.aas.readRemainingBytes
|
||||||
import io.netty.buffer.ByteBuf
|
|
||||||
import com.viaversion.viaversion.api.type.Type
|
import com.viaversion.viaversion.api.type.Type
|
||||||
|
import io.netty.buffer.ByteBuf
|
||||||
import kotlin.properties.Delegates
|
import kotlin.properties.Delegates
|
||||||
|
|
||||||
class PluginRequest : Packet {
|
class PluginRequest : Packet {
|
||||||
|
@ -2,8 +2,8 @@ package com.viaversion.aas.packet.login
|
|||||||
|
|
||||||
import com.viaversion.aas.packet.Packet
|
import com.viaversion.aas.packet.Packet
|
||||||
import com.viaversion.aas.readRemainingBytes
|
import com.viaversion.aas.readRemainingBytes
|
||||||
import io.netty.buffer.ByteBuf
|
|
||||||
import com.viaversion.viaversion.api.type.Type
|
import com.viaversion.viaversion.api.type.Type
|
||||||
|
import io.netty.buffer.ByteBuf
|
||||||
import kotlin.properties.Delegates
|
import kotlin.properties.Delegates
|
||||||
|
|
||||||
class PluginResponse : Packet {
|
class PluginResponse : Packet {
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
package com.viaversion.aas.packet.login
|
package com.viaversion.aas.packet.login
|
||||||
|
|
||||||
import com.viaversion.aas.packet.Packet
|
import com.viaversion.aas.packet.Packet
|
||||||
import io.netty.buffer.ByteBuf
|
|
||||||
import com.viaversion.viaversion.api.type.Type
|
import com.viaversion.viaversion.api.type.Type
|
||||||
|
import io.netty.buffer.ByteBuf
|
||||||
import kotlin.properties.Delegates
|
import kotlin.properties.Delegates
|
||||||
|
|
||||||
class SetCompression : Packet {
|
class SetCompression : Packet {
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
package com.viaversion.aas.packet.play
|
package com.viaversion.aas.packet.play
|
||||||
|
|
||||||
import com.viaversion.aas.packet.Packet
|
import com.viaversion.aas.packet.Packet
|
||||||
import io.netty.buffer.ByteBuf
|
|
||||||
import com.viaversion.viaversion.api.type.Type
|
import com.viaversion.viaversion.api.type.Type
|
||||||
|
import io.netty.buffer.ByteBuf
|
||||||
|
|
||||||
class Kick : Packet {
|
class Kick : Packet {
|
||||||
lateinit var msg: String
|
lateinit var msg: String
|
||||||
|
@ -3,9 +3,9 @@ package com.viaversion.aas.packet.play
|
|||||||
import com.viaversion.aas.packet.Packet
|
import com.viaversion.aas.packet.Packet
|
||||||
import com.viaversion.aas.readByteArray
|
import com.viaversion.aas.readByteArray
|
||||||
import com.viaversion.aas.readRemainingBytes
|
import com.viaversion.aas.readRemainingBytes
|
||||||
import io.netty.buffer.ByteBuf
|
|
||||||
import com.viaversion.viaversion.api.protocol.version.ProtocolVersion
|
import com.viaversion.viaversion.api.protocol.version.ProtocolVersion
|
||||||
import com.viaversion.viaversion.api.type.Type
|
import com.viaversion.viaversion.api.type.Type
|
||||||
|
import io.netty.buffer.ByteBuf
|
||||||
|
|
||||||
class PluginMessage : Packet {
|
class PluginMessage : Packet {
|
||||||
lateinit var channel: String
|
lateinit var channel: String
|
||||||
|
@ -3,7 +3,7 @@ package com.viaversion.aas.packet.status
|
|||||||
import com.viaversion.aas.packet.Packet
|
import com.viaversion.aas.packet.Packet
|
||||||
import io.netty.buffer.ByteBuf
|
import io.netty.buffer.ByteBuf
|
||||||
|
|
||||||
class StatusRequest: Packet {
|
class StatusRequest : Packet {
|
||||||
override fun decode(byteBuf: ByteBuf, protocolVersion: Int) {
|
override fun decode(byteBuf: ByteBuf, protocolVersion: Int) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
package com.viaversion.aas.packet.status
|
package com.viaversion.aas.packet.status
|
||||||
|
|
||||||
import com.viaversion.aas.packet.Packet
|
import com.viaversion.aas.packet.Packet
|
||||||
import io.netty.buffer.ByteBuf
|
|
||||||
import com.viaversion.viaversion.api.type.Type
|
import com.viaversion.viaversion.api.type.Type
|
||||||
|
import io.netty.buffer.ByteBuf
|
||||||
|
|
||||||
class StatusResponse : Packet {
|
class StatusResponse : Packet {
|
||||||
lateinit var json: String
|
lateinit var json: String
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
package com.viaversion.aas.platform
|
package com.viaversion.aas.platform
|
||||||
|
|
||||||
import com.viaversion.viabackwards.api.ViaBackwardsPlatform
|
import com.viaversion.viabackwards.api.ViaBackwardsPlatform
|
||||||
import org.slf4j.LoggerFactory
|
|
||||||
import com.viaversion.viaversion.sponge.util.LoggerWrapper
|
import com.viaversion.viaversion.sponge.util.LoggerWrapper
|
||||||
|
import org.slf4j.LoggerFactory
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.util.logging.Logger
|
import java.util.logging.Logger
|
||||||
|
|
||||||
|
@ -1,20 +1,19 @@
|
|||||||
package com.viaversion.aas.platform
|
package com.viaversion.aas.platform
|
||||||
|
|
||||||
|
import com.google.common.util.concurrent.ThreadFactoryBuilder
|
||||||
import com.viaversion.aas.config.AspirinViaConfig
|
import com.viaversion.aas.config.AspirinViaConfig
|
||||||
import com.viaversion.aas.initFuture
|
import com.viaversion.aas.initFuture
|
||||||
import com.viaversion.aas.viaaasVer
|
import com.viaversion.aas.viaaasVer
|
||||||
import com.google.common.util.concurrent.ThreadFactoryBuilder
|
|
||||||
import io.netty.channel.DefaultEventLoop
|
|
||||||
import org.slf4j.LoggerFactory
|
|
||||||
import com.viaversion.viaversion.api.ViaAPI
|
import com.viaversion.viaversion.api.ViaAPI
|
||||||
import com.viaversion.viaversion.api.configuration.ViaVersionConfig
|
|
||||||
import com.viaversion.viaversion.api.command.ViaCommandSender
|
import com.viaversion.viaversion.api.command.ViaCommandSender
|
||||||
import com.viaversion.viaversion.api.configuration.ConfigurationProvider
|
import com.viaversion.viaversion.api.configuration.ConfigurationProvider
|
||||||
import com.viaversion.viaversion.api.platform.PlatformTask
|
import com.viaversion.viaversion.api.configuration.ViaVersionConfig
|
||||||
import com.viaversion.viaversion.api.platform.ViaPlatform
|
import com.viaversion.viaversion.api.platform.ViaPlatform
|
||||||
|
import com.viaversion.viaversion.libs.gson.JsonObject
|
||||||
import com.viaversion.viaversion.sponge.util.LoggerWrapper
|
import com.viaversion.viaversion.sponge.util.LoggerWrapper
|
||||||
import com.viaversion.viaversion.util.VersionInfo
|
import com.viaversion.viaversion.util.VersionInfo
|
||||||
import com.viaversion.viaversion.libs.gson.JsonObject
|
import io.netty.channel.DefaultEventLoop
|
||||||
|
import org.slf4j.LoggerFactory
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.util.*
|
import java.util.*
|
||||||
import java.util.concurrent.CompletableFuture
|
import java.util.concurrent.CompletableFuture
|
||||||
@ -47,7 +46,7 @@ object AspirinPlatform : ViaPlatform<UUID> {
|
|||||||
override fun getDump(): JsonObject = JsonObject()
|
override fun getDump(): JsonObject = JsonObject()
|
||||||
override fun kickPlayer(p0: UUID, p1: String): Boolean = false
|
override fun kickPlayer(p0: UUID, p1: String): Boolean = false
|
||||||
override fun getApi(): ViaAPI<UUID> = AspirinViaAPI
|
override fun getApi(): ViaAPI<UUID> = AspirinViaAPI
|
||||||
override fun getDataFolder(): File = File("viaversion")
|
override fun getDataFolder(): File = File("viaversion")
|
||||||
override fun getConf(): ViaVersionConfig = AspirinViaConfig
|
override fun getConf(): ViaVersionConfig = AspirinViaConfig
|
||||||
override fun runAsync(p0: Runnable): AspirinTask = AspirinTask(CompletableFuture.runAsync(p0, executor))
|
override fun runAsync(p0: Runnable): AspirinTask = AspirinTask(CompletableFuture.runAsync(p0, executor))
|
||||||
override fun getLogger(): Logger = LoggerWrapper(LoggerFactory.getLogger("ViaVersion"))
|
override fun getLogger(): Logger = LoggerWrapper(LoggerFactory.getLogger("ViaVersion"))
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
package com.viaversion.aas.platform
|
package com.viaversion.aas.platform
|
||||||
|
|
||||||
|
import com.viaversion.viaversion.sponge.util.LoggerWrapper
|
||||||
import de.gerrygames.viarewind.api.ViaRewindPlatform
|
import de.gerrygames.viarewind.api.ViaRewindPlatform
|
||||||
import org.slf4j.LoggerFactory
|
import org.slf4j.LoggerFactory
|
||||||
import com.viaversion.viaversion.sponge.util.LoggerWrapper
|
|
||||||
import java.util.logging.Logger
|
import java.util.logging.Logger
|
||||||
|
|
||||||
object AspirinRewind : ViaRewindPlatform {
|
object AspirinRewind : ViaRewindPlatform {
|
||||||
|
@ -8,6 +8,10 @@ import com.viaversion.viaversion.api.protocol.version.ProtocolVersion
|
|||||||
// cursed 1.7 -> 1.8 from https://github.com/Gerrygames/ClientViaVersion
|
// cursed 1.7 -> 1.8 from https://github.com/Gerrygames/ClientViaVersion
|
||||||
// + https://github.com/creeper123123321/ViaRewind/tree/17to18
|
// + https://github.com/creeper123123321/ViaRewind/tree/17to18
|
||||||
fun registerAspirinProtocols() {
|
fun registerAspirinProtocols() {
|
||||||
Via.getManager().protocolManager.registerProtocol(Protocol1_7_6to1_7_2, ProtocolVersion.v1_7_6, ProtocolVersion.v1_7_1)
|
Via.getManager().protocolManager.registerProtocol(
|
||||||
|
Protocol1_7_6to1_7_2,
|
||||||
|
ProtocolVersion.v1_7_6,
|
||||||
|
ProtocolVersion.v1_7_1
|
||||||
|
)
|
||||||
Via.getManager().protocolManager.registerProtocol(Protocol1_8To1_7_6, ProtocolVersion.v1_8, ProtocolVersion.v1_7_6)
|
Via.getManager().protocolManager.registerProtocol(Protocol1_8To1_7_6, ProtocolVersion.v1_8, ProtocolVersion.v1_7_6)
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
package com.viaversion.aas.protocol
|
package com.viaversion.aas.protocol
|
||||||
|
|
||||||
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper
|
|
||||||
import com.viaversion.viaversion.api.minecraft.Position
|
import com.viaversion.viaversion.api.minecraft.Position
|
||||||
|
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.ValueReader
|
import com.viaversion.viaversion.api.protocol.remapper.ValueReader
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.ValueTransformer
|
import com.viaversion.viaversion.api.protocol.remapper.ValueTransformer
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.ValueWriter
|
import com.viaversion.viaversion.api.protocol.remapper.ValueWriter
|
||||||
|
@ -4,7 +4,6 @@ import com.viaversion.aas.protocol.id47toid5.packets.*
|
|||||||
import com.viaversion.aas.protocol.id47toid5.storage.*
|
import com.viaversion.aas.protocol.id47toid5.storage.*
|
||||||
import com.viaversion.viaversion.api.connection.UserConnection
|
import com.viaversion.viaversion.api.connection.UserConnection
|
||||||
import com.viaversion.viaversion.api.protocol.AbstractSimpleProtocol
|
import com.viaversion.viaversion.api.protocol.AbstractSimpleProtocol
|
||||||
import java.util.*
|
|
||||||
|
|
||||||
// Based on https://github.com/Gerrygames/ClientViaVersion
|
// Based on https://github.com/Gerrygames/ClientViaVersion
|
||||||
object Protocol1_8To1_7_6 : AbstractSimpleProtocol() {
|
object Protocol1_8To1_7_6 : AbstractSimpleProtocol() {
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
package com.viaversion.aas.protocol.id47toid5.chunks
|
package com.viaversion.aas.protocol.id47toid5.chunks
|
||||||
|
|
||||||
import io.netty.buffer.ByteBuf
|
|
||||||
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper
|
|
||||||
import com.viaversion.viaversion.api.minecraft.BlockChangeRecord1_8
|
import com.viaversion.viaversion.api.minecraft.BlockChangeRecord1_8
|
||||||
|
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper
|
||||||
import com.viaversion.viaversion.api.type.Type
|
import com.viaversion.viaversion.api.type.Type
|
||||||
import com.viaversion.viaversion.api.type.types.CustomByteType
|
import com.viaversion.viaversion.api.type.types.CustomByteType
|
||||||
|
import io.netty.buffer.ByteBuf
|
||||||
import java.io.IOException
|
import java.io.IOException
|
||||||
import java.util.stream.IntStream
|
import java.util.stream.IntStream
|
||||||
import java.util.zip.DataFormatException
|
import java.util.zip.DataFormatException
|
||||||
@ -102,7 +102,8 @@ object ChunkPacketTransformer {
|
|||||||
}
|
}
|
||||||
val chunks = arrayOfNulls<Chunk1_8to1_7_6_10>(columnCount)
|
val chunks = arrayOfNulls<Chunk1_8to1_7_6_10>(columnCount)
|
||||||
(0 until columnCount).forEach {
|
(0 until columnCount).forEach {
|
||||||
chunks[it] = Chunk1_8to1_7_6_10(inflatedBuffers[it]!!, primaryBitMask[it], addBitMask[it], skyLightSent, true)
|
chunks[it] =
|
||||||
|
Chunk1_8to1_7_6_10(inflatedBuffers[it]!!, primaryBitMask[it], addBitMask[it], skyLightSent, true)
|
||||||
}
|
}
|
||||||
packetWrapper.write(Type.BOOLEAN, skyLightSent)
|
packetWrapper.write(Type.BOOLEAN, skyLightSent)
|
||||||
packetWrapper.write(Type.VAR_INT, columnCount)
|
packetWrapper.write(Type.VAR_INT, columnCount)
|
||||||
@ -133,13 +134,13 @@ object ChunkPacketTransformer {
|
|||||||
packetWrapper.write(Type.INT, chunkX)
|
packetWrapper.write(Type.INT, chunkX)
|
||||||
packetWrapper.write(Type.INT, chunkZ)
|
packetWrapper.write(Type.INT, chunkZ)
|
||||||
packetWrapper.write(Type.BLOCK_CHANGE_RECORD_ARRAY, IntStream.range(0, size)
|
packetWrapper.write(Type.BLOCK_CHANGE_RECORD_ARRAY, IntStream.range(0, size)
|
||||||
.mapToObj {
|
.mapToObj {
|
||||||
val encodedPos = (positions[it].toInt())
|
val encodedPos = (positions[it].toInt())
|
||||||
val x = encodedPos.ushr(12).and(0xF)
|
val x = encodedPos.ushr(12).and(0xF)
|
||||||
val y = encodedPos.and(0xFF)
|
val y = encodedPos.and(0xFF)
|
||||||
val z = encodedPos.ushr(8).and(0xF)
|
val z = encodedPos.ushr(8).and(0xF)
|
||||||
BlockChangeRecord1_8(x, y, z, blocks[it].toInt())
|
BlockChangeRecord1_8(x, y, z, blocks[it].toInt())
|
||||||
}
|
}
|
||||||
.toList().toTypedArray())
|
.toList().toTypedArray())
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,11 +1,10 @@
|
|||||||
package com.viaversion.aas.protocol.id47toid5.metadata
|
package com.viaversion.aas.protocol.id47toid5.metadata
|
||||||
|
|
||||||
import de.gerrygames.viarewind.protocol.protocol1_8to1_7_6_10.metadata.MetaIndex1_8to1_7_6_10
|
|
||||||
import com.viaversion.viaversion.api.Via
|
import com.viaversion.viaversion.api.Via
|
||||||
import com.viaversion.viaversion.api.minecraft.entities.Entity1_10Types
|
import com.viaversion.viaversion.api.minecraft.entities.Entity1_10Types
|
||||||
import com.viaversion.viaversion.api.minecraft.metadata.Metadata
|
import com.viaversion.viaversion.api.minecraft.metadata.Metadata
|
||||||
import com.viaversion.viaversion.api.minecraft.metadata.types.MetaType1_8
|
import com.viaversion.viaversion.api.minecraft.metadata.types.MetaType1_8
|
||||||
import java.util.*
|
import de.gerrygames.viarewind.protocol.protocol1_8to1_7_6_10.metadata.MetaIndex1_8to1_7_6_10
|
||||||
|
|
||||||
object MetadataRewriter {
|
object MetadataRewriter {
|
||||||
fun transform(type: Entity1_10Types.EntityType?, list: MutableList<Metadata>) {
|
fun transform(type: Entity1_10Types.EntityType?, list: MutableList<Metadata>) {
|
||||||
|
@ -5,13 +5,13 @@ import com.viaversion.aas.protocol.id47toid5.metadata.MetadataRewriter
|
|||||||
import com.viaversion.aas.protocol.id47toid5.storage.EntityTracker
|
import com.viaversion.aas.protocol.id47toid5.storage.EntityTracker
|
||||||
import com.viaversion.aas.protocol.id47toid5.type.CustomIntType
|
import com.viaversion.aas.protocol.id47toid5.type.CustomIntType
|
||||||
import com.viaversion.aas.protocol.xyzToPosition
|
import com.viaversion.aas.protocol.xyzToPosition
|
||||||
import de.gerrygames.viarewind.protocol.protocol1_7_6_10to1_8.types.Types1_7_6_10
|
|
||||||
import com.viaversion.viaversion.api.minecraft.entities.Entity1_10Types
|
import com.viaversion.viaversion.api.minecraft.entities.Entity1_10Types
|
||||||
|
import com.viaversion.viaversion.api.protocol.packet.State
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper
|
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.TypeRemapper
|
import com.viaversion.viaversion.api.protocol.remapper.TypeRemapper
|
||||||
import com.viaversion.viaversion.api.type.Type
|
import com.viaversion.viaversion.api.type.Type
|
||||||
import com.viaversion.viaversion.api.type.types.version.Types1_8
|
import com.viaversion.viaversion.api.type.types.version.Types1_8
|
||||||
import com.viaversion.viaversion.api.protocol.packet.State
|
import de.gerrygames.viarewind.protocol.protocol1_7_6_10to1_8.types.Types1_7_6_10
|
||||||
import kotlin.experimental.and
|
import kotlin.experimental.and
|
||||||
|
|
||||||
fun Protocol1_8To1_7_6.registerEntityPackets() {
|
fun Protocol1_8To1_7_6.registerEntityPackets() {
|
||||||
@ -36,7 +36,10 @@ fun Protocol1_8To1_7_6.registerEntityPackets() {
|
|||||||
packetWrapper.write(Type.VAR_INT, entityId) //Entity Id
|
packetWrapper.write(Type.VAR_INT, entityId) //Entity Id
|
||||||
packetWrapper.write(Type.UNSIGNED_BYTE, 0.toShort()) //Index
|
packetWrapper.write(Type.UNSIGNED_BYTE, 0.toShort()) //Index
|
||||||
packetWrapper.write(Type.UNSIGNED_BYTE, 0.toShort()) //Type
|
packetWrapper.write(Type.UNSIGNED_BYTE, 0.toShort()) //Type
|
||||||
packetWrapper.write(Type.BYTE, (if (animation.toInt() == 104) 0x02 else 0x00).toByte()) //Value (sneaking/not sneaking)
|
packetWrapper.write(
|
||||||
|
Type.BYTE,
|
||||||
|
(if (animation.toInt() == 104) 0x02 else 0x00).toByte()
|
||||||
|
) //Value (sneaking/not sneaking)
|
||||||
packetWrapper.write(Type.UNSIGNED_BYTE, 255.toShort()) //end
|
packetWrapper.write(Type.UNSIGNED_BYTE, 255.toShort()) //end
|
||||||
} else {
|
} else {
|
||||||
packetWrapper.write(Type.VAR_INT, entityId) //Entity Id
|
packetWrapper.write(Type.VAR_INT, entityId) //Entity Id
|
||||||
@ -381,7 +384,12 @@ fun Protocol1_8To1_7_6.registerEntityPackets() {
|
|||||||
this.registerServerbound(State.PLAY, 0x0B, 0x0B, object : PacketRemapper() {
|
this.registerServerbound(State.PLAY, 0x0B, 0x0B, object : PacketRemapper() {
|
||||||
override fun registerMap() {
|
override fun registerMap() {
|
||||||
map(Type.VAR_INT, Type.INT) //Entity Id
|
map(Type.VAR_INT, Type.INT) //Entity Id
|
||||||
handler { packetWrapper -> packetWrapper.write(Type.BYTE, (packetWrapper.read(Type.VAR_INT) + 1).toByte()) } //Action Id
|
handler { packetWrapper ->
|
||||||
|
packetWrapper.write(
|
||||||
|
Type.BYTE,
|
||||||
|
(packetWrapper.read(Type.VAR_INT) + 1).toByte()
|
||||||
|
)
|
||||||
|
} //Action Id
|
||||||
map(Type.VAR_INT, Type.INT) //Action Paramter
|
map(Type.VAR_INT, Type.INT) //Action Paramter
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
@ -2,14 +2,14 @@ package com.viaversion.aas.protocol.id47toid5.packets
|
|||||||
|
|
||||||
import com.viaversion.aas.protocol.id47toid5.Protocol1_8To1_7_6
|
import com.viaversion.aas.protocol.id47toid5.Protocol1_8To1_7_6
|
||||||
import com.viaversion.aas.protocol.id47toid5.storage.Windows
|
import com.viaversion.aas.protocol.id47toid5.storage.Windows
|
||||||
import de.gerrygames.viarewind.protocol.protocol1_7_6_10to1_8.types.Types1_7_6_10
|
|
||||||
import com.viaversion.viaversion.api.minecraft.item.Item
|
import com.viaversion.viaversion.api.minecraft.item.Item
|
||||||
|
import com.viaversion.viaversion.api.protocol.packet.State
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper
|
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper
|
||||||
import com.viaversion.viaversion.api.type.Type
|
import com.viaversion.viaversion.api.type.Type
|
||||||
import com.viaversion.viaversion.api.protocol.packet.State
|
|
||||||
import com.viaversion.viaversion.libs.kyori.adventure.text.Component
|
import com.viaversion.viaversion.libs.kyori.adventure.text.Component
|
||||||
import com.viaversion.viaversion.libs.kyori.adventure.text.serializer.gson.GsonComponentSerializer
|
import com.viaversion.viaversion.libs.kyori.adventure.text.serializer.gson.GsonComponentSerializer
|
||||||
import com.viaversion.viaversion.libs.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer
|
import com.viaversion.viaversion.libs.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer
|
||||||
|
import de.gerrygames.viarewind.protocol.protocol1_7_6_10to1_8.types.Types1_7_6_10
|
||||||
|
|
||||||
fun Protocol1_8To1_7_6.registerInventoryPackets() {
|
fun Protocol1_8To1_7_6.registerInventoryPackets() {
|
||||||
|
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
package com.viaversion.aas.protocol.id47toid5.packets
|
package com.viaversion.aas.protocol.id47toid5.packets
|
||||||
|
|
||||||
import com.viaversion.aas.protocol.id47toid5.Protocol1_8To1_7_6
|
import com.viaversion.aas.protocol.id47toid5.Protocol1_8To1_7_6
|
||||||
|
import com.viaversion.viaversion.api.protocol.packet.State
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper
|
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper
|
||||||
import com.viaversion.viaversion.api.type.Type
|
import com.viaversion.viaversion.api.type.Type
|
||||||
import com.viaversion.viaversion.api.protocol.packet.State
|
|
||||||
|
|
||||||
fun Protocol1_8To1_7_6.registerLoginPackets() {
|
fun Protocol1_8To1_7_6.registerLoginPackets() {
|
||||||
//Encryption Request
|
//Encryption Request
|
||||||
|
@ -9,24 +9,23 @@ import com.viaversion.aas.protocol.id47toid5.storage.Scoreboard
|
|||||||
import com.viaversion.aas.protocol.id47toid5.storage.Tablist
|
import com.viaversion.aas.protocol.id47toid5.storage.Tablist
|
||||||
import com.viaversion.aas.protocol.xyzToPosition
|
import com.viaversion.aas.protocol.xyzToPosition
|
||||||
import com.viaversion.aas.protocol.xyzUBytePos
|
import com.viaversion.aas.protocol.xyzUBytePos
|
||||||
import com.viaversion.aas.readRemainingBytes
|
|
||||||
import de.gerrygames.viarewind.protocol.protocol1_7_6_10to1_8.types.CustomStringType
|
|
||||||
import de.gerrygames.viarewind.protocol.protocol1_7_6_10to1_8.types.Types1_7_6_10
|
|
||||||
import de.gerrygames.viarewind.utils.ChatUtil
|
|
||||||
import io.netty.buffer.Unpooled
|
|
||||||
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper
|
|
||||||
import com.viaversion.viaversion.api.Via
|
import com.viaversion.viaversion.api.Via
|
||||||
import com.viaversion.viaversion.api.minecraft.entities.Entity1_10Types
|
import com.viaversion.viaversion.api.minecraft.entities.Entity1_10Types
|
||||||
import com.viaversion.viaversion.api.minecraft.item.Item
|
import com.viaversion.viaversion.api.minecraft.item.Item
|
||||||
|
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper
|
||||||
|
import com.viaversion.viaversion.api.protocol.packet.State
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper
|
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.TypeRemapper
|
import com.viaversion.viaversion.api.protocol.remapper.TypeRemapper
|
||||||
import com.viaversion.viaversion.api.type.Type
|
import com.viaversion.viaversion.api.type.Type
|
||||||
import com.viaversion.viaversion.api.type.types.CustomByteType
|
import com.viaversion.viaversion.api.type.types.CustomByteType
|
||||||
import com.viaversion.viaversion.api.type.types.version.Types1_8
|
import com.viaversion.viaversion.api.type.types.version.Types1_8
|
||||||
import com.viaversion.viaversion.api.protocol.packet.State
|
|
||||||
import com.viaversion.viaversion.util.ChatColorUtil
|
|
||||||
import com.viaversion.viaversion.libs.opennbt.tag.builtin.ListTag
|
import com.viaversion.viaversion.libs.opennbt.tag.builtin.ListTag
|
||||||
import com.viaversion.viaversion.libs.opennbt.tag.builtin.StringTag
|
import com.viaversion.viaversion.libs.opennbt.tag.builtin.StringTag
|
||||||
|
import com.viaversion.viaversion.util.ChatColorUtil
|
||||||
|
import de.gerrygames.viarewind.protocol.protocol1_7_6_10to1_8.types.CustomStringType
|
||||||
|
import de.gerrygames.viarewind.protocol.protocol1_7_6_10to1_8.types.Types1_7_6_10
|
||||||
|
import de.gerrygames.viarewind.utils.ChatUtil
|
||||||
|
import io.netty.buffer.Unpooled
|
||||||
import java.nio.charset.StandardCharsets
|
import java.nio.charset.StandardCharsets
|
||||||
import java.util.*
|
import java.util.*
|
||||||
import kotlin.experimental.and
|
import kotlin.experimental.and
|
||||||
|
@ -5,14 +5,14 @@ import com.viaversion.aas.protocol.id47toid5.Protocol1_8To1_7_6
|
|||||||
import com.viaversion.aas.protocol.id47toid5.chunks.ChunkPacketTransformer
|
import com.viaversion.aas.protocol.id47toid5.chunks.ChunkPacketTransformer
|
||||||
import com.viaversion.aas.protocol.id47toid5.data.Particle1_8to1_7
|
import com.viaversion.aas.protocol.id47toid5.data.Particle1_8to1_7
|
||||||
import com.viaversion.aas.protocol.id47toid5.storage.MapStorage
|
import com.viaversion.aas.protocol.id47toid5.storage.MapStorage
|
||||||
import de.gerrygames.viarewind.protocol.protocol1_7_6_10to1_8.types.Types1_7_6_10
|
import com.viaversion.viaversion.api.protocol.packet.State
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper
|
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.TypeRemapper
|
import com.viaversion.viaversion.api.protocol.remapper.TypeRemapper
|
||||||
import com.viaversion.viaversion.api.type.Type
|
import com.viaversion.viaversion.api.type.Type
|
||||||
import com.viaversion.viaversion.api.protocol.packet.State
|
|
||||||
import com.viaversion.viaversion.protocols.protocol1_9to1_8.Protocol1_9To1_8
|
|
||||||
import com.viaversion.viaversion.libs.kyori.adventure.text.serializer.gson.GsonComponentSerializer
|
import com.viaversion.viaversion.libs.kyori.adventure.text.serializer.gson.GsonComponentSerializer
|
||||||
import com.viaversion.viaversion.libs.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer
|
import com.viaversion.viaversion.libs.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer
|
||||||
|
import com.viaversion.viaversion.protocols.protocol1_9to1_8.Protocol1_9To1_8
|
||||||
|
import de.gerrygames.viarewind.protocol.protocol1_7_6_10to1_8.types.Types1_7_6_10
|
||||||
import kotlin.experimental.and
|
import kotlin.experimental.and
|
||||||
|
|
||||||
fun Protocol1_8To1_7_6.registerWorldPackets() {
|
fun Protocol1_8To1_7_6.registerWorldPackets() {
|
||||||
|
@ -2,14 +2,13 @@ package com.viaversion.aas.protocol.id47toid5.storage
|
|||||||
|
|
||||||
import com.viaversion.aas.protocol.id47toid5.Protocol1_8To1_7_6
|
import com.viaversion.aas.protocol.id47toid5.Protocol1_8To1_7_6
|
||||||
import com.viaversion.aas.protocol.id47toid5.metadata.MetadataRewriter
|
import com.viaversion.aas.protocol.id47toid5.metadata.MetadataRewriter
|
||||||
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper
|
|
||||||
import com.viaversion.viaversion.api.connection.StoredObject
|
import com.viaversion.viaversion.api.connection.StoredObject
|
||||||
import com.viaversion.viaversion.api.connection.UserConnection
|
import com.viaversion.viaversion.api.connection.UserConnection
|
||||||
import com.viaversion.viaversion.api.minecraft.entities.Entity1_10Types
|
import com.viaversion.viaversion.api.minecraft.entities.Entity1_10Types
|
||||||
import com.viaversion.viaversion.api.minecraft.metadata.Metadata
|
import com.viaversion.viaversion.api.minecraft.metadata.Metadata
|
||||||
|
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper
|
||||||
import com.viaversion.viaversion.api.type.Type
|
import com.viaversion.viaversion.api.type.Type
|
||||||
import com.viaversion.viaversion.api.type.types.version.Types1_8
|
import com.viaversion.viaversion.api.type.types.version.Types1_8
|
||||||
import java.lang.Exception
|
|
||||||
import java.util.concurrent.ConcurrentHashMap
|
import java.util.concurrent.ConcurrentHashMap
|
||||||
|
|
||||||
class EntityTracker(user: UserConnection) : StoredObject(user) {
|
class EntityTracker(user: UserConnection) : StoredObject(user) {
|
||||||
|
@ -2,7 +2,6 @@ package com.viaversion.aas.protocol.id47toid5.storage
|
|||||||
|
|
||||||
import com.viaversion.viaversion.api.connection.StoredObject
|
import com.viaversion.viaversion.api.connection.StoredObject
|
||||||
import com.viaversion.viaversion.api.connection.UserConnection
|
import com.viaversion.viaversion.api.connection.UserConnection
|
||||||
import java.util.*
|
|
||||||
|
|
||||||
class MapStorage(user: UserConnection) : StoredObject(user) {
|
class MapStorage(user: UserConnection) : StoredObject(user) {
|
||||||
private val maps: MutableMap<Int, MapData> = HashMap()
|
private val maps: MutableMap<Int, MapData> = HashMap()
|
||||||
@ -18,5 +17,6 @@ class MapStorage(user: UserConnection) : StoredObject(user) {
|
|||||||
var scale: Byte = 0
|
var scale: Byte = 0
|
||||||
var mapIcons = emptyArray<MapIcon>()
|
var mapIcons = emptyArray<MapIcon>()
|
||||||
}
|
}
|
||||||
|
|
||||||
class MapIcon(var direction: Byte, var type: Byte, var x: Byte, var z: Byte)
|
class MapIcon(var direction: Byte, var type: Byte, var x: Byte, var z: Byte)
|
||||||
}
|
}
|
@ -2,7 +2,6 @@ package com.viaversion.aas.protocol.id47toid5.storage
|
|||||||
|
|
||||||
import com.viaversion.viaversion.api.connection.StoredObject
|
import com.viaversion.viaversion.api.connection.StoredObject
|
||||||
import com.viaversion.viaversion.api.connection.UserConnection
|
import com.viaversion.viaversion.api.connection.UserConnection
|
||||||
import java.util.*
|
|
||||||
|
|
||||||
class Scoreboard(user: UserConnection) : StoredObject(user) {
|
class Scoreboard(user: UserConnection) : StoredObject(user) {
|
||||||
private val objectives = HashMap<String, String>()
|
private val objectives = HashMap<String, String>()
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
package com.viaversion.aas.protocol.id47toid5.type
|
package com.viaversion.aas.protocol.id47toid5.type
|
||||||
|
|
||||||
import io.netty.buffer.ByteBuf
|
|
||||||
import com.viaversion.viaversion.api.type.PartialType
|
import com.viaversion.viaversion.api.type.PartialType
|
||||||
|
import io.netty.buffer.ByteBuf
|
||||||
|
|
||||||
class CustomIntType(amount: Int) : PartialType<IntArray, Int>(amount, IntArray::class.java) {
|
class CustomIntType(amount: Int) : PartialType<IntArray, Int>(amount, IntArray::class.java) {
|
||||||
override fun read(p0: ByteBuf, p1: Int): IntArray {
|
override fun read(p0: ByteBuf, p1: Int): IntArray {
|
||||||
|
@ -3,9 +3,9 @@ package com.viaversion.aas.protocol.id5toid4
|
|||||||
import com.viaversion.aas.protocol.INSERT_DASHES
|
import com.viaversion.aas.protocol.INSERT_DASHES
|
||||||
import com.viaversion.viaversion.api.connection.UserConnection
|
import com.viaversion.viaversion.api.connection.UserConnection
|
||||||
import com.viaversion.viaversion.api.protocol.AbstractSimpleProtocol
|
import com.viaversion.viaversion.api.protocol.AbstractSimpleProtocol
|
||||||
|
import com.viaversion.viaversion.api.protocol.packet.State
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper
|
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper
|
||||||
import com.viaversion.viaversion.api.type.Type
|
import com.viaversion.viaversion.api.type.Type
|
||||||
import com.viaversion.viaversion.api.protocol.packet.State
|
|
||||||
|
|
||||||
// Based on https://github.com/Gerrygames/ClientViaVersion
|
// Based on https://github.com/Gerrygames/ClientViaVersion
|
||||||
object Protocol1_7_6to1_7_2 : AbstractSimpleProtocol() {
|
object Protocol1_7_6to1_7_2 : AbstractSimpleProtocol() {
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
package com.viaversion.aas.web
|
package com.viaversion.aas.web
|
||||||
|
|
||||||
import com.viaversion.aas.config.VIAaaSConfig
|
|
||||||
import com.google.common.collect.Sets
|
import com.google.common.collect.Sets
|
||||||
import com.google.common.util.concurrent.RateLimiter
|
import com.google.common.util.concurrent.RateLimiter
|
||||||
|
import com.viaversion.aas.config.VIAaaSConfig
|
||||||
import io.ktor.features.*
|
import io.ktor.features.*
|
||||||
import io.ktor.websocket.*
|
import io.ktor.websocket.*
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
@ -26,7 +26,8 @@ class WebLogin : WebState {
|
|||||||
"offline_login" -> {
|
"offline_login" -> {
|
||||||
if (!sha512Hex(msg.toByteArray(Charsets.UTF_8)).startsWith("00000")) throw StacklessException("PoW failed")
|
if (!sha512Hex(msg.toByteArray(Charsets.UTF_8)).startsWith("00000")) throw StacklessException("PoW failed")
|
||||||
if ((obj.getAsJsonPrimitive("date").asLong - System.currentTimeMillis()).absoluteValue
|
if ((obj.getAsJsonPrimitive("date").asLong - System.currentTimeMillis()).absoluteValue
|
||||||
> Duration.ofMinutes(2).toMillis()) {
|
> Duration.ofMinutes(2).toMillis()
|
||||||
|
) {
|
||||||
throw StacklessException("Invalid PoW date")
|
throw StacklessException("Invalid PoW date")
|
||||||
}
|
}
|
||||||
val username = obj.get("username").asString.trim()
|
val username = obj.get("username").asString.trim()
|
||||||
|
@ -2,140 +2,171 @@
|
|||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
<meta content="width=device-width, initial-scale=1" name="viewport">
|
||||||
<title>VIAaaS</title>
|
<title>VIAaaS</title>
|
||||||
<meta name="application-name" content="VIAaaS">
|
<meta content="VIAaaS" name="application-name">
|
||||||
<meta property="og:site_name" content="VIAaaS">
|
<meta content="VIAaaS" property="og:site_name">
|
||||||
<meta name="description" content="VIAaaS - ViaVersion as a Service - ViaVersion standalone proxy">
|
<meta content="VIAaaS - ViaVersion as a Service - ViaVersion standalone proxy" name="description">
|
||||||
<meta property="og:title" content="VIAaaS">
|
<meta content="VIAaaS" property="og:title">
|
||||||
<meta property="og:description" content="VIAaaS - ViaVersion as a Service - ViaVersion standalone proxy">
|
<meta content="VIAaaS - ViaVersion as a Service - ViaVersion standalone proxy" property="og:description">
|
||||||
<meta property="og:type" content="game">
|
<meta content="game" property="og:type">
|
||||||
<meta property="og:image" content="https://cdn.discordapp.com/attachments/698483428915675186/821487447664885770/unknown.png">
|
<meta content="https://cdn.discordapp.com/attachments/698483428915675186/821487447664885770/unknown.png"
|
||||||
<link rel="icon" href="https://cdn.discordapp.com/attachments/698483428915675186/821487447664885770/unknown.png">
|
property="og:image">
|
||||||
<meta http-equiv="Content-Security-Policy" content="default-src 'self';
|
<link href="https://cdn.discordapp.com/attachments/698483428915675186/821487447664885770/unknown.png" rel="icon">
|
||||||
|
<meta content="default-src 'self';
|
||||||
style-src https://cdnjs.cloudflare.com/ 'self';
|
style-src https://cdnjs.cloudflare.com/ 'self';
|
||||||
img-src data: https://cdn.discordapp.com/ https://crafthead.net/ https://crafatar.com/;
|
img-src data: https://cdn.discordapp.com/ https://crafthead.net/ https://crafatar.com/;
|
||||||
connect-src 'self' http://localhost:*/ https: wss:;
|
connect-src 'self' http://localhost:*/ https: wss:;
|
||||||
script-src 'sha256-47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=' 'self' https://ajax.cloudflare.com/ https://cdnjs.cloudflare.com/ https://alcdn.msauth.net/">
|
script-src 'sha256-47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=' 'self' https://ajax.cloudflare.com/ https://cdnjs.cloudflare.com/ https://alcdn.msauth.net/" http-equiv="Content-Security-Policy">
|
||||||
<meta name="referrer" content="no-referrer">
|
<meta content="no-referrer" name="referrer">
|
||||||
<meta name="robots" content="noindex">
|
<meta content="noindex" name="robots">
|
||||||
<meta name="theme-color" content="#0468a1">
|
<meta content="#0468a1" name="theme-color">
|
||||||
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/5.0.0-beta1/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-giJF6kkoqNQ00vy+HMDP7azOuL0xtbfIcaT9wjKHr8RbDVddVHyTfAAsrekwKmP1" crossorigin="anonymous">
|
<link crossorigin="anonymous"
|
||||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/5.0.0-beta1/js/bootstrap.bundle.min.js" integrity="sha512-q2vREMvON/xrz1KuOj5QKWmdvcHtM4XNbNer+Qbf4TOj+RMDnul0Fg3VmmYprdf3fnL1gZgzKhZszsp62r5Ugg==" crossorigin="anonymous"></script>
|
href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/5.0.0-beta1/css/bootstrap.min.css" integrity="sha384-giJF6kkoqNQ00vy+HMDP7azOuL0xtbfIcaT9wjKHr8RbDVddVHyTfAAsrekwKmP1"
|
||||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.slim.js" integrity="sha512-1lagjLfnC1I0iqH9plHYIUq3vDMfjhZsLy9elfK89RBcpcRcx4l+kRJBSnHh2Mh6kLxRHoObD1M5UTUbgFy6nA==" crossorigin="anonymous"></script>
|
rel="stylesheet">
|
||||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/uuid/8.3.2/uuid.min.js" integrity="sha512-UNM1njAgOFUa74Z0bADwAq8gbTcqZC8Ej4xPSzpnh0l6KMevwvkBvbldF9uR++qKeJ+MOZHRjV1HZjoRvjDfNQ==" crossorigin="anonymous"></script>
|
<script crossorigin="anonymous"
|
||||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/jsSHA/3.2.0/sha.min.js" integrity="sha512-/yIGjYJZIXZx10ig0yhbK41OiwcqBUxIj0xQJe+NwkMIdS/u07b6Mwo0nvXB4o7A6WiKnKOf92JwE5Ezo27u9Q==" crossorigin="anonymous"></script>
|
integrity="sha512-q2vREMvON/xrz1KuOj5QKWmdvcHtM4XNbNer+Qbf4TOj+RMDnul0Fg3VmmYprdf3fnL1gZgzKhZszsp62r5Ugg=="
|
||||||
<script src="https://alcdn.msauth.net/browser/2.7.0/js/msal-browser.js" integrity="sha384-5Fqyq1ncNYhL2mXCdWAFXkf2wWtKeA0mXYp++ryAX1lowD0ctAHFdity37L/ULXh" crossorigin="anonymous"></script>
|
src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/5.0.0-beta1/js/bootstrap.bundle.min.js"></script>
|
||||||
|
<script crossorigin="anonymous"
|
||||||
|
integrity="sha512-1lagjLfnC1I0iqH9plHYIUq3vDMfjhZsLy9elfK89RBcpcRcx4l+kRJBSnHh2Mh6kLxRHoObD1M5UTUbgFy6nA=="
|
||||||
|
src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.slim.js"></script>
|
||||||
|
<script crossorigin="anonymous"
|
||||||
|
integrity="sha512-UNM1njAgOFUa74Z0bADwAq8gbTcqZC8Ej4xPSzpnh0l6KMevwvkBvbldF9uR++qKeJ+MOZHRjV1HZjoRvjDfNQ=="
|
||||||
|
src="https://cdnjs.cloudflare.com/ajax/libs/uuid/8.3.2/uuid.min.js"></script>
|
||||||
|
<script crossorigin="anonymous"
|
||||||
|
integrity="sha512-/yIGjYJZIXZx10ig0yhbK41OiwcqBUxIj0xQJe+NwkMIdS/u07b6Mwo0nvXB4o7A6WiKnKOf92JwE5Ezo27u9Q=="
|
||||||
|
src="https://cdnjs.cloudflare.com/ajax/libs/jsSHA/3.2.0/sha.min.js"></script>
|
||||||
|
<script crossorigin="anonymous"
|
||||||
|
integrity="sha384-5Fqyq1ncNYhL2mXCdWAFXkf2wWtKeA0mXYp++ryAX1lowD0ctAHFdity37L/ULXh"
|
||||||
|
src="https://alcdn.msauth.net/browser/2.7.0/js/msal-browser.js"></script>
|
||||||
<link href="style.css" rel="stylesheet">
|
<link href="style.css" rel="stylesheet">
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
|
<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
|
||||||
<div class="container-fluid">
|
<div class="container-fluid">
|
||||||
<a class="navbar-brand" href="javascript:">VIAaaS</a>
|
<a class="navbar-brand" href="javascript:">VIAaaS</a>
|
||||||
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
|
<button aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation" class="navbar-toggler"
|
||||||
<span class="navbar-toggler-icon"></span>
|
data-bs-target="#navbarSupportedContent" data-bs-toggle="collapse" type="button">
|
||||||
</button>
|
<span class="navbar-toggler-icon"></span>
|
||||||
<div class="collapse navbar-collapse" id="navbarSupportedContent">
|
</button>
|
||||||
<ul class="navbar-nav nav" role="tablist">
|
<div class="collapse navbar-collapse" id="navbarSupportedContent">
|
||||||
<li class="nav-item" role="presentation">
|
<ul class="navbar-nav nav" role="tablist">
|
||||||
<a class="nav-link active" id="home-tab" data-bs-toggle="tab" href="#home" role="tab" aria-controls="home" aria-selected="true">Status</a>
|
<li class="nav-item" role="presentation">
|
||||||
</li>
|
<a aria-controls="home" aria-selected="true" class="nav-link active" data-bs-toggle="tab" href="#home"
|
||||||
<li class="nav-item" role="presentation">
|
id="home-tab" role="tab">Status</a>
|
||||||
<a class="nav-link" id="accounts-tab" data-bs-toggle="tab" href="#accounts" role="tab" aria-controls="accounts" aria-selected="false">Accounts</a>
|
</li>
|
||||||
</li>
|
<li class="nav-item" role="presentation">
|
||||||
<li class="nav-item" role="presentation">
|
<a aria-controls="accounts" aria-selected="false" class="nav-link" data-bs-toggle="tab" href="#accounts"
|
||||||
<a class="nav-link" id="settings-tab" data-bs-toggle="tab" href="#settings" role="tab" aria-controls="settings" aria-selected="false">Settings</a>
|
id="accounts-tab" role="tab">Accounts</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item dropdown">
|
<li class="nav-item" role="presentation">
|
||||||
<a class="nav-link dropdown-toggle" href="#" id="aboutDropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false">
|
<a aria-controls="settings" aria-selected="false" class="nav-link" data-bs-toggle="tab" href="#settings"
|
||||||
About
|
id="settings-tab" role="tab">Settings</a>
|
||||||
</a>
|
</li>
|
||||||
<ul class="dropdown-menu dropdown-menu-dark" aria-labelledby="aboutDropdown">
|
<li class="nav-item dropdown">
|
||||||
<li><a class="dropdown-item" data-bs-toggle="modal" href="#aboutModal" role="tab">About VIAaaS</a></li>
|
<a aria-expanded="false" class="nav-link dropdown-toggle" data-bs-toggle="dropdown" href="#"
|
||||||
</ul>
|
id="aboutDropdown" role="button">
|
||||||
</li>
|
About
|
||||||
</ul>
|
</a>
|
||||||
|
<ul aria-labelledby="aboutDropdown" class="dropdown-menu dropdown-menu-dark">
|
||||||
|
<li><a class="dropdown-item" data-bs-toggle="modal" href="#aboutModal" role="tab">About
|
||||||
|
VIAaaS</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
</nav>
|
</nav>
|
||||||
<div class="container tab-content" id="content">
|
<div class="container tab-content" id="content">
|
||||||
<div id="home" class="tab-pane fade show active" aria-labelledby="home-tab">
|
<div aria-labelledby="home-tab" class="tab-pane fade show active" id="home">
|
||||||
<p>WebSocket connection status: <span id="connection_status" class="text-white bg-dark">?</span></p>
|
<p>WebSocket connection status: <span class="text-white bg-dark" id="connection_status">?</span></p>
|
||||||
<p>CORS Proxy status: <span id="cors_status" class="text-white bg-dark">?</span></p>
|
<p>CORS Proxy status: <span class="text-white bg-dark" id="cors_status">?</span></p>
|
||||||
<hr>
|
<hr>
|
||||||
<p><span id="actions"></span></p>
|
<p><span id="actions"></span></p>
|
||||||
<p>Listening to logins from: <span id="listening"></span></p>
|
<p>Listening to logins from: <span id="listening"></span></p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="settings" class="tab-pane fade" aria-labelledby="settings-tab">
|
<div aria-labelledby="settings-tab" class="tab-pane fade" id="settings">
|
||||||
<div class="mb-3">
|
<div class="mb-3">
|
||||||
<label for="cors-proxy" class="form-label">CORS Proxy URL Prefix</label>
|
<label class="form-label" for="cors-proxy">CORS Proxy URL Prefix</label>
|
||||||
<p>See <a href="https://github.com/ViaVersion/VIAaaS#cors-proxy">README</a>
|
<p>See <a href="https://github.com/ViaVersion/VIAaaS#cors-proxy">README</a>
|
||||||
for setting up one. Mojang APIs are called through this proxy, and a remote IP address may look suspicious and block your account.
|
for setting up one. Mojang APIs are called through this proxy, and a remote IP address may look
|
||||||
It will receive sensitive data like email, passwords and tokens. HTTPS is required for non-localhost addresses.</p>
|
suspicious and block your account.
|
||||||
<input type="url" class="form-control" id="cors-proxy" placeholder="http://localhost:8080/">
|
It will receive sensitive data like email, passwords and tokens. HTTPS is required for non-localhost
|
||||||
|
addresses.</p>
|
||||||
|
<input class="form-control" id="cors-proxy" placeholder="http://localhost:8080/" type="url">
|
||||||
</div>
|
</div>
|
||||||
<div class="mb-3">
|
<div class="mb-3">
|
||||||
<label for="ws-url" class="form-label">WebSocket URL</label>
|
<label class="form-label" for="ws-url">WebSocket URL</label>
|
||||||
<p>It exchanges sensitive data like minecraft.id tokens, server session hashes and usernames. WSS is required.</p>
|
<p>It exchanges sensitive data like minecraft.id tokens, server session hashes and usernames. WSS is
|
||||||
<input type="url" class="form-control" id="ws-url" placeholder="wss://viaaas.example.com/ws">
|
required.</p>
|
||||||
|
<input class="form-control" id="ws-url" placeholder="wss://viaaas.example.com/ws" type="url">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="accounts" class="tab-pane fade" aria-labelledby="accounts-tab">
|
<div aria-labelledby="accounts-tab" class="tab-pane fade" id="accounts">
|
||||||
<div>
|
<div>
|
||||||
<p>Browser Minecraft accounts:</p>
|
<p>Browser Minecraft accounts:</p>
|
||||||
<div id="accounts-list"></div>
|
<div id="accounts-list"></div>
|
||||||
<hr>
|
<hr>
|
||||||
</div>
|
</div>
|
||||||
<div id="add-account">
|
<div id="add-account">
|
||||||
<label for="form_add_ms" class="mb-3">Add Microsoft account:</label>
|
<label class="mb-3" for="form_add_ms">Add Microsoft account:</label>
|
||||||
<form id="form_add_ms" class="row">
|
<form class="row" id="form_add_ms">
|
||||||
<div class="col-auto">
|
<div class="col-auto">
|
||||||
<button id="login_submit_ms" type="submit" class="btn btn-primary mb-3">Login with Microsoft</button>
|
<button class="btn btn-primary mb-3" id="login_submit_ms" type="submit">Login with Microsoft
|
||||||
</div>
|
</button>
|
||||||
|
</div>
|
||||||
</form>
|
</form>
|
||||||
<label for="form_add_mc" class="mb-3">Add Mojang account:</label>
|
<label class="mb-3" for="form_add_mc">Add Mojang account:</label>
|
||||||
<form id="form_add_mc" class="row g-3">
|
<form class="row g-3" id="form_add_mc">
|
||||||
<div class="col-auto">
|
<div class="col-auto">
|
||||||
<label for="email" class="visually-hidden">Username/Email</label>
|
<label class="visually-hidden" for="email">Username/Email</label>
|
||||||
<input type="text" id="email" name="email" class="form-control" placeholder="mc@example.com">
|
<input class="form-control" id="email" name="email" placeholder="mc@example.com" type="text">
|
||||||
</div>
|
</div>
|
||||||
<div class="col-auto">
|
<div class="col-auto">
|
||||||
<label for="password" class="visually-hidden">Password</label>
|
<label class="visually-hidden" for="password">Password</label>
|
||||||
<input type="password" id="password" name="password" class="form-control" placeholder="password">
|
<input class="form-control" id="password" name="password" placeholder="password" type="password">
|
||||||
</div>
|
</div>
|
||||||
<div class="col-auto">
|
<div class="col-auto">
|
||||||
<button id="login_submit_mc" type="submit" class="btn btn-primary mb-3">Login with Minecraft</button>
|
<button class="btn btn-primary mb-3" id="login_submit_mc" type="submit">Login with Minecraft
|
||||||
</div>
|
</button>
|
||||||
|
</div>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="modal fade" id="aboutModal" tabindex="-1" aria-labelledby="aboutModalLabel" aria-hidden="true">
|
<div aria-hidden="true" aria-labelledby="aboutModalLabel" class="modal fade" id="aboutModal" tabindex="-1">
|
||||||
<div class="modal-dialog">
|
<div class="modal-dialog">
|
||||||
<div class="modal-content">
|
<div class="modal-content">
|
||||||
<div class="modal-header">
|
<div class="modal-header">
|
||||||
<h5 class="modal-title" id="aboutModalLabel">About</h5>
|
<h5 class="modal-title" id="aboutModalLabel">About</h5>
|
||||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
<button aria-label="Close" class="btn-close" data-bs-dismiss="modal" type="button"></button>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
<p>Copyright © 2020-2021 <a href="https://github.com/creeper123123321">creeper123123321</a></p>
|
<p>Copyright © 2020-2021 <a href="https://github.com/creeper123123321">creeper123123321</a></p>
|
||||||
<p>Copyright © 2021 <a href="https://github.com/ViaVersion/VIAaaS/graphs/contributors">contributors</a></p>
|
<p>Copyright © 2021 <a href="https://github.com/ViaVersion/VIAaaS/graphs/contributors">contributors</a>
|
||||||
<p>This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by
|
</p>
|
||||||
the Free Software Foundation, either version 3 of the License, or (at your option) any later version.</p>
|
<p>This program is free software: you can redistribute it and/or modify it under the terms of the GNU
|
||||||
<p>This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
|
Affero General Public License as published by
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.</p>
|
the Free Software Foundation, either version 3 of the License, or (at your option) any later
|
||||||
<p>You should have received a copy of the GNU Affero General Public License along with this program. If not, see
|
version.</p>
|
||||||
<a href="https://gnu.org/licenses">http://www.gnu.org/licenses/</a>.</p>
|
<p>This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
|
||||||
</div>
|
even the implied warranty of
|
||||||
<div class="modal-footer">
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for
|
||||||
<a role="button" type="button" class="btn btn-secondary" href="https://github.com/ViaVersion/VIAaaS/">Source Code</a>
|
more details.</p>
|
||||||
<button type="button" class="btn btn-primary" data-bs-dismiss="modal">Close</button>
|
<p>You should have received a copy of the GNU Affero General Public License along with this program. If
|
||||||
</div>
|
not, see
|
||||||
|
<a href="https://gnu.org/licenses">http://www.gnu.org/licenses/</a>.</p>
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<a class="btn btn-secondary" href="https://github.com/ViaVersion/VIAaaS/" role="button" type="button">Source
|
||||||
|
Code</a>
|
||||||
|
<button class="btn btn-primary" data-bs-dismiss="modal" type="button">Close</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="toast-container position-absolute top-0 end-0 p-3" id="toasts"></div>
|
<div class="toast-container position-absolute top-0 end-0 p-3" id="toasts"></div>
|
||||||
|
Loading…
Reference in New Issue
Block a user