1.13版本中用雪球实现不用蓄力的弓

联机侠

今天小编为大家带来我的世界1.13命令方块教程,此次教大家用雪球实现不蓄力的弓,想学的玩家别错过下面的内容!

  引言

在1.13中,execute store ... 取代了 stat,我一直在想,怎么样可以实现把nbt标签与命令的返回值联系起来呢?正巧,在维基上找到了这样的一段话:

...将返回值储存在目标坐标方块在标签路径的NBT标签上...

卧槽,如此神奇?那么就来试一试。

需要

1个命令方块

数据包里的函数

指令

循环型命令方块:

function shoot:givedata

复制代码

函数 givedata.mcfunction

#添加标签

tag @a[nbt={Inventory:[{Slot:-106b,id:"minecraft:bow"}]}] add bow_player

give @a[tag=bow_player,nbt={SelectedItem:{id:"minecraft:snowball",Count:1b}}] snowball 1

execute at @a[tag=bow_player] run tag @e[type=minecraft:snowball,limit=1,distance=..2,tag=] add bow_snowball

#生成箭

execute at @e[tag=bow_snowball] run summon minecraft:arrow ~ ~1 ~ {Tags:["bow_arrow"],damage:4b,pickup:2b}

#复制扔出雪球的 Motion

execute store result entity @e[tag=bow_arrow,limit=1] Motion[0] double 0.01 run data get entity @e[tag=bow_snowball,limit=1] Motion[0] 100

execute store result entity @e[tag=bow_arrow,limit=1] Motion[1] double 0.01 run data get entity @e[tag=bow_snowball,limit=1] Motion[1] 100

execute store result entity @e[tag=bow_arrow,limit=1] Motion[2] double 0.01 run data get entity @e[tag=bow_snowball,limit=1] Motion[2] 100

#添加新tag以防被再次选择

tag @e[tag=bow_snowball] add bow_snowball_old

tag @e[tag=bow_arrow] add bow_arrow_old

tag @e[tag=bow_snowball] remove bow_snowball

tag @e[tag=bow_arrow] remove bow_arrow

tag @a[tag=bow_player] remove bow_player

#清除雪球

kill @e[type=minecraft:snowball,tag=bow_arrow_old]

复制代码

原理

原理就是将雪球的Motion复制到弓箭上,使用

execute store result entity @e[tag=bow_arrow,limit=1] Motion[0] double 0.01 run data get entity @e[tag=bow_snowball,limit=1] Motion[0] 100

省略数组第一个元素以及第二个元素的复制命令,重复了

复制代码这里要注意倍率中有0.01与100,因为Motion中的元素都是双精确浮点数(就是小数啦,现在还没搞清楚数据类型d与b)但一输出就变成整数了,这时这样可以取到2位的精度。

其他就没什么好说的了

使用说明以及因为我没有做好的原因

将弓放到副手,左手拿一个普通的雪球(有nbt的话就会堆叠不到一起去)

右键丢出雪球,雪球会被立即替换成箭,会有显示bug(好像发现了什么)

箭会顺着雪球的轨迹走,直到落地或砸在生物上

请勿往自己脚下砸,会有伤害的

其他想说的

发现了一个bug,但是估计报告了也不会修复

如果在雪球的位置生成一个弓箭,弓箭还会是雪球的材质

在写函数的时候,开启日志,这样可以看是哪里错了(正版在启动器的设置中)

未在多人模式下进行测试

Mojang真不用心,雪球和箭的飞行算法是一样的,阻力呢,牛顿的眼泪233

联机侠

发表评论

您必须 登录 才能发表留言!