1.0.0
Compatibility
Changes
IPDynamic 1.0.0 - The Rebirth Update
A complete rewrite from the ground up.
What's New
This isn't just an update ā it's a complete rebuild of IPDynamic with professional architecture, better performance, and features that actually work.
Major Changes
Database System
- NEW: SQLite database replaces JSON files
- NEW: WAL mode for better concurrent access
- NEW: Auto-adaptive schema (automatic updates, no data loss)
- REMOVED: JSON file storage (prone to corruption)
Performance
- NEW: Kotlin Coroutines for true async operations
- NEW: Zero TPS impact - all operations are non-blocking
- NEW: In-memory caching for bans and whitelist
- IMPROVED: GeoIP lookups are now fully asynchronous
IP Banning
- NEW: OP1 mode (
192.168.1.*) - blocks ~256 IPs - NEW: OP2 mode (
192.168.*.*) - blocks ~65,536 IPs - NEW: Temporary bans with duration support (30m, 12h, 7d, 4w)
- NEW: Automatic expired ban cleanup
- NEW: Custom ban screen for kicked players
- CHANGED: Replaced CIDR notation with simpler OP1/OP2 system
Alt Detection
- IMPROVED: Smart detection using UUID + Username verification
- IMPROVED: Works correctly on both online and offline mode servers
- FIXED: False positives when same player had different UUIDs
Whitelist System
- NEW: Mojang API UUID verification
- NEW: Dual verification (UUID + Username)
- NEW: Reason field when adding players
- IMPROVED: Reliable bypass for whitelisted players
Permissions
- NEW: Granular permission system (10+ permissions)
- NEW: Per-command permissions for fine-tuned access
- NEW: Tab completion respects permissions
- NEW: Help menu shows only available commands
- CHANGED: No longer requires OP for everything
Configuration
- NEW:
messages.yml- fully customizable messages - NEW: Custom ban screen design
- NEW: Placeholder support ({player}, {ip}, {reason}, etc.)
- REMOVED: Multiple language files (single English messages.yml)
- REMOVED: Discord webhook integration (may return in future)
Commands
- NEW:
/ipdy check <player>- Complete player profile - NEW:
/ipdy history <player>- Connection history - NEW:
/ipdy alts <player>- Alt account detection - NEW:
/ipdy ip <address>- Lookup accounts by IP - NEW:
/ipdy ban <op1|op2> <ip> [reason] [duration] - NEW:
/ipdy unban <pattern> - NEW:
/ipdy banlist- View active bans - NEW:
/ipdy whitelist <add|remove|list> - NEW:
/ipdy stats- Plugin statistics - NEW:
/ipdy reload- Reload configuration - CHANGED: Command aliases:
/ipdy,/ipd
Technical Details
- Language: Kotlin 1.9
- Async: MCCoroutine for Bukkit
- Database: SQLite with JDBC
- API: Paper API (compatible with Spigot)
Compatibility
| Version | Status |
|---|---|
| 1.17.x - 1.21.x | ā Supported |
| 1.13.x - 1.16.x | š Coming Soon |
Requirements:
- Java 17 or higher
- Paper or Spigot server
Migration Notice
ā ļø This version is NOT compatible with the old DEV version.
The entire data structure has changed. If upgrading:
- Backup your old IPDynamic folder
- Delete the old IPDynamic folder
- Install the new IPDynamic.jar
- Restart your server
Permissions
ipdynamic.* - Full access (default: op)
ipdynamic.check - /ipdy check
ipdynamic.history - /ipdy history
ipdynamic.alts - /ipdy alts
ipdynamic.ip - /ipdy ip
ipdynamic.ban - /ipdy ban
ipdynamic.unban - /ipdy unban
ipdynamic.banlist - /ipdy banlist
ipdynamic.whitelist - /ipdy whitelist
ipdynamic.stats - /ipdy stats
ipdynamic.reload - /ipdy reload
Known Issues
- None at this time
What's Next
- [ ] Support for 1.13.x - 1.16.x
- [ ] Discord webhook integration
- [ ] Web panel for management
- [ ] Import tool for old DEV version data
Thank you for using IPDynamic!
If you encounter any issues, please report them on GitHub.
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:fRqinjfY:jwrGQOmT"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:fRqinjfY:jwrGQOmT"
}

