米可绫夏ww
本帖最后由 米可绫夏ww 于 2021-8-17 16:53 编辑

如题,需要让名字被修改过的物品无法被识别,例如:
原版合成的钻石剑,可以被识别,
用铁砧改名之后就无法被识别到。
在线等,求解www



Chelover_C60
具体应用情景是什么?
检测特定路径下不存在nbt没有比较好的方法,只能穷举判断各个格子当中是否存指定物品,后判断物品是否拥有名字。
如检测手持物品是否为未命名的钻石剑
  1. execute if data entity @s SelectedItem{id:"minecraft:diamond_sword"} unless data entity @s SelectedItem.tag.display.Name run say 主手拥有未命名的钻石剑
复制代码

米可绫夏ww
Chelover_C60 发表于 2021-8-17 17:38
具体应用情景是什么?
检测特定路径下不存在nbt没有比较好的方法,只能穷举判断各个格子当中是否存指定物品 ...

是这样的,我需要实现这样一个功能:玩家从工作台合成原版物品后被我数据包识别然后调用插件指令给玩家替换成一把带有随机属性的相同材质但是不同name和lore的武器,为了避免重复被识别,所以肯定不能直接判断item类型的,只能从name或者lore或者nbt标签来想办法识别

夕xy
版本是什么? 是1.13+还是1.12-

Chelover_C60
本帖最后由 Chelover_C60 于 2021-8-17 18:11 编辑
米可绫夏ww 发表于 2021-8-17 17:53
是这样的,我需要实现这样一个功能:玩家从工作台合成原版物品后被我数据包识别然后调用插件指令给玩家替 ...

是服务器吗?服务器的话更建议你通过插件实现该功能

就像刚才说的,选择无某个nbt的物品的方法除穷举外基本没有,同时nbt穷举对性能占用相对会大一些。所以这种思路虽可行但可能性能占用稍高。以及exe if data是1.14+加入的功能,由于你没有明确版本,也不知道能不能用。

同时感觉这个需求在原版上更像nbt合成的思路。目前原版解决nbt合成的一种思路是,修改原版合成配方为合成一个原版无法获得的物品,然后通过进度检测配方解锁,触发后为玩家奖励函数,修改合成得到的物品为指定物品,详见此处(适用版本1.13+)。但是由于你要求检测到合成原版物品后触发,因此此方案不可行,除非你愿意使用一个无法获得的物品做中转。具体利弊你自己权衡。(但如果必须使用原版解决的话,更建议通过这种方案解决)

米可绫夏ww
JXGame 发表于 2021-8-17 18:01
版本是什么? 是1.13+还是1.12-

是1.16.5版本的

米可绫夏ww
Chelover_C60 发表于 2021-8-17 18:08
是服务器吗?服务器的话更建议你通过插件实现该功能。

就像刚才说的,选择无某个nbt的物品的方法除穷举外 ...

好吧,我打算用你那个手持物品检测的方法来弄,虽然会有点不方便,不过无伤大雅