CR_019
本帖最后由 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

Huge_Black
本帖最后由 Huge_Black 于 2020-11-28 23:05 编辑

把玩家的背包复制到临时容器里。把玩家背包清空。

把每个格子的物品依用summon item的方式放到玩家背包里,
用clear+# 的形式清除玩家背包,如果成功就算是装入了符合的物品
每次比较全部符合就算是配方正确
然后再把玩家物品还回去

这样?

CR_019
Huge_Black 发表于 2020-11-28 23:00
把每个格子的物品依次复制到一个临时容器里面
用clear+# 的形式清除这个容器,如果成功就算是装入了符合的 ...

clear只能应用于实体

Huge_Black
CR_019 发表于 2020-11-28 23:04
clear只能应用于实体

改了一下你再看看

Huge_Black
Huge_Black 发表于 2020-11-28 23:05
改了一下你再看看

确实,但是你既想不用穷举,又想用tag的话只有clear可以实现了

或者说你可以实现一个类似于tag的功能?

就先准备一个临时容器,依次把物品复制进去
写一个函数来专门判断那个临时容器的物品是否满足要求
(毕竟代码层面实现tag应该也是靠穷举tag的内容的把hhh

晴路卡
本帖最后由 晴路卡 于 2020-11-29 03:10 编辑

把容器内需要判定槽位的物品放到盔甲架主手上
写个断言判断手持物品是否在planks物品标签里
  1.     {
  2.       "condition": "minecraft:entity_properties",
  3.       "entity": "this",
  4.       "predicate": {
  5.         "equipment": {
  6.           "mainhand": {
  7.             "tag": "minecraft:planks"
  8.           }
  9.         }
  10.       }
  11.     }
复制代码
以盔甲架为执行者
  1. execute if entity @s[predicate=(断言路径)]
复制代码
满足条件则通过,过完了同样的方法检测下一个槽位,或者搞多个盔甲架同时检测实体属性这一条件能用标签判定的栏位有六个左右手头胸腿脚 两个盔甲架就够塞下一个容器的所有槽位了
data modify把容器槽位内的物品放到盔甲架对应槽位之后就可以在一条execute命令里判定一个配方了


不想穷举完全可以用现在很普及的合成方式:
https://www.mcbbs.net/thread-1074290-1-1.html
虽然你好像知道


renyunzhong
可以把所有木板都标上同一个NBT标签,比如A:1
之后检测时只要检测物品有没有这个标签就行