
MinerTrack Anti-XRay
MinerTrack is a plugin that will really help you catch those naughty players using Xray on your server in a different way from other Anti-Xray plugins. This plugin doesn't hide ores, as hiding ores requires a lot of resources.
So how does it work?
To catch Xray, MinerTrack uses an advanced algorithm that combines several factors like ore scarcity, the amount of ores mined in a certain period, the player’s path to ores, and many other aspects.
But can't people still use Xray?
Yes and no. Indeed, a player using Xray has two options:
- Keep using Xray but behave like a normal player to avoid being caught. They can't get more ores than a normal player or they’ll be caught by MinerTrack.
- Uninstall their Xray or be caught.
Why choose MinerTrack over other AntiXray options?
Compared to Paper Anti-XRay and Orebfuscator:
- MinerTrack is lightweight.
- MinerTrack's engine is innovative.
- MinerTrack detects Xray users, leaving it to you to decide on sanctions.
Compared to other AntiXray solutions:
- MinerTrack supports the latest Minecraft version.
- MinerTrack has been tested on servers with about 20 simultaneous players, with very few false positives (default config).
- MinerTrack is free.
Look what users have to say:
Assessments





- Detect XRayer
- Automatically handle cases when a player's X-Ray violation level reaches a threshold
- Automatically reduce the violation level when the player's behavior normalizes
- When the player is mining in a cave, they will not be detected incorrectly
- Highly configurable profiles

/mtrack notify <message>- Send alerts to staff/mtrack verbose- Enable Detailed Mode and notify staff with it enabled whenever a player’s violation level increases/mtrack check <player>- Check a player’s violation history/mtrack reset <player>- Reset a player's violation record/mtrack help- Get plugin help/mtrack kick <player> <reason>- Kick a player with a specific reason/mtrack reload- Reload the plugin’s configuration/mtrack update- Check for plugin updates/mtrack logs <log name.log>- View a MinerTrack log file

minertrack.bypass- Bypass X-Ray detectionminertrack.notify- Receive notifications and verbose informationminertrack.checkupdate- Receive update information and use/mtrack updateminertrack.use- Access the root command/mtrackminertrack.check- Use/mtrack checkminertrack.kick- Use/mtrack kickminertrack.logs- Use/mtrack logsminertrack.help- Use/mtrack helpminertrack.reset- Use/mtrack resetminertrack.sendnotify- Use/mtrack notifyminertrack.verbose- Use/mtrack verboseminertrack.reload- Use/mtrack reload

- Download the latest version of MinerTrack from Modrinth.
- Place the .jar file into the plugins or mods folder.
- Restart the server to generate the configuration and necessary files.

As plugin:
- Java 17 or higher
- Paper, Purpur, Folia or compatible forks (1.18 or newer) Not Spigot!
As Fabric mod:
- Java 17 or higher
- Fabric 1.18 or newer
- Fabric API
- LuckPerms 5.0.0+ (If you need permission node function)
As Forge mod:
- Java 17 or higher
- Forge 1.18 or newer
As NeoForge mod:
- Java 17 or higher
- NeoForge 1.20.1 or newer

