How It Works
Decoy places invisible traps around players that are completely undetectable during normal gameplay. Fake ore veins, hidden entities, and bait chests are scattered underground on a repeating cycle. Legitimate players will never encounter them. Cheaters using x-ray, killaura, ESP, or reach hacks will interact with these traps and get flagged silently they receive no warning or alert.
All traps use vanilla generation. Ore veins match minecrafts shapes and per-ore sizes (diamonds spawn in veins of 4-8, emeralds as singles, etc). Traps are placed behind solid walls so only cheaters can find them.
Features
- Ore Traps - Fake ore veins using vanilla generation with correct sizes per ore type. Depth-aware placement (deepslate variants below Y=0, nether ores in the nether). Blocks give no drops and revert instantly on break.
- Entity Traps - Invisible armor stands that catch killaura and reach. Flags players who hit entities they shouldn't be able to see or reach beyond 4 blocks.
- NPC Traps - Invisible stands with floating player nametags. Only visible to ESP/entity radar cheats.
- Chest Traps - Bait chests buried in stone with valuables inside. Inventory never opens for the player -they get flagged on interaction.
- Nether Support - Ancient debris, nether gold, and quartz traps in nether worlds with correct block replacement (netherrack, basalt, blackstone).
- Flag Threshold - 1 flag marks a player as suspicious. 3+ flags (configurable) marks them as confirmed. Severity shows in all alerts and commands.
- Mining Path Tracking - Tracks recent block breaks per player. Calculates how many blocks a player mined in a straight line toward a trap (beeline detection).
- Discord Webhooks - Rich embed alerts with player head thumbnail, severity color coding, flag history breakdown, location, and beeline data.
- Auto Punish - Configurable command tiers that execute at specific flag counts. Set up automatic kicks, tempbans, and bans with {player} and {count} placeholders.
- SQLite Storage - All detections logged with player UUID, name, type, coordinates, timestamp, and approach distance. Persists across restarts.
- Crash Recovery - Active trap blocks are tracked in the database and restored to their original state on server restart.
Commands
- /decoy status - Plugin overview (active traps, total detections)
- /decoy check <player> - View player flags with type breakdown and severity
- /decoy recent [count] - Recent detections across all players
- /decoy clear <player> - Wipe all flags for a player
- /decoy test - Force deploy traps around you (admin testing)
- /decoy near [range] - List nearby trap ores
- /decoy tp - Teleport to nearest trap ore
- /decoy reload - Reload configuration and restart trap cycle
- /decoy purge - Remove all active traps and stop the cycle
Permissions
- decoy.admin -Access to all /decoy commands (default: op)
- decoy.notify -Receive in-game detection alerts (default: op)
- decoy.bypass -Exempt from all traps (default: false)
Configuration
Everything is configurable in
config.yml. Key settings:
- traps.interval - How often traps refresh around players (default: 90 seconds)
- traps.ore.veins - Number of ore veins placed per player per cycle (default: 25)
- traps.ore.radius - Placement radius around each player (default: 48 blocks)
- flags.confirm-threshold - Flags needed to mark a player as confirmed (default: 3)
- discord.webhook - Your Discord webhook URL for alerts
- punish.tiers - List of flag thresholds with commands to execute
- worlds.blacklist - Worlds where traps won't be placed
Discord Setup
Set
discord.enabled: true and paste your webhook URL. Alerts are sent asynchronously and include player avatars, severity levels, flag breakdown, and coordinates.
Auto Punish Setup
Set
punish.enabled: true and configure tiers in config. Works with any punishment plugin -just use the console commands you'd normally run.
Code (Text):
punish:
enabled: true
tiers:
- flags: 3
commands:
- "kick {player} Suspicious activity detected"
- flags: 5
commands:
- "tempban {player} 1d Automated ban - xray detected ({count} flags)"
- flags: 10
commands:
- "ban {player} Confirmed cheating - xray ({count} flags)"