diff --git a/Anticheat/pom.xml b/Anticheat/pom.xml
index 6fbbab8..0507987 100644
--- a/Anticheat/pom.xml
+++ b/Anticheat/pom.xml
@@ -83,7 +83,7 @@
shade
- false
+ true
co.aikar
diff --git a/Anticheat/src/main/java/dev/brighten/ac/Anticheat.java b/Anticheat/src/main/java/dev/brighten/ac/Anticheat.java
index 0647c42..04f9737 100644
--- a/Anticheat/src/main/java/dev/brighten/ac/Anticheat.java
+++ b/Anticheat/src/main/java/dev/brighten/ac/Anticheat.java
@@ -2,7 +2,6 @@ package dev.brighten.ac;
import co.aikar.commands.*;
import com.github.retrooper.packetevents.PacketEvents;
-import com.github.retrooper.packetevents.PacketEventsAPI;
import com.github.retrooper.packetevents.event.PacketListenerPriority;
import com.google.common.util.concurrent.ThreadFactoryBuilder;
import dev.brighten.ac.api.AnticheatAPI;
@@ -13,8 +12,6 @@ import dev.brighten.ac.data.APlayer;
import dev.brighten.ac.data.PlayerRegistry;
import dev.brighten.ac.data.info.CheckHandler;
import dev.brighten.ac.depends.LibraryLoader;
-import dev.brighten.ac.depends.MavenLibrary;
-import dev.brighten.ac.depends.Repository;
import dev.brighten.ac.handler.BBRevealHandler;
import dev.brighten.ac.handler.PacketHandler;
import dev.brighten.ac.handler.entity.FakeEntityTracker;
@@ -194,7 +191,6 @@ public class Anticheat extends JavaPlugin {
this.playerRegistry = new PlayerRegistry();
this.keepaliveProcessor = new KeepaliveProcessor();
- keepaliveProcessor.start();
Bukkit.getOnlinePlayers().forEach(playerRegistry::generate);
this.packetHandler = new PacketHandler();
@@ -243,7 +239,6 @@ public class Anticheat extends JavaPlugin {
PacketEvents.getAPI().terminate();
- keepaliveProcessor.stop();
keepaliveProcessor.keepAlives.clear();
diff --git a/Anticheat/src/main/java/dev/brighten/ac/check/Check.java b/Anticheat/src/main/java/dev/brighten/ac/check/Check.java
index 49dbbfe..a8fc81a 100644
--- a/Anticheat/src/main/java/dev/brighten/ac/check/Check.java
+++ b/Anticheat/src/main/java/dev/brighten/ac/check/Check.java
@@ -97,6 +97,8 @@ public class Check implements ECheck {
}
public void correctMovement(KLocation toLoc) {
+ if(!isCancellable()) return;
+
CancelResult result = CancelResult.builder().cancelled(false).build();
for (AnticheatEvent event : AnticheatAPI.INSTANCE.getAllEvents()) {
diff --git a/Anticheat/src/main/java/dev/brighten/ac/check/CheckManager.java b/Anticheat/src/main/java/dev/brighten/ac/check/CheckManager.java
index 4c37ac3..2f21b22 100644
--- a/Anticheat/src/main/java/dev/brighten/ac/check/CheckManager.java
+++ b/Anticheat/src/main/java/dev/brighten/ac/check/CheckManager.java
@@ -14,7 +14,7 @@ import java.util.Optional;
public class CheckManager {
private final Map checkClasses = new HashMap<>();
private final Map idToName = new HashMap<>();
- private final Map, CheckSettings> checkSettings = new HashMap<>();
+ private final Map checkSettings = new HashMap<>();
public CheckManager() {
synchronized (checkClasses) {
for (WrappedClass aClass : new ClassScanner().getClasses(CheckData.class)) {
@@ -38,10 +38,7 @@ public class CheckManager {
generateConfigSettings(checkData);
settings = Optional.of(CheckSettings.settingsFromData(checkData));
}
-
- checkSettings.put(checkClass.getParent(), settings.get());
-
- Anticheat.INSTANCE.alog(true, "&7Adding check to CheckManager: " + checkData.name());
+ checkSettings.put(checkData.checkId(), settings.get());
checkClasses.put(checkData.name(), check);
idToName.put(checkData.checkId(), checkData.name());
@@ -62,8 +59,8 @@ public class CheckManager {
return Optional.empty();
}
- public CheckSettings getCheckSettings(Class extends Check> checkClass) {
- return checkSettings.get(checkClass);
+ public CheckSettings getCheckSettings(String checkId) {
+ return checkSettings.get(checkId);
}
private void generateConfigSettings(CheckData data) {
diff --git a/Anticheat/src/main/java/dev/brighten/ac/check/CheckSettings.java b/Anticheat/src/main/java/dev/brighten/ac/check/CheckSettings.java
index 55281b8..97be5a5 100644
--- a/Anticheat/src/main/java/dev/brighten/ac/check/CheckSettings.java
+++ b/Anticheat/src/main/java/dev/brighten/ac/check/CheckSettings.java
@@ -18,4 +18,14 @@ public class CheckSettings {
.punishVl(data.punishVl())
.build();
}
+
+ @Override
+ public String toString() {
+ return "CheckSettings{" +
+ "enabled=" + enabled +
+ ", punishable=" + punishable +
+ ", cancellable=" + cancellable +
+ ", punishVl=" + punishVl +
+ '}';
+ }
}
diff --git a/Anticheat/src/main/java/dev/brighten/ac/check/impl/combat/Hitbox.java b/Anticheat/src/main/java/dev/brighten/ac/check/impl/combat/Hitbox.java
index dfc4d00..dc7ced8 100644
--- a/Anticheat/src/main/java/dev/brighten/ac/check/impl/combat/Hitbox.java
+++ b/Anticheat/src/main/java/dev/brighten/ac/check/impl/combat/Hitbox.java
@@ -73,7 +73,7 @@ public class Hitbox extends Check {
final Tuple eloc = optionalEloc.get();
- final KLocation to = target.two;
+ final KLocation to = target.two.clone();
if(eloc.one.x == 0 && eloc.one.y == 0 & eloc.one.z == 0) {
return;
diff --git a/Anticheat/src/main/java/dev/brighten/ac/check/impl/movement/Phase.java b/Anticheat/src/main/java/dev/brighten/ac/check/impl/movement/Phase.java
index 67e5a1c..5de995c 100644
--- a/Anticheat/src/main/java/dev/brighten/ac/check/impl/movement/Phase.java
+++ b/Anticheat/src/main/java/dev/brighten/ac/check/impl/movement/Phase.java
@@ -87,7 +87,9 @@ public class Phase extends Check {
POSITIONS.clear();
} else if(teleportLoc != null) {
final Location finalLoc = teleportLoc.clone(); // This is to make sure it isn't set null later.
- Anticheat.INSTANCE.getRunUtils().task(() -> player.getBukkitPlayer().teleport(finalLoc));
+ if(isCancellable()) {
+ Anticheat.INSTANCE.getRunUtils().task(() -> player.getBukkitPlayer().teleport(finalLoc));
+ }
return true;
}
@@ -97,7 +99,9 @@ public class Phase extends Check {
final Location fromLoc = player.getMovement().getFrom().getLoc()
.toLocation(player.getBukkitPlayer().getWorld());
- Anticheat.INSTANCE.getRunUtils().task(() -> player.getBukkitPlayer().teleport(fromLoc));
+ if(isCancellable()) {
+ Anticheat.INSTANCE.getRunUtils().task(() -> player.getBukkitPlayer().teleport(fromLoc));
+ }
return true;
}
@@ -136,11 +140,13 @@ public class Phase extends Check {
double totalDelta = dx + dy + dz;
if(totalDelta > 0.0001) {
- Anticheat.INSTANCE.getRunUtils().task(() -> {
- teleportLoc = calculatedTo
- .toLocation(player.getBukkitPlayer().getWorld());
- player.getBukkitPlayer().teleport(teleportLoc);
- });
+ if(isCancellable()) {
+ Anticheat.INSTANCE.getRunUtils().task(() -> {
+ teleportLoc = calculatedTo
+ .toLocation(player.getBukkitPlayer().getWorld());
+ player.getBukkitPlayer().teleport(teleportLoc);
+ });
+ }
flag("x=%.4f, y=%.4f, z=%.4f", dx, dy, dz);
}
diff --git a/Anticheat/src/main/java/dev/brighten/ac/check/impl/world/BlockA.java b/Anticheat/src/main/java/dev/brighten/ac/check/impl/world/BlockA.java
index 9d0b094..3c96f59 100644
--- a/Anticheat/src/main/java/dev/brighten/ac/check/impl/world/BlockA.java
+++ b/Anticheat/src/main/java/dev/brighten/ac/check/impl/world/BlockA.java
@@ -37,7 +37,7 @@ public class BlockA extends Check {
WrappedBlock block = player.getBlockUpdateHandler().getBlock(loc);
- CollisionBox box = BlockData.getData(block.getType()).getBox(block, player.getPlayerVersion());
+ CollisionBox box = BlockData.getData(block.getType()).getBox(player, block, player.getPlayerVersion());
debug(packet.getBlockPosition().toString());
if(!(box instanceof final SimpleCollisionBox simpleBox)) {
diff --git a/Anticheat/src/main/java/dev/brighten/ac/command/LogsCommand.java b/Anticheat/src/main/java/dev/brighten/ac/command/LogsCommand.java
index 2ffca70..5296917 100644
--- a/Anticheat/src/main/java/dev/brighten/ac/command/LogsCommand.java
+++ b/Anticheat/src/main/java/dev/brighten/ac/command/LogsCommand.java
@@ -168,9 +168,7 @@ public class LogsCommand extends BaseCommand {
for (String key : violations.keySet()) {
if (Anticheat.INSTANCE.getCheckManager().isCheck(key)) {
CheckSettings checkData = Anticheat.INSTANCE.getCheckManager()
- .getCheckSettings(Anticheat.INSTANCE.getCheckManager().getCheckClasses()
- .get(Anticheat.INSTANCE.getCheckManager().getIdToName().get(key))
- .getCheckClass().getParent());
+ .getCheckSettings(key);
int vl = violations.get(key), maxVL = checkData.getPunishVl();
boolean developer = false;
diff --git a/Anticheat/src/main/java/dev/brighten/ac/data/info/CheckHandler.java b/Anticheat/src/main/java/dev/brighten/ac/data/info/CheckHandler.java
index c334939..cf49561 100644
--- a/Anticheat/src/main/java/dev/brighten/ac/data/info/CheckHandler.java
+++ b/Anticheat/src/main/java/dev/brighten/ac/data/info/CheckHandler.java
@@ -67,16 +67,22 @@ public class CheckHandler {
for (CheckStatic toHook : TO_HOOK) {
KListener listener = toHook.playerInit(player);
+
+ CheckData data = toHook.getCheckClass().getAnnotation(CheckData.class);
+
+ String checkId = data != null ? data.checkId() : UUID.randomUUID().toString();
synchronized (EVENTS) {
for (Tuple> tuple : toHook.getActions()) {
WAction> action = tuple.one.get(listener);
EVENTS.compute(tuple.two, (packetClass, array) -> {
if (array == null) {
- return new ActionStore[] {new ActionStore(action, toHook.getCheckClass().getParent())};
+ return new ActionStore[] {new ActionStore(action,
+ toHook.getCheckClass().getParent(), checkId)};
} else {
ActionStore[] newArray = Arrays.copyOf(array, array.length + 1);
- newArray[array.length] = new ActionStore(action, toHook.getCheckClass().getParent());
+ newArray[array.length] = new ActionStore(action,
+ toHook.getCheckClass().getParent(), checkId);
return newArray;
}
});
@@ -88,10 +94,12 @@ public class CheckHandler {
EVENTS_TIMESTAMP.compute(tuple.two, (packetClass, array) -> {
if (array == null) {
- return new TimedActionStore[] {new TimedActionStore(action, toHook.getCheckClass().getParent())};
+ return new TimedActionStore[] {new TimedActionStore(action,
+ toHook.getCheckClass().getParent(), checkId)};
} else {
TimedActionStore>[] newArray = Arrays.copyOf(array, array.length + 1);
- newArray[array.length] = new TimedActionStore(action, toHook.getCheckClass().getParent());
+ newArray[array.length] = new TimedActionStore(action,
+ toHook.getCheckClass().getParent(), checkId);
return newArray;
}
});
@@ -105,10 +113,12 @@ public class CheckHandler {
EVENTS_CANCELLABLE.compute(tuple.two, (packetClass, array) -> {
if (array == null) {
- return new CancellableActionStore[] {new CancellableActionStore(action, toHook.getCheckClass().getParent())};
+ return new CancellableActionStore[] {new CancellableActionStore(action,
+ toHook.getCheckClass().getParent(), checkId)};
} else {
CancellableActionStore[] newArray = Arrays.copyOf(array, array.length + 1);
- newArray[array.length] = new CancellableActionStore(action, toHook.getCheckClass().getParent());
+ newArray[array.length] = new CancellableActionStore(action,
+ toHook.getCheckClass().getParent(), checkId);
return newArray;
}
});
@@ -118,7 +128,7 @@ public class CheckHandler {
for (CheckStatic checkClass : Anticheat.INSTANCE.getCheckManager().getCheckClasses().values()) {
CheckData data = checkClass.getCheckClass().getAnnotation(CheckData.class);
-
+ String checkId = data != null ? data.checkId() : UUID.randomUUID().toString();
//Version checks
if(player.getPlayerVersion().isNewerThan(data.maxVersion()) || player.getPlayerVersion().isOlderThan(data.minVersion())) {
Anticheat.INSTANCE.alog("Player " + player.getBukkitPlayer().getName() +
@@ -130,7 +140,7 @@ public class CheckHandler {
Check check = checkClass.playerInit(player);
CheckSettings settings = Anticheat.INSTANCE.getCheckManager()
- .getCheckSettings(checkClass.getCheckClass().getParent());
+ .getCheckSettings(checkId);
if(settings == null) {
throw new RuntimeException("Settings for check" + check.getName() + " do not exist!");
@@ -149,10 +159,10 @@ public class CheckHandler {
EVENTS.compute(tuple.two, (packetClass, array) -> {
if (array == null) {
- return new ActionStore[] {new ActionStore(action, checkClass.getCheckClass().getParent())};
+ return new ActionStore[] {new ActionStore(action, checkClass.getCheckClass().getParent(), checkId)};
} else {
ActionStore[] newArray = Arrays.copyOf(array, array.length + 1);
- newArray[array.length] = new ActionStore(action, checkClass.getCheckClass().getParent());
+ newArray[array.length] = new ActionStore(action, checkClass.getCheckClass().getParent(), checkId);
return newArray;
}
});
@@ -164,10 +174,10 @@ public class CheckHandler {
EVENTS_TIMESTAMP.compute(tuple.two, (packetClass, array) -> {
if (array == null) {
- return new TimedActionStore[] {new TimedActionStore(action, checkClass.getCheckClass().getParent())};
+ return new TimedActionStore[] {new TimedActionStore(action, checkClass.getCheckClass().getParent(), checkId)};
} else {
TimedActionStore>[] newArray = Arrays.copyOf(array, array.length + 1);
- newArray[array.length] = new TimedActionStore(action, checkClass.getCheckClass().getParent());
+ newArray[array.length] = new TimedActionStore(action, checkClass.getCheckClass().getParent(), checkId);
return newArray;
}
});
@@ -181,10 +191,10 @@ public class CheckHandler {
EVENTS_CANCELLABLE.compute(tuple.two, (packetClass, array) -> {
if (array == null) {
- return new CancellableActionStore[] {new CancellableActionStore(action, checkClass.getCheckClass().getParent())};
+ return new CancellableActionStore[] {new CancellableActionStore(action, checkClass.getCheckClass().getParent(), checkId)};
} else {
CancellableActionStore[] newArray = Arrays.copyOf(array, array.length + 1);
- newArray[array.length] = new CancellableActionStore(action, checkClass.getCheckClass().getParent());
+ newArray[array.length] = new CancellableActionStore(action, checkClass.getCheckClass().getParent(), checkId);
return newArray;
}
});
@@ -215,9 +225,9 @@ public class CheckHandler {
if(EVENTS.containsKey(event.getClass())) {
ActionStore[] actions = (ActionStore[]) EVENTS.get(event.getClass());
for (ActionStore action : actions) {
- var checkSettings = Anticheat.INSTANCE.getCheckManager().getCheckSettings(action.getCheckClass());
+ var checkSettings = Anticheat.INSTANCE.getCheckManager().getCheckSettings(action.getCheckId());
if(checkSettings != null && !Anticheat.INSTANCE.getCheckManager()
- .getCheckSettings(action.getCheckClass()).isEnabled())
+ .getCheckSettings(action.getCheckId()).isEnabled())
continue;
action.getAction().invoke(event);
@@ -233,9 +243,9 @@ public class CheckHandler {
synchronized (EVENTS) {
ActionStore