动量Motion

By MCSugar_cane    2019/01/05

Motion,是实体都具有的一个NBT,动量,可以对实体的运动方向进行操作,是不是突然联想到了/tp指令呢?

其实Motion和/tp也差不了多少,Motion的结构是:Motion:[0.0,0.0,0.0],/tp是:/tp ~ ~ ~,三个参数方向对应着X,Y,Z。但Motion:[0.0,1.0,0.0]可跟/tp ~ ~1 ~不一样,/tp ~ ~1 ~只是向上移动1格,而Motion:[0.0,1.0,0.0]向上运动的就不只是1格了,而是1.0d的动量。

为了更直观地了解它们的区别,下图分别是高频/tp @e[type=villager] ~0.1 ~ ~/entitydata @e[type=villager] {Motion:[0.1,0.0,0.0]}的效果图

tp效果图 motion效果图

可以看见使用tp实体会直接穿过方块,而Motion相对自然一些,实体在碰到阻碍时就无法再进行运动了。另外,在移动过程中,攻击被tp的实体运动路径会改动,因为实体被攻击后其Motion会被改变,而后者因为其Motion被高频更改着则运动路径不会变动。


还例如Motion:[0.0,0.5,0.0]可以模拟出跳跃的样子,如/summon minecraft:zombie {Motion:[0.1,0.0,0.0]},Motion:[0.5,0.3,0.2]可模拟出被击飞的样子等等。

那Motion可以用在玩家身上吗?比如做到用指令让玩家跳起来?

不能,只能通过entitydata生效于非玩家实体。但是可以用Motion实体后将玩家高频tp至实体来实现让玩家跳起来的效果,代码如下:

  1. /execute @e[type=chicken,name=motion_m] ~ ~ ~ tp @p[c=1,r=2] @e[name=motion_m,r=0,c=1]
  2. /scoreboard players tag @e[type=chicken,name=motion_m] add kill_m
  3. /execute @e[type=chicken,name=motion_m] ~ ~ ~ detect ~ ~-0.2 ~ air 0 scoreboard players tag @e[name=motion_m,r=0,c=1] remove kill_m
  4. /kill @e[type=chicken,name=motion_m,tag=kill_m]

高频上面的四行指令(01:将motion_m附近2格内最近的玩家tp至motion_m,02至04:若motion_m下方0.2格处不是空气就杀死motion_m也就是实现当motion_m落地时kill掉motion_m),执行:

  1. /execute @a ~ ~ ~ summon minecraft:chicken ~ ~0.5 ~ {Invulnerable:true,CustomName:"motion_m",Motion:[0.0,1.5,0.0]}

效果图:

Motion模拟效果图

更多关于Motion的应用可见:



LOADING | 此框架正在加载中
QQ群:771363745