Files
SunsetRQ7 ab0ba5362e release: v3.5.0.2 - fix treasure map leak, end-city/spike idempotency bugs, remove redundant work
Fixed:
- MapSeedInterceptor filtered map icons against "TREASURE"/"PILLAGER"/"BASTION",
  none of which are real vanilla map decoration IDs (verified against
  org.bukkit.map.MapCursor.Type directly - no such constants exist). Buried
  treasure maps actually use TARGET_X, which was missing entirely, so treasure
  locations were never actually scrambled despite being a named threat-model
  signal. Now matches TARGET_X; the two dead checks were removed.
- EndCityProtector and EndSpikeProtector both marked a chunk/world "already
  processed" as soon as it was scanned, even when modify_world was off and
  nothing was changed. Turning modify_world on later (including via
  /asc toggle) would silently do nothing for anything already loaded once
  while it was off. Both now only mark "done" when the modification actually
  ran, or (End Cities) when a chunk provably has no End City at all.
- All four dragon-respawn end crystals independently started their own
  300-attempt polling loop to detect the end of the respawn animation - 4x
  the necessary scheduled work per fight. Now guarded to one loop per world.

Optimized:
- Replaced reflection-based scheduled-task cancellation in FoliaSchedulerUtil
  with direct typed ScheduledTask#cancel() calls (verified against the real
  Paper API); a genuine cancel failure is no longer silently swallowed.
- Removed a pointless seconds->ticks->seconds round-trip in the seed rotation
  interval config.
- Simplified the End Spike pillar-angle formula to a plain decagon spacing
  expression (behaviorally identical, verified via cos/sin periodicity).
- Trimmed default config.yml to essential settings; fuller explanations live
  in the README instead of long inline comments.
2026-07-24 16:08:17 +03:30

