Maralto Studios

← All work

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.

Year
2026
Role
End-to-end development
Type
Open source
Stack
Java · Paper 1.21+

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 →