Nucleus - The Ultimate Essentials Plugin

For some unknown reason, I can’t identify what permission is for normal chests to open. everyone asks permission to open normal chests, I need help please

https://nucleuspowered.org/docs/permissions.html

There are no permissions that allow you to modify normal chest behaviour.

This typically means another plugin is preventing it. If you are using LuckPerms you can use the command “/lp verbose” to see what permissions are being checked at a given time. Therefore you can active it then open a normal chest, which will tell you the permission you need.

A new version has been released for Nucleus, it is available for download here.


This is a snapshot build of Nucleus and should only be used for testing purposes. No support is given for this build.

Git Commit hash: c07f97c0
Last commit: Fix incorrect URL

need .sleepingignored permission to be added so that one person sleep can be allowed although very good already :)\

A new version has been released for Nucleus, it is available for download here.


This is a bug fix and minor feature release for Nucleus for Sponge API version 7.1

This was built from Nucleus commit: 54995369

Release Notes

If you’re having trouble, visit our Discord channel: https://discord.gg/A9QHG5H

Compatibility Note

It has recently been discovered that one or two plugins contain a project known as “Configurate But With Blackjack And Hookers”. This project tries to extend the Configurate system’s Object Mapper, but does so in a dangerous, unsupported and hacky way - so much so that it stops other plugins from using some of their own advanced object mappers. As you may have guessed, Nucleus is severely impacted by this.

For technical details, you can read more about the issue below:

If you use NT-RPG or related plugins, you should upgrade Nucleus now or stop using the plugins that include these hacks. It is likely that Nucleus was not working correctly in the first place, but this should work around the issue. You will know if you’ve been impacted when running this version, Nucleus will print a large message on start up to tell you what is happening.

If you develop a plugin that uses its own object mapper, you will also be impacted by this issue.

Bugfixes

  • Prevent attempts to repair negative durability items
  • Fix /kit info displaying auto redeem status instead of message redeem status under “Message on redeem”

Known Issues

A new version has been released for Nucleus, it is available for download here.


This is a bug fix and minor feature release for Nucleus for Sponge API version 7.1

This was built from Nucleus commit: 9e813821

Release Notes

If you’re having trouble, visit our Discord channel: https://discord.gg/A9QHG5H

A Note on RTP

Many of you have been saying that RTP has been not working super well, even after my complete rewrite of the
system. I spent an hour debugging the system and found that I was handing the centre of the border at the wrong
point in my calculations.

As you possibly know, the default RTP kernels require three things (for x,z at least):

  • The world centre
  • The minimum radius from the world centre which is a valid RTP point
  • The maximum radius from the world centre which is a valid RTP point

The way the calculation should work for x and z co-ordinates is as follows:

  • Get Java to return a random number between 0 and max-min, then adds min
  • Determine whether the co-ordinate is positive or negative, multiplies the result above by -1 or 1 to do this
  • Add the corresponding x or z co-ordinate from the world spawn point

My mistake was that the second and third step were reversed. This incorrectly set the co-ordinates for three-quarters
of the co-ordinates (that is, if either or both of the signs determined in step 2 is negative).
The further away your spawn point from (0,0), the worse this bug became. The fix amounted to moving a right parenthesis.

This did not affect any third party kernels, though I don’t think that there are any at this time.

I am sorry if you’ve been tearing your hair out over this!

Bugfixes

  • Fixed RTP incorrectly working out target co-ordinates when the centre of the border is not (0, 0)
  • Fix cryptic error message when using a warp to a world that can no longer be found

Known Issues

1 Like

A new version has been released for Nucleus, it is available for download here.


This is a release candidate of Nucleus 2 for Sponge API version 7.3

THIS IS A RELEASE CANDIDATE. IT SHOULD BE STABLE BUT NEEDS TESTING. USE ON TEST SERVERS BEFORE PRODUCTION SERVERS.

Please report any issues to Github Issues (Issues · NucleusPowered/Nucleus · GitHub) CLEARLY stating the version of Nucleus you are using.

This was built from Nucleus commit: 04a2113b

Release Notes

If you’re having trouble, visit our Discord channel: https://discord.gg/A9QHG5H


Nucleus 2.0

Nucleus 2 is a major rewrite of much of the base code. It is designed to make future work to the system simpler, easier to understand, and hopefully, easier for people to contribute to.

As it stands, Nucleus 2 is semi-stable, but please do not use it on production servers without testing first. I would appreciate any testing I can get. I am only one person!

Here is a rundown of some of what is new, changed, removed, fixed and crucially, known to be broken.

PSA: Before you use Nucleus 2…

Nucleus 2 does not change how your data is stored, but the entire storage system has been completely rewritten. There may be issues with the storage system that I have been unable to test that might cause unexpected data loss. If this happens, please tell me via Github Issues.

No migration is necessary for the following:

  • main.conf
  • info.txt and other info files
  • User data
  • World data
  • Kits, warps, and other general data

Nucleus 2 also uses a new format for the commands.conf file and no migrator is provided at this time as the format is likely to change further as I complete the plugin. Please inspect commands.conf when you load and make any necessary changes.

Also, a note on the version. The Nucleus version will no longer contain the Sponge API version that it is built for, instead preferring new major versions to denote the change. This will still be denoted in the file name.

Nucleus 2 is for Sponge API 7.3 or any later version of Sponge API 7.x.

For Server Owners and Players

If you need help deciding which version of Nucleus to use, please visit our guide on how to choose.

For the things YOU need to do as a server owner, please visit our instructions on how to upgrade.

ADDED: Permission Levels/Powers for moderation tasks

Many of you have been asking “permission levels” because you don’t trust lower level staff to not abuse their powers and use them against higher level staff. They already existed for social spy, but now they exist for muting, jailing, kicking and banning. This feature allows you to give a numeric level to each player - by default, if your level is higher than the person you’re trying to act upon, your action will go through. By default, those with the same power for an action will not be able to affect each other.

Because this is an advanced feature, you must turn it on for the respective modules. The options in the mute, jail, kick, admin (for /sudo) and ban modules are:

  • use-permission-level: set to true to use permission levels
  • can-affect-same-level: set to true to let two players with the same permission level affect each other, false if not.

To specify a permission level, you have to give a specific permission option to the player in question. In LuckPerms, options are referred to as “meta”. The options you need to assign are specified in the config file (at least for now, will be on docs later), but for convenience, they are:

  • nucleus.ban.level
  • nucleus.jail.level
  • nucleus.kick.level
  • nucleus.mute.level
  • nucleus.sudo.level
  • nucleus.socialspy.level (this already existed)

No prizes for guessing which one is which! In LuckPerms, you would then specify the level an option using the command:

/lp user <user> meta set <option> <level>

For a ban level of 4 on dualspiral:

/lp user dualspiral meta set nucleus.ban.level 4

If a level is invalid or does not exist, having the permission to run the command you are running is considered a level of 1, not having the permission is considered a level of 0.

This has only been lightly tested. Please report any feedback on the system to me during your testing.

ADDED: Ability to specify arbitrary command names for Nucleus commands (EXPERIMENTAL)

Nucleus commands can now be given arbitrary command names in commands.conf under the “root level aliases” section, and Nucleus will attempt to register the command under that alias.

This feature is still subject to some testing, but I realised it was easy to add with the new codebase.

ADDED: Per User translation of Nucleus system messages

While Nucleus’ support for translation isn’t great and I’ve not been successful in getting a translation platform running (yet), Nucleus will support sending messages to players based on either:

  • The locale set via /nucleussetlanguage on a per-player basis; or
  • The client’s locale.

This will be available as we (hopefully) receive more translations.

You will be able to turn this off, of course, if you want all clients to see the same language.

ADDED: Permission context when running a Nucleus command

When a player is running a Nucleus command, they will obtain a permission context for the duration of that call. This context is nucleus_command, and will have a context value corresponding to the command in question - this can be seen by looking at the help page for the command in question.

ADDED: Compatibility Warning system

Nucleus comes packaged with information about known plugins and mods that conflict with its functions. These warnings may appear on startup, and on demand by running /nucleus compat.

ADDED: Kit data can now be reloaded from persistence on demand

I don’t recommend that you ever do this manually, but you can now update the kits data from persistence and reload it using /kit reload.

ADDED: /basictitle, /basicsubtitle and /basicactionbar commands

These commands allow you to send title, subtitle and actionbar messages to all or specific players. They work the same way as /planbroadcast. The flags for these commands are:

  • -p [player]: The name of the player or a selector that defines who to send the message to. If omitted, sends to all on the server.
  • -i [seconds]: The amount of time taken by the fade in effect, in seconds (does not affect action bar messages).
  • -o [seconds]: The amount of time taken by the fade out effect, in seconds.
  • -t [seconds]: The amount of time taken the message remains on the screen, in seconds.

ADDED: Notification module

This module houses the broadcast commands, as well as the new /basictitle, /basicsubtitle and /basicactionbar commands. Relaxant config from the admin module will be auto-migrated.

ADDED: Support for automatic USER permissions on the default group

Particularly useful for OP based servers, if you want all players to have access to all permissions in the nucleus USER role, you can now set core.give-default-group-user-permissions to
true and all users will be granted all permissions in the USER role. This is equivalent to granting the nucleus.user permission, but can also be used on servers with no permissions plugin installed.

MODIFIED: Chat tokens no longer accept pl style tokens

Chat tokens work similar to before, but are no longer plugin namespaced (so, {{pl:[]}} will no longer work). {{o:[]}} style tokens, those that select options from your permissions plugin, will still work.

MODIFIED: The /tp alias for /teleport defaults to disabled

Many mods, such as JourneyMap, were using the /tp command to perform teleports

Other commands may get the same treatment if the Nucleus team figures that it would be in the best interest of the community.

MODIFIED: The /mute and /unmute, /jail and /unjail commands are no longer toggles

This also has the side effect of making these actions all require their own permission.

MODIFIED: Warps now always require the permission nucleus.warps.<name> to redeem

Until recently, this was a configuration toggle. This is no longer the case. To emulate the previous behaviour, simply grant the nucleus.warps permission.

MODIFIED: Permission Group Chat Templates

The original way Nucleus attempted to determine which group template to use when displaying chat formatting was unpredictable and was very slow as it had to collect a lot of data from a permissions plugin. This has now been removed.

Nucleus has supported a nucleus.chat.group permission option (meta in LuckPerms) for some time. This option is now the only way to determine the group template a permission group or user will use - falling back to the default if this does not match.

MODIFIED: Permission Group /list groups

For similar reasons to chat groups no longer relying on parent groups, /list no longer does either. Groups are now defined by the nucleus.list.group option/meta.
The group alias config has also been removed, as you can just provide them the same nucleus.list.group option value.

As a bonus, /list groups now use text colour codes in the group names.

MODIFIED: /kit add has been merged into /kit create

The action performed by /kit add in v1 was to create a kit based on your inventory. This is now /kit create -c instead.

Both /kit create and /kit create -c now require the edit kit permission to actually add items to kits.

REMOVED: Debug Mode

Nucleus will just spit out errors to the console now, as they should never happen (or if they do, you should know about them).

REMOVED: The Warnings module has been removed

It wasn’t used much and, honestly, it was actually pushing the boundaries as to what Nucleus really should be doing. There are no migration paths available as it stands, however plugin developers can use the Nucleus API to extract any warnings against a player if they wish to enable such migration.

REMOVED: The Server Shop module has been removed

