Nucleus - The Ultimate Essentials Plugin

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


Nucleus 1.2 Pre-release 3

This build is for Minecraft 1.12.2+ (Sponge API 7) ONLY

Nucleus 1.1.6 LTS is available for 1.10.2 and 1.11.2


Release Notes

This is a preview release. Not all the testing that you would come to expect has been performed on this build for a very specific reason - this is a build for Sponge bleeding, and changes are expected that will break this build. A full 1.2 release will be made when Sponge API 7 is declared stable.

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

Important Changes & Notices

Are you upgrading from Nucleus 0.x? Upgrade to 1.0.1 first.

Nucleus 1.1 removes a lot of old migration code that has been in the codebase since the very early days. 1.0.1 is the last version that contains this migration code, anyone updating directly from 0.x to 1.1 may not get a smooth migration.

[PR2] Backup your data! Codebase cleanup!

Nucleus 1.2 has undergone a lot of changes to remove a lot of redundant code. While this should make the plugin more stable, there may be minor issues that have arisen. Nothing should break, but please keep a backup of your data before installing 1.2 PR3.

[PR2] Removal of config key admin.separate-gamemode-permissions

If this config key was set to false, you should now grant the players in question the nucleus.gamemode.modes permission.

New Features

[PR3] Added /trash

Now, a new way to dispose of your items! Brings up an inventory window, put your items in, close the inventory, and they are digital history!

[PR3] Added warning messages on startup in some scenarioes

Nucleus works best with a permission plugin and an economy plugin - it doesn’t provide these functions itself. If you don’t have these, Nucleus will warn you on startup.

Also, if Nucleus can’t take a command name, it will now warn you on startup too.

[PR3] More world commands

You can now copy and rename worlds using /world clone and /world rename

[PR2] Changes due to the Sponge Cause Refactor

Nucleus now supports the Sponge CauseStackManager and will fail to run on older builds. This should not affect the general player, but there are developer centric things to keep in mind. These will be documented in the Developers section of these notes.

[PR2] /workbench, /anvil and /enchanttable (with caveats)

You can now, thanks to advances in the Sponge API, call a virtual workbench and anvil. You can also call an enchantment table, but there is no way to set its power right now - it will be a very low power table! We hope to be able to add this to Sponge and bring this in a future update.

[PR2] Added blacklist for command spy

Now, you can specify either commands to be able to spy on, or commands NOT to spy on, bring this up to parity with the command logger.

[PR2] Updated World pre-gen code

We’ve made a few quality of life changes to the world gen system:

  • Remove a lot of the spam caused by world generation by default, replacing with a more friendly notification, timed with the general player notification frequency
  • Add option to re-add spam (if you’re really into that sort of thing)
  • Decoupled save interval and player notification interval
  • Added -f flag to control the tick interval for pre-gen (how often the pre-gen code runs, number of ticks between generations - defaults to Sponge default)

There has also been some cleanup of the code.

New aliases for /time set and /warp set: /settime and /setwarp

Not really much more to say than that, but now you won’t have to worry about getting that command wrong all the time!

As a related note, if a small change like this will help you with using the plugin, please tell us. This plugin is for the community!

New commands for kits: /kit info and /kit view

Server admins can now view at a glance info about kits by running /kit info [kit]. Servers can also give the /kit view command to players, which will allow them to look at a kit without redeeming it.

Prevent players from accessing no-go worlds with world access permissions!

@Mohron has added per-world access permissions. By setting world.separate-permissions in main.conf to true, server owners can prevent players from warping to certain worlds by denying the permission nucleus.worlds.[worldname].

Added a way to prevent homes being used/modified if too many are set.

There was an exploit where if a player’s home count was reduced, the player could still overwrite homes and keep the higher number. By default, in this scenario now, Nucleus will not allow players with too many homes from modifying and warping to homes until some are deleted, but for the scenario that servers might want to keep this behaviour, there is a new option in main.conf, homes.prevent-home-count-overhang - set this to false to retain the existing behaviour.

