my anticheat isnt doing anything

  • Welcome to skUnity!

    Welcome to skUnity! This is a forum where members of the Skript community can communicate and interact. Skript Resource Creators can post their Resources for all to see and use.

    If you haven't done so already, feel free to join our official Discord server to expand your level of interaction with the comminuty!

    Now, what are you waiting for? Join the community now!

funpvp

Member
Oct 7, 2023
47
1
8
23
package me.willgames_.watched2;

import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
import org.bukkit.event.entity.EntityToggleGlideEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerMoveEvent;
import org.bukkit.event.player.PlayerToggleSneakEvent;
import org.bukkit.event.player.PlayerToggleSprintEvent;
import org.bukkit.event.player.PlayerVelocityEvent;
import org.bukkit.util.Vector;

import java.util.HashMap;
import java.util.Map;
import java.util.Objects;

public class AntiCheatListener implements Listener {

private static final String ALERT_PREFIX = ChatColor.BLUE + "Watched " + ChatColor.RESET;

private final Map<Player, Long> lastSprintTimestamp = new HashMap<>();
private final Map<Player, Long> lastSneakTimestamp = new HashMap<>();
private final Map<Player, Vector> playerLocations = new HashMap<>();
private final Map<Player, Integer> violations = new HashMap<>();
private final Map<Player, Long> lastAimCheck = new HashMap<>();
private final Map<Player, Integer> velocityChanges = new HashMap<>();

private Watched2 plugin;

public AntiCheatListener(Watched2 plugin) {
this.plugin = plugin;
}

@EventHandler
public void onPlayerMove(PlayerMoveEvent event) {
Player player = event.getPlayer();

// Acceleration Check
checkAcceleration(player, event.getFrom(), event.getTo());

// Update player location history
playerLocations.put(player, event.getTo().toVector());
}

@EventHandler
public void onPlayerToggleSprint(PlayerToggleSprintEvent event) {
if (event.isSprinting()) {
long currentTime = System.currentTimeMillis();
long sprintInterval = currentTime - lastSprintTimestamp.getOrDefault(event.getPlayer(), 0L);

// Sprint Timer Check
checkTimerViolation(event.getPlayer(), "SPRINT", sprintInterval, plugin.getConfig().getLong("detection.sprint-timer.min-timer-interval"));

lastSprintTimestamp.put(event.getPlayer(), currentTime);
}
}

@EventHandler
public void onPlayerToggleSneak(PlayerToggleSneakEvent event) {
if (event.isSneaking()) {
long currentTime = System.currentTimeMillis();
long sneakInterval = currentTime - lastSneakTimestamp.getOrDefault(event.getPlayer(), 0L);

// Sneak Timer Check
checkTimerViolation(event.getPlayer(), "SNEAK", sneakInterval, plugin.getConfig().getLong("detection.sneak-timer.min-timer-interval"));

lastSneakTimestamp.put(event.getPlayer(), currentTime);
}
}

@EventHandler
public void onPlayerVelocity(PlayerVelocityEvent event) {
Player player = event.getPlayer();

// Velocity Change Check
checkVelocityChange(player, event.getVelocity());
}

@EventHandler
public void onEntityToggleGlide(EntityToggleGlideEvent event) {
if (event.getEntity() instanceof Player) {
Player player = (Player) event.getEntity();

// Glide Check
if (event.isGliding()) {
handleViolation(player, "GLIDE");
}
}
}

@EventHandler
public void onEntityDamage(EntityDamageEvent event) {
if (event.getEntity() instanceof Player && event.getCause() == DamageCause.FALL) {
Player player = (Player) event.getEntity();

// Fall Damage Check
if (event.getDamage() > 0) {
handleViolation(player, "FALL");
}
}
}

@EventHandler
public void onBlockPlace(BlockPlaceEvent event) {
Player player = event.getPlayer();

// Scaffold Check on Block Place
checkScaffold(player, player.getLocation().add(0, -1, 0).toVector());
}

@EventHandler
public void onPlayerJoin(PlayerJoinEvent event) {
Player player = event.getPlayer();

// Initialize player-specific data on join
lastSprintTimestamp.put(player, 0L);
lastSneakTimestamp.put(player, 0L);
lastAimCheck.put(player, 0L);
velocityChanges.put(player, 0);
}

private void checkAcceleration(Player player, Location from, Location to) {
if (!plugin.getConfig().getBoolean("detection.acceleration.enabled")) {
return;
}

double maxAcceleration = plugin.getConfig().getDouble("detection.acceleration.max-acceleration");

double deltaX = to.getX() - from.getX();
double deltaZ = to.getZ() - from.getZ();

double accelerationX = Math.abs(deltaX);
double accelerationZ = Math.abs(deltaZ);

if (accelerationX > maxAcceleration || accelerationZ > maxAcceleration) {
handleViolation(player, "MOVE");
}
}

private void checkScaffold(Player player, Vector location) {
if (!plugin.getConfig().getBoolean("detection.scaffold.enabled")) {
return;
}

double maxScaffoldSpeed = plugin.getConfig().getDouble("detection.scaffold.max-scaffold-speed");

if (isScaffoldSpeedInvalid(player, location, maxScaffoldSpeed)) {
handleViolation(player, "SCAFFOLD");
}
}

private void checkVelocityChange(Player player, Vector velocity) {
int changes = velocityChanges.getOrDefault(player, 0);

if (velocity.length() > 0 && changes > 0) {
velocityChanges.put(player, 0);
} else if (velocity.length() == 0) {
velocityChanges.put(player, changes + 1);
}
}

private boolean isScaffoldSpeedInvalid(Player player, Vector location, double maxScaffoldSpeed) {
Vector[] locations = new Vector[]{playerLocations.get(player)};

if (locations == null || locations[0] == null) {
return false;
}

double distance = location.distance(locations[0]);
double expectedDistance = maxScaffoldSpeed * player.getWalkSpeed();

return distance > expectedDistance;
}

private void checkTimerViolation(Player player, String type, long interval, long minTimerInterval) {
if (interval < minTimerInterval) {
handleViolation(player, "TIMER (" + type + ")");
}
}

private void handleViolation(Player player, String violation) {
for (Player alertPlayer : Bukkit.getOnlinePlayers()) {
if (alertPlayer.hasPermission(Objects.requireNonNull(plugin.getConfig().getString("detection.alerts-permission")))) {
String alertMessage = ALERT_PREFIX + ChatColor.GRAY + "Player " + player.getName() +
ChatColor.BLUE + " failed " + ChatColor.GRAY + violation;
alertPlayer.sendMessage(alertMessage);
}
}
}}

can someone explain why it dosent work lol