Changelog
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;
- Updating or reviewing translations on Crowdin
- Help users in our support channel on Discord
- Fixing bugs or offering new features on GitHub
Finally, a shoutout to our supporters on Patreon and GitHub Sponsors!
A special thanks goes to our Hero tier supporters:
- AKP
- Vestria MC
- @aternosorg
- @pebblehost
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:
Supported server versions
EssentialsX officially supports the CraftBukkit, Spigot, and Paper server software. Specifically, EssentialsX is designed to work on the following Minecraft versions:
-
✅
1.18.2
and1.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
, and1.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:
- Paper's async chunk loading reduces lag spikes during player teleports.
CraftBukkit and Spigot do not support async chunk loading from plugins. /anvil
,/grindstone
,/cartographytable
,/loom
,/smithingtable
,/stonecutter
are only supported on Paper.
CraftBukkit and Spigot do not support the API needed for these./recipe
on 1.12+ requires Paper to avoid a dupe bug introduced by CraftBukkit and Spigot.- Paper contains countless overall performance optimisations over CraftBukkit and Spigot.
EssentialsX does not support the following Minecraft versions or server software:
- 🛑 "Ultra-performance" Paper forks including Akarin, Yatopia, and similar projects.
These often perform non-standard behaviour and can break your worlds and installed plugins. - 🛑 Mohist - The Mohist project is known to be sketchy, and has, in the past, tricked users into deleting official EssentialsX jars and installing an unofficial build.
We cannot guarantee the safety or functionality of unofficial builds of EssentialsX; you should avoid using Mohist where possible. - 🛑 Other Forge/Bukkit hybrid servers including Cauldron, Thermos, Magma, CatServer - EssentialsX is built for the Bukkit API, which does not properly support mods.
For modded servers, use SpongeForge and Nucleus, or an alternative mod for Forge or Fabric. - 🛑
1.7.10
or below.
Upgrading to 2.20.0
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.
New module: EssentialsX Discord Link! 🎉
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.
Known issues
Anchor charges deplete on Spigot even when EssentialsX Spawn overrides the spawn location
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.
Minecraft: Trails and Tales content not yet supported in commands
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.
Important changes
Usermap storage and cache changes
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.
New features
EssentialsX now supports 1.19.4
EssentialsX now officially supports CraftBukkit, Spigot and Paper for 1.19.4.
New /renamehome
command
You 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.
New /bottom
command
You can now use /bottom
to teleport to the lowest safe location in their current position.
Discord: New first-join
message type
A 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!"
Discord: New local
, question
, and shout
message types
A 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}"
Discord: Configurable webhook name
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}"
Other additions
- Translations have been updated with the latest community contributions from Crowdin.
- Added tab completions for the
/mail clear
command. - Added the
essentials.nick.hideprefix
permission to hide the nickname prefix for those with it. - Added per command cooldown permissions:
essentials.commandcooldowns.bypass.<command name>
.
Bug fixes
Bugs fixed from 2.19.7 and older versions
- Further duplication glitches were fixed in
/recipe
. - Various performance issues with NPCs and jails have been fixed.
- Playtime statistics in
/whois
no longer overflow. - Various offhand and inventory related issues have been fixed.
- Doubles are now supported for coordinates in the
/tppos
command in the console. - Trade signs no longer accept water bottles as a valid trade for a potion.
- An exception is no longer raised in
/tpoffline
when the player's last location is not known. - Sulk sensors no longer detect vanished players.
- The
/top
command now sends feedback once again. - The
/editsign
command now calls theSignChangeEvent
. - Commands preformed on offline players no longer raise a
NullPoinerException
in some cases. - Discord: The console relay no longer stops working after
/ess reload
in some cases. - Discord: Webhooks should no longer hang the server during shutdown in some cases.
- Discord: Translated Discord command descriptions are now properly truncated to account for Discord character limits.
Regressions fixed from 2.20.0 dev builds
The following bugs from 2.20.0 development builds have been fixed:
- NPC users are once again added to the UserMap properly.
- Servers with large amounts of user data no longer hang for minutes on startup.
- The offhand is no longer used for
/hat
. - The
/createkit
command works on 1.8.8 once again. - Sending a mail to all online players works once again.
- The user map now properly expels users from cache after a while.
- Discord: Webhook names are no longer sanitized for markdown.
- Discord Link: The
/link
Discord command no longer requires administrator privileges. - Discord Link: Synchronizing offline players no longer raises a
NullPointerException
Changes for developers
Viewers can now be modified for DiscordRelayEvent
DiscordRelayEvent
now has a getViewers()
method which returns a mutable list of viewers for the relayed message.
Discord Link Module API
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();
New events
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.
Files
External resources
Featured versions
See allProject members
JRoy
Maintainer
pop4959
Maintainer
mdcfe
Owner