本帖最后由 112709347 于 2020-2-10 13:13 编辑


新人发帖

有些人会使用tp来制作追踪弹
我今天给大家带来一个不同的
原理就是把目标的坐标和子弹的坐标相减,然后将值带入子弹
的Motion标签中

首先我们新建7个计分板,用来记录子弹的坐标和子弹将要达到的坐标
(/scoreboard objectives add 计分板名称 dummy)
我创建的是这7个
我创建的是这7个
X0,Y0,Z0,X1,Y1,Z1,time
然后就可以进行运算和代入

指令如下:
红组命令方块(记录实体的位置)
由于计分板分数不能为小数,我们这里乘100保留两位小数
没乘100的话可能在目标和子弹的距离太小时计分板会四舍五入
为0导致子弹停止追踪
/execute as @e store result score @s X0 run data get entity @s Pos[0] 100 |
/execute as @e store result score @s Y0 run data get entity @s Pos[1] 100 |
/execute as @e store result score @s Z0 run data get entity @s Pos[2] 100 |
黄组命令方块(让子弹的将要达到的坐标=目标的坐标)
我这里设定的是雪球为子弹,tag=1的实体为目标
/scoreboard players operation @e[type=minecraft:snowball] X1 = @e[tag=1] X0 |
/scoreboard players operation @e[type=minecraft:snowball] Y1 = @e[tag=1] Y0 |
/scoreboard players operation @e[type=minecraft:snowball] Z1 = @e[tag=1] Z0 |
蓝组命令方块(把子弹将要达到的坐标和子弹的坐标相减)
/scoreboard players operation @e[type=minecraft:snowball] X1 -= @e[type=minecraft:snowball] X0 |
/scoreboard players operation @e[type=minecraft:snowball] Y1 -= @e[type=minecraft:snowball] Y0 |
/scoreboard players operation @e[type=minecraft:snowball] Z1 -= @e[type=minecraft:snowball] Z0 |
绿组命令方块(将相减的值带入子弹的Motion)
注意:指令中0.0035这个值会影响子弹的速度,由于前面把值乘了100我们现在再把它乘回去(execute前面的“/”自己脑补)
execute as @e[type=snowball] store result entity @s Motion[0] double 0.0035 run scoreboard players get @s X1 |
execute as @e[type=snowball] store result entity @s Motion[1] double 0.0035 run scoreboard players get @s Y1 |
execute as @e[type=snowball] store result entity @s Motion[2] double 0.0035 run scoreboard players get @s Z1 |
然后最左边的那两个命令方块是防止子弹一直卡着不消失造成游戏卡顿(不过一般来说是不会卡的)
/scoreboard players add @e[type=minecraft:snowball] time 1 |
/kill @e[scores={time=20..},type=minecraft:snowball] |
然后这样就完成啦!
可以看到我生成了一个tag=1的受害者,虽然我是朝另一侧扔雪球的,但是雪球还是直直飞向了受害者

最后。。。啪叽!

大家也可以把子弹的速度调小,然后你会发现子弹的判定很精准
本帖最后由 112709347 于 2020-2-10 13:14 编辑
我这边不知道咋回事图片卡没了
然后我重新编辑了一下,顺便解决了子弹会卡住的BUG
我这边不知道咋回事图片卡没了
然后我重新编辑了一下,顺便解决了子弹会卡住的BUG
加油,(~ ̄▽ ̄)~
看到自动追踪,我想到的第一个是 潜影贝的导弹 

隐退 发表于 2020-2-10 07:21
看到自动追踪,我想到的第一个是 潜影贝的导弹
我也是这样想的,好像还可以把潜影贝那个L和M的标签改成目标的L和M
也可以在坐标0 0 0 生成朝向实体 ,将POS标签值复制到Motion行
2781212775 发表于 2020-2-11 20:02
也可以在坐标0 0 0 生成朝向实体 ,将POS标签值复制到Motion行
把子弹坐标改成0,0,0原点?
群内无能鸽子前来捧场
112709347 发表于 2020-2-11 20:29
把子弹坐标改成0,0,0原点?
不是改子弹坐标, 坐标相减无非要减出一个方向向量。
facing 最近一个实体 确定向量方向
然后posioned 0 0 0 run summon ^ ^ ^向量大小 在朝向生成一个药水云之类的maker 值越大速度越快
然后将 maker 的pos值 直接 data 到 子弹 motion(火球之类的是direction)上面。
2781212775 发表于 2020-2-11 20:55
不是改子弹坐标, 坐标相减无非要减出一个方向向量。
facing 最近一个实体 确定向量方向
然后posioned 0 0 ...
之前有人说过,他那个是1.13版本,用的是offset,1.14好像没offset我就不知道是什么意思,我还以为是直接把子弹那个坐标设为0,0,0
112709347 发表于 2020-2-11 21:27
之前有人说过,他那个是1.13版本,用的是offset,1.14好像没offset我就不知道是什么意思,我还以为是直接 ...
啥意思?我这个就是1.14的