Maralto Studios

← Todos os trabalhos

CASE 02

CombatForge

Motor de combate e XP por nível para Paper 1.21+. Anti-farm por janela deslizante, ranking global, API pública com evento cancelável e três idiomas.

Ano
2026
Papel
Desenvolvimento completo
Tipo
Open source
Stack
Java · Paper 1.21+

3 idiomas · PT · EN · ES

Contexto

Servidores de RPG no Paper dependem de progressão por nível para dar sentido ao combate.

As opções pagas amarram o servidor a um ecossistema; as gratuitas costumam ter fórmula fixa e nenhuma proteção real contra farm.

A staff queria ajustar curva e limites sem recompilar nada.

Meu papel

  • Implementei as fórmulas de dano corpo a corpo e à distância, independentes e configuráveis.

  • Modelei o XP pela relação entre nível do mob e nível do jogador, com janela deslizante anti-farm e penalidade por sobrenível.

  • Criei ranking de abates e de XP de todos os tempos, com placeholders para scoreboard.

  • Integrei opcionalmente com MMOCore, MythicMobs, LevelledMobs e PlaceholderAPI.

  • Publiquei API com CombatXpGainEvent cancelável e traduzi tudo em PT, EN e ES.

Decisões técnicas

  • Janela deslizante em vez de cooldown fixo

    Cooldown pune quem joga rápido; janela deslizante pune quem repete o mesmo alvo em loop. O jogador legítimo nunca sente a diferença.

  • Evento cancelável como contrato público

    Outros plugins precisam interferir no XP — boost de evento, classe de RPG, penalidade de zona. Um evento cancelável evita fork e mantém o núcleo pequeno.

  • Integração opcional, nunca obrigatória

    Com soft-depend, se o plugin de terceiro não estiver instalado o CombatForge sobe igual. Integração não pode ser pré-requisito de boot.

  • Três idiomas desde a primeira versão

    Tradução tardia vira retrofit em toda string do projeto. Fazer desde o início custou horas; fazer depois custaria dias.

Resultado

  • Licença MIT e versão 2.0.0 publicada no GitHub.

  • API pública documentada, com evento cancelável usado por terceiros.

  • Curva, limites e mensagens em YAML, sem recompilar.

Stack

  • Java
  • Paper 1.21+
  • MIT

Galeria

Próximo case

03 · minecraft-statusbot →