Minecraft基岩版1.16:无需命令块实现指南针追踪玩家方案咨询
基岩版1.16 Addon实现指南针追踪玩家方案
嘿,你的这个思路其实很靠谱!在基岩版1.16里完全可以用.mcfunction和原生的tick机制实现指南针追踪玩家,不用命令块也没问题。下面针对你的问题详细拆解一下:
一、核心功能的实现步骤
编写追踪用的函数文件
在你的行为包functions目录下新建一个track_target.mcfunction,注意基岩版1.16的execute语法和Java版有差异,得用适配的命令:# 把@e[tag=track_target]换成你要追踪的目标玩家,比如固定玩家@a[name=Steve] execute as @e[tag=track_target] at @s run setworldspawn ~ ~ ~这条命令会以目标玩家的身份、在其当前位置执行
setworldspawn,每刻运行的话就能让重生点一直跟着目标走,指南针自然就会指向他了。用
tick.json实现每刻执行
没错,tick.json就是基岩版里实现“每1/20秒自动运行函数”的正确方式!在functions目录下创建这个文件,内容如下:{ "values": [ "你的命名空间:track_target" ] }只要把你的函数命名空间填对,游戏启动后就会每刻自动执行这个追踪函数,不用手动触发。
二、让玩家自行设置追踪目标的可行方案
这个需求完全能实现,推荐用记分板+trigger的方式,简单易上手:
- 初始化记分板
先写一个setup.mcfunction初始化函数,用来创建存储追踪目标的记分板:
然后在同目录的# 创建一个dummy类型的记分板,用来存玩家设置的目标ID scoreboard objectives add trackTarget dummy # 允许玩家通过trigger修改这个记分板的值 scoreboard players enable @a trackTargetload.json里配置Addon加载时自动运行这个初始化:{ "values": [ "你的命名空间:setup" ] } - 玩家设置目标的方式
玩家可以输入命令来设置自己的追踪目标,比如:
如果觉得实体ID不直观,你还可以做个更友好的版本:让玩家输入/trigger trackTarget set <目标玩家的实体ID>/track <玩家名>,然后用onChat事件监听这个指令,在响应函数里把目标玩家的ID存到记分板里——这样玩家用起来更顺手。 - 修改追踪函数读取自定义目标
更新track_target.mcfunction,让它读取每个玩家设置的目标:
这样每个玩家的指南针就能追踪自己设置的目标了。# 临时记分板中转目标ID,需要提前用scoreboard objectives add temp dummy创建 execute as @a at @s store result score @s temp run scoreboard players get @s trackTarget execute as @e[type=player,score_temp_min=1] at @s run setworldspawn ~ ~ ~
三、要注意的坑
- 全局重生点冲突问题:因为
setworldspawn是修改全局重生点,如果多个玩家同时追踪不同目标,这个方法会出问题——重生点只能有一个,最后执行的那个玩家的目标会覆盖之前的。如果要支持多玩家各自追踪不同目标,你得改用自定义指南针的NBT组件,让指南针直接指向特定实体,不过基岩版1.16的自定义物品配置会复杂一些。 - 权限问题:测试时要确保开启作弊模式,或者给玩家授予相应的命令权限,不然函数可能执行失败。
- 命名空间一致性:所有函数和配置文件的命名空间要统一,不然游戏找不到你的函数。
内容的提问来源于stack exchange,提问作者user13959255




