首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我的世界命令-递归函数

我的世界命令-递归函数
EN

Stack Overflow用户
提问于 2021-11-06 07:49:50
回答 1查看 103关注 0票数 0

我正在制作一种激光武器,它基本上是一种在3D世界中重复执行的功能,每个命令都是相对于前一个命令向前执行一个街区。然而,我发现它非常强大,并决定通过减少武器的有效射程来削弱它。我相信这可以通过在某种程度上停止递归来实现,例如,在第101次执行递归时停止递归将导致武器的有效范围为100块。

用raycast.mcfunction编写的代码的一部分

代码语言:javascript
复制
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世界中“移动”。

任何建议和方法,以达到我的目标,限制递归的数量,将非常感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-12 08:12:34

为了解决这个问题,不能使用递归函数,因为它们不被视为实体。我已经知道,通过射击坚不可破的装甲支架,我可以解决这个问题。召唤armor_stand

代码语言:javascript
复制
execute at @s run summon armor_stand ~ ~ ~ {Invulnerable:1b,Tags:["melta","new_melta"]}

main函数

代码语言:javascript
复制
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秒)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69862284

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档