Skip to content

0.16 ➝ 0.17

Minecraft version

Updated to Minecraft 1.21.1

Asset index files removed

Nova no longer interprets asset index files such as materials.json. Instead, everything is registered in code now. This goes hand in hand with the new model builder system, which you can read more about here.

Registry Element Builders

All registry element builders are now in DSL-style:

previously
val ITEM = item("item")
    .behaviors(/*...*/)
    .register()
now
val ITEM = item("item") {
    behaviors(/*...*/)
}

Items

Data components

With Minecraft 1.20.5, data components have been introduced. You can now also specify these in ItemBehaviors.
More info

Enchantments

Since enchantment categories were dropped by Vanilla, Nova has also removed enchantment categories. This means there are some changes to how the Enchantable behavior is configured.
More info

Additionally, the Enchantment Nova class and all related utility functions have been removed, as it they are no longer needed.

Nova Compound

Item Categories

Addons can no longer define item categories. Instead, one category per addon is created by default. Server admins can still customize item categories in configs/nova/item_categories.yml.

The novaCompound of ItemStacks now needs to be written back to the ItemStack after modification.

Block(states) / Tile-Entities

Nova blocks have been drastically changed. Block states now work similarly to Minecraft's block states.

See Blocks for more information.

Tile-entities have undergone major refactoring, many function for retrieving data have been renamed or (re)moved. The functions that were kept in TileEntity are now prefixed with stored... instead of get.... Region-related functions have been moved to the Region companion object. Side-config related functions have been removed.

See Tile Entities for more information.

BlockManager and TileEntityManager removed

BlockManager was removed. To place or break blocks, use BlockUtils#placeBlock and BlockUtils#breakBlock. To retrieve the block state at a certain position, you can use the extension property novaBlockState on org.bukkit.Block.

TileEntityManager was removed. To get the tile-entity at a certain position, use WorldDataManager#getTileEntity.

Multi-block / Linked block states removed

The multi-block system via linked block states has been removed from Nova, as it was conceptually incompatible with the new block states. Instead, you can easily replicate the functionality via a custom block behavior that places/destroys additional blocks in BlockBehavior#handlePlace and BlockBehavior#handleBreak.

Block Behaviors

A lot of block logic, such as breaking, sounds, drops, etc. has been moved into separate block behaviors. See Block Behaviors for more information.

Contexts

The existing block contexts have been replaced with a more flexible Context system.

Tile-Entity instantiation

Tile-entities are now instantiated off-main, possibly before Nova initialization is completed, and in possibly unloaded chunks.
More info

Tile-Entity async tick

The handleAsyncTick function has been removed. Instead, you can use the tile-entities coroutineSupervisor to launch coroutines for async tasks.

Tile-Entity networks

The tile-entity network system has been completely rewritten and now also has a documentation page.

Upgrade system moved to Simple-Upgrades

The upgrade system has been completely moved to simple upgrades and is no longer a part of Nova. You can still use it, but it will no longer be documented or referenced in the Nova docs.

Providers

There were also some changes to Providers. You now need to call get() instead of .value to access the value. Additionally, Providers are now lazy, meaning they only load or update their value when they are accessed.

Initialization dispatcher

It is now possible to specify whether initialization tasks should be run SYNC or ASYNC, independently of the stage. The previously existing stages POST_WORLD_ASYNC and POST_PACK_ASYNC have been removed.
More info

General refactoring

Apart from huge changes to blocks, tile-entities, etc. some packages have been moved as well.
Most notable changes:

  • xyz.xenondevs.nova.tileentity to xyz.xenondevs.nova.world.block.tileentity
  • xyz.xenondevs.nova.item to xyz.xenondevs.nova.world.item
  • xyz.xenondevs.nova.player to xyz.xenondevs.nova.world.player
  • xyz.xenondevs.nova.data.configs to xyz.xenondevs.nova.configs
  • xyz.xenondevs.nova.data.serialization to xyz.xenondevs.nova.serialization
  • xyz.xenondevs.nova.data.recipe to xyz.xenondevs.nova.recipe
  • xyz.xenondevs.nova.data.resources to xyz.xenondevs.nova.resources

NMS-Utilities

The NMS-Utilities library has been merged into Nova.

Advancement utilities removed from docs

The few utility functions Nova still provides for interacting with nms advancement classes have been consciously removed from the docs. Please use a third-party advancement library instead.