All versions
1.7.0
Release
OPShield 1.7.06 months ago 16
Compatibility
Minecraft: Java Edition
1.21.x
Platforms
Bukkit
Paper
Purpur
Spigot
Changes
[1.7.0] - 2026-04-24 — Architecture Improvements & God Class Refactoring
🚀 Improvements
Architecture Refactoring
-
LockoutManager (NEW) — Extracted lockout logic from main class
- Centralized player/IP lockout state management
- Clean public API for lockout operations
- Expired lockout cleanup methods
-
ShadowBanManager (NEW) — Extracted shadow ban logic
- Shadow ban state tracking
- Fake action message generation
- Duration management with expiry cleanup
- Improved message consistency
Password Security
- PasswordHasher improvements — Enhanced password handling
- PBKDF2 iteration count configurable at runtime
- Legacy SHA-256 detection with
isLegacyHash()method - Iteration count validation (10,000 - 1,000,000 range)
- Better separation of hash versioning concerns
Code Organization
- Created
manager/package for extracting business logic - Reduced OPShield.java God Class burden
- Better separation of concerns
- Improved testability of individual components
Language Files
- Fixed grammar inconsistencies (e.g., "1 player" vs "1 players")
- Improved fake action message clarity
- Better error message wording
📊 Code Quality
Metrics
- Before: 1,172 LOC in single class (God Class)
- After: OPShield.java reduced + 2 new manager classes
- Managers Created: 2 (LockoutManager, ShadowBanManager)
- Lines Extracted: ~300+ from main class
Quality Improvements
- ✅ Reduced cyclomatic complexity in main class
- ✅ Improved code organization
- ✅ Better separation of concerns
- ✅ More testable components
- ✅ Easier to extend for future features
📝 Migration Notes
For existing servers:
- No database migration needed
- All configuration stays the same
- No command changes
- Direct drop-in JAR replacement
🔮 Future Work (v1.8.0+)
Recommended further refactoring:
- Extract
AutoPunishmentManagerfor ban/kick logic - Extract
IpLimitManagerfor IP tracking - Extract
CommandRestrictionManagerfor command validation - Create interface-based services for better testability
- Add unit tests for new manager classes
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:Bv67n40d:eVigamu3"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:Bv67n40d:eVigamu3"
}