Developers - API updates

Repository: ‘http://repo.drnaylor.co.uk/artifactory/list/minecraft’.
Dependency (1.12.2): ‘io.github.nucleuspowered:nucleus-api:1.2.0-PR2-S7.0’

[PR2] Updates for the Sponge Cause Stack Manager (CSM)

There are a few things to be aware of:

  • We’ve kept the Cause parameter on API methods where the API method can be called async. The Sponge CSM only works on the main thread. Read the Sponge Javadocs for API 7 for how to create causes off the main thread (look at Cause.builder())
  • If a player’s chat is caused by sudo, note that the root cause will NOT be the sudo'd player, but the player who caused the chat (who ran the sudo command). Check for the EventContexts.PLAYER_SIMULATED key for the GameProfile of the simulated player. Nucleus will look for this context too.
  • Nucleus will add the (Nucleus) EventContexts.SHOULD_FORMAT_CHANNEL context when Nucleus will not format chat. Your plugins can also add this context when you send a chat message that you don’t want Nucleus to format the chat - if you want to use the ID, it’s nucleus:should_format_channel.

Addition of NucleusInvulnerabilityService

Developers can now inspect and change a player’s invulnerability status (often referred to as “god mode”)

Large update to the Kit service

Kits now contain the name of the kit, and back end changes now affect how kits should be saved. Existing integrations will still work, but note that there are a fair few deprecations. Such methods will be removed in Nucleus 2.0, when that comes to be.

Minor Changes & Enhancements

  • The Kits subsystem has been improved
  • Added configurable /unstuck radius and height
  • Removal of the Permission Cache system, permission plugins now should be intelligently caching permissions
  • Internal cleanup of inconsistent systems
  • Reasons are now coloured in text that is displayed
  • Added message to startup if the version of Sponge is too old
  • Removed admin.separate-gamemode-permissions
  • Bumped QSML to 0.9.0

Bugfixes

  • Fix world import sometimes appearing to exist, but then pointing to an existing world
  • Fix players not spawning on the centre of a block when logging in with the relavent options set
  • Fix ClassCastException in some cases when using /tp
  • Unset the spectatee when setting a player’s location.
  • Fixed /world import throwing up debug messages when they shouldn’t be thrown
  • Fixed /world import attempting to modifiy the level_sponge.dat when it should be modifying level.dat
  • Fixed isAFK checks sometimes throwing a null exception
  • Fixed kits with only commands in not redeeming
  • Fixed missing translation key when a world could not be loaded
  • Fixed home overhang message to output the numbers the correct way around
  • Updated saving/loading to be more robust
  • Work around issues with /back
  • Fixed null MOTD permission check
  • Prevent stack traces on startup if the server is pinged
  • Fixed nicknames ignoring style/colour permissions
  • Fixed weird teleport issues when warping when riding a vehicle
  • API 7 compatibility changes

Known Issues

  • Kits may fail to save if your kit contains modded items that use arrays to store data. This will be addressed in a future release.
  • Sometimes, an incorrect custom prefix might be selected. Nucleus uses whatever the permission plugin hands back, check your inheritance with the permissions plugin.
  • This version of Nucleus targets an unstable version of the Sponge API. Nucleus may break, without warning, with newer version of the API and 1.12.1 builds.

Commit History

1 Like

I can’t help but think this would have been better off exposed as a data key / capability in SpongeAPI itself. Is there anything in particular blocking it’s addition?

1 Like

This is a bit of a long post, but I will prefix it by saying this.

The contents of this post are my of own opinion, and not that of the SpongePowered team.

To clarify, first and foremost, this is a Nucleus invulnerability mode, not a vanilla one. It blocks all damage through cancelling events, rather than by some other method within the server software itself. I’m not setting any attributes on the player.

The roots of this approach come from when it was added, a long time ago. When I first thought up Nucleus, my intention was to the use the Sponge Data API for storage as well as API interfaces, but I quickly realised that this wasn’t a good idea, at least at the time. Nucleus development started on the 12th January 2016 and targeted API 3. I’m now working towards supporting API 7, and I still don’t think it’s a good idea from a developer’s perspective.

