Nukkit 2.0 Alpha

Nukkit 2.0 is now in alpha with support for blocks above ID 255 (old chunk format limitation), LevelDB support, faster chunk loading and a variety of other features that listed are below. This build is NOT intended to be used in production environments as there are still major bugs that could potentially corrupt your world.
Existing anvil format worlds will be automatically converted to the LevelDB format upon loading. This may take a long time however we are still optimising the converter code.

Developers
The API has undergone some major changes in areas which will 100% break your plugins and due to this version still being in alpha, we do not recommend updating them yet as there may still be more changes to come.





New Features

Custom Blocks, Items & Entities

These will require a resource pack to be loaded with the definitions and textures for the specified object. A custom class can be registered with the corresponding Registry to give your block custom features such as drops, hardness and light level. You will need to have load: STARTUP set in your plugin.yml so that the blocks, items and entities can be registered before any worlds are loaded. As of writing this post, custom entities have not been tested so they may not work. If you do come across any issues, please make a bug report on the GitHub issue tracker with your resource pack included.


Async Chunk I/O

Chunk loading was previously run on the main thread which caused unnecessary lag on the due to compression and decompression of the chunks being loaded from the disk. Now chunk loading has been moved into it's own thread pool with generation to give some extra performance to the main thread.


LevelDB

LevelDB support has been updated to enable loading of vanilla worlds into Nukkit and vice versa although 1.13+ worlds cannot currently be loaded into Nukkit due to new block state changes in the format. This will be implemented at a later date. With the move to LevelDB, we are now able to support blocks above ID 255 which was a limitation of the old Anvil format. Loading times should also be improved as the format saved to disk is native to Minecraft Bedrock therefore requiring minimal decoding before being sent to the player.


Other Major Changes

Network

The network has been overhauled to use Netty wherever possible to reduce the overhead from converting between Java byte arrays and native Netty buffers. All packets sent using the indirect method will now be batched together in a single packet every tick to reduce network overhead (vanilla does this by default)


Entities

Every entity now have it's own interface to allow extra customisation so you do not have to extend the existing BaseEntity class and can write one from scratch. These entities can be registered in the EntityRegistry class which allows overriding of the default entity classes using a priority system. Overridden and plugins specific entities can still be created by using the function that provides a plugin object.
Entity metadata has also been completely rewritten so that protocol updates do not require your plugins to be recompiled if they use any metadata constants.
 
On server start i get this

Exception in thread "main" java.lang.ExceptionInInitializerError
at java.lang.J9VMInternals.ensureError(J9VMInternals.java:148)
at java.lang.J9VMInternals.recordInitializationFailure(J9VMInternals.java:137)
at net.daporkchop.lib.random.PRandom.shuffle(PRandom.java:256)
at net.daporkchop.lib.random.PRandom.shuffle(PRandom.java:244)
at net.daporkchop.lib.noise.engine.PerlinNoiseEngine.<init>(PerlinNoiseEngine.java:124)
at cn.nukkit.level.biome.Biome.<clinit>(Biome.java:23)
at cn.nukkit.registry.BiomeRegistry.<clinit>(BiomeRegistry.java:28)
at cn.nukkit.Server.<init>(Server.java:194)
at cn.nukkit.Nukkit.main(Nukkit.java:135)
Caused by: java.lang.RuntimeException: java.lang.NoSuchMethodException: java.lang.Throwable.getOurStackTrace()
at net.daporkchop.lib.common.util.PorkUtil.<clinit>(PorkUtil.java:101)
... 7 more
Caused by: java.lang.NoSuchMethodException: java.lang.Throwable.getOurStackTrace()
at java.lang.Class.newNoSuchMethodException(Class.java:562)
at java.lang.Class.throwExceptionOrReturnNull(Class.java:1195)
at java.lang.Class.getMethodHelper(Class.java:1259)
at java.lang.Class.getDeclaredMethod(Class.java:931)
at net.daporkchop.lib.common.util.PorkUtil.<clinit>(PorkUtil.java:91)
... 7 more
 
On server start i get this

