AntiTotemGhost
Eliminates Ghost Players. Totems, Teleports, Respawns & More.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
13 Fix Reasons ◆ Smart Auto-Detect ◆ Folia Support ◆ Paper 1.21 ◆ API + Events
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
What AntiTotemGhost Solves
Minecraft's client-server model has a known weakness: after a totem pop, respawn, teleport, portal travel, or world change, the server stops sending tracker updates for that player. Other clients still see a ghost - an entity that does not move, does not animate, and does not exist on the server. The player is effectively invisible or frozen to everyone else until something forces a full chunk resend.
AntiTotemGhost fixes this. It monitors 13 distinct triggers - from totem resurrection to item pickup - and issues a targeted Paper API tracker refresh the moment a desync risk is detected. The result is zero ghosting, zero invisible players, and zero manual /reload commands from frustrated staff.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
13 Triggers. Every Module Independent.
Each module has its own toggle, delay-ticks, and optional sub-settings.
Every module can be disabled independently without touching the others.
◆ Combat & Survival Modules
◆ Movement Modules
◆ Administrative Modules
◆ Vehicle Modules
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Core Systems
◆ Smart Desync Detection
◆ Throttle System
◆ Exemption System
◆ Elytra State Tracker
◆ World Scoping
◆ Statistics
◆ Developer API
◆ Multi-Language Support
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
How AntiTotemGhost Compares
13 Triggers. Every Module Independent.
Each module has its own toggle, delay-ticks, and optional sub-settings.
Every module can be disabled independently without touching the others.
◆ Combat & Survival Modules
- Totem Fires after EntityResurrectEvent. Optional elytra state preservation so gliding players keep flying after a pop.
- Respawn Fixes ghosting after player death and respawn. Configurable delay to let the server settle.
- Item Pickup Fail-safe for ghost item pickups where the server and client disagree on inventory state.
◆ Movement Modules
- Teleport Configurable minimum distance (blocks) and cross-world-only mode. Ignores short /tpa hops if desired.
- World Change Fires when a player moves between worlds. Critical for multi-world networks.
- Portal Slightly higher delay to account for portal loading. Covers both Nether and End portals.
◆ Administrative Modules
- Join Refreshes a joining player for everyone already on the server. Eliminates the half-second invisible-on-join issue.
- Vanish Reveals properly when a vanished player un-vanishes. Integrates with SuperVanish and PremiumVanish.
- Gamemode Fires on gamemode changes. Can filter by source mode (e.g., only when leaving SPECTATOR).
◆ Vehicle Modules
- Mount / Dismount Separate modules for mounting and dismounting entities. Essential for servers with rideable mobs or vehicles.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Core Systems
◆ Smart Desync Detection
- Uses Paper's advanced getTrackedBy() API to compare who actually sees the player vs. who should
- Only issues a refresh when real desync is detected - no unnecessary chunk resends
- Periodic background task runs on a configurable interval (default: every 100 ticks)
- View distance for auto-detect is fully configurable (default: 128 blocks)
◆ Throttle System
- Per-reason minimum ticks between fixes for the same player+reason pair
- Prevents spam from rapid-fire triggers (e.g., multiple teleports in succession)
- Each reason has its own configurable cooldown in config.yml
◆ Exemption System
- Permission-based: grant antitotemghost.exempt to skip specific players
- UUID whitelist for hard-coded exemptions
- NPC auto-detection via Citizens and ModelEngine hooks - NPCs are never processed
◆ Elytra State Tracker
- Captures gliding state before totem fix and restores it after refresh
- Totem-popping while flying no longer drops the player out of the sky
◆ World Scoping
- Blacklist or whitelist mode for worlds
- Disable the plugin in specific worlds (e.g., event worlds, lobbies)
◆ Statistics
- Per-player fix counters for every reason, visible via /antighost stats
- Optional persistence to file on a configurable interval
- PlaceholderAPI expansion for displaying stats on scoreboards and holograms
◆ Developer API
- AntiTotemGhostAPI registered via Bukkit ServicesManager for easy access
- GhostFixEvent - cancellable, fired before a fix. Let other plugins veto fixes
- GhostFixedEvent - fired after a fix completes. Perfect for logging, rewards, or integration
- refreshPlayer(), refreshSurroundings(), getStats(), isExempt() - full API surface
◆ Multi-Language Support
- Built-in: English and Polish. Add custom languages by dropping a file in /lang/
- All messages use MiniMessage with full hex color and gradient support
- Language switch is a single line in config.yml
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
How AntiTotemGhost Compares
| Feature | AntiTotemGhost | Manual / Simple Plugins |
| Trigger coverage | 13 distinct reasons with per-module config | Totem-only or nothing at all |
| Detection method | Smart getTrackedBy() desync analysis | Blind chunk resend or none |
| Spam protection | Per-reason throttle, exemption, world scope | None or a basic global cooldown |
| Folia support | Fully supported via entity scheduler | Most break on Folia |
| API & events | Bukkit ServicesManager API + 2 events | No API surface |
| Elytra preservation | Captures and restores gliding state | Not handled |
| Soft dependencies | Citizens, ModelEngine, Essentials, Vanish plugins | None |
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Who This Is For
- PvP servers Totem ghosting is the #1 desync complaint in PvP. AntiTotemGhost eliminates it completely. No more reports of invisible opponents or frozen players after a clutch pop.
- Survival and SMP Players teleporting home, traveling through portals, or changing worlds will never ghost on each other. Essential for any server with /tpa, warps, or multi-world setups.
- Minigame and kit servers Gamemode changes, respawns, and spectator transitions are all covered. Players will always see each other clearly between rounds.
- Network owners Drop AntiTotemGhost into any server running Paper 1.21. Single-command install, full /antighost reload support, Folia-compatible out of the box. Works alongside any other plugin.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Technical Specs
| Server | Paper 1.21, Java 21 |
| Dependencies | None. All features work standalone. |
| Soft dependencies | PlaceholderAPI, Citizens, ModelEngine, Essentials, SuperVanish, PremiumVanish |
| Languages | en_US, pl_PL (extensible) |
| Analytics | bStats, optional, toggle in config |
| Threading | Folia-safe entity scheduler. Async detection, sync execution |
◆ Commands
| Command | Description | Permission |
| /antighost info | Shows plugin version, module statuses, and hook availability | none |
| /antighost reload | Reloads config and language files without server restart | antitotemghost.admin |
| /antighost refresh [player] | Manually refreshes a player's tracker state | antitotemghost.refresh |
| /antighost fixall | Refreshes all online players at once | antitotemghost.admin |
| /antighost stats [player] | Displays per-reason fix statistics for a player | antitotemghost.stats |
| /antighost debug <player> | Shows live tracker state for debugging desync issues | antitotemghost.admin |
◆ Permissions
| Permission | Description | Default |
| antitotemghost.admin | Access to admin commands (reload, fixall, debug) | op |
| antitotemghost.refresh | Manually refresh players | op |
| antitotemghost.stats | View fix statistics | true |
| antitotemghost.exempt | Player is skipped by all AntiTotemGhost actions | false |
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Get AntiTotemGhost
Ghost players are not a client-side issue. They are a server-side problem with a server-side fix.
13 triggers. Smart detection. Zero ghosting. One plugin.
Drop it in your plugins folder. It just works.
Questions? Open an issue on GitHub. Feature requests are reviewed.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
