本帖最后由 ruhuasiyu 于 2020-4-26 06:28 编辑

起因是我在做物品处理机,处理任意64个物品压缩成1个带64× Lore的物品时,发现输出到箱子内时,如果要用loot insert的话,必须要解决动态物品id的问题。然后我发现似乎用"type": "minecraft:dynamic"类型配合挖掘潜影箱的战利品表,可以做到这一点。

例如玩家手持64个物品,我们想把其数量修改为32。
execute as @a[nbt={SelectedItem:{Count:64b}}] run function test:modify

test:modify
  1. setblock ~ 255 ~ shulker_box{Items:[{Slot:0b,id:"minecraft:stone",Count:32b}]}
  2. data modify block ~ 255 ~ Items[0].id set from entity @s SelectedItem.id
  3. data modify block ~ 255 ~ Items[0].tag set from entity @s SelectedItem.tag
  4. replaceitem entity @s weapon.mainhand air
  5. loot replace entity @s weapon.mainhand 1 mine ~ 255 ~ minecraft:diamond_pickaxe{isShulkerMarker:1b}
  6. setblock ~ 255 ~ air
复制代码

修改minecraft/loot_tables/blocks/shulker_box.json为使用特定nbt的镐挖掘时,掉落内含物而且不掉落潜影盒。
  1. {
  2.     "type": "minecraft:block",
  3.     "pools": [
  4.         {
  5.             "rolls": 1,
  6.             "entries": [
  7.                 {
  8.                     "type": "minecraft:alternatives",
  9.                     "children": [
  10.                         {
  11.                             "type": "minecraft:dynamic",
  12.                             "name": "minecraft:contents",
  13.                             "conditions": [
  14.                                 {
  15.                                     "condition": "minecraft:match_tool",
  16.                                     "predicate": {
  17.                                         "nbt":"{isShulkerMarker:1b}"
  18.                                     }
  19.                                 }
  20.                             ]
  21.                         },
  22.                         {
  23.                             "type": "minecraft:item",
  24.                             "functions": [
  25.                                 {
  26.                                     "function": "minecraft:copy_name",
  27.                                     "source": "block_entity"
  28.                                 },
  29.                                 {
  30.                                     "function": "minecraft:copy_nbt",
  31.                                     "source": "block_entity",
  32.                                     "ops": [
  33.                                         {
  34.                                             "source": "Lock",
  35.                                             "target": "BlockEntityTag.Lock",
  36.                                             "op": "replace"
  37.                                         },
  38.                                         {
  39.                                             "source": "LootTable",
  40.                                             "target": "BlockEntityTag.LootTable",
  41.                                             "op": "replace"
  42.                                         },
  43.                                         {
  44.                                             "source": "LootTableSeed",
  45.                                             "target": "BlockEntityTag.LootTableSeed",
  46.                                             "op": "replace"
  47.                                         }
  48.                                     ]
  49.                                 },
  50.                                 {
  51.                                     "function": "minecraft:set_contents",
  52.                                     "entries": [
  53.                                         {
  54.                                             "type": "minecraft:dynamic",
  55.                                             "name": "minecraft:contents"
  56.                                         }
  57.                                     ]
  58.                                 }
  59.                             ],
  60.                             "name": "minecraft:shulker_box"
  61.                         }
  62.                     ]
  63.                 }
  64.             ]
  65.         }
  66.     ]
  67. }
复制代码

具体想修改物品信息的情形,可以通过直接修改潜影盒内物品实现,这里不做赘述。
唯一的缺点就是,需要在255高度引入额外的方块潜影盒,这会导致原有的位于255高度的方块消失。