Skip to content

v2.0.0

Choose a tag to compare

@github-actions github-actions released this 29 Sep 20:27
dcb78dd

2.0.0 (2026-09-29)

⚠ BREAKING CHANGES

  • permission: runtime no longer starts LuckPerms or loads Butterfly; a platform module now owns the permission platform's lifecycle.
  • build: split titan into feature columns and app variants (#312)
  • app: LobbyModule, ModuleContext, ModuleRegistry and the ModuleItems/ModuleTasks/ModuleCommands extension points are removed. Features are @Singleton Avaje beans that attach their own event node in @PostConstruct and detach it in @PreDestroy; lobby items are LobbyItem beans collected by LobbyItems. Player-facing behaviour is unchanged.
  • navigator: the navigator no longer reads navigator.title and navigator.entries.*; its title and destinations are defined in NavigatorModule/Destination. The ModuleContext#navigator() extension point and the navigator entry registry are removed; modules can no longer contribute navigator entries. Feature flags under features.* are unchanged.
  • config: feature flags move from flags.properties to the features section of application.yaml (e.g. features.NAVIGATOR_SLENDER: true, env FEATURES_NAVIGATOR_SLENDER); flags.properties and Togglz are no longer read.
  • config: read configuration through the avaje config facade (#301)
  • config: /setup app commands are removed; configuration lives in application.yaml. Values previously set via /setup app ... belong in application.yaml, a profile file, or an env var instead.
  • app: elytra.boostMultiplier is replaced by elytra.burnDurationTicks and elytra.cooldownTicks (defaults 30/40, matching Voyager's own deterministic burn and its reference map's cooldown). The boost is Vanilla's own client-side impulse, so there is no multiplier left to configure. LegacyConfigMigration now drops elytraBoostMultiplier (logged, like fireworkBoostSlot and updateRateAgones) instead of migrating it; a migrated lobby starts the elytra module with its compiled-in defaults. The setup server's /setup app elytraBoostMultiplier syntax is replaced by elytraBoostMultiplier -> elytraBurnDurationTicks/elytraCooldownTicks.

Features

  • app: discover lobby modules with avaje inject (#295) (710632e)
  • app: rebuild the lobby around feature modules (#292) (37b1242)
  • common: report navigator deliveries in local runs (#296) (2cb5279)
  • config: load lobby configuration from application.yaml with profiles (#297) (b9e94b9)
  • config: reload configuration at runtime and read feature flags from it (#304) (7a74281)
  • daytime: follow the real wall clock in the lobby (#319) (2d55a03)
  • navigator: show the build server destination to the team (#322) (15932c9)
  • portal: switch servers by walking or flying through portals (#326) (07a9ddc)
  • season: restart the lobby into a seasonal world during its window (#321) (7582a59)
  • setup: create lobby portals from in-game commands (#329) (aad7bcb)

Bug Fixes

  • deps: update dependency ch.qos.logback:logback-classic to v1.6.4 (#302) (4ef6b25)
  • deps: update dependency com.github.ben-manes.caffeine:caffeine to v3.3.0 (#288) (6889a3b)
  • deps: update dependency com.google.guava:guava to v33.7.2-android (#327) (e1846ca)
  • deps: update dependency com.google.guava:guava to v33.7.2-jre (#328) (067dabc)
  • deps: update dependency com.tngtech.archunit:archunit-junit5 to v1.5.1 (#300) (c874847)
  • deps: update dependency io.sentry:sentry-bom to v8.56.0 (#283) (0836117)
  • deps: update dependency io.sentry:sentry-bom to v8.57.0 (#287) (78b9f40)
  • deps: update dependency io.sentry:sentry-bom to v8.58.0 (#290) (9c6e720)
  • deps: update dependency net.onelitefeather:aonyx-bom to v0.8.7 (#286) (09646f9)
  • deps: update dependency org.mockito:mockito-core to v5.24.0 (#291) (0dae95d)
  • deps: update dependency org.slf4j:slf4j-api to v2.0.20 (#289) (dd8b0a4)
  • deps: update dependency org.yaml:snakeyaml to v2.7 (#298) (4221d58)
  • season: explain that season date-times must be quoted (#325) (fc3924d)

Code Refactoring

  • app: replace the lobby module platform with plain avaje beans (#308) (71e3724)
  • build: split titan into feature columns and app variants (#312) (249f5d5)
  • config: read configuration through the avaje config facade (#301) (8fc2c01)
  • navigator: hard-code navigator destinations in a single aves module (#306) (3d9e1d0)
  • permission: resolve permissions through an optional di module (#313) (a32544b)