Polymart is now Voxel Shop! We're upgrading many features of the site, and during this open beta you will experience occasional bugs. Learn more
Smart and configurable AFK management for your server!
It is very important that you update to version 3.1, as it corrects bugs that could cause the plugin to malfunction.
Console spam from activity logs — [Activity] log lines no longer appear in the console by default. They only show when debug: true is set in config.yml. Core AFK messages (player went AFK, returned, kicked) always appear regardless.
Blank chat lines when a message is set to "" — Setting any message to an empty string in the language file no longer sends a blank line to the player's chat. It is silently skipped.
AFK pool bypass via water current — Players inside a water AFK pool could avoid detection indefinitely because water current movement was counted as real activity. Fixed: only manual input (swimming, looking around, jumping, sprinting) counts as activity.
Door spam-click bypass — Repeatedly clicking a door (manually or with an auto-clicker) was resetting the AFK timer indefinitely. Fixed.
"Use Item: toggle" bypass on levers and buttons — Holding right-click on levers or buttons prevented AFK detection. Fixed.
"Attack/Destroy: toggle" bypass on cobblestone generators — Holding left-click on a cobble generator prevented AFK detection indefinitely. Fixed.
"No longer AFK" broadcast missing or delayed — When a player returned from AFK by sending a chat message, the server broadcast frequently never appeared. It now fires immediately.
AFK warning messages showed wrong countdown value — The "you will be kicked in {seconds}s" warning displayed the configured threshold instead of the actual time remaining. Fixed.
AFK warnings not reset after world change — Players who received warnings and then moved to a disabled world would not receive them again on returning. Fixed.
GUI shift+click did not decrease numeric values — In the settings GUI, shift-clicking was supposed to decrease a value but always increased it instead. Fixed.
Large AFK pool detection not working — Players in pools larger than 5×5 blocks were never detected even with the feature enabled. Fixed.
GAMEMODE and COMMAND actions ignored in global AFK action — Setting afk-action.type: GAMEMODE or COMMAND silently fell through to a kick. Both actions now work correctly. GAMEMODE reads afk-action.gamemode; COMMAND reads afk-action.command with {player} / {uuid} support.
database.enabled ignored by SQL storage — SQL storage now activates correctly when either database.enabled or credit-system.database.enabled is true.
DiscordSRV pattern alerts never fired — With integrations.discordsrv.send-pattern-alerts: true, a Discord message is now sent when a suspicious pattern is detected, including the player name, pattern type, and confidence level.
performance.adaptive-intervals had no effect on the AFK check task — The option now correctly adjusts the AFK check interval based on server TPS.
reward-system) — now functionalreward-system.intervals.* thresholds once per AFK session.require-active-time-minutes, max-daily-rewards, and require-vault.{player} and {uuid} placeholders.analytics) — now functionalanalytics.enabled: true in config.yml.analytics.export-format). Files are saved to plugins/AntiAFKPlus/analytics/./afkplus analytics — shows a live in-memory summary./afkplus analytics export — forces an immediate export.antiafkplus.stats.visual-effects.holograms.enabled: true.visual-effects.holograms.* in config.yml.{player} and {time} placeholders (e.g. &eAFK for {time}).Drop-in update — no changes required, except for the two notes below.
enabled-worlds default is now [] (all worlds) | If you relied on the old default, add your world names explicitly or leave the list empty to keep "all worlds" behaviour |
repetitive-movement-threshold default lowered to 0.82 | Only relevant if you set this manually; otherwise no action needed |
10 new language keys under analytics.* | Custom translation files will fall back to English until updated |
AntiAFKPlus-3.1.jar.Problem: On servers with many players and active timers, the plugin could contribute to small TPS dips (for example, TPS hovering around 19 instead of a steady 20). Profiling tools (like spark) showed AntiAFKPlus as one of the points where the server was spending time waiting, even though CPU usage looked low.
Cause: An internal check the plugin ran on every scheduled task to know whether the server was paused. That check, repeated many times per second, produced small stalls that, added up, affected TPS.
Fix: The check was rewritten so that:
Expected result: More stable TPS and a much smaller footprint in profiling reports, especially on servers with high concurrency, the credit system enabled, particles, or multiple worlds.
No visible plugin behavior was modified: AFK detection, punishments, messages, and commands work exactly the same.
No action required.
config.yml.languages/*.yml).Players currently in AFK state when the server restarts will keep their usual behavior.
AntiAFKPlus-3.0.4.jar.That's it.
Problem: A player sitting on any rideable entity (horse, donkey, camel, boat, etc.) in water could completely avoid AFK punishments. The natural bobbing motion of the animal in water was incorrectly counted as player activity, causing the plugin to immediately unmark the player as AFK — even though the PatternDetector had correctly identified them as idle.
Symptoms:
repetitive_movement, keystroke_timeout)"manual (API activity/unmark)"Fix: The plugin now correctly identifies passive vehicle movement and ignores it as activity. Players mounted on entities will only be considered active if they move their camera (mouse input), which requires real player interaction. Pattern detection continues monitoring mounted players normally.
Affected setups: All servers, but especially those using MARK_AFK_ONLY as the AFK action. Servers using KICK or TELEPORT were less impacted since those actions execute before the next movement tick.
Problem: Setting player-now-afk: "" or player-no-longer-afk: "" in the language file to disable AFK state broadcasts still sent blank lines to all online players.
Fix: The plugin now checks if the message is empty or whitespace-only before broadcasting. Setting either message to "" will now completely suppress it — no blank lines, no chat spam.
/afkplus reloadProblem: Editing language YAML files (e.g., plugins/AntiAFKPlus/languages/en.yml) required a full server restart to take effect. The /afkplus reload command only reloaded config.yml but not the language files.
Fix: /afkplus reload now also reloads all language files. Changes to messages, translations, and custom text take effect immediately without restarting.
max-voluntary-afk-time-seconds → max-afk-duration-secondsThe old name was confusing because it also applies to players marked AFK by the plugin (via MARK_AFK_ONLY), not just voluntary /afk usage.
New config key:
# Maximum seconds a player can remain in AFK state before being forced active.
# Applies to both voluntary (/afk) and plugin-marked (MARK_AFK_ONLY) AFK states.
# Set to 0 to disable (players stay AFK indefinitely until they move).
max-afk-duration-seconds: 600
The old key max-voluntary-afk-time-seconds still works for backward compatibility — no migration needed.
AntiAFKPlus-3.0.3.jarNo config changes required. The old max-voluntary-afk-time-seconds key still works.
Optional: Rename max-voluntary-afk-time-seconds to max-afk-duration-seconds in your config.yml for clarity. Both keys are supported.
afk-action)Configure what happens when a player goes AFK directly in config.yml — no zone management or WorldGuard needed.
afk-action:
type: "TELEPORT"
teleport-location: "world,250,76,30"
Available actions: KICK, TELEPORT, MARK_AFK_ONLY, NONE
afk-action.exempt-worlds)Worlds where players get marked as AFK (tab list prefix, visual effects) but are not teleported or kicked. Perfect for spawn worlds.
afk-action:
type: "TELEPORT"
teleport-location: "world,250,76,30"
exempt-worlds:
- "world_spawn"
Players in world_spawn will show as AFK in tab but won't be teleported. Players in other worlds will be teleported normally.
Language files and messages now support hex colors (1.16+):
&#e5be01 format{#e5be01} format#e5be01 formatExample in your language file:
kick-action-teleport: "&#e5be01[Server] &fYou have been teleported."
The ConfigManager loaded messages before the LocalizationManager was initialized, so all cached messages (kick warning, AFK state, teleport) defaulted to English. Even after restart, the cached values stayed in English. Fixed: Messages are now reloaded after the localization system is ready.
Custom zone names (e.g., spawn_final, lobby) were ignored — only "spawn" worked. Now any zone name works.
require-worldguard defaulted to true. Now defaults to false.
Warnings now display the exact configured time (30, 10, 5) instead of the calculated remainder that varied with the check interval.
The on-screen title ("⚠ AFK Warning") was hardcoded. Now reads from your language file (warning-title-standard, warning-subtitle-standard).
Hardcoded. Now reads kick-action-teleport from your language file.
Hardcoded. Now reads suspicious-activity and pattern-violation-kicked from your language file.
Hardcoded. Now reads from language file (bedrock-detected, bedrock-tip-mobile, bedrock-tip-console, bedrock-tip-desktop).
All 10 languages now fully translated. No English leftovers.
afk-action and zone-managementafk-action > Server Transfer > KICKplugins/AntiAFKPlus/languages/ so new translated files are extractedconfig.yml:afk-action:
type: "TELEPORT"
teleport-location: "world,250,76,30"
exempt-worlds:
- "world_spawn"
Note: Back up your language files if you customized them. Re-apply changes after the new files are extracted.
Fix Show [AFK] in tab list via PlaceholderAPI:
Then use %antiafkplus_status% in your tab/chat plugin (TAB, LuckPerms, etc.).