Links
Tags
Creators
Details
Licensed LGPL-3.0-or-later
Published last year
Updated 2 weeks ago
All versions
3.1-1.21.11+-NeoForge
Release
cwhitelist 3.1-1.21.11+-NeoForge2 weeks ago 23
Uploaded by
Compatibility
Minecraft: Java Edition
26.2
26.1.x
1.21.11
Platform
NeoForge
Supported environments
Dedicated servers only
Changes
Changelog
2026-07-23
Added
- Heartbeat system: Automatically starts when the API is enabled, calling
/healthevery 30s to check connectivity; switches to 5s fast retry on failure, and reverts to 30s once restored. The heartbeat is bound to the API toggle โ disabling the API stops it. - Player logout reporting: When a player leaves the game, a
POST /login/logoutrequest is sent, reportingplayer_name,player_uuid,player_ip, andserver_id. This shares thelogLoginEventstoggle with login events. - Global
server_idpropagation: All API requests (/health,/whitelist/sync,/whitelist/entries,/login/log,/login/logout) now forcibly carryserver_id. If not configured,"undefined"is used as fallback. - Warning for missing
server_id: When API mode is enabled butserverIdis empty, a prominent warning is printed to the console, prompting the server owner to configure it. - Singleplayer host player detection: Added
isHostPlayer()method; the owner of a singleplayer world is automatically allowed and detected via theisSingleplayerOwnerAPI, with log entries marked as[Host Login]. - Server-side translation preloading: Translation files for
en_usandzh_cnare preloaded at startup. Kick messages are translated serverโside based on the clientโs language, so clients do not need the mod installed to see correct messages.
Changed
- Removed
sendServerIdconfig option:server_idis now always sent with every request; thesendServerIdsetting in the config file is deprecated. - Removed
API_SEND_SERVER_IDconfig option: The relevant field and build code have been deleted fromConfig.java.
Fixed
- Inverted
isValidForWritingsemantics: Previously returned!isActive || !canWrite || isExpired(); corrected toisActive && canWrite && !isExpired(). - Inverted
hasValidTokensemantics: Previously returned!isTokenVerified.get() || tokenInfo == null; corrected toisTokenVerified.get() && tokenInfo != null. - Inverted permission checks in sync operations: Token permission checks in
syncWhitelist,addEntry,removeEntry, andlogLoginEventwere corrected fromhasValidToken() || tokenInfo.isValidForXxx()to!hasValidToken() || !tokenInfo.isValidForXxx(). - Inverted
getTokenStatuslogic: ThehasValidToken()condition was corrected fromtrueto!false. - Local singleplayer players being incorrectly blocked: In
isAllowed(), the initialallowedvalue was changed fromfalsetoisHost, so the singleplayer owner is no longer intercepted by the whitelist. getPlayerIPsecurity enhancement: No longer directly casts toInetSocketAddress; usesinstanceofpattern matching, with fallback forLocalAddress(returns<host>for singleplayer/LAN), and returns"unknown"on exception.- Blank logs during initialization: Log writing and API login events now include an
isLoadedguard, executing only after the whitelist has been fully loaded, preventing empty entries from being generated during mod initialization.
Important
- If you need to use the API functionality, please make sure to use backend version 2.1.0 or higher.
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle. To learn more about the Modrinth Maven API, click here.
Note: When available, you should use the creator's maven repo instead as it will have transitive dependency information that the Modrinth Maven API does not. You may also end up with duplicate dependencies if you use a mix of Modrinth and non-Modrinth Maven repositories for your dependencies, because the group identifier will be different when served through the Modrinth Maven API.
Maven coordinates:
Version ID:
build.gradle:
repositories {
exclusiveContent {
forRepository {
maven {
name = "Modrinth"
url = "https://api.modrinth.com/maven"
}
}
// forRepositories(fg.repository) // Uncomment when using ForgeGradle
filter {
includeGroup "maven.modrinth"
}
}
}
// Standard Gradle dependency
dependencies {
implementation "maven.modrinth:A2fb1XGO:2hpPlTGW"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:A2fb1XGO:2hpPlTGW"
}

