more java code, remove ipinfo lib

This commit is contained in:
creeper123123321 2021-07-01 09:01:02 -03:00
parent ec5a934d94
commit aadfba6bd0
41 changed files with 426 additions and 358 deletions

View File

@ -37,7 +37,7 @@ compileKotlin.kotlinOptions.jvmTarget = "11"
val gitVersion: groovy.lang.Closure<String> by extra
group = "com.github.creeper123123321.viaaas"
version = "0.4.4+" + try {
version = "0.4.5+" + try {
gitVersion()
} catch (e: Exception) {
"unknown"
@ -94,7 +94,6 @@ dependencies {
testImplementation("io.ktor:ktor-server-test-host:$ktorVersion")
implementation("com.auth0:java-jwt:3.17.0")
implementation("io.ipinfo:ipinfo-api:1.1")
}
val run: JavaExec by tasks

View File

@ -3,6 +3,8 @@ package com.viaversion.aas.codec.packet;
import io.netty.buffer.ByteBuf;
import org.jetbrains.annotations.NotNull;
// Some code based on https://github.com/VelocityPowered/Velocity/tree/dev/1.1.0/proxy/src/main/java/com/velocitypowered/proxy/protocol/packet
/**
* A mutable object which represents a Minecraft packet data
*/

View File

@ -0,0 +1,15 @@
package com.viaversion.aas.codec.packet.common;
import com.viaversion.aas.codec.packet.Packet;
import io.netty.buffer.ByteBuf;
import org.jetbrains.annotations.NotNull;
public class AbstractEmpty implements Packet {
@Override
public void decode(@NotNull ByteBuf byteBuf, int protocolVersion) throws Exception {
}
@Override
public void encode(@NotNull ByteBuf byteBuf, int protocolVersion) throws Exception {
}
}

View File

@ -0,0 +1,27 @@
package com.viaversion.aas.codec.packet.common;
import com.viaversion.aas.codec.packet.Packet;
import io.netty.buffer.ByteBuf;
import org.jetbrains.annotations.NotNull;
public class AbstractPing implements Packet {
private long number;
public long getNumber() {
return number;
}
public void setNumber(long number) {
this.number = number;
}
@Override
public void decode(@NotNull ByteBuf byteBuf, int protocolVersion) throws Exception {
number = byteBuf.readLong();
}
@Override
public void encode(@NotNull ByteBuf byteBuf, int protocolVersion) throws Exception {
byteBuf.writeLong(number);
}
}

View File

@ -0,0 +1,28 @@
package com.viaversion.aas.codec.packet.common;
import com.viaversion.aas.codec.packet.Packet;
import com.viaversion.viaversion.api.type.Type;
import io.netty.buffer.ByteBuf;
import org.jetbrains.annotations.NotNull;
public class AbstractSingleMessage implements Packet {
private String msg;
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
@Override
public void decode(@NotNull ByteBuf byteBuf, int protocolVersion) throws Exception {
msg = Type.STRING.read(byteBuf);
}
@Override
public void encode(@NotNull ByteBuf byteBuf, int protocolVersion) throws Exception {
Type.STRING.write(byteBuf, msg);
}
}

View File

@ -1,28 +1,6 @@
package com.viaversion.aas.codec.packet.login;
import com.viaversion.aas.codec.packet.Packet;
import com.viaversion.viaversion.api.type.Type;
import io.netty.buffer.ByteBuf;
import org.jetbrains.annotations.NotNull;
import com.viaversion.aas.codec.packet.common.AbstractSingleMessage;
public class LoginDisconnect implements Packet {
private String msg;
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
@Override
public void decode(@NotNull ByteBuf byteBuf, int protocolVersion) throws Exception {
msg = Type.STRING.read(byteBuf);
}
@Override
public void encode(@NotNull ByteBuf byteBuf, int protocolVersion) throws Exception {
Type.STRING.write(byteBuf, msg);
}
public class LoginDisconnect extends AbstractSingleMessage {
}

View File

@ -1,28 +1,6 @@
package com.viaversion.aas.codec.packet.play;
import com.viaversion.aas.codec.packet.Packet;
import com.viaversion.viaversion.api.type.Type;
import io.netty.buffer.ByteBuf;
import org.jetbrains.annotations.NotNull;
import com.viaversion.aas.codec.packet.common.AbstractSingleMessage;
public class Kick implements Packet {
private String msg;
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
@Override
public void decode(@NotNull ByteBuf byteBuf, int protocolVersion) throws Exception {
msg = Type.STRING.read(byteBuf);
}
@Override
public void encode(@NotNull ByteBuf byteBuf, int protocolVersion) throws Exception {
Type.STRING.write(byteBuf, msg);
}
public class Kick extends AbstractSingleMessage {
}

View File

@ -1,27 +1,6 @@
package com.viaversion.aas.codec.packet.status;
import com.viaversion.aas.codec.packet.Packet;
import io.netty.buffer.ByteBuf;
import org.jetbrains.annotations.NotNull;
import com.viaversion.aas.codec.packet.common.AbstractPing;
public class StatusPing implements Packet {
private long number;
public long getNumber() {
return number;
}
public void setNumber(long number) {
this.number = number;
}
@Override
public void decode(@NotNull ByteBuf byteBuf, int protocolVersion) throws Exception {
number = byteBuf.readLong();
}
@Override
public void encode(@NotNull ByteBuf byteBuf, int protocolVersion) throws Exception {
byteBuf.writeLong(number);
}
public class StatusPing extends AbstractPing {
}

View File

@ -0,0 +1,6 @@
package com.viaversion.aas.codec.packet.status;
import com.viaversion.aas.codec.packet.common.AbstractPing;
public class StatusPong extends AbstractPing {
}

View File

@ -1,15 +1,6 @@
package com.viaversion.aas.codec.packet.status;
import com.viaversion.aas.codec.packet.Packet;
import io.netty.buffer.ByteBuf;
import org.jetbrains.annotations.NotNull;
import com.viaversion.aas.codec.packet.common.AbstractEmpty;
public class StatusRequest implements Packet {
@Override
public void decode(@NotNull ByteBuf byteBuf, int protocolVersion) throws Exception {
}
@Override
public void encode(@NotNull ByteBuf byteBuf, int protocolVersion) throws Exception {
}
public class StatusRequest extends AbstractEmpty {
}

View File

@ -0,0 +1,6 @@
package com.viaversion.aas.codec.packet.status;
import com.viaversion.aas.codec.packet.common.AbstractSingleMessage;
public class StatusResponse extends AbstractSingleMessage {
}

View File

@ -0,0 +1,40 @@
package com.viaversion.aas.config;
import com.viaversion.viaversion.configuration.AbstractViaConfig;
import java.io.File;
import java.net.URL;
import java.util.List;
import java.util.Map;
public class AspirinViaConfig extends AbstractViaConfig {
{
reloadConfig();
}
public AspirinViaConfig() {
super(new File("config/viaversion.yml"));
}
@Override
public URL getDefaultConfigURL() {
return getClass().getClassLoader().getResource("assets/viaversion/config.yml");
}
@Override
protected void handleConfig(Map<String, Object> config) {
}
@Override
public List<String> getUnsupportedOptions() {
return List.of(
"anti-xray-patch", "bungee-ping-interval",
"bungee-ping-save", "bungee-servers", "quick-move-action-fix", "nms-player-ticking",
"item-cache", "velocity-ping-interval", "velocity-ping-save", "velocity-servers",
"blockconnection-method", "change-1_9-hitbox", "change-1_14-hitbox", "block-protocols",
"block-disconnect-msg", "reload-disconnect-msg", "max-pps", "max-pps-kick-msg", "tracking-period",
"tracking-warning-pps", "tracking-max-warnings", "tracking-max-kick-msg", "use-new-deathmessages"
);
}
}

View File

@ -0,0 +1,52 @@
package com.viaversion.aas.handler;
import com.viaversion.viaversion.api.connection.UserConnection;
import com.viaversion.viaversion.exception.CancelDecoderException;
import com.viaversion.viaversion.exception.CancelEncoderException;
import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.MessageToMessageCodec;
import org.jetbrains.annotations.NotNull;
import java.util.List;
public class ViaCodec extends MessageToMessageCodec<ByteBuf, ByteBuf> {
private final UserConnection info;
public ViaCodec(@NotNull UserConnection info) {
this.info = info;
}
@Override
protected void encode(ChannelHandlerContext ctx, ByteBuf msg, List<Object> out) throws Exception {
if (!ctx.channel().isActive() ||!info.checkServerboundPacket()) throw CancelEncoderException.generate(null);
if (!info.shouldTransformPacket()) {
out.add(msg.retain());
return;
}
var transformedBuf = ctx.alloc().buffer().writeBytes(msg);
try {
info.transformServerbound(transformedBuf, CancelEncoderException::generate);
out.add(transformedBuf.retain());
} finally {
transformedBuf.release();
}
}
@Override
protected void decode(ChannelHandlerContext ctx, ByteBuf msg, List<Object> out) throws Exception {
if (!ctx.channel().isActive()) return;
if (!info.checkClientboundPacket()) throw CancelDecoderException.generate(null);
if (!info.shouldTransformPacket()) {
out.add(msg.retain());
return;
}
var transformedBuf = ctx.alloc().buffer().writeBytes(msg);
try {
info.transformClientbound(transformedBuf, CancelDecoderException::generate);
out.add(transformedBuf.retain());
} finally {
transformedBuf.release();
}
}
}

View File

@ -0,0 +1,8 @@
package com.viaversion.aas.platform;
import com.viaversion.viaversion.ViaAPIBase;
import java.util.UUID;
public class AspirinApi extends ViaAPIBase<UUID> {
}

View File

@ -0,0 +1,23 @@
package com.viaversion.aas.platform;
import com.viaversion.viabackwards.api.ViaBackwardsPlatform;
import java.io.File;
import java.util.logging.Logger;
public class AspirinBackwards implements ViaBackwardsPlatform {
private Logger logger = Logger.getLogger("ViaBackwards");
@Override
public Logger getLogger() {
return logger;
}
@Override
public void disable() {
}
@Override
public File getDataFolder() {
return new File("config/viabackwards");
}
}

View File

@ -0,0 +1,51 @@
package com.viaversion.aas.platform;
import com.viaversion.viaversion.api.platform.ViaInjector;
import com.viaversion.viaversion.api.protocol.version.ProtocolVersion;
import com.viaversion.viaversion.libs.fastutil.ints.IntLinkedOpenHashSet;
import com.viaversion.viaversion.libs.fastutil.ints.IntSortedSet;
import com.viaversion.viaversion.libs.gson.JsonObject;
import de.gerrygames.viarewind.sponge.VersionInfo;
public class AspirinInjector implements ViaInjector {
@Override
public void inject() {
}
@Override
public void uninject() {
}
@Override
public int getServerProtocolVersion() {
return getServerProtocolVersions().firstInt();
}
@Override
public String getEncoderName() {
return getDecoderName();
}
@Override
public String getDecoderName() {
return "via-codec";
}
@Override
public JsonObject getDump() {
var obj = new JsonObject();
obj.addProperty("ViaRewind version", VersionInfo.VERSION);
return obj;
}
@Override
public IntSortedSet getServerProtocolVersions() {
var versions = new IntLinkedOpenHashSet();
versions.add(ProtocolVersion.v1_7_1.getOriginalVersion());
versions.add(ProtocolVersion.getProtocols()
.stream()
.mapToInt(ProtocolVersion::getOriginalVersion)
.max().orElseThrow());
return versions;
}
}

View File

@ -0,0 +1,20 @@
package com.viaversion.aas.platform;
import com.viaversion.aas.provider.AspirinVersionProvider;
import com.viaversion.viaversion.api.Via;
import com.viaversion.viaversion.api.platform.ViaPlatformLoader;
import com.viaversion.viaversion.api.protocol.version.VersionProvider;
import com.viaversion.viaversion.protocols.protocol1_9to1_8.providers.MovementTransmitterProvider;
import com.viaversion.viaversion.velocity.providers.VelocityMovementTransmitter;
public class AspirinLoader implements ViaPlatformLoader {
@Override
public void load() {
Via.getManager().getProviders().use(MovementTransmitterProvider.class, new VelocityMovementTransmitter());
Via.getManager().getProviders().use(VersionProvider.class, new AspirinVersionProvider());
}
@Override
public void unload() {
}
}

View File

@ -0,0 +1,13 @@
package com.viaversion.aas.platform;
import de.gerrygames.viarewind.api.ViaRewindPlatform;
import java.util.logging.Logger;
public class AspirinRewind implements ViaRewindPlatform {
private Logger logger = Logger.getLogger("ViaRewind");
@Override
public Logger getLogger() {
return logger;
}
}

View File

@ -0,0 +1,25 @@
package com.viaversion.aas.platform;
import com.viaversion.viaversion.api.platform.PlatformTask;
import org.checkerframework.checker.nullness.qual.Nullable;
import org.jetbrains.annotations.NotNull;
import java.util.concurrent.Future;
public class FutureTask implements PlatformTask<Future<?>> {
private final Future<?> object;
public FutureTask(@NotNull Future<?> object) {
this.object = object;
}
@Override
public @Nullable Future<?> getObject() {
return object;
}
@Override
public void cancel() {
object.cancel(false);
}
}

View File

@ -0,0 +1,14 @@
package com.viaversion.aas.provider;
import com.viaversion.aas.handler.MinecraftHandler;
import com.viaversion.viaversion.api.connection.UserConnection;
import com.viaversion.viaversion.protocols.base.BaseVersionProvider;
public class AspirinVersionProvider extends BaseVersionProvider {
@Override
public int getClosestServerProtocol(UserConnection connection) throws Exception {
var ver = connection.getChannel().pipeline().get(MinecraftHandler.class).getData().getBackServerVer();
if (ver != null) return ver;
return super.getClosestServerProtocol(connection);
}
}

View File

@ -0,0 +1,33 @@
package com.viaversion.aas.util;
public class StacklessException extends RuntimeException {
public StacklessException() {
super();
}
public StacklessException(String message) {
super(message);
}
public StacklessException(String message, Throwable cause) {
super(message, cause);
}
public StacklessException(Throwable cause) {
super(cause);
}
protected StacklessException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
}
@Override
public String toString() {
return "StacklessException: " + getMessage();
}
@Override
public synchronized Throwable fillInStackTrace() {
return this;
}
}

View File

@ -9,6 +9,7 @@ import com.viaversion.aas.platform.AspirinPlatform
import com.viaversion.aas.web.WebDashboardServer
import com.viaversion.viaversion.ViaManagerImpl
import com.viaversion.viaversion.api.Via
import com.viaversion.viaversion.api.protocol.packet.State
import io.ktor.client.*
import io.ktor.client.engine.java.*
import io.ktor.client.features.*
@ -120,4 +121,8 @@ object AspirinServer {
waitMainFinish()
})
}
fun currentPlayers(): Int {
return Via.getManager().connectionManager.connections.filter { it.protocolInfo.state == State.PLAY }.count()
}
}

View File

@ -265,8 +265,4 @@ fun reverseLookup(address: InetAddress): String {
.asReversed()
.joinToString(".") + ".ip6.arpa"
}
}
fun currentPlayers(): Int {
return Via.getManager().connectionManager.connections.filter { it.protocolInfo.state == State.PLAY }.count()
}

View File

@ -65,15 +65,15 @@ private fun printSplash() {
private fun initVia() {
Via.init(
ViaManagerImpl.builder()
.injector(AspirinInjector)
.loader(AspirinLoader)
.injector(AspirinInjector())
.loader(AspirinLoader())
.commandHandler(ViaAspirinCommand)
.platform(AspirinPlatform).build()
)
MappingDataLoader.enableMappingsCache()
(Via.getManager() as ViaManagerImpl).init()
AspirinRewind.init(ViaRewindConfigImpl(File("config/viarewind.yml")))
AspirinBackwards.init(File("config/viabackwards"))
AspirinRewind().init(ViaRewindConfigImpl(File("config/viarewind.yml")))
AspirinBackwards().init(File("config/viabackwards"))
ProtocolVersion.register(-2, "AUTO")
registerAspirinProtocols()

View File

@ -1,17 +0,0 @@
package com.viaversion.aas.codec.packet.status
import com.viaversion.aas.codec.packet.Packet
import io.netty.buffer.ByteBuf
import kotlin.properties.Delegates
// Some code based on https://github.com/VelocityPowered/Velocity/tree/dev/1.1.0/proxy/src/main/java/com/velocitypowered/proxy/protocol/packet
class StatusPong : Packet {
var number by Delegates.notNull<Long>()
override fun decode(byteBuf: ByteBuf, protocolVersion: Int) {
number = byteBuf.readLong()
}
override fun encode(byteBuf: ByteBuf, protocolVersion: Int) {
byteBuf.writeLong(number)
}
}

View File

@ -1,16 +0,0 @@
package com.viaversion.aas.codec.packet.status
import com.viaversion.aas.codec.packet.Packet
import com.viaversion.viaversion.api.type.Type
import io.netty.buffer.ByteBuf
class StatusResponse : Packet {
lateinit var json: String
override fun decode(byteBuf: ByteBuf, protocolVersion: Int) {
json = Type.STRING.read(byteBuf)
}
override fun encode(byteBuf: ByteBuf, protocolVersion: Int) {
Type.STRING.write(byteBuf, json)
}
}

View File

@ -1,38 +0,0 @@
package com.viaversion.aas.config
import com.viaversion.viaversion.configuration.AbstractViaConfig
import java.io.File
import java.net.URL
object AspirinViaConfig : AbstractViaConfig(File("config/viaversion.yml")) {
// https://github.com/ViaVersion/ViaFabric/blob/mc-1.16/src/main/java/com/github/creeper123123321/viafabric/platform/VRViaConfig.java
override fun getDefaultConfigURL(): URL = javaClass.classLoader.getResource("assets/viaversion/config.yml")!!
override fun handleConfig(config: Map<String, Any>) {
// Nothing Currently
}
override fun getUnsupportedOptions(): List<String> = UNSUPPORTED
override fun isAntiXRay(): Boolean = false
override fun isItemCache(): Boolean = false
override fun isNMSPlayerTicking(): Boolean = false
override fun is1_12QuickMoveActionFix(): Boolean = false
override fun getBlockConnectionMethod(): String = "packet"
override fun is1_9HitboxFix(): Boolean = false
override fun is1_14HitboxFix(): Boolean = false
// Based on Sponge ViaVersion
private val UNSUPPORTED = listOf(
"anti-xray-patch", "bungee-ping-interval",
"bungee-ping-save", "bungee-servers", "quick-move-action-fix", "nms-player-ticking",
"item-cache", "velocity-ping-interval", "velocity-ping-save", "velocity-servers",
"blockconnection-method", "change-1_9-hitbox", "change-1_14-hitbox", "block-protocols",
"block-disconnect-msg", "reload-disconnect-msg", "max-pps", "max-pps-kick-msg", "tracking-period",
"tracking-warning-pps", "tracking-max-warnings", "tracking-max-kick-msg", "use-new-deathmessages"
)
init {
// Load config
reloadConfig()
}
}

View File

@ -1,42 +0,0 @@
package com.viaversion.aas.handler
import com.viaversion.viaversion.api.connection.UserConnection
import com.viaversion.viaversion.exception.CancelDecoderException
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>() {
override fun decode(ctx: ChannelHandlerContext, bytebuf: ByteBuf, out: MutableList<Any>) {
if (!ctx.channel().isActive) return
if (!info.checkClientboundPacket()) throw CancelDecoderException.generate(null)
if (!info.shouldTransformPacket()) {
out.add(bytebuf.retain())
return
}
val transformedBuf: ByteBuf = ctx.alloc().buffer().writeBytes(bytebuf)
try {
info.transformClientbound(transformedBuf, CancelDecoderException::generate)
out.add(transformedBuf.retain())
} finally {
transformedBuf.release()
}
}
override fun encode(ctx: ChannelHandlerContext, bytebuf: ByteBuf, out: MutableList<Any>) {
if (!ctx.channel().isActive) throw CancelEncoderException.CACHED
if (!info.checkServerboundPacket()) throw CancelEncoderException.generate(null)
if (!info.shouldTransformPacket()) {
out.add(bytebuf.retain())
return
}
val transformedBuf: ByteBuf = ctx.alloc().buffer().writeBytes(bytebuf)
try {
info.transformServerbound(transformedBuf, CancelEncoderException::generate)
out.add(transformedBuf.retain())
} finally {
transformedBuf.release()
}
}
}

View File

@ -20,7 +20,7 @@ class ProtocolDetectionState(val future: CompletableFuture<ProtocolVersion>) : M
override fun handlePacket(handler: MinecraftHandler, ctx: ChannelHandlerContext, packet: Packet) {
handler.data.frontChannel.close()
if (packet !is StatusResponse) throw StacklessException("Unexpected packet")
val ver = JsonParser.parseString(packet.json).asJsonObject
val ver = JsonParser.parseString(packet.msg).asJsonObject
.getAsJsonObject("version")
.get("protocol").asInt.parseProtocol()
future.complete(ver)

View File

@ -164,7 +164,7 @@ class LoginState : MinecraftConnectionState {
started = true
VIAaaSConfig.maxPlayers?.let {
if (currentPlayers() >= it) throw StacklessException("Instance is full!")
if (AspirinServer.currentPlayers() >= it) throw StacklessException("Instance is full!")
}
frontName = loginStart.username

View File

@ -3,11 +3,11 @@ 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.AspirinServer
import com.viaversion.aas.codec.packet.Packet
import com.viaversion.aas.codec.packet.UnknownPacket
import com.viaversion.aas.codec.packet.status.StatusResponse
import com.viaversion.aas.config.VIAaaSConfig
import com.viaversion.aas.currentPlayers
import com.viaversion.aas.handler.MinecraftHandler
import com.viaversion.aas.handler.forward
import com.viaversion.aas.parseProtocol
@ -33,7 +33,7 @@ object StatusState : MinecraftConnectionState {
private fun modifyResponse(handler: MinecraftHandler, packet: StatusResponse) {
if (VIAaaSConfig.showVersionPing) {
val parsed = JsonParser.parseString(packet.json).asJsonObject
val parsed = JsonParser.parseString(packet.msg).asJsonObject
val players = parsed.getAsJsonObject("players") ?: JsonObject().also { parsed.add("players", it) }
val sample = players.getAsJsonArray("sample") ?: JsonArray().also { players.add("sample", it) }
sample.add(JsonObject().also {
@ -46,7 +46,7 @@ object StatusState : MinecraftConnectionState {
)
})
packet.json = parsed.toString()
packet.msg = parsed.toString()
}
}
@ -54,14 +54,14 @@ object StatusState : MinecraftConnectionState {
super.disconnect(handler, msg)
val packet = StatusResponse()
packet.json = JsonObject().also {
packet.msg = JsonObject().also {
it.add("version", JsonObject().also {
it.addProperty("name", "VIAaaS")
it.addProperty("protocol", handler.data.frontVer)
})
it.add("players", JsonObject().also {
it.addProperty("max", VIAaaSConfig.maxPlayers ?: -1)
it.addProperty("online", currentPlayers())
it.addProperty("online", AspirinServer.currentPlayers())
it.add("sample", JsonArray())
})
it.add("description", JsonObject().also {

View File

@ -1,11 +0,0 @@
package com.viaversion.aas.platform
import com.viaversion.viabackwards.api.ViaBackwardsPlatform
import java.io.File
import java.util.logging.Logger
object AspirinBackwards : ViaBackwardsPlatform {
override fun getDataFolder() = File("config/viabackwards")
override fun getLogger() = Logger.getLogger("ViaBackwards")
override fun disable() = Unit
}

View File

@ -1,27 +0,0 @@
package com.viaversion.aas.platform
import com.viaversion.viaversion.api.platform.ViaInjector
import com.viaversion.viaversion.api.protocol.version.ProtocolVersion
import com.viaversion.viaversion.libs.fastutil.ints.IntLinkedOpenHashSet
import com.viaversion.viaversion.libs.fastutil.ints.IntSortedSet
import com.viaversion.viaversion.libs.gson.JsonObject
object AspirinInjector : ViaInjector {
override fun getEncoderName(): String = "via-codec"
override fun getDecoderName() = "via-codec"
override fun getDump(): JsonObject = JsonObject()
override fun getServerProtocolVersions(): IntSortedSet = IntLinkedOpenHashSet(
sortedSetOf(
ProtocolVersion.getProtocols().maxOf { it.originalVersion },
ProtocolVersion.v1_7_1.version
)
)
override fun getServerProtocolVersion(): Int = ProtocolVersion.v1_7_1.version
override fun uninject() {
}
override fun inject() {
}
}

View File

@ -1,17 +0,0 @@
package com.viaversion.aas.platform
import com.viaversion.aas.provider.AspirinVersionProvider
import com.viaversion.viaversion.api.Via
import com.viaversion.viaversion.api.platform.ViaPlatformLoader
import com.viaversion.viaversion.api.protocol.version.VersionProvider
import com.viaversion.viaversion.protocols.protocol1_9to1_8.providers.MovementTransmitterProvider
import com.viaversion.viaversion.velocity.providers.VelocityMovementTransmitter
object AspirinLoader : ViaPlatformLoader {
override fun unload() = Unit
override fun load() {
Via.getManager().providers.use(MovementTransmitterProvider::class.java, VelocityMovementTransmitter())
Via.getManager().providers.use(VersionProvider::class.java, AspirinVersionProvider)
}
}

View File

@ -4,8 +4,6 @@ import com.google.common.util.concurrent.ThreadFactoryBuilder
import com.viaversion.aas.AspirinServer
import com.viaversion.aas.config.AspirinViaConfig
import com.viaversion.viaversion.api.command.ViaCommandSender
import com.viaversion.viaversion.api.configuration.ConfigurationProvider
import com.viaversion.viaversion.api.configuration.ViaVersionConfig
import com.viaversion.viaversion.api.platform.ViaPlatform
import com.viaversion.viaversion.libs.gson.JsonObject
import com.viaversion.viaversion.util.VersionInfo
@ -18,36 +16,41 @@ import java.util.concurrent.TimeUnit
import java.util.logging.Logger
object AspirinPlatform : ViaPlatform<UUID> {
val executor = Executors.newCachedThreadPool(ThreadFactoryBuilder().setNameFormat("Via-%d").setDaemon(true).build())
private val conf = AspirinViaConfig()
val executor = Executors.newCachedThreadPool(
ThreadFactoryBuilder()
.setNameFormat("Via-%d")
.setDaemon(true)
.build()
)
val eventLoop = DefaultEventLoop(executor)
private val logger = Logger.getLogger("ViaVersion")
init {
eventLoop.execute {
AspirinServer.waitMainStart()
}
eventLoop.execute(AspirinServer::waitMainStart)
}
override fun sendMessage(p0: UUID, p1: String) = Unit
override fun onReload() = Unit
override fun runSync(runnable: Runnable): AspirinTask = AspirinTask(eventLoop.submit(runnable))
override fun runSync(p0: Runnable, p1: Long): AspirinTask =
AspirinTask(eventLoop.schedule(p0, p1 * 50L, TimeUnit.MILLISECONDS))
override fun runSync(runnable: Runnable) = FutureTask(eventLoop.submit(runnable))
override fun runSync(p0: Runnable, p1: Long) =
FutureTask(eventLoop.schedule(p0, p1 * 50L, TimeUnit.MILLISECONDS))
override fun runRepeatingSync(p0: Runnable, p1: Long): AspirinTask =
AspirinTask(eventLoop.scheduleAtFixedRate(p0, 0, p1 * 50L, TimeUnit.MILLISECONDS))
override fun runRepeatingSync(p0: Runnable, p1: Long) =
FutureTask(eventLoop.scheduleAtFixedRate(p0, 0, p1 * 50L, TimeUnit.MILLISECONDS))
override fun getDump() = JsonObject()
override fun kickPlayer(p0: UUID, p1: String) = false
override fun getApi() = AspirinViaAPI
override fun getApi() = AspirinApi()
override fun getDataFolder() = File("viaversion")
override fun getConf(): ViaVersionConfig = AspirinViaConfig
override fun runAsync(p0: Runnable): AspirinTask = AspirinTask(CompletableFuture.runAsync(p0, executor))
override fun getLogger() = Logger.getLogger("ViaVersion")
override fun getOnlinePlayers(): Array<ViaCommandSender> = arrayOf()
override fun getConf() = conf
override fun runAsync(p0: Runnable) = FutureTask(CompletableFuture.runAsync(p0, executor))
override fun getLogger() = logger
override fun getOnlinePlayers(): Array<ViaCommandSender> = emptyArray()
override fun isPluginEnabled() = true
override fun getConfigurationProvider(): ConfigurationProvider = AspirinViaConfig
override fun getConfigurationProvider() = conf
override fun getPlatformName() = "VIAaaS"
override fun getPlatformVersion(): String = AspirinServer.version
override fun getPlatformVersion() = AspirinServer.version
override fun getPluginVersion() = VersionInfo.VERSION
override fun isOldClientsAllowed() = true
override fun isProxy() = true

View File

@ -1,8 +0,0 @@
package com.viaversion.aas.platform
import de.gerrygames.viarewind.api.ViaRewindPlatform
import java.util.logging.Logger
object AspirinRewind : ViaRewindPlatform {
override fun getLogger() = Logger.getLogger("ViaRewind")
}

View File

@ -1,12 +0,0 @@
package com.viaversion.aas.platform
import com.viaversion.viaversion.api.platform.PlatformTask
import java.util.concurrent.Future
class AspirinTask(val obj: Future<*>) : PlatformTask<Any> {
override fun getObject(): Any = obj
override fun cancel() {
obj.cancel(false);
}
}

View File

@ -1,10 +0,0 @@
package com.viaversion.aas.platform
import com.viaversion.viaversion.ViaAPIBase
import io.netty.buffer.ByteBuf
import java.util.*
object AspirinViaAPI : ViaAPIBase<UUID>() {
override fun getPlayerVersion(p0: UUID): Int = super.getPlayerVersion(p0)
override fun sendRawPacket(p0: UUID, p1: ByteBuf) = super.sendRawPacket(p0, p1)
}

View File

@ -1,13 +0,0 @@
package com.viaversion.aas.provider
import com.viaversion.aas.handler.MinecraftHandler
import com.viaversion.viaversion.api.connection.UserConnection
import com.viaversion.viaversion.protocols.base.BaseVersionProvider
object AspirinVersionProvider : BaseVersionProvider() {
override fun getClosestServerProtocol(connection: UserConnection): Int {
val ver = connection.channel!!.pipeline().get(MinecraftHandler::class.java).data.backServerVer
if (ver != null) return ver
return super.getClosestServerProtocol(connection)
}
}

View File

@ -1,17 +0,0 @@
package com.viaversion.aas.util
class StacklessException : RuntimeException {
constructor() : super()
constructor(message: String?) : super(message)
constructor(message: String?, cause: Throwable?) : super(message, cause)
constructor(cause: Throwable?) : super(cause)
constructor(message: String?, cause: Throwable?, enableSuppression: Boolean, writableStackTrace: Boolean) : super(
message,
cause,
enableSuppression,
writableStackTrace
)
override fun fillInStackTrace(): Throwable = this
override fun toString(): String = "StacklessException: $message"
}

View File

@ -8,11 +8,12 @@ import com.google.common.cache.CacheLoader
import com.google.common.collect.MultimapBuilder
import com.google.common.collect.Multimaps
import com.google.gson.JsonObject
import com.viaversion.aas.*
import com.viaversion.aas.AspirinServer
import com.viaversion.aas.config.VIAaaSConfig
import com.viaversion.aas.parseUndashedId
import com.viaversion.aas.reverseLookup
import com.viaversion.aas.util.StacklessException
import io.ipinfo.api.IPInfo
import io.ipinfo.api.model.IPResponse
import com.viaversion.aas.webLogger
import io.ktor.client.request.*
import io.ktor.http.cio.websocket.*
import io.ktor.server.netty.*
@ -35,7 +36,6 @@ import kotlin.coroutines.coroutineContext
class WebDashboardServer {
// I don't think i'll need more than 1k/day
val ipInfo = IPInfo.builder().setToken("").build()
val clients = ConcurrentHashMap<WebSocketSession, WebClient>()
val jwtAlgorithm = Algorithm.HMAC256(VIAaaSConfig.jwtSecret)
@ -87,24 +87,25 @@ class WebDashboardServer {
): CompletableFuture<Unit> {
val future = sessionHashCallbacks.get(hash)
if (!listeners.containsKey(id)) {
future.completeExceptionally(StacklessException("No browser listening"))
future.completeExceptionally(StacklessException("Username isn't listened. Use web auth."))
} else {
CoroutineScope(coroutineContext).apply {
launch(Dispatchers.IO) {
var info: IPResponse? = null
var info: JsonObject? = null
var ptr: String? = null
(address as? InetSocketAddress)?.let {
if (address is InetSocketAddress) {
try {
val cleanedIp = address.hostString.substringBefore("%")
val ipLookup = async(Dispatchers.IO) {
ipInfo.lookupIP(it.address!!.hostAddress!!.substringBefore("%"))
AspirinServer.httpClient.get<JsonObject>("https://ipinfo.io/$cleanedIp")
}
val dnsQuery = AspirinServer.dnsResolver.resolveAll(
DefaultDnsQuestion(reverseLookup(it.address), DnsRecordType.PTR)
)
val dnsQuery = AspirinServer.dnsResolver
.resolveAll(DefaultDnsQuestion(reverseLookup(address.address), DnsRecordType.PTR))
info = ipLookup.await()
ptr = dnsQuery.suspendAwait().let {
try {
it.firstNotNullOfOrNull { it as? DnsPtrRecord }?.hostname()
?.removeSuffix(".")
} finally {
it.forEach { ReferenceCountUtil.release(it) }
}
@ -112,8 +113,11 @@ class WebDashboardServer {
} catch (ignored: Exception) {
}
}
val msg = "Requester: $id $address ($ptr) (${info?.org}, ${info?.city}, ${info?.region}, " +
"${info?.countryCode})\nBackend: $backAddress"
val ipString =
"${info?.get("org")?.asString}, ${info?.get("country")?.asString}, ${info?.get("region")?.asString}, ${
info?.get("city")?.asString
}"
val msg = "Requester: $id $address ($ptr) ($ipString)\nBackend: $backAddress"
listeners[id]?.forEach {
it.ws.send(JsonObject().also {
it.addProperty("action", "session_hash_request")