{"id":20095858,"url":"https://github.com/nightmirror21/whitelistbytime","last_synced_at":"2026-02-10T18:12:03.508Z","repository":{"id":62358853,"uuid":"437253644","full_name":"NightMirror21/WhitelistByTime","owner":"NightMirror21","description":"Whitelist plugin for minecraft server.","archived":false,"fork":false,"pushed_at":"2025-07-10T14:03:03.000Z","size":811,"stargazers_count":10,"open_issues_count":2,"forks_count":3,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-07-10T20:59:48.590Z","etag":null,"topics":["folia","folia-plugin","foliamc","foliamc-plugin","gradle","java","minecraft","minecraft-plugin","paper","paper-plugin","papermc","papermc-plugin","purpur","purpur-plugin","purpurmc","purpurmc-plugin"],"latest_commit_sha":null,"homepage":"","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/NightMirror21.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2021-12-11T10:40:36.000Z","updated_at":"2025-07-10T14:03:09.000Z","dependencies_parsed_at":"2023-02-06T16:31:45.321Z","dependency_job_id":"7d2f643c-374e-43de-992b-df9f64a41730","html_url":"https://github.com/NightMirror21/WhitelistByTime","commit_stats":null,"previous_names":[],"tags_count":20,"template":false,"template_full_name":null,"purl":"pkg:github/NightMirror21/WhitelistByTime","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NightMirror21%2FWhitelistByTime","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NightMirror21%2FWhitelistByTime/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NightMirror21%2FWhitelistByTime/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NightMirror21%2FWhitelistByTime/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/NightMirror21","download_url":"https://codeload.github.com/NightMirror21/WhitelistByTime/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NightMirror21%2FWhitelistByTime/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29310180,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-10T17:48:59.043Z","status":"ssl_error","status_checked_at":"2026-02-10T17:45:37.240Z","response_time":65,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["folia","folia-plugin","foliamc","foliamc-plugin","gradle","java","minecraft","minecraft-plugin","paper","paper-plugin","papermc","papermc-plugin","purpur","purpur-plugin","purpurmc","purpurmc-plugin"],"created_at":"2024-11-13T16:56:40.888Z","updated_at":"2026-02-10T18:12:03.502Z","avatar_url":"https://github.com/NightMirror21.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cimg src=\"./images/header.svg\"\u003e\n\n## Links\n[SpigotMC](https://www.spigotmc.org/resources/whitelistbytime-1-21-4.98946/) [Modrinth](https://modrinth.com/plugin/whitelistbytime) [GitHub](https://github.com/NightMirror21/WhitelistByTime)\n\n## About\nThis is a plugin for a minecraft server. It allows you to add players for a certain time or permanently.\n\n**The plugin is developed and tested for Paper and Folia 1.20.x-1.21.x. It also supports forks of Paper and Folia.**\n\n## Features\n- Fully **customizable**.\n- Supports [**MiniMessage**](https://docs.advntr.dev/minimessage/format.html).\n- Compatible with **any SQL database**.\n- **Case-sensitive** nickname support.\n- Player **freezing** feature.\n- PlaceholderAPI (**PAPI**) support.\n- **Lightweight**: minimal load on the **main thread**.\n- **Multi-server** support: utilizes **SQL transactions**.\n- **Safe**: the code is extensively covered by **automated tests**.\n- **UUID support**: stores UUIDs in online/floodgate (GeyserMC) modes to handle nickname changes.\n\n## Commands and Permissions\n| Command                                                | Permission                                        |\n|--------------------------------------------------------|---------------------------------------------------|\n| /whitelist add [nickname] (time)                       | whitelistbytime.add, wlbytime.add                 |\n| /whitelist remove [nickname]                           | whitelistbytime.remove, wlbytime.remove           |\n| /whitelist check [nickname]                            | whitelistbytime.check, wlbytime.check             |\n| /whitelist checkme                                     | whitelistbytime.checkme, wlbytime.checkme         |\n| /whitelist time set/add/remove [nickname] [time]       | whitelistbytime.time, wlbytime.time               |\n| /whitelist getall (page)                               | whitelistbytime.getall, wlbytime.getall           |\n| /whitelist freeze [nickname] [time]                    | whitelistbytime.freeze, wlbytime.freeze           |\n| /whitelist unfreeze [nickname]                         | whitelistbytime.unfreeze, wlbytime.unfreeze       |\n| /whitelist reload                                      | whitelistbytime.reload, wlbytime.reload           |\n| /whitelist on/off/status                               | whitelistbytime.toggle, wlbytime.toggle           |\n\nEach subcommand can have multiple permissions. If any permission matches, access is granted. You can change these lists in `commands.yml`.\n\n### Notes:\n- `[nickname]` - required argument.\n- `(page)` - list page number; defaults to 1 if not specified.\n- `(time)` - the duration for which the player will be whitelisted.  \n  Example: `2d 3h 10m`.  \n  Leave empty to whitelist permanently.\n\n## Placeholders\nAll output messages can be customized in the configuration.\n\n- `%wlbytime_in_whitelist%` - Indicates if a player is in the whitelist.\n- `%wlbytime_time_left%` - Time remaining in the whitelist.\n\n## FAQ\n1. **Why is the plugin file size large?**  \n   It includes libraries such as ORMLite (database), Caffeine (cache), bStats (metrics), and Elytrium-Serializer (config handling).\n\n2. **I have an issue or a suggestion. Where should I report it?**  \n   Open an issue in this repository with a detailed description. Any feedback is welcome!\n\n3. **Will there be support for BungeeCord/Velocity?**  \n   No, the plugin is being developed exclusively for Paper and Folia.\n\n## Configs by default\n### `settings.yml`\n```yaml\n#Automatically unfreeze player time when they join the server if their time is frozen\nunfreeze-time-on-player-join: false\n\n#How to identify players in whitelist: OFFLINE, ONLINE, FLOODGATE, AUTO\nplayer-id-mode: OFFLINE\n#Use Mojang API to resolve UUID when adding by nickname in ONLINE/AUTO mode\nmojang-lookup-enabled: true\n#Timeout for Mojang API requests in milliseconds\nmojang-timeout-ms: 5000\n#Enable in-memory cache for Mojang API UUID lookups\nmojang-cache-enabled: true\n#Mojang API cache TTL in milliseconds\nmojang-cache-ttl-ms: 3600000\n\n#Enable whitelist checks for player login\nwhitelist-enabled: true\n\n#Enable the expiration monitor, which checks players' expiration status\nexpire-monitor-enabled: true\n#Interval in milliseconds for the expiration monitor to check players and remove them from the database if expired\nexpire-monitor-interval-ms: 1000\n\n#Enable the last join monitor, which checks players' last join timestamps\nlast-join-monitor-enabled: false\n#Threshold in seconds between the player's last join and the current time. If exceeded, the player is removed by the monitor\nlast-join-expiration-threshold-seconds: 2678400\n#Interval in milliseconds for the last join monitor to check players and remove them if their last join exceeds the threshold\nlast-join-monitor-interval-ms: 3600000\n\n#Enable case-sensitive nickname checking\nnickname-case-sensitive: true\n\n#Kick player from server when his time is expired\nkick-player-on-time-expire: true\n\n#Remind players how much time they have left on the whitelist. Doesn't work if the player is permanently whitelisted or frozen.\nnotify-players-how-much-left: false\n#Interval in milliseconds for the plugin to send reminders to players how much time they have left on the whitelist.\nnotify-player-monitor-interval-ms: 1000\n#Time-left threshold (in seconds).\n#If a player has less time than this before their whitelist entry expires,\n#the plugin will start sending reminders. Example: 3600 = remind when \u003c 1 hour left.\nnotify-player-time-left-threshold-seconds: 5\n\n#Symbols representing time units for years\nyear-time-units:\n  - \"y\"\n#Symbols representing time units for months\nmonth-time-units:\n  - \"mo\"\n#Symbols representing time units for weeks\nweek-time-units:\n  - \"w\"\n#Symbols representing time units for days\nday-time-units:\n  - \"d\"\n#Symbols representing time units for hours\nhour-time-units:\n  - \"h\"\n#Symbols representing time units for minutes\nminute-time-units:\n  - \"m\"\n#Symbols representing time units for seconds\nsecond-time-units:\n  - \"s\"\n```\n### `database.yml`\n```yaml\n#'sqlite' or 'mysql'\ntype: \"sqlite\"\n\n#If not sqlite or h2\naddress: \"localhost:3030\"\nname: \"wlbytime\"\n\n#Params for connection\nparams:\n  - \"autoReconnect=true\"\n\n#If using user and password\nuse-user-and-password: false\nuser: \"user\"\npassword: \"qwerty123\"\n```\n### `placeholders.yml`\n```yaml\nplaceholders-enabled: false\n\n#%wlbytime_in_whitelist% - In whitelist or not or frozen\nin-whitelist-true: \"✔\"\nin-whitelist-false: \"✖\"\nfrozen: \"❄️\"\n\n#%wlbytime_time_left% - How much is left in whitelist\nforever: \"∞\"\ntime-left: \"%time%\"\ntime-left-with-freeze: \"❄️%time%❄️\"\n```\n### `messages.yml`\n```yaml\nnot-permission: \"You do not have permission!\"\nincorrect-arguments: \"Incorrect argument(s)\"\n\nyou-not-in-whitelist-or-frozen-kick: \"Sorry, but you are not in whitelist or frozen\"\n\nplayer-removed-from-whitelist: \"%nickname% successfully removed from whitelist\"\nplayer-already-in-whitelist: \"%nickname% already in whitelist\"\nplayer-not-in-whitelist: \"%nickname% not in whitelist\"\ncheck-me-not-in-whitelist: \"You are not in whitelist\"\ncheck-me-frozen: \"You are frozen for %time%\"\n\n#For command with time\nsuccessfully-added-for-time: \"%nickname% added to whitelist for %time%\"\ncheck-still-in-whitelist-for-time: \"%nickname% will be in whitelist still %time%\"\ncheck-me-still-in-whitelist-for-time: \"You will remain on the whitelist for %time%\"\n\n#For command without time\nsuccessfully-added: \"%nickname% added to whitelist forever\"\ncheck-still-in-whitelist: \"%nickname% will be in whitelist forever\"\ncheck-me-still-in-whitelist-forever: \"You are permanently whitelisted\"\n\nlist-header: \"\u003e Whitelist:\"\nlist-element: \"| %nickname% [%time-or-status%]\"\nlist-empty: \"Whitelist is empty\"\nlist-footer: \"Page %page% / %max-page% (To show another page run /whitelist getall \u003cpage\u003e)\"\npage-not-exists: \"Page %page% not exists, max page is %max-page%\"\n\n#How many records will be displayed per page\nentries-for-page: 10\n\n#For '%time-or-status%' in list\nforever: \"forever\"\nfrozen: \"frozen for %time%\"\nactive: \"active for %time%\"\nexpired: \"expired\"\n\nset-time: \"Now %nickname% will be in whitelist for %time%\"\nadd-time: \"Added %time% to %nickname%\"\nremove-time: \"Removed %time% from %nickname%\"\ncant-add-time-cause-player-is-forever: \"Can't add time cause %nickname% is forever\"\ncant-remove-time-cause-player-is-forever: \"Can't add time cause %nickname% is forever\"\ntime-is-incorrect: \"Time is incorrect\"\ncant-add-time: \"Can't add time\"\ncant-remove-time: \"Can't remove time\"\n\nplayer-frozen: \"Player %nickname% frozen for %time%\"\nplayer-already-frozen: \"Player %nickname% already frozen\"\nplayer-expired: \"Player %nickname% expired\"\ncant-freeze-cause-player-is-forever: \"Can't freeze cause %nickname% is forever\"\n\nplayer-unfrozen: \"Player %nickname% unfrozen\"\nplayer-not-frozen: \"Player %nickname% is not frozen\"\nplayer-freeze-expired: \"Freeze of %nickname% already expired\"\n\nplugin-successfully-reloaded: \"Plugin successfully reloaded\"\nplugin-reloaded-with-errors: \"Plugin reloaded with errors\"\n\ntime-left-in-whitelist-notify: \"Left %time% in whitelist\"\n\nwhitelist-enabled: \"Whitelist enabled\"\nwhitelist-disabled: \"Whitelist disabled\"\nwhitelist-already-enabled: \"Whitelist already enabled\"\nwhitelist-already-disabled: \"Whitelist already disabled\"\nwhitelist-status-enabled: \"Whitelist is enabled\"\nwhitelist-status-disabled: \"Whitelist is disabled\"\n\nhelp:\n  - \"\u003e WhitelistByTime - Help\"\n  - \"| /whitelist add [nickname] (time)\"\n  - \"| /whitelist remove [nickname]\"\n  - \"| /whitelist check [nickname]\"\n  - \"| /whitelist checkme\"\n  - \"| /whitelist getall\"\n  - \"| /whitelist reload\"\n  - \"| /whitelist freeze [nickname] [time]\"\n  - \"| /whitelist unfreeze [nickname]\"\n  - \"| /whitelist time set/add/remove [nickname] [time]\"\n  - \"| /whitelist on\"\n  - \"| /whitelist off\"\n  - \"| /whitelist status\"\n  - \"| (time) - time for which the player will be added to the whitelist\"\n  - \"| Example: 2d 3h 10m\"\n  - \"| Leave this value empty if you want to add player forever\"\n```\n\n### `commands.yml`\n```yaml\n#Permissions for whitelist subcommands\nadd-permission:\n  - \"whitelistbytime.add\"\n  - \"wlbytime.add\"\ncheck-permission:\n  - \"whitelistbytime.check\"\n  - \"wlbytime.check\"\ncheck-me-permission:\n  - \"whitelistbytime.checkme\"\n  - \"wlbytime.checkme\"\nfreeze-permission:\n  - \"whitelistbytime.freeze\"\n  - \"wlbytime.freeze\"\nunfreeze-permission:\n  - \"whitelistbytime.unfreeze\"\n  - \"wlbytime.unfreeze\"\nget-all-permission:\n  - \"whitelistbytime.getall\"\n  - \"wlbytime.getall\"\ntoggle-permission:\n  - \"whitelistbytime.toggle\"\n  - \"wlbytime.toggle\"\nremove-permission:\n  - \"whitelistbytime.remove\"\n  - \"wlbytime.remove\"\ntime-permission:\n  - \"whitelistbytime.time\"\n  - \"wlbytime.time\"\nreload-permission:\n  - \"whitelistbytime.reload\"\n  - \"wlbytime.reload\"\n```\n\n## Stats\n![BStats](https://bstats.org/signatures/bukkit/WhitelistByTime.svg)\n*Statistics are obtained through bstats metrics.*\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnightmirror21%2Fwhitelistbytime","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnightmirror21%2Fwhitelistbytime","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnightmirror21%2Fwhitelistbytime/lists"}