FCore v1.2 — Major Update
ENFCore v1.2
Structural refactor, TPS fix, new admin tools.
Performance
• Sync DB query in first-join removed from main thread (biggest spike per connection)
• PlaceholderAPI TTL cache for menus (30 items × 4 placeholders → 0-10 actual calls)
• FloatingMinionManager 10Hz → 5Hz (50% less load)
• Chunk-loaded check on minions
• saveAllData async on /fcore reload (was 1-3s freeze)
• Conditional listeners: DeathMessage and Artilugios only if manager active
New Admin Features
• /fcore reload [module] — granular reload
• /fcore styleaudit — detects style violations
• /fcore validate — validates configs vs defaults
• /fcore metrics — counters, timers, slow queries
• Auto backup before /fcore resetconfig
• Discord webhook for WARN/ERROR logs
Architecture
• Subcommand router
• Unified join/quit/death pipeline with priorities
• Structured logger DEBUG/INFO/WARN/ERROR
• Versioned schema migrations
• Pluggable module framework (FModule)
• Split DB layer: ConnectionPool / QueryExecutor / CacheLayer
• YAML schema validator
Quality
• JUnit 5 + Mockito tests
• GitHub Actions CI
• DB metrics: queries/sec, slow queries (>200ms), errors
Compatibility
• MC 1.13 - 1.21+
• Java 17
• MySQL + SQLite
• ProGuard active
• Drop-in replacement for v1.1 — no breaking changes
ES
Refactor estructural completo, fixes de performance y nuevas herramientas admin.
Performance (anti-TPS-spike)
• Sync DB query en first-join eliminada del main thread (era el spike más grande en cada conexión)
• Cache TTL para PlaceholderAPI en menús — abrir un menú con 30 items ya no procesa 120 placeholders
• FloatingMinionManager throttled de 10Hz a 5Hz (50% menos carga, igual de fluido)
• Chunk-loaded check en minions (no actualiza si owner está en chunk descargado)
• saveAllData async en /fcore reload (antes bloqueaba 1-3s, ahora instantáneo)
• Listeners condicionales: DeathMessage y Artilugios solo se registran si su manager existe
Nuevas Features Admin
• /fcore reload [módulo] — reload granular sin reiniciar todo
• /fcore styleaudit — detecta violaciones de estilo BaltiaMC en menús/mensajes
• /fcore validate — valida configs vs defaults (encuentra typos en claves)
• /fcore metrics — counters, timers, slow queries
• Backup automático antes de /fcore resetconfig (en backups/<timestamp>/)
• Discord webhook integrado para logs WARN/ERROR (configurable en config.yml)
Arquitectura
• Sistema de subcomandos con router (más fácil agregar comandos nuevos)
• Pipeline unificado de join/quit/death con prioridades
• Logger estructurado con niveles DEBUG/INFO/WARN/ERROR
• Migraciones de schema versionadas (fcore_schema_version)
• Framework de módulos plugables (FModule)
• Estructura DB separada (ConnectionPool / QueryExecutor / CacheLayer)
• Schema validator de YAMLs
Calidad
• Suite de tests (JUnit 5 + Mockito): CooldownManager, MoneyFormat, FLogger, TtlCache, PerfThrottle
• GitHub Actions CI configurado
• Métricas de DB: queries/sec, slow queries (>200ms), errores
Notas técnicas
• Compatible con MC 1.13 - 1.21+
• Java 17 requerido
• Compatible con MySQL + SQLite
• ProGuard obfuscation activa
Compatibilidad
Sin cambios breaking. Drop-in replacement del v1.1.
¿Encontraste un bug? Reportalo en Discord o por DM.
New
• Stats system: /playtime and /stats commands showing playtime, joins, kills, deaths and KDR
• Placeholders: %fcore_playtime%, %fcore_playtime_seconds%, %fcore_joins%
• Configurable anti-spam (per-player rate limit with sliding window)
• Configurable anti-caps (block / lower modes)
• New permission fcore.chat.bypass for staff
Internal improvements
• Full refactor of lobby protection (more maintainable and efficient)
• Refactor of the join/quit system
• Artilugios manager optimized (duplicated code removed)
Other
• Automatic DB schema migration for existing servers
• Improved memory cleanup on disconnect
No breaking changes. Drop-in update: replace the .jar and restart.
### Nick System
- Players can now set a custom display name with full color support
- Nick persists across restarts with async file saves
- Admin commands to set/reset nicks for any player
### Performance Overhaul
- Double Jump — added per-player eligibility cache;
PlayerMoveEventhot path no longer recalculates permissions on every tick- Floating Minions — replaced O
reverse map lookup with O(1)
ConcurrentHashMap; animation task no longer risksConcurrentModificationException- Join/Quit — join message config now cached in memory; cleanup task properly cancelled on shutdown
- Cooldowns — periodic pruning now also removes empty inner maps, preventing unbounded memory growth at high player counts
- Tab Completion — player name list cached with volatile + immutable reference; zero lock contention on the hot read path
### Concurrency & Thread Safety
ChatListenerdomain whitelist now uses atomic volatile swap on reload — no moreConcurrentModificationExceptionunder concurrent chatNickManagermigrated fromHashMaptoConcurrentHashMapEconomyManagershutdown sequence fixed: scheduler stops before DB save to prevent data lossDatabaseManagerthread pool rejection policy changed fromCallerRunsPolicy(which could block the main thread) to a safe discard-with-log policyDoubleJumpManagerfall-reset tasks now properly tracked and cancelled; no leakedBukkitTaskinstances- All periodic background tasks now store references and cancel cleanly on
onDisable()
### Bug Fixes
- Fixed
NullPointerExceptionin join message menu when clicking the toggle button (emptyactions:key in YAML)- Fixed
ObjectPooldust options cache growing unbounded; now capped at 256 entries
### Cosmetics System (Artilugios)
- Full audit pass on all 10 menu YAML files — navigation chain verified consistent across all menus
- Rank-gated permissions verified: ROS → VENUS → APOLO → ARES → BALTIA progression intact