If you encounter any issues or have suggestions for new features, feel free to reach out via Discord or open an issue on the plugin’s GitHub repository.
View Source: https://github.com/At87668/MinerTrack
Report Issue: https://github.com/At87668/MinerTrack/issues
Pull Requset: https://github.com/At87668/MinerTrack/pulls
Visit Wiki: https://minertrack.pages.dev/wiki/
Join Discord: https://discord.gg/MzTea2W9cb
Support Project: https://patreon.com/Author87668/join
Plugin Usage
Mod Usage
All Versions
+ Add Version| Name | Game version | Platforms | Published | Downloads | Actions |
|---|---|---|---|---|---|
| 21h ago | 1 | ||||
| 21h ago | 1 | ||||
| 21h ago | 1 | ||||
| 21h ago | 1 | ||||
| 21h ago | 1 | ||||
| 21h ago | 1 | ||||
| 21h ago | 1 | ||||
| 21h ago | 1 | ||||
| 21h ago | 1 | ||||
| 21h ago | 1 | ||||
| 21h ago | 1 | ||||
| 21h ago | 1 | ||||
| 21h ago | 1 | ||||
| 21h ago | 1 | ||||
| 21h ago | 1 | ||||
| 21h ago | 1 | ||||
| 21h ago | 1 | ||||
| 21h ago | 1 | ||||
| 21h ago | 1 | ||||
| 21h ago | 1 | ||||
| 21h ago | 1 | ||||
| 21h ago | 1 | ||||
| 21h ago | 1 | ||||
| 21h ago | 1 | ||||
| 21h ago | 1 | ||||
| 21h ago | 1 | ||||
| 21h ago | 1 | ||||
| 21h ago | 1 | ||||
| 21h ago | 1 | ||||
| 21h ago | 1 | ||||
| 21h ago | 1 | ||||
| 21h ago | 1 | ||||
| 21h ago | 1 | ||||
| 21h ago | 1 | ||||
| 21h ago | 1 | ||||
| 21h ago | 1 | ||||
| 21h ago | 1 | ||||
| 21h ago | 1 | ||||
| 21h ago | 1 | ||||
| 21h ago | 1 | ||||
| 21h ago | 1 | ||||
| 21h ago | 1 | ||||
| 21h ago | 1 | ||||
| 21h ago | 1 | ||||
| 21h ago | 1 | ||||
| 21h ago | 1 | ||||
| 21h ago | 1 | ||||
| 21h ago | 1 | ||||
| 21h ago | 1 | ||||
| 21h ago | 1 | ||||
| 21h ago | 1 | ||||
| 21h ago | 1 | ||||
| 21h ago | 1 | ||||
| 21h ago | 1 | ||||
| 21h ago | 1 | ||||
| 21h ago | 1 | ||||
| 21h ago | 1 | ||||
| 21h ago | 1 | ||||
| 21h ago | 1 | ||||
| 21h ago | 1 | ||||
| 21h ago | 1 | ||||
| 21h ago | 1 | ||||
| 21h ago | 1 | ||||
| 21h ago | 1 | ||||
| 21h ago | 1 | ||||
| 21h ago | 1 | ||||
| 21h ago | 1 | ||||
| 21h ago | 1 | ||||
| 21h ago | 1 | ||||
| 21h ago | 1 | ||||
| 21h ago | 1 | ||||
| 21h ago | 1 | ||||
| 21h ago | 1 | ||||
| 21h ago | 1 | ||||
| 21h ago | 1 | ||||
| 21h ago | 1 |
/mt check <player>and/mt reset <player>now work on players who are **not currently on the server**. Previously the target was resolved through a name-to-UUID lookup that only queried online players, so both commands failed withplayer-not-foundas soon as the player logged off — even though their violation levels and mining state were still held in memory.ViolationEnginenow maintains a bidirectional name↔UUID history (knownPlayerIds,knownPlayerNames), populated on every violation increase. This index is deliberately **not** cleared byresetViolation, so a player who has just been reset stays addressable by name.- Each platform resolves a target name through: engine history → platform-side name cache → online lookup → offline profile (Bukkit only, guarded by
hasPlayedBefore()/isOnline()). - Tab completion for
checkandresetoffers the union of online players and known player names.kickremains online-only. /mt reset <player>now also clears the mining-behaviour counters (mining path, vein count, vein clusters, air exposure) and the placed-block / artificial-air tracking maps, in addition to zeroing the violation level. Resetting only the violation counter left a stale mining path behind, which caused the next rare-ore break to immediately re-evaluate the old path and push the violation level back up.
### Fixed BUG
/mt kick <player>no longer broadcasts the kick message and the lightning effect for a player who is not online. Since name resolution became offline-aware, the command would otherwise report success and kick nobody.- Forge: listener registration no longer relies on the legacy event bus, which has been removed in recent Forge versions. Lifecycle, mining and server-tick listeners are now registered on the EventBus 7 static
BUSfields, which had silently stopped firing. - Forge / NeoForge: mod resources (
config.yml,language.yml, and theConfiguration/*.ymlgroup files) are now loaded through the mod-file resource API instead of the classloader, which could not see them inside the mod JAR. - Forge / NeoForge: a missing bundled resource or a missing YAML file is now reported as a warning and treated as an empty config, instead of throwing and aborting startup. The same guard was applied to the core resource loader.
- Fabric: permission-gated commands now work for OP players on Minecraft 26.1+ without LuckPerms installed. The MC 26.1+ permission model is detected once at class-load time, and the bypass and verbose checks now share a single OP-level check.
### Other Changed
pack.mcmetais now bundled into the mod JAR, making it a valid resource pack.- Resource filtering during the build is forced to UTF-8 to keep non-ASCII config content intact.
- Replaced a non-ASCII em-dash in a
mods.tomlcomment.
/mt check <player>and/mt reset <player>now work on players who are **not currently on the server**. Previously the target was resolved through a name-to-UUID lookup that only queried online players, so both commands failed withplayer-not-foundas soon as the player logged off — even though their violation levels and mining state were still held in memory.ViolationEnginenow maintains a bidirectional name↔UUID history (knownPlayerIds,knownPlayerNames), populated on every violation increase. This index is deliberately **not** cleared byresetViolation, so a player who has just been reset stays addressable by name.- Each platform resolves a target name through: engine history → platform-side name cache → online lookup → offline profile (Bukkit only, guarded by
hasPlayedBefore()/isOnline()). - Tab completion for
checkandresetoffers the union of online players and known player names.kickremains online-only. /mt reset <player>now also clears the mining-behaviour counters (mining path, vein count, vein clusters, air exposure) and the placed-block / artificial-air tracking maps, in addition to zeroing the violation level. Resetting only the violation counter left a stale mining path behind, which caused the next rare-ore break to immediately re-evaluate the old path and push the violation level back up.
### Fixed BUG
/mt kick <player>no longer broadcasts the kick message and the lightning effect for a player who is not online. Since name resolution became offline-aware, the command would otherwise report success and kick nobody.- Forge: listener registration no longer relies on the legacy event bus, which has been removed in recent Forge versions. Lifecycle, mining and server-tick listeners are now registered on the EventBus 7 static
BUSfields, which had silently stopped firing. - Forge / NeoForge: mod resources (
config.yml,language.yml, and theConfiguration/*.ymlgroup files) are now loaded through the mod-file resource API instead of the classloader, which could not see them inside the mod JAR. - Forge / NeoForge: a missing bundled resource or a missing YAML file is now reported as a warning and treated as an empty config, instead of throwing and aborting startup. The same guard was applied to the core resource loader.
- Fabric: permission-gated commands now work for OP players on Minecraft 26.1+ without LuckPerms installed. The MC 26.1+ permission model is detected once at class-load time, and the bypass and verbose checks now share a single OP-level check.
### Other Changed
pack.mcmetais now bundled into the mod JAR, making it a valid resource pack.- Resource filtering during the build is forced to UTF-8 to keep non-ASCII config content intact.
- Replaced a non-ASCII em-dash in a
mods.tomlcomment.
/mt check <player>and/mt reset <player>now work on players who are **not currently on the server**. Previously the target was resolved through a name-to-UUID lookup that only queried online players, so both commands failed withplayer-not-foundas soon as the player logged off — even though their violation levels and mining state were still held in memory.ViolationEnginenow maintains a bidirectional name↔UUID history (knownPlayerIds,knownPlayerNames), populated on every violation increase. This index is deliberately **not** cleared byresetViolation, so a player who has just been reset stays addressable by name.- Each platform resolves a target name through: engine history → platform-side name cache → online lookup → offline profile (Bukkit only, guarded by
hasPlayedBefore()/isOnline()). - Tab completion for
checkandresetoffers the union of online players and known player names.kickremains online-only. /mt reset <player>now also clears the mining-behaviour counters (mining path, vein count, vein clusters, air exposure) and the placed-block / artificial-air tracking maps, in addition to zeroing the violation level. Resetting only the violation counter left a stale mining path behind, which caused the next rare-ore break to immediately re-evaluate the old path and push the violation level back up.
### Fixed BUG
/mt kick <player>no longer broadcasts the kick message and the lightning effect for a player who is not online. Since name resolution became offline-aware, the command would otherwise report success and kick nobody.- Forge: listener registration no longer relies on the legacy event bus, which has been removed in recent Forge versions. Lifecycle, mining and server-tick listeners are now registered on the EventBus 7 static
BUSfields, which had silently stopped firing. - Forge / NeoForge: mod resources (
config.yml,language.yml, and theConfiguration/*.ymlgroup files) are now loaded through the mod-file resource API instead of the classloader, which could not see them inside the mod JAR. - Forge / NeoForge: a missing bundled resource or a missing YAML file is now reported as a warning and treated as an empty config, instead of throwing and aborting startup. The same guard was applied to the core resource loader.
- Fabric: permission-gated commands now work for OP players on Minecraft 26.1+ without LuckPerms installed. The MC 26.1+ permission model is detected once at class-load time, and the bypass and verbose checks now share a single OP-level check.
### Other Changed
pack.mcmetais now bundled into the mod JAR, making it a valid resource pack.- Resource filtering during the build is forced to UTF-8 to keep non-ASCII config content intact.
- Replaced a non-ASCII em-dash in a
mods.tomlcomment.
/mt check <player>and/mt reset <player>now work on players who are **not currently on the server**. Previously the target was resolved through a name-to-UUID lookup that only queried online players, so both commands failed withplayer-not-foundas soon as the player logged off — even though their violation levels and mining state were still held in memory.ViolationEnginenow maintains a bidirectional name↔UUID history (knownPlayerIds,knownPlayerNames), populated on every violation increase. This index is deliberately **not** cleared byresetViolation, so a player who has just been reset stays addressable by name.- Each platform resolves a target name through: engine history → platform-side name cache → online lookup → offline profile (Bukkit only, guarded by
hasPlayedBefore()/isOnline()). - Tab completion for
checkandresetoffers the union of online players and known player names.kickremains online-only. /mt reset <player>now also clears the mining-behaviour counters (mining path, vein count, vein clusters, air exposure) and the placed-block / artificial-air tracking maps, in addition to zeroing the violation level. Resetting only the violation counter left a stale mining path behind, which caused the next rare-ore break to immediately re-evaluate the old path and push the violation level back up.
### Fixed BUG
/mt kick <player>no longer broadcasts the kick message and the lightning effect for a player who is not online. Since name resolution became offline-aware, the command would otherwise report success and kick nobody.- Forge: listener registration no longer relies on the legacy event bus, which has been removed in recent Forge versions. Lifecycle, mining and server-tick listeners are now registered on the EventBus 7 static
BUSfields, which had silently stopped firing. - Forge / NeoForge: mod resources (
config.yml,language.yml, and theConfiguration/*.ymlgroup files) are now loaded through the mod-file resource API instead of the classloader, which could not see them inside the mod JAR. - Forge / NeoForge: a missing bundled resource or a missing YAML file is now reported as a warning and treated as an empty config, instead of throwing and aborting startup. The same guard was applied to the core resource loader.
- Fabric: permission-gated commands now work for OP players on Minecraft 26.1+ without LuckPerms installed. The MC 26.1+ permission model is detected once at class-load time, and the bypass and verbose checks now share a single OP-level check.
### Other Changed
pack.mcmetais now bundled into the mod JAR, making it a valid resource pack.- Resource filtering during the build is forced to UTF-8 to keep non-ASCII config content intact.
- Replaced a non-ASCII em-dash in a
mods.tomlcomment.
- Star pls:** https://github.com/At87668/MinerTrack
### Fixed BUG
- Can't run
MinerTrack-related commands in the console on theFabricplatform ifLuckPermsisn't installed.
- Happy using~*
- Star pls:** https://github.com/At87668/MinerTrack
### Fixed BUG
- Can't run
MinerTrack-related commands in the console on theFabricplatform ifLuckPermsisn't installed.
- Happy using~*
- Star pls:** https://github.com/At87668/MinerTrack
### Fixed BUG
- Can't run
MinerTrack-related commands in the console on theFabricplatform ifLuckPermsisn't installed.
- Happy using~*
- Star pls:** https://github.com/At87668/MinerTrack
### Fixed BUG
- Can't run
MinerTrack-related commands in the console on theFabricplatform ifLuckPermsisn't installed.
- Happy using~*
#### Fixed BUG
- The NeoForge platform jar doesn't include mods.toml, so mods can't load in
1.20.x. - The config file doesn't generate correctly when there are other mods that include
config.yml. - Comments get cleared when filling in missing configuration items.
- Happy using~*
#### Fixed BUG
- The NeoForge platform jar doesn't include mods.toml, so mods can't load in
1.20.x. - The config file doesn't generate correctly when there are other mods that include
config.yml. - Comments get cleared when filling in missing configuration items.
- Happy using~*
#### Fixed BUG
- The NeoForge platform jar doesn't include mods.toml, so mods can't load in
1.20.x. - The config file doesn't generate correctly when there are other mods that include
config.yml. - Comments get cleared when filling in missing configuration items.
- Happy using~*
#### Fixed BUG
- The NeoForge platform jar doesn't include mods.toml, so mods can't load in
1.20.x. - The config file doesn't generate correctly when there are other mods that include
config.yml. - Comments get cleared when filling in missing configuration items.
- Happy using~*
MinerTrack 2.1.1.0 is here! 🚀- Support the Project**
MinerTrack has not received any donations in the past year, and the number of GitHub Stars remains low. Your support is my greatest motivation to continue development!
If you appreciate this project, please consider supporting me via:
- Subscribing on **Patreon**: https://patreon.com/Author87668/join
- Starring the repository on **GitHub**: https://github.com/At87668/MinerTrack
Thank you so much to every supporter! ❤️
## What's News
### BUG Fixes
- Translation file wasn't released properly.
- The Minecraft version required in
neoforge.mods.tomlis incorrect.
### Data Collection
- We’re now using [FastStats](https://faststats.dev/) to collect usage data from the mod platform.
Joining the data collection program is optional, it helps us better understand usage and make improvements.
We won't collect any private data.
- Enjoy~*
MinerTrack 2.1.1.0 is here! 🚀- Support the Project**
MinerTrack has not received any donations in the past year, and the number of GitHub Stars remains low. Your support is my greatest motivation to continue development!
If you appreciate this project, please consider supporting me via:
- Subscribing on **Patreon**: https://patreon.com/Author87668/join
- Starring the repository on **GitHub**: https://github.com/At87668/MinerTrack
Thank you so much to every supporter! ❤️
## What's News
### BUG Fixes
- Translation file wasn't released properly.
- The Minecraft version required in
neoforge.mods.tomlis incorrect.
### Data Collection
- We’re now using [FastStats](https://faststats.dev/) to collect usage data from the mod platform.
Joining the data collection program is optional, it helps us better understand usage and make improvements.
We won't collect any private data.
- Enjoy~*
MinerTrack 2.1.1.0 is here! 🚀- Support the Project**
MinerTrack has not received any donations in the past year, and the number of GitHub Stars remains low. Your support is my greatest motivation to continue development!
If you appreciate this project, please consider supporting me via:
- Subscribing on **Patreon**: https://patreon.com/Author87668/join
- Starring the repository on **GitHub**: https://github.com/At87668/MinerTrack
Thank you so much to every supporter! ❤️
## What's News
### BUG Fixes
- Translation file wasn't released properly.
- The Minecraft version required in
neoforge.mods.tomlis incorrect.
### Data Collection
- We’re now using [FastStats](https://faststats.dev/) to collect usage data from the mod platform.
Joining the data collection program is optional, it helps us better understand usage and make improvements.
We won't collect any private data.
- Enjoy~*
MinerTrack 2.1.1.0 is here! 🚀- Support the Project**
MinerTrack has not received any donations in the past year, and the number of GitHub Stars remains low. Your support is my greatest motivation to continue development!
If you appreciate this project, please consider supporting me via:
- Subscribing on **Patreon**: https://patreon.com/Author87668/join
- Starring the repository on **GitHub**: https://github.com/At87668/MinerTrack
Thank you so much to every supporter! ❤️
## What's News
### BUG Fixes
- Translation file wasn't released properly.
- The Minecraft version required in
neoforge.mods.tomlis incorrect.
### Data Collection
- We’re now using [FastStats](https://faststats.dev/) to collect usage data from the mod platform.
Joining the data collection program is optional, it helps us better understand usage and make improvements.
We won't collect any private data.
- Enjoy~*
Forge/NeoForge bugs fixed in MinerTrack 2.1.0.1! 🚀- Support the Project**
MinerTrack has not received any donations in the past year, and the number of GitHub Stars remains low. Your support is my greatest motivation to continue development!
If you appreciate this project, please consider supporting me via:
- Subscribing on **Patreon**: https://patreon.com/Author87668/join
- Starring the repository on **GitHub**: https://github.com/At87668/MinerTrack
Thank you so much to every supporter! ❤️
## What's News
### BUG Fixes
- Fixed the issue where permission nodes haven't registered correctly.
- Fixed the issue where the
/mt notifycommand couldn't send messages in some minecraft versions.
### Package Optimization
- Now package the JAR separately for each platform.
- Enjoy~*
Forge/NeoForge bugs fixed in MinerTrack 2.1.0.1! 🚀- Support the Project**
MinerTrack has not received any donations in the past year, and the number of GitHub Stars remains low. Your support is my greatest motivation to continue development!
If you appreciate this project, please consider supporting me via:
- Subscribing on **Patreon**: https://patreon.com/Author87668/join
- Starring the repository on **GitHub**: https://github.com/At87668/MinerTrack
Thank you so much to every supporter! ❤️
## What's News
### BUG Fixes
- Fixed the issue where permission nodes haven't registered correctly.
- Fixed the issue where the
/mt notifycommand couldn't send messages in some minecraft versions.
### Package Optimization
- Now package the JAR separately for each platform.
- Enjoy~*
Forge/NeoForge bugs fixed in MinerTrack 2.1.0.1! 🚀- Support the Project**
MinerTrack has not received any donations in the past year, and the number of GitHub Stars remains low. Your support is my greatest motivation to continue development!
If you appreciate this project, please consider supporting me via:
- Subscribing on **Patreon**: https://patreon.com/Author87668/join
- Starring the repository on **GitHub**: https://github.com/At87668/MinerTrack
Thank you so much to every supporter! ❤️
## What's News
### BUG Fixes
- Fixed the issue where permission nodes haven't registered correctly.
- Fixed the issue where the
/mt notifycommand couldn't send messages in some minecraft versions.
### Package Optimization
- Now package the JAR separately for each platform.
- Enjoy~*
Forge/NeoForge bugs fixed in MinerTrack 2.1.0.1! 🚀- Support the Project**
MinerTrack has not received any donations in the past year, and the number of GitHub Stars remains low. Your support is my greatest motivation to continue development!
If you appreciate this project, please consider supporting me via:
- Subscribing on **Patreon**: https://patreon.com/Author87668/join
- Starring the repository on **GitHub**: https://github.com/At87668/MinerTrack
Thank you so much to every supporter! ❤️
## What's News
### BUG Fixes
- Fixed the issue where permission nodes haven't registered correctly.
- Fixed the issue where the
/mt notifycommand couldn't send messages in some minecraft versions.
### Package Optimization
- Now package the JAR separately for each platform.
- Enjoy~*
Forge/NeoForge support is in MinerTrack 2.1.0.0! 🚀- Support the Project**
MinerTrack has not received any donations in the past year, and the number of GitHub Stars remains low. Your support is my greatest motivation to continue development!
If you appreciate this project, please consider supporting me via:
- Subscribing on **Patreon**: https://patreon.com/Author87668/join
- Starring the repository on **GitHub**: https://github.com/At87668/MinerTrack
Thank you so much to every supporter! ❤️
## What's News
### Performance Optimizations
- Replaced the original
Method.invoke()withMethodHandlefor improved performance
### Localization
- Added Russian translation
- Added German translation
### Multi-Platform Support
- Added support for Forge and NeoForge
### Bug Fixes
- Fixed console Verbose mode toggle bug
- Enjoy~*
Forge/NeoForge support is in MinerTrack 2.1.0.0! 🚀- Support the Project**
MinerTrack has not received any donations in the past year, and the number of GitHub Stars remains low. Your support is my greatest motivation to continue development!
If you appreciate this project, please consider supporting me via:
- Subscribing on **Patreon**: https://patreon.com/Author87668/join
- Starring the repository on **GitHub**: https://github.com/At87668/MinerTrack
Thank you so much to every supporter! ❤️
## What's News
### Performance Optimizations
- Replaced the original
Method.invoke()withMethodHandlefor improved performance
### Localization
- Added Russian translation
- Added German translation
### Multi-Platform Support
- Added support for Forge and NeoForge
### Bug Fixes
- Fixed console Verbose mode toggle bug
- Enjoy~*
Forge/NeoForge support is in MinerTrack 2.1.0.0! 🚀- Support the Project**
MinerTrack has not received any donations in the past year, and the number of GitHub Stars remains low. Your support is my greatest motivation to continue development!
If you appreciate this project, please consider supporting me via:
- Subscribing on **Patreon**: https://patreon.com/Author87668/join
- Starring the repository on **GitHub**: https://github.com/At87668/MinerTrack
Thank you so much to every supporter! ❤️
## What's News
### Performance Optimizations
- Replaced the original
Method.invoke()withMethodHandlefor improved performance
### Localization
- Added Russian translation
- Added German translation
### Multi-Platform Support
- Added support for Forge and NeoForge
### Bug Fixes
- Fixed console Verbose mode toggle bug
- Enjoy~*
Forge/NeoForge support is in MinerTrack 2.1.0.0! 🚀- Support the Project**
MinerTrack has not received any donations in the past year, and the number of GitHub Stars remains low. Your support is my greatest motivation to continue development!
If you appreciate this project, please consider supporting me via:
- Subscribing on **Patreon**: https://patreon.com/Author87668/join
- Starring the repository on **GitHub**: https://github.com/At87668/MinerTrack
Thank you so much to every supporter! ❤️
## What's News
### Performance Optimizations
- Replaced the original
Method.invoke()withMethodHandlefor improved performance
### Localization
- Added Russian translation
- Added German translation
### Multi-Platform Support
- Added support for Forge and NeoForge
### Bug Fixes
- Fixed console Verbose mode toggle bug
- Enjoy~*
This is the **biggest update** since the inception of the MinerTrack project!
I have invested significant time and effort into a thorough refactoring and optimization to deliver a better experience. I hope you enjoy this update!
- Support the Project**
If you appreciate this project, please consider supporting me via:
- Subscribing on **Patreon**: https://patreon.com/Author87668/join
- Starring the repository on **GitHub**: https://github.com/At87668/MinerTrack
Thank you so much to every supporter! ❤️
## What's News
### Code Refactoring
- Optimized the original Bukkit-only structure into a platform-agnostic core with a lightweight platform loader, facilitating easier multi-platform expansion.
- Completely rewrote legacy code to improve performance.
### Configuration Optimization
- Migrated configuration naming conventions from Bukkit-specific standards to general Minecraft standards for better multi-platform compatibility.
### Detection Optimization
- Introduced new reference parameters to reduce false postive.
### Update Checker Optimization
- Now checking for version updates by platform.
### Fabric Support
- Version Compatibility**
- Now supports Fabric for Minecraft 1.18+.
- Mod Compatibility**
- Now supports worlds and blocks added by mods. (Effective only in the Mod version)
- Permission Node Support**
- Integrated LuckPerms-compatible permission API to support permission nodes on Fabric.
### Bug Fixes
- Fixed an issue where the
/mtrack resetcommand failed to correctly reset VL on Fabric. - Fixed an issue where bypass permissions were not applied correctly.
- Fixed an issue where the update checker ran on the Fabric main thread, causing server lag.
- Fixed compatibility issues preventing operation on Fabric versions 1.18–1.21.11.
- Fixed the issue where the updater didn't differentiate between channels.
- Note: If you are upgrading from v1, you must reconfigure your settings after the update!**
This is the **biggest update** since the inception of the MinerTrack project!
I have invested significant time and effort into a thorough refactoring and optimization to deliver a better experience. I hope you enjoy this update!
- Support the Project**
If you appreciate this project, please consider supporting me via:
- Subscribing on **Patreon**: https://patreon.com/Author87668/join
- Starring the repository on **GitHub**: https://github.com/At87668/MinerTrack
Thank you so much to every supporter! ❤️
## What's News
### Code Refactoring
- Optimized the original Bukkit-only structure into a platform-agnostic core with a lightweight platform loader, facilitating easier multi-platform expansion.
- Completely rewrote legacy code to improve performance.
### Configuration Optimization
- Migrated configuration naming conventions from Bukkit-specific standards to general Minecraft standards for better multi-platform compatibility.
### Detection Optimization
- Introduced new reference parameters to reduce false postive.
### Update Checker Optimization
- Now checking for version updates by platform.
### Fabric Support
- Version Compatibility**
- Now supports Fabric for Minecraft 1.18+.
- Mod Compatibility**
- Now supports worlds and blocks added by mods. (Effective only in the Mod version)
- Permission Node Support**
- Integrated LuckPerms-compatible permission API to support permission nodes on Fabric.
### Bug Fixes
- Fixed an issue where the
/mtrack resetcommand failed to correctly reset VL on Fabric. - Fixed an issue where bypass permissions were not applied correctly.
- Fixed an issue where the update checker ran on the Fabric main thread, causing server lag.
- Fixed compatibility issues preventing operation on Fabric versions 1.18–1.21.11.
- Fixed the issue where the updater didn't differentiate between channels.
- Note: If you are upgrading from v1, you must reconfigure your settings after the update!**
- The version on the Alpha channel might be unstable.*
- This version is for early testing; please report any issues promptly.*
### 2.0.0.0-alpha - v2 Rewrite (Multi-Platform & Config Reliability)
#### Major refactor
- The plugin is being re-architected into a **platform-agnostic core** (
common/,core/) with thin platform shims (bukkit/,fabric/). - All block / dimension identifiers now use the canonical Minecraft namespace format (
minecraft:diamond_ore,minecraft:water,minecraft:air,minecraft:cave_air,minecraft:ancient_debris). World *folder* names inxray.worldsand the group file names (overworld,nether,end) are preserved — only the contents are normalized. - The Bukkit platform translates
World.Environmentto the canonical id at runtime, so the sameconfig.ymlworks regardless of how the server admin named the on-disk folders. - The v1 code path under
src/main/legacy/is preserved for reference but is no longer wired intoplugin.yml;BukkitPlatformis the only entry point.
#### Fabric Support
- Now support Fabric on Minecraft 26.1+.
#### Config auto-completion (DONE)
- v2 now auto-completes user
config.ymland per-worldConfiguration/<group>.ymlagainst the JAR defaults on startup, so upgrading the plugin no longer requires manualconfig.ymlcleanup. - A new
_config-versionkey in every YAML file (main config and each group file) drives an automatic **back-up-and-replace** upgrade path: when a user's version is older than the JAR's, the file is saved as<name>-<yyyy-MM-dd>.yml.bakand seeded with the JAR default. The merge then fills in any keys added between the user's version and the latest. - The merge step counts the number of leaf keys it added and logs a summary line, e.g.
[Merger] config.yml: filled 5 missing key(s) from defaults. No log is emitted in the steady state, so logs stay quiet. - A separate
Created <file> from defaultline is emitted on the first run when the user file doesn't exist yet. - A new eager load of group configs in
BukkitPlatform.onEnable()ensures the per-world files are copied from the JAR on fresh install and the in-memoryCoreConfigis populated before the first mining event.
#### Fixed BUG
- v1 → v2 config migration: stale user
config.ymlwould silently keep the old layout, causing v2 to fall back to defaults at the call sites without ever updating the file on disk. Root cause was aMemorySection↔Mapmismatch between Bukkit'sYamlConfigurationand the core merger'sinstanceof Mapchecks, plus a missing_config-versionupgrade path on the main config. Both are now fixed. - Group config files were not being created on fresh install (only on the first mining event) — the eager
loadGroupConfigs()call inBukkitPlatform.onEnable()fixes this. /minertrack reloadwas serving the previous 5-second-cached config instead of the freshly-merged one — the cache is now explicitly cleared before reloading.
#### Other improvements
BukkitAdapter.reloadConfig()no longer callsplugin.reloadConfig(). v2 readsconfig.ymlvia the platform-agnosticConfigMerger, not Bukkit'sJavaPlugin#getConfig(), so the legacy reload call was a no-op.- The webhook custom-JSON template in
config.ymlhad a stray quote ("world": %world%',); now properly quoted as"world": "%world%"so the payload is valid JSON.
- Recommend to rebuild the
config.ymland theConfiguration/*.ymlfiles after upgrading.*
- The version on the Alpha channel might be unstable.*
- This version is for early testing; please report any issues promptly.*
### 2.0.0.0-alpha - v2 Rewrite (Multi-Platform & Config Reliability)
#### Major refactor
- The plugin is being re-architected into a **platform-agnostic core** (
common/,core/) with thin platform shims (bukkit/,fabric/). - All block / dimension identifiers now use the canonical Minecraft namespace format (
minecraft:diamond_ore,minecraft:water,minecraft:air,minecraft:cave_air,minecraft:ancient_debris). World *folder* names inxray.worldsand the group file names (overworld,nether,end) are preserved — only the contents are normalized. - The Bukkit platform translates
World.Environmentto the canonical id at runtime, so the sameconfig.ymlworks regardless of how the server admin named the on-disk folders. - The v1 code path under
src/main/legacy/is preserved for reference but is no longer wired intoplugin.yml;BukkitPlatformis the only entry point.
#### Fabric Support
- Now support Fabric on Minecraft 26.1+.
#### Config auto-completion (DONE)
- v2 now auto-completes user
config.ymland per-worldConfiguration/<group>.ymlagainst the JAR defaults on startup, so upgrading the plugin no longer requires manualconfig.ymlcleanup. - A new
_config-versionkey in every YAML file (main config and each group file) drives an automatic **back-up-and-replace** upgrade path: when a user's version is older than the JAR's, the file is saved as<name>-<yyyy-MM-dd>.yml.bakand seeded with the JAR default. The merge then fills in any keys added between the user's version and the latest. - The merge step counts the number of leaf keys it added and logs a summary line, e.g.
[Merger] config.yml: filled 5 missing key(s) from defaults. No log is emitted in the steady state, so logs stay quiet. - A separate
Created <file> from defaultline is emitted on the first run when the user file doesn't exist yet. - A new eager load of group configs in
BukkitPlatform.onEnable()ensures the per-world files are copied from the JAR on fresh install and the in-memoryCoreConfigis populated before the first mining event.
#### Fixed BUG
- v1 → v2 config migration: stale user
config.ymlwould silently keep the old layout, causing v2 to fall back to defaults at the call sites without ever updating the file on disk. Root cause was aMemorySection↔Mapmismatch between Bukkit'sYamlConfigurationand the core merger'sinstanceof Mapchecks, plus a missing_config-versionupgrade path on the main config. Both are now fixed. - Group config files were not being created on fresh install (only on the first mining event) — the eager
loadGroupConfigs()call inBukkitPlatform.onEnable()fixes this. /minertrack reloadwas serving the previous 5-second-cached config instead of the freshly-merged one — the cache is now explicitly cleared before reloading.
#### Other improvements
BukkitAdapter.reloadConfig()no longer callsplugin.reloadConfig(). v2 readsconfig.ymlvia the platform-agnosticConfigMerger, not Bukkit'sJavaPlugin#getConfig(), so the legacy reload call was a no-op.- The webhook custom-JSON template in
config.ymlhad a stray quote ("world": %world%',); now properly quoted as"world": "%world%"so the payload is valid JSON.
- Recommend to rebuild the
config.ymland theConfiguration/*.ymlfiles after upgrading.*
#### Fixed BUG
- Path records are incorrectly cleared when players teleport.
Recommended to update.
- Happy using~*
#### Detection Improvement
- Add option to ignore artificial air.
#### Code Clear Up
- Completely removed the code related to
air monitor.
#### Configuration Item Changed
Before:
``
yaml
cave:
air-threshold: 14 # When the number of air blocks reaches several, the player is considered to be in a cave?
CaveAirMultiplier: 5 # If cave air is found, regarded as how many ordinary air?
detection-range: 3 # 3 = 7x7x7, 2 = 5x5x5
check_skip_vl: true # VL add of whether or not to skip natural behavior
# Prevents players from manually creating air to bypass detection.
air-monitor:
enable: true # Enable or disable
min-path-length: 10 # Minimum digging path required to perform this detection.
air-ratio-threshold: 0.3 # Air percentage threshold (e.g., 0.3 for 30%).
violation-increase: 1 # The value of the increase in rating after each triggered violation.
violation-threshold: 5 # The number of ratings reached should be flagged as suspicion of deliberate creation of artificial air.
remove-time: 20 # How long to remove this record once (in minutes)
`
Now:
`yaml
cave:
air-threshold: 14 # When the number of air blocks reaches several, the player is considered to be in a cave?
CaveAirMultiplier: 5 # If cave air is found, regarded as how many ordinary air?
detection-range: 3 # 3 = 7x7x7, 2 = 5x5x5
check_skip_vl: true # VL add of whether or not to skip natural behavior
ignore-artificial-air: true # When true, ignore recently player-created air when checking for caves
artificial-air-remove-time: 20 # Minutes to consider broken blocks as artificial air
``- Recommend update to this version.**
- Recommend to rebuild the config.yml*
- Happy using~*

