When a plugin or mod runs into a programming error while the server is running, Java writes an error message with a stack trace to the log. The stack trace is the list of “at” lines below the error line. It shows which part of the program was running and so usually reveals the responsible plugin or mod. Most of these errors don't bring the server down, but a feature stops working, and repeated errors flood the console.

Each section below covers one message: what it looks like, what's behind it, and what you can do. You can find the full message in the Console or under Files in logs/latest.log. Also read the lines right before and after it. Before you change configuration or world files or swap out plugins, create a backup under Backups. It's best to replace plugin files while the server is stopped.

NullPointerException: A plugin or mod accesses a missing value

What the message looks like:

java.lang.NullPointerException: Cannot invoke "org.bukkit.inventory.meta.ItemMeta.getDisplayName()" because the return value of "org.bukkit.inventory.ItemStack.getItemMeta()" is null
	at <Plugin>.jar//<Package>.<Class>.<Method>(<Class>.java:<Line>)

What's behind it: A plugin or mod wanted to work with an object that doesn't exist at that point. Java calls this empty value “null”. After “Cannot invoke” comes the method that was called, and after “because” the missing value, in the example the extra data of an item. The “at” lines below are called the stack trace: the chain of calls leading up to the error. The first one names the culprit. The server keeps running, only the affected action is aborted.

How to fix it:

  1. Open the full message in the Console or in logs/latest.log and read the first “at” line.
  2. For plugins, it contains a file name like <Plugin>.jar; for mods, the mod file in square brackets. If it only shows server parts like org.bukkit or net.minecraft, keep reading until the first plugin or mod name.
  3. Update that plugin under Plugins or the mod under Mods. For files you uploaded yourself, replace them under Files in plugins/ or mods/.
  4. If the error remains after the update, report it to the author with the full message and the action that triggers it.

Good to know: If pl:mixin:APP:<mod>.mixins.json appears in the line on mod servers, that mod modified the spot via a mixin (an intervention in other game parts) and is a good second suspect.

“Could not pass event”: A plugin crashes on a game event

What the message looks like:

Could not pass event PlayerInteractEvent to <Plugin> v<Version>
java.lang.NoSuchMethodError: 'java.util.Map org.bukkit.inventory.PlayerInventory.addItem(org.bukkit.inventory.ItemStack[])'
	at <Plugin>.jar//<Package>.<Class>.<Method>(<Class>.java:<Line>)

What's behind it: Plugins react to events such as a player joining, a click in the inventory or damage. If a plugin threw an exception in the process, meaning a Java error that aborts the flow, the server catches it and writes this message. After “to” you see the plugin and version, before it the event. The line below is the decisive one: “NoSuchMethodError” or “NoSuchFieldError” means the plugin was built for a different server version and is looking for a function that doesn't exist in that form. Other error types usually point to a bug in the plugin itself. The server keeps running, but the plugin's function fails for this event.

How to fix it:

  1. In the Console, read the plugin name and version after “to” and the error line directly below.
  2. Check under Version which server version is running, and look on the plugin page for a release that supports exactly this version.
  3. Install the new release under Plugins and restart the server.
  4. If the error remains, report it to the plugin author with the “Could not pass event …” line and the error line below it.

More on “NoSuchMethodError” and “NoSuchFieldError”: Plugin doesn't match the server version.

“Task … generated an exception”: A plugin task fails in the background

What the message looks like:

[<Plugin>] Task #46 for <Plugin> v<Version> generated an exception
java.lang.IllegalArgumentException: missing required data class org.bukkit.Color

What's behind it: Plugins schedule tasks that run regularly, for example showing particles, refreshing holograms or saving data. One of these tasks was aborted with an error. If this happens continuously, often every second, the plugin is usually not compatible with the installed server version. This is typical after a server or plugin update. The server keeps running, but the plugin's function partly fails and the console fills up.

How to fix it:

  1. Read the plugin name after “for” and the error line below it.
  2. Check under Plugins whether a newer release of this plugin exists for your server version, install it and restart.
  3. If there's no matching release, deactivate the plugin temporarily. To do so, move the .jar file under Files from the plugins/ folder into a separate folder and restart. Otherwise the constant error slows the server down.
  4. After the restart, check in the Console that the message no longer appears.

Good to know: If “NoSuchMethodError” or “NoSuchFieldError” appears below the message, it's almost always a version issue. For other error types, report them to the author if the latest release shows them too.

A plugin command or task aborts with an error

What the message looks like:

