Releases: stoshelabs/antixray
Release list
v1.3.0
AntiXray v1.3.0
Hytale 0.6 support.
This line targets Hytale 0.6.x. It runs on the new packet API, keeps up with the new per-section world streaming, and moves spectate onto the server's native spectator mode. Servers still on 0.5 stay on 1.2.0.
Fixed for 0.6: fakes sent to sections the client didn't have yet
- 0.6 streams the world to each client one 32-block section at a time, not a whole column at once
- "The client has this chunk" no longer means it has every section of it — fakes sent too early were silently dropped by the client, and the section still counted as done
- AntiXray now checks each section is on the client before obfuscating it, exactly like the server's own block updates do, and redoes a section when the client unloads it and streams it back
Changed: spectate runs on Hytale's native spectator
- Spectating puts you in AntiXray's own spectator game mode — the server's
Spectator, with the hotbar kept for the spectator tools - The server now does natively what AntiXray used to fake by hand: you're invisible to non-spectators and off the player list, you fly through blocks, can't be hurt, can't touch or break anything, and your voice stays on the spectator channel
- The third-person camera stops short of walls instead of clipping into them
- AntiXray still handles what the native mode doesn't: following the suspect into other worlds and back after they respawn, cycling through suspects only, first person, the HUD with their live score, and the inventory tools
- If you're already in a game-mode type (vanilla
/spectateincluded), AntiXray tells you instead of taking it over. If you disconnect mid-spectate, you're taken out of spectator mode when you rejoin Spectate.FollowYOffsetis unused and deprecated — there's no body to park out of shot anymore
Faster: one packet per section
- 0.6 can change many blocks of a section in a single packet, as the server's own block updates do
- Obfuscation, reveals and the debug tools now send one packet per section instead of one per block — thousands of packets per chunk become a handful
Also in this release
- The jar is named after the game line it targets:
AntiXray-1.3.0-hytale-0.6.jar - AntiXray shows its icon in the world settings' mods list instead of the
?placeholder - Versioned documentation — pick your release from the version menu. The 1.2 docs (Hytale 0.5) stay online at /antixray/v1.2/
- Inventories are read through 0.6's per-section inventory API, replacing the one Hytale has marked for removal
- Send-time mode ported to 0.6's new packet encoding
- Portuguese translations for every new string (
en_usandpt_brremain at full key parity)
Upgrading
- Update the plugin and the server together. 1.2.0 refuses to load on 0.6, and 1.3.0 refuses 0.5
- Replace
AntiXray-1.2.0.jarwithAntiXray-1.3.0-hytale-0.6.jarin your server'smods/folder - Restart
Config: nothing to change. Spectate.FollowYOffset is ignored now and can be deleted; everything else, and your suspicion data, carries over.
Requires a Hytale server in the >=0.6.0 <0.7.0 range. Built against 0.6.5.
Requires a Hytale server. No client mod needed.
v1.2.0
AntiXray v1.2.0
The honeypot works now.
Three separate bugs meant that on a normal world, obfuscation covered a fraction of what it claimed and detection could barely fire at all. This release fixes all three, and splits the ore field into camouflage and bait so that every valuable ore an X-ray user can see is a trap.
Fixed: obfuscation stopped a few seconds after a player joined
MaxTrapsPerPlayercapped a per-player list of every fake position at 40,000 — but at the default reach one player's field is roughly 100,000 positions- The cap was hit almost immediately, new chunks stopped being obfuscated, and protection only resumed in scraps as the client unloaded chunks
- This is what "fake ores show up in random chunks, not the ones I'm standing in" actually was
- The field is no longer stored. Which rock becomes a fake, which ore is masked, where a section's bait sits — all of it is a pure function of the block position and the surrounding terrain, identical for every player, so a break recomputes the answer instead of looking it up
- Nothing per-player is kept but which chunk sections a client has already been sent
Fixed: MaxY left the surface unprotected
- The old default of
128sits below the surface on ordinary worlds — a player standing at y140 had everything at and above eye level untouched - Now
256 - To be clear about what this knob is: it's a CPU limiter, not what keeps the surface clean. Every fake requires a fully-buried block, so exposed terrain is skipped no matter how high this is set. Lower it only on a strictly-underground server
Fixed: honeypots were nearly impossible to trip
- The break handler checked whether the block was still fully enclosed — but it never is. To break a block you must be able to see its face, so the check rejected essentially every genuine hit
- Traps are now recognised by position alone
New: the ore field has two tiers
The single FakeOrePalette split in two, and that split is what makes detection trustworthy:
| Camouflage | Trap | |
|---|---|---|
| Config | FakeOrePalette, FakeOreDensity | TrapOrePalette, TrapChancePerSection |
| Ores | common metals (copper, iron) | valuable ores (gold, mithril, …) |
| Density | hundreds per chunk | ~one per 12 sections |
| Mining near it | revealed before you reach it | never revealed |
| Breaking it | nothing | honeypot hit |
Real valuables are masked as plain rock and the camouflage field is common-only, so a cheater cannot tell bait from anything else — because there is nothing else.
Changed: honeypot hits are a rate, not a lifetime tally
- Hits used to accumulate forever, so an honest miner who tunnelled blind into a trap once a month would eventually flag themselves
- Hits are now counted inside
HoneypotWindowSeconds(default 30 min), like the mining-rate heuristic already was - What separates a cheater isn't the total — it's how many they find in a short time
HoneypotFlagThresholddrops from4to3to suit the window
Server compatibility is now declared
manifest.jsondeclaresServerVersion: ">=0.5.6 <0.6.0"instead of"*"- The server enforces this itself: outside the range the plugin is refused at load with an incompatibility message, rather than half-working against an API it wasn't built for
- Hytale 0.6.0 introduces native spectate, which replaces this plugin's custom follow-camera — the range deliberately stops before it
- 1.0.0 and 1.1.0 declared
"*", so they will happily load on 0.6 and misbehave instead of refusing. Upgrade before you update the server
Also in this release
- One source of truth for the version. The banner, panel title and update check all read the version the server parsed from
manifest.json, which the build fills in fromgradle.properties. A constant in the source could previously drift from the built jar and make the update check compare the wrong number - Status tab reports camouflage and trap ids separately (
Ore ids resolved: 12 camouflage, 8 trap) — a non-zero camouflage count with zero traps means detection can't fire MaxChunksPerTickraised from8to16, so the field keeps up with a player walking- The debug Nearest traps tool reads the recomputed field instead of the removed position list
- Portuguese translations for every new string (
en_usandpt_brremain at full key parity) - A
RELEASING.mdchecklist, since the in-game update check depends on the tag matching what the jar reports
Upgrading
- Replace
AntiXray-1.1.0.jarwithAntiXray-1.2.0.jarin your server'smods/folder - Restart
Config: two keys were added (TrapOrePalette, TrapChancePerSection, Detection.HoneypotWindowSeconds) and existing files pick up their defaults automatically — nothing was renamed or removed, and your suspicion data carries over.
Two defaults worth reviewing if your config.json pins them to the old values, because they are the fixes above:
Obfuscation.MaxY— set it to256unless your server is strictly undergroundObfuscation.FakeOrePalette— if yours is still["Ore_*"], the camouflage field includes valuables and every trap is buried under identical-looking bait, so detection will never fire. Narrow it to the common metals
Requires a Hytale server in the >=0.5.6 <0.6.0 range. Built and tested against 0.5.7.
Requires a Hytale server. No client mod needed.
v1.1.0
AntiXray v1.1.0
Update notifications and an admin "what's new" popup.
AntiXray now tells you when a new version ships, and shows admins the release notes for the version they're actually running — without leaving the game.
Update check
- On startup AntiXray asks GitHub whether a newer release exists
- If there is one, a high-visibility banner is printed at the end of the boot log — where it's actually visible, rather than buried mid-startup
- Admins are also told in chat a few seconds after they join, with the download link
- When you're already current, the console simply confirms it
"What's new" popup
- Admins get a scrollable popup with the release notes for the version they're running, shown once per release
- Close dismisses it for now — you'll see it again next time you join
- Don't show until next version dismisses it for good, until a newer release ships. Stored per-admin in
changelog_seen.json - Re-open it any time from the panel: Tools → What's new
Offline-safe by design
- Both lookups are asynchronous with a 5-second timeout and fail silently
- A server with no outbound internet — or one GitHub rate-limits — sees nothing at all: no errors, no startup delay, and no popup
- Nothing about your server is sent to GitHub; it's a plain public read of the releases endpoint
Also in this release
- Portuguese translations for every new string (
en_usandpt_brremain at full key parity) - Documentation updated: Update check & release notes
Upgrading
- Replace
AntiXray-1.0.0.jarwithAntiXray-1.1.0.jarin your server'smods/folder - Restart
No config changes are required — nothing was added, removed, or renamed in config.json, and your suspicion data carries over untouched.
Note: the update check ships in this release, so a 1.0.0 server had no way to announce it. 1.1.0 is the first version that will tell you about future releases.
Requires a Hytale server. No client mod needed.
v1.0.0
AntiXray v1.0.0
Initial public release.
Packet-level X-ray protection for Hytale: per-player ore obfuscation, a fake-ore honeypot field that catches cheaters, protected blocks with decoy chests, suspicion scoring with admin alerts, and a tabbed admin panel with live spectate.
Protection
- Per-player packet obfuscation — fully-enclosed real ores are shown as plain rock in each client's view only. The server world is never modified; remove the plugin and every client instantly sees the real blocks again
- Fake-ore honeypot field — decoy ores scattered through hidden host rock at a configurable density, buried
CoverDepthdeep so a legitimate player can never see one - Wildcard block ids —
FakeOrePaletteandTrackedOresaccept"Prefix*"entries, auto-discovering the ore variants your world actually registered. No hand-maintained id list, and no "the ids don't match my build" problem - Protected blocks — a second layer for valuable non-ore blocks: hide the buried real ones, and scatter rare buried decoy chests as honeypots. Container blocks are auto-excluded from hiding, since their model replicates on a channel that can't be intercepted
- Send-time obfuscation (experimental) —
Obfuscation.SendTimeModerewrites each chunk as it is sent, so it arrives already-obfuscated: no correction packets and no brief real-ore flash. Built with the server's own encoder and cached per section, so cost scales with unique chunks rather than player count. Off by default; falls back to the vanilla chunk on any error, so terrain can never break - Safe by design — exposed faces are never touched, and breaking a block re-sends the true neighbours within
RevealRadius, so mining never uncovers a fake or leaves a real ore masked
Detection
- Honeypot hits — breaking a fully-enclosed fake ore is the strongest signal there is: a legitimate player physically cannot see an enclosed block
- Mining rate — tracked-ore breaks within a sliding window, with copper and iron excluded by default so normal mining doesn't false-flag
- Both feed a single time-decaying suspicion score, with quiet alerts to online admins on flag. Nothing is ever auto-punished — AntiXray surfaces suspects and gives you the tools to confirm; the decision is always yours
Admin tools
- One command,
/antixray(alias/ax), opening a tabbed panel: Suspects (worst-first, per-row spectate), Tools, and Status - Live spectate — a real server follow-camera attached to a suspect, in first or third person, with a spectator HUD, cross-world following, and your own gear stashed and restored automatically (including on disconnect)
- Suspect inventory — read what a suspect is carrying and confiscate or destroy individual stacks. Each stack is re-checked before it's taken, so a stack that moved is refused rather than mis-taken
- Probe tool to discover your server's exact block ids from chat
- Optional debug tools behind
-Dantixray.debug=true, including an X-ray audit view that proves the fake field reached your client without needing an X-ray resource pack
General
- Per-world toggles, an explicit bypass list, and an optional permission bypass — operators are not auto-exempt, so you can verify the protection as an admin
- English and Brazilian Portuguese, switched with
General.Language. English is always the fallback, and every message is editable in the data folder - Performance: slab snapshots instead of per-block world reads, section-granular scan tracking, and batched packet flushes
Install
- Drop
AntiXray-1.0.0.jarinto your server'smods/folder - Start the server once to generate
config.jsonand the language files - Run
/antixrayand check Status → Fake-ore ids resolved is greater than0
Protection is automatic from there. Full walkthrough in the Getting Started guide.
Requires a Hytale server. No client mod needed.