diff --git a/.classpath b/.classpath
new file mode 100644
index 0000000..4e7f670
--- /dev/null
+++ b/.classpath
@@ -0,0 +1,57 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/.factorypath b/.factorypath
new file mode 100644
index 0000000..ba48460
--- /dev/null
+++ b/.factorypath
@@ -0,0 +1,52 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..26d3352
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,3 @@
+# Default ignored files
+/shelf/
+/workspace.xml
diff --git a/.project b/.project
new file mode 100644
index 0000000..57e2765
--- /dev/null
+++ b/.project
@@ -0,0 +1,34 @@
+
+
+ xeroanticheat
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.eclipse.m2e.core.maven2Builder
+
+
+
+
+
+ org.eclipse.jdt.core.javanature
+ org.eclipse.m2e.core.maven2Nature
+
+
+
+ 1773547794034
+
+ 30
+
+ org.eclipse.core.resources.regexFilterMatcher
+ node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__
+
+
+
+
diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..abdea9a
--- /dev/null
+++ b/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,4 @@
+eclipse.preferences.version=1
+encoding//src/main/java=UTF-8
+encoding//src/main/resources=UTF-8
+encoding/=UTF-8
diff --git a/.settings/org.eclipse.jdt.apt.core.prefs b/.settings/org.eclipse.jdt.apt.core.prefs
new file mode 100644
index 0000000..dfa4f3a
--- /dev/null
+++ b/.settings/org.eclipse.jdt.apt.core.prefs
@@ -0,0 +1,4 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.apt.aptEnabled=true
+org.eclipse.jdt.apt.genSrcDir=target/generated-sources/annotations
+org.eclipse.jdt.apt.genTestSrcDir=target/generated-test-sources/test-annotations
diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..29f57ea
--- /dev/null
+++ b/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,9 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=21
+org.eclipse.jdt.core.compiler.compliance=21
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore
+org.eclipse.jdt.core.compiler.processAnnotations=enabled
+org.eclipse.jdt.core.compiler.release=disabled
+org.eclipse.jdt.core.compiler.source=21
diff --git a/.settings/org.eclipse.m2e.core.prefs b/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/dependency-reduced-pom.xml b/dependency-reduced-pom.xml
new file mode 100644
index 0000000..b51f2bd
--- /dev/null
+++ b/dependency-reduced-pom.xml
@@ -0,0 +1,82 @@
+
+
+ 4.0.0
+ com.xeroth
+ xeroanticheat
+ XeroAntiCheat
+ 1.0.8
+ Lightweight, accurate anti-cheat for Paper 1.21.x
+
+
+
+ true
+ src/main/resources
+
+
+ ${project.name}
+
+
+ maven-compiler-plugin
+ 3.13.0
+
+ 21
+ 21
+ UTF-8
+
+
+
+ maven-shade-plugin
+ 3.6.0
+
+
+ package
+
+ shade
+
+
+
+
+ net.kyori.adventure
+ com.xeroth.xeroanticheat.adventure
+
+
+ org.sqlite
+ com.xeroth.xeroanticheat.sqlite
+
+
+
+
+
+
+
+
+
+
+ papermc
+ https://repo.papermc.io/repository/maven-public/
+
+
+ dmulloy2-repo
+ https://repo.dmulloy2.net/repository/public/
+
+
+
+
+ io.papermc.paper
+ paper-api
+ 1.21.1-R0.1-SNAPSHOT
+ provided
+
+
+ com.comphenix.protocol
+ ProtocolLib
+ 5.3.0
+ provided
+
+
+
+ 21
+ 21
+ UTF-8
+
+
diff --git a/pom.xml b/pom.xml
index fcffbd4..ed15152 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
com.xeroth
xeroanticheat
- 1.0.7
+ 1.0.8
jar
XeroAntiCheat
diff --git a/src/main/java/com/xeroth/xeroanticheat/XeroAntiCheat.java b/src/main/java/com/xeroth/xeroanticheat/XeroAntiCheat.java
index 6bd903f..83e6a90 100644
--- a/src/main/java/com/xeroth/xeroanticheat/XeroAntiCheat.java
+++ b/src/main/java/com/xeroth/xeroanticheat/XeroAntiCheat.java
@@ -231,6 +231,8 @@ public final class XeroAntiCheat extends JavaPlugin {
public void reload() {
configManager.loadConfig();
violationManager.clearAll();
+ violationManager.setDecayRate(
+ configManager.getDouble("violation.decay_rate", 0.5));
getLogger().info("Configuration reloaded!");
}
diff --git a/src/main/java/com/xeroth/xeroanticheat/checks/combat/VelocityCheck.java b/src/main/java/com/xeroth/xeroanticheat/checks/combat/VelocityCheck.java
index 6c46a7b..7cf3b84 100644
--- a/src/main/java/com/xeroth/xeroanticheat/checks/combat/VelocityCheck.java
+++ b/src/main/java/com/xeroth/xeroanticheat/checks/combat/VelocityCheck.java
@@ -34,8 +34,6 @@ public class VelocityCheck extends Check {
Vector expected = data.getLastServerVelocity();
if (expected == null || data.getVelocityCheckTicks() <= 0) return;
- data.decrementVelocityCheckTicks();
-
double expectedHorizontal = Math.sqrt(
expected.getX() * expected.getX() + expected.getZ() * expected.getZ());
@@ -45,6 +43,8 @@ public class VelocityCheck extends Check {
return;
}
+ data.decrementVelocityCheckTicks();
+
PlayerData.PositionSnapshot curr = data.getLastPosition();
PlayerData.PositionSnapshot prev = data.getSecondLastPosition();
if (curr == null || prev == null) return;
diff --git a/src/main/java/com/xeroth/xeroanticheat/checks/movement/JesusCheck.java b/src/main/java/com/xeroth/xeroanticheat/checks/movement/JesusCheck.java
index 7966899..0a52a52 100644
--- a/src/main/java/com/xeroth/xeroanticheat/checks/movement/JesusCheck.java
+++ b/src/main/java/com/xeroth/xeroanticheat/checks/movement/JesusCheck.java
@@ -37,7 +37,7 @@ public class JesusCheck extends Check {
// Get block below player
Location loc = player.getLocation();
- Material blockBelow = loc.subtract(0, 1, 0).getBlock().getType();
+ Material blockBelow = loc.clone().subtract(0, 1, 0).getBlock().getType();
// Check if player is on water or lava
boolean onWater = blockBelow == Material.WATER;
diff --git a/src/main/java/com/xeroth/xeroanticheat/checks/movement/NoFallCheck.java b/src/main/java/com/xeroth/xeroanticheat/checks/movement/NoFallCheck.java
index f73511f..90b82a9 100644
--- a/src/main/java/com/xeroth/xeroanticheat/checks/movement/NoFallCheck.java
+++ b/src/main/java/com/xeroth/xeroanticheat/checks/movement/NoFallCheck.java
@@ -54,7 +54,7 @@ public class NoFallCheck extends Check {
// Check for damage-reducing blocks
Location loc = player.getLocation();
- Material blockBelow = loc.subtract(0, 1, 0).getBlock().getType();
+ Material blockBelow = loc.clone().subtract(0, 1, 0).getBlock().getType();
// Blocks that reduce/cancel fall damage
if (blockBelow == Material.WATER ||
diff --git a/src/main/java/com/xeroth/xeroanticheat/checks/movement/SpeedCheck.java b/src/main/java/com/xeroth/xeroanticheat/checks/movement/SpeedCheck.java
index 1c24d00..b4c2974 100644
--- a/src/main/java/com/xeroth/xeroanticheat/checks/movement/SpeedCheck.java
+++ b/src/main/java/com/xeroth/xeroanticheat/checks/movement/SpeedCheck.java
@@ -130,7 +130,7 @@ public class SpeedCheck extends Check {
// Soul sand slows
Location loc = player.getLocation();
- Material blockBelow = loc.subtract(0, 1, 0).getBlock().getType();
+ Material blockBelow = loc.clone().subtract(0, 1, 0).getBlock().getType();
if (blockBelow == Material.SOUL_SAND || blockBelow == Material.SOUL_SOIL) {
baseSpeed *= 0.75;
}
diff --git a/src/main/java/com/xeroth/xeroanticheat/checks/movement/SpiderCheck.java b/src/main/java/com/xeroth/xeroanticheat/checks/movement/SpiderCheck.java
index e6bf532..18224f0 100644
--- a/src/main/java/com/xeroth/xeroanticheat/checks/movement/SpiderCheck.java
+++ b/src/main/java/com/xeroth/xeroanticheat/checks/movement/SpiderCheck.java
@@ -3,7 +3,6 @@ package com.xeroth.xeroanticheat.checks.movement;
import com.xeroth.xeroanticheat.XeroAntiCheat;
import com.xeroth.xeroanticheat.check.Check;
import com.xeroth.xeroanticheat.data.PlayerData;
-import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.entity.Player;
@@ -47,17 +46,15 @@ public class SpiderCheck extends Check {
return;
}
- // Get blocks around player
- Location loc = player.getLocation();
-
- // Check block at feet
- Material feetBlock = loc.subtract(0, 1, 0).getBlock().getType();
-
- // Check block at body level
- Material bodyBlock = loc.getBlock().getType();
-
- // Check block above head
- Material headBlock = loc.add(0, 1, 0).getBlock().getType();
+ // Get blocks around player using block coordinates (no Location mutation)
+ org.bukkit.World world = player.getWorld();
+ int blockX = player.getLocation().getBlockX();
+ int blockY = player.getLocation().getBlockY();
+ int blockZ = player.getLocation().getBlockZ();
+
+ Material feetBlock = world.getBlockAt(blockX, blockY - 1, blockZ).getType();
+ Material bodyBlock = world.getBlockAt(blockX, blockY, blockZ).getType();
+ Material headBlock = world.getBlockAt(blockX, blockY + 1, blockZ).getType();
// Check if any of these blocks are climbable
boolean feetClimbable = isClimbable(feetBlock);
diff --git a/src/main/java/com/xeroth/xeroanticheat/manager/ViolationManager.java b/src/main/java/com/xeroth/xeroanticheat/manager/ViolationManager.java
index ddb660f..cc5fd55 100644
--- a/src/main/java/com/xeroth/xeroanticheat/manager/ViolationManager.java
+++ b/src/main/java/com/xeroth/xeroanticheat/manager/ViolationManager.java
@@ -22,13 +22,17 @@ public class ViolationManager {
private final Map playerDataCache = new ConcurrentHashMap<>();
private final MiniMessage miniMessage = MiniMessage.miniMessage();
- private double decayRate;
+ private volatile double decayRate;
public ViolationManager(XeroAntiCheat plugin) {
this.plugin = plugin;
this.decayRate = plugin.getConfigManager().getDouble("violation.decay_rate", 0.5);
}
+ public void setDecayRate(double rate) {
+ this.decayRate = rate;
+ }
+
/**
* Get or create player data for a player
*/
@@ -89,8 +93,6 @@ public class ViolationManager {
* Decay all violation levels for all players
*/
public void decayAll() {
- decayRate = plugin.getConfigManager().getDouble("violation.decay_rate", 0.5);
-
for (PlayerData data : playerDataCache.values()) {
for (String checkName : data.getViolationLevels().keySet()) {
data.decayViolation(checkName, decayRate);
diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml
index 087ec92..2d173c3 100644
--- a/src/main/resources/plugin.yml
+++ b/src/main/resources/plugin.yml
@@ -1,5 +1,5 @@
name: XeroAntiCheat
-version: 1.0.7
+version: 1.0.8
main: com.xeroth.xeroanticheat.XeroAntiCheat
author: Xeroth
description: Lightweight, accurate anti-cheat for Paper 1.21.x
diff --git a/target/classes/config.yml b/target/classes/config.yml
new file mode 100644
index 0000000..003bfea
--- /dev/null
+++ b/target/classes/config.yml
@@ -0,0 +1,339 @@
+# XeroAntiCheat Configuration File
+# Version: 1.0.0
+# Target: Paper 1.21.x (compatible with 1.20-1.22)
+
+# ==========================================
+# GENERAL SETTINGS
+# ==========================================
+
+# Enable or disable the anti-cheat
+enabled: true
+
+# Enable debug mode (logs additional information)
+debug: false
+
+# Number of async threads for background tasks
+async_task_threads: 2
+
+# Database settings
+database:
+ # Set to false to disable SQLite logging (flat-file log always active)
+ enabled: true
+
+# ==========================================
+# VIOLATION SYSTEM
+# ==========================================
+
+violation:
+ # Time in seconds between violation level decay
+ decay_interval: 30
+
+ # Amount to reduce VL by each decay interval
+ decay_rate: 0.5
+
+# ==========================================
+# CHECK CONFIGURATION
+# ==========================================
+
+# Movement Checks
+checks:
+ # ----------------------------------------
+ # SPEED CHECK
+ # Detects horizontal movement faster than possible
+ # ----------------------------------------
+ speed:
+ enabled: true
+ # Base maximum speed (blocks per tick)
+ max_speed: 0.56
+ # Ping compensation factor (scales latency leniency)
+ ping_factor: 1.0
+ # Number of ticks to buffer for rolling average
+ buffer_ticks: 5
+ # VL thresholds
+ warn_vl: 10
+ kick_vl: 25
+ tempban_vl: 50
+ permban_vl: 100
+
+ # ----------------------------------------
+ # FLY CHECK
+ # Detects flying without elytra/creative/spectator
+ # ----------------------------------------
+ fly:
+ enabled: true
+ # Number of ticks to allow for stepping/slabs
+ fall_buffer: 10
+ # Maximum ground desync ticks before flagging
+ ground_desync_threshold: 3
+ warn_vl: 10
+ kick_vl: 25
+ tempban_vl: 50
+ permban_vl: 100
+
+ # ----------------------------------------
+ # JESUS CHECK (NoWaterWalk)
+ # Detects walking on water without Frost Walker
+ # ----------------------------------------
+ jesus:
+ enabled: true
+ warn_vl: 10
+ kick_vl: 25
+ tempban_vl: 50
+ permban_vl: 100
+
+ # ----------------------------------------
+ # NOFALL CHECK
+ # Detects no fall damage after falling >3 blocks
+ # ----------------------------------------
+ nofall:
+ enabled: true
+ # Minimum fall distance to track
+ min_fall_distance: 3
+ warn_vl: 10
+ kick_vl: 25
+ tempban_vl: 50
+ permban_vl: 100
+
+ # ----------------------------------------
+ # TIMER CHECK (Blink/Packet Timer)
+ # Detects packet timing anomalies
+ # ----------------------------------------
+ timer:
+ enabled: true
+ # Maximum packets per second allowed
+ max_packets_per_second: 22
+ # Milliseconds of no packets before flagging blink
+ blink_threshold_ms: 500
+ warn_vl: 10
+ kick_vl: 25
+ tempban_vl: 50
+ permban_vl: 100
+
+ # ----------------------------------------
+ # SPIDER CHECK
+ # Detects climbing non-climbable blocks
+ # ----------------------------------------
+ spider:
+ enabled: true
+ warn_vl: 10
+ kick_vl: 25
+ tempban_vl: 50
+ permban_vl: 100
+
+ # ----------------------------------------
+ # GLIDE CHECK (ElytraHack)
+ # Detects glide-like movement without elytra
+ # ----------------------------------------
+ glide:
+ enabled: true
+ # Minimum horizontal speed for glide detection
+ min_horizontal_speed: 0.5
+ # Maximum Y decrease per tick for glide curve
+ max_y_decrease: 0.1
+ warn_vl: 10
+ kick_vl: 25
+ tempban_vl: 50
+ permban_vl: 100
+
+ # ----------------------------------------
+ # KILLAURA CHECK
+ # Detects impossible combat angles/rotations
+ # ----------------------------------------
+ killaura:
+ enabled: true
+ # Maximum angle in degrees from look direction
+ max_angle: 100
+ # Maximum rotation change between attacks
+ max_rotation_change: 45
+ # Window for multi-target detection (ms)
+ multitarget_window_ms: 100
+ warn_vl: 10
+ kick_vl: 25
+ tempban_vl: 50
+ permban_vl: 100
+
+ # ----------------------------------------
+ # REACH CHECK
+ # Detects attacking beyond reach
+ # ----------------------------------------
+ reach:
+ enabled: true
+ # Maximum reach in blocks (survival)
+ max_reach: 3.2
+ # Maximum reach in blocks (creative)
+ creative_max_reach: 5.0
+ # Ping compensation factor
+ ping_factor: 1.0
+ warn_vl: 10
+ kick_vl: 25
+ tempban_vl: 50
+ permban_vl: 100
+
+ # ----------------------------------------
+ # CRITICAL CHECK
+ # Detects critical hits without being airborne
+ # ----------------------------------------
+ critical:
+ enabled: true
+ # Allow legitimate jump-crits
+ allow_jump_crits: true
+ warn_vl: 10
+ kick_vl: 25
+ tempban_vl: 50
+ permban_vl: 100
+
+ # ----------------------------------------
+ # AUTOCLICKER CHECK
+ # Detects excessive CPS or perfect patterns
+ # ----------------------------------------
+ autoclicker:
+ enabled: true
+ # Maximum clicks per second
+ max_cps: 20
+ # Minimum variance (lower = more suspicious)
+ min_variance: 2.0
+ warn_vl: 10
+ kick_vl: 25
+ tempban_vl: 50
+ permban_vl: 100
+
+ # ----------------------------------------
+ # FASTPLACE CHECK
+ # Detects block placement too fast
+ # ----------------------------------------
+ fastplace:
+ enabled: true
+ # Maximum blocks per second
+ max_blocks_per_second: 20
+ warn_vl: 10
+ kick_vl: 25
+ tempban_vl: 50
+ permban_vl: 100
+
+ # ----------------------------------------
+ # PHASE CHECK
+ # Detects players clipping through solid blocks
+ # ----------------------------------------
+ phase:
+ enabled: true
+ # Minimum movement distance before ray-cast runs (blocks)
+ min_distance: 0.5
+ # Maximum movement delta — larger values are treated as teleports
+ max_distance: 5.0
+ warn_vl: 5
+ kick_vl: 15
+ tempban_vl: 30
+ permban_vl: 60
+
+ # ----------------------------------------
+ # VELOCITY CHECK
+ # Detects players ignoring server-sent knockback (requires ProtocolLib)
+ # ----------------------------------------
+ velocity:
+ enabled: true
+ # Minimum server-sent velocity magnitude to check
+ min_expected_velocity: 0.15
+ # Player must move at least 20% of expected knockback
+ min_displacement_ratio: 0.2
+ warn_vl: 8
+ kick_vl: 20
+ tempban_vl: 40
+ permban_vl: 80
+
+ # ----------------------------------------
+ # SCAFFOLD CHECK
+ # Detects automated scaffolding
+ # ----------------------------------------
+ scaffold:
+ enabled: true
+ # Minimum pitch angle for suspicious placement
+ min_pitch: 75
+ # Number of signals required to flag
+ signals_required: 2
+ # Signal 4: Max yaw change (degrees) between placements
+ rotation_lock_threshold: 2.0
+ # Signal 4: Min horizontal speed (blocks/tick) required
+ min_move_speed: 0.15
+ # Signal 5: StdDev below this triggers signal (too-perfect timing)
+ min_placement_variance_ms: 30.0
+ # Signal 5: Min blocks/sec before signal 5 is evaluated
+ min_bps_for_variance_check: 5
+ warn_vl: 10
+ kick_vl: 25
+ tempban_vl: 50
+ permban_vl: 100
+
+ # ----------------------------------------
+ # FASTEAT CHECK
+ # Detects eating faster than possible
+ # ----------------------------------------
+ fasteat:
+ enabled: true
+ # Maximum eating duration in ticks (32 = 1.6s)
+ max_eat_ticks: 32
+ warn_vl: 10
+ kick_vl: 25
+ tempban_vl: 50
+ permban_vl: 100
+
+ # ----------------------------------------
+ # INVENTORYMOVE CHECK
+ # Detects movement while inventory open
+ # ----------------------------------------
+ inventorymove:
+ enabled: true
+ warn_vl: 10
+ kick_vl: 25
+ tempban_vl: 50
+ permban_vl: 100
+
+# ==========================================
+# PUNISHMENT SETTINGS
+# ==========================================
+
+punishments:
+ # Commands to execute for each punishment level
+ # Use %player% for player name, %reason% for reason
+ kick_command: "kick %player% &c[XAC] Illegal activity detected"
+ tempban_command: "tempban %player% 30d %reason%"
+ permban_command: "ban %player% %reason%"
+
+ # Default reason for bans
+ default_reason: "[XeroAntiCheat] Suspicious activity"
+
+# ==========================================
+# ALERT SYSTEM
+# ==========================================
+
+alerts:
+ # Enable or disable alert broadcasts
+ enabled: true
+
+ # Alert format (MiniMessage)
+ # Available placeholders: %player%, %check%, %vl%
+ format: "[XAC] %player% failed %check% (VL: %vl%)"
+
+ # Staff-only alert format
+ staff_format: "[%time%] %message%"
+
+# ==========================================
+# COMMANDS
+# ==========================================
+
+commands:
+ # Permission required for admin commands
+ reload_permission: "xac.admin"
+ # Permission to bypass all checks
+ bypass_permission: "xac.bypass"
+ # Permission to receive alerts
+ alerts_permission: "xac.alerts"
+
+# ==========================================
+# TPS COMPENSATION
+# ==========================================
+
+tps:
+ # Enable TPS-based threshold scaling
+ enabled: true
+ # Minimum TPS to apply compensation
+ min_tps_threshold: 18.0
diff --git a/target/classes/plugin.yml b/target/classes/plugin.yml
new file mode 100644
index 0000000..2d173c3
--- /dev/null
+++ b/target/classes/plugin.yml
@@ -0,0 +1,185 @@
+name: XeroAntiCheat
+version: 1.0.8
+main: com.xeroth.xeroanticheat.XeroAntiCheat
+author: Xeroth
+description: Lightweight, accurate anti-cheat for Paper 1.21.x
+api-version: 1.21
+softdepend:
+ - ProtocolLib
+
+commands:
+ xac:
+ description: XeroAntiCheat main command
+ usage: /xac
+ permission: xac.command.version
+ aliases: [xeroanticheat, anticheat]
+
+permissions:
+
+ # ── Wildcards ────────────────────────────────────────────────────────────
+
+ xac.*:
+ description: Grants all XeroAntiCheat permissions including bypass
+ default: false
+ children:
+ xac.admin: true
+ xac.bypass: true
+
+ xac.admin:
+ description: Grants all staff commands and alert access (does NOT grant bypass)
+ default: op
+ children:
+ xac.command.reload: true
+ xac.command.status: true
+ xac.command.punish: true
+ xac.command.clearviolations: true
+ xac.command.verbose: true
+ xac.command.alerts: true
+ xac.command.version: true
+ xac.alerts: true
+
+ # ── Commands ─────────────────────────────────────────────────────────────
+
+ xac.command.reload:
+ description: Reload XAC configuration
+ default: op
+
+ xac.command.status:
+ description: View a player's violation levels and ping
+ default: op
+
+ xac.command.punish:
+ description: Manually trigger a punishment for a player
+ default: op
+
+ xac.command.clearviolations:
+ description: Clear all violation levels for a player
+ default: op
+
+ xac.command.verbose:
+ description: Toggle verbose per-flag output for a specific player
+ default: op
+
+ xac.command.alerts:
+ description: Toggle receiving anti-cheat alerts in chat
+ default: op
+
+ xac.command.version:
+ description: Show the plugin version
+ default: true
+
+ # ── Alerts ───────────────────────────────────────────────────────────────
+
+ xac.alerts:
+ description: Receive alerts for all checks
+ default: op
+ children:
+ xac.alerts.movement: true
+ xac.alerts.combat: true
+ xac.alerts.misc: true
+
+ xac.alerts.movement:
+ description: Receive alerts for movement checks only
+ default: false
+
+ xac.alerts.combat:
+ description: Receive alerts for combat checks only
+ default: false
+
+ xac.alerts.misc:
+ description: Receive alerts for misc checks only
+ default: false
+
+ # ── Bypass ───────────────────────────────────────────────────────────────
+
+ xac.bypass:
+ description: Bypass all anti-cheat checks
+ default: false
+ children:
+ xac.bypass.movement: true
+ xac.bypass.combat: true
+ xac.bypass.misc: true
+
+ xac.bypass.movement:
+ description: Bypass all movement checks
+ default: false
+ children:
+ xac.bypass.speed: true
+ xac.bypass.fly: true
+ xac.bypass.jesus: true
+ xac.bypass.nofall: true
+ xac.bypass.timer: true
+ xac.bypass.spider: true
+ xac.bypass.glide: true
+ xac.bypass.phase: true
+
+ xac.bypass.combat:
+ description: Bypass all combat checks
+ default: false
+ children:
+ xac.bypass.killaura: true
+ xac.bypass.reach: true
+ xac.bypass.critical: true
+ xac.bypass.autoclicker: true
+ xac.bypass.velocity: true
+
+ xac.bypass.misc:
+ description: Bypass all miscellaneous checks
+ default: false
+ children:
+ xac.bypass.fastplace: true
+ xac.bypass.scaffold: true
+ xac.bypass.fasteat: true
+ xac.bypass.inventorymove: true
+
+ xac.bypass.speed:
+ description: Bypass SpeedCheck
+ default: false
+ xac.bypass.fly:
+ description: Bypass FlyCheck
+ default: false
+ xac.bypass.jesus:
+ description: Bypass JesusCheck
+ default: false
+ xac.bypass.nofall:
+ description: Bypass NoFallCheck
+ default: false
+ xac.bypass.timer:
+ description: Bypass TimerCheck
+ default: false
+ xac.bypass.spider:
+ description: Bypass SpiderCheck
+ default: false
+ xac.bypass.glide:
+ description: Bypass GlideCheck
+ default: false
+ xac.bypass.phase:
+ description: Bypass PhaseCheck
+ default: false
+ xac.bypass.killaura:
+ description: Bypass KillAuraCheck
+ default: false
+ xac.bypass.reach:
+ description: Bypass ReachCheck
+ default: false
+ xac.bypass.critical:
+ description: Bypass CriticalCheck
+ default: false
+ xac.bypass.autoclicker:
+ description: Bypass AutoClickerCheck
+ default: false
+ xac.bypass.velocity:
+ description: Bypass VelocityCheck (requires ProtocolLib)
+ default: false
+ xac.bypass.fastplace:
+ description: Bypass FastPlaceCheck
+ default: false
+ xac.bypass.scaffold:
+ description: Bypass ScaffoldCheck
+ default: false
+ xac.bypass.fasteat:
+ description: Bypass FastEatCheck
+ default: false
+ xac.bypass.inventorymove:
+ description: Bypass InventoryMoveCheck
+ default: false
diff --git a/target/maven-archiver/pom.properties b/target/maven-archiver/pom.properties
new file mode 100644
index 0000000..43bf534
--- /dev/null
+++ b/target/maven-archiver/pom.properties
@@ -0,0 +1,3 @@
+artifactId=xeroanticheat
+groupId=com.xeroth
+version=1.0.8
diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
new file mode 100644
index 0000000..94be6ae
--- /dev/null
+++ b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
@@ -0,0 +1,37 @@
+com/xeroth/xeroanticheat/command/XACCommand$1Cmd.class
+com/xeroth/xeroanticheat/data/PlayerData$PositionSnapshot.class
+com/xeroth/xeroanticheat/check/Check.class
+com/xeroth/xeroanticheat/listener/CombatListener.class
+com/xeroth/xeroanticheat/XeroAntiCheat.class
+com/xeroth/xeroanticheat/data/PlayerData$RotationSnapshot.class
+com/xeroth/xeroanticheat/manager/DatabaseManager.class
+com/xeroth/xeroanticheat/checks/misc/ScaffoldCheck.class
+com/xeroth/xeroanticheat/protocol/PacketListener$2.class
+com/xeroth/xeroanticheat/command/XACCommand.class
+com/xeroth/xeroanticheat/manager/PunishmentManager.class
+com/xeroth/xeroanticheat/checks/combat/VelocityCheck.class
+com/xeroth/xeroanticheat/listener/MovementListener.class
+com/xeroth/xeroanticheat/checks/movement/SpiderCheck.class
+com/xeroth/xeroanticheat/checks/combat/AutoClickerCheck.class
+com/xeroth/xeroanticheat/checks/movement/PhaseCheck.class
+com/xeroth/xeroanticheat/protocol/PacketListener$1.class
+com/xeroth/xeroanticheat/manager/ViolationManager.class
+com/xeroth/xeroanticheat/checks/misc/FastEatCheck.class
+com/xeroth/xeroanticheat/checks/misc/InventoryMoveCheck.class
+com/xeroth/xeroanticheat/protocol/PacketListener.class
+com/xeroth/xeroanticheat/checks/movement/JesusCheck.class
+com/xeroth/xeroanticheat/manager/ConfigManager.class
+com/xeroth/xeroanticheat/checks/movement/SpeedCheck.class
+com/xeroth/xeroanticheat/checks/movement/GlideCheck.class
+com/xeroth/xeroanticheat/checks/movement/FlyCheck.class
+com/xeroth/xeroanticheat/data/PlayerData$VelocitySnapshot.class
+com/xeroth/xeroanticheat/manager/CheckManager.class
+com/xeroth/xeroanticheat/checks/movement/NoFallCheck.class
+com/xeroth/xeroanticheat/protocol/PacketListener$3.class
+com/xeroth/xeroanticheat/listener/MiscListener.class
+com/xeroth/xeroanticheat/data/PlayerData.class
+com/xeroth/xeroanticheat/checks/combat/ReachCheck.class
+com/xeroth/xeroanticheat/checks/misc/FastPlaceCheck.class
+com/xeroth/xeroanticheat/checks/movement/TimerCheck.class
+com/xeroth/xeroanticheat/checks/combat/CriticalCheck.class
+com/xeroth/xeroanticheat/checks/combat/KillAuraCheck.class
diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
new file mode 100644
index 0000000..15403aa
--- /dev/null
+++ b/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
@@ -0,0 +1,30 @@
+/home/axel/Músicas/Java/src/main/java/com/xeroth/xeroanticheat/XeroAntiCheat.java
+/home/axel/Músicas/Java/src/main/java/com/xeroth/xeroanticheat/check/Check.java
+/home/axel/Músicas/Java/src/main/java/com/xeroth/xeroanticheat/checks/combat/AutoClickerCheck.java
+/home/axel/Músicas/Java/src/main/java/com/xeroth/xeroanticheat/checks/combat/CriticalCheck.java
+/home/axel/Músicas/Java/src/main/java/com/xeroth/xeroanticheat/checks/combat/KillAuraCheck.java
+/home/axel/Músicas/Java/src/main/java/com/xeroth/xeroanticheat/checks/combat/ReachCheck.java
+/home/axel/Músicas/Java/src/main/java/com/xeroth/xeroanticheat/checks/combat/VelocityCheck.java
+/home/axel/Músicas/Java/src/main/java/com/xeroth/xeroanticheat/checks/misc/FastEatCheck.java
+/home/axel/Músicas/Java/src/main/java/com/xeroth/xeroanticheat/checks/misc/FastPlaceCheck.java
+/home/axel/Músicas/Java/src/main/java/com/xeroth/xeroanticheat/checks/misc/InventoryMoveCheck.java
+/home/axel/Músicas/Java/src/main/java/com/xeroth/xeroanticheat/checks/misc/ScaffoldCheck.java
+/home/axel/Músicas/Java/src/main/java/com/xeroth/xeroanticheat/checks/movement/FlyCheck.java
+/home/axel/Músicas/Java/src/main/java/com/xeroth/xeroanticheat/checks/movement/GlideCheck.java
+/home/axel/Músicas/Java/src/main/java/com/xeroth/xeroanticheat/checks/movement/JesusCheck.java
+/home/axel/Músicas/Java/src/main/java/com/xeroth/xeroanticheat/checks/movement/NoFallCheck.java
+/home/axel/Músicas/Java/src/main/java/com/xeroth/xeroanticheat/checks/movement/PhaseCheck.java
+/home/axel/Músicas/Java/src/main/java/com/xeroth/xeroanticheat/checks/movement/SpeedCheck.java
+/home/axel/Músicas/Java/src/main/java/com/xeroth/xeroanticheat/checks/movement/SpiderCheck.java
+/home/axel/Músicas/Java/src/main/java/com/xeroth/xeroanticheat/checks/movement/TimerCheck.java
+/home/axel/Músicas/Java/src/main/java/com/xeroth/xeroanticheat/command/XACCommand.java
+/home/axel/Músicas/Java/src/main/java/com/xeroth/xeroanticheat/data/PlayerData.java
+/home/axel/Músicas/Java/src/main/java/com/xeroth/xeroanticheat/listener/CombatListener.java
+/home/axel/Músicas/Java/src/main/java/com/xeroth/xeroanticheat/listener/MiscListener.java
+/home/axel/Músicas/Java/src/main/java/com/xeroth/xeroanticheat/listener/MovementListener.java
+/home/axel/Músicas/Java/src/main/java/com/xeroth/xeroanticheat/manager/CheckManager.java
+/home/axel/Músicas/Java/src/main/java/com/xeroth/xeroanticheat/manager/ConfigManager.java
+/home/axel/Músicas/Java/src/main/java/com/xeroth/xeroanticheat/manager/DatabaseManager.java
+/home/axel/Músicas/Java/src/main/java/com/xeroth/xeroanticheat/manager/PunishmentManager.java
+/home/axel/Músicas/Java/src/main/java/com/xeroth/xeroanticheat/manager/ViolationManager.java
+/home/axel/Músicas/Java/src/main/java/com/xeroth/xeroanticheat/protocol/PacketListener.java