From 3698fc090eebab11db8f27d4fe8b5ca7f3b0b15d Mon Sep 17 00:00:00 2001 From: Dawson Date: Tue, 4 Feb 2025 09:19:25 -0500 Subject: [PATCH] Cleaned up class code to prevent dangling objects, relocated libraries for compat reasons, updated vulernable libs, and removed unused libs. --- Anticheat/pom.xml | 25 +++++++---- .../main/java/dev/brighten/ac/Anticheat.java | 44 ++----------------- .../java/dev/brighten/ac/check/Check.java | 19 +++----- .../dev/brighten/ac/check/CheckManager.java | 5 ++- .../brighten/ac/check/impl/chat/Log4J.java | 2 +- .../java/dev/brighten/ac/data/APlayer.java | 9 +++- .../brighten/ac/data/info/CheckHandler.java | 12 ++++- .../brighten/ac/listener/JoinListener.java | 3 ++ .../dev/brighten/ac/compat/CompatHandler.java | 16 +++---- 9 files changed, 59 insertions(+), 76 deletions(-) diff --git a/Anticheat/pom.xml b/Anticheat/pom.xml index b1add39..d0d3c3a 100644 --- a/Anticheat/pom.xml +++ b/Anticheat/pom.xml @@ -47,7 +47,7 @@ org.apache.maven.plugins maven-compiler-plugin - 3.11.0 + 3.13.0 17 17 @@ -65,7 +65,7 @@ org.apache.maven.plugins maven-shade-plugin - 3.4.1 + 3.5.0 package @@ -74,6 +74,20 @@ true + + + co.aikar + dev.brighten.anticheat.libs.co.aikar + + + com.google + dev.brighten.anticheat.libs.co.google + + + org.dizitart + dev.brighten.anticheat.libs.org.dizitart + + @@ -171,7 +185,7 @@ com.google.guava guava - 31.1-jre + 32.1.3-jre compile @@ -186,11 +200,6 @@ 9.4 provided - - com.neovisionaries - nv-websocket-client - 2.14 - co.aikar acf-bukkit diff --git a/Anticheat/src/main/java/dev/brighten/ac/Anticheat.java b/Anticheat/src/main/java/dev/brighten/ac/Anticheat.java index 70066bb..da94be8 100644 --- a/Anticheat/src/main/java/dev/brighten/ac/Anticheat.java +++ b/Anticheat/src/main/java/dev/brighten/ac/Anticheat.java @@ -7,6 +7,7 @@ import dev.brighten.ac.api.AnticheatAPI; import dev.brighten.ac.check.Check; import dev.brighten.ac.check.CheckManager; 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; @@ -86,45 +87,6 @@ public class Anticheat extends JavaPlugin { private RollingAverageDouble tps = new RollingAverageDouble(4, 20); private final Map worldInfoMap = new HashMap<>(); - /** - * private final Emulator emulator = new Emulator(new DataSupplier() { - * - * @Override - * public List getCollidingBoxes(AxisAlignedBB bb) { - * return Collections.emptyList(); - * } - * - * @Override - * public Block getBlockAt(BlockPos blockPos) { - * return null; - * } - * }); - * - * public void runEmulation() { - * // Here we'll build the iteration input object we'll feed into the emulator - * final IterationInput input = IterationInput.builder() - * .to(new Vector(1, 2, 3)) // location from the flying packet - * .yaw(5F) // current yaw - * .ground(false) - * .jumping(false) // you'll want to bruteforce this - * .forward(0) // you'll want to bruteforce this - * .strafing(0) // you'll want to bruteforce this - * .sprinting(false) // you'll want to bruteforce this - * .usingItem(false) // you'll want to bruteforce this - * .hitSlowdown(false) // you'll want to bruteforce this - * .sneaking(false) - * .lastReportedBoundingBox(new AxisAlignedBB(0, 0, 0, 0, 0, 0)) // from location, as a bounding box - * .build(); - * - * // Run the emulation and get the result - * final IterationResult result = emulator.runIteration(input); - * - * // Once we've found our best candidate (in the case of a bruteforce), - * // confirm it to run post actions. - * emulator.confirm(result.getIteration()); - * } - */ - public static boolean allowDebug = true; @ConfigSetting(path = "logging", name = "verbose") @@ -199,6 +161,7 @@ public class Anticheat extends JavaPlugin { public void onDisable() { scheduler.shutdown(); commandManager.unregisterCommands(); + commandManager = null; checkManager.getCheckClasses().clear(); Check.alertsEnabled.clear(); @@ -213,10 +176,11 @@ public class Anticheat extends JavaPlugin { Bukkit.getScheduler().cancelTasks(this); - // Unregistering APlayer objects playerRegistry.unregisterAll(); playerRegistry = null; + CheckHandler.TO_HOOK.clear(); + try { injector.eject(); injector = null; 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 2d6497e..5e3af56 100644 --- a/Anticheat/src/main/java/dev/brighten/ac/check/Check.java +++ b/Anticheat/src/main/java/dev/brighten/ac/check/Check.java @@ -10,8 +10,6 @@ import dev.brighten.ac.api.event.result.FlagResult; import dev.brighten.ac.api.event.result.PunishResult; import dev.brighten.ac.data.APlayer; import dev.brighten.ac.utils.*; -import dev.brighten.ac.utils.timer.Timer; -import dev.brighten.ac.utils.timer.impl.TickTimer; import lombok.Getter; import lombok.Setter; import lombok.val; @@ -21,7 +19,6 @@ import org.bukkit.Bukkit; import org.bukkit.Location; import java.util.*; -import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; public class Check implements ECheck { @@ -37,8 +34,6 @@ public class Check implements ECheck { @Getter @Setter private int punishVl; - private static final Timer alertCountReset = new TickTimer(), lastPunish = new TickTimer(); - private static final AtomicInteger alertCount = new AtomicInteger(0); public static Set alertsEnabled = new HashSet<>(); @@ -191,12 +186,12 @@ public class Check implements ECheck { Anticheat.INSTANCE.getLogManager() .insertLog(player, checkData, vl, System.currentTimeMillis(), info); - if(alertCountReset.isPassed(20)) { - alertCount.set(0); - alertCountReset.reset(); + if(player.getCheckHandler().getAlertCountReset().isPassed(20)) { + player.getCheckHandler().getAlertCount().set(0); + player.getCheckHandler().getAlertCountReset().reset(); } - if(alertCount.incrementAndGet() < 80) { + if(player.getCheckHandler().getAlertCount().incrementAndGet() < 80) { //Sending Discord webhook alert List toSend = new ArrayList<>(); @@ -223,7 +218,7 @@ public class Check implements ECheck { .ifPresent(apl -> apl.getBukkitPlayer().spigot().sendMessage(toSend .toArray(new BaseComponent[0]))); } - alertCountReset.reset(); + player.getCheckHandler().getAlertCountReset().reset(); } if(punish && vl >= punishVl) { punish(); @@ -232,9 +227,9 @@ public class Check implements ECheck { } public void punish() { - if(!punishable || lastPunish.isNotPassed(20)) return; + if(!punishable || player.getCheckHandler().getLastPunish().isNotPassed(20)) return; - lastPunish.reset(); + player.getCheckHandler().getLastPunish().reset(); List commands = CheckConfig.punishmentCommands.stream().map(this::addPlaceHolders) .collect(Collectors.toList()); 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 3e5172b..27b1ddc 100644 --- a/Anticheat/src/main/java/dev/brighten/ac/check/CheckManager.java +++ b/Anticheat/src/main/java/dev/brighten/ac/check/CheckManager.java @@ -3,12 +3,15 @@ package dev.brighten.ac.check; import dev.brighten.ac.Anticheat; import dev.brighten.ac.utils.ClassScanner; import dev.brighten.ac.utils.reflections.types.WrappedClass; +import dev.brighten.ac.utils.timer.Timer; +import dev.brighten.ac.utils.timer.impl.TickTimer; import lombok.Getter; import lombok.val; import java.util.HashMap; import java.util.Map; import java.util.Optional; +import java.util.concurrent.atomic.AtomicInteger; @Getter public class CheckManager { @@ -34,7 +37,7 @@ public class CheckManager { Optional settings = getConfigSettings(checkData.checkId()); - if(!settings.isPresent()) { + if(settings.isEmpty()) { generateConfigSettings(checkData); settings = Optional.of(CheckSettings.settingsFromData(checkData)); } diff --git a/Anticheat/src/main/java/dev/brighten/ac/check/impl/chat/Log4J.java b/Anticheat/src/main/java/dev/brighten/ac/check/impl/chat/Log4J.java index be86717..8c5113f 100644 --- a/Anticheat/src/main/java/dev/brighten/ac/check/impl/chat/Log4J.java +++ b/Anticheat/src/main/java/dev/brighten/ac/check/impl/chat/Log4J.java @@ -18,7 +18,7 @@ public class Log4J extends Check { super(player); } - private static final Pattern pattern = Pattern.compile("\\$\\{.*}"); + private final Pattern pattern = Pattern.compile("\\$\\{.*}"); @Bind WCancellable chatPacket = packet -> { diff --git a/Anticheat/src/main/java/dev/brighten/ac/data/APlayer.java b/Anticheat/src/main/java/dev/brighten/ac/data/APlayer.java index a45dfb2..7f9701f 100644 --- a/Anticheat/src/main/java/dev/brighten/ac/data/APlayer.java +++ b/Anticheat/src/main/java/dev/brighten/ac/data/APlayer.java @@ -139,7 +139,13 @@ public class APlayer { // Grabbing the protocol version of the player. Anticheat.INSTANCE.getScheduler().execute(() -> { - playerVersion = ProtocolVersion.getVersion(ProtocolAPI.INSTANCE.getPlayerVersion(getBukkitPlayer())); + int numVersion = ProtocolAPI.INSTANCE.getPlayerVersion(getBukkitPlayer()); + + for(int i = 0 ; i < 50 ; i++) { + Anticheat.INSTANCE.getLogger().info("Player version: " + numVersion); + } + + playerVersion = ProtocolVersion.getVersion(numVersion); RunUtils.task(() -> checkHandler.initChecks()); @@ -237,6 +243,7 @@ public class APlayer { this.info = null; this.lagInfo = null; this.movement = null; + this.checkHandler.shutdown(); mob.despawn(); } 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 17b6392..afd2984 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 @@ -10,17 +10,25 @@ import dev.brighten.ac.utils.ClassScanner; import dev.brighten.ac.utils.Tuple; import dev.brighten.ac.utils.reflections.types.WrappedClass; import dev.brighten.ac.utils.reflections.types.WrappedField; +import dev.brighten.ac.utils.timer.Timer; +import dev.brighten.ac.utils.timer.impl.TickTimer; +import lombok.Getter; import lombok.RequiredArgsConstructor; import org.bukkit.event.Event; import java.util.*; +import java.util.concurrent.atomic.AtomicInteger; @RequiredArgsConstructor public class CheckHandler { private final Map, ActionStore[]> EVENTS = new HashMap<>(); private final Map, TimedActionStore[]> EVENTS_TIMESTAMP = new HashMap<>(); private final Map, CancellableActionStore[]> EVENTS_CANCELLABLE = new HashMap<>(); - private final Map, CancellableActionStore[]> EVENTS_PRE_CANCELLABLE = new HashMap<>(); + + @Getter + private final Timer alertCountReset = new TickTimer(), lastPunish = new TickTimer(); + @Getter + private final AtomicInteger alertCount = new AtomicInteger(0); private final Map, Check> checkCache = new HashMap<>(); @@ -28,7 +36,7 @@ public class CheckHandler { private final APlayer player; - private static final List TO_HOOK = new ArrayList<>(); + public static final List TO_HOOK = new ArrayList<>(); static { for (WrappedClass aClass : ClassScanner.getClasses(Hook.class)) { diff --git a/Anticheat/src/main/java/dev/brighten/ac/listener/JoinListener.java b/Anticheat/src/main/java/dev/brighten/ac/listener/JoinListener.java index f770260..d0dded5 100644 --- a/Anticheat/src/main/java/dev/brighten/ac/listener/JoinListener.java +++ b/Anticheat/src/main/java/dev/brighten/ac/listener/JoinListener.java @@ -75,6 +75,9 @@ public class JoinListener implements Listener { @EventHandler public void onJoin(PlayerJoinEvent event) { + for(int i = 0; i < 10 ; i++) { + Anticheat.INSTANCE.getLogger().info("Player joined. " + event.getPlayer().getName()); + } APlayer player = Anticheat.INSTANCE.getPlayerRegistry().generate(event.getPlayer()); if(Anticheat.INSTANCE.getPlayerRegistry().aplayerMap.containsKey(event.getPlayer().getUniqueId().hashCode())) { diff --git a/Compat/src/main/java/dev/brighten/ac/compat/CompatHandler.java b/Compat/src/main/java/dev/brighten/ac/compat/CompatHandler.java index 3a6d49f..a8a7128 100644 --- a/Compat/src/main/java/dev/brighten/ac/compat/CompatHandler.java +++ b/Compat/src/main/java/dev/brighten/ac/compat/CompatHandler.java @@ -12,17 +12,11 @@ public abstract class CompatHandler { public abstract boolean isGliding(Player player); - private static CompatHandler INSTANCE; - public static CompatHandler getINSTANCE() { - if (INSTANCE == null) { - if(ProtocolVersion.getGameVersion().isOrAbove(ProtocolVersion.V1_13)) { - return new CompatHandler1_13(); - } else if(ProtocolVersion.getGameVersion().isOrAbove(ProtocolVersion.V1_9)) { - return new CompatHandler1_9(); - } else return new CompatHandler1_8(); - } - - return INSTANCE; + if(ProtocolVersion.getGameVersion().isOrAbove(ProtocolVersion.V1_13)) { + return new CompatHandler1_13(); + } else if(ProtocolVersion.getGameVersion().isOrAbove(ProtocolVersion.V1_9)) { + return new CompatHandler1_9(); + } else return new CompatHandler1_8(); } }