From a00d4c763d4ca8d0dde5b11ba6f11475fbf2e0ff Mon Sep 17 00:00:00 2001 From: Marcono1234 Date: Tue, 23 Nov 2021 09:18:23 +0100 Subject: [PATCH] Store information about modded world separately (#21) It was discussed internally that it might not always be desired to consider a crash report of a vanilla client or server for a modded world as modded. Potentially the mod had no effect on the world and the crash occurs in vanilla worlds as well. --- .../kotlin/com/urielsalis/mccrashlib/Crash.kt | 8 ++++++++ .../mccrashlib/parser/MinecraftCrashParser.kt | 18 ++++++++++++------ .../minecraft/OutOfMemoryError-parsed.txt | 1 + .../crashes/minecraft/debug-crash-parsed.txt | 1 + .../minecraft/modded-level-file-parsed.txt | 7 ++++--- .../old-IllegalArgumentException-parsed.txt | 1 + ...old-Pixel format not accelerated-parsed.txt | 1 + .../old-modded-debug-crash-parsed.txt | 1 + .../crashes/minecraft/watchdog-parsed.txt | 1 + 9 files changed, 30 insertions(+), 9 deletions(-) diff --git a/src/main/kotlin/com/urielsalis/mccrashlib/Crash.kt b/src/main/kotlin/com/urielsalis/mccrashlib/Crash.kt index c4966de..012dea0 100644 --- a/src/main/kotlin/com/urielsalis/mccrashlib/Crash.kt +++ b/src/main/kotlin/com/urielsalis/mccrashlib/Crash.kt @@ -5,6 +5,14 @@ sealed class Crash { data class Minecraft( val modded: Boolean, + /** + * Whether the level had been opened with a modded client or server in the past. This does + * not necessarily mean that the mod had any effect on the level, or that the client or + * server is still modded (see [modded]). + * + * `null` if unknown, or if no level information exists in the crash report. + */ + val wasLevelOpenedModded: Boolean?, val exception: String, /** Minecraft version ID; `null` if unknown */ val minecraftVersion: String?, diff --git a/src/main/kotlin/com/urielsalis/mccrashlib/parser/MinecraftCrashParser.kt b/src/main/kotlin/com/urielsalis/mccrashlib/parser/MinecraftCrashParser.kt index b59b1f5..4dcddf0 100644 --- a/src/main/kotlin/com/urielsalis/mccrashlib/parser/MinecraftCrashParser.kt +++ b/src/main/kotlin/com/urielsalis/mccrashlib/parser/MinecraftCrashParser.kt @@ -8,9 +8,9 @@ import java.io.File /* Minecraft crashes are separated into sections starting and ending with -- - "Minecraft crash report" contains the exception, "System Details" contains more information - The exception starts with java.lang and its all lines until the first empty line - System details contains a : separated key value pair. We care about Is Modded + "Minecraft Crash Report" contains the exception, "System Details" contains more information + The exception starts with java.lang and it includes all lines until the first empty line + "System Details" contains a : separated key value pair. We care about "Is Modded" */ private const val crashReportSection = "Minecraft Crash Report" private const val systemDetailsSection = "System Details" @@ -32,8 +32,9 @@ class MinecraftCrashParser : CrashParser { return Either.left(SectionsNotFound) } val details = getDetails(sections[systemDetailsSection] ?: error("System details section not found")) + val isModded = isGameModded(details) val affectedLevel = sections[affectedLevelSection]?.let(::getDetails) - val isModded = isGameModded(details) || affectedLevel?.let(::wasLevelModded) == true + val wasLevelModded = affectedLevel?.let(::wasLevelModded) val exception = getException(sections[crashReportSection] ?: error("Crash report section not found")) val version = getMinecraftVersion(details) val type = getType(details) @@ -51,6 +52,7 @@ class MinecraftCrashParser : CrashParser { Either.right( Crash.Minecraft( isModded, + wasLevelModded, it, version, isClient, @@ -73,8 +75,12 @@ class MinecraftCrashParser : CrashParser { !contains("Probably Not", true) && !contains("Unknown", true) } - private fun wasLevelModded(affectedLevelDetails: Map) = - affectedLevelDetails[levelWasModded] == "true" + private fun wasLevelModded(affectedLevelDetails: Map): Boolean? = + when (affectedLevelDetails[levelWasModded]) { + "true" -> true + "false" -> false + else -> null + } private fun getException(lines: List): Option { var foundStart = false diff --git a/src/test/resources/crashes/minecraft/OutOfMemoryError-parsed.txt b/src/test/resources/crashes/minecraft/OutOfMemoryError-parsed.txt index a110a40..8264efc 100644 --- a/src/test/resources/crashes/minecraft/OutOfMemoryError-parsed.txt +++ b/src/test/resources/crashes/minecraft/OutOfMemoryError-parsed.txt @@ -1,5 +1,6 @@ { "modded" : false, + "wasLevelOpenedModded" : null, "exception" : "java.util.concurrent.CompletionException: java.lang.OutOfMemoryError: Java heap space\nat atd.c(SourceFile:151)\n...", "minecraftVersion" : "21w42a", "isClient" : true, diff --git a/src/test/resources/crashes/minecraft/debug-crash-parsed.txt b/src/test/resources/crashes/minecraft/debug-crash-parsed.txt index 873df09..283ce92 100644 --- a/src/test/resources/crashes/minecraft/debug-crash-parsed.txt +++ b/src/test/resources/crashes/minecraft/debug-crash-parsed.txt @@ -1,5 +1,6 @@ { "modded" : false, + "wasLevelOpenedModded" : null, "exception" : "java.lang.Throwable\nat cvi.b(SourceFile:530)\nat cvk.m(SourceFile:1477)\nat cvk.e(SourceFile:925)\nat cvk.b(SourceFile:411)\nat net.minecraft.client.main.Main.main(SourceFile:154)", "minecraftVersion" : "1.14.2", "isClient" : true, diff --git a/src/test/resources/crashes/minecraft/modded-level-file-parsed.txt b/src/test/resources/crashes/minecraft/modded-level-file-parsed.txt index 18a6e5f..b5ee56d 100644 --- a/src/test/resources/crashes/minecraft/modded-level-file-parsed.txt +++ b/src/test/resources/crashes/minecraft/modded-level-file-parsed.txt @@ -1,8 +1,9 @@ { - "modded" : true, + "modded" : false, + "wasLevelOpenedModded" : true, "exception" : "java.lang.IllegalArgumentException: Cannot set property cfb{name=facing, clazz=class gc, values=[north, south, west, east]} as it does not exist in Block{minecraft:quartz_bricks}\nat cej.a(SourceFile:114)\nat ciy.b(SourceFile:51)\nat ciz.a(SourceFile:58)\nat ciy.a(SourceFile:27)\nat ciy.a(SourceFile:19)\nat civ.a(SourceFile:55)\nat cku.a(SourceFile:20)\nat cku.a(SourceFile:11)\nat civ.a(SourceFile:55)\nat cjb.a(SourceFile:23)\nat java.base/java.util.stream.Streams$StreamBuilderImpl.forEachRemaining(Streams.java:411)\nat java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:658)\nat cjb.a(SourceFile:22)\nat cjb.a(SourceFile:14)\nat civ.a(SourceFile:55)\nat cjb.a(SourceFile:23)\nat java.base/java.util.stream.Streams$StreamBuilderImpl.forEachRemaining(Streams.java:411)\nat java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:658)\nat cjb.a(SourceFile:22)\nat cjb.a(SourceFile:14)\nat civ.a(SourceFile:55)\nat cjb.a(SourceFile:23)\nat java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)\nat java.base/java.util.stream.IntPipeline$1$1.accept(IntPipeline.java:180)\nat java.base/java.util.stream.Streams$RangeIntSpliterator.forEachRemaining(Streams.java:104)\nat java.base/java.util.Spliterator$OfInt.forEachRemaining(Spliterator.java:699)\nat java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)\nat java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)\nat java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)\nat java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)\nat java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)\nat java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:497)\nat cjb.a(SourceFile:22)\nat cjb.a(SourceFile:14)\nat civ.a(SourceFile:55)\nat bsv.a(SourceFile:373)\nat cfy.a(SourceFile:220)\nat cga.c(SourceFile:89)\nat cga.a(SourceFile:219)\nat zs.a(SourceFile:568)\nat com.mojang.datafixers.util.Either$Left.map(Either.java:38)\nat zs.a(SourceFile:562)\nat java.base/java.util.concurrent.CompletableFuture$UniCompose.tryFire(CompletableFuture.java:1072)\nat java.base/java.util.concurrent.CompletableFuture$Completion.run(CompletableFuture.java:478)\nat zu.b(SourceFile:58)\nat aoe.e(SourceFile:94)\nat aoe.a(SourceFile:137)\nat aoe.run(SourceFile:105)\nat java.base/java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(ForkJoinTask.java:1426)\nat java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290)\nat java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1020)\nat java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1656)\nat java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1594)\nat java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:177)", "minecraftVersion" : "1.16.5", "isClient" : false, - "deobf" : null, - "deobfException" : null + "deobf" : "---- Minecraft Crash Report ----\n// This doesn't make any sense!\n\nTime: 30.05.21, 01:30\nDescription: Feature placement\n\njava.lang.IllegalArgumentException: Cannot set property cfb{name=facing, clazz=class gc, values=[north, south, west, east]} as it does not exist in Block{minecraft:quartz_bricks}\n\tat net.minecraft.world.level.block.state.StateHolder.java.lang.Object setValue(net.minecraft.world.level.block.state.properties.Property,java.lang.Comparable)(StateHolder.java:114)\n\tat net.minecraft.world.level.levelgen.feature.CoralFeature.boolean placeCoralBlock(net.minecraft.world.level.LevelAccessor,java.util.Random,net.minecraft.core.BlockPos,net.minecraft.world.level.block.state.BlockState)(CoralFeature.java:51)\n\tat net.minecraft.world.level.levelgen.feature.CoralMushroomFeature.boolean placeFeature(net.minecraft.world.level.LevelAccessor,java.util.Random,net.minecraft.core.BlockPos,net.minecraft.world.level.block.state.BlockState)(CoralMushroomFeature.java:58)\n\tat net.minecraft.world.level.levelgen.feature.CoralFeature.boolean place(net.minecraft.world.level.WorldGenLevel,net.minecraft.world.level.chunk.ChunkGenerator,java.util.Random,net.minecraft.core.BlockPos,net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration)(CoralFeature.java:27)\n\tat net.minecraft.world.level.levelgen.feature.CoralFeature.boolean placeFeature(net.minecraft.world.level.LevelAccessor,java.util.Random,net.minecraft.core.BlockPos,net.minecraft.world.level.block.state.BlockState)(CoralFeature.java:27)\n\tat net.minecraft.world.level.levelgen.feature.CoralFeature.boolean placeFeature(net.minecraft.world.level.LevelAccessor,java.util.Random,net.minecraft.core.BlockPos,net.minecraft.world.level.block.state.BlockState)(CoralFeature.java:19)\n\tat net.minecraft.world.level.levelgen.feature.CoralFeature.boolean place(net.minecraft.world.level.WorldGenLevel,net.minecraft.world.level.chunk.ChunkGenerator,java.util.Random,net.minecraft.core.BlockPos,net.minecraft.world.level.levelgen.feature.configurations.FeatureConfiguration)(CoralFeature.java:19)\n\tat net.minecraft.world.level.levelgen.feature.ConfiguredFeature.boolean place(net.minecraft.world.level.WorldGenLevel,net.minecraft.world.level.chunk.ChunkGenerator,java.util.Random,net.minecraft.core.BlockPos)(ConfiguredFeature.java:55)\n\tat net.minecraft.world.level.levelgen.feature.SimpleRandomSelectorFeature.boolean place(net.minecraft.world.level.WorldGenLevel,net.minecraft.world.level.chunk.ChunkGenerator,java.util.Random,net.minecraft.core.BlockPos,net.minecraft.world.level.levelgen.feature.configurations.SimpleRandomFeatureConfiguration)(SimpleRandomSelectorFeature.java:20)\n\tat net.minecraft.world.level.levelgen.feature.SimpleRandomSelectorFeature.boolean place(net.minecraft.world.level.WorldGenLevel,net.minecraft.world.level.chunk.ChunkGenerator,java.util.Random,net.minecraft.core.BlockPos,net.minecraft.world.level.levelgen.feature.configurations.FeatureConfiguration)(SimpleRandomSelectorFeature.java:11)\n\tat net.minecraft.world.level.levelgen.feature.ConfiguredFeature.boolean place(net.minecraft.world.level.WorldGenLevel,net.minecraft.world.level.chunk.ChunkGenerator,java.util.Random,net.minecraft.core.BlockPos)(ConfiguredFeature.java:55)\n\tat net.minecraft.world.level.levelgen.feature.DecoratedFeature.boolean place(net.minecraft.world.level.WorldGenLevel,net.minecraft.world.level.chunk.ChunkGenerator,java.util.Random,net.minecraft.core.BlockPos,net.minecraft.world.level.levelgen.feature.configurations.DecoratedFeatureConfiguration)(DecoratedFeature.java:23)\n\tat net.minecraft.world.level.levelgen.feature.DecoratedFeature.void lambda$place$0(net.minecraft.world.level.levelgen.feature.configurations.DecoratedFeatureConfiguration,net.minecraft.world.level.WorldGenLevel,net.minecraft.world.level.chunk.ChunkGenerator,java.util.Random,org.apache.commons.lang3.mutable.MutableBoolean,net.minecraft.core.BlockPos)(DecoratedFeature.java:23)\n\tat java.base/java.util.stream.Streams$StreamBuilderImpl.forEachRemaining(Streams.java:411)\n\tat java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:658)\n\tat net.minecraft.world.level.levelgen.feature.DecoratedFeature.boolean place(net.minecraft.world.level.WorldGenLevel,net.minecraft.world.level.chunk.ChunkGenerator,java.util.Random,net.minecraft.core.BlockPos,net.minecraft.world.level.levelgen.feature.configurations.DecoratedFeatureConfiguration)(DecoratedFeature.java:22)\n\tat net.minecraft.world.level.levelgen.feature.DecoratedFeature.boolean place(net.minecraft.world.level.WorldGenLevel,net.minecraft.world.level.chunk.ChunkGenerator,java.util.Random,net.minecraft.core.BlockPos,net.minecraft.world.level.levelgen.feature.configurations.FeatureConfiguration)(DecoratedFeature.java:14)\n\tat net.minecraft.world.level.levelgen.feature.ConfiguredFeature.boolean place(net.minecraft.world.level.WorldGenLevel,net.minecraft.world.level.chunk.ChunkGenerator,java.util.Random,net.minecraft.core.BlockPos)(ConfiguredFeature.java:55)\n\tat net.minecraft.world.level.levelgen.feature.DecoratedFeature.boolean place(net.minecraft.world.level.WorldGenLevel,net.minecraft.world.level.chunk.ChunkGenerator,java.util.Random,net.minecraft.core.BlockPos,net.minecraft.world.level.levelgen.feature.configurations.DecoratedFeatureConfiguration)(DecoratedFeature.java:23)\n\tat net.minecraft.world.level.levelgen.feature.DecoratedFeature.void lambda$place$0(net.minecraft.world.level.levelgen.feature.configurations.DecoratedFeatureConfiguration,net.minecraft.world.level.WorldGenLevel,net.minecraft.world.level.chunk.ChunkGenerator,java.util.Random,org.apache.commons.lang3.mutable.MutableBoolean,net.minecraft.core.BlockPos)(DecoratedFeature.java:23)\n\tat java.base/java.util.stream.Streams$StreamBuilderImpl.forEachRemaining(Streams.java:411)\n\tat java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:658)\n\tat net.minecraft.world.level.levelgen.feature.DecoratedFeature.boolean place(net.minecraft.world.level.WorldGenLevel,net.minecraft.world.level.chunk.ChunkGenerator,java.util.Random,net.minecraft.core.BlockPos,net.minecraft.world.level.levelgen.feature.configurations.DecoratedFeatureConfiguration)(DecoratedFeature.java:22)\n\tat net.minecraft.world.level.levelgen.feature.DecoratedFeature.boolean place(net.minecraft.world.level.WorldGenLevel,net.minecraft.world.level.chunk.ChunkGenerator,java.util.Random,net.minecraft.core.BlockPos,net.minecraft.world.level.levelgen.feature.configurations.FeatureConfiguration)(DecoratedFeature.java:14)\n\tat net.minecraft.world.level.levelgen.feature.ConfiguredFeature.boolean place(net.minecraft.world.level.WorldGenLevel,net.minecraft.world.level.chunk.ChunkGenerator,java.util.Random,net.minecraft.core.BlockPos)(ConfiguredFeature.java:55)\n\tat net.minecraft.world.level.levelgen.feature.DecoratedFeature.boolean place(net.minecraft.world.level.WorldGenLevel,net.minecraft.world.level.chunk.ChunkGenerator,java.util.Random,net.minecraft.core.BlockPos,net.minecraft.world.level.levelgen.feature.configurations.DecoratedFeatureConfiguration)(DecoratedFeature.java:23)\n\tat net.minecraft.world.level.levelgen.feature.DecoratedFeature.void lambda$place$0(net.minecraft.world.level.levelgen.feature.configurations.DecoratedFeatureConfiguration,net.minecraft.world.level.WorldGenLevel,net.minecraft.world.level.chunk.ChunkGenerator,java.util.Random,org.apache.commons.lang3.mutable.MutableBoolean,net.minecraft.core.BlockPos)(DecoratedFeature.java:23)\n\tat java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)\n\tat java.base/java.util.stream.IntPipeline$1$1.accept(IntPipeline.java:180)\n\tat java.base/java.util.stream.Streams$RangeIntSpliterator.forEachRemaining(Streams.java:104)\n\tat java.base/java.util.Spliterator$OfInt.forEachRemaining(Spliterator.java:699)\n\tat java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)\n\tat java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)\n\tat java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)\n\tat java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)\n\tat java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)\n\tat java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:497)\n\tat net.minecraft.world.level.levelgen.feature.DecoratedFeature.boolean place(net.minecraft.world.level.WorldGenLevel,net.minecraft.world.level.chunk.ChunkGenerator,java.util.Random,net.minecraft.core.BlockPos,net.minecraft.world.level.levelgen.feature.configurations.DecoratedFeatureConfiguration)(DecoratedFeature.java:22)\n\tat net.minecraft.world.level.levelgen.feature.DecoratedFeature.boolean place(net.minecraft.world.level.WorldGenLevel,net.minecraft.world.level.chunk.ChunkGenerator,java.util.Random,net.minecraft.core.BlockPos,net.minecraft.world.level.levelgen.feature.configurations.FeatureConfiguration)(DecoratedFeature.java:14)\n\tat net.minecraft.world.level.levelgen.feature.ConfiguredFeature.boolean place(net.minecraft.world.level.WorldGenLevel,net.minecraft.world.level.chunk.ChunkGenerator,java.util.Random,net.minecraft.core.BlockPos)(ConfiguredFeature.java:55)\n\tat net.minecraft.world.level.biome.Biome.void generate(net.minecraft.world.level.StructureFeatureManager,net.minecraft.world.level.chunk.ChunkGenerator,net.minecraft.server.level.WorldGenRegion,long,net.minecraft.world.level.levelgen.WorldgenRandom,net.minecraft.core.BlockPos)(Biome.java:373)\n\tat net.minecraft.world.level.chunk.ChunkGenerator.com.mojang.serialization.Codec codec()(ChunkGenerator.java:220)\n\tat net.minecraft.world.level.chunk.ChunkGenerator.net.minecraft.world.level.chunk.ChunkGenerator withSeed(long)(ChunkGenerator.java:220)\n\tat net.minecraft.world.level.chunk.ChunkGenerator.void applyBiomeDecoration(net.minecraft.server.level.WorldGenRegion,net.minecraft.world.level.StructureFeatureManager)(ChunkGenerator.java:220)\n\tat net.minecraft.world.level.chunk.ChunkGenerator.void buildSurfaceAndBedrock(net.minecraft.server.level.WorldGenRegion,net.minecraft.world.level.chunk.ChunkAccess)(ChunkGenerator.java:220)\n\tat net.minecraft.world.level.chunk.ChunkGenerator.void fillFromNoise(net.minecraft.world.level.LevelAccessor,net.minecraft.world.level.StructureFeatureManager,net.minecraft.world.level.chunk.ChunkAccess)(ChunkGenerator.java:220)\n\tat net.minecraft.world.level.chunk.ChunkGenerator.int getBaseHeight(int,int,net.minecraft.world.level.levelgen.Heightmap$Types)(ChunkGenerator.java:220)\n\tat net.minecraft.world.level.chunk.ChunkGenerator.net.minecraft.world.level.BlockGetter getBaseColumn(int,int)(ChunkGenerator.java:220)\n\tat net.minecraft.world.level.chunk.ChunkStatus.java.util.concurrent.CompletableFuture lambda$static$9(net.minecraft.world.level.chunk.ChunkStatus,net.minecraft.server.level.ServerLevel,net.minecraft.world.level.chunk.ChunkGenerator,net.minecraft.world.level.levelgen.structure.templatesystem.StructureManager,net.minecraft.server.level.ThreadedLevelLightEngine,java.util.function.Function,java.util.List,net.minecraft.world.level.chunk.ChunkAccess)(ChunkStatus.java:89)\n\tat net.minecraft.world.level.chunk.ChunkStatus.java.util.concurrent.CompletableFuture generate(net.minecraft.server.level.ServerLevel,net.minecraft.world.level.chunk.ChunkGenerator,net.minecraft.world.level.levelgen.structure.templatesystem.StructureManager,net.minecraft.server.level.ThreadedLevelLightEngine,java.util.function.Function,java.util.List)(ChunkStatus.java:219)\n\tat net.minecraft.server.level.ChunkMap.java.util.concurrent.CompletableFuture lambda$null$18(net.minecraft.world.level.ChunkPos,net.minecraft.server.level.ChunkHolder,net.minecraft.world.level.chunk.ChunkStatus,java.util.List)(ChunkMap.java:568)\n\tat com.mojang.datafixers.util.Either$Left.null map(null)(Either.java:38)\n\tat net.minecraft.server.level.ChunkMap.java.util.concurrent.CompletionStage lambda$scheduleChunkGeneration$20(net.minecraft.world.level.ChunkPos,net.minecraft.server.level.ChunkHolder,net.minecraft.world.level.chunk.ChunkStatus,com.mojang.datafixers.util.Either)(ChunkMap.java:562)\n\tat java.base/java.util.concurrent.CompletableFuture$UniCompose.tryFire(CompletableFuture.java:1072)\n\tat java.base/java.util.concurrent.CompletableFuture$Completion.run(CompletableFuture.java:478)\n\tat net.minecraft.server.level.ChunkTaskPriorityQueueSorter.void lambda$null$1(java.lang.Runnable,net.minecraft.util.thread.ProcessorHandle)(ChunkTaskPriorityQueueSorter.java:58)\n\tat net.minecraft.util.thread.ProcessorMailbox.boolean pollTask()(ProcessorMailbox.java:94)\n\tat net.minecraft.util.thread.ProcessorMailbox.int pollUntil(it.unimi.dsi.fastutil.ints.Int2BooleanFunction)(ProcessorMailbox.java:137)\n\tat net.minecraft.util.thread.ProcessorMailbox.void run()(ProcessorMailbox.java:105)\n\tat java.base/java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(ForkJoinTask.java:1426)\n\tat java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290)\n\tat java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1020)\n\tat java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1656)\n\tat java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1594)\n\tat java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:177)\n\n\nA detailed walkthrough of the error, its code path and all known details is as follows:\n---------------------------------------------------------------------------------------\n\n-- Head --\nThread: Server thread\nStacktrace:\n\tat net.minecraft.world.level.block.state.StateHolder.java.lang.Object setValue(net.minecraft.world.level.block.state.properties.Property,java.lang.Comparable)(StateHolder.java:114)\n\tat net.minecraft.world.level.levelgen.feature.CoralFeature.boolean placeCoralBlock(net.minecraft.world.level.LevelAccessor,java.util.Random,net.minecraft.core.BlockPos,net.minecraft.world.level.block.state.BlockState)(CoralFeature.java:51)\n\tat net.minecraft.world.level.levelgen.feature.CoralMushroomFeature.boolean placeFeature(net.minecraft.world.level.LevelAccessor,java.util.Random,net.minecraft.core.BlockPos,net.minecraft.world.level.block.state.BlockState)(CoralMushroomFeature.java:58)\n\tat net.minecraft.world.level.levelgen.feature.CoralFeature.boolean place(net.minecraft.world.level.WorldGenLevel,net.minecraft.world.level.chunk.ChunkGenerator,java.util.Random,net.minecraft.core.BlockPos,net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration)(CoralFeature.java:27)\n\tat net.minecraft.world.level.levelgen.feature.CoralFeature.boolean placeFeature(net.minecraft.world.level.LevelAccessor,java.util.Random,net.minecraft.core.BlockPos,net.minecraft.world.level.block.state.BlockState)(CoralFeature.java:27)\n\tat net.minecraft.world.level.levelgen.feature.CoralFeature.boolean placeFeature(net.minecraft.world.level.LevelAccessor,java.util.Random,net.minecraft.core.BlockPos,net.minecraft.world.level.block.state.BlockState)(CoralFeature.java:19)\n\tat net.minecraft.world.level.levelgen.feature.CoralFeature.boolean place(net.minecraft.world.level.WorldGenLevel,net.minecraft.world.level.chunk.ChunkGenerator,java.util.Random,net.minecraft.core.BlockPos,net.minecraft.world.level.levelgen.feature.configurations.FeatureConfiguration)(CoralFeature.java:19)\n\tat net.minecraft.world.level.levelgen.feature.ConfiguredFeature.boolean place(net.minecraft.world.level.WorldGenLevel,net.minecraft.world.level.chunk.ChunkGenerator,java.util.Random,net.minecraft.core.BlockPos)(ConfiguredFeature.java:55)\n\tat net.minecraft.world.level.levelgen.feature.SimpleRandomSelectorFeature.boolean place(net.minecraft.world.level.WorldGenLevel,net.minecraft.world.level.chunk.ChunkGenerator,java.util.Random,net.minecraft.core.BlockPos,net.minecraft.world.level.levelgen.feature.configurations.SimpleRandomFeatureConfiguration)(SimpleRandomSelectorFeature.java:20)\n\tat net.minecraft.world.level.levelgen.feature.SimpleRandomSelectorFeature.boolean place(net.minecraft.world.level.WorldGenLevel,net.minecraft.world.level.chunk.ChunkGenerator,java.util.Random,net.minecraft.core.BlockPos,net.minecraft.world.level.levelgen.feature.configurations.FeatureConfiguration)(SimpleRandomSelectorFeature.java:11)\n\tat net.minecraft.world.level.levelgen.feature.ConfiguredFeature.boolean place(net.minecraft.world.level.WorldGenLevel,net.minecraft.world.level.chunk.ChunkGenerator,java.util.Random,net.minecraft.core.BlockPos)(ConfiguredFeature.java:55)\n\tat net.minecraft.world.level.levelgen.feature.DecoratedFeature.boolean place(net.minecraft.world.level.WorldGenLevel,net.minecraft.world.level.chunk.ChunkGenerator,java.util.Random,net.minecraft.core.BlockPos,net.minecraft.world.level.levelgen.feature.configurations.DecoratedFeatureConfiguration)(DecoratedFeature.java:23)\n\tat net.minecraft.world.level.levelgen.feature.DecoratedFeature.void lambda$place$0(net.minecraft.world.level.levelgen.feature.configurations.DecoratedFeatureConfiguration,net.minecraft.world.level.WorldGenLevel,net.minecraft.world.level.chunk.ChunkGenerator,java.util.Random,org.apache.commons.lang3.mutable.MutableBoolean,net.minecraft.core.BlockPos)(DecoratedFeature.java:23)\n\tat java.base/java.util.stream.Streams$StreamBuilderImpl.forEachRemaining(Streams.java:411)\n\tat java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:658)\n\tat net.minecraft.world.level.levelgen.feature.DecoratedFeature.boolean place(net.minecraft.world.level.WorldGenLevel,net.minecraft.world.level.chunk.ChunkGenerator,java.util.Random,net.minecraft.core.BlockPos,net.minecraft.world.level.levelgen.feature.configurations.DecoratedFeatureConfiguration)(DecoratedFeature.java:22)\n\tat net.minecraft.world.level.levelgen.feature.DecoratedFeature.boolean place(net.minecraft.world.level.WorldGenLevel,net.minecraft.world.level.chunk.ChunkGenerator,java.util.Random,net.minecraft.core.BlockPos,net.minecraft.world.level.levelgen.feature.configurations.FeatureConfiguration)(DecoratedFeature.java:14)\n\tat net.minecraft.world.level.levelgen.feature.ConfiguredFeature.boolean place(net.minecraft.world.level.WorldGenLevel,net.minecraft.world.level.chunk.ChunkGenerator,java.util.Random,net.minecraft.core.BlockPos)(ConfiguredFeature.java:55)\n\tat net.minecraft.world.level.levelgen.feature.DecoratedFeature.boolean place(net.minecraft.world.level.WorldGenLevel,net.minecraft.world.level.chunk.ChunkGenerator,java.util.Random,net.minecraft.core.BlockPos,net.minecraft.world.level.levelgen.feature.configurations.DecoratedFeatureConfiguration)(DecoratedFeature.java:23)\n\tat net.minecraft.world.level.levelgen.feature.DecoratedFeature.void lambda$place$0(net.minecraft.world.level.levelgen.feature.configurations.DecoratedFeatureConfiguration,net.minecraft.world.level.WorldGenLevel,net.minecraft.world.level.chunk.ChunkGenerator,java.util.Random,org.apache.commons.lang3.mutable.MutableBoolean,net.minecraft.core.BlockPos)(DecoratedFeature.java:23)\n\tat java.base/java.util.stream.Streams$StreamBuilderImpl.forEachRemaining(Streams.java:411)\n\tat java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:658)\n\tat net.minecraft.world.level.levelgen.feature.DecoratedFeature.boolean place(net.minecraft.world.level.WorldGenLevel,net.minecraft.world.level.chunk.ChunkGenerator,java.util.Random,net.minecraft.core.BlockPos,net.minecraft.world.level.levelgen.feature.configurations.DecoratedFeatureConfiguration)(DecoratedFeature.java:22)\n\tat net.minecraft.world.level.levelgen.feature.DecoratedFeature.boolean place(net.minecraft.world.level.WorldGenLevel,net.minecraft.world.level.chunk.ChunkGenerator,java.util.Random,net.minecraft.core.BlockPos,net.minecraft.world.level.levelgen.feature.configurations.FeatureConfiguration)(DecoratedFeature.java:14)\n\tat net.minecraft.world.level.levelgen.feature.ConfiguredFeature.boolean place(net.minecraft.world.level.WorldGenLevel,net.minecraft.world.level.chunk.ChunkGenerator,java.util.Random,net.minecraft.core.BlockPos)(ConfiguredFeature.java:55)\n\tat net.minecraft.world.level.levelgen.feature.DecoratedFeature.boolean place(net.minecraft.world.level.WorldGenLevel,net.minecraft.world.level.chunk.ChunkGenerator,java.util.Random,net.minecraft.core.BlockPos,net.minecraft.world.level.levelgen.feature.configurations.DecoratedFeatureConfiguration)(DecoratedFeature.java:23)\n\tat net.minecraft.world.level.levelgen.feature.DecoratedFeature.void lambda$place$0(net.minecraft.world.level.levelgen.feature.configurations.DecoratedFeatureConfiguration,net.minecraft.world.level.WorldGenLevel,net.minecraft.world.level.chunk.ChunkGenerator,java.util.Random,org.apache.commons.lang3.mutable.MutableBoolean,net.minecraft.core.BlockPos)(DecoratedFeature.java:23)\n\tat java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)\n\tat java.base/java.util.stream.IntPipeline$1$1.accept(IntPipeline.java:180)\n\tat java.base/java.util.stream.Streams$RangeIntSpliterator.forEachRemaining(Streams.java:104)\n\tat java.base/java.util.Spliterator$OfInt.forEachRemaining(Spliterator.java:699)\n\tat java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)\n\tat java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)\n\tat java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)\n\tat java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)\n\tat java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)\n\tat java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:497)\n\tat net.minecraft.world.level.levelgen.feature.DecoratedFeature.boolean place(net.minecraft.world.level.WorldGenLevel,net.minecraft.world.level.chunk.ChunkGenerator,java.util.Random,net.minecraft.core.BlockPos,net.minecraft.world.level.levelgen.feature.configurations.DecoratedFeatureConfiguration)(DecoratedFeature.java:22)\n\tat net.minecraft.world.level.levelgen.feature.DecoratedFeature.boolean place(net.minecraft.world.level.WorldGenLevel,net.minecraft.world.level.chunk.ChunkGenerator,java.util.Random,net.minecraft.core.BlockPos,net.minecraft.world.level.levelgen.feature.configurations.FeatureConfiguration)(DecoratedFeature.java:14)\n\tat net.minecraft.world.level.levelgen.feature.ConfiguredFeature.boolean place(net.minecraft.world.level.WorldGenLevel,net.minecraft.world.level.chunk.ChunkGenerator,java.util.Random,net.minecraft.core.BlockPos)(ConfiguredFeature.java:55)\n\n-- Feature --\nDetails:\n\tId: minecraft:decorated\n\tConfig: < clv [minecraft:decorated | [minecraft:count_noise_biased cql@6e90e03b]] >\n\tDescription: < cjb [minecraft:decorated] >\nStacktrace:\n\tat net.minecraft.world.level.biome.Biome.void generate(net.minecraft.world.level.StructureFeatureManager,net.minecraft.world.level.chunk.ChunkGenerator,net.minecraft.server.level.WorldGenRegion,long,net.minecraft.world.level.levelgen.WorldgenRandom,net.minecraft.core.BlockPos)(Biome.java:373)\n\n-- Generation --\nDetails:\n\tCenterX: -47\n\tCenterZ: 6192\n\tSeed: 2734632675027547379\n\tBiome: bsv@37736bf1\nStacktrace:\n\tat net.minecraft.world.level.chunk.ChunkGenerator.com.mojang.serialization.Codec codec()(ChunkGenerator.java:220)\n\tat net.minecraft.world.level.chunk.ChunkGenerator.net.minecraft.world.level.chunk.ChunkGenerator withSeed(long)(ChunkGenerator.java:220)\n\tat net.minecraft.world.level.chunk.ChunkGenerator.void applyBiomeDecoration(net.minecraft.server.level.WorldGenRegion,net.minecraft.world.level.StructureFeatureManager)(ChunkGenerator.java:220)\n\tat net.minecraft.world.level.chunk.ChunkGenerator.void buildSurfaceAndBedrock(net.minecraft.server.level.WorldGenRegion,net.minecraft.world.level.chunk.ChunkAccess)(ChunkGenerator.java:220)\n\tat net.minecraft.world.level.chunk.ChunkGenerator.void fillFromNoise(net.minecraft.world.level.LevelAccessor,net.minecraft.world.level.StructureFeatureManager,net.minecraft.world.level.chunk.ChunkAccess)(ChunkGenerator.java:220)\n\tat net.minecraft.world.level.chunk.ChunkGenerator.int getBaseHeight(int,int,net.minecraft.world.level.levelgen.Heightmap$Types)(ChunkGenerator.java:220)\n\tat net.minecraft.world.level.chunk.ChunkGenerator.net.minecraft.world.level.BlockGetter getBaseColumn(int,int)(ChunkGenerator.java:220)\n\tat net.minecraft.world.level.chunk.ChunkStatus.java.util.concurrent.CompletableFuture lambda$static$9(net.minecraft.world.level.chunk.ChunkStatus,net.minecraft.server.level.ServerLevel,net.minecraft.world.level.chunk.ChunkGenerator,net.minecraft.world.level.levelgen.structure.templatesystem.StructureManager,net.minecraft.server.level.ThreadedLevelLightEngine,java.util.function.Function,java.util.List,net.minecraft.world.level.chunk.ChunkAccess)(ChunkStatus.java:89)\n\tat net.minecraft.world.level.chunk.ChunkStatus.java.util.concurrent.CompletableFuture generate(net.minecraft.server.level.ServerLevel,net.minecraft.world.level.chunk.ChunkGenerator,net.minecraft.world.level.levelgen.structure.templatesystem.StructureManager,net.minecraft.server.level.ThreadedLevelLightEngine,java.util.function.Function,java.util.List)(ChunkStatus.java:219)\n\n-- Chunk to be generated --\nDetails:\n\tLocation: -47,6192\n\tPosition hash: 26598732464081\n\tGenerator: cho@382fd5f3\nStacktrace:\n\tat net.minecraft.server.level.ChunkMap.java.util.concurrent.CompletableFuture lambda$null$18(net.minecraft.world.level.ChunkPos,net.minecraft.server.level.ChunkHolder,net.minecraft.world.level.chunk.ChunkStatus,java.util.List)(ChunkMap.java:568)\n\tat com.mojang.datafixers.util.Either$Left.null map(null)(Either.java:38)\n\tat net.minecraft.server.level.ChunkMap.java.util.concurrent.CompletionStage lambda$scheduleChunkGeneration$20(net.minecraft.world.level.ChunkPos,net.minecraft.server.level.ChunkHolder,net.minecraft.world.level.chunk.ChunkStatus,com.mojang.datafixers.util.Either)(ChunkMap.java:562)\n\tat java.base/java.util.concurrent.CompletableFuture$UniCompose.tryFire(CompletableFuture.java:1072)\n\tat java.base/java.util.concurrent.CompletableFuture$Completion.run(CompletableFuture.java:478)\n\tat net.minecraft.server.level.ChunkTaskPriorityQueueSorter.void lambda$null$1(java.lang.Runnable,net.minecraft.util.thread.ProcessorHandle)(ChunkTaskPriorityQueueSorter.java:58)\n\tat net.minecraft.util.thread.ProcessorMailbox.boolean pollTask()(ProcessorMailbox.java:94)\n\n-- Entity being ticked --\nDetails:\n\tEntity Type: minecraft:falling_block (bcu)\n\tEntity ID: 2126\n\tEntity Name: Falling Block\n\tEntity's Exact location: -702.50, 30.01, 99062.50\n\tEntity's Block location: World: (-703,30,99062), Chunk: (at 1,1,6 in -44,6191; contains blocks -704,0,99056 to -689,255,99071), Region: (-2,193; contains chunks -64,6176 to -33,6207, blocks -1024,0,98816 to -513,255,99327)\n\tEntity's Momentum: 0.00, 0.00, 0.00\n\tEntity's Passengers: []\n\tEntity's Vehicle: ~~ERROR~~ NullPointerException: null\n\tImmitating BlockState: Block{minecraft:sand}\nStacktrace:\n\tat net.minecraft.world.level.Level.void sendBlockUpdated(net.minecraft.core.BlockPos,net.minecraft.world.level.block.state.BlockState,net.minecraft.world.level.block.state.BlockState,int)(Level.java:564)\n\tat net.minecraft.world.level.Level.void playSound(net.minecraft.world.entity.player.Player,double,double,double,net.minecraft.sounds.SoundEvent,net.minecraft.sounds.SoundSource,float,float)(Level.java:564)\n\tat net.minecraft.world.level.Level.void playSound(net.minecraft.world.entity.player.Player,net.minecraft.world.entity.Entity,net.minecraft.sounds.SoundEvent,net.minecraft.sounds.SoundSource,float,float)(Level.java:564)\n\tat net.minecraft.world.level.Level.void guardEntityTick(java.util.function.Consumer,net.minecraft.world.entity.Entity)(Level.java:564)\n\tat net.minecraft.world.level.Level.net.minecraft.world.entity.Entity getEntity(int)(Level.java:564)\n\tat net.minecraft.world.level.Level.net.minecraft.world.level.saveddata.maps.MapItemSavedData getMapData(java.lang.String)(Level.java:564)\n\tat net.minecraft.world.level.Level.void setMapData(net.minecraft.world.level.saveddata.maps.MapItemSavedData)(Level.java:564)\n\tat net.minecraft.world.level.Level.void destroyBlockProgress(int,net.minecraft.core.BlockPos,int)(Level.java:564)\n\tat net.minecraft.server.level.ServerLevel.void tick(java.util.function.BooleanSupplier)(ServerLevel.java:411)\n\tat net.minecraft.server.MinecraftServer.void tickChildren(java.util.function.BooleanSupplier)(MinecraftServer.java:871)\n\tat net.minecraft.server.dedicated.DedicatedServer.void tickChildren(java.util.function.BooleanSupplier)(DedicatedServer.java:312)\n\tat net.minecraft.server.MinecraftServer.void tickServer(java.util.function.BooleanSupplier)(MinecraftServer.java:811)\n\tat net.minecraft.server.MinecraftServer.boolean publishServer(net.minecraft.world.level.GameType,boolean,int)(MinecraftServer.java:811)\n\tat net.minecraft.server.MinecraftServer.boolean isSingleplayerOwner(com.mojang.authlib.GameProfile)(MinecraftServer.java:811)\n\tat net.minecraft.server.MinecraftServer.void runServer()(MinecraftServer.java:670)\n\tat net.minecraft.server.MinecraftServer.net.minecraft.server.MinecraftServer spin(java.util.function.Function)(MinecraftServer.java:257)\n\tat net.minecraft.server.MinecraftServer.boolean publishServer(net.minecraft.world.level.GameType,boolean,int)(MinecraftServer.java:257)\n\tat net.minecraft.server.MinecraftServer.boolean isSingleplayerOwner(com.mojang.authlib.GameProfile)(MinecraftServer.java:257)\n\tat net.minecraft.server.MinecraftServer.void lambda$spin$0(java.util.concurrent.atomic.AtomicReference)(MinecraftServer.java:257)\n\tat java.base/java.lang.Thread.run(Thread.java:834)\n\n-- Affected level --\nDetails:\n\tAll players: 1 total; [aah['Marcono1234'/292, l='ServerLevel[world]', x=-659.01, y=95.90, z=99029.02]]\n\tChunk stats: ServerChunkCache: 3079\n\tLevel dimension: minecraft:overworld\n\tLevel spawn location: World: (-208,67,208), Chunk: (at 0,4,0 in -13,13; contains blocks -208,0,208 to -193,255,223), Region: (-1,0; contains chunks -32,0 to -1,31, blocks -512,0,0 to -1,255,511)\n\tLevel time: 17947 game time, 17947 day time\n\tLevel name: world\n\tLevel game mode: Game mode: survival (ID 0). Hardcore: false. Cheats: false\n\tLevel weather: Rain time: 140516 (now: false), thunder time: 23783 (now: false)\n\tKnown server brands: vanilla\n\tLevel was modded: true\n\tLevel storage version: 0x04ABD - Anvil\n\n-- System Details --\nDetails:\n\tMinecraft Version: 1.16.5\n\tMinecraft Version ID: 1.16.5\n\tOperating System: Windows 10 (amd64) version 10.0\n\tJava Version: 11.0.5, AdoptOpenJDK\n\tJava VM Version: OpenJDK 64-Bit Server VM (mixed mode), AdoptOpenJDK\n\tMemory: 425461760 bytes (405 MB) / 1073741824 bytes (1024 MB) up to 2147483648 bytes (2048 MB)\n\tCPUs: 6\n\tJVM Flags: 0 total; \n\tPlayer Count: 1 / 20; [aah['Marcono1234'/292, l='ServerLevel[world]', x=-659.01, y=95.90, z=99029.02]]\n\tData Packs: vanilla, file/MC-224778.zip (incompatible)\n\tIs Modded: Unknown (can't tell)\n\tType: Dedicated Server (map_server.txt)\n", + "deobfException" : "java.lang.IllegalArgumentException: Cannot set property cfb{name=facing, clazz=class gc, values=[north, south, west, east]} as it does not exist in Block{minecraft:quartz_bricks}\nat net.minecraft.world.level.block.state.StateHolder.java.lang.Object setValue(net.minecraft.world.level.block.state.properties.Property,java.lang.Comparable)(StateHolder.java:114)\nat net.minecraft.world.level.levelgen.feature.CoralFeature.boolean placeCoralBlock(net.minecraft.world.level.LevelAccessor,java.util.Random,net.minecraft.core.BlockPos,net.minecraft.world.level.block.state.BlockState)(CoralFeature.java:51)\nat net.minecraft.world.level.levelgen.feature.CoralMushroomFeature.boolean placeFeature(net.minecraft.world.level.LevelAccessor,java.util.Random,net.minecraft.core.BlockPos,net.minecraft.world.level.block.state.BlockState)(CoralMushroomFeature.java:58)\nat net.minecraft.world.level.levelgen.feature.CoralFeature.boolean place(net.minecraft.world.level.WorldGenLevel,net.minecraft.world.level.chunk.ChunkGenerator,java.util.Random,net.minecraft.core.BlockPos,net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration)(CoralFeature.java:27)\nat net.minecraft.world.level.levelgen.feature.CoralFeature.boolean placeFeature(net.minecraft.world.level.LevelAccessor,java.util.Random,net.minecraft.core.BlockPos,net.minecraft.world.level.block.state.BlockState)(CoralFeature.java:27)\nat net.minecraft.world.level.levelgen.feature.CoralFeature.boolean placeFeature(net.minecraft.world.level.LevelAccessor,java.util.Random,net.minecraft.core.BlockPos,net.minecraft.world.level.block.state.BlockState)(CoralFeature.java:19)\nat net.minecraft.world.level.levelgen.feature.CoralFeature.boolean place(net.minecraft.world.level.WorldGenLevel,net.minecraft.world.level.chunk.ChunkGenerator,java.util.Random,net.minecraft.core.BlockPos,net.minecraft.world.level.levelgen.feature.configurations.FeatureConfiguration)(CoralFeature.java:19)\nat net.minecraft.world.level.levelgen.feature.ConfiguredFeature.boolean place(net.minecraft.world.level.WorldGenLevel,net.minecraft.world.level.chunk.ChunkGenerator,java.util.Random,net.minecraft.core.BlockPos)(ConfiguredFeature.java:55)\nat net.minecraft.world.level.levelgen.feature.SimpleRandomSelectorFeature.boolean place(net.minecraft.world.level.WorldGenLevel,net.minecraft.world.level.chunk.ChunkGenerator,java.util.Random,net.minecraft.core.BlockPos,net.minecraft.world.level.levelgen.feature.configurations.SimpleRandomFeatureConfiguration)(SimpleRandomSelectorFeature.java:20)\nat net.minecraft.world.level.levelgen.feature.SimpleRandomSelectorFeature.boolean place(net.minecraft.world.level.WorldGenLevel,net.minecraft.world.level.chunk.ChunkGenerator,java.util.Random,net.minecraft.core.BlockPos,net.minecraft.world.level.levelgen.feature.configurations.FeatureConfiguration)(SimpleRandomSelectorFeature.java:11)\nat net.minecraft.world.level.levelgen.feature.ConfiguredFeature.boolean place(net.minecraft.world.level.WorldGenLevel,net.minecraft.world.level.chunk.ChunkGenerator,java.util.Random,net.minecraft.core.BlockPos)(ConfiguredFeature.java:55)\nat net.minecraft.world.level.levelgen.feature.DecoratedFeature.boolean place(net.minecraft.world.level.WorldGenLevel,net.minecraft.world.level.chunk.ChunkGenerator,java.util.Random,net.minecraft.core.BlockPos,net.minecraft.world.level.levelgen.feature.configurations.DecoratedFeatureConfiguration)(DecoratedFeature.java:23)\nat net.minecraft.world.level.levelgen.feature.DecoratedFeature.void lambda$place$0(net.minecraft.world.level.levelgen.feature.configurations.DecoratedFeatureConfiguration,net.minecraft.world.level.WorldGenLevel,net.minecraft.world.level.chunk.ChunkGenerator,java.util.Random,org.apache.commons.lang3.mutable.MutableBoolean,net.minecraft.core.BlockPos)(DecoratedFeature.java:23)\nat java.base/java.util.stream.Streams$StreamBuilderImpl.forEachRemaining(Streams.java:411)\nat java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:658)\nat net.minecraft.world.level.levelgen.feature.DecoratedFeature.boolean place(net.minecraft.world.level.WorldGenLevel,net.minecraft.world.level.chunk.ChunkGenerator,java.util.Random,net.minecraft.core.BlockPos,net.minecraft.world.level.levelgen.feature.configurations.DecoratedFeatureConfiguration)(DecoratedFeature.java:22)\nat net.minecraft.world.level.levelgen.feature.DecoratedFeature.boolean place(net.minecraft.world.level.WorldGenLevel,net.minecraft.world.level.chunk.ChunkGenerator,java.util.Random,net.minecraft.core.BlockPos,net.minecraft.world.level.levelgen.feature.configurations.FeatureConfiguration)(DecoratedFeature.java:14)\nat net.minecraft.world.level.levelgen.feature.ConfiguredFeature.boolean place(net.minecraft.world.level.WorldGenLevel,net.minecraft.world.level.chunk.ChunkGenerator,java.util.Random,net.minecraft.core.BlockPos)(ConfiguredFeature.java:55)\nat net.minecraft.world.level.levelgen.feature.DecoratedFeature.boolean place(net.minecraft.world.level.WorldGenLevel,net.minecraft.world.level.chunk.ChunkGenerator,java.util.Random,net.minecraft.core.BlockPos,net.minecraft.world.level.levelgen.feature.configurations.DecoratedFeatureConfiguration)(DecoratedFeature.java:23)\nat net.minecraft.world.level.levelgen.feature.DecoratedFeature.void lambda$place$0(net.minecraft.world.level.levelgen.feature.configurations.DecoratedFeatureConfiguration,net.minecraft.world.level.WorldGenLevel,net.minecraft.world.level.chunk.ChunkGenerator,java.util.Random,org.apache.commons.lang3.mutable.MutableBoolean,net.minecraft.core.BlockPos)(DecoratedFeature.java:23)\nat java.base/java.util.stream.Streams$StreamBuilderImpl.forEachRemaining(Streams.java:411)\nat java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:658)\nat net.minecraft.world.level.levelgen.feature.DecoratedFeature.boolean place(net.minecraft.world.level.WorldGenLevel,net.minecraft.world.level.chunk.ChunkGenerator,java.util.Random,net.minecraft.core.BlockPos,net.minecraft.world.level.levelgen.feature.configurations.DecoratedFeatureConfiguration)(DecoratedFeature.java:22)\nat net.minecraft.world.level.levelgen.feature.DecoratedFeature.boolean place(net.minecraft.world.level.WorldGenLevel,net.minecraft.world.level.chunk.ChunkGenerator,java.util.Random,net.minecraft.core.BlockPos,net.minecraft.world.level.levelgen.feature.configurations.FeatureConfiguration)(DecoratedFeature.java:14)\nat net.minecraft.world.level.levelgen.feature.ConfiguredFeature.boolean place(net.minecraft.world.level.WorldGenLevel,net.minecraft.world.level.chunk.ChunkGenerator,java.util.Random,net.minecraft.core.BlockPos)(ConfiguredFeature.java:55)\nat net.minecraft.world.level.levelgen.feature.DecoratedFeature.boolean place(net.minecraft.world.level.WorldGenLevel,net.minecraft.world.level.chunk.ChunkGenerator,java.util.Random,net.minecraft.core.BlockPos,net.minecraft.world.level.levelgen.feature.configurations.DecoratedFeatureConfiguration)(DecoratedFeature.java:23)\nat net.minecraft.world.level.levelgen.feature.DecoratedFeature.void lambda$place$0(net.minecraft.world.level.levelgen.feature.configurations.DecoratedFeatureConfiguration,net.minecraft.world.level.WorldGenLevel,net.minecraft.world.level.chunk.ChunkGenerator,java.util.Random,org.apache.commons.lang3.mutable.MutableBoolean,net.minecraft.core.BlockPos)(DecoratedFeature.java:23)\nat java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)\nat java.base/java.util.stream.IntPipeline$1$1.accept(IntPipeline.java:180)\nat java.base/java.util.stream.Streams$RangeIntSpliterator.forEachRemaining(Streams.java:104)\nat java.base/java.util.Spliterator$OfInt.forEachRemaining(Spliterator.java:699)\nat java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)\nat java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)\nat java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)\nat java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)\nat java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)\nat java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:497)\nat net.minecraft.world.level.levelgen.feature.DecoratedFeature.boolean place(net.minecraft.world.level.WorldGenLevel,net.minecraft.world.level.chunk.ChunkGenerator,java.util.Random,net.minecraft.core.BlockPos,net.minecraft.world.level.levelgen.feature.configurations.DecoratedFeatureConfiguration)(DecoratedFeature.java:22)\nat net.minecraft.world.level.levelgen.feature.DecoratedFeature.boolean place(net.minecraft.world.level.WorldGenLevel,net.minecraft.world.level.chunk.ChunkGenerator,java.util.Random,net.minecraft.core.BlockPos,net.minecraft.world.level.levelgen.feature.configurations.FeatureConfiguration)(DecoratedFeature.java:14)\nat net.minecraft.world.level.levelgen.feature.ConfiguredFeature.boolean place(net.minecraft.world.level.WorldGenLevel,net.minecraft.world.level.chunk.ChunkGenerator,java.util.Random,net.minecraft.core.BlockPos)(ConfiguredFeature.java:55)\nat net.minecraft.world.level.biome.Biome.void generate(net.minecraft.world.level.StructureFeatureManager,net.minecraft.world.level.chunk.ChunkGenerator,net.minecraft.server.level.WorldGenRegion,long,net.minecraft.world.level.levelgen.WorldgenRandom,net.minecraft.core.BlockPos)(Biome.java:373)\nat net.minecraft.world.level.chunk.ChunkGenerator.com.mojang.serialization.Codec codec()(ChunkGenerator.java:220)\nat net.minecraft.world.level.chunk.ChunkGenerator.net.minecraft.world.level.chunk.ChunkGenerator withSeed(long)(ChunkGenerator.java:220)\nat net.minecraft.world.level.chunk.ChunkGenerator.void applyBiomeDecoration(net.minecraft.server.level.WorldGenRegion,net.minecraft.world.level.StructureFeatureManager)(ChunkGenerator.java:220)\nat net.minecraft.world.level.chunk.ChunkGenerator.void buildSurfaceAndBedrock(net.minecraft.server.level.WorldGenRegion,net.minecraft.world.level.chunk.ChunkAccess)(ChunkGenerator.java:220)\nat net.minecraft.world.level.chunk.ChunkGenerator.void fillFromNoise(net.minecraft.world.level.LevelAccessor,net.minecraft.world.level.StructureFeatureManager,net.minecraft.world.level.chunk.ChunkAccess)(ChunkGenerator.java:220)\nat net.minecraft.world.level.chunk.ChunkGenerator.int getBaseHeight(int,int,net.minecraft.world.level.levelgen.Heightmap$Types)(ChunkGenerator.java:220)\nat net.minecraft.world.level.chunk.ChunkGenerator.net.minecraft.world.level.BlockGetter getBaseColumn(int,int)(ChunkGenerator.java:220)\nat net.minecraft.world.level.chunk.ChunkStatus.java.util.concurrent.CompletableFuture lambda$static$9(net.minecraft.world.level.chunk.ChunkStatus,net.minecraft.server.level.ServerLevel,net.minecraft.world.level.chunk.ChunkGenerator,net.minecraft.world.level.levelgen.structure.templatesystem.StructureManager,net.minecraft.server.level.ThreadedLevelLightEngine,java.util.function.Function,java.util.List,net.minecraft.world.level.chunk.ChunkAccess)(ChunkStatus.java:89)\nat net.minecraft.world.level.chunk.ChunkStatus.java.util.concurrent.CompletableFuture generate(net.minecraft.server.level.ServerLevel,net.minecraft.world.level.chunk.ChunkGenerator,net.minecraft.world.level.levelgen.structure.templatesystem.StructureManager,net.minecraft.server.level.ThreadedLevelLightEngine,java.util.function.Function,java.util.List)(ChunkStatus.java:219)\nat net.minecraft.server.level.ChunkMap.java.util.concurrent.CompletableFuture lambda$null$18(net.minecraft.world.level.ChunkPos,net.minecraft.server.level.ChunkHolder,net.minecraft.world.level.chunk.ChunkStatus,java.util.List)(ChunkMap.java:568)\nat com.mojang.datafixers.util.Either$Left.null map(null)(Either.java:38)\nat net.minecraft.server.level.ChunkMap.java.util.concurrent.CompletionStage lambda$scheduleChunkGeneration$20(net.minecraft.world.level.ChunkPos,net.minecraft.server.level.ChunkHolder,net.minecraft.world.level.chunk.ChunkStatus,com.mojang.datafixers.util.Either)(ChunkMap.java:562)\nat java.base/java.util.concurrent.CompletableFuture$UniCompose.tryFire(CompletableFuture.java:1072)\nat java.base/java.util.concurrent.CompletableFuture$Completion.run(CompletableFuture.java:478)\nat net.minecraft.server.level.ChunkTaskPriorityQueueSorter.void lambda$null$1(java.lang.Runnable,net.minecraft.util.thread.ProcessorHandle)(ChunkTaskPriorityQueueSorter.java:58)\nat net.minecraft.util.thread.ProcessorMailbox.boolean pollTask()(ProcessorMailbox.java:94)\nat net.minecraft.util.thread.ProcessorMailbox.int pollUntil(it.unimi.dsi.fastutil.ints.Int2BooleanFunction)(ProcessorMailbox.java:137)\nat net.minecraft.util.thread.ProcessorMailbox.void run()(ProcessorMailbox.java:105)\nat java.base/java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(ForkJoinTask.java:1426)\nat java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290)\nat java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1020)\nat java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1656)\nat java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1594)\nat java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:177)" } \ No newline at end of file diff --git a/src/test/resources/crashes/minecraft/old-IllegalArgumentException-parsed.txt b/src/test/resources/crashes/minecraft/old-IllegalArgumentException-parsed.txt index 6961bbc..c6c17ba 100644 --- a/src/test/resources/crashes/minecraft/old-IllegalArgumentException-parsed.txt +++ b/src/test/resources/crashes/minecraft/old-IllegalArgumentException-parsed.txt @@ -1,5 +1,6 @@ { "modded" : false, + "wasLevelOpenedModded" : null, "exception" : "java.lang.IllegalArgumentException: bound must be positive\nat java.util.Random.nextInt(Random.java:388)\nat ary.a(SourceFile:194)\nat ary.a(SourceFile:49)\nat arm.a(SourceFile:389)\nat asu.a(SourceFile:86)\nat bgv.a(SourceFile:472)\nat qs.a(SourceFile:174)\nat bfh.a(SourceFile:861)\nat qs.c(SourceFile:104)\nat qs.d(SourceFile:116)\nat aqu.a(SourceFile:276)\nat aqu.f(SourceFile:272)\nat aqu.p(SourceFile:657)\nat awn.b(SourceFile:66)\nat atr.a(SourceFile:437)\nat qt.h(SourceFile:384)\nat qt.c(SourceFile:202)\nat net.minecraft.server.MinecraftServer.z(SourceFile:599)\nat po.z(SourceFile:305)\nat net.minecraft.server.MinecraftServer.y(SourceFile:531)\nat net.minecraft.server.MinecraftServer.run(SourceFile:447)\nat java.lang.Thread.run(Thread.java:748)", "minecraftVersion" : "1.8", "isClient" : false, diff --git a/src/test/resources/crashes/minecraft/old-Pixel format not accelerated-parsed.txt b/src/test/resources/crashes/minecraft/old-Pixel format not accelerated-parsed.txt index aecc502..5150feb 100644 --- a/src/test/resources/crashes/minecraft/old-Pixel format not accelerated-parsed.txt +++ b/src/test/resources/crashes/minecraft/old-Pixel format not accelerated-parsed.txt @@ -1,5 +1,6 @@ { "modded" : false, + "wasLevelOpenedModded" : null, "exception" : "org.lwjgl.LWJGLException: Pixel format not accelerated", "minecraftVersion" : "1.8.9", "isClient" : true, diff --git a/src/test/resources/crashes/minecraft/old-modded-debug-crash-parsed.txt b/src/test/resources/crashes/minecraft/old-modded-debug-crash-parsed.txt index 93ce920..d242a0b 100644 --- a/src/test/resources/crashes/minecraft/old-modded-debug-crash-parsed.txt +++ b/src/test/resources/crashes/minecraft/old-modded-debug-crash-parsed.txt @@ -1,5 +1,6 @@ { "modded" : true, + "wasLevelOpenedModded" : null, "exception" : "java.lang.Throwable\nat cep.b(SourceFile:486)\nat ces.ae_(SourceFile:1311)\nat ces.c(SourceFile:808)\nat ces.a(SourceFile:380)\nat net.minecraft.client.main.Main.main(SourceFile:144)", "minecraftVersion" : "1.13-pre6", "isClient" : true, diff --git a/src/test/resources/crashes/minecraft/watchdog-parsed.txt b/src/test/resources/crashes/minecraft/watchdog-parsed.txt index ebcb0fa..6a65193 100644 --- a/src/test/resources/crashes/minecraft/watchdog-parsed.txt +++ b/src/test/resources/crashes/minecraft/watchdog-parsed.txt @@ -1,5 +1,6 @@ { "modded" : false, + "wasLevelOpenedModded" : null, "exception" : "java.lang.Error\nat java.io.RandomAccessFile.read0(Native Method)\nat java.io.RandomAccessFile.read(RandomAccessFile.java:337)\nat java.io.RandomAccessFile.readInt(RandomAccessFile.java:799)\nat byi.(SourceFile:128)\nat byj.a(SourceFile:40)\nat byj.e(SourceFile:47)\nat uw.g(SourceFile:816)\nat uw.j(SourceFile:506)\nat uw$$Lambda$2128/201498946.get(Unknown Source)\nat java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1590)\nat agq.h(SourceFile:144)\nat agq.q(SourceFile:118)\nat vi$a.q(SourceFile:550)\nat agq.c(SourceFile:127)\nat vi.a(SourceFile:135)\nat bhr.a(SourceFile:194)\nat bhu.a(SourceFile:106)\nat ceu.a(SourceFile:128)\nat bxi.a(SourceFile:112)\nat vk.a(SourceFile:1176)\nat sq.a(SourceFile:47)\nat sq.a(SourceFile:41)\nat sq$$Lambda$1631/527979439.run(Unknown Source)\nat com.mojang.brigadier.CommandDispatcher.execute(CommandDispatcher.java:262)\nat com.mojang.brigadier.CommandDispatcher.execute(CommandDispatcher.java:176)\nat ce.a(SourceFile:225)\nat wc.c(SourceFile:1067)\nat wc.a(SourceFile:1054)\nat ny.a(SourceFile:37)\nat ny.a(SourceFile:9)\nat ke.a(SourceFile:21)\nat ke$$Lambda$2445/1038006101.run(Unknown Source)\nat rk.run(SourceFile:18)\nat agq.h(SourceFile:144)\nat agu.h(SourceFile:23)\nat agq.q(SourceFile:118)\nat net.minecraft.server.MinecraftServer.aX(SourceFile:712)\nat net.minecraft.server.MinecraftServer.q(SourceFile:706)\nat agq.c(SourceFile:127)\nat net.minecraft.server.MinecraftServer.p(SourceFile:691)\nat net.minecraft.server.MinecraftServer.run(SourceFile:646)\nat java.lang.Thread.run(Thread.java:748)", "minecraftVersion" : "1.14.4-pre6", "isClient" : false,