The bug
Previously, a loot table could apply a list of item modifiers, with some declared inline and some being references:
{
"pools": [
{
"rolls": 1,
"entries": [
{
"type": "item",
"name": "apple",
"functions": [
{
"function": "set_count",
"count": 5
},
{
"function": "reference",
"name": "test:whatever"
}
]
}
]
}
]
}The new syntax would look like this:
{
"pools": [
{
"rolls": 1,
"entries": [
{
"type": "item",
"name": "apple",
"modifier": [
{
"type": "set_count",
"count": 5
},
"test:whatever"
]
}
]
}
]
}However, this does not work. This prevents the world from loading, and causes /reload to fail. The following error is logged:
[09:54:58] [Server thread/WARN]: Failed to execute reload
java.util.concurrent.CompletionException: java.lang.StackOverflowError
at java.base/java.util.concurrent.CompletableFuture.wrapInCompletionException(CompletableFuture.java:323)
at java.base/java.util.concurrent.CompletableFuture.encodeThrowable(CompletableFuture.java:359)
at java.base/java.util.concurrent.CompletableFuture.completeThrowable(CompletableFuture.java:364)
at java.base/java.util.concurrent.CompletableFuture$AsyncRun.run(CompletableFuture.java:1828)
at java.base/java.util.concurrent.CompletableFuture$AsyncRun.exec(CompletableFuture.java:1817)
at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:511)
at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1450)
at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:2019)
at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:187)
Caused by: java.lang.StackOverflowError
at net.minecraft.resources.Identifier.bySeparator(Identifier.java:81)
at net.minecraft.resources.Identifier.parse(Identifier.java:50)
at net.minecraft.resources.Identifier.read(Identifier.java:105)
at com.mojang.serialization.Decoder$1.lambda$decode$1(Decoder.java:49)
at com.mojang.serialization.DataResult$Success.flatMap(DataResult.java:201)
at com.mojang.serialization.Decoder$1.decode(Decoder.java:49)
at com.mojang.serialization.Codec$2.decode(Codec.java:74)
at com.mojang.serialization.Codec$1.decode(Codec.java:48)
at com.mojang.serialization.Decoder$1.decode(Decoder.java:49)
at com.mojang.serialization.Codec$2.decode(Codec.java:74)
at com.mojang.serialization.Codec$4.decode(Codec.java:333)
at com.mojang.serialization.Decoder$2.decode(Decoder.java:63)
at com.mojang.serialization.Codec$2.decode(Codec.java:74)
at com.mojang.serialization.Decoder.parse(Decoder.java:18)
at com.mojang.serialization.codecs.FieldDecoder.decode(FieldDecoder.java:29)
at com.mojang.serialization.MapCodec$2.decode(MapCodec.java:78)
at com.mojang.serialization.codecs.KeyDispatchCodec.decode(KeyDispatchCodec.java:37)
at com.mojang.serialization.MapDecoder.lambda$compressedDecode$1(MapDecoder.java:52)
at com.mojang.serialization.DataResult$Success.flatMap(DataResult.java:201)
at com.mojang.serialization.MapDecoder.compressedDecode(MapDecoder.java:52)
at com.mojang.serialization.MapCodec$MapCodecCodec.decode(MapCodec.java:159)
at com.mojang.serialization.codecs.EitherCodec.decode(EitherCodec.java:14)
at com.mojang.serialization.Decoder$2.decode(Decoder.java:63)
at com.mojang.serialization.Codec$2.decode(Codec.java:74)
at com.mojang.serialization.Codec$RecursiveCodec.decode(Codec.java:219)
at net.minecraft.resources.RegistryFileCodec.decode(RegistryFileCodec.java:65)
at com.mojang.serialization.codecs.ListCodec$DecoderState.accept(ListCodec.java:74)
at com.mojang.serialization.JsonOps.lambda$getList$21(JsonOps.java:308)
at com.mojang.serialization.codecs.ListCodec.lambda$decode$2(ListCodec.java:45)
at com.mojang.serialization.DataResult$Success.flatMap(DataResult.java:201)
at com.mojang.serialization.codecs.ListCodec.decode(ListCodec.java:43)
at com.mojang.serialization.Decoder$1.decode(Decoder.java:49)
at com.mojang.serialization.Codec$2.decode(Codec.java:74)
at com.mojang.serialization.codecs.EitherCodec.decode(EitherCodec.java:14)
at com.mojang.serialization.Decoder$2.decode(Decoder.java:63)
at com.mojang.serialization.Codec$2.decode(Codec.java:74)
at com.mojang.serialization.codecs.EitherCodec.decode(EitherCodec.java:18)
...
at com.mojang.serialization.Decoder$2.decode(Decoder.java:63)
at com.mojang.serialization.Codec$2.decode(Codec.java:74)
at com.mojang.serialization.codecs.EitherCodec.decode(EitherCodec.java:18)
at com.mojang.serialization.Decoder$2.decode(Decoder.java:63)
at com.mojang.serialization.Codec$2.decode(Codec.java:74)
at com.mojang.serialization.Codec$RecursiveCodec.decode(Codec.java:219)
at net.minecraft.resources.RegistryFileCodec.decode(RegistryFileCodec.java:65)
at com.mojang.serialization.codecs.EitherCodec.decode(EitherCodec.java:18)
at com.mojang.serialization.Decoder$2.decode(Decoder.java:63)
at com.mojang.serialization.Codec$2.decode(Codec.java:74)
at com.mojang.serialization.codecs.EitherCodec.decode(EitherCodec.java:18)
at net.minecraft.resources.HolderSetCodec.decode(HolderSetCodec.java:49)
at com.mojang.serialization.Decoder$2.decode(Decoder.java:63)
at com.mojang.serialization.Codec$2.decode(Codec.java:74)
at com.mojang.serialization.codecs.EitherCodec.decode(EitherCodec.java:18)
at com.mojang.serialization.Decoder$2.decode(Decoder.java:63)
at com.mojang.serialization.Codec$2.decode(Codec.java:74)
at com.mojang.serialization.Codec$RecursiveCodec.decode(Codec.java:219)
at net.minecraft.resources.RegistryFileCodec.decode(RegistryFileCodec.java:65)
at com.mojang.serialization.codecs.EitherCodec.decode(EitherCodec.java:18)
at com.mojang.serialization.Decoder$2.decode(Decoder.java:63)
at com.mojang.serialization.Codec$2.decode(Codec.java:74)
at com.mojang.serialization.codecs.EitherCodec.decode(EitherCodec.java:18)
at net.minecraft.resources.HolderSetCodec.decode(HolderSetCodec.java:49)
at com.mojang.serialization.Decoder$2.decode(Decoder.java:63)
at com.mojang.serialization.Codec$2.decode(Codec.java:74)[media]
Can confirm.