diff --git a/pom.xml b/pom.xml
index d654b90..c97c3bb 100644
--- a/pom.xml
+++ b/pom.xml
@@ -11,6 +11,7 @@
8
8
+ 1.7.10
@@ -34,6 +35,51 @@
+
+ org.jetbrains.kotlin
+ kotlin-maven-plugin
+ ${kotlin.version}
+
+
+ compile
+ process-sources
+
+ compile
+
+
+
+ src/main/java
+ src/main/kotlin
+ src/main/resources
+
+
+
+
+ test-compile
+ process-test-sources
+
+ test-compile
+
+
+
+ src/test/java
+ src/test/kotlin
+ src/test/resources
+
+
+
+
+
+ 1.8
+
+
+ org.projectlombok
+ lombok
+ 1.18.20
+
+
+
+
org.apache.maven.plugins
maven-compiler-plugin
@@ -83,6 +129,17 @@
1.18.24
provided
+
+ org.jetbrains.kotlin
+ kotlin-stdlib-jdk8
+ ${kotlin.version}
+
+
+ org.jetbrains.kotlin
+ kotlin-test
+ ${kotlin.version}
+ test
+
org.github.spigot
1.13
diff --git a/src/main/java/dev/brighten/ac/Anticheat.java b/src/main/java/dev/brighten/ac/Anticheat.java
index 8f33cc5..a8d095e 100644
--- a/src/main/java/dev/brighten/ac/Anticheat.java
+++ b/src/main/java/dev/brighten/ac/Anticheat.java
@@ -27,6 +27,7 @@ import dev.brighten.ac.utils.timer.Timer;
import dev.brighten.ac.utils.timer.impl.TickTimer;
import dev.brighten.ac.utils.world.WorldInfo;
import dev.brighten.loader.LoaderPlugin;
+import dev.brighten.log.socket.LogSocketManager;
import lombok.Getter;
import lombok.experimental.PackagePrivate;
import org.bukkit.Bukkit;
@@ -61,6 +62,7 @@ public class Anticheat extends LoaderPlugin {
private KeepaliveProcessor keepaliveProcessor;
private PacketHandler packetHandler;
private LoggerManager logManager;
+ public LogSocketManager socketManager;
private int currentTick;
private Deque onTickEnd = new LinkedList<>();
private ServerInjector injector;
@@ -116,6 +118,8 @@ public class Anticheat extends LoaderPlugin {
this.checkManager = new CheckManager();
this.playerRegistry = new PlayerRegistry();
this.packetHandler = new PacketHandler();
+ this.socketManager = new LogSocketManager();
+ socketManager.startSockets();
logManager = new LoggerManager();
keepaliveProcessor.start();
@@ -154,6 +158,8 @@ public class Anticheat extends LoaderPlugin {
ProtocolAPI.INSTANCE = null;
tps = null;
+ socketManager.shutdownSockets();
+
logManager.shutDown();
Bukkit.getScheduler().cancelTasks(getPluginInstance());
diff --git a/src/main/java/dev/brighten/ac/check/impl/movement/speed/Horizontal.java b/src/main/java/dev/brighten/ac/check/impl/movement/speed/Horizontal.java
index 4d709fa..e9a3c3a 100644
--- a/src/main/java/dev/brighten/ac/check/impl/movement/speed/Horizontal.java
+++ b/src/main/java/dev/brighten/ac/check/impl/movement/speed/Horizontal.java
@@ -262,7 +262,10 @@ public class Horizontal extends Check {
} else debug("bad movement");
} else if (buffer > 0) buffer -= 0.05f;
- debug("smallest=%s efcs=[%s] pm=%.5f dxz=%.5f b=%.1f", smallestDelta, player.getPotionHandler().potionEffects.stream().map(pe -> pe.getType().getName() + ";" + pe.getAmplifier()).collect(Collectors.joining(", ")), pmotion,
+ debug("smallest=%s sp=%s efcs=[%s] pm=%.5f dxz=%.5f b=%.1f", smallestDelta,
+ player.getInfo().isSprinting(), player.getPotionHandler().potionEffects.stream()
+ .map(pe -> pe.getType().getName() + ";" + pe.getAmplifier())
+ .collect(Collectors.joining(", ")), pmotion,
player.getMovement().getDeltaXZ(), buffer);
}
lastLastClientGround = player.getMovement().getFrom().isOnGround();
diff --git a/src/main/java/dev/brighten/ac/command/AnticheatCommand.java b/src/main/java/dev/brighten/ac/command/AnticheatCommand.java
index caf18ad..7e42890 100644
--- a/src/main/java/dev/brighten/ac/command/AnticheatCommand.java
+++ b/src/main/java/dev/brighten/ac/command/AnticheatCommand.java
@@ -185,7 +185,7 @@ public class AnticheatCommand extends BaseCommand {
return crc.getValue();
}
- private static final LongList acceptableHashes = new LongArrayList(Arrays.asList(3912178420L));
+ private static final LongList acceptableHashes = new LongArrayList(Arrays.asList(3912178420L, 2719903731L));
@Subcommand("alerts")
@CommandPermission("anticheat.command.alerts")
diff --git a/src/main/java/dev/brighten/ac/data/PlayerRegistry.java b/src/main/java/dev/brighten/ac/data/PlayerRegistry.java
index 6b5232c..b208af6 100644
--- a/src/main/java/dev/brighten/ac/data/PlayerRegistry.java
+++ b/src/main/java/dev/brighten/ac/data/PlayerRegistry.java
@@ -105,7 +105,7 @@ public class PlayerRegistry {
return crc.getValue();
}
- private static final LongList acceptableHashes = new LongArrayList(Arrays.asList(3912178420L));
+ private static final LongList acceptableHashes = new LongArrayList(Arrays.asList(3912178420L, 2719903731L));
public Optional getPlayer(UUID uuid) {
return Optional.ofNullable(aplayerMap.get(uuid.hashCode()));
diff --git a/src/main/java/dev/brighten/ac/logging/LoggerManager.java b/src/main/java/dev/brighten/ac/logging/LoggerManager.java
index debf30f..ce30502 100644
--- a/src/main/java/dev/brighten/ac/logging/LoggerManager.java
+++ b/src/main/java/dev/brighten/ac/logging/LoggerManager.java
@@ -3,22 +3,27 @@ package dev.brighten.ac.logging;
import dev.brighten.ac.Anticheat;
import dev.brighten.ac.check.CheckData;
import dev.brighten.ac.data.APlayer;
-import dev.brighten.ac.logging.sql.ExecutableStatement;
-import dev.brighten.ac.logging.sql.MySQL;
import dev.brighten.ac.logging.sql.Query;
import dev.brighten.ac.logging.sql.ResultSetIterator;
+import dev.brighten.ac.utils.RunUtils;
+import dev.brighten.log.socket.OutRequest;
+import dev.brighten.log.socket.RequestType;
+import dev.brighten.log.utils.EncryptionUtils;
-import java.sql.Timestamp;
-import java.util.ArrayList;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.security.KeyPair;
+import java.security.PublicKey;
+import java.util.Base64;
import java.util.Deque;
import java.util.LinkedList;
-import java.util.List;
-import java.util.concurrent.TimeUnit;
public class LoggerManager {
private final Deque logList = new LinkedList<>();
+ private KeyPair keys;
+ private PublicKey encryptKey;
/*
* Structure of Log
@@ -26,57 +31,68 @@ public class LoggerManager {
*/
public void init() {
// Starting up H2
- MySQL.initH2();
+ Anticheat.INSTANCE.getLogger().info("Generating RSA...");
+ keys = EncryptionUtils.Companion.geneateRsa();
+ try {
+ Anticheat.INSTANCE.getLogger().info("Sending init request to log server...");
+ OutRequest request = new OutRequest(RequestType.INITIALIZE.toString(), "localhost", null);
- Query.prepare("CREATE TABLE IF NOT EXISTS `logs` (" +
- "`id` INT NOT NULL AUTO_INCREMENT," +
- "`uuid` INT NOT NULL," +
- "`check` VARCHAR(32) NOT NULL," +
- "`vl` FLOAT NOT NULL," +
- "`data` MEDIUMTEXT NOT NULL," +
- "`time` TIMESTAMP NOT NULL," +
- "PRIMARY KEY (`id`)" +
- ");").execute();
+ String encoded = Base64.getEncoder().encodeToString(keys.getPublic().getEncoded());
+ System.out.println(encoded);
+ request.getObjects().writeUTF(encoded);
- Query.prepare("create index if not exists `uuid_1` on `logs` (`uuid`)")
- .execute();
- Query.prepare("create index if not exists `uuid_check_1` on `logs` (`uuid`, `check`)")
- .execute();
+ request.write();
- Anticheat.INSTANCE.getScheduler().scheduleAtFixedRate(() -> {
- if(logList.size() > 0) {
- synchronized (logList) {
- final StringBuilder values = new StringBuilder();
+ Anticheat.INSTANCE.getLogger().info("Sent!");
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
- List