NekomusumeMilk
rt,假设一个名字叫A的追踪者的5号快捷栏里有一个磁石指针(LodestoneTracked已经设为0b),这个磁石指针将指向被追踪者B。于是:
  1. execute store result entity A Inventory[{Slot:4b}].tag.LodestonePos.X int 1 run data get entity B Pos[0]
  2. execute store result entity A Inventory[{Slot:4b}].tag.LodestonePos.Y int 1 run data get entity B Pos[1]
  3. execute store result entity A Inventory[{Slot:4b}].tag.LodestonePos.Z int 1 run data get entity B Pos[2]
复制代码




然鹅我这样写并没有什么卵用,而且/data modify entity A Inventory[{Slot:4b}].tag.LodestonePos set value {X:0,Y:100,Z:0}会直接报错“无法修改玩家数据”,但是对于磁石指针的掉落物/data modify entity @e[...](假设这玩意选择的是磁石指针掉落物) Item.tag.LodestonePos set value {X:0,Y:100,Z:0}就有用,迷的一批现在。

逍遥神候
本帖最后由 逍遥神候 于 2020-10-24 18:47 编辑

给个思路,可以不用收集玩家数据
而直接给B玩家设置为世界重生点···?

洞穴夜莺
或许你可以考虑用某种物品填满玩家的所有空格子
然后clear掉指南针,再summon一个符合要求的指南针
最后再clear掉填充玩家背包的物品?

NekomusumeMilk
逍遥神候 发表于 2020-10-24 18:46
给个思路,可以不用收集玩家数据
而直接给B玩家设置为世界重生点···?

emmm,这个考虑过,但是当"B"玩家有2个以上的时候就会乱,咱这个是给A指示最近的一个B玩家在哪

NekomusumeMilk
洞穴夜莺 发表于 2020-10-24 19:12
或许你可以考虑用某种物品填满玩家的所有空格子
然后clear掉指南针,再summon一个符合要求的指南针
最后再c ...

这样的话玩家A的背包岂不会疯狂抽搐(bushi

LxAs
本帖最后由 LightD 于 2020-10-24 21:01 编辑

为什么不换个思路呢,让玩家丢出指南针,命令方块检测并清除,然后在该玩家附近生成个不可拾取的指南针,修改完数据后再允许拾取
首先检测玩家丢出指定指南针,检测成功则给玩家一个tag,方便执行下面的指令
循环命令方块:
  1. /execute if entity @e[type=item,nbt={Item:{id:"minecraft:compass",tag:{Tags:["track"]}}}]
复制代码

连锁命令方块,为永久执行且有条件
  1. #清除玩家扔出来的指南针
  2. /execute as @a[tag=fresh] run kill @e[type=item,nbt={Item:{id:"minecraft:compass",tag:{Tags:["track"]}}}]
  3. #重新在扔出指南针的玩家处生成一个不可拾起的指南针
  4. /execute at @a[tag=fresh] run summon minecraft:item ~ ~1 ~ {Tags:["1"],Item:{id:"minecraft:compass",Count:1b,Damage:0s,tag:{LodestonePos:{X:0,Y:10,Z:0},Tags:["track"],LodestoneTracked:0b,LodestoneDimension:"overworld"}},PickupDelay:32767}
  5. #将指南针追踪坐标改为需要追踪的玩家坐标,请给要被追踪的玩家一个t的tag(/tag 玩家 add t),只能有一个追踪玩家
  6. /execute as @e[type=item,nbt={Item:{id:"minecraft:compass",tag:{Tags:["track"]}}}] run data modify entity @s Item.tag.LodestonePos.X set from entity @a[tag=t,limit=1] Pos[0]
  7. /execute as @e[type=item,nbt={Item:{id:"minecraft:compass",tag:{Tags:["track"]}}}] run data modify entity @s Item.tag.LodestonePos.Y set from entity @a[tag=t,limit=1] Pos[1]
  8. /execute as @e[type=item,nbt={Item:{id:"minecraft:compass",tag:{Tags:["track"]}}}] run data modify entity @s Item.tag.LodestonePos.Z set from entity @a[tag=t,limit=1] Pos[2]
  9. #让指南针可被拾取,此时追踪坐标已刷新
  10. /execute as @e[type=item,nbt={Item:{id:"minecraft:compass",tag:{Tags:["track"]}}}] run data modify entity @s PickupDelay set value 0
  11. #最后清除玩家的tag
  12. /tag @a remove fresh
复制代码

成品应该是这样

想保存指令可以下附件 新建文本文档.txt (1.6 KB, 下载次数: 4)

CR_019
本帖最后由 CR_019 于 2020-10-25 08:38 编辑

可以解决。如果不介意使用数据包。(由于使用我的数据包改制而来,以下命名空间均为cam)
写一个战利品表,如下:
  1. {
  2.   "pools": [
  3.     {
  4.       "rolls": 1,
  5.       "entries": [
  6.         {
  7.           "type": "minecraft:item",
  8.           "name": "minecraft:compass",
  9.           "functions": [
  10.             {
  11.               "function": "minecraft:set_nbt",
  12.               "tag": "{LodestoneTracked:0b,LodestoneDimension:"minecraft:overworld"}"
  13.             },
  14.             {
  15.               "function": "minecraft:copy_nbt",
  16.               "source": "this",
  17.               "ops": [
  18.                 {
  19.                   "source": "Item.tag.LodestonePos.Z",
  20.                   "target": "LodestonePos.Z",
  21.                   "op": "replace"
  22.                 },
  23.                 {
  24.                   "source": "Item.tag.LodestonePos.Y",
  25.                   "target": "LodestonePos.Y",
  26.                   "op": "replace"
  27.                 },
  28.                 {
  29.                   "source": "Item.tag.LodestonePos.X",
  30.                   "target": "LodestonePos.X",
  31.                   "op": "replace"
  32.                 }
  33.               ]
  34.             }
  35.           ]
  36.         }
  37.       ]
  38.     }
  39.   ]
  40. }
复制代码

命名为cam:foo/bar
然后高频下列函数:
  1. summon minecraft:item ~ ~ ~ {Tags:["1"],Item:{id:"minecraft:compass",Count:1b,Damage:0s,tag:{LodestonePos:{X:0,Y:0,Z:0},LodestoneTracked:0b,LodestoneDimension:"overworld"}},PickupDelay:32767}
  2. execute store result entity @e[tag=1,limit=1,sort=nearest] Item.tag.LodestonePos.X int 1 run data get entity B Pos[0]
  3. execute store result entity @e[tag=1,limit=1,sort=nearest] Item.tag.LodestonePos.Y int 1 run data get entity B Pos[1]
  4. execute store result entity @e[tag=1,limit=1,sort=nearest] Item.tag.LodestonePos.Z int 1 run data get entity B Pos[2]
  5. execute as @e[type=item,tag=1,limit=1] run loot replace entity A hotbar.4 loot cam:foo/bar
  6. kill @e[tag=1,type=item]
复制代码
以上适用于主世界。下界与末地自改战利品表中的相关字段。
第一人称手部动作确实会鬼畜,可以通过延时执行函数来缓解。
(小声)为了30金粒测了一小时。

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