mirror of
https://github.com/ViaVersion/VIAaaS.git
synced 2024-10-01 05:08:08 +02:00
more java code, remove ipinfo lib
This commit is contained in:
parent
ec5a934d94
commit
aadfba6bd0
@ -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
|
||||
|
@ -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
|
||||
*/
|
||||
|
@ -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 {
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
@ -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 {
|
||||
}
|
||||
|
@ -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 {
|
||||
}
|
||||
|
@ -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 {
|
||||
}
|
||||
|
@ -0,0 +1,6 @@
|
||||
package com.viaversion.aas.codec.packet.status;
|
||||
|
||||
import com.viaversion.aas.codec.packet.common.AbstractPing;
|
||||
|
||||
public class StatusPong extends AbstractPing {
|
||||
}
|
@ -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 {
|
||||
}
|
||||
|
@ -0,0 +1,6 @@
|
||||
package com.viaversion.aas.codec.packet.status;
|
||||
|
||||
import com.viaversion.aas.codec.packet.common.AbstractSingleMessage;
|
||||
|
||||
public class StatusResponse extends AbstractSingleMessage {
|
||||
}
|
@ -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"
|
||||
);
|
||||
}
|
||||
}
|
52
src/main/java/com/viaversion/aas/handler/ViaCodec.java
Normal file
52
src/main/java/com/viaversion/aas/handler/ViaCodec.java
Normal 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();
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,8 @@
|
||||
package com.viaversion.aas.platform;
|
||||
|
||||
import com.viaversion.viaversion.ViaAPIBase;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
public class AspirinApi extends ViaAPIBase<UUID> {
|
||||
}
|
@ -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");
|
||||
}
|
||||
}
|
@ -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;
|
||||
}
|
||||
}
|
20
src/main/java/com/viaversion/aas/platform/AspirinLoader.java
Normal file
20
src/main/java/com/viaversion/aas/platform/AspirinLoader.java
Normal 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() {
|
||||
}
|
||||
}
|
13
src/main/java/com/viaversion/aas/platform/AspirinRewind.java
Normal file
13
src/main/java/com/viaversion/aas/platform/AspirinRewind.java
Normal 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;
|
||||
}
|
||||
}
|
25
src/main/java/com/viaversion/aas/platform/FutureTask.java
Normal file
25
src/main/java/com/viaversion/aas/platform/FutureTask.java
Normal 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);
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
@ -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;
|
||||
}
|
||||
}
|
@ -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()
|
||||
}
|
||||
}
|
@ -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()
|
||||
}
|
@ -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()
|
||||
|
@ -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)
|
||||
}
|
||||
}
|
@ -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)
|
||||
}
|
||||
}
|
@ -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()
|
||||
}
|
||||
}
|
@ -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()
|
||||
}
|
||||
}
|
||||
}
|
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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 {
|
||||
|
@ -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
|
||||
}
|
@ -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() {
|
||||
}
|
||||
}
|
@ -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)
|
||||
}
|
||||
}
|
@ -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
|
||||
|
@ -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")
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
@ -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)
|
||||
}
|
@ -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)
|
||||
}
|
||||
}
|
@ -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"
|
||||
}
|
@ -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")
|
||||
|
Loading…
Reference in New Issue
Block a user