93 lines
7.7 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# AntiSeedCracker
[![Build](https://github.com/SunsetRQ7/AntiSeedCracker/actions/workflows/build.yml/badge.svg)](https://github.com/SunsetRQ7/AntiSeedCracker/actions/workflows/build.yml)
[![Release](https://img.shields.io/github/v/release/SunsetRQ7/AntiSeedCracker)](https://github.com/SunsetRQ7/AntiSeedCracker/releases/latest)
[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://github.com/SunsetRQ7/AntiSeedCracker/blob/main/LICENSE)
[![Java](https://img.shields.io/badge/Java-25-orange)](https://adoptium.net/)
### Stop seed crackers. Silently. Permanently.
Your world seed is the master key to your entire map. Whoever recovers it can compute — instantly, from outside the game, with zero in-game effort — the exact location of every stronghold, ancient city, buried treasure, ore vein, and slime chunk on your server. **That's not a minor leak. That's wallhack-grade ESP for your whole world.**
AntiSeedCracker shuts every known door a cheat client, ghost client, or tool like SeedCrackerX can use to get it. **14 protection layers. Zero kicks. Zero bans.** Cheaters just quietly receive cryptographically random garbage and never find out why their cracker keeps failing.
---
## Why protect your seed?
Once your seed is out, it doesn't matter how good your build-battle event or your economy plugin is — every hidden structure on the map is public information to anyone with a laptop. Seed-cracking tools don't need to hack your server or read your files: they reconstruct the seed purely from structure coordinates a player legitimately walked to. AntiSeedCracker can't make that impossible (nothing can — see **Honest limits** below), but it closes off every *other* way to leak it, and gives you visibility into the one it can't.
## Protection layers
**Network-level**
- **Packet-level seed spoofing** — replaces the hashed seed in `JOIN_GAME` and `RESPAWN` packets with a per-player, cryptographically random fake before it ever leaves the server (Netty-level, via bundled PacketEvents).
- **Dynamic seed rotation** — every player's fake seed rotates on a configurable interval, defeating crackers that accumulate data across sessions.
- **Seed integrity monitor** — read-only watchdog confirming the real generation seed never drifts. AntiSeedCracker does not, and will not, write to your world's actual generation seed — see **Safe for your world** below.
**World & structure**
- **Eye of Ender redirection** — thrown Eyes are redirected to a per-player fake stronghold for their entire flight path, with angular jitter, making triangulation useless.
- **`/locate` spoofing** — returns convincing fake coordinates, stable per player and per structure so repeat queries can't be used to spot the fake.
- **End spike randomization** — shuffles the bedrock cap heights of the ten End pillars, destroying the vanilla height fingerprint that uniquely identifies a seed.
- **End City fingerprint removal** — replaces the distinctive magenta glass pattern in End Cities (scoped to the structure's bounding box, not the whole chunk).
- **Treasure & explorer map scrambling** — buried treasure, mansion, monument, and other structure icons on maps are randomized in the `MAP_DATA` packet, stable per map so icons don't visibly jitter around.
- **Slime chunk obfuscation** *(opt-in)* — denies slime-chunk-sampling-based cracking at the cost of disabling slime farms where enabled.
**Command & detection** *(all logging-only where noted — never punishes players)*
- **Seed command blocking** — `/seed` and friends are blocked for players, console, and RCON, and stripped from tab-complete.
- **`/execute`-wrapping protection** — every blocked command is also checked against what an `/execute ... run ...` chain ultimately dispatches to (recursively, for nested chains), closing a well-known Bukkit command-blocker gap.
- **Structure reconnaissance monitor** — logs suspicious multi-structure visitation patterns matching known seed-cracking tool behavior; the tracked structure list is fully configurable.
- **Command probing monitor** — logs a player racking up several blocked seed commands in a short window, a pattern consistent with a bypass-probing script rather than one curious `/seed`.
- **Audit log** — every blocked attempt is recorded to a lightweight flat-file log, with `/asc stats` summaries in-game.
## Never punishes players
AntiSeedCracker follows a strict no-punishment philosophy: no kicks, no bans, ever. Cheat tools silently fail while legitimate gameplay is completely unaffected — nobody gets caught in the crossfire.
## Safe for your world
- The real seed is never read into logs, files, or network traffic, and is never rewritten by this plugin.
- An earlier internal design continuously overwrote the live in-memory generation seed to spoof `World.getSeed()` for other plugins. That approach was removed in 3.3.0 after we found it could corrupt chunk decoration on affected servers — Minecraft re-reads that field fresh for every chunk it generates, not just once at world load. The plugin now only ever reads that value, never writes it.
- Optional cosmetic changes (End spike caps, End City glass) are single-block, physics-free, run at most once per chunk, and can be disabled in the config.
- Verified by live testing on real Paper 26.1.2 and Folia 26.1.2 servers: zero errors, real seed confirmed byte-for-byte intact on disk after extended runtime.
## Honest limits
No plugin can make a seed truly uncrackable against tools like SeedCrackerX, which reconstruct it from the real coordinates of structures a player has legitimately explored — that's not a network exploit, and coordinates can't be hidden from a player standing at their own position. AntiSeedCracker closes every server-side leak we're aware of (packet spoofing, triangulation, command access, structure fingerprinting) and adds detection for cracking-pattern behavior, but exploration-based cracking is a limit of the genre, not something this plugin claims to solve. If a listing promises "100% uncrackable," be skeptical of it — not of us for saying so.
## Performance
Fully asynchronous by design. Packet work runs on Netty I/O threads with lock-free map lookups; periodic tasks use the async scheduler; on Folia, block operations are dispatched to the owning region thread. Zero measurable TPS impact.
## Requirements & compatibility
| | |
|---|---|
| Server software | Paper, Purpur, or Folia |
| Minecraft version | 26.1 and newer (26.1.x – 26.2) |
| Java | 25 or newer |
| Dependencies | None — PacketEvents is bundled |
Spigot/CraftBukkit and legacy Minecraft versions (1.16.5 – 25.x) are not supported by this release, as the plugin relies on modern Paper APIs for its async and region-threaded architecture.
## Quick start
1. Drop `AntiSeedCracker-3.5.0.2.jar` into your `plugins/` folder.
2. Restart the server. Protection is active immediately with sensible defaults.
3. Optionally tune `plugins/AntiSeedCracker/config.yml` — every layer, world list, message, and interval is configurable — and apply with `/asc reload`, or flip a single feature live with `/asc toggle`.
## Commands
- `/asc status` — see every protection layer at a glance
- `/asc stats` — audit log statistics
- `/asc reload` — apply config changes live
- `/asc toggle <feature> [true|false]` — flip one feature live without a full reload
- `/asc info` — version, platform, and update status
- `/asc help` — lists the subcommands you have permission to use
Permissions: `antiseedcracker.admin` (umbrella, default: op), or split as `antiseedcracker.admin.status` (view-only) / `antiseedcracker.admin.manage` (reload/toggle)
---
**Open source** under the MIT License: https://github.com/SunsetRQ7/AntiSeedCracker
Issues and feature requests welcome on GitHub. Anonymous usage metrics via bStats (opt-out supported).