低耐久铁砧
execute检测score命令里面有一个实体选择器,大部分时候用的都是@a,@p,@e,@s之类,但是我在找数据包教程的时候发现还有#t,去wiki和很多其他的教程里面去找,没有找到以#开头的实体选择器之类的信息,请问#t代表的是哪个(些)实体?还有没有类似的其他实体选择器?(最好说明清楚#开头的所有实体选择器,以及有没有其他非@和#开头的选择器)

纱夜
#xxx是自定义数据包里面的
具体版本?datapack?
https://wiki.biligame.com/mc/%E6%95%B0%E6%8D%AE%E5%8C%85


这是标签
https://wiki.biligame.com/mc/%E6%A0%87%E7%AD%BE#.E5.AE.9E.E4.BD.93.E7.B1.BB.E5.9E.8B.E6.A0.87.E7.AD.BE


低耐久铁砧
阴阳师元素祭祀 发表于 2020-7-6 10:05
#xxx是自定义数据包里面的
具体版本?

版本是1.16.1

纱夜
实体类型标签
实体类型标签可以在type实体选择器参数以及战利品表条件中以#(命名空间ID)的形式使用。只要物品满足了该标签中定义的任何一个物品,测试就会通过。

那应该是这个了(wiki好像都是最新版本)

低耐久铁砧
阴阳师元素祭祀 发表于 2020-7-6 10:06
那应该是这个了(wiki好像都是最新版本)

wiki描述是不是有点问题,前面说选择实体后面又说物品满足标签......
以及这个命名空间是如何定义的?

纱夜
低耐久铁砧 发表于 2020-7-6 10:09
wiki描述是不是有点问题,前面说选择实体后面又说物品满足标签......
以及这个命名空间是如何定义的? ...

这个命名空间在数据包结构那边有
https://wiki.biligame.com/mc/%E6 ... 9.E7.BB.93.E6.9E.84

低耐久铁砧
阴阳师元素祭祀 发表于 2020-7-6 10:12
这个命名空间在数据包结构那边有
https://wiki.biligame.com/mc/%E6%95%B0%E6%8D%AE%E5%8C%85#.E6.96.87. ...

wiki说是命名空间id,但是教程里面用的是#t,实测单一选择没问题(但是score计算就有问题了,比如会检测到附近其他实体,想过把所有的#t换成@s或@e加实体条件,但是都会出现问题),所以这个“t”代表了什么?

纱夜
低耐久铁砧 发表于 2020-7-6 10:17
wiki说是命名空间id,但是教程里面用的是#t,实测单一选择没问题(但是score计算就有问题了,比如会检测 ...

比如
有个json文件如此
  1. {
  2.     "replace": false,
  3.     "values": [
  4.                 "minecraft:bat",
  5.                 "minecraft:cat",
  6.                 "minecraft:chicken",
  7.                 "minecraft:cod",
  8.                 "minecraft:cow",
  9.                 "minecraft:dolphin",
  10.                 "minecraft:donkey",
  11.                 "minecraft:fox",
  12.                 "minecraft:horse",
  13.                 "minecraft:iron_golem",
  14.                 "minecraft:llama",
  15.                 "minecraft:mooshroom",
  16.                 "minecraft:mule",
  17.                 "minecraft:ocelot",
  18.                 "minecraft:panda",
  19.                 "minecraft:parrot",
  20.                 "minecraft:pig",
  21.                 "minecraft:polar_bear",
  22.                 "minecraft:pufferfish",
  23.                 "minecraft:rabbit",
  24.                 "minecraft:sheep",
  25.                 "minecraft:salmon",
  26.                 "minecraft:snow_golem",
  27.                 "minecraft:squid",
  28.                 "minecraft:trader_llama",
  29.                 "minecraft:tropical_fish",
  30.                 "minecraft:turtle",
  31.                 "minecraft:villager",
  32.                 "minecraft:wandering_trader",
  33.                 "minecraft:wolf",
  34.                 "minecraft:zombie_horse",
  35.                 "minecraft:skeleton_horse"
  36.     ]
  37. }
复制代码