Exception in thread "main" java.lang.ExceptionInInitializerError
at java.lang.J9VMInternals.ensureError(J9VMInternals.java:148)
at java.lang.J9VMInternals.recordInitializationFailure(J9VMInternals.java:137)
at net.daporkchop.lib.random.PRandom.shuffle(PRandom.java:256)
at net.daporkchop.lib.random.PRandom.shuffle(PRandom.java:244)
at net.daporkchop.lib.noise.engine.PerlinNoiseEngine.<init>(PerlinNoiseEngine.java:124)
at cn.nukkit.level.biome.Biome.<clinit>(Biome.java:23)
at cn.nukkit.registry.BiomeRegistry.<clinit>(BiomeRegistry.java:28)
at cn.nukkit.Server.<init>(Server.java:194)
at cn.nukkit.Nukkit.main(Nukkit.java:135)
Caused by: java.lang.RuntimeException: java.lang.NoSuchMethodException: java.lang.Throwable.getOurStackTrace()
at net.daporkchop.lib.common.util.PorkUtil.<clinit>(PorkUtil.java:101)
... 7 more
Caused by: java.lang.NoSuchMethodException: java.lang.Throwable.getOurStackTrace()
at java.lang.Class.newNoSuchMethodException(Class.java:562)
at java.lang.Class.throwExceptionOrReturnNull(Class.java:1195)
at java.lang.Class.getMethodHelper(Class.java:1259)
at java.lang.Class.getDeclaredMethod(Class.java:931)
at net.daporkchop.lib.common.util.PorkUtil.<clinit>(PorkUtil.java:91)
... 7 more
Nukkit 2.0 currently does not support OpenJ9 VMs. Please use GitHub to report issues.
 
Nukkit 2.0 is now in alpha with support for blocks above ID 255 (old chunk format limitation), LevelDB support, faster chunk loading and a variety of other features that listed are below. This build is NOT intended to be used in production environments as there are still major bugs that could potentially corrupt your world.
Existing anvil format worlds will be automatically converted to the LevelDB format upon loading. This may take a long time however we are still optimising the converter code.

Developers
The API has undergone some major changes in areas which will 100% break your plugins and due to this version still being in alpha, we do not recommend updating them yet as there may still be more changes to come.






New Features

Custom Blocks, Items & Entities

These will require a resource pack to be loaded with the definitions and textures for the specified object. A custom class can be registered with the corresponding Registry to give your block custom features such as drops, hardness and light level. You will need to have load: STARTUP set in your plugin.yml so that the blocks, items and entities can be registered before any worlds are loaded. As of writing this post, custom entities have not been tested so they may not work. If you do come across any issues, please make a bug report on the GitHub issue tracker with your resource pack included.


Async Chunk I/O

Chunk loading was previously run on the main thread which caused unnecessary lag on the due to compression and decompression of the chunks being loaded from the disk. Now chunk loading has been moved into it's own thread pool with generation to give some extra performance to the main thread.


LevelDB

LevelDB support has been updated to enable loading of vanilla worlds into Nukkit and vice versa although 1.13+ worlds cannot currently be loaded into Nukkit due to new block state changes in the format. This will be implemented at a later date. With the move to LevelDB, we are now able to support blocks above ID 255 which was a limitation of the old Anvil format. Loading times should also be improved as the format saved to disk is native to Minecraft Bedrock therefore requiring minimal decoding before being sent to the player.


Other Major Changes

Network

The network has been overhauled to use Netty wherever possible to reduce the overhead from converting between Java byte arrays and native Netty buffers. All packets sent using the indirect method will now be batched together in a single packet every tick to reduce network overhead (vanilla does this by default)


Entities

Every entity now have it's own interface to allow extra customisation so you do not have to extend the existing BaseEntity class and can write one from scratch. These entities can be registered in the EntityRegistry class which allows overriding of the default entity classes using a priority system. Overridden and plugins specific entities can still be created by using the function that provides a plugin object.
Entity metadata has also been completely rewritten so that protocol updates do not require your plugins to be recompiled if they use any metadata constants.
Make it for iPhone
 
Top