1如何给予玩家一个使用后可以单独检测的有特殊tag的烟花
2原版如何可以做到用Motion来做成抛物线
3如何让箭矢加速

2原版如何可以做到用Motion来做成抛物线
3如何让箭矢加速

1.烟花火箭物品的NBT会直接复制到烟花火箭实体里,所以可以随意加标签,之后能通过实体检测到。
2.这个相当复杂,需要很多数学推导。
3.修改Motion,把Motion的三个分量都乘以相同的倍数。
2.这个相当复杂,需要很多数学推导。
3.修改Motion,把Motion的三个分量都乘以相同的倍数。
楼上回复了1,3。这是2的教程 https://www.bilibili.com/video/BV15J411p77C
本帖最后由 Anubii 于 2022-4-24 15:43 编辑
将问题2单独拎出来说说
在java1.14版本以上,可以利用execute positioned <x> <y> <z>实现在指定坐标执行一个指令的效果
利用这一点,可以直接以玩家为执行对象,在0.0 0.0 0.0坐标以玩家的局部坐标生成盔甲架,这样生成的好处是省去了繁杂的计算,可以直接将要进行抛射的实体的Motion值赋值成盔甲架的坐标,指令如下
复制代码
指令大意为,以[玩家]为对象,在0.0 0.0 0.0坐标处,向前方0.2格高,1格远的位置生成一个marker盔甲架,而后将tag为[motion]的实体的Motion赋值为marker的Pos,并将marker盔甲架清除。
summon armor_stand ^ ^0.2 ^1中的^0.2 ^1可自行更改数值,0.2对应y轴的Motion,1对应向前方抛射的Motion,即垂直和水平的Motion.最简单的说,0.2和1对应了tag为[motion]的实体的垂直和水平抛射速度
由于是以玩家为对象,该段指令执行无误后,tag为[motion]的实体会向玩家面朝的方向做抛物运动,此处tag为[motion]的实体需自行生成.
以上指令中,tag可自行更改,execute as 的对象可自行更改,尤其注意0.0 0.0 0.0不可改为0 0 0,否则会出现精确度导致的差错.
这种实现抛物线的方式是较为简易的,与楼上回复中的视频效果较为一致,具体有什么细节上的不同我也没仔细钻研过,已知的一个细节是需要给0 0 0坐标的区块强加载,指令为forceload 0 0。
对于这种抛物线的实现,可自行选择使用哪种方式
将问题2单独拎出来说说
在java1.14版本以上,可以利用execute positioned <x> <y> <z>实现在指定坐标执行一个指令的效果
利用这一点,可以直接以玩家为执行对象,在0.0 0.0 0.0坐标以玩家的局部坐标生成盔甲架,这样生成的好处是省去了繁杂的计算,可以直接将要进行抛射的实体的Motion值赋值成盔甲架的坐标,指令如下
- execute as @a at @s positioned 0.0 0.0 0.0 run summon armor_stand ^ ^0.2 ^1 {Marker:1b,Tags:["marker"]}
- execute as @e[tag=motion] run data modify entity @s Motion set from entity @e[tag=marker,limit=1] Pos
- kill @e[tag=marker]
指令大意为,以[玩家]为对象,在0.0 0.0 0.0坐标处,向前方0.2格高,1格远的位置生成一个marker盔甲架,而后将tag为[motion]的实体的Motion赋值为marker的Pos,并将marker盔甲架清除。
summon armor_stand ^ ^0.2 ^1中的^0.2 ^1可自行更改数值,0.2对应y轴的Motion,1对应向前方抛射的Motion,即垂直和水平的Motion.最简单的说,0.2和1对应了tag为[motion]的实体的垂直和水平抛射速度
由于是以玩家为对象,该段指令执行无误后,tag为[motion]的实体会向玩家面朝的方向做抛物运动,此处tag为[motion]的实体需自行生成.
以上指令中,tag可自行更改,execute as 的对象可自行更改,尤其注意0.0 0.0 0.0不可改为0 0 0,否则会出现精确度导致的差错.
这种实现抛物线的方式是较为简易的,与楼上回复中的视频效果较为一致,具体有什么细节上的不同我也没仔细钻研过,已知的一个细节是需要给0 0 0坐标的区块强加载,指令为forceload 0 0。
对于这种抛物线的实现,可自行选择使用哪种方式
第二个,用带power的火球就可以,火球的motion是初始速度,power是加速度,而我们知道均匀加速的运动轨迹就是抛物线