1MB-XRayHeuristics is a CoreProtect-backed heuristic Anti-XRay add-on for 1MoreBlock. It focuses on suspicious mining patterns instead of lookup reports, runs as the plugin xrayheuristics, and exposes a single root command: /xrayer.
This branch is aligned to:
- Paper API compile target
26.1.2 - Declared
plugin.ymlapi-version floor1.21.11 - Java
25 - CoreProtect
24.0-dev1 - CoreProtect API
12 - Artifact pattern
build/libs/1MB-XRayHeuristics-v2.0.0-0xx-j25-26.1.2.jar
The canonical command is /xrayer. Legacy AXH.* permission nodes are still accepted, but /axh and /AntiXrayHeuristics are no longer exposed as commands.
- Server engine targets: Paper
1.21.11and Paper26.1.2 - Compiled against: Paper API
26.1.2 - Declared in
plugin.yml:api-version: 1.21.11 - Java runtime for building and running: Java
25 - Required dependency target: CoreProtect
24.0-dev1with API12 - Minimum accepted CoreProtect API at runtime:
11 - Internal plugin name for
/ver:xrayheuristics - Current plugin version:
2.0.0 - Build numbering: each successful
gradle buildwrites a new jar name and incrementsversion.properties
Tracked material coverage includes:
COAL_ORE,DEEPSLATE_COAL_OREIRON_ORE,DEEPSLATE_IRON_ORE,RAW_IRON_BLOCKCOPPER_ORE,DEEPSLATE_COPPER_ORE,RAW_COPPER_BLOCKGOLD_ORE,DEEPSLATE_GOLD_OREREDSTONE_ORE,DEEPSLATE_REDSTONE_OREEMERALD_ORE,DEEPSLATE_EMERALD_ORELAPIS_ORE,DEEPSLATE_LAPIS_OREDIAMOND_ORE,DEEPSLATE_DIAMOND_ORENETHER_GOLD_ORE,GILDED_BLACKSTONENETHER_QUARTZ_OREANCIENT_DEBRIS
RAW_GOLD_BLOCK is intentionally not tracked.
| Command | Description | Example |
|---|---|---|
/xrayer help |
Shows the main help page, command summary, and placeholders. | /xrayer help |
/xrayer debug |
Shows plugin, server, build, storage, and CoreProtect hook status. | /xrayer debug |
/xrayer debug help |
Lists the available debug pages. | /xrayer debug help |
/xrayer debug permissions |
Lists the permission nodes and defaults. | /xrayer debug permissions |
/xrayer debug commands |
Lists the command syntax and usage notes. | /xrayer debug commands |
/xrayer debug config |
Shows the live config values exposed through debug. | /xrayer debug config |
/xrayer debug set <key> <value> |
Updates a supported config value, saves config.yml, and reloads the plugin state. |
/xrayer debug set suspicion-threshold 125 |
/xrayer reload |
Reloads config.yml, locale.yml, weights.yml, and the CoreProtect hook state. |
/xrayer reload |
/xrayer suspicion [player] |
Shows the current live suspicion value for yourself or another tracked player. | /xrayer suspicion mrfloris |
/xrayer resetsuspicion [player] |
Clears a live suspicion session. | /xrayer resetsuspicion mrfloris |
/xrayer <player> |
Manually handles a player as xrayer. | /xrayer mrfloris |
/xrayer vault |
Opens the handled-player vault GUI. | /xrayer vault |
/xrayer absolve <player> |
Returns stored items and removes the player from the vault. | /xrayer absolve mrfloris |
/xrayer purge <player> |
Removes the player from the vault without returning items. | /xrayer purge mrfloris |
| Permission | Default | Description |
|---|---|---|
xrayheuristics.use |
op |
Allows help output and suspicion lookups. |
xrayheuristics.admin |
op |
Allows reload, debug pages, vault actions, manual player handling, suspicion resets, and vault GUI admin actions. |
xrayheuristics.notify |
op |
Receives the automatic “handled xrayer” staff warning messages. |
xrayheuristics.ignore |
false |
Bypasses heuristic tracking for that player. |
AXH.Commands.*, AXH.Vault.Purge, AXH.XrayerWarning, AXH.Ignore |
legacy | Older permission nodes are still supported for backward compatibility. |
These placeholders are currently used by configurable command strings:
{PlayerName}{TimesDetected}
CommandsExecutedOnXrayerDetected supports both placeholders.
CommandsExecutedOnPlayerAbsolved supports {PlayerName}.
/xrayer help/xrayer debug/xrayer debug permissions/xrayer debug commands/xrayer debug config/xrayer debug set debug-verbose-mining-session true/xrayer debug set track-worlds general,wild,nether/xrayer debug set nether-gold-weight 7.5/xrayer debug set suspicion-threshold 125/xrayer suspicion/xrayer suspicion mrfloris/xrayer resetsuspicion mrfloris/xrayer mrfloris/xrayer vault/xrayer absolve mrfloris/xrayer purge mrfloris
Use Gradle with Java 25:
gradle build printBuildConfigThat writes the next jar to the same pattern:
build/libs/1MB-XRayHeuristics-v2.0.0-0xx-j25-26.1.2.jar
After a successful jar build, version.properties is updated automatically, so the next local build will produce the next build number and keep the older jar in build/libs/.
Use the centralized Paper runner from:
/Users/floris/Projects/Codex/servers/run-test-server
Example foreground test runs:
/Users/floris/Projects/Codex/servers/run-test-server --paper 1.21.11 --plugin build/libs/1MB-XRayHeuristics-v2.0.0-0xx-j25-26.1.2.jar --foreground
/Users/floris/Projects/Codex/servers/run-test-server --paper 26.1.2 --plugin build/libs/1MB-XRayHeuristics-v2.0.0-0xx-j25-26.1.2.jar --foregroundThe same jar is compiled against Paper 26.1.2, but it declares api-version: 1.21.11 so it can be exercised on both Paper versions.
The plugin stores its own files in:
plugins/1MB-XRayHeuristics/
This repo should not rely on a local ./servers/ folder for building or testing. The path is ignored by Git, but the intended test flow is the centralized runner above.
If /Users/floris/Projects/Codex/servers/cache/Paper-26.1.2/plugins/CoreProtect-24.0-dev1.jar exists, Gradle uses that centralized jar for compile/test classpaths. Otherwise it falls back to the published CoreProtect 23.4 dependency coordinates for local build resilience.
- The plugin now exposes
/xrayer debug,/xrayer debug permissions,/xrayer debug commands,/xrayer debug config, and/xrayer debug set <key> <value>. - The live suspicion threshold is now configurable through
SuspicionThresholdand through/xrayer debug set suspicion-threshold <value>. - The heuristic tracker now covers raw iron blocks, raw copper blocks, gilded blackstone, ancient debris, and the deepslate ore families.
- The plugin now requires CoreProtect API
11or newer at startup and reports the exact CoreProtect version and API level it successfully hooked at runtime. /xrayer help,/xrayer debug,plugin.yml, andprintBuildConfignow distinguish between the Paper26.1.2compile target and the declared1.21.11api-version floor.CleansePlayerItemsandNullifySuspicionAfterPunishare the corrected config names, while the old typo keys are still read for backwards compatibility./ver xrayheuristicsnow reports the2.0.0-0xx-j25-26.1.2version line and a description that references the current CoreProtect24.0-dev1/ API12target.
- Original plugin authors: Mithrandir and Greymagic27
- 1MoreBlock maintenance, packaging, compatibility work, and testing: mrfloris
- Thanks to everyone who contributed context, testing, and follow-up fixes around the 1MB Anti-XRay plugin line