It wasn’t used much, and it had many issues with it that were not simple to fix. There are no migration paths available.

REWRITTEN: Teleportation Routines

Player teleportation should now be more reliable as the base teleport code has been deleted and completely rebuilt.

REWRITTEN: Message channel support removed for higher compatibility with other plugins

Nucleus will no longer use message channels, instead using an in-house solution to support formatting with other mods, (and for reporting formatting to other plugins). However, when possible, the message channels will still be applied to the event so plugins can see that Nucleus is doing something with them.

BUG FIXES: Miscellaneous fixes

While many bugs might have been introduced, other bugs have been fixed. Notable issues that have been fixed will be noted here.

For Plugin Developers that use the API

All Nucleus API calls cannot be considered to be stable at this time. Do not build production plugins against the v2 API.

REMOVED: The Nucleus static object

I’m going to start with something that isn’t in the API - Nucleus.getNucleus(). I’ve had the occasional complaint that updates to Nucleus have broken some plugins that depend on it. It always turns out to be developers not asking for API additions (which I try to guarantee) but just decide to use Nucleus.getNucleus() everywhere. Don’t do it - I do not class that as part of the API and it was a horrible object that allowed me to be lazy. v2 is about stopping me being lazy.

You shouldn’t do it anyway, but you will not be able to do it at all in v2, because the Nucleus object has been deleted. Please use the API. If there is something missing from the API that you wish to use, please open a Github issue.

MODIFIED: The location of nearly everything

To try to make things a little more sane, all APIs are now classified by their module or overreaching theme first, rather than whether they are a service, event etc. This should make it simpler to see what APIs are available for each module.

MODIFIED: TeleportResults is now TeleportResult, an enum. Other CatalogTypes are now Suppliers

TeleportResult is now an enum. Other CatalogTypes are now represented by Suppliers to remove reliance on hacky reflection techniques.

MODIFIED: The Kit API has been updated

A failed redemption will no longer throw a KitRedeemException. Instead, a KitRedeemResult will be returned and that will tell you if about the success (or failure).

You can also now get the status of a cooldown for a Kit/User combination.

REPLACED: NucleusMessageTokenService has been removed and replaced by NucleusPlaceholderService

The message token service has been completely removed. In its place, there is a NucleusPlaceholderService. Registration is no longer per plugin but per token, and the confusing variable system has been removed. Plugins can now simply register a token using the following:

NucleusAPI.getPlaceholderService().registerToken(PluginContainer, String, PlaceholderParser);

Nucleus Gluon v1 will no longer work for supporting placeholder API tokens.

REMOVED: Nucleus MessageChannels

These will be restored in a marker capacity only

In order to enable Nucleus formatting in chat events and to avoid future conflicts with other plugin message channels, Nucleus will now apply its formatting during the MessageChannelEvent.Chat event, and will no longer use MessageChannels for formatting. Nucleus will dynamically create message channels during the LATE priority.

As a result, no API for message channels is available in the API.

REMOVED: NucleusModuleService

The NucleusModuleService has been removed. Plugins wishing to disable modules should listen to the NucleusModuleEvent.AboutToConstruct event instead.

MODIFIED: All kinds of stuff

Please take a look through the API yourself for now. It’s all subject to change, but I have tried to add sensible documents. I will flesh out this section once we approach Beta.

For Developers considering contributing to Nucleus

Nucleus’ biggest changes have happened in this area. v2 no longer uses the static Nucleus object, but instead uses Guice and DI to create a series of cross cutting concerns to provide Nucleus wide actions. Commands, listeners and tasks should all have INucleusServiceCollection injected into themselves for access to these systems.

MODIFIED: Nucleus now uses Gradle 5.6.4

We have jumped from Gradle 4.10 to 5.6.4, as this is the last version that the SpongeGradle plugin has been tested with.

MODIFIED: Nucleus Implementation has been moved to the nucleus-core subproject

This gives a cleaner separation of the project, and allows for other sub projects to be added more easily. The root project now handles project wide actions only.

MODIFIED: Nucleus now uses the Kotlin DSL

The build scripts have been rewritten in Kotlin to improve type safety and being some more order to the scripts.


More information will be put on the website once things have settled, but you can have a look around now at https://v2-beta.nucleuspowered.org/docs.


Known Issues

  • This is an release candidate. It may contain a few bugs we are unaware of.
  • Plugins that use the V1 API will not be compatable with this version.
  • Some plugins and mods are known to be incompatible with Nucleus. See https://nucleuspowered.org/docs/compatibility.html for more information.

A new version has been released for Nucleus, it is available for download here.


This is a release candidate of Nucleus 2.0.0 for Sponge API version 7.3

THIS IS A RELEASE CANDIDATE. IT IS SEMI-STABLE BUT MAY CONTAIN A FEW ISSUES. DO NOT USE ON PRODUCTION SERVERS WITHOUT USING IT ON A TESTING SERVER FIRST

Please report any issues to Github Issues (Issues · NucleusPowered/Nucleus · GitHub) CLEARLY stating the version of Nucleus you are using.

This was built from Nucleus commit: 6aeedbea

Release Notes

If you’re having trouble, visit our Discord channel: https://discord.gg/A9QHG5H


Nucleus 2.0

Nucleus 2 is a major rewrite of much of the base code. It is designed to make future work to the system simpler, easier to understand, and hopefully, easier for people to contribute to.

As it stands, Nucleus 2 is semi-stable, but please do not use it on production servers without testing first. I would appreciate any testing I can get. I am only one person!

Here is a rundown of some of what is new, changed, removed, fixed and crucially, known to be broken.

PSA: Before you use Nucleus 2…

Nucleus 2 does not change how your data is stored, but the entire storage system has been completely rewritten. There may be issues with the storage system that I have been unable to test that might cause unexpected data loss. If this happens, please tell me via Github Issues.

No migration is necessary for the following:

  • main.conf
  • info.txt and other info files
  • User data
  • World data
  • Kits, warps, and other general data

Nucleus 2 also uses a new format for the commands.conf file and no migrator has been provided.

Also, a note on the version. The Nucleus version will no longer contain the Sponge API version that it is built for, instead preferring new major versions to denote the change. This will still be denoted in the file name.

Nucleus 2 is for Sponge API 7.3 or any later version of Sponge API 7.x.

For Server Owners and Players

If you need help to decide which version of Nucleus to use, please visit our guide on how to choose.

For the things YOU need to do as a server owner, please visit our instructions on how to upgrade.

ADDED: Permission Levels/Powers for moderation tasks

Many of you have been asking “permission levels” because you don’t trust lower level staff to not abuse their powers and use them against higher level staff. They already existed for social spy, but now they exist for muting, jailing, kicking and banning. This feature allows you to give a numeric level to each player - by default, if your level is higher than the person you’re trying to act upon, your action will go through. By default, those with the same power for an action will not be able to affect each other.

Because this is an advanced feature, you must turn it on for the respective modules. The options in the mute, jail, kick, admin (for /sudo) and ban modules are:

  • use-permission-level: set to true to use permission levels
  • can-affect-same-level: set to true to let two players with the same permission level affect each other, false if not.

To specify a permission level, you have to give a specific permission option to the player in question. In LuckPerms, options are referred to as “meta”. The options you need to assign are specified in the config file (at least for now, will be on docs later), but for convenience, they are:

  • nucleus.ban.level
  • nucleus.jail.level
  • nucleus.kick.level
  • nucleus.mute.level
  • nucleus.sudo.level
  • nucleus.socialspy.level (this already existed)

No prizes for guessing which one is which! In LuckPerms, you would then specify the level an option using the command:

/lp user <user> meta set <option> <level>

For a ban level of 4 on dualspiral:

/lp user dualspiral meta set nucleus.ban.level 4

If a level is invalid or does not exist, having the permission to run the command you are running is considered a level of 1, not having the permission is considered a level of 0.

This has only been lightly tested. Please report any feedback on the system to me during your testing.

ADDED: Ability to specify arbitrary command names for Nucleus commands (EXPERIMENTAL)

Nucleus commands can now be given arbitrary command names in commands.conf under the “root level aliases” section, and Nucleus will attempt to register the command under that alias.

This feature is still subject to some testing, but I realised it was easy to add with the new codebase.

ADDED: Per User translation of Nucleus system messages

Nucleus will support sending translated messages to players based on either:

  • The locale set via /nucleussetlanguage on a per-player basis; or
  • The client’s locale.

This will be available as we (hopefully) receive more translations.

You will be able to turn this off, of course, if you want all clients to see the same language.

