Anti Totem Ghost v1.5
The definitive ghost-player fix for Your server
Changelog
Version 1.5.0
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Java 21 & 25 Supported ◆ Paper 1.21.x - 26.2 ◆ Loads on Java 21
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Fixes
◆ Plugin now loads on Java 21 servers
- The jar was compiled for Java 25, so servers running Java 21 (like Paper 1.21.x) refused to load it with an UnsupportedClassVersionError.
- The plugin is now compiled for Java 21, so it runs correctly on both Java 21 and Java 25.
◆ Build targets the Java 21 compatible Paper API
- The previous build used the 26.2 Paper API, which requires Java 25 - it could not even be compiled for Java 21.
- The build now uses the 1.21.x Paper API, keeping full compatibility with Paper 1.21.x through 26.2.
Compatibility
◆ Supported environments
- Paper / Folia 1.21.x through 26.2.
- Java 21 and Java 25.
Upgrading from 1.4.0
- Stop the server, swap the jar, start it back up. That is it.
- No config changes are required.
No blink. No ghost. No flicker.
Changelog
Version 1.4.0
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Ghost Totem Fixed on Folia & Canvas ◆ New Full Refresh Mode ◆ New Placeholders
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Fixes
◆ Ghost totem is now fixed properly - even on Folia / Canvas
- Some players were still seeing the ghost (the player looking dead) after a totem pop, especially on Folia and Canvas servers.
- The refresh was sometimes skipped silently - for example when only one player was affected, or when the affected viewer was in a different Folia region where the plugin could not "see" them.
- The fix now refreshes everyone who is tracking the player by default, so nobody is left out. This works reliably on both Paper and Folia/Canvas.
◆ Commands and the plugin API are now thread-safe
- /antighost refresh, /antighost fixall and the developer API now work correctly from any thread, which Folia requires.
- No more fixes being silently skipped or glitched when triggered by console or other plugins.
◆ /antighost reload now reloads everything
- Reloading used to leave the background scanner and the stats saver running with old settings, and it never picked up PlaceholderAPI if it was installed after the plugin started.
- Now one /antighost reload restarts the tasks, re-checks hooks and registers the placeholders. No more full server restarts just to change a config option.
New
◆ refresh.mode - choose "full" or "smart"
- full (new default): refreshes everyone who sees the player - the most reliable, recommended for Folia/Canvas.
- smart: only refreshes players who are actually desynced (less traffic, lowest flicker). May miss some ghosts on Folia.
◆ New placeholders
- %antitotemghost_exempt% - whether the player is skipped (yes/no).
- %antitotemghost_desync% - how many viewers currently see the player wrongly.
- %antitotemghost_last_fix_% - seconds since the last fix of that type.
◆ Better diagnostics
- /antighost info now shows your active config: refresh mode, world mode, auto-detect settings and more.
- /antighost debug now also shows if the player is exempt, whether their world is allowed, and their recent fixes - perfect for support questions.
Behavior Change
◆ min-desync-threshold default lowered from 2 to 1
- The auto-detect scanner now reacts to even a single desynced viewer, so ghosts are caught earlier.
- If you set a custom value in your config, it is kept - nothing is overwritten.
Upgrading from 1.3.0
- Stop the server, swap the jar, start it back up. That is it.
- No config changes are required - the new "full" refresh mode is the default, so the ghost totem fix simply works.
- If you want the lowest-flicker behavior, add "refresh.mode: smart" under the "refresh" section of your config.yml.
No blink. No ghost. No flicker.
Changelog
Version 1.3.0
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Zero-Blink Fixes ◆ 4 Fixes ◆ Folia-Safe
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Fixes
◆ No more blink on totem pop - or any other fix
- The plugin used to hide and re-show the player to every nearby viewer on every totem activation, respawn, teleport, portal and world change. That hide/show cycle was the "player briefly disappears and reappears" effect some servers saw on totem pops.
- Now the refresh only touches the specific viewers who are actually desynced and missing the player. Everyone else sees nothing happen at all.
- If nobody is desynced, no packets are sent - the fix is a true no-op with zero blink.
◆ Folia / Canvas thread handling fixed
- The hide step ran from the target player's region thread while the show step ran on the viewer's thread. On Folia and its forks (like Canvas) that cross-thread call could fail silently or glitch.
- Both the hide and the show are now scheduled on each viewer's own region thread, which is what Folia requires.
◆ No more double refresh after a fix
- After the plugin hid and showed a player, the show event used to fire a second, unwanted refresh, making the player blink twice in a row.
- The "mid-refresh" guard is now held until the delayed show completes, so one fix always results in exactly one refresh.
◆ Deprecated chunk refresh skipped on Folia
- World.refreshChunk() is deprecated and re-sends whole chunks to every player tracking them, and on Folia it is not region-thread-safe.
- On Folia the block-level refresh is now skipped - entity re-rendering is handled by the per-viewer hide/show instead, avoiding cross-region packet sends and wide flicker.
Behavior Change
◆ min-desync-threshold now applies to event fixes too
- Until now the min-desync-threshold option only gated the periodic auto-detect scanner. It now also decides whether an event fix (totem, teleport, respawn, etc.) performs a hide/show refresh.
- Default is 2, which filters out minor tracking noise. Set it to 1 for the most aggressive behavior, or leave it if you never saw desync issues.
Upgrading from 1.2.0
- Stop the server, swap the jar, start it back up. That is it.
- No config changes are required. If you were seeing a blink on totem pops, this update removes it.
No blink. No ghost. No flicker.
Changelog
Version 1.2.0
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Large Server Stability ◆ 4 Fixes ◆ 1 New Option
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Fixes
◆ No more flickering on large servers
- The auto-detect scanner was doing a blanket hide/show for every viewer whenever it found even a tiny desync. With 100 players online this caused constant blinking as players kept disappearing and reappearing.
- Now the scanner only refreshes the specific viewers who are actually missing the player, instead of everyone. The rest of the server sees nothing happen.
◆ Vanish events no longer cause refresh loops
- When the plugin hid and showed players as part of a fix, it fired vanish events that triggered another fix, which fired more events, and so on. This created a cascade of unnecessary work, especially bad with vanish plugins on the server.
- The plugin now tracks which players are mid-refresh and skips vanish events for them.
◆ Auto-detect works on older Paper builds again
- On servers without the getTrackedBy API, auto-detect was silently doing nothing. It now falls back to a chunk and inventory refresh so ghost fixes still happen.
◆ Memory no longer grows with every player who ever joined
- Stats entries for offline players are now cleaned from memory after being saved to disk. On servers with thousands of unique players this keeps RAM usage flat instead of creeping up forever.
New Config Option
◆ min-desync-threshold under auto-detect
- You can now set how many missing viewers it takes before the plugin triggers a fix. Default is 2, which filters out minor tracking noise on busy servers. Set it to 1 for the old aggressive behavior, or higher if you still notice any flickering.
auto-detect:
min-desync-threshold: 2
Upgrading from 1.1.0
- Stop the server, swap the jar, start it back up. That is it.
- Your config.yml gets the new min-desync-threshold option added automatically on first start.
- If you were experiencing flickering on a large server, this update is for you.
No more blinking. No more loops. Just fixes.
Changelog
Version 1.1.0
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Paper 26.2 Support ◆ 5 Fixes ◆ Drop-In Upgrade
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
What's New
◆ Now runs on Paper 1.21.x through 26.2
- You can drop AntiTotemGhost onto any Paper server from 1.21.x up to the latest 26.2 builds. No separate versions needed.
- Paper 26.x servers need Java 25. If you are still on Java 21, use a 1.21.x Paper build and it works exactly as before.
Fixes
◆ Item pickup delay now actually works
- The item-pickup module was ignoring your delay-ticks setting and always using 1 tick. It now reads your config correctly.
◆ /antighost stats keeps your text colors
- Reason names in the stats list were appearing as plain white text even if your language file used colors. They now show up exactly as styled in your lang file.
◆ Typos in module names now warn you
- If you accidentally write "totemm" instead of "totem" in config.yml, the console will now tell you instead of silently pretending nothing is wrong.
◆ More reliable ghost removal
- The tracker refresh that clears ghost players got a small timing improvement. Fewer edge cases where a player could stay invisible after a totem pop or teleport.
◆ Statistics no longer build up forever
- The plugin now periodically drops old stats entries for players who have zero fixes recorded. On busy servers this keeps memory usage flat over time instead of growing endlessly.
Upgrading from 1.0.0
- Stop the server, swap the jar, start it back up. That's it.
- Your config.yml and language files do not need any changes.
- If your host runs Paper 26.x, double check they have Java 25 installed.
Drag and drop. It just works.
Statistics
Views
Purchases
Downloads
File size
Published
Updated
Info
Share & Earn
Share and earn part of the profits, an estimated €0.4 per product sale.