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
具体版本?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
低耐久铁砧 发表于 2020-7-6 10:05
版本是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文件如此
- {
- "replace": false,
- "values": [
- "minecraft:bat",
- "minecraft:cat",
- "minecraft:chicken",
- "minecraft:cod",
- "minecraft:cow",
- "minecraft:dolphin",
- "minecraft:donkey",
- "minecraft:fox",
- "minecraft:horse",
- "minecraft:iron_golem",
- "minecraft:llama",
- "minecraft:mooshroom",
- "minecraft:mule",
- "minecraft:ocelot",
- "minecraft:panda",
- "minecraft:parrot",
- "minecraft:pig",
- "minecraft:polar_bear",
- "minecraft:pufferfish",
- "minecraft:rabbit",
- "minecraft:sheep",
- "minecraft:salmon",
- "minecraft:snow_golem",
- "minecraft:squid",
- "minecraft:trader_llama",
- "minecraft:tropical_fish",
- "minecraft:turtle",
- "minecraft:villager",
- "minecraft:wandering_trader",
- "minecraft:wolf",
- "minecraft:zombie_horse",
- "minecraft:skeleton_horse"
- ]
- }
数据包结构如下
- .
- ├── entities
- │ ├── data
- │ │ ├── entities
- │ │ │ ├── functions
- │ │ │ │ ├── initsb.mcfunction
- │ │ │ │ ├── stats
- │ │ │ │ │ ├── all.mcfunction
- │ │ │ │ │ └── type.mcfunction
- │ │ │ │ └── stats_main.mcfunction
- │ │ │ └── tags
- │ │ │ └── entity_types
- │ │ │ ├── friendly.json
- │ │ │ ├── misc.json
- │ │ │ └── unfriendly.json
- │ │ └── minecraft
- │ │ └── tags
- │ │ └── functions
- │ │ ├── load.json
- │ │ └── tick.json
- │ └── pack.mcmeta
- └── ljyys
- ├── data
- │ ├── ljyys
- │ │ ├── advancements
- │ │ │ └── ljyys.json
- │ │ └── functions
- │ │ └── tick.mcfunction
- │ ├── minecraft
- │ │ └── tags
- │ │ └── functions
- │ │ └── tick.json
- │ └── timer
- │ └── functions
- │ ├── hide.mcfunction
- │ └── show.mcfunction
- └── pack.mcmeta
- 20 directories, 16 files
则
- execute store result score friend entities run execute if entity @e[type=#entities:friendly]
- execute store result score hostile entities run execute if entity @e[type=#entities:unfriendly]
- execute store result score misc entities run execute if entity @e[type=#entities:misc]
- execute store result score item entities run execute if entity @e[type=minecraft:item]
- execute store result score all entities run execute if entity @e
#entites:xxxx
会选中json文件里面指定了的
阴阳师元素祭祀 发表于 2020-7-6 10:26
比如
有个json文件如此
但是我看到的教程大概是这么写的
- execute as @e[type=armor_stand,tag=machine1,distance=..0.5] at @s if score #t loadingBar matches 1..100 run function [function]
(主要就是类似这段函数出了问题,@e后面不加distance会影响附近其他盔甲架,加了那就连要检测的盔甲架也出问题)
本帖最后由 ⊙u⊙ 于 2020-7-5 16:41 编辑
这个位置的是假名玩家,比如
$fakeplayer
#fakeplayer
等同于直接填写玩家名字用法,差别是前面有符号而真实玩家不会存在带有符号的名字。
另外,开头为#的名字不会在记分板中显示
优点是跳过选择器在世界获取实体,直接从玩家列表里查
另外另外,把有问题的东西发上来,或者考虑看一下我签名档的第一个链接?
低耐久铁砧 发表于 2020-7-5 16:34
但是我看到的教程大概是这么写的这里面score后面的#t代表什么?
(主要就是类似这段函数出了问题,@e后面 ...
这个位置的是假名玩家,比如
$fakeplayer
#fakeplayer
等同于直接填写玩家名字用法,差别是前面有符号而真实玩家不会存在带有符号的名字。
另外,开头为#的名字不会在记分板中显示
优点是跳过选择器在世界获取实体,直接从玩家列表里查
另外另外,把有问题的东西发上来,或者考虑看一下我签名档的第一个链接?
⊙u⊙ 发表于 2020-7-6 10:37
这个位置的是假名玩家,比如
$fakeplayer
所以说我检测#t会导致影响到其他实体是这个原因吗......
低耐久铁砧 发表于 2020-7-5 16:42
所以说我检测#t会导致影响到其他实体是这个原因吗......
就你目前给的信息我猜不了啊
⊙u⊙ 发表于 2020-7-6 10:44
就你目前给的信息我猜不了啊
##,真实......
实际上我就是想做一个筛子,筛制需要一定时间的那种,但是类似的机器方块,呃......
图片不太好处理(两个图床都炸了),就是所有机器的放置,gui,配方和破坏的函数都被写在对应的文件夹里(比如所有的被破坏行为都放在break,配方处理都放在recipes),光是筛子的行为就被放在不同的文件夹,处理是好处理了,但是出了问题确实不好问......
就说筛子筛泥土的配方吧,先是main检测符不符合配方,输出栏有没有东西
- 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
- execute store result score #t tfwcraftinput run data get block ~ ~ ~ Items[{Slot:4b}].Count
- execute store result block ~ ~ ~ Items[{Slot:4b}].Count byte 1 run scoreboard players remove #t tfwcraftinput 1
- scoreboard players set #t tfwLoadingBar 0
- function tfw:machine/recipes/wooden_sieve/dirt_load
- 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
- 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
- execute if score #t tfwLoadingBar matches 1..99 run schedule function tfw:machine/recipes/wooden_sieve/dirt_load 2
- execute if score #t tfwLoadingBar matches 100..101 run function tfw:machine/recipes/wooden_sieve/dirt_com
- 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
- scoreboard players set #t tfwLoadingBar 0
问题就出在score记在@s上面的话,放一个土块筛子就“死”了;记在#t上面的话,一个筛子在筛东西其他筛子也会同步筛东西。这还不是最主要的,筛子至少还能用,带有可点击gui的方块问题就更多了,要么就是点击了按钮没反应,要么就是放进去东西就判定我点击了按钮,或者无限执行按钮指令......先把筛子问题解决了吧......
低耐久铁砧 发表于 2020-7-5 17:16
##,真实......
实际上我就是想做一个筛子,筛制需要一定时间的那种,但是类似的机器方块,呃......
图片 ...
首先
at @s[distance=..0.5] 这个的distance可以去掉,除非是视线递归那种存在实体坐标偏移的情况,否则没什么意义
假名更舒服的用法是少板多人,比如
—— if score #loadingBar tfw
—— if score #craftingInput tfw
当然这些都不是重点
(我也没仔细看,如果说错了多原谅...)
感觉就是选择器上处理得不是很好,也是选择器改用假名时需要注意的地方。因此我怀疑自我调用的时候影响到了其他木筛。
比如跑进度时的选择器是as @e[...]既是选择木筛,建议改用@s,否则选到了其他木筛,其他木筛又在加分上给弄糊了。
很懒地举一个例子(甚至还有些无意义的表达方式),在座有5个marker
两套代码
- score set 0
- execute as @e[tag=marker] run function #a
- #a
- execute as @e[tag=marker] run score add 1
- tag @s remove marker
- score set 0
- execute as @e[tag=marker] run function #a
- #b
- execute as @s run score add 1
- 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就导致筛子卡死在一分不动,怎么调都不行,明显设成#玩家会造成所有在场的筛子都同时走条。上面您给出的这段我也不知道怎么用(感觉还是会让筛子同时走条),能再详细描述一下吗?
低耐久铁砧 发表于 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⊙ 于 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
#测试需要添加了自己手头上的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"}就没法正常读数了,请问这个该如何解决?
低耐久铁砧 发表于 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虽然能用,但对于视觉感受来说太糟了,所以我用的是替换物品名的办法,
- replaceitem block ~ ~ ~ container.13 firework_star{tag:{id:'tfw:ws_gui'},display:{Name:'{"score":{"name":"@s","objective":"tfwLoadingBar"}}'},CustomModelData:15730000,guibg:1b,dict:['guibg']}
本帖最后由 ⊙u⊙ 于 2020-7-6 21:11 编辑
如果改成@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的话会是牌子自己,所以请给要解析分数的一个临时实体标签,牌子选择此标签的实体,解析完名字也改完后去除临时标签
低耐久铁砧 发表于 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/ ...
感谢,感谢您能那么耐心地帮我解决问题。