Cobblemon Conquest

Cobblemon Conquest is a feudal-Japan Cobblemon server, and I lead its development. Nearly everything players touch beyond Cobblemon itself is ours: quests, gyms, events, minigames, dimensions, cosmetics, and the staff tools that keep it all configurable.

Over 40 custom mods

A Japanese-style Minecraft town on Cobblemon Conquest: a giant cherry blossom tree over a pagoda, temples and a lake
Role
Lead developer
Status
Live
Built with
  • Java 21
  • Fabric 1.21.1
  • Cobblemon
  • Mixin
  • MySQL
  • Python
  • py4web
Links

What's in it

  • IveriumCore, a modular server core for Fabric. Features are modules with a shared lifecycle: the Discord bot, player analytics, referrals, wiki sync, themed menus and a leak guard.
  • Over 40 mods: quests and cutscenes, Mega Evolution, trainer battles with a tactical AI, gyms, the Battle Subway, a Distortion Realm with a Giratina fight, an Ultra Space dimension, fishing, hunts, a Game Corner, plushie collections and animated doors.
  • A global events framework that schedules more than a dozen event mods on one calendar, from Voltorb Tag and Snorlax Sumo to fishing contests and races.
  • The website and staff portal, built with py4web: a quest editor, a config editor for every mod, analytics, a wiki with an approval step, and the Discord bot.

How it's built

  • Server-side first. Players join with the normal Cobblemon modpack; per-player entities, cutscene cameras and themed menus are done with packets, mixins and a resource-pack font instead of client mods.
  • Every mod follows the same house style: configs that validate before they swap in on reload, LuckPerms permissions with an operator fallback, and one shared text formatter.
  • Ready to scale out: IveriumCore has a sharding API and player handoff, so survival can run as several instances behind one proxy.

Worth knowing

A production heap dump showed ghost copies of players piling up. The cause was a cross-dimension teleport in Fabric's join event, which fires before the player is added to the world. I fixed it at the source and added a guard module so it can't come back.