CASE 02
CombatForge
Combat and per-level XP engine for Paper 1.21+. Sliding-window anti-farm, global ranking, public API with a cancellable event, three languages.
3 languages · PT · EN · ES
Context
RPG servers on Paper rely on level progression to make combat mean something.
Paid options lock the server into an ecosystem; free ones tend to have a fixed formula and no real farm protection.
Staff wanted to tune curve and caps without recompiling anything.
My role
Implemented independent, configurable melee and ranged damage formulas.
Modelled XP from the mob/jogador level ratio, with a sliding-window anti-farm and an over-level penalty.
Built all-time kill and XP rankings, with scoreboard placeholders.
Integrated optionally with MMOCore, MythicMobs, LevelledMobs and PlaceholderAPI.
Published an API with a cancellable CombatXpGainEvent and shipped PT, EN and ES.
Technical decisions
Sliding window instead of a fixed cooldown
A cooldown punishes fast play; a sliding window punishes repeating the same target in a loop. The legitimate player never notices.
A cancellable event as a public contract
Other plugins need to touch XP — event boosts, RPG classes, zone penalties. A cancellable event avoids forks and keeps the core small.
Optional integration, never a requirement
With soft-depend, a missing third-party plugin still boots CombatForge. Integration cannot be a boot prerequisite.
Three languages from the first release
Late translation becomes a retrofit across every string. Doing it up front cost hours; doing it later would cost days.
Outcome
MIT licensed, v2.0.0 published on GitHub.
Documented public API with a cancellable event used by third parties.
Curve, caps and messages in YAML, no recompile.
Stack
- Java
- Paper 1.21+
- MIT
Gallery
Next case
03 · minecraft-statusbot →