本帖最后由 CR_019 于 2020-11-28 23:01 编辑
版本1.16+
参考:https://www.mcbbs.net/thread-947897-1-1.html
https://www.mcbbs.net/thread-1029442-1-1.html
暂时被锁定
具体来说,我做了一个容器模拟的工作台,使用盔甲架定位,并使用execute if命令匹配配方。
现在希望添加一个配方,其中的木板可以是任意一种类型,即类似于原版合成中物品tag的形式;
一种解决办法是穷举,但其缺点是容量过大,效率过低。
请问是否有免穷举的解决方案?
注:合成栏的槽位(Slot)是
1 2 3
10 11 12
19 21 22
版本1.16+
参考:https://www.mcbbs.net/thread-947897-1-1.html
https://www.mcbbs.net/thread-1029442-1-1.html
暂时被锁定
具体来说,我做了一个容器模拟的工作台,使用盔甲架定位,并使用execute if命令匹配配方。
现在希望添加一个配方,其中的木板可以是任意一种类型,即类似于原版合成中物品tag的形式;
一种解决办法是穷举,但其缺点是容量过大,效率过低。
请问是否有免穷举的解决方案?
注:合成栏的槽位(Slot)是
1 2 3
10 11 12
19 21 22
本帖最后由 Huge_Black 于 2020-11-28 23:05 编辑
把玩家的背包复制到临时容器里。把玩家背包清空。
把每个格子的物品依用summon item的方式放到玩家背包里,
用clear+# 的形式清除玩家背包,如果成功就算是装入了符合的物品
每次比较全部符合就算是配方正确
然后再把玩家物品还回去
这样?
把玩家的背包复制到临时容器里。把玩家背包清空。
把每个格子的物品依用summon item的方式放到玩家背包里,
用clear+# 的形式清除玩家背包,如果成功就算是装入了符合的物品
每次比较全部符合就算是配方正确
然后再把玩家物品还回去
这样?
Huge_Black 发表于 2020-11-28 23:00
把每个格子的物品依次复制到一个临时容器里面
用clear+# 的形式清除这个容器,如果成功就算是装入了符合的 ...
clear只能应用于实体
CR_019 发表于 2020-11-28 23:04
clear只能应用于实体
改了一下你再看看
Huge_Black 发表于 2020-11-28 23:05
改了一下你再看看
确实,但是你既想不用穷举,又想用tag的话只有clear可以实现了
或者说你可以实现一个类似于tag的功能?
就先准备一个临时容器,依次把物品复制进去
写一个函数来专门判断那个临时容器的物品是否满足要求
(毕竟代码层面实现tag应该也是靠穷举tag的内容的把hhh
本帖最后由 晴路卡 于 2020-11-29 03:10 编辑
把容器内需要判定槽位的物品放到盔甲架主手上
写个断言判断手持物品是否在planks物品标签里
复制代码以盔甲架为执行者
复制代码满足条件则通过,过完了同样的方法检测下一个槽位,或者搞多个盔甲架同时检测实体属性这一条件能用标签判定的栏位有六个左右手头胸腿脚 两个盔甲架就够塞下一个容器的所有槽位了
data modify把容器槽位内的物品放到盔甲架对应槽位之后就可以在一条execute命令里判定一个配方了
不想穷举完全可以用现在很普及的合成方式:
https://www.mcbbs.net/thread-1074290-1-1.html
虽然你好像知道
把容器内需要判定槽位的物品放到盔甲架主手上
写个断言判断手持物品是否在planks物品标签里
- {
- "condition": "minecraft:entity_properties",
- "entity": "this",
- "predicate": {
- "equipment": {
- "mainhand": {
- "tag": "minecraft:planks"
- }
- }
- }
- }
- execute if entity @s[predicate=(断言路径)]
data modify把容器槽位内的物品放到盔甲架对应槽位之后就可以在一条execute命令里判定一个配方了
不想穷举完全可以用现在很普及的合成方式:
https://www.mcbbs.net/thread-1074290-1-1.html
虽然你好像知道
可以把所有木板都标上同一个NBT标签,比如A:1
之后检测时只要检测物品有没有这个标签就行
之后检测时只要检测物品有没有这个标签就行