mojira.dev
MC-299006

invalid loot table with empty target in copy_custom_data ops makes armor stand unbreakable

If minecraft/loot_table/entities/armor_stand.jsonhas something invalid in the target field, server throws an exception, armor stand item is spawned, and armor stand remains.

{
  "type": "minecraft:entity",
  "random_sequence": "minecraft:entities/armor_stand",
  "pools": [
    {
      "rolls": 1,
      "entries": [
        {
          "type": "minecraft:item",
          "name": "minecraft:slime_ball",
          "functions": [
            {
              "function": "minecraft:copy_custom_data",
              "source": "this",
              "ops": [
                {
                  "source": "",
                  "target": "",
                  "op": "replace"
                }
              ]
            }
          ]
        }
      ]
    }
  ]
}

while the loot table is invalid, expected behavior would be something similar to setting target to . [12:44:10] [Worker-Main-2/ERROR]: Couldn't parse data file 'minecraft:entities/armor_stand' from 'minecraft:loot_table/entities/armor_stand.json': DataResult.Error['Failed to parse path .: Invalid NBT path element at position 0: <--[HERE]': fdo@41e865fa] rather than an exception and unbreakable entity.

Exception thrown:

[12:31:08] [Server thread/ERROR]: Failed to handle packet aij@71def426, suppressing error
java.lang.ArrayIndexOutOfBoundsException: Index -1 out of bounds for length 0
	at fe$g.a(SourceFile:209) ~[server-1.21.6.jar:?]
	at fek$c$3.a(SourceFile:162) ~[server-1.21.6.jar:?]
	at fek$b.a(SourceFile:41) ~[server-1.21.6.jar:?]
	at fek.a(SourceFile:87) ~[server-1.21.6.jar:?]
	at java.base/java.lang.Iterable.forEach(Iterable.java:75) ~[?:?]
	at fek.a(SourceFile:87) ~[server-1.21.6.jar:?]
	at few.b(SourceFile:38) ~[server-1.21.6.jar:?]
	at few.apply(SourceFile:18) ~[server-1.21.6.jar:?]
	at fez.a(SourceFile:90) ~[server-1.21.6.jar:?]
	at fex.a(SourceFile:16) ~[server-1.21.6.jar:?]
	at fdw.a(SourceFile:35) ~[server-1.21.6.jar:?]
	at feb$1.a(SourceFile:67) ~[server-1.21.6.jar:?]
	at fdn.b(SourceFile:77) ~[server-1.21.6.jar:?]
	at fdn.a(SourceFile:100) ~[server-1.21.6.jar:?]
	at fdo.a(SourceFile:98) ~[server-1.21.6.jar:?]
	at fdo.a(SourceFile:107) ~[server-1.21.6.jar:?]
	at cam.b(SourceFile:1590) ~[server-1.21.6.jar:?]
	at cam.b(SourceFile:1539) ~[server-1.21.6.jar:?]
	at cqo.d(SourceFile:406) ~[server-1.21.6.jar:?]
	at cqo.c(SourceFile:401) ~[server-1.21.6.jar:?]
	at cqo.a(SourceFile:346) ~[server-1.21.6.jar:?]
	at bzm.b(SourceFile:1977) ~[server-1.21.6.jar:?]
	at cut.e(SourceFile:1271) ~[server-1.21.6.jar:?]
	at auc.e(SourceFile:1946) ~[server-1.21.6.jar:?]
	at avf$1.a(SourceFile:1862) ~[server-1.21.6.jar:?]
	at aij$1.a(SourceFile:174) ~[server-1.21.6.jar:?]
	at aij.a(SourceFile:74) ~[server-1.21.6.jar:?]
	at avf.a(SourceFile:1821) ~[server-1.21.6.jar:?]
	at aij.a(SourceFile:61) ~[server-1.21.6.jar:?]
	at aij.a(SourceFile:15) ~[server-1.21.6.jar:?]
	at zz.a(SourceFile:27) ~[server-1.21.6.jar:?]
	at anb.run(SourceFile:18) ~[server-1.21.6.jar:?]
	at bvx.d(SourceFile:164) ~[server-1.21.6.jar:?]
	at bwc.d(SourceFile:23) ~[server-1.21.6.jar:?]
	at net.minecraft.server.MinecraftServer.b(SourceFile:883) ~[server-1.21.6.jar:?]
	at net.minecraft.server.MinecraftServer.d(SourceFile:179) ~[server-1.21.6.jar:?]
	at bvx.B(SourceFile:138) ~[server-1.21.6.jar:?]
	at net.minecraft.server.MinecraftServer.bv(SourceFile:865) ~[server-1.21.6.jar:?]
	at net.minecraft.server.MinecraftServer.B(SourceFile:859) ~[server-1.21.6.jar:?]
	at bvx.b(SourceFile:147) ~[server-1.21.6.jar:?]
	at net.minecraft.server.MinecraftServer.b(SourceFile:823) ~[server-1.21.6.jar:?]
	at net.minecraft.server.MinecraftServer.w_(SourceFile:830) ~[server-1.21.6.jar:?]
	at net.minecraft.server.MinecraftServer.y(SourceFile:713) ~[server-1.21.6.jar:?]
	at net.minecraft.server.MinecraftServer.a(SourceFile:291) ~[server-1.21.6.jar:?]
	at java.base/java.lang.Thread.run(Thread.java:1583) [?:?]

Comments 1

Can confirm in Minecraft 1.21.7 release candidate 2. If the armor stand dies via another source within the world (not from a player action), then the server/client crashes.

knirch

(Unassigned)

Community Consensus

Platform

Normal

Loot tables

1.21.6, 1.21.7 Release Candidate 2

Retrieved