Setting -DMC_DEBUG_FAKE_LATENCY_MS or -DMC_DEBUG_FAKE_JITTER_MS to a value that is not an integer (and enabling -DMC_DEBUG_ENABLED) causes the game to crash before it even starts. No crash report is created, since the crash happens before the game’s crash handling mechanism is initiated.
How to reproduce:
Run the game or a server with the following JVM properties:
-DMC_DEBUG_ENABLED -DMC_DEBUG_FAKE_LATENCY_MS=teststring
-> ❌ The game does not start and a crash window appears in the launcher. A server started this way prints an exception and exits.
Expected result:
Setting an integer debug property to a non-integer value would not affect anything and the game would start and act as if the malformed value has not been set.
Observed result:
Setting an integer debug property to a non-integer value causes the game to crash before even starting properly.
Stack trace:
Exception in thread "ServerMain" java.lang.ExceptionInInitializerError
at net.minecraft.server.Main.main(Main.java:68)
at net.minecraft.bundler.Main.lambda$run$0(Main.java:54)
at java.base/java.lang.Thread.run(Thread.java:1474)
Caused by: java.lang.NumberFormatException: For input string: "teststring"
at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:67)
at java.base/java.lang.Integer.parseInt(Integer.java:565)
at java.base/java.lang.Integer.parseInt(Integer.java:662)
at net.minecraft.SharedConstants.debugIntValue(SharedConstants.java:100)
at net.minecraft.SharedConstants.<clinit>(SharedConstants.java:186)
... 3 moreCode analysis:
This code analysis uses 26.1-snapshot-10’s code, decompiled using Vineflower.
When the net.minecraft.SharedConstants class is accessed by the JVM for the first time (really early on), the following static fields are initialized:
public static final int DEBUG_FAKE_LATENCY_MS = debugIntValue("FAKE_LATENCY_MS");
public static final int DEBUG_FAKE_JITTER_MS = debugIntValue("FAKE_JITTER_MS");Both of these fields run the debugIntValue(String) method, which is shown below:
private static int debugIntValue(final String name) {
if (!DEBUG_ENABLED) {
return 0;
} else {
String prefixedName = prefixDebugFlagName(name);
if (DEBUG_PRINT_PROPERTIES) {
System.out.println("Debug property available: " + prefixedName + ": int");
}
return Integer.parseInt(System.getProperty(prefixedName, "0"));
}
}The System.getProperty call returns a string, which is then passed into the Integer.parseInt method, without checking if it’s actually an integer first. Integer.parseInt throws a NumberFormatException when its argument is not an integer, and therefore setting those debug properties to non-integer values causes this exception.
Comments 2
Thank you for your report!
After consideration, the issue is being closed as Working as Intended.
Please note, that mechanics of the game may change between updates.
Things such as graphics, sounds, world creation, biomes, redstone, villagers, and animals may not work the same in current versions.
Full Version History – Snapshot Version History – The official Minecraft feedback site
Quick Links:
📓 Bug Tracker Guidelines – 💬 Community Support – 📧 Mojang Support (Technical Issues) – 📧 Microsoft Support (Account Issues)
📓 Project Summary – ✍️ Feedback and Suggestions – 📖 Game Wiki
Can reproduce in 26.1-snapshot-10.