What does this error mean?
Paste the line from your log, or search by what happened. Open an error to read the fix.
Players can't join your server
JOIN-001Connection timed outConnection timed out: no further information
Failed to connect to the server io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection timed out: no further information: /203.0.113.7:25565
What it means
The player's game sent a connection request and heard nothing back at all. Nobody refused it; it simply never arrived, or the answer never made it home. That points at something between the player and your server dropping the traffic, not at Minecraft itself: a router with no forwarded port, a firewall, the wrong address, or an ISP that never gives your home a public address.
If the message says "Connection refused" instead, that is a different problem; see Connection refused: no further information.
How to find which one it is
- Is the server actually running? Join it yourself first, from the same PC, with the address
localhost. If that fails, nothing on this page applies yet; fix the server first. - Which address are they typing? Friends on your Wi-Fi use your local address (like
192.168.1.42). Anyone elsewhere needs your public IP, or a name that points at it. Your local address never works from outside, and your public address often does not work from inside your own house, so test with a friend or a phone on mobile data, not with your own PC. - Is the port forwarded? Your router drops unsolicited traffic unless you tell it to pass port 25565 (or your
server-port) to this PC. In Coalstack, open the server's Port Forwarding tab to ask your router to do it over uPnP; otherwise follow the port forwarding guide. Forward TCP, to the PC's local address, and give that PC a fixed local address in your router so the rule doesn't go stale. - Is the firewall letting Java in? On Windows, allow
java.exeandjavaw.exeon both Private and Public networks. Coalstack's uPnP tool adds a firewall rule for you. - Does your home even have a public address? Compare the WAN or Internet address shown in your router's status page with the address a "what is my IP" website reports. If they differ, or the router's address starts with
100.64to100.127or is a private address, your provider is sharing one public address between many homes (CGNAT) and port forwarding cannot work. Ask your ISP for a public address, or host somewhere that has one.
Your public IP can change. If it worked last week and not today, a custom domain gives friends one address that keeps working. If you use a Coalstack domain and the server is stopped, the name deliberately points at a placeholder, so a timeout there usually just means the server isn't running.
JOIN-002Connection refusedConnection refused: no further information
Failed to connect to the server io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection refused: no further information: /203.0.113.7:25565
What it means
Unlike a timeout, this one means an answer came back, and the answer was "no". The player's traffic reached a machine, and that machine told it that nothing is accepting connections on that port. So the network path mostly works; what is wrong is what sits at the other end.
How to fix it
- The server isn't running. The most common cause by far. Start it and wait for the "Done" line in the console before sending anyone to join.
- Wrong port. If
server-portinserver.propertiesisn't 25565, players must add it:your-address:25566. If you changed it recently, make sure the port forward was changed too. - The server failed to claim its port. Look for a "FAILED TO BIND TO PORT" line in the log; see FAILED TO BIND TO PORT.
- The server is listening on the wrong address. Leave
server-ipinserver.propertiesempty unless you know you need it. A value there makes the server listen on one address only. - A firewall is actively rejecting it. Allow Java through the firewall; see the last steps of Connection timed out.
- Different machine than you think. If the address is your public IP and your router answers "refused" itself, the port isn't forwarded to the PC running the server.
JOIN-003Unknown hostjava.net.UnknownHostException (Unknown host)
Failed to connect to the server io.netty.channel.AbstractChannel$AnnotatedConnectException: java.net.UnknownHostException: play.example.com
What it means
The player typed a name (like play.example.com) and their computer could not turn it into an IP address. Nothing was even sent to your server. It is purely a naming problem, which also means it can't be a port forward or firewall problem.
How to fix it
- Check the spelling, including the ending (
.netversus.org). Copy and paste the address rather than retyping it. Stray spaces count. - Check the name exists. From a Command Prompt, run
nslookup your-name.example.com. "Non-existent domain" means the record isn't there: it was never created, or the domain lapsed. - Give new records time. A just-created or just-changed record can take from a few minutes to a few hours to reach everyone, and a failed lookup can be remembered for a while. Restarting the game or flushing the DNS cache (
ipconfig /flushdns) helps. - Custom port? A plain name can only point at the default port automatically if you add an SRV record. Otherwise players type
name:25566. The dynamic DNS guide covers both. - The player's own network may be the problem. If other websites also fail to load for them, it is their internet connection, not your server.
JOIN-004Not white-listedYou are not white-listed on this server!
You are not white-listed on this server! [Server thread/INFO]: Disconnecting Notch (/203.0.113.7:51234): You are not white-listed on this server!
What it means
The server reached the player, accepted their login, and then turned them away because the whitelist is on and their name isn't on it. This one isn't a network fault: the connection worked.
It often catches people out on a fresh server. Recent Minecraft versions ship with the whitelist already switched on, so a brand-new server refuses everyone, including your friends, until you either add them or turn it off.
How to fix it
- Add the player. In the server console run
whitelist add PlayerName. It takes effect immediately. - Or turn the whitelist off if the server is for friends and you'd rather not manage a list: run
whitelist off, and setwhite-list=falseinserver.propertiesso it stays off after a restart. - In Coalstack the list lives on the server's Whitelist & Bans page. New Java servers made on 0.6.8 or later start with the whitelist off, with a checkbox in the New Server wizard if you want it on, and you get a notification naming anyone turned away.
- Spelling counts. Add the name exactly as the player's account is spelled. If the server runs with
online-mode=false, the whitelist matches an offline identity that differs from their real account, so a list built one way stops working when you switch the other.
Don't open a public server without a whitelist while online mode is also off; that combination lets anyone join as anyone.
JOIN-005Outdated server / clientOutdated server! / Outdated client!
Outdated server! I'm still on 1.21.4 Outdated client! Please use 1.21.4 Incompatible client! Please use 1.21.4
What it means
Minecraft only lets a game join a server of the same version. The message names the version the server is on: "Outdated client" means the player is behind it, "Outdated server" means the server is behind the player. The network is fine; the two just don't speak the same protocol.
How to fix it
- Switch the player's version. In the launcher, make a profile for the exact version the message names. That is the quickest fix for one player.
- Or move the server. Upgrade it to the newer version, or create a new server on the version your players have. Take a backup before upgrading, since worlds can't be taken back to an older version.
- Modded servers are stricter. Everyone needs the same Minecraft version, the same loader (Fabric, Forge, NeoForge) and the mods the server requires. See modded server setup.
- Let several versions in. On a Paper or Spigot-family server, the ViaVersion plugin lets newer clients join an older server, and ViaBackwards lets older ones join a newer server. It isn't perfect, and it doesn't apply to vanilla or modded servers.
- Bedrock says the same thing when a phone, console or PC is on a different release than the dedicated server. Update the server, or the game, until they match. For Java players joining a Bedrock-side world, see the crossplay guide.
JOIN-006Failed to verify usernameFailed to verify username! / Invalid session
Failed to verify username! Invalid session (Try restarting your game and the launcher) Authentication servers are down. Please try again later, sorry!
What it means
With online-mode=true, the default, the server asks Mojang's login service to confirm that each player really owns the account they claim. "Failed to verify username" means that check didn't succeed. "Invalid session" is the same thing seen from the player's side: their game has no valid login to prove.
How to fix it
- Restart the game and launcher, and sign in again. This clears most "Invalid session" cases, especially after the launcher has been open for days.
- Check whether Mojang's login service is down. If it is, nobody can join an online-mode server until it recovers. Wait a few minutes and try again.
- Check the server's clock and internet. The server has to reach Mojang to verify anyone. A badly wrong system clock or a blocked outbound connection from the server's PC causes failures for every player at once.
- Is it a non-purchased or modified launcher? Those accounts can't be verified, so an online-mode server will refuse them by design.
The tempting shortcut is to set online-mode=false. It works, but it switches off account checking entirely: anyone can join under any name, including yours or an operator's. If you must use it, keep the whitelist on and don't expose the server publicly, and expect player data to move, since offline players get different identities.
JOIN-007Unable to connect to worldUnable to connect to world (Bedrock)
Unable to connect to world. Unable to connect to world. Please try again.
What it means
This is Bedrock's catch-all message for "the server didn't answer". It covers the same ground as Java's timeout and refused errors, plus version mismatches, so there is no single cause. Work through the list from the cheapest check to the hardest.
How to fix it
- Is the server running? Check the console shows it started.
- Same version? Bedrock servers only accept the same release as the game. Update whichever is behind. See Outdated server / client.
- Is the address entered correctly? In Minecraft, Play, Servers, Add Server, put the address in the address box and the port (19132 by default) in the separate port box. Don't type
address:portinto the address box. - From outside your network, are the ports open? A Bedrock server needs a TCP port plus a block of UDP ports. Open the server's Port Forwarding tab and Coalstack forwards both over uPnP, or forward them by hand with the port forwarding guide.
- Firewall. Allow
bedrock_server.exeon Private and Public networks. - Joining from the same Windows PC? Minecraft has to be exempted from the loopback restriction. The Bedrock server guide has the one-line command.
- Allowlist. A fresh Bedrock server can ship with an empty allowlist, which admits nobody. Add players by gamertag or turn it off.
- Consoles mostly can't add a server by address at all; that is a limit of the console version, not the server.
The server couldn't claim its port
COAL-002Port already in usejava.net.BindException: Address already in use
[Server thread/WARN]: **** FAILED TO BIND TO PORT! [Server thread/WARN]: The exception was: java.net.BindException: Address already in use: bind [Server thread/WARN]: Perhaps a server is already running on that port?
What it means
Only one program at a time can listen on a given TCP port. Something else on this machine already owns port 25565 (or whatever server-port is set to), so the new server process cannot claim it and shuts down immediately. Nine times out of ten the culprit is a previous copy of the same server that never fully exited.
How to fix it
- Look for a leftover server first. Check Task Manager for a
java.exeorjavaw.exeprocess and end it. A window closed with the X button rather than thestopcommand often leaves one running. - Find the owner on Windows: run
netstat -ano | findstr :25565in Command Prompt. The last column is the PID - match it in Task Manager's Details tab. - Find the owner on Linux:
sudo ss -lptn 'sport = :25565'. - Or move the server. Change
server-portinserver.propertiesto something free like 25566, forward the new port, and have players connect withyour-ip:25566.
This is the same underlying situation as COAL-015, reported by a different part of the startup sequence.
COAL-015Failed to bind to portFAILED TO BIND TO PORT
[Server thread/WARN]: **** FAILED TO BIND TO PORT! [Server thread/WARN]: The exception was: java.net.BindException: Address already in use: bind [Server thread/WARN]: Perhaps a server is already running on that port?
What it means
On startup the server claims its port so it can accept connections. This message means the claim was refused. Almost always that is because another process already holds the port - see COAL-002 for finding and freeing it - but two other causes are worth knowing.
How to fix it
- Something else has the port. The common case: kill the leftover
javaprocess, or changeserver-port. - The configured
server-ipdoes not exist on this machine. If it is set to an address this machine does not hold - a public IP on a NATed VPS, or a stale LAN address - the bind fails. Leaveserver-ipblank; that is the correct value for nearly every server and means "listen on everything". - Permission on a low port. On Linux, ports below 1024 require root. Stay on 25565 or another high port.
This error is about the local machine only. If the server starts fine and players still cannot connect, that is a port forwarding problem instead - see the port forwarding guide.
It ran out of memory, or Java wouldn't start
COAL-001Out of memoryjava.lang.OutOfMemoryError: Java heap space
[Server thread/ERROR]: Encountered an unexpected exception java.lang.OutOfMemoryError: Java heap space
What it means
The server asked Java for more memory and there was none left inside the heap it was given at startup. This is not about how much RAM your machine has - it is about the ceiling set by the -Xmx flag the server was launched with. Once the server reaches that ceiling the JVM throws this error, and the server usually dies within seconds.
It shows up in one of two situations: the allocation was simply too small for the pack and player count, or a mod is leaking memory and would eventually fill any allocation you gave it.
How to fix it
- Raise the allocation. Rough guide: 2-3 GB for vanilla with a few friends, 4-6 GB for a light mod list, 8 GB or more for a large modpack. In Coalstack that is the Memory Allocation slider on the Server page's Performance tab; by hand it is the
-Xmx6Gvalue in your start script. - Do not allocate everything. Leave at least 2 GB for the operating system. Giving an 8 GB machine an 8 GB heap makes crashes more likely, not less.
- Check whether it climbs back up. If the server runs out again a few hours after every restart no matter how much you give it, that is a leak in a mod rather than an allocation problem. A healthy server's memory use sawtooths as garbage collection runs; a leaking one only ever goes up.
- Suspect the heavy mods first. World-generation mods, dynamic maps, and chunk pregenerators are the usual causes. Remove recently added ones one at a time.
If you are running 32-bit Java you cannot allocate more than roughly 1.5 GB no matter what you set - install a 64-bit JDK, which the Java version guide walks through.
COAL-003Couldn't reserve heap spaceCould not reserve enough space for object heap
Error occurred during initialization of VM Could not reserve enough space for 8388608KB object heap
What it means
This happens before Minecraft even loads. The JVM tries to reserve the whole heap up front, the operating system refuses, and Java exits instantly. Note the difference from COAL-001: there the server ran and later filled its heap, here it never started because the heap could not be handed out in the first place.
How to fix it
- Lower the allocation to something the machine can actually spare. On 8 GB of RAM, ask for 4-6 GB, not 8.
- Close other memory users - a Minecraft client on the same machine easily takes 2-4 GB by itself.
- Check you are on 64-bit Java. Run
java -version; if it does not say 64-Bit, that is your ceiling, and no amount of free RAM will get you past roughly 1.5 GB. - On a VPS, check the plan's real memory. A 2 GB instance cannot host a 4 GB heap even though the numbers look close.
COAL-012JVM native crashA fatal error has been detected by the Java Runtime Environment
# # A fatal error has been detected by the Java Runtime Environment: # # SIGSEGV (0xb) at pc=0x00007f9c8a1b2c40, pid=3412, tid=3419 # # An error report file with more information is saved as: # /home/mc/server/hs_err_pid3412.log
What it means
This is a level below a normal Minecraft crash: the Java process died at the native level, so there is no Java stack trace and no crash report. On Windows the same thing appears as EXCEPTION_ACCESS_VIOLATION. The causes are native code (a mod shipping its own compiled library), a faulty JVM install, or failing hardware.
How to fix it
- Open the
hs_err_pid*.logthe message points to. The "Problematic frame" line near the top names the library that crashed - if it is a.dllor.sobelonging to a mod, that is your answer. - Update or reinstall Java. Use a current LTS build (Temurin 17 or 21, matching your Minecraft version). A half-installed or very old JVM causes this more often than people expect.
- Remove recently added mods one at a time, starting with anything that does hardware-adjacent work.
- If the crash moves around at random, test your RAM with MemTest86. A native crash with no consistent frame is a classic bad-memory symptom, especially on a machine that also misbehaves outside Minecraft.
A mod is missing, duplicated, or in the wrong place
COAL-006Missing mod dependencyMissing or unsupported mandatory dependencies
Missing or unsupported mandatory dependencies: Mod ID: 'jei', Requested by: 'somemod', Expected range: '[15.2,)', Actual version: '[MISSING]'
What it means
Mods declare what they need. This message is the loader listing the requirements it could not satisfy, and it is unusually helpful: each row names the mod that is missing (Mod ID), the mod that wants it (Requested by), the version range that would work (Expected range), and what is actually installed (Actual version, where [MISSING] means nothing at all).
How to fix it
- If Actual version is
[MISSING], install the named mod. Search the Mod ID on Modrinth or CurseForge and take the build for your exact Minecraft version and loader. - If a version is listed but out of range, you have the right mod at the wrong version - update or downgrade it into the expected range.
- Or remove the requesting mod if you do not actually want it. The
Requested bycolumn tells you which one to pull. - Fix every row before restarting. The list is complete, so there is no reason to discover the next one on the next boot.
The Fabric equivalent of this message is COAL-019.
COAL-007Fabric Loader refused to startnet.fabricmc.loader.impl.FormattedException
Exception in thread "main" net.fabricmc.loader.impl.FormattedException: Incompatible mod set! at net.fabricmc.loader.impl.FabricLoaderImpl.load(FabricLoaderImpl.java:216)
What it means
Fabric Loader checked your mod set, decided it could not be loaded, and stopped. This exception is the stop itself, not the reason. Fabric always prints the reason in plain English immediately above this line - a missing dependency, a version conflict, or a duplicate mod.
How to fix it
Scroll up until you find the human-readable block Fabric printed just before this. It normally reads as a bullet list of unmet requirements, sometimes followed by a suggested fix. Work from that, not from this exception. The likely targets:
COAL-008Duplicate modDuplicate mod
[main/ERROR]: Found duplicate mods: sodium: sodium-fabric-0.5.8.jar, sodium-fabric-0.6.0.jar
What it means
Every mod claims a unique ID, and two files in the mods folder are claiming the same one. The loader will not guess which you meant. In practice this is either an old version you forgot to delete when updating, or the same jar downloaded twice under names like somemod.jar and somemod (1).jar.
How to fix it
- Delete the older jar. The error names both files - keep the newer, remove the other.
- Sort the mods folder by name and look for near-identical pairs and any
(1)suffixes. Dragging in an update without deleting the old jar is the most common way to land here. - Check for a nested copy. A mod shipped inside a modpack plus one you installed manually counts as two.
- Never rename a jar to disable it. Renaming to
somemod.jar.disabledworks; renaming tosomemod-old.jarleaves it fully active.
COAL-009Class not found (NoClassDefFoundError)java.lang.NoClassDefFoundError
java.lang.NoClassDefFoundError: net/minecraft/client/Minecraft at com.example.somemod.SomeClass.<init>(SomeClass.java:42)
What it means
Code tried to use a class that was not on the classpath when it ran. The class name after the colon is the missing piece and the most useful thing on the line - read it before anything else. A path starting with net/minecraft/client/ means a mod is reaching for client-only code that a dedicated server does not ship at all.
How to fix it
- If the class is under
org/lwjgl, you have a client-only mod on the server - COAL-017 covers that case in full. - If it is under
net/minecraft/client, same story: the mod named in the stack trace below the error is client-side only. Remove it from the server's mods folder. - Otherwise it is a missing library. The package name usually gives away which mod owns it - install that library mod at a version matching your Minecraft version.
- Check for a version mismatch. A class that exists but moved between versions produces this too, so make sure every mod targets your exact Minecraft version.
COAL-010Class not found (ClassNotFoundException)java.lang.ClassNotFoundException
Caused by: java.lang.ClassNotFoundException: com.example.somelib.SomeClass at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:641)
What it means
A class was requested by name and the loader could not find it. For server troubleshooting this is the same situation as COAL-009 - the difference is only in how the lookup was made, and it very often appears as the Caused by: line underneath one.
How to fix it
Fix it as you would COAL-009: work out what the missing class belongs to, then install the mod or library that provides it, at a version matching your Minecraft version and loader.
- A package under
net/minecraft/clientororg/lwjgl: a client-only mod is on the server. - A recognisable library name: install that library mod.
- A mod you just updated: it likely needs a newer version of one of its dependencies.
COAL-011Mixin failed to applyMixin apply for mod failed
[main/ERROR]: Mixin apply for mod somemod failed org.spongepowered.asm.mixin.injection.throwables.InjectionError: Critical injection failure
What it means
Mixin is how most modern mods modify Minecraft: at load time they patch specific methods in the game's own code. Those patches are written against one exact version. If the method moved, changed shape, or vanished - because you are running a different Minecraft version than the mod was built for - the patch cannot be applied, and the mod aborts the launch rather than run half-patched.
How to fix it
- The mod ID is in the message -
somemodin the example above. That is your culprit; there is no need to bisect the mod list. - Check its supported Minecraft version on Modrinth or CurseForge and install the build for your server's exact version. "Works on 1.21" is not the same as 1.21.1.
- Update its dependencies too. When a mod mixes into another mod's code rather than Minecraft's, an outdated copy of that other mod produces the same failure.
- If two optimisation mods are fighting over the same method, removing one usually resolves it - a common outcome between competing performance mods.
COAL-017Client-only mod installed on a serverjava.lang.NoClassDefFoundError: org/lwjgl/Version
java.lang.NoClassDefFoundError: org/lwjgl/Version at net.caffeinemc.mods.sodium.client.SodiumClientMod.onInitializeClient(SodiumClientMod.java:52)
What it means
LWJGL is the library Minecraft uses to talk to your graphics card. A dedicated server renders nothing, so it does not ship LWJGL at all. When a mod that only makes sense on a client - a rendering or optimisation mod, a shader loader, a HUD mod - is placed in the server's mods folder, it immediately reaches for LWJGL and the server dies on startup.
This is not a broken mod or a broken server. It is a mod in the wrong place.
How to fix it
Remove the client-only mod from the server's mods folder. It still works fine - install it in your own Minecraft client instead, where it belongs. The stack trace under the error names the mod; in the example above, Sodium.
Client-only mods that most commonly end up on a server by mistake:
- Rendering and performance: Sodium, Rubidium, Embeddium, Iris, Oculus, OptiFine
- Shaders: every shader pack, and the loaders that run them
- Visual and HUD: minimap mods, zoom mods, tooltip and inventory HUD mods, animation and particle mods
- Resource pack helpers: anything whose description is about how the game looks
Not sure about a specific mod? Its Modrinth or CurseForge page states the environment - look for "client" versus "server" on the listing. Mods marked client-side only never need to be installed on the server, even when every player uses them.
COAL-018Fabric Loader's suggested fixA potential solution has been determined
A potential solution has been determined: - Install fabric-api, version 0.92.2 or later.
What it means
When Fabric Loader rejects a mod set it also tries to compute a fix, and when it succeeds it prints this block. It is the most useful thing in a Fabric startup failure - not a diagnosis to interpret, but an instruction list. Coalstack's Auto Debugger surfaces it verbatim for exactly that reason.
How to fix it
- Do what it says, exactly. Version numbers are part of the instruction - "0.92.2 or later" means 0.92.1 will not do.
- Do every line before restarting. The list is one coherent solution, not a set of alternatives to try in turn.
- Match your Minecraft version when downloading. Mod pages list a separate build per game version, and only the one matching your server is relevant.
- "Remove mod X" is a real option. If the suggestion is to remove something you do not care about, that is the fastest fix available.
If Fabric could not determine a solution you will see COAL-019 instead, which lists the unmet requirements without the fix.
COAL-019Specific missing mod dependencyrequires version X of Y, which is missing
- Mod 'Some Mod' (somemod) 1.2.0 requires version 0.92.0 or later of fabric-api, which is missing!
What it means
Fabric Loader is listing an unmet requirement, and the line contains everything you need: which mod is complaining (Some Mod), what it needs (fabric-api), and which versions would satisfy it (0.92.0 or later). "Missing" can mean not installed at all, or installed at a version outside that range.
How to fix it
- Install the named mod at a version inside the stated range, built for your exact Minecraft version.
fabric-apiis by far the most common one to be missing - a large share of Fabric mods depend on it. - If it is already installed, update it - and delete the old jar rather than leaving both, or you will land on COAL-008 next.
- Or remove the requesting mod if you would rather not add the dependency.
- Expect several of these at once. Read the whole list and fix every line before restarting.
It crashed, froze, or something on disk is broken
COAL-004Unhandled exception during startupException in thread "main"
Exception in thread "main" java.lang.RuntimeException: Failed to start the minecraft server at net.minecraft.server.Main.main(Main.java:265)
What it means
Something failed during startup and nothing caught it, so Java printed the stack trace and quit. On its own this line tells you almost nothing - it is the outermost wrapper around whatever actually went wrong. The real cause is either further down the trace, after a Caused by: line, or in the log lines immediately above it.
How to fix it
- Read up, not down. Scroll to the last few lines before this one. Mod loaders print their real complaint - a missing dependency, a version mismatch - just before the exception escapes.
- Follow every
Caused by:to the end of the chain. The last one is usually the actual fault. - Check the common specific causes that arrive wrapped in this: a missing dependency, a client-only mod, or an unaccepted EULA.
Coalstack's Auto Debugger exists largely for this case - it scans the whole log and reports the specific finding instead of the wrapper.
COAL-005Exception ticking worldException ticking world
---- Minecraft Crash Report ---- Description: Exception ticking world java.lang.NullPointerException: Exception ticking world
What it means
The server crashed mid-tick while updating the world - blocks, entities, and block entities all update inside that tick. Because it happens during normal running rather than startup, the trigger is usually specific data in the world: one corrupted chunk, one broken entity, or one block entity a mod cannot handle.
How to fix it
- Read the crash report's "Affected level" block. It names the exact block or entity position, which tells you the chunk to deal with.
- If it crashes on join, it is where that player is standing. A player logged out inside a crashing chunk re-crashes the server on every login. Move them with an offline NBT editor, or teleport them from the console in the moment before the crash.
- Regenerate just the bad region. Tools like MCA Selector let you delete a single region file so it regenerates on next load - far less destructive than restoring the entire world.
- If it started right after a mod change, remove that mod first. Mods adding entities or machines are the usual source.
- Otherwise restore a backup from before the crashes began.
COAL-013Stack overflowjava.lang.StackOverflowError
java.lang.StackOverflowError: null at com.example.somemod.Handler.process(Handler.java:88) at com.example.somemod.Handler.process(Handler.java:91) at com.example.somemod.Handler.process(Handler.java:91)
What it means
Java ran out of call stack, which in practice always means infinite recursion: something called itself, directly or in a loop, with nothing to end it. The giveaway is the stack trace - the same handful of lines repeat hundreds of times.
How to fix it
- Read the repeating frames. The package name in the loop tells you which mod, data pack, or script owns the bug.
- Data pack functions are a frequent cause: a function that calls itself, or two that call each other, with no condition to stop. Check anything added recently under
datapacks/. - Automation and scripting mods loop the same way when one event triggers another - a block-break handler that breaks a block, for instance.
- Raising
-Xssis not a fix. A deeper stack only delays a genuine infinite loop. Find the recursion instead.
COAL-014Watchdog force-killed the serverA single server tick took 60.00 seconds - server will forcibly shutdown
[Server Watchdog/ERROR]: A single server tick took 60.00 seconds (should be max 0.05) [Server Watchdog/ERROR]: Considering it to be crashed, server will forcibly shutdown.
What it means
A healthy server completes 20 ticks a second. The watchdog is a separate thread that notices when a single tick has run far past its budget - 60 seconds by default - and concludes the server is hung rather than slow. It then kills the process and dumps the thread stacks. This is not a performance warning: a tick that long means something is genuinely stuck.
How to fix it
- Read the thread dump printed with the crash. The Server thread's stack shows exactly what it was doing when it froze - the topmost mod package in that trace is what to investigate.
- Chunk generation is the usual innocent cause. A player exploring new terrain with heavy worldgen mods can stall a tick past 60 seconds on a slow disk. Pregenerating the world fixes that properly.
- Deadlocks are the usual guilty one. If the dump shows threads waiting on each other, that is a bug in the named mod - report it, and remove the mod meanwhile.
- Do not simply disable the watchdog. Setting
max-tick-time=-1inserver.propertiesstops the kill, not the freeze - the server then sits there unresponsive instead. It is a reasonable temporary measure while you pregenerate, and a bad permanent one.
COAL-016Corrupted fileCorrupted world, region, or config file
[Server thread/ERROR]: Region file .../region/r.0.0.mca is corrupted [Server thread/ERROR]: Failed to load chunk 12, -3
What it means
A file did not contain what the server expected - truncated, half-written, or invalid. The overwhelming cause is an unclean shutdown: killing the process, closing the window, or losing power mid-save leaves a region file written halfway. Disk problems and running out of free space account for most of the rest.
How to fix it
- Identify the file from the message. A
.mcafile is world data,level.datis world metadata, and anything in a mod's config folder is usually safe to delete and let regenerate. - For
level.dat, Minecraft keepslevel.dat_oldright beside it. Renaming that over the broken one recovers most cases without touching your world. - For a region file, restore just that file from a backup, or delete it and let the chunk regenerate - you lose the builds in that region, not the world.
- For a mod cache or config, delete the folder (not the jar) and let the mod rebuild it.
- Then fix the cause. Always stop the server with the
stopcommand rather than by closing the window, and keep automated backups running so the next occurrence costs you minutes instead of the world.