数据包结构如下
  1. .
  2. ├── entities
  3. │   ├── data
  4. │   │   ├── entities
  5. │   │   │   ├── functions
  6. │   │   │   │   ├── initsb.mcfunction
  7. │   │   │   │   ├── stats
  8. │   │   │   │   │   ├── all.mcfunction
  9. │   │   │   │   │   └── type.mcfunction
  10. │   │   │   │   └── stats_main.mcfunction
  11. │   │   │   └── tags
  12. │   │   │       └── entity_types
  13. │   │   │           ├── friendly.json
  14. │   │   │           ├── misc.json
  15. │   │   │           └── unfriendly.json
  16. │   │   └── minecraft
  17. │   │       └── tags
  18. │   │           └── functions
  19. │   │               ├── load.json
  20. │   │               └── tick.json
  21. │   └── pack.mcmeta
  22. └── ljyys
  23.     ├── data
  24.     │   ├── ljyys
  25.     │   │   ├── advancements
  26.     │   │   │   └── ljyys.json
  27.     │   │   └── functions
  28.     │   │       └── tick.mcfunction
  29.     │   ├── minecraft
  30.     │   │   └── tags
  31.     │   │       └── functions
  32.     │   │           └── tick.json
  33.     │   └── timer
  34.     │       └── functions
  35.     │           ├── hide.mcfunction
  36.     │           └── show.mcfunction
  37.     └── pack.mcmeta

  38. 20 directories, 16 files