Why? Controversial statement: the Data API is still too cumbersome and bloated for a developer to implement for a simple boolean get/set with their own backing store.

Now, don’t get me wrong, the idea is a good one. The intention of the API is to allow developers like me to add our own attributes to a player, and I think it could be a real strength of the Sponge API. A Player#get(NucleusKeys.INVULNERABILITY) would indeed be a natural and perfect way to add this.

But to add this, I need to add a DataManuipulator, and then an ImmutableDataManipulator (which, by the way, is pointless IMO given that you always get a copy of data). I would still need to register a DataBuilder, which is pointless as my backing store is not the NBT of the player (as I want offline access). Then I need to register my Keys and the getter/setters for that. Once I have done all that, hopefully successfully, then when someone requests whether someone is invulnerable, a myriad of objects are created, either values and/or manipulators, only to return an Optional<Boolean>. And, of course, if I wanted to use the player NBT as a backing store, it just gets a little more convoluted.

Here, I have an internal handler exposed as an API. I don’t need to create any more methods, I just expose the methods that I need to expose. It’s perhaps less intuitive, but it’s much easier for me to maintain, and not much harder for an API consumer to call.

I would like to see a much simpler Data API for cases like mine, where we proxy data requests to/from our plugin backed objects, so I can say NucleusKeys.NUCLEUS_NICKNAME runs through a DataProxy that provides/sets the data in question. Until then, the cost to benefit ratio is not worth it for my use case, as I would have to spend a lot of time creating infrastructure for each bit of data on a player, and the maintenance burden is just too high - with what little time I have, this is not a good use of my time.

3 Likes

It was my understanding that native Minecraft had some underlying form of invulnerability that could be toggled, and thus queried for. It was this that I was talking about, for the sake of improvement of the API, not an attack against nucleus (it’s brilliant).

At the moment SpongeAPI/InvulnerabilityData.java at 9e889ff0ee29008d8939fd71f10b1fe3d628a4f0 · SpongePowered/SpongeAPI · GitHub seems to only be relating to invulnerability ticks…

Don’t worry, I didn’t see it as an attack, though what you asked makes more sense now. Still, my points I made about using the Data API are ones that I stand by regardless.

Yes, I believe Minecraft does as well, but when I built the command, that particular data wasn’t implemented in the API. I don’t know if it is - it’s not something I’ve looked into since building it really.

1 Like

How can i give my players permission to use commands without giving them op?

By using a permissions plugin, e.g. Luckperms, to manage player permissions.

Version 1.2.0-PR3-S7.0 does n’t work.
I tested on spongeforge-1.12.2-2529-7.0.0-BETA-2747

I’m gonna need more information than that, specifially any logs and how it doesn’t work…

I apologize, it looks like I made a mistake when translating the plugin and it did not start.

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


Nucleus 1.1.8 LTS

This build is for Minecraft 1.10.2 (Sponge API 5.1)

Nucleus 1.1.8 LTS is also available for 1.11.2

Nucleus 1.2 pre-release 4 is available for 1.12.2


Release Notes

This is a bug fix release for Nucleus 1.1.x LTS

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

IMPORTANT: Upcoming End of Life for Nucleus 1.1.x LTS

Nucleus 1.1.x LTS for 1.10.2 and 1.11.2 will not be officially supported or updated from the 1st January 2018. It has had a good life, but as Sponge API 7 is due to be released soon and Nucleus 1.2 will have many structural improvements, API 5.1 and 6 builds will become increasingly difficult to maintain.

Nucleus 1.1.x will continue to receive support throughout the rest of 2017.

New Features

  • Added gamerules alias & suggest command click actions (thanks Mohron)

Bugfixes

  • Fixed Command Spy not working when using it in blacklist mode with no commands blacklisted
  • Added support for arrays in kits (necessary for some mods)
  • Fixed kit info showing the number of stacks for the number of commands

