BetterSpoofer
Advanced Fake-Player Spoofing for Paper 1.21+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
NMS-Backed ◆ TAB Spoofing ◆ Server List Ping ◆ In-World Entities ◆ Fake Chat ◆ Holograms ◆ Daily Scheduler ◆ GUI ◆ Paper 1.21
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
The Problem BetterSpoofer Solves
Every server owner knows the paradox: players want to join active servers, but your server can only become active once players join. A server showing 0 online gets skipped on every server list. New players see the player count before they read your description, before they see your spawn, before they give you a chance.
Cheap bots and janky reflection-based fake-player plugins make it worse. They crash on updates, desync from your TAB list, show broken skins, and leave error spam in your console.
BetterSpoofer injects fully NMS-backed fake players directly into Paper's player list. They appear in TAB, on the server list, in-world, and in chat, exactly like real players. No reflection hacks, no version breakage, no console noise. Your server looks alive from the first player who sees it, and stays looking alive through every off-peak hour.
Fake players shown in the TAB player count
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Core Features
Every system is configurable. Every fake behaves exactly how you want it to.
◆ NMS-Backed Real Fake Players
- Spawned through Paper's own PlayerList internals, not packet injection alone
- Count toward
Bukkit.getOnlinePlayers()- visible in Dynmap, PlaceholderAPI, any plugin that queries the player list - FakeChannel pipeline blocks PacketEvents handler injection, eliminating the most common crash vector in competing plugins
- ViaVersion compatibility built in - no WARN spam from cross-version clients
◆ TAB List Spoofing
- Custom name formats with full MiniMessage and legacy &x code support
- Randomized ping ranges with natural drift smoothing
- Configurable update intervals - fakes never look static
- Sort team keeps real players above fakes, or mix them in naturally
◆ Server List Ping Manipulation
- Multiply, add, fix, or take the max of the real player count independently
- Max-player slot manipulated separately from the online count
- Custom hover sample lines with MiniMessage gradients and placeholders
- MOTD override with per-host forced-host support
◆ Realistic Skin System
- Built-in skin pool with 200+ skins ready to use
- Mojang API lookup by username - fakes wear real player skins
- MineSkin API support with API key authentication
- MIXED source chains Mojang, built-in, and MineSkin with configurable fallback order
- LRU-bounded cache with configurable TTL - no redundant network calls
◆ In-World Fake Entities with Holograms
- TextDisplay holograms above each fake with configurable name and ping format
- Idle arm-swing animations at configurable intervals
- Head-tracking toward nearby real players
- Optional random wandering within a configurable walk radius with safe surface detection
- Gravity snap to ground on spawn - fakes stand on blocks, not mid-air
◆ Fake Chat System
- Configurable message pool - write your own chat lines
- Randomized intervals between messages with per-fake cooldowns
- Custom chat format with MiniMessage support
- Respects viewer permission - only intended audiences see fake chat
◆ Join and Leave Broadcasts
- Multiple random format templates per event - broadcasts never look scripted
- Configurable min and max stay duration for organic-looking activity
- Full MiniMessage and legacy color code support in all formats
◆ Daily Curve Scheduler
- Define a 24-hour player-count curve with linear interpolation between time points
- Configurable jitter percentage - fakes fluctuate naturally around the target
- Gradual add and remove mode avoids sudden population spikes
- Configurable timezone - use your server's local time, not UTC
- Pause and resume at runtime via command - override the curve without restarting
◆ Persistence Across Restarts
- Fakes saved to persistence.yml on shutdown
- Restored on startup with saved name, skin, location, game mode, and latency
- Skin cache preserved between restarts - no redundant API fetches
◆ Discord Webhook Integration
- Notifications for fake add and remove events
- Optional chat-message forwarding to Discord
- Daily activity summary at a configurable hour in your timezone
- HTTPS-only enforcement - refuses to send over plain HTTP
- Batch queue with global cooldown - never hits Discord rate limits
◆ Full GUI Management
- Paginated inventory with player-head icons showing skin, ping, type, and source
- Detail view: remove, teleport, and send random chat from one click
- Remove-all button with confirmation - clear the entire fake population instantly
◆ Plugin Compatibility
- LuckPerms: user pre-loading prevents WorldGuard and Vault sync-lookup crashes
- PlaceholderAPI: betterspoofer_fake_count, betterspoofer_real_count, betterspoofer_total, and more
- ViaVersion: UserConnection stubs prevent console warnings on fake player join
- bStats: optional metrics with config toggle
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
In Action
Fake players standing in-world
The fake-player list info menu
Join and leave broadcasts
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
How BetterSpoofer Compares
In Action
Fake players standing in-world
The fake-player list info menu
Join and leave broadcasts
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
How BetterSpoofer Compares
| Feature | BetterSpoofer | Typical Spoofer Plugin |
| NMS Access | Direct class imports, zero reflection, compile-time safe | Runtime reflection, breaks on Paper updates |
| Player List | ServerPlayer via PlayerList.placeNewPlayer | Packet injection only, not in Bukkit.getOnlinePlayers() |
| Channel Pipeline | FakeChannelPipeline blocks third-party handler injection | PacketEvents crash on fake player join |
| Skins | Mojang API, MineSkin API, built-in pool, MIXED chain with fallback | Single source or no skin support |
| Holograms | TextDisplay entities with configurable format and MiniMessage | None or armor-stand hacks |
| Scheduler | 24-hour curve with interpolation, jitter, gradual mode, pause/resume | None or fixed timer |
| GUI | Paginated player-head GUI with detail view and single-click actions | Commands only |
| Webhook | Batched queue, global cooldown, daily summary, HTTPS-only | None or raw HTTP without rate-limiting |
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Who This Is For
Who This Is For
- Survival and SMP servers Keep the look of an active community during off-peak hours. Fake players chat, move, and fill the TAB list while your real players are asleep or at work.
- RPG and economy servers A populated world makes the experience feel complete. The daily curve scheduler ramps player count to match peak hours automatically.
- Network owners Drop BetterSpoofer into any game mode running Paper 1.21. Single-command install. Full reload support. No restarts needed for config changes.
- New servers launching Break the cold-start problem before your real playerbase grows. A server showing 0 online gets skipped. A server showing 8-12 gets clicked. BetterSpoofer closes that gap from day one.
- Experienced administrators You have tried other solutions. They crashed on updates. They spammed your console. They looked fake. BetterSpoofer is the one that holds up under production load.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Technical Specs
Technical Specs
| Server | Paper 1.21+, Java 21 |
| Dependencies | PacketEvents (required). LuckPerms, PlaceholderAPI, ViaVersion (optional) |
| NMS Bridge | Mojang-mapped v1_21_R7, direct imports, zero reflection |
| Languages | English, Polish (add your own via lang/*.yml) |
| Folia | Not supported - requires Paper's threading model |
◆ Commands
| Command | Description | Permission |
| /spoofer add [name] [flags] | Spawn a fake player. Flags: --skin source:value, --here, --real, --phantom | betterspoofer.command.add |
| /spoofer remove <name|--all> | Remove a specific fake player or all at once | betterspoofer.command.remove |
| /spoofer list | List all active fake players with name, ping, and skin source | betterspoofer.command.list |
| /spoofer info <name> | Show detailed information about a specific fake player | betterspoofer.command.info |
| /spoofer chat <name> <message> | Make a fake player send a chat message | betterspoofer.command.chat |
| /spoofer skin <name> <source:value> | Change a fake player's skin at runtime | betterspoofer.command.skin |
| /spoofer move <name> | Move a fake player entity to your location | betterspoofer.command.move |
| /spoofer tp <name> | Teleport yourself to a fake player | betterspoofer.command.tp |
| /spoofer equip <name> <slot> <material> | Set equipment on a fake player (real fakes only) | betterspoofer.command.equip |
| /spoofer count | Display real vs fake vs displayed player counts | betterspoofer.command.count |
| /spoofer scheduler <pause|resume|target> | Control the daily curve scheduler at runtime | betterspoofer.command.scheduler |
| /spoofer webhook test | Send a test message to the configured Discord webhook | betterspoofer.command.webhook |
| /spoofer gui | Open the in-game fake player management GUI | betterspoofer.command.gui |
| /spoofer reload | Hot-reload configuration without restarting the server | betterspoofer.command.reload |
◆ Key Permissions
| Permission | Description | Default |
| betterspoofer.admin | Full access to all commands and features | op |
| betterspoofer.see-real | See real player counts in /count and PlaceholderAPI | op |
| betterspoofer.view-fakes | See fake players in TAB when viewer-permission is set | op |
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Get BetterSpoofer
Every minute your server shows 0 players, you are losing potential members.
The servers that win the acquisition game look active before they are.
NMS-backed. Zero reflection. Real player-list integration. Full GUI.
Purchase once. Configure once. Let it run.
Questions? Open a discussion. Feature requests are reviewed.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Get BetterSpoofer
Every minute your server shows 0 players, you are losing potential members.
The servers that win the acquisition game look active before they are.
NMS-backed. Zero reflection. Real player-list integration. Full GUI.
Purchase once. Configure once. Let it run.
Questions? Open a discussion. Feature requests are reviewed.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
