替换方块实体
如果我们希望把一些方块替换为一个方块实体,比如是箱子,我们会发现我们没法使用fill
命令。
因为fill
命令的replace
模式,如果替换成的方块是一个方块实体,那么replace
参数后的数据就是NBT而不是被替换方块的数据,故此是不可行的。
在这种情况下,我们可以采取间接的方法:fill
一些不能独立存在的方块(并且被破坏时会产生掉落物),提供方块更新让它们掉落,然后execute
那些掉落物设置方块。
产生掉落物
首先我们需要把目标地区(x1, y1, z1到x2, y2, z2,其中x1, y1, z1为区域内x, y, z最小的坐标)的指定方块,以石头为例子,替换为不能独立存在的方块,我们以半道门(就是一个木门方块,完整的木门需要两个方块)做替换的东西。
fill x1 y1 z1 x2 y2 z2 minecraft:wooden_door 0 replace minecraft:stone 0
然后我们需要产生方块更新。我们之前说过,我们可以使用clone
的force
模式来为整个区域产生方块更新。
clone x1 y1 z1 x2 y2 z2 x1 y1 z1 replace force
然后我们就能产生掉落物了。
替换为箱子
这个就很简单了,我们首先execute
掉落物设置方块,然后杀掉那些掉落物。
scoreboard players tag @e[type=item] add temp {Item:{id:"minecraft:wooden_door"}}
execute @e[type=item,tag=temp] ~ ~ ~ setblock ~ ~ ~ minecraft:chest
kill @e[type=item,tag=temp]
这例子看似很容易,其实还是挺难想出来的,而且其中搞方块更新的部分还是比较麻烦的。如果不特地产生一次方块更新,如果石头不是连续的,那么其中的一些木门就会没法获得更新,不会自我破坏,令整个检测不成功。