(If you want to help with the translation effort, see https://v2-beta.nucleuspowered.org/docs/translation/)

ADDED: Permission context when running a Nucleus command

When a player is running a Nucleus command, they will obtain a permission context for the duration of that call. This context is nucleus_command, and will have a context value corresponding to the command in question - this can be seen by looking at the help page for the command in question.

ADDED: Compatibility Warning system

Nucleus comes packaged with information about known plugins and mods that conflict with its functions. These warnings may appear on startup, and on demand by running /nucleus compat.

ADDED: Kit data can now be reloaded from persistence on demand

I don’t recommend that you ever do this manually, but you can now update the kits data from persistence and reload it using /kit reload.

ADDED: /basictitle, /basicsubtitle and /basicactionbar commands

These commands allow you to send title, subtitle and actionbar messages to all or specific players. They work the same way as /planbroadcast. The flags for these commands are:

  • -p [player]: The name of the player or a selector that defines who to send the message to. If omitted, sends to all on the server.
  • -i [seconds]: The amount of time taken by the fade in effect, in seconds (does not affect action bar messages).
  • -o [seconds]: The amount of time taken by the fade out effect, in seconds.
  • -t [seconds]: The amount of time taken the message remains on the screen, in seconds.

ADDED: Notification module

This module houses the broadcast commands, as well as the new /basictitle, /basicsubtitle and /basicactionbar commands. Relaxant config from the admin module will be auto-migrated.

ADDED: Support for automatic USER permissions on the default group

Particularly useful for OP based servers, if you want all players to have access to all permissions in the nucleus USER role, you can now set core.give-default-group-user-permissions to
true and all users will be granted all permissions in the USER role. This is equivalent to granting the nucleus.user permission, but can also be used on servers with no permissions plugin installed.

MODIFIED: Chat tokens no longer accept pl style tokens

Chat tokens work similar to before, but are no longer plugin namespaced (so, {{pl:[]}} will no longer work). {{o:[]}} style tokens, those that select options from your permissions plugin, will still work.

MODIFIED: The /tp alias for /teleport defaults to disabled

Many mods, such as JourneyMap, were using the /tp command to perform teleports

Other commands may get the same treatment if the Nucleus team figures that it would be in the best interest of the community.

MODIFIED: The /mute and /unmute, /jail and /unjail commands are no longer toggles

This also has the side effect of making these actions all require their own permission.

MODIFIED: Warps now always require the permission nucleus.warps.<name> to redeem

Until recently, this was a configuration toggle. This is no longer the case. To emulate the previous behaviour, simply grant the nucleus.warps permission.

MODIFIED: Permission Group Chat Templates

The original way Nucleus attempted to determine which group template to use when displaying chat formatting was unpredictable and was very slow as it had to collect a lot of data from a permissions plugin. This has now been removed.

Nucleus has supported a nucleus.chat.group permission option (meta in LuckPerms) for some time. This option is now the only way to determine the group template a permission group or user will use - falling back to the default if this does not match.

MODIFIED: Permission Group /list groups

For similar reasons to chat groups no longer relying on parent groups, /list no longer does either. Groups are now defined by the nucleus.list.group option/meta.
The group alias config has also been removed, as you can just provide them the same nucleus.list.group option value.

As a bonus, /list groups now use text colour codes in the group names.

MODIFIED: /kit add has been merged into /kit create

The action performed by /kit add in v1 was to create a kit based on your inventory. This is now /kit create -c instead.

Both /kit create and /kit create -c now require the edit kit permission to actually add items to kits.

REMOVED: Debug Mode

Nucleus will just spit out errors to the console now, as they should never happen (or if they do, you should know about them).

REMOVED: The Warnings module has been removed

It wasn’t used much and, honestly, it was actually pushing the boundaries as to what Nucleus really should be doing. There are no migration paths available as it stands, however plugin developers can use the Nucleus API to extract any warnings against a player if they wish to enable such migration.

REMOVED: The Server Shop module has been removed

It wasn’t used much, and it had many issues with it that were not simple to fix. There are no migration paths available.

REWRITTEN: Teleportation Routines

Player teleportation should now be more reliable as the base teleport code has been deleted and completely rebuilt.

REWRITTEN: Message channel support removed for higher compatibility with other plugins

Nucleus will no longer use message channels, instead using an in-house solution to support formatting with other mods, (and for reporting formatting to other plugins). However, when possible, the message channels will still be applied to the event so plugins can see that Nucleus is doing something with them.

BUG FIXES: Miscellaneous fixes

While many bugs might have been introduced, other bugs have been fixed. Notable issues that have been fixed will be noted here.

For Plugin Developers that use the API

REMOVED: The Nucleus static object

I’m going to start with something that isn’t in the API - Nucleus.getNucleus(). I’ve had the occasional complaint that updates to Nucleus have broken some plugins that depend on it. It always turns out to be developers not asking for API additions (which I try to guarantee) but just decide to use Nucleus.getNucleus() everywhere. Don’t do it - I do not class that as part of the API and it was a horrible object that allowed me to be lazy. v2 is about stopping me being lazy.

You shouldn’t do it anyway, but you will not be able to do it at all in v2, because the Nucleus object has been deleted. Please use the API. If there is something missing from the API that you wish to use, please open a Github issue.

MODIFIED: The location of nearly everything

To try to make things a little more sane, all APIs are now classified by their module or overreaching theme first, rather than whether they are a service, event etc. This should make it simpler to see what APIs are available for each module.

MODIFIED: TeleportResults is now TeleportResult, an enum. Other CatalogTypes are now Suppliers

TeleportResult is now an enum. Other CatalogTypes are now represented by Suppliers to remove reliance on hacky reflection techniques.

MODIFIED: The Kit API has been updated

A failed redemption will no longer throw a KitRedeemException. Instead, a KitRedeemResult will be returned and that will tell you if about the success (or failure).

You can also now get the status of a cooldown for a Kit/User combination.

REMOVED: NucleusMessageTokenService has been removed in favour of the SpongeAPI 7.3 placeholder solution

The message token service has been completely removed, Nucleus now supports the SpongeAPI 7.3 central placeholder system.

Nucleus Gluon v1 will no longer work for supporting placeholder API tokens.

REMOVED: Nucleus MessageChannels

These will be restored in a marker capacity only

In order to enable Nucleus formatting in chat events and to avoid future conflicts with other plugin message channels, Nucleus will now apply its formatting during the MessageChannelEvent.Chat event, and will no longer use MessageChannels for formatting. Nucleus will dynamically create message channels during the LATE priority.

As a result, no API for message channels is available in the API.

REMOVED: NucleusModuleService

The NucleusModuleService has been removed. Plugins wishing to disable modules should listen to the NucleusModuleEvent.AboutToConstruct event instead.

MODIFIED: All kinds of stuff

Please take a look through the API yourself for now. It’s all subject to change, but I have tried to add sensible documents. I will flesh out this section once we approach Beta.

For Developers considering contributing to Nucleus

Nucleus’ biggest changes have happened in this area. v2 no longer uses the static Nucleus object, but instead uses Guice and DI to create a series of cross cutting concerns to provide Nucleus wide actions. Commands, listeners and tasks should all have INucleusServiceCollection injected into themselves for access to these systems.

MODIFIED: Nucleus now uses Gradle 5.6.4

We have jumped from Gradle 4.10 to 5.6.4, as this is the last version that the SpongeGradle plugin has been tested with.

MODIFIED: Nucleus Implementation has been moved to the nucleus-core subproject

This gives a cleaner separation of the project, and allows for other sub projects to be added more easily. The root project now handles project wide actions only.

MODIFIED: Nucleus now uses the Kotlin DSL

The build scripts have been rewritten in Kotlin to improve type safety and being some more order to the scripts.


For more information, have a look around our documentation site at https://v2-beta.nucleuspowered.org/docs.


General Notes

A new version has been released for Nucleus, it is available for download here.


This is a release candidate of Nucleus 2.0.0 for Sponge API version 7.3

THIS IS A RELEASE CANDIDATE. IT IS SEMI-STABLE BUT MAY CONTAIN A FEW ISSUES. DO NOT USE ON PRODUCTION SERVERS WITHOUT USING IT ON A TESTING SERVER FIRST

Please report any issues to Github Issues (Issues · NucleusPowered/Nucleus · GitHub) CLEARLY stating the version of Nucleus you are using.

This was built from Nucleus commit: 78befb43

Release Notes

If you’re having trouble, visit our Discord channel: https://discord.gg/A9QHG5H


Nucleus 2.0

Nucleus 2 is a major rewrite of much of the base code. It is designed to make future work to the system simpler, easier to understand, and hopefully, easier for people to contribute to.

As it stands, Nucleus 2 is semi-stable, but please do not use it on production servers without testing first. I would appreciate any testing I can get. I am only one person!

Here is a rundown of some of what is new, changed, removed, fixed and crucially, known to be broken.

PSA: Before you use Nucleus 2…

Nucleus 2 does not change how your data is stored, but the entire storage system has been completely rewritten. There may be issues with the storage system that I have been unable to test that might cause unexpected data loss. If this happens, please tell me via Github Issues.

No migration is necessary for the following:

  • main.conf
  • info.txt and other info files
  • User data
  • World data
  • Kits, warps, and other general data

Nucleus 2 also uses a new format for the commands.conf file and no migrator has been provided.

Also, a note on the version. The Nucleus version will no longer contain the Sponge API version that it is built for, instead preferring new major versions to denote the change. This will still be denoted in the file name.

Nucleus 2 is for Sponge API 7.3 or any later version of Sponge API 7.x.

For Server Owners and Players

If you need help to decide which version of Nucleus to use, please visit our guide on how to choose.

For the things YOU need to do as a server owner, please visit our instructions on how to upgrade.

ADDED: Permission Levels/Powers for moderation tasks

Many of you have been asking “permission levels” because you don’t trust lower level staff to not abuse their powers and use them against higher level staff. They already existed for social spy, but now they exist for muting, jailing, kicking and banning. This feature allows you to give a numeric level to each player - by default, if your level is higher than the person you’re trying to act upon, your action will go through. By default, those with the same power for an action will not be able to affect each other.

Because this is an advanced feature, you must turn it on for the respective modules. The options in the mute, jail, kick, admin (for /sudo) and ban modules are:

  • use-permission-level: set to true to use permission levels
  • can-affect-same-level: set to true to let two players with the same permission level affect each other, false if not.

To specify a permission level, you have to give a specific permission option to the player in question. In LuckPerms, options are referred to as “meta”. The options you need to assign are specified in the config file (at least for now, will be on docs later), but for convenience, they are:

  • nucleus.ban.level
  • nucleus.jail.level
  • nucleus.kick.level
  • nucleus.mute.level
  • nucleus.sudo.level
  • nucleus.socialspy.level (this already existed)

No prizes for guessing which one is which! In LuckPerms, you would then specify the level an option using the command:

/lp user <user> meta set <option> <level>

For a ban level of 4 on dualspiral:

/lp user dualspiral meta set nucleus.ban.level 4

If a level is invalid or does not exist, having the permission to run the command you are running is considered a level of 1, not having the permission is considered a level of 0.

This has only been lightly tested. Please report any feedback on the system to me during your testing.

ADDED: Ability to specify arbitrary command names for Nucleus commands (EXPERIMENTAL)

Nucleus commands can now be given arbitrary command names in commands.conf under the “root level aliases” section, and Nucleus will attempt to register the command under that alias.

This feature is still subject to some testing, but I realised it was easy to add with the new codebase.

ADDED: Per User translation of Nucleus system messages

Nucleus will support sending translated messages to players based on either:

  • The locale set via /nucleussetlanguage on a per-player basis; or
  • The client’s locale.

This will be available as we (hopefully) receive more translations.

You will be able to turn this off, of course, if you want all clients to see the same language.

(If you want to help with the translation effort, see https://v2-beta.nucleuspowered.org/docs/translation/)

ADDED: Permission context when running a Nucleus command

When a player is running a Nucleus command, they will obtain a permission context for the duration of that call. This context is nucleus_command, and will have a context value corresponding to the command in question - this can be seen by looking at the help page for the command in question.

ADDED: Compatibility Warning system

Nucleus comes packaged with information about known plugins and mods that conflict with its functions. These warnings may appear on startup, and on demand by running /nucleus compat.

ADDED: Kit data can now be reloaded from persistence on demand

I don’t recommend that you ever do this manually, but you can now update the kits data from persistence and reload it using /kit reload.

ADDED: /basictitle, /basicsubtitle and /basicactionbar commands

These commands allow you to send title, subtitle and actionbar messages to all or specific players. They work the same way as /planbroadcast. The flags for these commands are:

  • -p [player]: The name of the player or a selector that defines who to send the message to. If omitted, sends to all on the server.
  • -i [seconds]: The amount of time taken by the fade in effect, in seconds (does not affect action bar messages).
  • -o [seconds]: The amount of time taken by the fade out effect, in seconds.
  • -t [seconds]: The amount of time taken the message remains on the screen, in seconds.

ADDED: Notification module

This module houses the broadcast commands, as well as the new /basictitle, /basicsubtitle and /basicactionbar commands. Relaxant config from the admin module will be auto-migrated.

ADDED: Support for automatic USER permissions on the default group

Particularly useful for OP based servers, if you want all players to have access to all permissions in the nucleus USER role, you can now set core.give-default-group-user-permissions to
true and all users will be granted all permissions in the USER role. This is equivalent to granting the nucleus.user permission, but can also be used on servers with no permissions plugin installed.

MODIFIED: Chat tokens no longer accept pl style tokens

Chat tokens work similar to before, but are no longer plugin namespaced (so, {{pl:[]}} will no longer work). {{o:[]}} style tokens, those that select options from your permissions plugin, will still work.

MODIFIED: The /tp alias for /teleport defaults to disabled

Many mods, such as JourneyMap, were using the /tp command to perform teleports

Other commands may get the same treatment if the Nucleus team figures that it would be in the best interest of the community.

MODIFIED: The /mute and /unmute, /jail and /unjail commands are no longer toggles

This also has the side effect of making these actions all require their own permission.

MODIFIED: Warps now always require the permission nucleus.warps.<name> to redeem

Until recently, this was a configuration toggle. This is no longer the case. To emulate the previous behaviour, simply grant the nucleus.warps permission.

MODIFIED: Permission Group Chat Templates

The original way Nucleus attempted to determine which group template to use when displaying chat formatting was unpredictable and was very slow as it had to collect a lot of data from a permissions plugin. This has now been removed.

Nucleus has supported a nucleus.chat.group permission option (meta in LuckPerms) for some time. This option is now the only way to determine the group template a permission group or user will use - falling back to the default if this does not match.

MODIFIED: Permission Group /list groups

For similar reasons to chat groups no longer relying on parent groups, /list no longer does either. Groups are now defined by the nucleus.list.group option/meta.
The group alias config has also been removed, as you can just provide them the same nucleus.list.group option value.

As a bonus, /list groups now use text colour codes in the group names.

MODIFIED: /kit add has been merged into /kit create

The action performed by /kit add in v1 was to create a kit based on your inventory. This is now /kit create -c instead.

Both /kit create and /kit create -c now require the edit kit permission to actually add items to kits.

REMOVED: Debug Mode

Nucleus will just spit out errors to the console now, as they should never happen (or if they do, you should know about them).

REMOVED: The Warnings module has been removed

It wasn’t used much and, honestly, it was actually pushing the boundaries as to what Nucleus really should be doing. There are no migration paths available as it stands, however plugin developers can use the Nucleus API to extract any warnings against a player if they wish to enable such migration.

REMOVED: The Server Shop module has been removed

It wasn’t used much, and it had many issues with it that were not simple to fix. There are no migration paths available.

REWRITTEN: Teleportation Routines

Player teleportation should now be more reliable as the base teleport code has been deleted and completely rebuilt.

REWRITTEN: Message channel support removed for higher compatibility with other plugins

Nucleus will no longer use message channels, instead using an in-house solution to support formatting with other mods, (and for reporting formatting to other plugins). However, when possible, the message channels will still be applied to the event so plugins can see that Nucleus is doing something with them.

BUG FIXES: Miscellaneous fixes

While many bugs might have been introduced, other bugs have been fixed. Notable issues that have been fixed will be noted here.

For Plugin Developers that use the API

REMOVED: The Nucleus static object

I’m going to start with something that isn’t in the API - Nucleus.getNucleus(). I’ve had the occasional complaint that updates to Nucleus have broken some plugins that depend on it. It always turns out to be developers not asking for API additions (which I try to guarantee) but just decide to use Nucleus.getNucleus() everywhere. Don’t do it - I do not class that as part of the API and it was a horrible object that allowed me to be lazy. v2 is about stopping me being lazy.

You shouldn’t do it anyway, but you will not be able to do it at all in v2, because the Nucleus object has been deleted. Please use the API. If there is something missing from the API that you wish to use, please open a Github issue.

MODIFIED: The location of nearly everything

To try to make things a little more sane, all APIs are now classified by their module or overreaching theme first, rather than whether they are a service, event etc. This should make it simpler to see what APIs are available for each module.

MODIFIED: TeleportResults is now TeleportResult, an enum. Other CatalogTypes are now Suppliers

TeleportResult is now an enum. Other CatalogTypes are now represented by Suppliers to remove reliance on hacky reflection techniques.

MODIFIED: The Kit API has been updated

A failed redemption will no longer throw a KitRedeemException. Instead, a KitRedeemResult will be returned and that will tell you if about the success (or failure).

You can also now get the status of a cooldown for a Kit/User combination.

REMOVED: NucleusMessageTokenService has been removed in favour of the SpongeAPI 7.3 placeholder solution

The message token service has been completely removed, Nucleus now supports the SpongeAPI 7.3 central placeholder system.

Nucleus Gluon v1 will no longer work for supporting placeholder API tokens.

REMOVED: Nucleus MessageChannels

These will be restored in a marker capacity only

In order to enable Nucleus formatting in chat events and to avoid future conflicts with other plugin message channels, Nucleus will now apply its formatting during the MessageChannelEvent.Chat event, and will no longer use MessageChannels for formatting. Nucleus will dynamically create message channels during the LATE priority.

As a result, no API for message channels is available in the API.

REMOVED: NucleusModuleService

The NucleusModuleService has been removed. Plugins wishing to disable modules should listen to the NucleusModuleEvent.AboutToConstruct event instead.

MODIFIED: All kinds of stuff

Please take a look through the API yourself for now. It’s all subject to change, but I have tried to add sensible documents. I will flesh out this section once we approach Beta.

For Developers considering contributing to Nucleus

Nucleus’ biggest changes have happened in this area. v2 no longer uses the static Nucleus object, but instead uses Guice and DI to create a series of cross cutting concerns to provide Nucleus wide actions. Commands, listeners and tasks should all have INucleusServiceCollection injected into themselves for access to these systems.

MODIFIED: Nucleus now uses Gradle 5.6.4

We have jumped from Gradle 4.10 to 5.6.4, as this is the last version that the SpongeGradle plugin has been tested with.

MODIFIED: Nucleus Implementation has been moved to the nucleus-core subproject

This gives a cleaner separation of the project, and allows for other sub projects to be added more easily. The root project now handles project wide actions only.

MODIFIED: Nucleus now uses the Kotlin DSL

The build scripts have been rewritten in Kotlin to improve type safety and being some more order to the scripts.


For more information, have a look around our documentation site at https://v2-beta.nucleuspowered.org/docs.


General Notes

hey, I downloaded this plugin along with luckperms. and I can’t find the permission that allows players to use /help.

It’s a Sponge permission, not a Nucleus one, that’s why.

Commands and Permissions — Sponge 7.2.0 documentation - under /sponge:help in the table.

A new version has been released for Nucleus, it is available for download here.


This is a release candidate of Nucleus 2.0.0 for Sponge API version 7.3

THIS IS A RELEASE CANDIDATE. IT IS SEMI-STABLE BUT MAY CONTAIN A FEW ISSUES. DO NOT USE ON PRODUCTION SERVERS WITHOUT USING IT ON A TESTING SERVER FIRST

Please report any issues to Github Issues (Issues · NucleusPowered/Nucleus · GitHub) CLEARLY stating the version of Nucleus you are using.

This was built from Nucleus commit: 33a01eab

Release Notes

If you’re having trouble, visit our Discord channel: https://discord.gg/A9QHG5H


Nucleus 2.0

Nucleus 2 is a major rewrite of much of the base code. It is designed to make future work to the system simpler, easier to understand, and hopefully, easier for people to contribute to.

As it stands, Nucleus 2 is semi-stable, but please do not use it on production servers without testing first. I would appreciate any testing I can get. I am only one person!

Here is a rundown of some of what is new, changed, removed, fixed and crucially, known to be broken.

PSA: Before you use Nucleus 2…

Nucleus 2 does not change how your data is stored, but the entire storage system has been completely rewritten. There may be issues with the storage system that I have been unable to test that might cause unexpected data loss. If this happens, please tell me via Github Issues.

No migration is necessary for the following:

  • main.conf
  • info.txt and other info files
  • User data
  • World data
  • Kits, warps, and other general data

Nucleus 2 also uses a new format for the commands.conf file and no migrator has been provided.

Also, a note on the version. The Nucleus version will no longer contain the Sponge API version that it is built for, instead preferring new major versions to denote the change. This will still be denoted in the file name.

Nucleus 2 is for Sponge API 7.3 or any later version of Sponge API 7.x.

For Server Owners and Players

If you need help to decide which version of Nucleus to use, please visit our guide on how to choose.

For the things YOU need to do as a server owner, please visit our instructions on how to upgrade.

ADDED: Permission Levels/Powers for moderation tasks

Many of you have been asking “permission levels” because you don’t trust lower level staff to not abuse their powers and use them against higher level staff. They already existed for social spy, but now they exist for muting, jailing, kicking and banning. This feature allows you to give a numeric level to each player - by default, if your level is higher than the person you’re trying to act upon, your action will go through. By default, those with the same power for an action will not be able to affect each other.

Because this is an advanced feature, you must turn it on for the respective modules. The options in the mute, jail, kick, admin (for /sudo) and ban modules are:

  • use-permission-level: set to true to use permission levels
  • can-affect-same-level: set to true to let two players with the same permission level affect each other, false if not.

To specify a permission level, you have to give a specific permission option to the player in question. In LuckPerms, options are referred to as “meta”. The options you need to assign are specified in the config file (at least for now, will be on docs later), but for convenience, they are:

  • nucleus.ban.level
  • nucleus.jail.level
  • nucleus.kick.level
  • nucleus.mute.level
  • nucleus.sudo.level
  • nucleus.socialspy.level (this already existed)

No prizes for guessing which one is which! In LuckPerms, you would then specify the level an option using the command:

/lp user <user> meta set <option> <level>

For a ban level of 4 on dualspiral:

/lp user dualspiral meta set nucleus.ban.level 4

If a level is invalid or does not exist, having the permission to run the command you are running is considered a level of 1, not having the permission is considered a level of 0.

This has only been lightly tested. Please report any feedback on the system to me during your testing.

ADDED: Ability to specify arbitrary command names for Nucleus commands (EXPERIMENTAL)

Nucleus commands can now be given arbitrary command names in commands.conf under the “root level aliases” section, and Nucleus will attempt to register the command under that alias.

This feature is still subject to some testing, but I realised it was easy to add with the new codebase.

ADDED: Per User translation of Nucleus system messages

Nucleus will support sending translated messages to players based on either:

  • The locale set via /nucleussetlanguage on a per-player basis; or
  • The client’s locale.

This will be available as we (hopefully) receive more translations.

You will be able to turn this off, of course, if you want all clients to see the same language.

(If you want to help with the translation effort, see https://v2-beta.nucleuspowered.org/docs/translation/)

ADDED: Permission context when running a Nucleus command

When a player is running a Nucleus command, they will obtain a permission context for the duration of that call. This context is nucleus_command, and will have a context value corresponding to the command in question - this can be seen by looking at the help page for the command in question.

ADDED: Compatibility Warning system

Nucleus comes packaged with information about known plugins and mods that conflict with its functions. These warnings may appear on startup, and on demand by running /nucleus compat.

ADDED: Kit data can now be reloaded from persistence on demand

I don’t recommend that you ever do this manually, but you can now update the kits data from persistence and reload it using /kit reload.

ADDED: /basictitle, /basicsubtitle and /basicactionbar commands

These commands allow you to send title, subtitle and actionbar messages to all or specific players. They work the same way as /planbroadcast. The flags for these commands are:

  • -p [player]: The name of the player or a selector that defines who to send the message to. If omitted, sends to all on the server.
  • -i [seconds]: The amount of time taken by the fade in effect, in seconds (does not affect action bar messages).
  • -o [seconds]: The amount of time taken by the fade out effect, in seconds.
  • -t [seconds]: The amount of time taken the message remains on the screen, in seconds.

ADDED: Notification module

This module houses the broadcast commands, as well as the new /basictitle, /basicsubtitle and /basicactionbar commands. Relaxant config from the admin module will be auto-migrated.

ADDED: Support for automatic USER permissions on the default group

Particularly useful for OP based servers, if you want all players to have access to all permissions in the nucleus USER role, you can now set core.give-default-group-user-permissions to
true and all users will be granted all permissions in the USER role. This is equivalent to granting the nucleus.user permission, but can also be used on servers with no permissions plugin installed.

MODIFIED: Chat tokens no longer accept pl style tokens

Chat tokens work similar to before, but are no longer plugin namespaced (so, {{pl:[]}} will no longer work). {{o:[]}} style tokens, those that select options from your permissions plugin, will still work.

MODIFIED: The /tp alias for /teleport defaults to disabled

Many mods, such as JourneyMap, were using the /tp command to perform teleports

Other commands may get the same treatment if the Nucleus team figures that it would be in the best interest of the community.

MODIFIED: The /mute and /unmute, /jail and /unjail commands are no longer toggles

This also has the side effect of making these actions all require their own permission.

MODIFIED: Warps now always require the permission nucleus.warps.<name> to redeem

Until recently, this was a configuration toggle. This is no longer the case. To emulate the previous behaviour, simply grant the nucleus.warps permission.

MODIFIED: Permission Group Chat Templates

The original way Nucleus attempted to determine which group template to use when displaying chat formatting was unpredictable and was very slow as it had to collect a lot of data from a permissions plugin. This has now been removed.

Nucleus has supported a nucleus.chat.group permission option (meta in LuckPerms) for some time. This option is now the only way to determine the group template a permission group or user will use - falling back to the default if this does not match.

MODIFIED: Permission Group /list groups

For similar reasons to chat groups no longer relying on parent groups, /list no longer does either. Groups are now defined by the nucleus.list.group option/meta.
The group alias config has also been removed, as you can just provide them the same nucleus.list.group option value.

As a bonus, /list groups now use text colour codes in the group names.

MODIFIED: /kit add has been merged into /kit create

The action performed by /kit add in v1 was to create a kit based on your inventory. This is now /kit create -c instead.

Both /kit create and /kit create -c now require the edit kit permission to actually add items to kits.

REMOVED: Debug Mode

Nucleus will just spit out errors to the console now, as they should never happen (or if they do, you should know about them).

REMOVED: The Warnings module has been removed

It wasn’t used much and, honestly, it was actually pushing the boundaries as to what Nucleus really should be doing. There are no migration paths available as it stands, however plugin developers can use the Nucleus API to extract any warnings against a player if they wish to enable such migration.

REMOVED: The Server Shop module has been removed

It wasn’t used much, and it had many issues with it that were not simple to fix. There are no migration paths available.

REWRITTEN: Teleportation Routines

Player teleportation should now be more reliable as the base teleport code has been deleted and completely rebuilt.

REWRITTEN: Message channel support removed for higher compatibility with other plugins

Nucleus will no longer use message channels, instead using an in-house solution to support formatting with other mods, (and for reporting formatting to other plugins). However, when possible, the message channels will still be applied to the event so plugins can see that Nucleus is doing something with them.

BUG FIXES: Miscellaneous fixes

While many bugs might have been introduced, other bugs have been fixed. Notable issues that have been fixed will be noted here.

For Plugin Developers that use the API

REMOVED: The Nucleus static object

I’m going to start with something that isn’t in the API - Nucleus.getNucleus(). I’ve had the occasional complaint that updates to Nucleus have broken some plugins that depend on it. It always turns out to be developers not asking for API additions (which I try to guarantee) but just decide to use Nucleus.getNucleus() everywhere. Don’t do it - I do not class that as part of the API and it was a horrible object that allowed me to be lazy. v2 is about stopping me being lazy.

You shouldn’t do it anyway, but you will not be able to do it at all in v2, because the Nucleus object has been deleted. Please use the API. If there is something missing from the API that you wish to use, please open a Github issue.

MODIFIED: The location of nearly everything

To try to make things a little more sane, all APIs are now classified by their module or overreaching theme first, rather than whether they are a service, event etc. This should make it simpler to see what APIs are available for each module.

MODIFIED: TeleportResults is now TeleportResult, an enum. Other CatalogTypes are now Suppliers

TeleportResult is now an enum. Other CatalogTypes are now represented by Suppliers to remove reliance on hacky reflection techniques.

MODIFIED: The Kit API has been updated

A failed redemption will no longer throw a KitRedeemException. Instead, a KitRedeemResult will be returned and that will tell you if about the success (or failure).

You can also now get the status of a cooldown for a Kit/User combination.

REMOVED: NucleusMessageTokenService has been removed in favour of the SpongeAPI 7.3 placeholder solution

The message token service has been completely removed, Nucleus now supports the SpongeAPI 7.3 central placeholder system.

Nucleus Gluon v1 will no longer work for supporting placeholder API tokens.

REMOVED: Nucleus MessageChannels

These will be restored in a marker capacity only

In order to enable Nucleus formatting in chat events and to avoid future conflicts with other plugin message channels, Nucleus will now apply its formatting during the MessageChannelEvent.Chat event, and will no longer use MessageChannels for formatting. Nucleus will dynamically create message channels during the LATE priority.

As a result, no API for message channels is available in the API.

REMOVED: NucleusModuleService

The NucleusModuleService has been removed. Plugins wishing to disable modules should listen to the NucleusModuleEvent.AboutToConstruct event instead.

MODIFIED: All kinds of stuff

Please take a look through the API yourself for now. It’s all subject to change, but I have tried to add sensible documents. I will flesh out this section once we approach Beta.

For Developers considering contributing to Nucleus

Nucleus’ biggest changes have happened in this area. v2 no longer uses the static Nucleus object, but instead uses Guice and DI to create a series of cross cutting concerns to provide Nucleus wide actions. Commands, listeners and tasks should all have INucleusServiceCollection injected into themselves for access to these systems.

MODIFIED: Nucleus now uses Gradle 5.6.4

We have jumped from Gradle 4.10 to 5.6.4, as this is the last version that the SpongeGradle plugin has been tested with.

MODIFIED: Nucleus Implementation has been moved to the nucleus-core subproject

This gives a cleaner separation of the project, and allows for other sub projects to be added more easily. The root project now handles project wide actions only.

MODIFIED: Nucleus now uses the Kotlin DSL

The build scripts have been rewritten in Kotlin to improve type safety and being some more order to the scripts.


For more information, have a look around our documentation site at https://v2-beta.nucleuspowered.org/docs.


General Notes

A new version has been released for Nucleus, it is available for download here.


This is a release candidate of Nucleus 2.0.0 for Sponge API version 7.3

THIS IS A RELEASE CANDIDATE. IT IS SEMI-STABLE BUT MAY CONTAIN A FEW ISSUES. DO NOT USE ON PRODUCTION SERVERS WITHOUT USING IT ON A TESTING SERVER FIRST

Please report any issues to Github Issues (Issues · NucleusPowered/Nucleus · GitHub) CLEARLY stating the version of Nucleus you are using.

This was built from Nucleus commit: 9f443513

Release Notes

If you’re having trouble, visit our Discord channel: https://discord.gg/A9QHG5H


Nucleus 2.0

Nucleus 2 is a major rewrite of much of the base code. It is designed to make future work to the system simpler, easier to understand, and hopefully, easier for people to contribute to.

As it stands, Nucleus 2 is semi-stable, but please do not use it on production servers without testing first. I would appreciate any testing I can get. I am only one person!

Here is a rundown of some of what is new, changed, removed, fixed and crucially, known to be broken.

PSA: Before you use Nucleus 2…

Nucleus 2 does not change how your data is stored, but the entire storage system has been completely rewritten. There may be issues with the storage system that I have been unable to test that might cause unexpected data loss. If this happens, please tell me via Github Issues.

No migration is necessary for the following:

  • main.conf
  • info.txt and other info files
  • User data
  • World data
  • Kits, warps, and other general data

Nucleus 2 also uses a new format for the commands.conf file and no migrator has been provided.

Also, a note on the version. The Nucleus version will no longer contain the Sponge API version that it is built for, instead preferring new major versions to denote the change. This will still be denoted in the file name.

Nucleus 2 is for Sponge API 7.3 or any later version of Sponge API 7.x.

For Server Owners and Players

If you need help to decide which version of Nucleus to use, please visit our guide on how to choose.

For the things YOU need to do as a server owner, please visit our instructions on how to upgrade.

ADDED: Permission Levels/Powers for moderation tasks

Many of you have been asking “permission levels” because you don’t trust lower level staff to not abuse their powers and use them against higher level staff. They already existed for social spy, but now they exist for muting, jailing, kicking and banning. This feature allows you to give a numeric level to each player - by default, if your level is higher than the person you’re trying to act upon, your action will go through. By default, those with the same power for an action will not be able to affect each other.

Because this is an advanced feature, you must turn it on for the respective modules. The options in the mute, jail, kick, admin (for /sudo) and ban modules are:

  • use-permission-level: set to true to use permission levels
  • can-affect-same-level: set to true to let two players with the same permission level affect each other, false if not.

To specify a permission level, you have to give a specific permission option to the player in question. In LuckPerms, options are referred to as “meta”. The options you need to assign are specified in the config file (at least for now, will be on docs later), but for convenience, they are:

  • nucleus.ban.level
  • nucleus.jail.level
  • nucleus.kick.level
  • nucleus.mute.level
  • nucleus.sudo.level
  • nucleus.socialspy.level (this already existed)

No prizes for guessing which one is which! In LuckPerms, you would then specify the level an option using the command:

/lp user <user> meta set <option> <level>

For a ban level of 4 on dualspiral:

/lp user dualspiral meta set nucleus.ban.level 4

If a level is invalid or does not exist, having the permission to run the command you are running is considered a level of 1, not having the permission is considered a level of 0.

This has only been lightly tested. Please report any feedback on the system to me during your testing.

ADDED: Ability to specify arbitrary command names for Nucleus commands (EXPERIMENTAL)

Nucleus commands can now be given arbitrary command names in commands.conf under the “root level aliases” section, and Nucleus will attempt to register the command under that alias.

This feature is still subject to some testing, but I realised it was easy to add with the new codebase.

ADDED: Per User translation of Nucleus system messages

Nucleus will support sending translated messages to players based on either:

  • The locale set via /nucleussetlanguage on a per-player basis; or
  • The client’s locale.

This will be available as we (hopefully) receive more translations.

You will be able to turn this off, of course, if you want all clients to see the same language.

(If you want to help with the translation effort, see https://v2-beta.nucleuspowered.org/docs/translation/)

ADDED: Permission context when running a Nucleus command

When a player is running a Nucleus command, they will obtain a permission context for the duration of that call. This context is nucleus_command, and will have a context value corresponding to the command in question - this can be seen by looking at the help page for the command in question.

ADDED: Compatibility Warning system

Nucleus comes packaged with information about known plugins and mods that conflict with its functions. These warnings may appear on startup, and on demand by running /nucleus compat.

ADDED: Kit data can now be reloaded from persistence on demand

I don’t recommend that you ever do this manually, but you can now update the kits data from persistence and reload it using /kit reload.

ADDED: /basictitle, /basicsubtitle and /basicactionbar commands

These commands allow you to send title, subtitle and actionbar messages to all or specific players. They work the same way as /planbroadcast. The flags for these commands are:

  • -p [player]: The name of the player or a selector that defines who to send the message to. If omitted, sends to all on the server.
  • -i [seconds]: The amount of time taken by the fade in effect, in seconds (does not affect action bar messages).
  • -o [seconds]: The amount of time taken by the fade out effect, in seconds.
  • -t [seconds]: The amount of time taken the message remains on the screen, in seconds.

ADDED: Notification module

This module houses the broadcast commands, as well as the new /basictitle, /basicsubtitle and /basicactionbar commands. Relaxant config from the admin module will be auto-migrated.

ADDED: Support for automatic USER permissions on the default group

Particularly useful for OP based servers, if you want all players to have access to all permissions in the nucleus USER role, you can now set core.give-default-group-user-permissions to
true and all users will be granted all permissions in the USER role. This is equivalent to granting the nucleus.user permission, but can also be used on servers with no permissions plugin installed.

MODIFIED: Chat tokens no longer accept pl style tokens

Chat tokens work similar to before, but are no longer plugin namespaced (so, {{pl:[]}} will no longer work). {{o:[]}} style tokens, those that select options from your permissions plugin, will still work.

MODIFIED: The /tp alias for /teleport defaults to disabled

Many mods, such as JourneyMap, were using the /tp command to perform teleports

Other commands may get the same treatment if the Nucleus team figures that it would be in the best interest of the community.

MODIFIED: The /mute and /unmute, /jail and /unjail commands are no longer toggles

This also has the side effect of making these actions all require their own permission.

MODIFIED: Warps now always require the permission nucleus.warps.<name> to redeem

Until recently, this was a configuration toggle. This is no longer the case. To emulate the previous behaviour, simply grant the nucleus.warps permission.

MODIFIED: Permission Group Chat Templates

The original way Nucleus attempted to determine which group template to use when displaying chat formatting was unpredictable and was very slow as it had to collect a lot of data from a permissions plugin. This has now been removed.

Nucleus has supported a nucleus.chat.group permission option (meta in LuckPerms) for some time. This option is now the only way to determine the group template a permission group or user will use - falling back to the default if this does not match.

MODIFIED: Permission Group /list groups

For similar reasons to chat groups no longer relying on parent groups, /list no longer does either. Groups are now defined by the nucleus.list.group option/meta.
The group alias config has also been removed, as you can just provide them the same nucleus.list.group option value.

As a bonus, /list groups now use text colour codes in the group names.

MODIFIED: /kit add has been merged into /kit create

The action performed by /kit add in v1 was to create a kit based on your inventory. This is now /kit create -c instead.

Both /kit create and /kit create -c now require the edit kit permission to actually add items to kits.

REMOVED: Debug Mode

Nucleus will just spit out errors to the console now, as they should never happen (or if they do, you should know about them).

REMOVED: The Warnings module has been removed

It wasn’t used much and, honestly, it was actually pushing the boundaries as to what Nucleus really should be doing. There are no migration paths available as it stands, however plugin developers can use the Nucleus API to extract any warnings against a player if they wish to enable such migration.

REMOVED: The Server Shop module has been removed

It wasn’t used much, and it had many issues with it that were not simple to fix. There are no migration paths available.

REWRITTEN: Teleportation Routines

Player teleportation should now be more reliable as the base teleport code has been deleted and completely rebuilt.

REWRITTEN: Message channel support removed for higher compatibility with other plugins

Nucleus will no longer use message channels, instead using an in-house solution to support formatting with other mods, (and for reporting formatting to other plugins). However, when possible, the message channels will still be applied to the event so plugins can see that Nucleus is doing something with them.

BUG FIXES: Miscellaneous fixes

While many bugs might have been introduced, other bugs have been fixed. Notable issues that have been fixed will be noted here.

For Plugin Developers that use the API

REMOVED: The Nucleus static object

I’m going to start with something that isn’t in the API - Nucleus.getNucleus(). I’ve had the occasional complaint that updates to Nucleus have broken some plugins that depend on it. It always turns out to be developers not asking for API additions (which I try to guarantee) but just decide to use Nucleus.getNucleus() everywhere. Don’t do it - I do not class that as part of the API and it was a horrible object that allowed me to be lazy. v2 is about stopping me being lazy.

You shouldn’t do it anyway, but you will not be able to do it at all in v2, because the Nucleus object has been deleted. Please use the API. If there is something missing from the API that you wish to use, please open a Github issue.

MODIFIED: The location of nearly everything

To try to make things a little more sane, all APIs are now classified by their module or overreaching theme first, rather than whether they are a service, event etc. This should make it simpler to see what APIs are available for each module.

MODIFIED: TeleportResults is now TeleportResult, an enum. Other CatalogTypes are now Suppliers

TeleportResult is now an enum. Other CatalogTypes are now represented by Suppliers to remove reliance on hacky reflection techniques.

MODIFIED: The Kit API has been updated

A failed redemption will no longer throw a KitRedeemException. Instead, a KitRedeemResult will be returned and that will tell you if about the success (or failure).

You can also now get the status of a cooldown for a Kit/User combination.

REMOVED: NucleusMessageTokenService has been removed in favour of the SpongeAPI 7.3 placeholder solution

The message token service has been completely removed, Nucleus now supports the SpongeAPI 7.3 central placeholder system.

Nucleus Gluon v1 will no longer work for supporting placeholder API tokens.

REMOVED: Nucleus MessageChannels

These will be restored in a marker capacity only

In order to enable Nucleus formatting in chat events and to avoid future conflicts with other plugin message channels, Nucleus will now apply its formatting during the MessageChannelEvent.Chat event, and will no longer use MessageChannels for formatting. Nucleus will dynamically create message channels during the LATE priority.

As a result, no API for message channels is available in the API.

REMOVED: NucleusModuleService

The NucleusModuleService has been removed. Plugins wishing to disable modules should listen to the NucleusModuleEvent.AboutToConstruct event instead.

MODIFIED: All kinds of stuff

Please take a look through the API yourself for now. It’s all subject to change, but I have tried to add sensible documents. I will flesh out this section once we approach Beta.

For Developers considering contributing to Nucleus

Nucleus’ biggest changes have happened in this area. v2 no longer uses the static Nucleus object, but instead uses Guice and DI to create a series of cross cutting concerns to provide Nucleus wide actions. Commands, listeners and tasks should all have INucleusServiceCollection injected into themselves for access to these systems.

MODIFIED: Nucleus now uses Gradle 5.6.4

We have jumped from Gradle 4.10 to 5.6.4, as this is the last version that the SpongeGradle plugin has been tested with.

MODIFIED: Nucleus Implementation has been moved to the nucleus-core subproject

This gives a cleaner separation of the project, and allows for other sub projects to be added more easily. The root project now handles project wide actions only.

MODIFIED: Nucleus now uses the Kotlin DSL

The build scripts have been rewritten in Kotlin to improve type safety and being some more order to the scripts.


For more information, have a look around our documentation site at https://v2-beta.nucleuspowered.org/docs.


General Notes

A new version has been released for Nucleus, it is available for download here.


This is an update of RC5 - one bug was fixed

This is a release candidate of Nucleus 2.0.0 for Sponge API version 7.3

THIS IS A RELEASE CANDIDATE. IT IS SEMI-STABLE BUT MAY CONTAIN A FEW ISSUES. DO NOT USE ON PRODUCTION SERVERS WITHOUT USING IT ON A TESTING SERVER FIRST

Please report any issues to Github Issues (Issues · NucleusPowered/Nucleus · GitHub) CLEARLY stating the version of Nucleus you are using.

This was built from Nucleus commit: 2e9883a8

Release Notes

If you’re having trouble, visit our Discord channel: https://discord.gg/A9QHG5H


Nucleus 2.0

Nucleus 2 is a major rewrite of much of the base code. It is designed to make future work to the system simpler, easier to understand, and hopefully, easier for people to contribute to.

As it stands, Nucleus 2 is semi-stable, but please do not use it on production servers without testing first. I would appreciate any testing I can get. I am only one person!

Here is a rundown of some of what is new, changed, removed, fixed and crucially, known to be broken.

PSA: Before you use Nucleus 2…

Nucleus 2 does not change how your data is stored, but the entire storage system has been completely rewritten. There may be issues with the storage system that I have been unable to test that might cause unexpected data loss. If this happens, please tell me via Github Issues.

No migration is necessary for the following:

  • main.conf
  • info.txt and other info files
  • User data
  • World data
  • Kits, warps, and other general data

Nucleus 2 also uses a new format for the commands.conf file and no migrator has been provided.

Also, a note on the version. The Nucleus version will no longer contain the Sponge API version that it is built for, instead preferring new major versions to denote the change. This will still be denoted in the file name.

Nucleus 2 is for Sponge API 7.3 or any later version of Sponge API 7.x.

For Server Owners and Players

If you need help to decide which version of Nucleus to use, please visit our guide on how to choose.

For the things YOU need to do as a server owner, please visit our instructions on how to upgrade.

ADDED: Permission Levels/Powers for moderation tasks

Many of you have been asking “permission levels” because you don’t trust lower level staff to not abuse their powers and use them against higher level staff. They already existed for social spy, but now they exist for muting, jailing, kicking and banning. This feature allows you to give a numeric level to each player - by default, if your level is higher than the person you’re trying to act upon, your action will go through. By default, those with the same power for an action will not be able to affect each other.

Because this is an advanced feature, you must turn it on for the respective modules. The options in the mute, jail, kick, admin (for /sudo) and ban modules are:

  • use-permission-level: set to true to use permission levels
  • can-affect-same-level: set to true to let two players with the same permission level affect each other, false if not.

To specify a permission level, you have to give a specific permission option to the player in question. In LuckPerms, options are referred to as “meta”. The options you need to assign are specified in the config file (at least for now, will be on docs later), but for convenience, they are:

  • nucleus.ban.level
  • nucleus.jail.level
  • nucleus.kick.level
  • nucleus.mute.level
  • nucleus.sudo.level
  • nucleus.socialspy.level (this already existed)

No prizes for guessing which one is which! In LuckPerms, you would then specify the level an option using the command:

/lp user <user> meta set <option> <level>

For a ban level of 4 on dualspiral:

/lp user dualspiral meta set nucleus.ban.level 4

If a level is invalid or does not exist, having the permission to run the command you are running is considered a level of 1, not having the permission is considered a level of 0.

This has only been lightly tested. Please report any feedback on the system to me during your testing.

ADDED: Ability to specify arbitrary command names for Nucleus commands (EXPERIMENTAL)

Nucleus commands can now be given arbitrary command names in commands.conf under the “root level aliases” section, and Nucleus will attempt to register the command under that alias.

This feature is still subject to some testing, but I realised it was easy to add with the new codebase.

ADDED: Per User translation of Nucleus system messages

Nucleus will support sending translated messages to players based on either:

  • The locale set via /nucleussetlanguage on a per-player basis; or
  • The client’s locale.

This will be available as we (hopefully) receive more translations.

You will be able to turn this off, of course, if you want all clients to see the same language.

(If you want to help with the translation effort, see https://v2-beta.nucleuspowered.org/docs/translation/)

ADDED: Permission context when running a Nucleus command

When a player is running a Nucleus command, they will obtain a permission context for the duration of that call. This context is nucleus_command, and will have a context value corresponding to the command in question - this can be seen by looking at the help page for the command in question.

ADDED: Compatibility Warning system

Nucleus comes packaged with information about known plugins and mods that conflict with its functions. These warnings may appear on startup, and on demand by running /nucleus compat.

ADDED: Kit data can now be reloaded from persistence on demand

I don’t recommend that you ever do this manually, but you can now update the kits data from persistence and reload it using /kit reload.

ADDED: /basictitle, /basicsubtitle and /basicactionbar commands

These commands allow you to send title, subtitle and actionbar messages to all or specific players. They work the same way as /planbroadcast. The flags for these commands are:

  • -p [player]: The name of the player or a selector that defines who to send the message to. If omitted, sends to all on the server.
  • -i [seconds]: The amount of time taken by the fade in effect, in seconds (does not affect action bar messages).
  • -o [seconds]: The amount of time taken by the fade out effect, in seconds.
  • -t [seconds]: The amount of time taken the message remains on the screen, in seconds.

ADDED: Notification module

This module houses the broadcast commands, as well as the new /basictitle, /basicsubtitle and /basicactionbar commands. Relaxant config from the admin module will be auto-migrated.

ADDED: Support for automatic USER permissions on the default group

Particularly useful for OP based servers, if you want all players to have access to all permissions in the nucleus USER role, you can now set core.give-default-group-user-permissions to
true and all users will be granted all permissions in the USER role. This is equivalent to granting the nucleus.user permission, but can also be used on servers with no permissions plugin installed.

MODIFIED: Chat tokens no longer accept pl style tokens

Chat tokens work similar to before, but are no longer plugin namespaced (so, {{pl:[]}} will no longer work). {{o:[]}} style tokens, those that select options from your permissions plugin, will still work.

MODIFIED: The /tp alias for /teleport defaults to disabled

Many mods, such as JourneyMap, were using the /tp command to perform teleports

Other commands may get the same treatment if the Nucleus team figures that it would be in the best interest of the community.

MODIFIED: The /mute and /unmute, /jail and /unjail commands are no longer toggles

This also has the side effect of making these actions all require their own permission.

MODIFIED: Warps now always require the permission nucleus.warps.<name> to redeem

Until recently, this was a configuration toggle. This is no longer the case. To emulate the previous behaviour, simply grant the nucleus.warps permission.

MODIFIED: Permission Group Chat Templates

The original way Nucleus attempted to determine which group template to use when displaying chat formatting was unpredictable and was very slow as it had to collect a lot of data from a permissions plugin. This has now been removed.

Nucleus has supported a nucleus.chat.group permission option (meta in LuckPerms) for some time. This option is now the only way to determine the group template a permission group or user will use - falling back to the default if this does not match.

MODIFIED: Permission Group /list groups

For similar reasons to chat groups no longer relying on parent groups, /list no longer does either. Groups are now defined by the nucleus.list.group option/meta.
The group alias config has also been removed, as you can just provide them the same nucleus.list.group option value.

As a bonus, /list groups now use text colour codes in the group names.

MODIFIED: /kit add has been merged into /kit create

The action performed by /kit add in v1 was to create a kit based on your inventory. This is now /kit create -c instead.

Both /kit create and /kit create -c now require the edit kit permission to actually add items to kits.

REMOVED: Debug Mode

Nucleus will just spit out errors to the console now, as they should never happen (or if they do, you should know about them).

REMOVED: The Warnings module has been removed

It wasn’t used much and, honestly, it was actually pushing the boundaries as to what Nucleus really should be doing. There are no migration paths available as it stands, however plugin developers can use the Nucleus API to extract any warnings against a player if they wish to enable such migration.

REMOVED: The Server Shop module has been removed

It wasn’t used much, and it had many issues with it that were not simple to fix. There are no migration paths available.

REWRITTEN: Teleportation Routines

Player teleportation should now be more reliable as the base teleport code has been deleted and completely rebuilt.

REWRITTEN: Message channel support removed for higher compatibility with other plugins

Nucleus will no longer use message channels, instead using an in-house solution to support formatting with other mods, (and for reporting formatting to other plugins). However, when possible, the message channels will still be applied to the event so plugins can see that Nucleus is doing something with them.

BUG FIXES: Miscellaneous fixes

While many bugs might have been introduced, other bugs have been fixed. Notable issues that have been fixed will be noted here.

For Plugin Developers that use the API

REMOVED: The Nucleus static object

I’m going to start with something that isn’t in the API - Nucleus.getNucleus(). I’ve had the occasional complaint that updates to Nucleus have broken some plugins that depend on it. It always turns out to be developers not asking for API additions (which I try to guarantee) but just decide to use Nucleus.getNucleus() everywhere. Don’t do it - I do not class that as part of the API and it was a horrible object that allowed me to be lazy. v2 is about stopping me being lazy.

You shouldn’t do it anyway, but you will not be able to do it at all in v2, because the Nucleus object has been deleted. Please use the API. If there is something missing from the API that you wish to use, please open a Github issue.

MODIFIED: The location of nearly everything

To try to make things a little more sane, all APIs are now classified by their module or overreaching theme first, rather than whether they are a service, event etc. This should make it simpler to see what APIs are available for each module.

MODIFIED: TeleportResults is now TeleportResult, an enum. Other CatalogTypes are now Suppliers

TeleportResult is now an enum. Other CatalogTypes are now represented by Suppliers to remove reliance on hacky reflection techniques.

MODIFIED: The Kit API has been updated

A failed redemption will no longer throw a KitRedeemException. Instead, a KitRedeemResult will be returned and that will tell you if about the success (or failure).

You can also now get the status of a cooldown for a Kit/User combination.

REMOVED: NucleusMessageTokenService has been removed in favour of the SpongeAPI 7.3 placeholder solution

The message token service has been completely removed, Nucleus now supports the SpongeAPI 7.3 central placeholder system.

Nucleus Gluon v1 will no longer work for supporting placeholder API tokens.

REMOVED: Nucleus MessageChannels

These will be restored in a marker capacity only

In order to enable Nucleus formatting in chat events and to avoid future conflicts with other plugin message channels, Nucleus will now apply its formatting during the MessageChannelEvent.Chat event, and will no longer use MessageChannels for formatting. Nucleus will dynamically create message channels during the LATE priority.

As a result, no API for message channels is available in the API.

REMOVED: NucleusModuleService

The NucleusModuleService has been removed. Plugins wishing to disable modules should listen to the NucleusModuleEvent.AboutToConstruct event instead.

MODIFIED: All kinds of stuff

Please take a look through the API yourself for now. It’s all subject to change, but I have tried to add sensible documents. I will flesh out this section once we approach Beta.

For Developers considering contributing to Nucleus

Nucleus’ biggest changes have happened in this area. v2 no longer uses the static Nucleus object, but instead uses Guice and DI to create a series of cross cutting concerns to provide Nucleus wide actions. Commands, listeners and tasks should all have INucleusServiceCollection injected into themselves for access to these systems.

MODIFIED: Nucleus now uses Gradle 5.6.4

We have jumped from Gradle 4.10 to 5.6.4, as this is the last version that the SpongeGradle plugin has been tested with.

MODIFIED: Nucleus Implementation has been moved to the nucleus-core subproject

This gives a cleaner separation of the project, and allows for other sub projects to be added more easily. The root project now handles project wide actions only.

MODIFIED: Nucleus now uses the Kotlin DSL

The build scripts have been rewritten in Kotlin to improve type safety and being some more order to the scripts.


For more information, have a look around our documentation site at https://v2-beta.nucleuspowered.org/docs.


General Notes

A new version has been released for Nucleus, it is available for download here.


This is a bug fix and minor feature release - Nucleus 2.0.1 for Sponge API version 7.3

This was built from Nucleus commit: 8d544709

Release Notes

If you’re having trouble, visit our Discord channel: https://discord.gg/A9QHG5H


Nucleus 2.0

Nucleus 2.0.1 is the same as 2.0.0, only updated so Ore will accept the version.

Nucleus 2 is a major rewrite of much of the base code. It is designed to make future work to the system simpler, easier to understand, and hopefully, easier for people to contribute to.

As it stands, we consider Nucleus 2 to be stable, but please do not use it on production servers without testing first.

Here is a rundown of some of what is new, changed, removed, fixed and crucially, known to be broken.

PSA: Before you use Nucleus 2…

Nucleus 2 does not change how your data is stored, but the entire storage system has been completely rewritten. There may be issues with the storage system that I have been unable to test that might cause unexpected data loss. If this happens, please tell me via Github Issues.

No migration is necessary for the following:

  • main.conf
  • info.txt and other info files
  • User data
  • World data
  • Kits, warps, and other general data

Nucleus 2 also uses a new format for the commands.conf file and no migrator has been provided.

Also, a note on the version. The Nucleus version will no longer contain the Sponge API version that it is built for, instead preferring new major versions to denote the change. This will still be denoted in the file name.

Nucleus 2 is for Sponge API 7.3 or any later version of Sponge API 7.x.

For Server Owners and Players

If you need help to decide which version of Nucleus to use, please visit our guide on how to choose.

For the things YOU need to do as a server owner, please visit our instructions on how to upgrade.

ADDED: Permission Levels/Powers for moderation tasks

Many of you have been asking “permission levels” because you don’t trust lower level staff to not abuse their powers and use them against higher level staff. They already existed for social spy, but now they exist for muting, jailing, kicking and banning. This feature allows you to give a numeric level to each player - by default, if your level is higher than the person you’re trying to act upon, your action will go through. By default, those with the same power for an action will not be able to affect each other.

Because this is an advanced feature, you must turn it on for the respective modules. The options in the mute, jail, kick, admin (for /sudo) and ban modules are:

  • use-permission-level: set to true to use permission levels
  • can-affect-same-level: set to true to let two players with the same permission level affect each other, false if not.

To specify a permission level, you have to give a specific permission option to the player in question. In LuckPerms, options are referred to as “meta”. The options you need to assign are specified in the config file (at least for now, will be on docs later), but for convenience, they are:

  • nucleus.ban.level
  • nucleus.jail.level
  • nucleus.kick.level
  • nucleus.mute.level
  • nucleus.sudo.level
  • nucleus.socialspy.level (this already existed)

No prizes for guessing which one is which! In LuckPerms, you would then specify the level an option using the command:

/lp user <user> meta set <option> <level>

For a ban level of 4 on dualspiral:

/lp user dualspiral meta set nucleus.ban.level 4

If a level is invalid or does not exist, having the permission to run the command you are running is considered a level of 1, not having the permission is considered a level of 0.

This has only been lightly tested. Please report any feedback on the system to me during your testing.

ADDED: Ability to specify arbitrary command names for Nucleus commands (EXPERIMENTAL)

Nucleus commands can now be given arbitrary command names in commands.conf under the “root level aliases” section, and Nucleus will attempt to register the command under that alias.

This feature is still subject to some testing, but I realised it was easy to add with the new codebase.

ADDED: Per User translation of Nucleus system messages

Nucleus will support sending translated messages to players based on either:

  • The locale set via /nucleussetlanguage on a per-player basis; or
  • The client’s locale.

This will be available as we (hopefully) receive more translations.

You will be able to turn this off, of course, if you want all clients to see the same language.

(If you want to help with the translation effort, see https://v2-beta.nucleuspowered.org/docs/translation/)

ADDED: Permission context when running a Nucleus command

When a player is running a Nucleus command, they will obtain a permission context for the duration of that call. This context is nucleus_command, and will have a context value corresponding to the command in question - this can be seen by looking at the help page for the command in question.

ADDED: Compatibility Warning system

Nucleus comes packaged with information about known plugins and mods that conflict with its functions. These warnings may appear on startup, and on demand by running /nucleus compat.

ADDED: Kit data can now be reloaded from persistence on demand

I don’t recommend that you ever do this manually, but you can now update the kits data from persistence and reload it using /kit reload.

ADDED: /basictitle, /basicsubtitle and /basicactionbar commands

These commands allow you to send title, subtitle and actionbar messages to all or specific players. They work the same way as /planbroadcast. The flags for these commands are:

  • -p [player]: The name of the player or a selector that defines who to send the message to. If omitted, sends to all on the server.
  • -i [seconds]: The amount of time taken by the fade in effect, in seconds (does not affect action bar messages).
  • -o [seconds]: The amount of time taken by the fade out effect, in seconds.
  • -t [seconds]: The amount of time taken the message remains on the screen, in seconds.

ADDED: Notification module

This module houses the broadcast commands, as well as the new /basictitle, /basicsubtitle and /basicactionbar commands. Relaxant config from the admin module will be auto-migrated.

ADDED: Support for automatic USER permissions on the default group

Particularly useful for OP based servers, if you want all players to have access to all permissions in the nucleus USER role, you can now set core.give-default-group-user-permissions to
true and all users will be granted all permissions in the USER role. This is equivalent to granting the nucleus.user permission, but can also be used on servers with no permissions plugin installed.

MODIFIED: Chat tokens no longer accept pl style tokens

Chat tokens work similar to before, but are no longer plugin namespaced (so, {{pl:[]}} will no longer work). {{o:[]}} style tokens, those that select options from your permissions plugin, will still work.

MODIFIED: The /tp alias for /teleport defaults to disabled

Many mods, such as JourneyMap, were using the /tp command to perform teleports. It can be re-enabled in commands.conf.

Other commands may get the same treatment if the Nucleus team figures that it would be in the best interest of the community.

MODIFIED: The /mute and /unmute, /jail and /unjail commands are no longer toggles

This also has the side effect of making these actions all require their own permission.

MODIFIED: Warps now always require the permission nucleus.warps.<name> to redeem

Until recently, this was a configuration toggle. This is no longer the case. To emulate the previous behaviour, simply grant the nucleus.warps permission.

MODIFIED: Permission Group Chat Templates

The original way Nucleus attempted to determine which group template to use when displaying chat formatting was unpredictable and was very slow as it had to collect a lot of data from a permissions plugin. This has now been removed.

Nucleus has supported a nucleus.chat.group permission option (meta in LuckPerms) for some time. This option is now the only way to determine the group template a permission group or user will use - falling back to the default if this does not match.

MODIFIED: Permission Group /list groups

For similar reasons to chat groups no longer relying on parent groups, /list no longer does either. Groups are now defined by the nucleus.list.group option/meta.
The group alias config has also been removed, as you can just provide them the same nucleus.list.group option value.

As a bonus, /list groups now use text colour codes in the group names.

MODIFIED: /kit add has been merged into /kit create

The action performed by /kit add in v1 was to create a kit based on your inventory. This is now /kit create -c instead.

Both /kit create and /kit create -c now require the edit kit permission to actually add items to kits.

REMOVED: Debug Mode

Nucleus will just spit out errors to the console now, as they should never happen (or if they do, you should know about them).

REMOVED: The Warnings module has been removed

It wasn’t used much and, honestly, it was actually pushing the boundaries as to what Nucleus really should be doing. There are no migration paths available as it stands, however plugin developers can use the Nucleus API to extract any warnings against a player if they wish to enable such migration.

REMOVED: The Server Shop module has been removed

It wasn’t used much, and it had many issues with it that were not simple to fix. There are no migration paths available.

REWRITTEN: Teleportation Routines

Player teleportation should now be more reliable as the base teleport code has been deleted and completely rebuilt.

REWRITTEN: Message channel support removed for higher compatibility with other plugins

Nucleus will no longer use message channels, instead using an in-house solution to support formatting with other mods, (and for reporting formatting to other plugins). However, when possible, the message channels will still be applied to the event so plugins can see that Nucleus is doing something with them.

BUG FIXES: Miscellaneous fixes

While many bugs might have been introduced, other bugs have been fixed. Notable issues that have been fixed will be noted here.

For Plugin Developers that use the API

REMOVED: The Nucleus static object

I’m going to start with something that isn’t in the API - Nucleus.getNucleus(). I’ve had the occasional complaint that updates to Nucleus have broken some plugins that depend on it. It always turns out to be developers not asking for API additions (which I try to guarantee) but just decide to use Nucleus.getNucleus() everywhere. Don’t do it - I do not class that as part of the API and it was a horrible object that allowed me to be lazy. v2 is about stopping me being lazy.

You shouldn’t do it anyway, but you will not be able to do it at all in v2, because the Nucleus object has been deleted. Please use the API. If there is something missing from the API that you wish to use, please open a Github issue.

MODIFIED: The location of nearly everything

To try to make things a little more sane, all APIs are now classified by their module or overreaching theme first, rather than whether they are a service, event etc. This should make it simpler to see what APIs are available for each module.

MODIFIED: TeleportResults is now TeleportResult, an enum. Other CatalogTypes are now Suppliers

TeleportResult is now an enum. Other CatalogTypes are now represented by Suppliers to remove reliance on hacky reflection techniques.

MODIFIED: The Kit API has been updated

A failed redemption will no longer throw a KitRedeemException. Instead, a KitRedeemResult will be returned and that will tell you if about the success (or failure).

You can also now get the status of a cooldown for a Kit/User combination.

REMOVED: NucleusMessageTokenService has been removed in favour of the SpongeAPI 7.3 placeholder solution

The message token service has been completely removed, Nucleus now supports the SpongeAPI 7.3 central placeholder system.

Nucleus Gluon v1 will no longer work for supporting placeholder API tokens.

REMOVED: Nucleus MessageChannels

These will be restored in a marker capacity only

In order to enable Nucleus formatting in chat events and to avoid future conflicts with other plugin message channels, Nucleus will now apply its formatting during the MessageChannelEvent.Chat event, and will no longer use MessageChannels for formatting. Nucleus will dynamically create message channels during the LATE priority.

As a result, no API for message channels is available in the API.

REMOVED: NucleusModuleService

The NucleusModuleService has been removed. Plugins wishing to disable modules should listen to the NucleusModuleEvent.AboutToConstruct event instead.

MODIFIED: All kinds of stuff

Deprecations have been removed and APIs have been moved to module specific packages. You can find the javadocs for v2 at https://jd.nucleuspowered.org/.

For Developers considering contributing to Nucleus

Nucleus’ biggest changes have happened in this area. v2 no longer uses the static Nucleus object, but instead uses Guice and DI to create a series of cross cutting concerns to provide Nucleus wide actions. Commands, listeners and tasks should all have INucleusServiceCollection injected into themselves for access to these systems.

MODIFIED: Nucleus now uses Gradle 5.6.4

We have jumped from Gradle 4.10 to 5.6.4, as this is the last version that the SpongeGradle plugin has been tested with.

MODIFIED: Nucleus Implementation has been moved to the nucleus-core subproject

This gives a cleaner separation of the project, and allows for other sub projects to be added more easily. The root project now handles project wide actions only.

MODIFIED: Nucleus now uses the Kotlin DSL

The build scripts have been rewritten in Kotlin to improve type safety and being some more order to the scripts.


For more information, have a look around our documentation site at https://v2.nucleuspowered.org/docs.


General Notes

A new version has been released for Nucleus, it is available for download here.


This is a bug fix and minor feature release - Nucleus 2.0.2 for Sponge API version 7.3

This was built from Nucleus commit: 34670c71

Release Notes

If you’re having trouble, visit our Discord channel: https://discord.gg/A9QHG5H


Before you upgrade to Nucleus 2 from Nucleus 1.x

Please read the Nucleus 2.0.1 release notes before upgrading.

If you need help to decide which version of Nucleus to use, please visit our guide on how to choose.

For the things YOU need to do as a server owner, please visit our instructions on how to upgrade.

Bug Fixes

  • Fix rare issue where malformed description JSON can delete all warps.
  • Fixed colour code not being serialised in the /world info command.
  • Reinstate the /killentity command

General Notes

A new version has been released for Nucleus, it is available for download here.


This is a bug fix and minor feature release - Nucleus 2.0.3 for Sponge API version 7.3

This was built from Nucleus commit: 81f4a84b

Release Notes

If you’re having trouble, visit our Discord channel: https://discord.gg/A9QHG5H


Before you upgrade to Nucleus 2 from Nucleus 1.x

Please read the Nucleus 2.0.1 release notes before upgrading.

If you need help to decide which version of Nucleus to use, please visit our guide on how to choose.

For the things YOU need to do as a server owner, please visit our instructions on how to upgrade.

Bug Fixes

  • Fix issue preventing management of powertools.
  • Added check to ensure that Configurate 3.7 is loaded.

General Notes

A new version has been released for Nucleus, it is available for download here.


This is a bug fix and minor feature release - Nucleus 2.0.4 for Sponge API version 7.3

This was built from Nucleus commit: a2352069

Release Notes

If you’re having trouble, visit our Discord channel: https://discord.gg/A9QHG5H


Before you upgrade to Nucleus 2 from Nucleus 1.x

Please read the Nucleus 2.0.1 release notes before upgrading.

If you need help to decide which version of Nucleus to use, please visit our guide on how to choose.

For the things YOU need to do as a server owner, please visit our instructions on how to upgrade.

Bug Fixes

  • Fix {{currentworld}} placeholder printing out the World object, rather than the name.
  • Re-add “namecolour” and “namestyle” options, they should not have been removed.
  • Fixed permission documentation error for nucleus.nick.colour/nucleus.nick.style.

General Notes

  • Some plugins and mods are known to be incompatible with Nucleus. See Compatibility for more information.

A new version has been released for Nucleus, it is available for download here.


This is a major release - Nucleus 2.1.0 for Sponge API version 7.3

This was built from Nucleus commit: 976e542c

Release Notes

If you’re having trouble, visit our Discord channel: https://discord.gg/A9QHG5H


Before you upgrade to Nucleus 2 from Nucleus 1.x

Please read the Nucleus 2.0.1 release notes before upgrading.

If you need help to decide which version of Nucleus to use, please visit our guide on how to choose.

For the things YOU need to do as a server owner, please visit our instructions on how to upgrade.

API Updates

  • Added NucleusStaffChatService#getMembers()
  • Added NucleusStaffChatService#isDirectedToStaffChat(MessageChannelEvent.Chat)
  • Added NucleusStaffChatService#isCurrentlyChattingInStaffChat(CommandSource)
  • Added NucleusStaffChatService#isCurrentlyChattingInStaffChat(UUID)
  • Added NucleusWarmupManagerService#executeAfter(Player, Duration, WarmupTask, boolean)
  • Added NucleusWarmupManagerService#executeAfterAsync(Player, Duration, WarmupTask, boolean)

Feature updates

  • Re-added per-world spawn permissions

Bug Fixes

  • Fixed documentation generator not outputting some subcommands.
  • Fixed warmup message not appearing on /tpaccept.
  • Fixed warmup cancellation message appearing twice.
  • Fixed warmup cancellation message appearing after a warmup completes.
  • Fixed /world info not accepting a world name when running as a player.

General Notes

  • Some plugins and mods are known to be incompatible with Nucleus. See Compatibility for more information.

A new version has been released for Nucleus, it is available for download here.


This is a bug fix and minor feature release - Nucleus 2.1.1 for Sponge API version 7.3

This was built from Nucleus commit: 94c3b99b

Release Notes

If you’re having trouble, visit our Discord channel: https://discord.gg/A9QHG5H


Before you upgrade to Nucleus 2 from Nucleus 1.x

Please read the Nucleus 2.0.1 release notes before upgrading.

If you need help to decide which version of Nucleus to use, please visit our guide on how to choose.

For the things YOU need to do as a server owner, please visit our instructions on how to upgrade.

Bug Fixes

  • Fixed /tpa sending request text to wrong person.

General Notes

  • Some plugins and mods are known to be incompatible with Nucleus. See Compatibility for more information.