Anti-cheat & moderation plugin for SaruMC. Depends on Core.

Named after the falcon god β€” watching every player. πŸ‘€

Anti-Cheat (29 checks)

Combat (12)

| Check | Description | |β€”β€”-|β€”β€”β€”β€”-| | Reach A | Distance exceeds ping-adjusted limit | | Reach B | Horizontal distance + target behavior analysis | | KillAura A | Multiple entities hit in same tick | | KillAura B | Hits without arm-swing animation | | AutoClicker A | CPS > 20 | | AutoClicker B | High CPS over 10-second window | | AutoClicker C | CPS spikes between ticks | | AutoClicker D | Quick return to high CPS after dip | | AutoClicker E | Inhumanly consistent click variance | | Criticals A | Fake crits β€” on ground or ascending | | Scaffold A | Fast block placement while moving on edges | | Velocity A | AntiKnockback β€” canceled damage velocity |

Movement (10)

| Check | Description | |β€”β€”-|β€”β€”β€”β€”-| | Fly A | Ascending/hovering without ground | | Fly B | Large vertical jumps without damage | | Speed A | Horizontal speed > vanilla limit | | Speed B | Strafe β€” instant >90Β° direction change | | Timer A | Packets faster than 20 TPS | | NoFall A | Fall damage avoided via fake ground | | Glide A | Near-zero descent while falling | | NoClip A | Phasing through solid blocks * | | Jesus A | Walking on water/lava surface | | AirJump A | Positive Y velocity while in air |

* Throttled to every 4th move event.

Packet (5)

| Check | Description | |β€”β€”-|β€”β€”β€”β€”-| | BadPackets A | Pitch > 91Β°, yaw > 361Β°, out-of-world positions | | BadPackets B | >4 auth/move packets per tick | | BadPackets C | Self-damage or attacker >8 blocks away | | BadPackets D | >15 inventory actions per 200ms | | BadPackets E | Glide without elytra, spoofed input flags |

World (1)

| Check | Description | |β€”β€”-|β€”β€”β€”β€”-| | Nuker A | >8 blocks broken per second * |

* Throttled to every 2nd break event.

Misc (1)

| Check | Description | |β€”β€”-|β€”β€”β€”β€”-| | ChatFilter | AntiSpam, AntiLink, Cooldown, AntiBadwords |

Each check has configurable max violations. On exceed: ban + kick.

Moderation Commands (8)

Command Description
/ban <player> [days] [reason] Ban a player
/unban <player> Unban by name
/mute <player> [minutes] [reason] Mute a player
/unmute <player> Unmute by name
/kick <player> [reason] Kick from server
/warn <player> [reason] Warn a player
/report <player> [reason] Report a player
/rank <player> <rank> Set player rank

All commands use Commando arguments, Database::getProvider(), and go through PlayerUtils::canApplySanction() for hierarchy checks.

Architecture

horus/
β”œβ”€β”€ check/
β”‚   β”œβ”€β”€ Check.php              # Base: fail(), getMaxViolations(), onEvent(), onPacket()
β”‚   β”œβ”€β”€ CheckManager.php       # Registry of all 29 checks
β”‚   β”œβ”€β”€ combat/                # Reach, KillAura, AutoClicker, Criticals, Scaffold, Velocity
β”‚   β”œβ”€β”€ movement/              # Fly, Speed, Timer, NoFall, Glide, NoClip, Jesus, AirJump
β”‚   β”œβ”€β”€ packet/badpackets/     # A-E: invalid packets, spam, self-damage, container, flags
β”‚   β”œβ”€β”€ world/nuker/           # Fast block break
β”‚   └── misc/ChatFilter.php
β”œβ”€β”€ command/
β”‚   β”œβ”€β”€ CommandLoader.php      # Registers all 8 commands
β”‚   └── lists/                 # Ban, Unban, Mute, Unmute, Kick, Warn, Report, Rank
β”œβ”€β”€ listener/
β”‚   β”œβ”€β”€ SessionListener.php    # PreLogin ban cache, Join session create, Quit cleanup
β”‚   └── PlayerListener.php     # Routes events+packets to CheckManager
β”œβ”€β”€ player/
β”‚   β”œβ”€β”€ PlayerSession.php      # Per-player: violations, click data, hit data
β”‚   β”œβ”€β”€ PlayerSessionManager.php
β”‚   └── data/                  # ClickData, HitData tracking
β”œβ”€β”€ task/async/                # Banwords file watcher
└── utils/                     # ChatUtils, MathUtils (stddev, kurtosis, skewness), TimeUtils

Performance

  • Ban cache: in-memory UUIDβ†’ban map, no per-login DB query
  • NoClipA: throttled to every 4th move event
  • NukerA: throttled to every 2nd break event

Dependencies

  • Core plugin β€” saru\core\database\Database, CustomPlayer, PlayerUtils, TranslationManager
  • CortexPE/Commando β€” command framework