[Essentials] Command <Command> failed:
[<Plugin>] Plugin <Plugin> v<Version> generated an exception while executing task <Number>
Error executing task on Server

What's behind it: A plugin aborted with an exception during a command or a scheduled task. The three lines above are typical forms of this message. The server keeps running, but the affected plugin function doesn't. The actual cause is in the lines below, for nested errors in the “Caused by” line. If it says “Cannot perform command async”, a plugin triggered a command from a background thread. A thread is a parallel strand of work; however, only the server's main thread may execute commands. That is a bug in the plugin.

How to fix it:

  1. Look below the message for the “Caused by” line or the first line with “Exception” or “Error”.
  2. Identify the plugin: it appears in the message itself or in the “at” lines as <Plugin>.jar.
  3. Update the plugin under Plugins to a release for your server version and restart.
  4. Try the command again. If the error remains, report it to the author with the command, the time and the full message.

Good to know: “NoSuchFieldError” with a particle or attribute name means the plugin uses a name your server version no longer knows. In that case only a newer plugin release helps.

ClassCastException: Two mods or plugins don't fit together

What the message looks like:

java.lang.ClassCastException: class <PackageA>.<ClassA> cannot be cast to class <PackageB>.<ClassB>

What's behind it: Java works with fixed data types. Here a mod or plugin expected an object of a certain type but received a different one from another component. The package names before the class names, such as net.<author>.<mod>, usually reveal which two mods or plugins are involved. This is typical when one mod was updated and a dependent mod wasn't. Often only one function fails, for example loot from chests or a click in the inventory.

How to fix it:

  1. Read both class names in the message and match them to the mods or plugins via the package names.
  2. Check which of the two was updated most recently.
  3. Bring both to matching versions: update both or roll both back to the previous state. The project pages list what fits together.
  4. If a modpack is running, it's better to update the whole modpack rather than individual mods.
  5. Restart and check whether the message comes back during the same action.

More on mod conflicts: Mod errors on Forge, NeoForge and Fabric.

ArrayIndexOutOfBoundsException: Access to a missing list entry

What the message looks like:

java.lang.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3
	at <Plugin>.jar//<Package>.Util.getBukkitVersion(Util.java:<Line>)

What's behind it: A plugin or mod wanted to read an entry from a list that is shorter. Java counts from 0: “Index 3 … length 3” means only entries 0 to 2 exist. Common triggers are a command with too few arguments or a configuration line with missing values. Older plugins also stumble when they read the server version from an internal name that newer server versions structure differently. In that case the “at” line often contains something with “Version”, as in the example. The server keeps running.

How to fix it:

  1. Read the first “at” line below the message. It names the plugin or mod.
  2. If the error occurred with a command, check the plugin's help to see whether an argument is missing.
  3. If you changed the configuration shortly before, compare the affected line with the template on the plugin page or with a backup.
  4. Update the plugin under Plugins and restart. If the error remains, report it to the author.

Help with faulty settings: A plugin's configuration file is faulty.

NumberFormatException: A text should have been a number

What the message looks like:

java.lang.NumberFormatException: For input string: "%vault_eco_balance_fixed%"
java.lang.NumberFormatException: For input string: "craftbukkit"

What's behind it: The game, a mod or a plugin wanted to read a text value as a number, and the text wasn't a number. The quotation marks show what actually arrived. The cause can be a configuration, an unexpected data value or a version or programming error. You can recognize two cases by the value: A placeholder with percent signs like the one above wasn't replaced. Usually the matching expansion for PlaceholderAPI, the plugin that fills such placeholders, is missing, or the plugin that supplies the value. A word like craftbukkit indicates that an older plugin reads the server version incorrectly.

How to fix it:

  1. Check the full stack trace and update the component named there.
  2. For a placeholder: test in-game with /papi parse me <placeholder> whether it returns a value. If not, install the matching PlaceholderAPI expansion, for example with /papi ecloud download <Name>, and load it with /papi reload.
  3. If the message names a file or setting, compare the value with the plugin's default configuration.
  4. Restart and trigger the action again.

ArrayIndexOutOfBoundsException without further details

What the message looks like:

[<Plugin>] Error occurred while loading item: 2
java.lang.ArrayIndexOutOfBoundsException

What's behind it: A plugin or mod used an invalid list index, as in the previous section. Here, however, the index and length are missing. This happens when the same error occurs very often: Java then omits the details for performance reasons. The line before often reveals which plugin was trying to do what, in the example loading an entry. The first stack trace line below, if present, names the culprit.

