1MB-XRayHunter is a lightweight CoreProtect add-on for Paper servers that helps staff spot suspicious mining patterns quickly. It reads CoreProtect block-break history, ranks the most suspicious miners in the current world or any archived CoreProtect world, and lets staff drill into cached vein details and teleport to those finds for manual review. Recent lookup work is aimed at large archives too: wide console lookups now use batched aggregate queries, a temporary in-memory summary cache, and lazy detail loading so huge CoreProtect databases are less likely to exhaust heap space.
This repo is now aligned with the other 1MoreBlock plugins:
- Java target:
25 - Paper API compile target:
26.1.2 - Declared plugin.yml
api-versionfloor:1.21.11 - CoreProtect target:
24.0-dev1with API version12 - Plugin data folder:
plugins/1MB-XRayHunter/ - Build output folder:
build/libs/
- Paper
1.21.11or26.1.2 - Java
25 - CoreProtect
24.0-dev1
/xrayhunter help/xrayhunter lookup [time|alltime] [world|allworlds] [-all]/xrayhunter <time|alltime>/xrayhunter detail <index|player> [page]/xrayhunter teleport <index>/xrayhunter debug/xrayhunter debug help/xrayhunter debug permissions/xrayhunter debug commands/xrayhunter debug config/xrayhunter debug set <key> <value>/xrayhunter debug whitelist <player|list|add|remove>/xrayhunter reload
Aliases:
/xhunt/xr
xrayhunter.use: allows lookup, detail, and teleport.xrayhunter.admin: allows debug pages, config updates, and reload.xhunt.use: legacy alias forxrayhunter.use.xhunt.admin: legacy alias forxrayhunter.admin.
This plugin does not register PlaceholderAPI placeholders yet.
/xrayhunter 2d/xrayhunter lookup 30d/xrayhunter lookup 7dfrom console for an all-world text report within the safe limit/xrayhunter lookup 7d -allfrom console to widen one lookup back to the full tracked column set and include lower-value/base materials in the query too/xrayhunter lookup alltime allworldsfrom console for an explicit full-archive scan across every CoreProtect world/xrayhunter lookup 365d allworldsfrom console for a deliberately large batched archive scan/xrayhunter lookup 120d wildfrom console for a database-world lookup that returns real historical results on the current 65 GB archive/xrayhunter lookup 120d wild -allfrom console for the full-width version of that database-world report/xrayhunter lookup 1000d spawnfrom console for a long single-world text report/xrayhunter detail 1/xrayhunter detail Greymagic27 2/xrayhunter teleport 3/xrayhunter debug/xrayhunter debug config/xrayhunter debug set defaults.lookup-time 7d/xrayhunter debug set display.top-results 15/xrayhunter debug whitelist fumblehead/xrayhunter debug whitelist list/xrayhunter debug whitelist remove fumblehead
config.yml currently includes:
- startup self-check toggle
- default lookup time
- top result count
- detail page size
- console all-world lookup safety settings
- compact high-value-only console mode, enabled by default
- excluded-player filter list for vetted usernames that should never show in rankings
/xrayhunter debug whitelist ...helpers to manage that excluded-player list without editing the file by hand- automatic filtering of invalid CoreProtect pseudo-users such as
#piston - stale archive hints when the database is older than the requested lookup window
- batched aggregate lookups plus a temporary summary cache for large archive scans
- tracked overworld and nether material lists
Lookup notes:
/xrayhunter lookup [time|alltime] [world|allworlds]can query loaded Bukkit worlds and CoreProtect database worlds that are not currently loaded on the server.- Console lookups default to a narrower high-value-only table so smaller terminals stay readable; add
-allto a lookup to show every tracked display column for that one run. - Compact console mode now narrows the lookup scope too, not just the rendered table, so archive scans can stay fast on large CoreProtect databases.
- Compact-mode
ORE%is now calculated against broader tracked totals for the shown players, while theShowncolumn keeps representing the visible high-value subtotal. - Explicit
allworldsscans use batched aggregate queries and can reuse a temporary in-memory summary cache when the same query is repeated soon after. /xrayhunter detailnow loads one selected player's vein data lazily instead of caching every event from the original lookup.- If a short lookup returns no data, XRayHunter now shows the latest tracked block timestamp and suggests a larger window.
- Console lookup tables use a compact pastel report with ore columns,
ORE%,BASE, and eitherTotalorShownso large historical worlds stay readable. - Use
-allwhen you want the broader tracked-material picture, including lower-value ores, base-material counts, and the more traditional ratio context.
Tracked materials intentionally include:
ANCIENT_DEBRISGILDED_BLACKSTONENETHER_GOLD_ORENETHER_QUARTZ_OREDIAMOND_OREEMERALD_OREGOLD_OREIRON_ORERAW_IRON_BLOCKCOPPER_ORERAW_COPPER_BLOCKLAPIS_OREREDSTONE_ORECOAL_ORESTONEDEEPSLATENETHERRACK
RAW_GOLD_BLOCK is intentionally not tracked.
Build with Gradle:
./gradlew buildNotes:
- Successful jar builds increment
version.properties. - Each successful build produces a new uniquely named jar in
build/libs/, so older jars stay there unless you runclean. - The latest verified local build from this repo pass is:
build/libs/1MB-XRayHunter-v2.0.0-032-j25-26.1.2.jar - The next successful build will increment from build
032. - Gradle compiles this project against Paper API
26.1.2and keeps plugin.ymlapi-versionat1.21.11so the same jar can load on both Paper1.21.11and Paper26.1.2. - Gradle prefers CoreProtect
24.0-dev1from.gradle/compile-support/CoreProtect-24.0-dev1.jar, then the centralized Paper cache jars, and only falls back to Maven23.4if the dev jar is unavailable. - Refresh that compile-support jar from
/Users/floris/Projects/Codex/servers/cache/Paper-26.1.2/plugins/CoreProtect-24.0-dev1.jarif it is missing. - This project no longer relies on a repo-local
servers/folder. If one exists locally, it stays ignored by Git and is not part of the supported test workflow.
Use the centralized shared runner in foreground mode:
/Users/floris/Projects/Codex/servers/run-test-server --paper 1.21.11 --plugin build/libs/1MB-XRayHunter-v<jar>.jar --foreground
/Users/floris/Projects/Codex/servers/run-test-server --paper 26.1.2 --plugin build/libs/1MB-XRayHunter-v<jar>.jar --foregroundThe intended verification flow is:
- confirm the plugin enables cleanly
- run
xrayhunter help - run
xrayhunter debug - run
xrayhunter debug config - run
xrayhunter lookup 2d - stop the foreground server cleanly before moving to the next Paper version