After months of hard work from our contributors, EssentialsX 2.20.0 is here! 🎉
This release contains a new Discord Link addon, 1.19.4 support, a few new features, bug fixes and internal improvements. Keep reading to see all the new additions!
Thanks to all our contributors who contributed to this release (all of whom are listed at the bottom of this release), as well as to everyone who has contributed to translations on Crowdin!
In addition, a massive thanks to our community members who have assisted countless people with using EssentialsX across GitHub and MOSS, including @triagonal, @JasonHorkles, @Evidentsinger14, @ImDarkLaw, @Chew, @Laarryy and many others.
The EssentialsX project is powered by the community. If you want to help us out, you can contribute by;
Finally, a shoutout to our supporters on Patreon and GitHub Sponsors!
A special thanks goes to our Hero tier supporters:
Your support helps us to continue spending hours of our free time working on and improving EssentialsX for everyone. If you've got any spare change, you can click one of the buttons below to support the EssentialsX project with a one-off or monthly pledge:
EssentialsX officially supports the CraftBukkit, Spigot, and Paper server software. Specifically, EssentialsX is designed to work on the following Minecraft versions:
✅ 1.18.2 and 1.19.4 - EssentialsX actively develops against and supports these versions.
⚠️ 1.8.8, 1.9.4, 1.10.2, 1.11.2, 1.12.2, 1.13.2, 1.14.4, 1.15.2, 1.16.5, and 1.17.1 - these versions are still supported, but are not a priority for us, and may be dropped in a future release.
We recommend using the latest version of Paper. EssentialsX includes significant improvements that require Paper, including:
/anvil, /grindstone, /cartographytable, /loom, /smithingtable, /stonecutter are only supported on Paper./recipe on 1.12+ requires Paper to avoid a dupe bug introduced by CraftBukkit and Spigot.EssentialsX does not support the following Minecraft versions or server software:
1.7.10 or below.If you're upgrading from 2.19.3 or above, you can keep your current EssentialsX config file. However, 2.20.0 adds several new options that you may want to configure, and to do so you'll need to either update your config or add the new settings to your existing config. Read on for a list of changes and new config options.
Upgrading from 2.19.2 or older versions of EssentialsX? See the previous update changelogs.
EssentialsX Discord now has the Discord Link addon, which lets your users easily link their Discord and Minecraft accounts! You can synchronize Discord roles with Vault groups, as well as optionally requiring players to link to Discord before playing, all with a bloat-free and easy-to-understand configuration!
You can read more about EssentialsX Discord Link and see how to get started here.
On CraftBukkit and Spigot, anchor charges will deplete regardless of the respawn-at-anchor due to an unfixed bug in CraftBukkit. This bug has been patched in Paper.
EssentialsX 2.20.0 doesn't yet support blocks, items and mobs from Minecraft: Trails and Tales in 1.19.x or 1.20. As a result, some commands and features (including /give, /spawnmob and /editsign) won't recognise the new content yet.
We plan to release a 2.20.1 update once Minecraft 1.20 has released, which will add support for the new content.
EssentialsX 2.20 overhauls the user caching system, fixing issues with third-party plugins such as Towny.
Due to a large overhaul in data format, once you upgrade to 2.20.0, you will not be able to downgrade your userdata to older versions. We strongly recommend taking a full backup of your plugins/Essentials/usermap.csv file before you update from 2.19.7 to 2.20.0 if you ever wish to downgrade in the future.
EssentialsX now officially supports CraftBukkit, Spigot and Paper for 1.19.4.
/renamehome commandYou can now use /renamehome to change the name of your existing home. If you have the essentials.renamehome.others permission, you can rename the homes of other players.
/bottom commandYou can now use /bottom to teleport to the lowest safe location in their current position.
first-join message typeA new Minecraft -> Discord message type, sent when a player joins the server for the first time.
# Configure which Discord channels different messages will be sent to.
# You can either use the names of the channels listed above or just the id of a channel.
# If an invalid channel is used, the primary channel will be used instead.
#
# To disable a message from showing, use 'none' as the channel name.
message-types:
...
# Join messages sent when a player joins the Minecraft server for the first time. This type is sent instead of the join type.
first-join: primary
# The following entries allow you to customize the formatting of messages sent by the plugin.
# Each message has a description of how it is used along with placeholders that can be used.
messages:
...
# This is the message sent to Discord when a player joins the minecraft server for the first time.
# The following placeholders can be used here:
# - {username}: The name of the user joining
# - {displayname}: The display name of the user joining
# - {joinmessage}: The full default join message used in game
# - {online}: The amount of players online
# - {unique}: The amount of unique players to ever join the server
# ... PlaceholderAPI placeholders are also supported here too!
first-join: ":arrow_right: :first_place: {displayname} has joined the server for the first time!"
local, question, and shout message typesA few new Minecraft -> Discord message types and configuration options have been added in order to support local, question and shout chat.
# Whether to use Essentials Chat events instead of normal chat event.
# This allows you to filter chat by its type (local, question, shout).
use-essentials-events: false
# Configure which Discord channels different messages will be sent to.
# You can either use the names of the channels listed above or just the id of a channel.
# If an invalid channel is used, the primary channel will be used instead.
#
# To disable a message from showing, use 'none' as the channel name.
message-types:
...
# Message sent when a player talks in local chat.
# use-essentials-events must be set to "true" for this to work.
local: none
# Message sent when a player asks a question in global chat.
# use-essentials-events must be set to "true" for this to work.
question: primary
# Message sent when a player talks in global chat.
# use-essentials-events must be set to "true" for this to work.
shout: primary
# The following entries allow you to customize the formatting of messages sent by the plugin.
# Each message has a description of how it is used along with placeholders that can be used.
messages:
...
# This is the message that is used to relay minecraft local chat in Discord.
# The following placeholders can be used here:
# - {username}: The username of the player sending the message
# - {displayname}: The display name of the player sending the message (This would be their nickname)
# - {message}: The content of the message being sent
# - {world}: The name of the world the player sending the message is in
# - {prefix}: The prefix of the player sending the message
# - {suffix}: The suffix of the player sending the message
# ... PlaceholderAPI placeholders are also supported here too!
mc-to-discord-local: "**[Local]** {displayname}: {message}"
# This is the message that is used to relay questions from minecraft chat in Discord.
# The following placeholders can be used here:
# - {username}: The username of the player sending the message
# - {displayname}: The display name of the player sending the message (This would be their nickname)
# - {message}: The content of the message being sent
# - {world}: The name of the world the player sending the message is in
# - {prefix}: The prefix of the player sending the message
# - {suffix}: The suffix of the player sending the message
# ... PlaceholderAPI placeholders are also supported here too!
mc-to-discord-question: "**[Question]** {displayname}: {message}"
# This is the message that is used to relay minecraft global chat in Discord.
# The following placeholders can be used here:
# - {username}: The username of the player sending the message
# - {displayname}: The display name of the player sending the message (This would be their nickname)
# - {message}: The content of the message being sent
# - {world}: The name of the world the player sending the message is in
# - {prefix}: The prefix of the player sending the message
# - {suffix}: The suffix of the player sending the message
# ... PlaceholderAPI placeholders are also supported here too!
mc-to-discord-shout: "**[Shout]** {displayname}: {message}"
You can now change the webhook name format for messages sent to Discord.
# The following entries allow you to customize the formatting of messages sent by the plugin.
# Each message has a description of how it is used along with placeholders that can be used.
messages:
...
# This is the bot's name which appears in Discord when sending player-specific messages.
# The following placeholders can be used here:
# - {username}: The username of the player sending the message
# - {displayname}: The display name of the player sending the message (This would be their nickname)
# - {world}: The name of the world the player sending the message is in
# - {prefix}: The prefix of the player sending the message
# - {suffix}: The suffix of the player sending the message
# - {botname}: Name of the Discord bot
# ... PlaceholderAPI placeholders are also supported here too!
mc-to-discord-name-format: "{botname}"
/mail clear command.essentials.nick.hideprefix permission to hide the nickname prefix for those with it.essentials.commandcooldowns.bypass.<command name>./recipe./whois no longer overflow./tppos command in the console./tpoffline when the player's last location is not known./top command now sends feedback once again./editsign command now calls the SignChangeEvent.NullPoinerException in some cases./ess reload in some cases.The following bugs from 2.20.0 development builds have been fixed:
/hat./createkit command works on 1.8.8 once again./link Discord command no longer requires administrator privileges.NullPointerExceptionDiscordRelayEventDiscordRelayEvent now has a getViewers() method which returns a mutable list of viewers for the relayed message.
With the addition of the Discord Link Module, there is now an API service to access information about a player's Discord account that they have linked. You can obtain an instance of this and use it in tandem with the Discord module API like so:
// Gets the API service for EssentialsX Discord Link
final DiscordLinkService linkApi = Bukkit.getServicesManager().load(DiscordLinkService.class);
final String discordId = linkApi.getDiscordId(player.getUniqueId());
if (discordId == null) {
// The player has no Discord account linked.
return;
}
// Gets the API service for EssentialsX Discord which we will use to get the actual user
final DiscordService discordApi = Bukkit.getServicesManager().load(DiscordService.class);
final InteractionMember member = discordApi.getMemberById(discordId).join();
final String userTag = member == null ? null : member.getTag();
EssentialsX 2.20.0 introduces several new events:
GlobalChatEvent is fired when players send a message in global chat.LocalChatEvent is fired when players send a message in local chat.HomeModifyEvent is fired when a home is created, updated or deleted.For a full commit log, click here.

The essential plugin suite for Paper and Spigot servers.