Skip to main content

Architecture

IgnisCore uses a platform-neutral core with server-software-specific adapters discovered at runtime via ServiceLoader.

Module layout

igniscore-parent/
├── api/ Platform-neutral public contract
├── common/ Shared runtime: loaders, registry, BlockManager
├── bukkit/
│ ├── common/ Shared Bukkit runtime (listeners, commands, services)
│ ├── spigot/ Spigot bootloaders per MC version line
│ └── paper/ Paper adapter + bootloaders
├── sponge/
│ ├── common/ Shared Sponge runtime
│ └── v8.5.0 / v12.0.0 / v19.0.0 Version-specific entrypoints
├── extensions/
│ ├── blocks/ Bundled block extension JARs
│ ├── items/ Bundled item extension JARs
│ └── shared/ Optional typed config helpers
└── bootstrap/ Single deployable JAR
ModulePurpose
apiStable extension-facing contract: IgnisCoreAPI, ports, strategies
commonExtension loaders, strategy registry, BlockManager, lifecycle
bootstrapProduces one deployable JAR for every supported server

Boot flow

All platforms use PlatformBootloaderLoader (common) to identify server software and select a PlatformBootloader:

  • Bukkit family: IgnisBootstrapPlugin from plugin.yml → Guice + IgnisCoreApplication
  • Sponge: version-matched IgnisSpongePlugin from sponge_plugins.json → same loader

Bootloader priority (Bukkit)

PriorityBootloaderServer
100Paper bootloadersPaper 26.1.x / 1.21.x / 1.20.x
50Spigot bootloadersSpigot 26.1.x / 1.21.x / 1.20.x
200Sponge bootloadersSponge 19.x / 12.x / 8.5.x

Dependency rules

  • Extensions depend on api (and optionally extensions/shared) with provided scope
  • Extensions must not shade IgnisCore or platform APIs into their JARs
  • Platform adapters live in bukkit/ and sponge/ — extensions never import them