The problems with /reload (and Bukkit)
Posted on July 01, 2019 in minecraft
/reload command has been around in Bukkit since the very early days. The idea was simple, to allow server owners to reload plugin configuration without a server restart quickly. This idea was similar to the old hMod command of the same name. However, to make it easier to write plugins, the reload command just disabled the plugin and re-ran Bukkit's plugin loading mechanisms. While this concept did exist on hMod as separate commands, it required usage in a much more controlled manner. Only single plugins could be enabled/disabled at a time.
As Java doesn't provide a proper way to "unload" classes that the server has already loaded, this started to cause a few subtle issues and errors. Loading everything again in some cases caused conflicts between the old and new versions of the classes, which was especially bad when plugin jar files were modified. Due to this, Spigot has always not recommended the usage of the reload command. Significant distaste for the reload command was evident as early as 2011, only shortly after Bukkit had started.
As Minecraft evolved, what needed to reload became a lot more complicated, until the concept of reloading became infeasible. Every recent update has seen the reload command cause more issues. Right now, no one should ever use the /reload command. It causes significant instabilities within Minecraft, Bukkit, and almost any plugin that makes use of the Bukkit API. Currently, an action as simple as checking player permissions can cause issues after a reload.
If you need to:
- Add a plugin after the server has already started
- Update a plugin while the server is running
- Remove a plugin while the server is running
RESTART YOUR SERVER (Or at worst for the first one, enable it with PlugMan).
If you need to:
- Reload a plugins configuration
Use the plugin-provided reload command, for example
/cb reload will reload CraftBook's configuration.
If you've modified any jar files, reloading the server WILL create an unstable server, even if you can't notice it. The
/reload command is ALWAYS either unnecessary or unsafe.
Note! This doesn't apply to Sponge's reload command. The Sponge reload command does not do what Bukkit does, and instead sends an event to plugins telling them a reload was requested. It is then the plugin's responsibility to reload configurations.