Known Issues

  • Sometimes, an incorrect custom prefix might be selected. Nucleus uses whatever the permission plugin hands back, check your inheritance with the permissions plugin.

Commit History

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


Nucleus 1.1.8 LTS

This build is for Minecraft 1.11.2 (Sponge API 6.0)

Nucleus 1.1.8 LTS is also available for 1.10.2

Nucleus 1.2 pre-release 4 is available for 1.12.2


Release Notes

This is a bug fix release for Nucleus 1.1.x LTS

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

IMPORTANT: Upcoming End of Life for Nucleus 1.1.x LTS

Nucleus 1.1.x LTS for 1.10.2 and 1.11.2 will not be officially supported or updated from the 1st January 2018. It has had a good life, but as Sponge API 7 is due to be released soon and Nucleus 1.2 will have many structural improvements, API 5.1 and 6 builds will become increasingly difficult to maintain.

Nucleus 1.1.x will continue to receive support throughout the rest of 2017.

New Features

  • Added gamerules alias & suggest command click actions (thanks @Mohron)

Bugfixes

  • Fixed Command Spy not working when using it in blacklist mode with no commands blacklisted
  • Added support for arrays in kits (necessary for some mods)
  • Fixed kit info showing the number of stacks for the number of commands

Known Issues

  • Sometimes, an incorrect custom prefix might be selected. Nucleus uses whatever the permission plugin hands back, check your inheritance with the permissions plugin.

Commit History

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


Nucleus 1.2 Pre-release 4

This build is for Minecraft 1.12.2+ (Sponge API 7) ONLY

Nucleus 1.1.8 LTS is available for 1.10.2 and 1.11.2


This is a preview release. Not all the testing that you would come to expect has been performed on this build for a very specific reason - this is a build for Sponge bleeding, and changes are possible that will break this build. A full 1.2 release will be made when Sponge API 7 is declared stable.

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

Important Changes & Notices

Are you upgrading from Nucleus 0.x? Upgrade to 1.0.1 first.

Nucleus 1.1 removes a lot of old migration code that has been in the codebase since the very early days. 1.0.1 is the last version that contains this migration code, anyone updating directly from 0.x to 1.1 may not get a smooth migration.

[PR2] Backup your data! Codebase cleanup!

Nucleus 1.2 has undergone a lot of changes to remove a lot of redundant code. While this should make the plugin more stable, there may be minor issues that have arisen. Nothing should break, but please keep a backup of your data before installing 1.2 PR3.

[PR2] Removal of config key admin.separate-gamemode-permissions

If this config key was set to false, you should now grant the players in question the nucleus.gamemode.modes permission.

New Features

[PR4] Add gamerules alias & suggest command click actions

Thanks to Mohron, you can now run /gamerules as an alias to /world gamerule. Clicking on a gamerule will suggest a command to alter it.

[PR4] Add force flag for /spawn

Now, you can run /spawn -f to force yourself to the set spawn, even if it’s not safe.

[PR4] Added invulnerability module

Previous, invulnerability was in the misc module. It is now in its own separate module as the featureset got large enough for it to be in its own module.

Those who are invulnerable through Nucleus’ mechanisms should not be targeted by mobs any longer.

[PR4] Added way to track potential world UUID changes.

On each startup, Nucleus determines the mapping of world name -> UUID. If a world doesn’t match the UUID on subsequent startups, Nucleus whitelists the server and offers the /repairuuid command, which will correct it and shutdown the server if it can find the right methods.

This does not fix world UUIDs changing, but it alerts you and offers to fix the problem if it ever is detected.

[PR4] Added vanish on login permission

Players with the permission nucleus.vanish.onlogin will now log in and vanish immediately.

[PR3] Added /trash

Now, a new way to dispose of your items! Brings up an inventory window, put your items in, close the inventory, and they are digital history!

[PR3] Added warning messages on startup in some scenarioes

Nucleus works best with a permission plugin and an economy plugin - it doesn’t provide these functions itself. If you don’t have these, Nucleus will warn you on startup.

