本帖最后由 AsrielND 于 2021-11-26 23:10 编辑
在做数据包(1.17.1),为了做枪要给箭加速的非常快,但Motion标签是分为dx、dy、dz的,很难操作,所以有什么办法能给箭加速吗qwq
目前已经试过(或只是想过)且确定无效的:
用execute storage将Motion乘上倍率在放回去——箭会因为未知原因乱飞
用爆炸加速——副作用太多
在做数据包(1.17.1),为了做枪要给箭加速的非常快,但Motion标签是分为dx、dy、dz的,很难操作,所以有什么办法能给箭加速吗qwq
目前已经试过(或只是想过)且确定无效的:
用execute storage将Motion乘上倍率在放回去——箭会因为未知原因乱飞
用爆炸加速——副作用太多
本帖最后由 晴路卡 于 2021-11-26 21:27 编辑
首先报个版本 另外做枪一般不用箭 另外Motion的值是有上限的
首先报个版本 另外做枪一般不用箭 另外Motion的值是有上限的
晴路卡 发表于 2021-11-26 21:26
首先报个版本 另外做枪一般不用箭 另外Motion的值是有上限的
用箭主要是代码量可以少一些,发射自定义的药水箭,用color标签来判定qwq
Motion的上限注意到了,但是就算乘完了在上限以下也会使箭乱飞qwq
做枪不推荐用箭啊
建议使用投掷物 比如雪球
建议使用投掷物 比如雪球
首先Motion有上限,我测试了是10.0d,超过这个就会变成0。如果你是用弓射出的箭再乘倍数的话,我试了三倍可以,5倍就不行了,我感觉3倍速做枪大概够用。
然后就是一个奇怪的特性,我发现 execute store 存的数只能是整数乘倍数,Motion原本是小数,只剩整数就乱飞了。然后/data get这个命令如果你加了倍数的话似乎也只能得到整数。为了得到小数,可以在/data get中乘10000000倍,然后execute store那里乘0.00000001,这样得到的就是小数了,要是三倍就在data get的倍数那里写30000000。所以要让箭的速度加3倍可以这样写:
execute as @e[type=minecraft:arrow,tag=!xxx] store result entity @s Motion[0] double 0.0000001 run data get entity @s Motion[0] 30000000
这个命令会把它的x轴速度加三倍。然后再加上y轴和z轴的命令,最后给已经改过数据的箭加个tag,防止重复加速速度超过10。最后就是这样四条命令:
execute as @e[type=minecraft:arrow,tag=!finished] store result entity @s Motion[0] double 0.0000001 run data get entity @s Motion[0] 30000000
execute as @e[type=minecraft:arrow,tag=!finished] store result entity @s Motion[1] double 0.0000001 run data get entity @s Motion[1] 30000000
execute as @e[type=minecraft:arrow,tag=!finished] store result entity @s Motion[2] double 0.0000001 run data get entity @s Motion[2] 30000000
tag @e[type=minecraft:arrow,tag=!finished] add finished
然后就是一个奇怪的特性,我发现 execute store 存的数只能是整数乘倍数,Motion原本是小数,只剩整数就乱飞了。然后/data get这个命令如果你加了倍数的话似乎也只能得到整数。为了得到小数,可以在/data get中乘10000000倍,然后execute store那里乘0.00000001,这样得到的就是小数了,要是三倍就在data get的倍数那里写30000000。所以要让箭的速度加3倍可以这样写:
execute as @e[type=minecraft:arrow,tag=!xxx] store result entity @s Motion[0] double 0.0000001 run data get entity @s Motion[0] 30000000
这个命令会把它的x轴速度加三倍。然后再加上y轴和z轴的命令,最后给已经改过数据的箭加个tag,防止重复加速速度超过10。最后就是这样四条命令:
execute as @e[type=minecraft:arrow,tag=!finished] store result entity @s Motion[0] double 0.0000001 run data get entity @s Motion[0] 30000000
execute as @e[type=minecraft:arrow,tag=!finished] store result entity @s Motion[1] double 0.0000001 run data get entity @s Motion[1] 30000000
execute as @e[type=minecraft:arrow,tag=!finished] store result entity @s Motion[2] double 0.0000001 run data get entity @s Motion[2] 30000000
tag @e[type=minecraft:arrow,tag=!finished] add finished
不推荐用箭矢来当弹药,
我这里有个数据包,你可以参考一下使用(仅限参考,请勿盗用)
链接: https://pan.baidu.com/s/1rK58kYXyrYJxyEG_r6MmcQ
提取码: vk74
我这里有个数据包,你可以参考一下使用(仅限参考,请勿盗用)
链接: https://pan.baidu.com/s/1rK58kYXyrYJxyEG_r6MmcQ
提取码: vk74
具体教程可以看这个人,讲解的很全面https://space.bilibili.com/19856 ... sdetail?sid=1321305
我不确定,但能不能先把弹药设置个标签,然后/effect give @e[type=arrow,tag=标签] minecraft:speed 时间秒 等级最高255