legacy-horus ARCHIVED
An autonomous moderator for pocketmine 5.0
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
Coreplugin βsaru\core\database\Database,CustomPlayer,PlayerUtils,TranslationManagerCortexPE/Commandoβ command framework
synced from sarumc/legacy-horus · last updated 2026-07-16