Also, if Nucleus can’t take a command name, it will now warn you on startup too.

[PR3] More world commands

You can now copy and rename worlds using /world clone and /world rename

[PR2] Changes due to the Sponge Cause Refactor

Nucleus now supports the Sponge CauseStackManager and will fail to run on older builds. This should not affect the general player, but there are developer centric things to keep in mind. These will be documented in the Developers section of these notes.

[PR2] /workbench, /anvil and /enchanttable (with caveats)

You can now, thanks to advances in the Sponge API, call a virtual workbench and anvil. You can also call an enchantment table, but there is no way to set its power right now - it will be a very low power table! We hope to be able to add this to Sponge and bring this in a future update.

[PR2] Added blacklist for command spy

Now, you can specify either commands to be able to spy on, or commands NOT to spy on, bring this up to parity with the command logger.

[PR2] Updated World pre-gen code

We’ve made a few quality of life changes to the world gen system:

  • Remove a lot of the spam caused by world generation by default, replacing with a more friendly notification, timed with the general player notification frequency
  • Add option to re-add spam (if you’re really into that sort of thing)
  • Decoupled save interval and player notification interval
  • Added -f flag to control the tick interval for pre-gen (how often the pre-gen code runs, number of ticks between generations - defaults to Sponge default)

There has also been some cleanup of the code.

New aliases for /time set and /warp set: /settime and /setwarp

Not really much more to say than that, but now you won’t have to worry about getting that command wrong all the time!

As a related note, if a small change like this will help you with using the plugin, please tell us. This plugin is for the community!

New commands for kits: /kit info and /kit view

Server admins can now view at a glance info about kits by running /kit info [kit]. Servers can also give the /kit view command to players, which will allow them to look at a kit without redeeming it.

Prevent players from accessing no-go worlds with world access permissions!

@Mohron has added per-world access permissions. By setting world.separate-permissions in main.conf to true, server owners can prevent players from warping to certain worlds by denying the permission nucleus.worlds.[worldname].

Added a way to prevent homes being used/modified if too many are set.

There was an exploit where if a player’s home count was reduced, the player could still overwrite homes and keep the higher number. By default, in this scenario now, Nucleus will not allow players with too many homes from modifying and warping to homes until some are deleted, but for the scenario that servers might want to keep this behaviour, there is a new option in main.conf, homes.prevent-home-count-overhang - set this to false to retain the existing behaviour.

Developers - API updates

Repository: ‘http://repo.drnaylor.co.uk/artifactory/list/minecraft’.
Dependency (1.12.2): ‘io.github.nucleuspowered:nucleus-api:1.2.0-PR2-S7.0’

[PR2] Updates for the Sponge Cause Stack Manager (CSM)

There are a few things to be aware of:

  • We’ve kept the Cause parameter on API methods where the API method can be called async. The Sponge CSM only works on the main thread. Read the Sponge Javadocs for API 7 for how to create causes off the main thread (look at Cause.builder())
  • If a player’s chat is caused by sudo, note that the root cause will NOT be the sudo'd player, but the player who caused the chat (who ran the sudo command). Check for the EventContexts.PLAYER_SIMULATED key for the GameProfile of the simulated player. Nucleus will look for this context too.
  • Nucleus will add the (Nucleus) EventContexts.SHOULD_FORMAT_CHANNEL context when Nucleus will not format chat. Your plugins can also add this context when you send a chat message that you don’t want Nucleus to format the chat - if you want to use the ID, it’s nucleus:should_format_channel.

Addition of NucleusInvulnerabilityService

Developers can now inspect and change a player’s invulnerability status (often referred to as “god mode”)

Large update to the Kit service

Kits now contain the name of the kit, and back end changes now affect how kits should be saved. Existing integrations will still work, but note that there are a fair few deprecations. Such methods will be removed in Nucleus 2.0, when that comes to be.

