0.14 ➝ 0.15
Paper migration
Nova has migrated to Paper. This includes significant changes to the build environment, so check out the Nova-Addon-Template on GitHub for an up-to-date example.
This also means that you'll no longer need to run BuildTools.
It's also no longer possible to reload the server, even if you're in dev mode with -DNovaDev, but this didn't work properly before anyway.
Init annotation
The @Init annotation now requires a stage parameter. More info
Configs
Nova now uses a fork of SpongePowered/Configurate, configReloadable has been deprecated and nova items- and blocks now properly have a config associated with them.
val A: Long by configReloadble { NovaConfig[Items.EXAMPLE_ITEM].getLong("some.value") }
val B: Long by configReloadable { NovaConfig["namespace:name"].getLong("some.value") }
val A: Long by Items.EXAMPLE_ITEM.config.entry<Long>("some", "value")
val B: Long by Configs["namespace:name"].entry<Long>("some", "value")
ItemBehavior
ItemBehavioris now an interface.- The same
ItemBehaviorinstance can now be used for multipleNovaItems. - The
modifyItemBuilderfunction has been deprecated in favor of a newgetDefaultCompoundfunction. - Many default item behaviors such as
Damageableare now also interfaces. This allows you to (for example) implement your own damaging logic (such as using energy). - All item behavior
*Optionsclasses (such asFoodOptions,ToolOptions, etc.) have been removed as the properties have been moved to the new item behavior interfaces. NovaItem#getBehaviornow asserts non-null by default. AddedNovaItem#getBehaviorOrNullfor nullable access.ItemBehavior#handleInteractnow acceptsWrappedPlayerInteractEventinstead ofPlayerInteractEvent. This wrapping class has an additional parameter calledactionPerformed, which is used to signal whether a custom action has been run. Additionally,handleInteractis now always called, even if an action (such as a tile-entity gui being opened) has already been performed.
Utility functions
ItemBehavior-related utility function such as those in DamageableUtils have been moved to the companion object of their respective ItemBehavior.
Packet Event Listeners
Packet Event listeners now need a PacketListener interface. More Info
Advancements
The advancement dsl builder has been removed. You can still register advancements via AdvancementLoader, but you'll need to use Mojang's internal advancement builders. The built-in utility functions for creating advancements about obtaining Nova items (obtainNovaItemAdvancement, obtainNovaItemsAdvancement) are still available.