某静静之前曾试图使用Ctrl
+鼠标中键
获取带有NBT的刷怪箱,然而结果显而易见是徒劳的。
某日,笔者突发奇想:之前曾经使用/data get block
“拆解”了一个位于箱子中(+NBT)
的命令方块,那么是不是可以借助/summon
或者/data merge
获得带有NBT的刷怪箱的物品形式呢?
我们先从物品的NBT入手。
首先,我们向一个命令方块的控制台命令写入searge
,点击完成
,然后丢出这个命令方块,运行/data get entity @e[type=minecraft:item, sort=nearest, limit=1]
,我们就得到了命令方块物品的NBT了(为了表达简洁,笔者删除了不必要的NBT):{Item: {id: "minecraft:command_block", Count: 1b, tag: {BlockEntityTag: {conditionMet: 1b, auto: 0b, powered: 0b, CustomName: "{\"text\":\"@\"}", Command: "searge", id: "minecraft:command_block", SuccessCount: 1, LastOutput: "{\"text\":\"#itzlipofutzli\"}", TrackOutput: 1b, UpdateLastExecution: 1b}, display: {Lore: ["(+NBT)"]}}}}
。
显然,在id
这个标签记录物品类型的同时,tag
这个标签记录了物品以minecaft:item
实体(为了简略,下文称为掉落物
)存在时物品的属性了(推广:对于容器内/物品栏/护甲栏内物品也同样适用),而BlockEntityTag
这个子标签存储的,正是我们需要的方块实体值。
接下来,我们以获取一个混合刷怪箱的物品形式为例(由于命令较长,建议在命令方块中运行)。
/summon minecraft:item ~ ~1 ~ {Item: {id: "minecraft:spawner", Count: 1b, tag: {BlockEntityTag: {MaxNearbyEntities: 6s, RequiredPlayerRange: 16s, SpawnCount: 6s, SpawnData: {id: "minecraft:creeper"}, MaxSpawnDelay: 1s, Delay: 1s, id: "minecraft:mob_spawner", SpawnRange: 4s, MinSpawnDelay: 1s, SpawnPotentials: [{Entity: {id: "minecraft:skeleton"}, Weight: 1}, {Entity: {id: "minecraft:zombie"}, Weight: 1}, {Entity: {id: "minecraft:creeper"}, Weight: 1}]}, display: {Lore: ["(+NBT)"]}}}}
Item
标签记载物品以掉落物存在时的物品原始类型和属性(由于1.13的改动,耐久的记录移入了Damage
这个标签)。刷怪箱的物品ID是minecraft:spawner
(然而方块实体值的ID还是minecraft:mob_spawner
,逃),因此我们只要修改id
这个子标签为minecraft:spawner
的同时替换BlockEntityTag
即可得到我们最终的目标刷怪箱。
接下来,就是见证奇迹的时刻……


经过测试,只要正确替换id
和BlockEntityTag
,亦可使用/give
或/data merge
获得目标刷怪箱物品形式。
P.S.:此方法获得的刷怪箱只能在创造模式下正确放置,生存/冒险模式放置会变为猪刷怪箱。