How to fix it:

  1. Read the line directly before the message. The plugin is often shown there in square brackets.
  2. Read the first stack trace line below the message.
  3. If both are missing, look further up in logs/latest.log for the first occurrence. The error is usually still complete there. Older logs are stored compressed in the logs/ folder.
  4. Update the plugin or mod named first. If the line before names a specific entry, check it in the plugin's configuration.
  5. If the error remains, report it to the author.

ExceptionInInitializerError: A plugin or mod class can't be initialized

What the message looks like:

Exception in thread "ForkJoinPool-3-worker-1" java.lang.ExceptionInInitializerError
Caused by: <Error type>: <Message>

What's behind it: Java initializes each class, meaning each building block of a program, once on first use. A class of a plugin or mod crashed exactly during this step. Afterwards it remains unusable for this server run, which is why further errors like “NoClassDefFoundError” with the same class name often follow. The actual cause, and usually the affected plugin or mod too, is named by the “Caused by” chain below. Depending on where it happens, a function fails or the plugin or mod doesn't load at all.

How to fix it:

  1. In the Console or in logs/latest.log, read the first “Caused by” line below the message.
  2. From the “at” lines below, identify the plugin or mod, for example by the file name ending in .jar.
  3. Update it or replace it with a release that matches your server version and your server software.
  4. Restart the server. The class is only initialized again on the next start.

For version questions, this helps: Plugin doesn't match the server version.

Internal error in a plugin, for example while saving

What the message looks like:

[MultiWorld] ERROR HAPPEND: <Message>
Unable to save player profile for <Player>
<Plugin> v<Version> generated an exception whilst handling plugin message

What's behind it: A plugin ran into an error during one of its own tasks, for example when saving, processing a message or starting up. Plugin messages are data packets that, for example, a proxy like BungeeCord or Velocity exchanges with the server. The message shows the plugin's name in square brackets or at the start of the line. Depending on the error, only this action fails or the plugin shuts itself down. If it's about saving, deal with it promptly so no data is lost.

How to fix it:

  1. In the Console, read the plugin name and the lines directly below the message.
  2. Update the plugin under Plugins and restart.
  3. If the error remains, create a backup, remove the plugin as a test and check whether the message disappears.
  4. Report the error to the plugin author with the lines from the console.

If saving fails repeatedly: Plugin can't save to the database or files.

Skript error report with #!#!: a script doesn't load

What the message looks like:

#!#! Current node: <Line from the .sk file>
#!#! End of Error.

What's behind it: Skript is a plugin that lets you write server functions in simple text files with the .sk extension. If it detects a serious error while loading a script or an addon, it writes a report whose lines all begin with #!#!. Common causes: An addon like skript-reflect or SkBee doesn't match the installed Skript version, or a plugin file was replaced while the server was running. In that case “zip file closed” appears in the report. The affected script doesn't work, the server keeps running.

How to fix it:

  1. In the report, read the “Current node” line (it names the affected .sk file) and the “Caused by” line.
  2. Check on the project pages which addon versions match your Skript version, and bring Skript and addons to matching releases.
  3. Replace plugin files only while the server is stopped and restart the server afterwards.
  4. Load the script with /sk reload <file> and read the output in the Console.

Good to know: The scripts are located under Files in the folder plugins/Skript/scripts/. Back up a file before you change it.

IndexOutOfBoundsException: “must be less than size”

What the message looks like:

Caused by: java.lang.IndexOutOfBoundsException: index (1) must be less than size (1)

What's behind it: The game, a mod or a plugin requested a list entry that doesn't exist. “index (1) must be less than size (1)” means: The list has exactly one entry, number 0, but number 1 was requested. A configuration may be involved, but the message alone doesn't prove that. If “Caused by:” precedes it, it is the cause of an error reported further up. What fails is shown by that upper message.

How to fix it:

  1. Read the full stack trace in logs/latest.log, including the error message above it.
  2. Look for the first “at” line that names an external component, meaning a plugin or mod rather than Java or a library such as java.base or com.google.common.
  3. Update that component and restart.
  4. Only if the context points to a specific list, such as menu entries or rewards, check its configuration for missing or empty entries.

“Asynchronous Save Players”: A plugin saves from the wrong thread

What the message looks like:

Asynchronous Save Players! Blocking thread until it returns
java.lang.IllegalStateException
	at io.papermc.paper.util.MCUtil.ensureMain(MCUtil.java:<Line>)