Minor Changes & Enhancements

  • Update message reloading so that /nucleus update-messages works
  • Updates to /rtp to use Sponge API 7 features
  • The Kits subsystem has been improved
  • Added configurable /unstuck radius and height
  • Removal of the Permission Cache system, permission plugins now should be intelligently caching permissions
  • Internal cleanup of inconsistent systems
  • Reasons are now coloured in text that is displayed
  • Added message to startup if the version of Sponge is too old
  • Removed admin.separate-gamemode-permissions
  • Bumped QSML to 0.9.0

Bugfixes

  • Fix kit info showing the number of stacks for the number of commands
  • Fix command spy not working in some scenarios.
  • Try to support arrays in kits.
  • Fix always requiring separate permissions for /kit list
  • Fix world import sometimes appearing to exist, but then pointing to an existing world
  • Fix players not spawning on the centre of a block when logging in with the relavent options set
  • Fix ClassCastException in some cases when using /tp
  • Unset the spectatee when setting a player’s location.
  • Fixed /world import throwing up debug messages when they shouldn’t be thrown
  • Fixed /world import attempting to modifiy the level_sponge.dat when it should be modifying level.dat
  • Fixed isAFK checks sometimes throwing a null exception
  • Fixed kits with only commands in not redeeming
  • Fixed missing translation key when a world could not be loaded
  • Fixed home overhang message to output the numbers the correct way around
  • Updated saving/loading to be more robust
  • Work around issues with /back
  • Fixed null MOTD permission check
  • Prevent stack traces on startup if the server is pinged
  • Fixed nicknames ignoring style/colour permissions
  • Fixed weird teleport issues when warping when riding a vehicle
  • API 7 compatibility changes

Known Issues

  • Kits may fail to save if your kit contains modded items that use arrays to store data. This will be addressed in a future release.
  • Sometimes, an incorrect custom prefix might be selected. Nucleus uses whatever the permission plugin hands back, check your inheritance with the permissions plugin.
  • This version of Nucleus targets an unstable version of the Sponge API. Nucleus may break, without warning, with newer version of the API and 1.12.2 builds.

Commit History

2 Likes

Not too happy about the end of life for sponge 5.1/6.0 I guess it’s time for me to switch off of Nucleus

That’s fine if that’s what you want to do, but also remember that Nucleus is an open source project, you are free to fork and make improvements to it if you so desire.

Unfortunately I’m not a developer, I’m just a guy who manages a server for a handful of people. I’d rather not be dependent on a software no longer maintained on a version I use.

Honestly you won’t be able to find any better alternatives. I think @dualspiral will only end nucleus development on 5.1/6.0 when it’s stable, not leaving critical bugs behind because that will be a terrible way to end it.

I’m sure you currently use more than one plugin that hasn’t been updated in months, but still works.

Fair point. But to me theres a difference in not updating because it works as to dropping support entirely for it. I’d be ok with it if Duals said he was toning down the support for the older versions but what if a few months go by and a serious bug pops up? Am I outta luck?

Sponge is constantly in development, and old versions are dropped as they go - because maintaining and backporting old branches is a great effort for devs who already volunteer their limited time to us free users. Nucleus will be dropping support as Sponge is focuses elsewhere. Same thing happened with 1.8, and 1.8.9, and 1.10. As dual stated, you are welcome to PR fixes and improvements, but these versions will no longer receive support’s attention.

@SnowBlitzz You are correct - Nucleus would not be left in a beta stage… thankfully, it already is stable for 1.10.2. EOL means no more support requests/tickets/improvements made, not that the branch suddenly becomes unusable.

If months from now you encounter an issue, it’ll be due to using out-of-support plugins, who have outlived their relevance in a Sponge environment.

1 Like

Which I understand.Your emphasis on Volunteer and free puts off the feeling you’re under the impression I’m acting entitled to updates - I’m not. I simply stated I will be looking for an alternative to nucleus as it is no longer useful to me being such an important plugin & no longer supports the version I need.

I appreciate the development put into the plugin and the usage of it I got for the time being, but just because this is a volunteer plugin does not mean I’m not allowed to state my opinion.