{"id":18926412,"url":"https://github.com/sakura-ryoko/afkplus","last_synced_at":"2026-04-03T06:07:28.774Z","repository":{"id":208588131,"uuid":"721872490","full_name":"sakura-ryoko/afkplus","owner":"sakura-ryoko","description":"AFK Plus Mod for Minecraft.  Developed for my RyokoCraft Vanila+ SMP -- This project started out as a fork of \"AfkDisplay\" by beabfc.","archived":false,"fork":false,"pushed_at":"2024-10-23T21:45:16.000Z","size":1042,"stargazers_count":6,"open_issues_count":1,"forks_count":4,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-10-24T05:16:09.168Z","etag":null,"topics":["afk","fabricmc-mod","minecraft-mod"],"latest_commit_sha":null,"homepage":"https://modrinth.com/mod/afkplus","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sakura-ryoko.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":"custom:[\"https://www.paypal.com/cgi-bin/webscr?business=info%40sakuraryoko.com\u0026cmd=_donations\u0026currency_code=USD\u0026item_name=Donation+to+Sakura+Ryoko\u0026return=http%3A%2F%2Fsakuraryoko.com%2Fhome\", Donate!]"},"created_at":"2023-11-22T00:21:36.000Z","updated_at":"2024-10-23T21:44:41.000Z","dependencies_parsed_at":"2023-12-08T16:29:35.229Z","dependency_job_id":"4180687d-da23-4a02-83c1-07990f387b9a","html_url":"https://github.com/sakura-ryoko/afkplus","commit_stats":null,"previous_names":["sakura-ryoko/afkplus"],"tags_count":66,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sakura-ryoko%2Fafkplus","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sakura-ryoko%2Fafkplus/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sakura-ryoko%2Fafkplus/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sakura-ryoko%2Fafkplus/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sakura-ryoko","download_url":"https://codeload.github.com/sakura-ryoko/afkplus/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":223672936,"owners_count":17183618,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["afk","fabricmc-mod","minecraft-mod"],"created_at":"2024-11-08T11:16:12.790Z","updated_at":"2025-10-03T13:45:48.936Z","avatar_url":"https://github.com/sakura-ryoko.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# AfkPlus Fabric Mod for Minecraft\n\n![Example](https://sakuraryoko.com/files/1260026/afkplus.jpg)\n\n## Basic Description:\n- A forked project based upon AfkDisplay by beabfc.  He has given me his blessing with proceeding to create this mod, look under my Archived Issues pane.\n- Show which players are AFK in the player list, see the Reasons, Durations, and Times.\n- Fully configurable and with [Placeholder API](https://placeholders.pb4.eu/user/general/), which includes all Placeholder API formatting nodes such as: yellow or bold natively. (You can even include a URL in your AFK Reason!)\n- Mod can now be used on Single Player, and Integrated Servers (Open to LAN).\n\n## Features :blush:\n- Added a placeholder `%afkplus:afk%` for you to offer a very basic '**[AFK]**' tag to players who are AFK.\n- Added a placeholder `%afkplus:name%`/`%afkplus:display_name%` so that you can use this as a replacement for the '**%player:displayname%**' placeholder under other Mods, such as [Styled Playerlist](https://modrinth.com/mod/styledplayerlist \"Styled Playerlist\").\n***NOTE that this method was designed to be fully compliant with LuckPerms Prefixes under Styled Playerlist, because the standard method for playerlist updating fails, or you can simply use %afkplus:afk% to add formatting to existing names if you like.***\n- Added a placeholder `%afkplus:duration%` so that you can get the time since someone went AFK, with configuration for a format prefix.\n- Added a placeholder `%afkplus:time%` so that you can get the Time/Date when someone went AFK, with configuration for a format prefix.\n- Added a placeholder `%afkplus:reason%` so that you can port the Afk Reason for why someone went AFK, with configuration for a format prefix.\n- Added a placeholder `%afkplus:invulnerable%` so that you can display the \"Disable Damage\" status for all users, similar to the \"[AFK]\" placeholder tag, but more or less an \"add on\".\n- There is a special configuration option 'prettyDuration' to configure the AFK Duration in a more human-readable format, instead of the default (HH:mm:ss.mss) format.  Each method has its advantages though. ([Styled Nicknames](https://modrinth.com/mod/styled-nicknames) or [Styled Chat](https://modrinth.com/mod/styled-chat) comes to mind here)\n- There are several mod / data pack conflict warnings for administrators to help them make better decisions on what mods they want to install.\n- Added a \"disableDamage\" configuration to make AFK players immune to damage after a 15-second cool down.  A new configurable server-wide message is now enforced by default when this occurs.\n- Added a \"disableDamageCooldown\" configuration to allow Administrators to adjust the default \"timer\" that is applied after a player goes AFK.  I highly recommend not setting this to '0', unless you don't think your players will abuse this privilege.\n- Added a \"whenDamageDisabled\" configuration so that you can customize the message displayed when your players are marked as invulnerable.\n- Added a \"whenDamageEnabled\" configuration so that you can customize the message displayed when your players are unmarked as invulnerable.\n- Now also checks for if players are in Spectator Mode, and not only Creative for managing your AFK/Disable Damage status.\n- [NEW] Adds several color nodes that players can use for AFK Reasons.  See /afkex for a display example.\n  - brown, cyan, dark_brown, dark_pink, light_blue, light_brown, light_gray, light_pink, lime, magenta, purple, salmon,\n  - bluetiful, burnt_orange, canary, cool_mint, copper, powder_blue, royal_purple, shamrock, tickle_me_pink, ultramarine_blue\n- [NEW] Added a \"bypassSleepCount\" configuration so that you can allow players marked as Afk to bypass the Sleeping Requirements.\n- [NEW] Added a \"bypassInsomnia\" configuration so that you can allow players marked as Afk to block Phantom spawning.\n- [NEW] Added a \"/noafk\" command for players to stop themselves from being marked as Afk.\n- [NEW] Added a \"displayDuration\" configuration option so that you can enable/disable the \"Gone for XX minutes, XX seconds\" during whenReturn.\n- [NEW] Added additional handling to allow \"afkTimeoutString\" to be set to \"\", and passing the \"defaultReason\" as \"\" to have more of the \"Original\" AfkDisplay feel.\n- [NEW] Added a new \"AFK Kick\" system to automatically kick players from the server who are AFK after a configured amount of time.  It has several configuration options:\n  - `afkKickEnabled` - (true/false) Enables the AFK Auto Kick manager.\n  - `afkKickNonSurvival` - (true/false) Allows Kicking Creative / Spectator players.\n  - `afkKickTimer` - The time beyond `timeoutSeconds` (Additive) when a player gets removed from the server, so if `timeoutSeconds` is 240, and `afkKickTimer` is set to 3600, the actual time they get kicked is at **3840**, or 64 minutes at the longest.\n  - `afkKickSafePermissions` - (Permission 3) The default Permissions level that is marked \"safe\" from being automatically kicked. (Luck Perms: afkplus.kick.safe)\n    - Note; that if a player has `afkPlusCommandPermissions` (Luck Perms: afkplus.afkplus), they will also be marked as safe from being automatically kicked, but this new configuration allows you to configure these permissions separately.\n  - `afkKickMessage` - The message sent to Players that get kicked as the reason for their removal. (Adds the Duration when `displayDuration` is enabled)\n  - `whenKicked` - The message broadcast to the server when a player gets kicked for being AFK. (Adds the Duration when `displayDuration` is enabled)\n  - NOTES: This feature *DOES NOT* automatically kick Carpet Mod Bots, because the 'fake' players do not get ticked by the server.\n    - This feature *DOES NOT* work in Single Player/Open To Lan, and requires a Dedicated Server Environment to function properly.\n\n## Commands (Permissions via [Luck Permissions](https://luckperms.net/) or the AfkPermissions configurations)\n- '**/afkplus**' with the AfkPlusCommandPermissions (Default: 4) setting the default restrictions. (Permission: afkplus.afkplus)\n  - Displays the Mod Version information.\n- '**/afkplus reload**' command. (Permission: afkplus.afkplus.reload)\n  - This allows an Administrator to reload the configuration while the server is running.\n- '**/afkplus ex**' command.  (Permission: afkplus.afkplus.ex)\n  - This displays a simple \"formatting test\" to show the user what basic text nodes are available to use, and this also allows them to use this for Copy/Paste by clicking on colors/formats.\n- '**/afkplus set [Player] [Reason]**' command. (Permission: afkplus.afkplus.set)\n  - This allows any administrator to set the AFK status of a player, and this also removes their NoAFK status. \n- '**/afkplus clear [Player]**' command. (Permission: afkplus.afkplus.clear)\n  - This allows any administrator to clear the AFK status of a player.\n- '**/afkplus damage enable [Player]**' command. (Permission: afkplus.afkplus.damage.enable)\n  - This allows an Administrator to force-enable an AFK player's ability to be damaged as long as they are connected.\n- '**/afkplus damage disable [Player]**' command. (Permission: afkplus.afkplus.damage.disable)\n  - This allows an Administrator to revert a player's ability to use \"Disable Damage\" after it was forcefully removed.\n- '**/afkplus info [Player]**' command. (Permission: afkplus.afkplus.info)\n  - This allows any administrator to check the AFK status of a player, and display the time and duration since they went AFK.\n- '**/afkplus update [Player]**' command. (Permission: afkplus.afkplus.update)\n  - This allows any administrator to force a player list update for a player.\n- '**/afkinfo [Player]**' with the AfkInfoCommandPermissions (Default: 2) setting the default restrictions, (Permission: afkplus.afkinfo)\n  - Does the same thing as '**/afkplus info [Player]**', but can be used for Mods, or players, or however you like to configure it for people to see.\n- '**/afkex**' with the AfkExCommandPermissions (Default: 0) setting the default restrictions.  (Permission: afkplus.afkex)\n  - This displays a simple \"formatting test\" to show the user what basic text nodes are available to use, and this also allows them to use this for Copy/Paste by clicking on colors/formats.\n- '**/afk [Reason]**' with the AfkCommandPermissions (Default: 0) setting the default restrictions.  (Permission: afkplus.afk)\n  - This allows any user to use a [Reason] along with setting their AFK status.\n- [NEW] '**/noafk**' with the noAfkCommandPermissions (Default: 0) setting the default restrictions.  (Permission: afkplus.noafk)\n  - This allows any user to set themselves in a state where they will not go Afk based on the configured timeout value.\n- [NEW] 'afkKickSafePermissions' (Default: 3) sets the default permissions to mark an AFK player as safe from being kicked. (Permission: afkplus.kick.safe)\n\n## Potential known conflicts (Make your choice)\n- [afk display Data pack](https://vanillatweaks.net/picker/datapacks/) (Vanilla Tweaks Data pack, changes the player list display) -- Mod checks for any \"afk\" containing data packs in the name.\n- [AfkDisplay](https://modrinth.com/mod/afkdisplay) -- because this is the mod that AfkPlus is based upon, and offers fewer features.\n- [AntiLogout](https://modrinth.com/mod/noexits) (/afk command, timeout handling)\n- [Auto AFK](https://modrinth.com/mod/auto-afk) (/afk command, timeout handling)\n- [Sessility](https://modrinth.com/mod/sessility) (timeout handling)\n- [Playtime-Tracker](https://modrinth.com/mod/playtime-tracker) (timeout handling)\n- [SvrUtil](https://modrinth.com/mod/svrutil) (/afk command, the rest is safe)\n\n## Example Configuration\nThe configuration is located in `afkplus.toml` inside your servers config folder.\n\n```toml\n[AfkPlusOptions]\n# Allows you to disable the /afk command to mark yourself as AFK, with an optional [Reason] (Default: true)\nenableAfkCommand = true\n# Allows you to disable the /noafk command to mark yourself as NoAFK, which disables the timeout (Default: true)\nenableNoAfkCommand = true\n# Allows you to disable the /afkex command to allow players to see some default formattting nodes available. (Default: true)\nenableAfkExCommand = true\n# Allows you to disable the /afkinfo command to allow players to see someone's AFK status (Time, Duration, Reason). (Default: true)\nenableAfkInfoCommand = true\n# The /afk default command permissions, configurable with Luck Perms (afkplus.afk) node (Default: 0)\nafkCommandPermissions = 0\n# The /noafk default command permissions, configurable with Luck Perms (afkplus.noafk) node (Default: 0)\nnoAfkCommandPermissions = 0\n# The /afkex default command permissions, configurable with Luck Perms (afkplus.afkex) node (Default: 0)\nafkExCommandPermissions = 0\n# The /afkinfo default command permissions, configurable with Luck Perms (afkplus.afkinfo) node (Usually for Mods) (Default: 2)\nafkInfoCommandPermissions = 2\n# The /afkplus default command permissions, configurable with Luck Perms (afkplus.afkplus with .subcommands) node (Default: 3)\nafkPlusCommandPermissions = 3\n# The default \"timeout\" AFK reason (Default: \"\u003ci\u003e\u003cgray\u003etimeout\u003cr\u003e\")\n# --note; \"\" is a valid setting, and will disable the default timeout reason.\nafkTimeoutString = \"\u003ci\u003e\u003cgray\u003etimeout\u003cr\u003e\"\n\n[packetOptions]\n# The time without actions after which a player is considered AFK. Set to -1 to disable automatic AFK detection. (Default: 240)\n# --note; the Original AfkDisplay's default timeout was set to 180 seconds.\ntimeoutSeconds = 240\n# Consider players that moved no longer AFK (enables easy bypass methods like AFK pools) (Default: false)\nresetOnMovement = false\n# Consider players which looked around no longer AFK (Default: false)\nresetOnLook = false\n# Disable damage after disableDamageCooldown seconds since a player went AFK (Default: false)\ndisableDamage = false\n# Cooldown timer for enabling the \"DisableDamage\" feature. (Default: 15 seconds)\n# - WARNING!  Be advised that settings this too low can encourage poor player behavior.\ndisableDamageCooldown = 15\n# Makes it so that Afk players are not counted in the Sleep Percentage check (Default: true)\nbypassSleepCount = true\n# Makes it so that Afk Players block Phantom Spawning attempts. (Default: true)\nbypassInsomnia = true\n# Enables the AFK Auto-Kick system. (Default: false)\nafkKickEnabled = false\n# Allows Non-Survival players to be kicked (Creative, Spectator, etc) (Default: false)\nafkKickNonSurvival = false\n# The time after `timeoutSeconds` to automatically kick an AFK player (Default: 3600, aka. 1 hour)\n# --note; that this value is \"Additive\" to the `timeoutSeconds` value, so the actual time will be 3840, aka. 64 minutes.\nafkKickTimer = 3600\n# Default permission level to mark players as \"safe\" from being automatically kicked, i.e., Server Admins (Default: 3)\nafkKickSafePermissions = 3\n\n[PlaceholderOptions]\n# This will be the value of the placeholder %afkplus:afk% if a player is AFK, option accepts full formatting nodes\n# (Default: \"\u003ci\u003e\u003cgray\u003e[AFK%afkplus:invulnerable%]\u003cr\u003e\")\n# -- note; *DOES NOT* place an \"\u003cr\u003e\" at the end in the code (trying not to modify its default behavior)\nafkPlaceholder = \"\u003ci\u003e\u003cgray\u003e[AFK%afkplus:invulnerable%]\u003cr\u003e\"\n# Placeholder %afkplus:name% for backporting the entire %displayname% for use in other Mods, such as Styled Playerlist\n# (Default: \"\u003ci\u003e\u003cgray\u003e[AFK%afkplus:invulnerable%] %player:displayname_unformatted%\u003cr\u003e\")\n# -- note; *DOES NOT* places an \"\u003cr\u003e\" at the end in the code (trying not to modify its default behavior)\nafkPlusNamePlaceholderAfk = \"\u003ci\u003e\u003cgray\u003e[AFK%afkplus:invulnerable%] %player:displayname_unformatted%\u003cr\u003e\"\n# Value for when a player is NOT AFK, (i.e., the default \"%player:displayname%\")\n# -- note; *DOES NOT* places an \"\u003cr\u003e\" at the end in the code (trying not to modify its default behavior)\nafkPlusNamePlaceholder = \"%player:displayname%\"\n# Adds a formatting prefix node for %afkplus:duration% (default: \u003cgreen\u003e)\n# -- note; places an \"\u003cr\u003e\" at the end in the code, and this is used during /afkinfo\nafkDurationPlaceholderFormatting = \"\u003cgreen\u003e\"\n# Adds a formatting prefix node for %afkplus:time% (default: \u003cgreen\u003e)\n# -- note; places an \"\u003cr\u003e\" at the end in the code, and this is used during /afkinfo\nafkTimePlaceholderFormatting = \"\u003cgreen\u003e\"\n# Adds a formatting prefix node for %afkplus:reason%, I'm not sure why someone might want this enabled, because\n# formatting your [Reason] yourself is fun. (default: none)\n# -- note; places an \"\u003cr\u003e\" at the end of the code, and this is used during /afkinfo\nafkReasonPlaceholderFormatting = \"\"\n# Adds an option for using the \"pretty\" human-readable output for the %duration% placeholder.  This might cause unexpected\n# issues depending on where you use the placeholder. (Default: false)\nafkDurationPretty = false\n# Adds an option to configure a basic \"Add-On\" placeholder for attaching to the \"[AFK]\" tag to mark when a player is\n# marked as Invulnerable using %afkplus:invulnerable% (Default: \":\u003cred\u003eI\u003cr\u003e\")\nafkInvulnerablePlaceholder = \":\u003cred\u003eI\u003cr\u003e\"\n\n[playerListOptions]\n# Change the playerlist name for players who are AFK (Default: true)\n# -- note; This is for when you're NOT using a player list display mods.\nenableListDisplay = true\n# The name that is shown in the playerlist if a player is AFK, and accepts formatting nodes\n# (Default: \"\u003ci\u003e\u003cgray\u003e[AFK%afkplus:invulnerable%] %player:displayname%\u003cr\u003e\")\n# -- note; This function works best when not using Player List mods!*\nafkPlayerName = \"\u003ci\u003e\u003cgray\u003e[AFK%afkplus:invulnerable%] %player:displayname%\u003cr\u003e\"\n\n[messageOptions]\n# Enables chat messages when a player goes AFk or returns. (Default: true)\nenableMessages = true\n# The message content when a player goes AFK, and accepts formatting nodes (Default: \"%player:displayname% \u003cyellow\u003eis now AFK\u003cr\u003e\")\nwhenAfk = \"%player:displayname% \u003cyellow\u003eis now AFK\u003cr\u003e\"\n# The messages content when a player returns from AFK, and accepts formatting nodes.\n# (Default: \"%player:displayname% \u003cyellow\u003eis no longer AFK\u003cr\u003e\")\n# --note; that this message gets the AFK duration added to the end if `displayDuration` is set to true.\nwhenReturn = \"%player:displayname% \u003cyellow\u003eis no longer AFK\u003cr\u003e\"\n# Re-Formats the \"duration\" in chat messages and /afkinfo to a more human-readable format. (Default: true)\nprettyDuration = true\n# Default reason for going AFK via the /afk command.  Leave in a poof of smoke without having to give a reason.\n# (Default: \"\u003cgray\u003epoof!\u003cr\u003e\")\n# --note; \"\" is a valid setting, and will disable the default /afk reason.\ndefaultReason = \"\u003cgray\u003epoof!\u003cr\u003e\"\n# The message content when an AFK player is marked as Invulnerable.\n# (Default: \"%player:displayname% \u003cyellow\u003eis marked as \u003cred\u003eInvulnerable.\u003cr\u003e\")\nwhenDamageDisabled = \"%player:displayname% \u003cyellow\u003eis marked as \u003cred\u003eInvulnerable.\u003cr\u003e\"\n# The message content when an AFK player is no longer marked as Invulnerable.\n# (Default: \"%player:displayname% \u003cyellow\u003eis no longer \u003cred\u003eInvulnerable.\u003cr\u003e\")\nwhenDamageEnabled = \"%player:displayname% \u003cyellow\u003eis no longer \u003cred\u003eInvulnerable.\u003cr\u003e\"\n# This enables the display of \"Gone for XX minutes, XX seconds\" portion of the whenReturn message.\n# (Default: true)\ndisplayDuration = true\n# The Kick Reason message sent to players that are removed.  Can be set to \"\" to get a basic \"AFK timeout\" reason.\n# (Default: \"\u003ccopper\u003eAFK beyond the allowed time limit set by your Administrator.\u003cr\u003e\")\n# --note; that this message gets the AFK duration added to the end if `displayDuration` is set to true.\nafkKickMessage = \"\u003ccopper\u003eAFK beyond the allowed time limit set by your Administrator.\u003cr\u003e\"\n# The message content when an AFK player gets kicked from the server.\n# (Default: \"%player:displayname% \u003ccopper\u003ewas kicked for being AFK.\u003cr\u003e\")\n# --note; that this message gets the AFK duration added to the end if `displayDuration` is set to true.\nwhenKicked = \"%player:displayname% \u003ccopper\u003ewas kicked for being AFK.\u003cr\u003e\"\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsakura-ryoko%2Fafkplus","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsakura-ryoko%2Fafkplus","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsakura-ryoko%2Fafkplus/lists"}