上一期还有一个存储子命令没有讲

存储子命令

在mc里,每一个命令都有它的返回值

有两种,successresult

  • success布尔值,表示是否成功执行

比如说,你 /tp @e[type=sheep,distance=3..5] ^ ^5 ^

但是选择器没有选到,此时success为 0

  • result整数,如果不是,向下取整

比如所,你用 /data get entity @s Pos[0]

success 为 0 ,result 为你的x坐标向下取整


那么,知道了这些,就可以看接下来的内容了:

存储子命令只有 store 这一个子命令,可以将 run子命令后面的命令的resultsuccess值存储到指定位置。

store 后面先跟着 resultsuccess ,表示存储哪一种返回值

它与其他子命令一起处理,先行记录存储位置,不影响其他子命令。当最后一个子命令执行后,将其返回值存入指定位置

可用存入位置有5个:

block:存入指定方块实体的指定NBT标签内。 bossbar:存为Boss栏的当前值或最大值。 entity:存入指定实体的指定NBT标签内。 score:存入指定分数持有者的指定记分项上。 storage:存入指定存储容器的指定NBT标签内。


score位置 可以将返回值存储到积分项上,很好用。

比如说,你想读取 @ 的y坐标向下取整并存起来,可以用:

/execute as InnitTimmer store result score #y(这是一个变量) (这里写那个变量所在计分板名) run data get entity @s Pos[1]

如果你想随机传送到一个位置,可以用 entity 和 /random 来做

execute summon armor_stand at @s run function namespace:tp_stc
#召唤盔甲架


### 在 tp_stc 里放↓

data merge entity @s {Invulnerable:true, Invisible:true, NoGravity:true, Marker:true}
#将盔甲架设为一个标记
execute store result entity @s Pos[0] double 1.0 run random value -3000..3000
execute store result entity @s Pos[1] double 1.0 run random value 128..324
execute store result entity @s Pos[2] double 1.0 run random value -3000..3000

tp @e[type=player] @s

kill @s

为什么要费力用盔甲架呢?因为datastore entity都不能修改玩家的NBT,但是可以修改盔甲架的NBT

如果你想随机传送到一个位置并且精度为0.001,可是result返回值只能是整数怎么办?

这就要用到 scale 参数。它为double类型。存储时,会先将原数据变为double,再乘上 scale ,再转换类型,就有了真正被赋值给NBT的数据

另外,再数据包的实际编写中,若用计分板做变量,只能存储int范围内的整数,不过便于比较大小。若用实体的NBT做变量,可以存储和读取浮点数,整数,布尔值等。

在上面的例子里,scale参数为 1.0。

稍微改一下就满足要求了

data merge entity @s {Invulnerable:true, Invisible:true, NoGravity:true, Marker:true}

execute store result entity @s Pos[0] double 0.001 run random value -3000000..3000000
execute store result entity @s Pos[1] double 0.001 run random value 128000..324000
execute store result entity @s Pos[2] double 0.001 run random value -3000000..3000000

tp @e[type=player] @s

kill @s

store storage 的语法和 entity 差不多,不多赘述


来个离子:


# 将距离最近的玩家4格内的所有猪扔向天空:
/execute at @p as @e[type=pig,distance=..4] run data merge entity @s {Motion:[0.0,3.0,0.0]}

补充一下,mc中的“范围类型” 的语法:

1

1..1

1..2

1.2..2

45..123.3

..112

42..

以上都是正确语法,至于意义,应该很好理解吧,都和区间差不多

那么显然, 2..1 是错误的。

0 条评论

目前还没有评论...