复制代码


  1. execute store result score friend entities run execute if entity @e[type=#entities:friendly]
  2. execute store result score hostile entities run execute if entity @e[type=#entities:unfriendly]
  3. execute store result score misc entities run execute if entity @e[type=#entities:misc]
  4. execute store result score item entities run execute if entity @e[type=minecraft:item]
  5. execute store result score all entities run execute if entity @e
复制代码

#entites:xxxx
会选中json文件里面指定了的

⊙u⊙
https://www.mcbbs.net/thread-775667-1-1.html

挺好用的,不去了解一下?

低耐久铁砧

但是我看到的教程大概是这么写的
  1. execute as @e[type=armor_stand,tag=machine1,distance=..0.5] at @s if score #t loadingBar matches 1..100 run function [function]
复制代码
这里面score后面的#t代表什么?
(主要就是类似这段函数出了问题,@e后面不加distance会影响附近其他盔甲架,加了那就连要检测的盔甲架也出问题)

⊙u⊙
本帖最后由 ⊙u⊙ 于 2020-7-5 16:41 编辑
低耐久铁砧 发表于 2020-7-5 16:34
但是我看到的教程大概是这么写的这里面score后面的#t代表什么?
(主要就是类似这段函数出了问题,@e后面 ...

这个位置的是假名玩家,比如

$fakeplayer
#fakeplayer

等同于直接填写玩家名字用法,差别是前面有符号而真实玩家不会存在带有符号的名字。
另外,开头为#的名字不会在记分板中显示
优点是跳过选择器在世界获取实体,直接从玩家列表里查


另外另外,把有问题的东西发上来,或者考虑看一下我签名档的第一个链接?

低耐久铁砧
⊙u⊙ 发表于 2020-7-6 10:37
这个位置的是假名玩家,比如

$fakeplayer

所以说我检测#t会导致影响到其他实体是这个原因吗......

⊙u⊙
低耐久铁砧 发表于 2020-7-5 16:42
所以说我检测#t会导致影响到其他实体是这个原因吗......

就你目前给的信息我猜不了啊

低耐久铁砧
⊙u⊙ 发表于 2020-7-6 10:44
就你目前给的信息我猜不了啊

##,真实......
实际上我就是想做一个筛子,筛制需要一定时间的那种,但是类似的机器方块,呃......
图片不太好处理(两个图床都炸了),就是所有机器的放置,gui,配方和破坏的函数都被写在对应的文件夹里(比如所有的被破坏行为都放在break,配方处理都放在recipes),光是筛子的行为就被放在不同的文件夹,处理是好处理了,但是出了问题确实不好问......
就说筛子筛泥土的配方吧,先是main检测符不符合配方,输出栏有没有东西
  1. execute as @e[type=armor_stand,tag=wooden_sieve] at @s[distance=..0.5] if predicate tfw:machine_recipes/wooden_sieve/dirt unless score #t tfwLoadingBar matches 1..100 run function tfw:machine/recipes/wooden_sieve/dirt
复制代码
都符合就跑dirt,删除一个土块
  1. execute store result score #t tfwcraftinput run data get block ~ ~ ~ Items[{Slot:4b}].Count
  2. execute store result block ~ ~ ~ Items[{Slot:4b}].Count byte 1 run scoreboard players remove #t tfwcraftinput 1
  3. scoreboard players set #t tfwLoadingBar 0
  4. function tfw:machine/recipes/wooden_sieve/dirt_load
复制代码
然后开始跑进度条,不断地自我调用,直到分数到达一定量
  1. execute as @e[type=armor_stand,tag=wooden_sieve] at @s[distance=..0.5] if entity @p[distance=..3] if predicate tfw:machine_recipes/wooden_sieve/output/19-25b run scoreboard players add #t tfwLoadingBar 1
  2. execute as @e[type=armor_stand,tag=wooden_sieve] at @s[distance=..0.5] if entity @p[distance=..3] if predicate tfw:machine_recipes/wooden_sieve/output/19-25b run playsound block.gravel.break block @p ~ ~ ~ 0.1 0.5 0.0
  3. execute if score #t tfwLoadingBar matches 1..99 run schedule function tfw:machine/recipes/wooden_sieve/dirt_load 2
  4. execute if score #t tfwLoadingBar matches 100..101 run function tfw:machine/recipes/wooden_sieve/dirt_com
复制代码
期间检测玩家在不在附近,玩家远离了就会停止;输出栏被占用也会停止(防止吞物品)。到达100之后就输出对应产物
  1. execute as @e[type=armor_stand,tag=wooden_sieve,distance=..0.5] at @s run loot replace block ~ ~ ~ container.19 7 loot tfw:sieve/wooden/dirt
  2. scoreboard players set #t tfwLoadingBar 0
复制代码
然后分数清零,重新检测有没有符合配方条件......
问题就出在score记在@s上面的话,放一个土块筛子就“死”了;记在#t上面的话,一个筛子在筛东西其他筛子也会同步筛东西。这还不是最主要的,筛子至少还能用,带有可点击gui的方块问题就更多了,要么就是点击了按钮没反应,要么就是放进去东西就判定我点击了按钮,或者无限执行按钮指令......先把筛子问题解决了吧......

⊙u⊙
低耐久铁砧 发表于 2020-7-5 17:16
##,真实......
实际上我就是想做一个筛子,筛制需要一定时间的那种,但是类似的机器方块,呃......
图片 ...

首先
at @s[distance=..0.5] 这个的distance可以去掉,除非是视线递归那种存在实体坐标偏移的情况,否则没什么意义
假名更舒服的用法是少板多人,比如
—— if score #loadingBar tfw
—— if score #craftingInput tfw
当然这些都不是重点

(我也没仔细看,如果说错了多原谅...)
感觉就是选择器上处理得不是很好,也是选择器改用假名时需要注意的地方。因此我怀疑自我调用的时候影响到了其他木筛。
比如跑进度时的选择器是as @e[...]既是选择木筛,建议改用@s,否则选到了其他木筛,其他木筛又在加分上给弄糊了。

很懒地举一个例子(甚至还有些无意义的表达方式),在座有5个marker
两套代码
  1. score set 0
  2. execute as @e[tag=marker] run function #a

  3. #a
  4. execute as @e[tag=marker] run score add 1
  5. tag @s remove marker
复制代码



  1. score set 0
  2. execute as @e[tag=marker] run function #a

  3. #b
  4. execute as @s run score add 1
  5. tag @s remove marker
复制代码


前者
第一个marker执行#a时会选所有(5个)实体各加1分,出来后分数为5,给自己去除tag
第二个marker执行时也会选所有(4个)各加1分,出来后分数为9(5+4)
第三个marker执行时选所有(3个)各加1分,出来后分数为12(5+4+3)
第四个...14(5+4+3+2)
第五个...15(5+4+3+2+1)


而后者执行#b到最后分数为5

低耐久铁砧
⊙u⊙ 发表于 2020-7-6 11:57
首先
at @s[distance=..0.5] 这个的distance可以去掉,除非是视线递归那种存在实体坐标偏移的情况,否则 ...

我刚才又试了老长时间,我想知道,把分数加在@s(即执行者,盔甲架本身)身上不行吗?我看到wiki上面提到可以给其他实体加分的,但是在实际操作中设成@s就导致筛子卡死在一分不动,怎么调都不行,明显设成#玩家会造成所有在场的筛子都同时走条。上面您给出的这段我也不知道怎么用(感觉还是会让筛子同时走条),能再详细描述一下吗?

⊙u⊙
低耐久铁砧 发表于 2020-7-5 20:56
我刚才又试了老长时间,我想知道,把分数加在@s(即执行者,盔甲架本身)身上不行吗?我看到wiki上面提到 ...

>我刚才又试了老长时间,我想知道,把分数加在@s(即执行者,盔甲架本身)身上不行吗?


>但是在实际操作中设成@s就导致筛子卡死在一分不动
难讲...@s引用先前命令的执行者,如果前面没有执行者的话就会出问题

>上面您给出的这段我也不知道怎么用
只是例子,就是想说要注意不要在选择实体时选到无关人员啊...



#都符合就跑dirt,删除一个土块
execute as @e[木筛] at @s if predicate dirt unless score 加载条 matches 1..100 run function dirt

#然后开始跑进度条,不断地自我调用,直到分数到达一定量
execute store result score 输入 run data get block ... Count
execute store result block Count run 输入-1
scoreboard players set 加载条 0
function dirt_load

#期间检测玩家在不在附近,玩家远离了就会停止;输出栏被占用也会停止(防止吞物品)。到达100之后就输出对应产物
execute as @e[木筛] at @s if entity @p[distance=..3] if predicate 输出/19-25b run scoreboard players add 加载条 1
execute as @e[木筛] at @s if entity @p[distance=..3] if predicate 输出/19-25b run playsound
execute if score 加载条 matches 1..99 run schedule function dirt_load 2t
execute if score 加载条 matches 100..101 run function dirt_com

#然后分数清零,重新检测有没有符合配方条件......
execute as @e[木筛,distance=..0.5] at @s run loot replace block ~ ~ ~ container.19 7 loot dirt
scoreboard players set 加载条 0



我把你前面的命令简化了一下方便查看,这4块命令如果不是写在同一个function下而是被划分成几个function的话,请问这4个的函数名是啥?我想理清一下思路...

低耐久铁砧
⊙u⊙ 发表于 2020-7-6 15:46
>我刚才又试了老长时间,我想知道,把分数加在@s(即执行者,盔甲架本身)身上不行吗?

自上往下依次执行,最后返回到第一个构成一个循环,每块函数的具体作用我已经都写在上面了,也没多少,加起来就十一条命令,写成四块是因为各自具有特殊条件。函数文件名的话,第一个是main(高频检测,主要检测输入栏slot:4b有没有土块,输出栏slot:19b~slot:25b有没有多余产物,筛子是否已经运行),第二个是dirt(减去一个土块,并给#t或盔甲架加一分,这里不知道为什么如果设成盔甲架的话就卡死了),第三个是dirt_load(主要用于加分,每加一次分延迟2t再运行一次,直到加满100分),第四个是dirt_com(加到100分后给slot:19b~slot:25bloot一次战利品表,然后分数清零,这样main就能开始检测了)。如果还有不清楚的我能再细说,只要能解决计时问题就行......

⊙u⊙
本帖最后由 ⊙u⊙ 于 2020-7-6 00:17 编辑

#测试需要添加了自己手头上的loot,去除/简化了某些槽位的检测和predicate
#dirt_load用于重新在schedule后补回丢失的选择器
#dirt_load2使用@s以防止撞车
#set 0用作激活,因此最后重置使用了reset以防和dirt_load撞车
#还有或许非你设计上的问题?(也可能是我predicate删太多导致出现差异)就是loot会替换槽位而不是添加到槽位


#load
scoreboard objectives add Bar dummy
scoreboard objectives add Input dummy



#uin:test/main
execute as @e[tag=wooden_sieve] at @s unless score @s Bar matches 1..100 if data block ~ ~ ~ Items[{Slot:4b}] run function uin:test/dirt

#uin:test/dirt
execute store result score @s Input run data get block ~ ~ ~ Items[{Slot:4b}].Count
execute store result block ~ ~ ~ Items[{Slot:4b}].Count byte 1 run scoreboard players remove @s Input 1
scoreboard players set @s Bar 0
function uin:test/dirt_load

#uin:test/dirt_load
execute as @e[tag=wooden_sieve,scores={Bar=0..99}] at @s run function uin:test/dirt_load2

#uin:test/dirt_load2
execute if entity @a[distance=..3] run scoreboard players add @s Bar 1
execute if entity @a[distance=..3] run playsound block.gravel.break block @a[distance=..3] ~ ~ ~ 0.1 0.5 0.0
execute if score @s Bar matches 1..99 run schedule function uin:test/dirt_load 2t
execute if score @s Bar matches 100..101 run function uin:test/dirt_com

#uin:test/dirt_com
loot replace block ~ ~ ~ container.19 7 loot uin:xradar/xradar2
scoreboard players reset @s Bar

低耐久铁砧
⊙u⊙ 发表于 2020-7-6 18:11
#测试需要添加了自己手头上的loot,去除/简化了某些槽位的检测和predicate
#dirt_load用于重新在schedule后 ...

感谢,现在筛子可以正常运行了。当然我还是想再问一个问题,就是这个进度分数如何显示出来,原本我用#t的时候可以用{"score":{"name":"#t","objective":"tfwLoadingBar"}显示,现在分数被记在@s头上,但是{"score":{"name":"@s","objective":"tfwLoadingBar"}就没法正常读数了,请问这个该如何解决?

⊙u⊙
低耐久铁砧 发表于 2020-7-6 01:57
感谢,现在筛子可以正常运行了。当然我还是想再问一个问题,就是这个进度分数如何显示出来,原本我用#t的 ...

得看你把这段写在了哪里,要保证@s为目前处理的木筛,比如可以写在dirt_load2 tellraw @a[distance=..3] ...{... @s ...}

除非确认是复制黏贴少了东西,否则你这里写的两个最后都漏了括号 }

低耐久铁砧
⊙u⊙ 发表于 2020-7-7 04:38
得看你把这段写在了哪里,要保证@s为目前处理的木筛,比如可以写在dirt_load2 tellraw @a[distance=..3]  ...

不不不,tellraw虽然能用,但对于视觉感受来说太糟了,所以我用的是替换物品名的办法,

  1. replaceitem block ~ ~ ~ container.13 firework_star{tag:{id:'tfw:ws_gui'},display:{Name:'{"score":{"name":"@s","objective":"tfwLoadingBar"}}'},CustomModelData:15730000,guibg:1b,dict:['guibg']}
复制代码
而且这个不能写在load2里面,是放在gui高频固定里面的,因为load2有2t的延迟,玩家在这期间把其他物品放进slot:13b能刷物品。比较疑惑的是,同样的文本,在tellraw里面可以显示,但是物品名就不行了,物品名该如何设定?

⊙u⊙
本帖最后由 ⊙u⊙ 于 2020-7-6 21:11 编辑
低耐久铁砧 发表于 2020-7-6 14:17
不不不,tellraw虽然能用,但对于视觉感受来说太糟了,所以我用的是替换物品名的办法,而且这个不能写在l ...

如果改成@s以外的选择器还是如此的话,那应该是这个已知bug,不会修的了
https://bugs.mojang.com/browse/MC-124008

但有一个解决办法,就是把那段json写到牌子里,json会被解析,然后再把字串丢回物品内
比如
#解析
data merge block 0 1 0 {Text1:'[{"text":"score>>>"},{"score":{"name":"@e[tag=temp,limit=1]","objective":"board"}}]'}

#丢回去(容器路径和对应槽位忘了...)
data modify block ~ ~ ~ ...display.Name set from block 0 1 0 Text1


别忘了牌子里解析@s的话会是牌子自己,所以请给要解析分数的一个临时实体标签,牌子选择此标签的实体,解析完名字也改完后去除临时标签

低耐久铁砧
⊙u⊙ 发表于 2020-7-7 15:09
如果改成@s以外的选择器还是如此的话,那应该是这个已知bug,不会修的了
https://bugs.mojang.com/browse/ ...

感谢,感谢您能那么耐心地帮我解决问题。