What's behind it: A plugin triggered the saving of all player data from a background thread, meaning a parallel strand of work alongside the main thread that calculates the world. This isn't intended. Paper blocks the thread until saving is done and writes this warning. This is a bug in the plugin that can cause short stutters. The server keeps running.

How to fix it:

  1. Read the “at” lines below the message. The first ones belong to Paper and Minecraft (io.papermc, net.minecraft); you're looking for the first “at” line that names a plugin.
  2. Update that plugin under Plugins and restart.
  3. If the warning remains, report the error to the plugin author with the full message.

Good to know: A single warning is nothing to worry about. If it appears regularly and players notice stutters, the update is worth it.

“Unhandled exception executing command”: A plugin command aborts

What the message looks like:

org.bukkit.command.CommandException: Unhandled exception executing command '<befehl>' in plugin <Plugin> v<Version>
Caused by: <Error type>: <Message>

What's behind it: A plugin threw an error while executing one of its commands. The command and plugin are named in the message. Usually the plugin doesn't match the server version or another plugin it depends on. Whoever entered the command usually only sees a general notice about an internal error in chat. The command wasn't executed, the server keeps running.

How to fix it:

  1. Read the “Caused by” line below the message.
  2. Check your server version under Version and update the plugin under Plugins to a release for it.
  3. If the error line names another plugin that this plugin depends on, bring that one to a matching version as well.
  4. Restart and test the command. If the error still occurs, report it to the plugin author with this line.

More on dependencies: Plugin needs another plugin.

Command error with “[ACF]” in the log

What the message looks like:

[<Plugin>] [ACF] Exception in command: <befehl>
[<Plugin>] [ACF] java.lang.NoSuchMethodError: <Method>

What's behind it: Many plugins build their commands with a ready-made library, the Aikar Command Framework (ACF). If a command aborts with an exception, ACF prints the error including the stack trace, each line prefixed with the plugin name. The name in the first bracket is therefore the affected plugin, not ACF. If “IncompatibleClassChangeError” or “NoSuchMethod” appears in the output, the plugin doesn't match the server version. The command wasn't executed, the server keeps running.

How to fix it:

  1. Read the plugin name in the first square bracket and the first error line with “Exception” or “Error”.
  2. Update the plugin under Plugins to a version for your server version.
  3. Restart and test the command.
  4. If the error remains, report it to the plugin author with the first error line.

Good to know: You don't have to install or update ACF yourself. It's bundled inside the respective plugin.

GravesX: Error in a background task

What the message looks like:

[GravesX] Async task for GravesX v<Version> generated an exception
java.lang.NullPointerException: Cannot invoke "<Method>" because "version2" is null

What's behind it: When a player dies, GravesX creates a grave containing their items. The plugin throws a NullPointerException in a background task, for example when comparing two version numbers when a value (“version2”) is missing. This is a bug in the plugin itself, not a server or hosting problem. The server continues to run normally.

How to fix it:

  1. Update GravesX under Plugins to the latest version and restart.
  2. Check in the Console whether the message comes back.
  3. If the error persists, report it to the GravesX project with the full message.
  4. If you want to deactivate the plugin as a test until a fix is available, have open graves emptied first. Without the plugin, they can't be opened as usual.

FastAsyncWorldEdit: Command failed internally

What the message looks like:

An unexpected error while handling a FastAsyncWorldEdit command
java.lang.NullPointerException

What's behind it: FastAsyncWorldEdit (FAWE) is a fast variant of WorldEdit that lets you edit large areas at once. During a command, FAWE ran into a missing value. The operation wasn't fully carried out, so the change may only have reached the world partially. The server keeps running.

How to fix it:

  1. Check in-game what the command changed. With //undo you can revert the last step if needed.
  2. Update FAWE under Plugins to a release for your server version and restart.
  3. Run the command again.
  4. If the error remains, report the full stack trace with the exact command to the FAWE developers.

Basics on undoing: WorldEdit: building and undoing.

Good to know: Don't install FAWE in addition to regular WorldEdit. The two don't get along together; use only one.

LibreLogin: Command failed internally

What the message looks like:

[LibreLogin] An unexpected exception occurred while performing command …

What's behind it: LibreLogin is a login plugin: players sign in with a password, often on servers in offline mode. While executing one of its commands, for example to log in or register, it aborted with an unexpected exception. For the player, the command fails. If it affects logging in, they can't proceed until the command works again. The server itself keeps running.

How to fix it:

  1. In the Console, read the exception below the message and note which command it was.
  2. Update LibreLogin under Plugins and restart.
  3. Test the command again with a player.
  4. If the error remains, report the exception along with the command to the plugin author.

