Files
hytale-f2p/docs/FASTUTIL_CLASSLOADER_ISSUE.md
sanasol ee53911a06 Revert debug builds, update fastutil issue docs
Agent and -Xshare:off both ruled out as causes.
Restored normal agent injection. Updated docs with
complete findings — issue remains unsolved.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 23:15:01 +01:00

4.4 KiB

Singleplayer Server Crash: fastutil ClassNotFoundException

Status: Open — NO SOLUTION (Feb 24-27 2026)

Symptom

Singleplayer server crashes immediately on boot:

Exception in thread "main" java.lang.NoClassDefFoundError: it/unimi/dsi/fastutil/objects/ObjectArrayList
    at com.hypixel.hytale.plugin.early.EarlyPluginLoader.<clinit>(EarlyPluginLoader.java:34)
    at com.hypixel.hytale.Main.main(Main.java:36)
Caused by: java.lang.ClassNotFoundException: it.unimi.dsi.fastutil.objects.ObjectArrayList
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(Unknown Source)

Server exits with code 1. Multiplayer works fine for the same user.

Affected Users

  1. ヅ𝚃 JAYED ! (Feb 24) — Windows x86_64, had AOT cache errors before fastutil crash
  2. Asentrix (Feb 27) — Windows x86_64 (NT 10.0.26200.0), RTX 4060, Launcher v2.4.4, NO AOT cache errors
  • Reproduces 100% on singleplayer, every attempt
  • Multiplayer works fine for both users
  • macOS/Linux users are NOT affected

Ruled Out (confirmed via debug builds)

Suspect Tested Result
DualAuth Agent Debug build with agent completely disabled (debug-no-agent tag) Same crash. Agent is innocent.
-Xshare:off (CDS) Added to JAVA_TOOL_OPTIONS in launcher code (debug-xshare-off tag) Did not help. CDS is not the cause.
-XX:+UseCompactObjectHeaders Stripped via wrapper Did not help. Server has -XX:+IgnoreUnrecognizedVMOptions anyway.
Corrupted game files User did repair + full reinstall Same crash.
Java wrapper Logs confirm wrapper works correctly Not the cause.
ARM64/Parallels User is on standard Windows x86_64 Not applicable.
AOT cache Asentrix has no AOT errors (JAYED did), both crash the same way Not the root cause.

What We Know

  • fastutil is bundled inside HytaleServer.jar (fat/shaded JAR) — same JAR for all users
  • JVM's BuiltinClassLoader cannot find it.unimi.dsi.fastutil.objects.ObjectArrayList despite it being in the JAR
  • Crash happens at EarlyPluginLoader static initializer (line 34) which imports ObjectArrayList
  • The bundled JRE is identical for all users (downloaded by launcher)
  • The issue is not caused by anything the F2P launcher adds — it's the vanilla server JVM failing to load its own classes

Remaining Theories

  1. Antivirus/security software — Windows Defender or third-party AV intercepting JAR file reads. Real-time scanning + fat JAR = known conflict. Untested — user should try disabling AV temporarily.
  2. Windows Insider build — Asentrix is on NT 10.0.26200.0 (Windows 11 Dev/Insider). Bleeding-edge Windows may have JVM compatibility issues.
  3. File locking — Stalled java.exe processes holding HytaleServer.jar open (Asentrix had stalled processes killed at every launch).
  4. Corrupted JRE on disk — Despite being the same download, filesystem or AV may have corrupted specific JRE files on their system.

Next Steps to Try

  1. Disable Windows Defender temporarily — the only quick test left
  2. Delete bundled JRE and let launcher re-download — rules out local JRE corruption
  3. Ask if official Hytale singleplayer works — if it also crashes, it's their system (but F2P users may not have access)

Update History

Feb 24: First report (JAYED)

User reported singleplayer crash. Initial investigation found AOT cache errors + fastutil ClassNotFoundException. Stripping -XX:+UseCompactObjectHeaders did not help.

Feb 27: Second report (Asentrix), extensive debugging

  • Asentrix hit same crash, no AOT errors — ruled out AOT as root cause
  • Built debug-xshare-off: added -Xshare:off to JAVA_TOOL_OPTIONSdid not help
  • Built debug-no-agent: completely disabled DualAuth agent — same crash
  • Conclusion: Neither the agent nor CDS is the cause. The JVM itself cannot load classes from the fat JAR on these specific Windows systems.
  • Note: wrapper injectArgs append AFTER -jar, so they cannot inject JVM flags — only JAVA_TOOL_OPTIONS works for JVM flags
  • Java wrapper config: backend/core/config.js (stripFlags / injectArgs)
  • DualAuth Agent: v1.1.12, package ws.sanasol.dualauth
  • Game version at time of reports: 2026.02.19-1a311a592
  • Debug tags: debug-xshare-off, debug-no-agent
  • Log submission IDs: c88e7b71 (Asentrix initial), 0445e4dc (xshare test), 748dceeb (no-agent test)