我正在制作一种激光武器,它基本上是一种在3D世界中重复执行的功能,每个命令都是相对于前一个命令向前执行一个街区。然而,我发现它非常强大,并决定通过减少武器的有效射程来削弱它。我相信这可以通过在某种程度上停止递归来实现,例如,在第101次执行递归时停止递归将导致武器的有效范围为100块。
用raycast.mcfunction编写的代码的一部分
playsound block.iron_trapdoor.open master @a
playsound block.respawn_anchor.deplete master @a
playsound entity.generic.explode master @a
playsound entity.generic.extinguish_fire master @a
particle small_flame ~ ~ ~ 0 0 0 0 100 normal @a
execute if block ~ ~ ~ air unless entity @e[distance=0.1..0.3,type=!armor_stand,type=!item_frame,type=!item,type=!player,type=!area_effect_cloud] positioned ^ ^ ^0.5 run function datapack:raycast然而,我不能完全想出一种方法来实现这一点,因为我的世界中的所有变量(记分板目标)似乎只对实体可用。递归函数不是实体,尽管它在3D世界中“移动”。
任何建议和方法,以达到我的目标,限制递归的数量,将非常感谢!
发布于 2021-11-12 08:12:34
为了解决这个问题,不能使用递归函数,因为它们不被视为实体。我已经知道,通过射击坚不可破的装甲支架,我可以解决这个问题。召唤armor_stand
execute at @s run summon armor_stand ~ ~ ~ {Invulnerable:1b,Tags:["melta","new_melta"]}main函数
execute as @e[tag=new_melta] at @s rotated as @p run teleport @s ~ ~ ~ ~ ~
execute as @e[tag=new_melta] run tag @s remove new_melta
execute as @e[tag=melta] at @s if block ~ ~ ~ air run tp @s ^ ^ ^1
execute as @e[tag=melta] at @s run summon tnt
execute as @e[tag=melta] at @s unless block ~ ~ ~ air run tag @s add crashed
execute as @e[tag=crashed] run kill @s上面显示的代码可以用来在玩家看到的地方射击装甲支架,当它行进时,tnt将在它的尾迹中被召唤。这样我们就可以把激光变成一个实体。
唯一的缺点是激光不是以光速传播,而是每秒移动20个区块(20滴答=1秒)
https://stackoverflow.com/questions/69862284
复制相似问题