If the exception names a database: Plugin can't open its database.

LibreLogin: Network handler is registered twice

What the message looks like:

java.lang.IllegalArgumentException: Duplicate handler name: pe-decoder-librelogin

What's behind it: Every player connection runs through a chain of processing steps, the network pipeline. LibreLogin or the PacketEvents library tries to add the same step, a decoder for incoming data, a second time. New connections can then fail. Typical triggers are two LibreLogin files in the plugin folder, mismatched versions of LibreLogin and PacketEvents, or reloading plugins while the server is running.

How to fix it:

  1. Under Files, open the plugins/ folder and check that LibreLogin is present only once. Remove older copies after creating a backup.
  2. Update LibreLogin and, if installed, PacketEvents together.
  3. Stop the server and restart it completely. Reloading with /reload or a plugin manager isn't enough here.
  4. Test joining with a player.

More on duplicate files: Plugin file is corrupted or duplicated.

LightAntiCheat-Plus: Error in a movement check

What the message looks like:

[LightAntiCheat-Plus] Exception in event bus subscription: <Check>
java.lang.UnsupportedOperationException: remove

What's behind it: LightAntiCheat-Plus is an anti-cheat plugin that, among other things, checks player movement. One of its checks tries to clear a list that can't be modified. This is a bug in the plugin. The affected check may fail or deliver wrong results, meaning it overlooks cheats or wrongly suspects honest players. The server keeps running.

How to fix it:

  1. Update LightAntiCheat-Plus under Plugins and restart.
  2. If the message continues, disable the affected SpeedD check in the plugin's configuration until a fix is available. You can find it under Files in the plugin's folder under plugins/. Back up the file first.
  3. Restart and check in the Console that the message no longer appears.
  4. Turn the check back on as soon as a corrected release is available.

Good to know: As long as the message appears, treat movement-based suspicions with caution.

MagicSpells reports an error with a spell

What the message looks like:

[MagicSpells] AN EXCEPTION HAS OCCURED:
[MagicSpells] This error has been saved in the errors folder.
Error saving spellbook for player '<Player>'

What's behind it: MagicSpells is a plugin for custom spells. It reports an error when casting or saving spells, often because of an entry in its configuration that this version doesn't understand. The effects run through the EffectLib library; messages with “Unexpected EffectLib Error” concern these effects. In addition, MagicSpells stores a report in the plugins/MagicSpells/errors folder. If saving the spellbook fails, that player's progress isn't saved.

How to fix it:

  1. Under Files, open the folder plugins/MagicSpells/errors and the newest report. It names the spell and the setting.
  2. Check this setting in your spell files, for example for typos or values from an older MagicSpells version. Back up the file first.
  3. Keep MagicSpells and EffectLib up to date and matching the server version.
  4. Restart and test the spell.

SinglePlayerSleep: Sleeping in a bed doesn't work

What the message looks like:

[SinglePlayerSleep] INTERNAL ERROR: Unable to process PlayerBedEnterEvent

What's behind it: SinglePlayerSleep lets the night pass when a single player sleeps, instead of everyone having to go to bed. The plugin crashed when a bed was entered. The sleep function may fail for that attempt, and the night isn't skipped. Usually the plugin release doesn't match the Minecraft version. The server keeps running.

How to fix it:

  1. Check under Version which Minecraft version is running.
  2. Update SinglePlayerSleep under Plugins to a release for that version and restart.
  3. Test in-game: lie down in a bed at night and check whether the night passes.
  4. If the error remains, report the exception below the message to the plugin author.

More on this: Minecraft game rules explained.

Good to know: Newer Minecraft versions have their own game rule for what percentage of players must sleep. It can replace the plugin.

PacketEvents can't hook into the connection

What the message looks like:

PacketEvents failed to add a decoder to the netty pipeline

What's behind it: PacketEvents is a library through which other plugins, such as anti-cheat or login plugins, read network packets. To do this, it inserts its own step, a decoder, into each connection's network pipeline. Netty is the network library the server uses to handle connections. Inserting it failed: Another network handler or an incompatible PacketEvents version blocks the expected order. Plugins built on PacketEvents then don't work properly for this connection.

How to fix it:

  1. Update PacketEvents, Geyser and Floodgate as well as login and anti-cheat plugins together to releases for your server version.
  2. Under Files in the plugins/ folder, check that no file is present twice.
  3. Stop the server and restart it completely, without reloading while it's running.
  4. Test joining with Java and, if you use Geyser, also with Bedrock.

