LumoAiDetector icon

LumoAiDetector -----

An experimental anti-cheat that trains a local Random Forest model on your server's combat data



LumoAiDetector v0.1.0 - Stability, security, and sanity
Changelog

What changed
Threading is no longer aspirational. The old code had ScheduledFuture fields with no visibility guarantees, shared DecimalFormat instances, a BufferedWriter that got replaced mid-write, and computeIfAbsent called from concurrent paths without a ConcurrentMap. Every one of those caused data corruption or silent drops under load. All of them are fixed.
Model training no longer blocks your entire server. It now runs on a dedicated trainExecutor thread pool. You can train a fifty-tree model on fifty thousand rows without timing out the main thread.
Recording stops when the server stops. Not after. There is a proper shutdown hook now. Your last session will not be truncated.
Dates are UTC everywhere. Not JVM default, not Moscow time, not whatever the hosting provider configured. UTC.
New features
[*] /lad models info <name> - see accuracy, precision, recall, and F1-score for any model
[*] /lad dataset info - row counts by class, file size, skipped rows
[*] /lad check history <player> - replay recent check results for a player
[*] /lad record stop all - stop every active recording session at once
[*] Command aliases - active works like modelactivate, deactivate like modeldeactive, delete like modeldeleted. Old names still work.
[*] max-dataset-rows in config.yml - cap the dataset size before it eats your disk
[*] Build scripts - build.ps1 for Windows, build.sh for Linux
Bug fixes
[*] Fixed Location.subtract() mutating the entity's actual position in the world. The detector was not just reading location data, it was moving the player.
[*] Fixed SimpleDateFormat breaking under concurrent access from multiple threads.
[*] Fixed ScheduledFuture field visibility across threads. The cancel method was sometimes running on a null handle.
[*] Fixed DecimalFormat instance shared across threads without synchronization.
[*] Fixed BufferedWriter being replaced mid-recording, losing buffered data.
[*] Fixed catch(Throwable) masking OutOfMemoryError and other serious JVM problems.
[*] Fixed reader and serializer streams not closing when constructors threw.
[*] Fixed PluginSettings field not visible across threads on reload.
[*] Fixed GCD calculation producing negative values for large tick differences.
[*] Fixed dataset row limit not being enforced during recording.
[*] Fixed label change warning message being untranslated.
[*] Fixed RuntimeStateService returning stale cached state after state transitions.
[*] Fixed /lad models info with no argument causing a StackOverflowError from infinite recursion.
[*] Fixed recordings not stopping cleanly when the server shuts down.
Security
[*] SHA-256 hash verification for all downloaded model files
[*] Path traversal prevention - model names containing .. or / are rejected
[*] Model name length limited to 64 characters to prevent filesystem abuse
What you do to upgrade
[*] Replace the jar
[*] Start the server
[*] That is it
The config file and dataset are backward-compatible. If you use the old command names in scripts or chat binds, they still work - the aliases are transparent.
License
Apache License 2.0. Do not remove my name or reupload as your own. If you fork it, use a different name and mention the original. Full terms in the LICENSE file.
----------, Jun 1, 2026
Resource Information
Author:
----------
Total Downloads: 19
First Release: Jun 1, 2026
Last Update: Jun 10, 2026
Category: ---------------
All-Time Rating:
2 ratings
Find more info at github.com...
Version -----
Released: --------------------
Downloads: ------
Version Rating:
----------------------
-- ratings