t1546542
版本:1.12.2或1.14.4
如题
在玩家处生成火焰弹(fireball),并沿着玩家朝向的方向直线飞行
碰到实体或者方块爆炸

枯若Kuro
可以用雪球吗?
1.12.2execute @e[type=snowball] ~ ~ ~ summon fireball ~ ~ ~ {direction:[0.0,0.0,0.0]}朝雪球方向生成火球

Chelover_C60
本帖最后由 Chelove_C60 于 2020-1-9 16:57 编辑

你是说火焰弹(small_fireball)还是说恶魂火球(fireball)
1.12需要穷举,或者如果是火球的话,可以像楼上那样用雪球

1.14有两种方法,一种是计分板配合marker计算direction和power的值,然后配合execute store保存;另一种方案是借助0,0,0点利用局部坐标做替换(偷懒做法)
这里我就偷个懒吧,因为要复习,时间不多

首先给需要发射火球(或火焰弹)的玩家加标签(此处假设标签为fireball),然后循环
execute as @a[tag=fireball] at @s run function fun

fun.mcfunction
  1. tag @s add summoning
  2. execute anchored eyes run summon fireball ^ ^ ^ {direction:[0d,0d,0d],Tags:["mark"]}
  3. summon armor_stand ~ ~ ~ {Tags:["mark"]}
  4. execute as @e[type=armor_stand,tag=mark] rotated as @a[tag=summoning] run tp 0.0 0.0 0.0
  5. execute as @e[type=armor_stand,tag=mark] at @s run tp ^ ^ ^0.1
  6. data modify entity @e[type=fireball,tag=mark,limit=1] power set from entity @e[type=armor_stand,limit=1,tag=mark] Pos
  7. execute as @e[type=armor_stand,tag=mark] at @s run tp ^ ^ ^1.5
  8. data modify entity @e[type=fireball,tag=mark,limit=1] direction set from entity @e[type=armor_stand,limit=1,tag=mark] Pos
  9. kill @e[type=armor_stand,tag=mark]
  10. tag @e[type=fireball,tag=mark] remove mark
  11. tag @s remove summoning
复制代码


如果要求是火焰弹(small_fireball)的话,还需要一个marker时刻跟着火焰弹,然后检测到火焰弹消失后,生成一个瞬间爆炸的苦力怕或tnt即可



补充:如果要用这种方法,记得把0,0点附近的4个区块设为强制加载区块

t1546542
Chelove_C60 发表于 2020-1-8 16:47
你是说火焰弹(small_fireball)还是说恶魂火球(fireball)
1.12需要穷举,或者如果是火球的话,可以像楼 ...

第四条指令是什么意思

Chelover_C60
t1546542 发表于 2020-1-9 16:44
第四条指令是什么意思

execute as @e[type=armor_stand,tag=mark] rotated as @a[tag=summoning] run tp 0.0 0.0 0.0

这一条?
就是将盔甲架的朝向调整与玩家朝向相同,同时传送至0.0 0.0 0.0坐标

t1546542
Chelove_C60 发表于 2020-1-9 16:53
这一条?
就是将盔甲架的朝向调整与玩家朝向相同,同时传送至0.0 0.0 0.0坐标 ...

execute as @e[type=armor_stand,tag=mark] rotated

Chelover_C60
t1546542 发表于 2020-1-9 16:56
execute as @e[type=armor_stand,tag=mark] rotated

调整朝向
... rotated as <实体> ...
会将当前命令执行的朝向调整为指定实体的朝向。这里就是调整盔甲架的命令的执行朝向为玩家朝向,具体效果在tp后才会看到

t1546542
Chelove_C60 发表于 2020-1-8 16:47
你是说火焰弹(small_fireball)还是说恶魂火球(fireball)
1.12需要穷举,或者如果是火球的话,可以像楼 ...

为什么要tp到0 0 0
还要tp到 ~ ~ ~0.1才能data记录

Chelover_C60
本帖最后由 Chelove_C60 于 2020-1-9 17:17 编辑
t1546542 发表于 2020-1-9 17:02
为什么要tp到0 0 0
还要tp到 ~ ~ ~0.1才能data记录


这里用了个偷懒的做法,因为常规要做的话,需要通过计分板依据坐标差计算出火球或火焰弹的direction和power,然后借助execute store储存进去。稍麻烦。
然后我就想到了利用实体的坐标标签Pos,配合局部坐标可以直接得到结果(是局部坐标^,不是相对坐标~)。这样就可以免去复杂的计分板计算。
我估算了一下,power的模大概是0.1左右,这是向前tp 0.1格的原因。direction的模大概是1.6,因此后面在0.1的基础上又tp了1.5格。这样得到的Pos就会是想要的power和direction值。



总体思路差不多就是把要得出的结果通过Pos这个关于实体坐标的nbt输出,然后获取保存到其他地方。这里所有的tp都是为了修改Pos这个标签

t1546542
Chelove_C60 发表于 2020-1-9 17:14
这里用了个偷懒的做法,因为常规要做的话,需要通过计分板依据坐标差计算出火球或火焰弹的direction和pow ...

em
为什么不直接让火焰弹的direction和power=盔甲架的direction和power(或者直接等于玩家的?)
直接原地进行

Chelover_C60
t1546542 发表于 2020-1-9 17:18
em
为什么不直接让火焰弹的direction和power=盔甲架的direction和power(或者直接等于玩家的?)
直接原地 ...

diredtion和power是火球和火焰弹独有的nbt

t1546542
Chelove_C60 发表于 2020-1-9 17:24
diredtion和power是火球和火焰弹独有的nbt

让火焰弹的朝向用rotated as等于玩家的
行吗

Chelover_C60
本帖最后由 Chelove_C60 于 2020-1-9 17:36 编辑
t1546542 发表于 2020-1-9 17:28
让火焰弹的朝向用rotated as等于玩家的
行吗


火球的运动方向不由朝向决定,只由direction和power决定,所以改火球的朝向没用

好吧,严格来讲任何实体的运动方向都不由朝向决定,改朝向只会影响局部坐标

t1546542
Chelove_C60 发表于 2020-1-9 17:34
火球的运动方向不由朝向决定,只由direction和power决定,所以改火球的朝向没用

好吧,严格来讲任何实体 ...

大概知道了
那如果我只改火球的power,不改direction会怎么样

Chelover_C60
t1546542 发表于 2020-1-9 18:00
大概知道了
那如果我只改火球的power,不改direction会怎么样

从静止开始加速运动
如果只改direction,那就会慢慢减速直到停止
mj这是什么逻辑

t1546542
Chelove_C60 发表于 2020-1-9 17:14
这里用了个偷懒的做法,因为常规要做的话,需要通过计分板依据坐标差计算出火球或火焰弹的direction和pow ...

怎么估算

Chelover_C60
t1546542 发表于 2020-1-9 20:17
怎么估算

就是正常生成一个火球,然后打一下,这一瞬间获取其nbt,看它的direction和power,然后计算器勾股定理算一下,看数值大概是多少

第一页 上一页 下一页 最后一页