For Bedrock players: Bedrock and Geyser: Messages in the log.

StringIndexOutOfBoundsException: empty or too short text value

What the message looks like:

java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0

What's behind it: A plugin or mod wanted to read a specific character from a text, for example the first character of a prefix. But the text is shorter, with “length 0” even empty. Often an expected configuration value is empty, such as a prefix, a color value or a name that is entered only as ''. The server keeps running; the function that needs the text fails.

How to fix it:

  1. In the stack trace, read the first line with a plugin or mod name.
  2. Under Files, open that plugin's configuration in the plugins/<Plugin>/ folder and look for empty values like '' or entries without a value. Back up the file first.
  3. Enter a valid value or take over the default value from the plugin's template.
  4. Update the plugin and restart.

More on faulty settings: A plugin's configuration file is faulty.

“NoSuchFieldException: childHandler”: Network plugin doesn't match the server

What the message looks like:

java.lang.NoSuchFieldException: childHandler

What's behind it: Netty is the network library the server uses to accept connections. Some plugins access internal parts of it directly in order to hook into connections. Here a network plugin is looking for the internal field “childHandler”, which isn't available in the installed server or Netty version. So the plugin was built for a different server build. Network, proxy or protocol plugins are usually affected; their function fails.

How to fix it:

  1. Read the stack trace below the message and look for the first network, proxy or protocol plugin, for example ViaVersion, ProtocolLib or Geyser.
  2. Check under Version which server version is running. The exact release of the server software (build) is also shown in the first lines of logs/latest.log.
  3. Update the plugin you found to a version for this server build and restart.
  4. If there's no matching release yet, deactivate the plugin temporarily until the author catches up.

In detail: Plugin doesn't match the server version.

Tab-completion suggestions for a plugin command fail

What the message looks like:

Unhandled exception during tab completion for command '<Command>' in plugin <Plugin>

What's behind it: When you press Tab, Minecraft asks the responsible plugin for possible completions. The plugin's suggestion function fails during this request. The server keeps running, but suggestions for the affected command are unavailable. The error trace below the message, called a stack trace, lists the program calls involved.

How to fix it:

  1. Read the complete message in the Console or open logs/latest.log under Files. Note the plugin, the command, and the first specific error below it.
  2. Check your server version under Version and install a compatible release of the named plugin under Plugins.
  3. Fully restart the server and try tab completion for the same command again.
  4. If it still fails, send the complete trace to the plugin author and describe exactly where suggestions stop working.

StackOverflowError while evaluating a search rule

What the message looks like:

Exception in thread "<BackgroundTask>" java.lang.StackOverflowError

What's behind it: A regular expression is a text-search rule, for example in a command filter. Java needs too many nested calls to evaluate this rule and exhausts the call stack. The named background task ends with its work incomplete; the server keeps running. StackOverflowError is different from running out of Java heap memory.

How to fix it:

  1. Open the complete trace in the Console or read logs/latest.log under Files. Use the thread name and any plugin calls to identify the responsible plugin.
  2. Back up its settings and check configurable search or command rules. Simplify the triggering rule if you configured it yourself.
  3. Update the plugin under Plugins to a compatible release and fully restart the server.
  4. If the rule is built in, send the author the complete trace and the input that triggers the failure.

Paper blocks entity creation from a background thread

What the message looks like:

Thread <Thread> failed main thread check: entity add

What's behind it: Paper checks that changes to the game world run on the correct thread. A thread is a separate execution path within the program. Here, a background task tries to add an entity to the world and is stopped by the safety check. The affected action fails; the server keeps running.

How to fix it:

  1. Open the complete trace in the Console or read logs/latest.log under Files. A shortened message often contains only server calls.
  2. Continue to the first plugin call and note which action triggered the error.
  3. Install a release of that plugin compatible with your server version under Plugins, then fully restart the server.
  4. If the error continues, report it to the plugin author with the complete trace. The plugin call needs to run on the correct thread.

Good to know: Keep the safety check enabled. Disabling it does not fix the incorrect access to the world.

Your message isn't listed?

Read the whole message, including the lines before it. They often show what the plugin was trying to do. In the stack trace, the file names in the “at” lines, such as <Plugin>.jar, and the package names reveal the plugin or mod. Lines with java.base, net.minecraft, org.bukkit or io.papermc belong to Java and the server. Create a backup, update the culprit and restart. If you get stuck, open a ticket and include the time of the message.