1.1.8
Compatibility
Changes
[v1.1.8] - 2026-01-21
Version: 1.1.8 Release Type: Reliability Update Release Date: 2026-01-21
Make sure to delete your config.yml and regenerate it by restarting the server!!!
Features Added
- API Retry Logic with Exponential Backoff - Automatic retry for failed API requests due to network issues
- Retries on
SocketTimeoutExceptionandIOException(network errors) - Does NOT retry on HTTP errors (4xx/5xx) - those are intentional
- Webhook update! Lots more information! More configuration! responses
- Configurable retry attempts (1-5, default: 3)
- Exponential backoff with configurable delays
- Logs retry attempts for visibility
- Retries on
Configuration
New api-retry section added to config files:
YAML (Paper, Spigot, Folia, BungeeCord):
api-retry:
max-attempts: 3 # Maximum retry attempts (1-5)
initial-delay: 1000 # Initial delay before first retry (ms)
max-delay: 5000 # Maximum delay between retries (ms)
multiplier: 2.0 # Exponential backoff multiplier
TOML (Velocity):
[api-retry]
max-attempts = 3
initial-delay = 1000
max-delay = 5000
multiplier = 2.0
Example Behavior
With default settings (3 attempts, 1s initial delay, 2x multiplier):
- Attempt 1 fails → Wait 1000ms → Retry
- Attempt 2 fails → Wait 2000ms → Retry
- Attempt 3 fails → Log final error, allow player join (fail-open)
Log Output Example
[WARN] ProtectCord API request failed (attempt 1/3): Read timed out. Retrying in 1000ms...
[WARN] ProtectCord API request failed (attempt 2/3): Read timed out. Retrying in 2000ms...
[ERROR] Error checking IP with ProtectCord API after 3 attempts: Read timed out
Technical Details
- Uses exponential backoff algorithm to prevent overwhelming the API
- Maintains fail-open behavior - players are allowed to join if all retries fail
- Thread-safe implementation with proper interrupt handling
- Validation ensures config values are within acceptable ranges
All Platforms Updated:
- Paper
- Spigot
- Folia
- BungeeCord
- Velocity
- Forge
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:y05wfnBZ:xS5nZcNq"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:y05wfnBZ:xS5nZcNq"
}

