本篇教程由作者设定未经允许禁止转载。

示例版本为forge1.19.2,其它版本可参考自改。

完整实例

当玩家右键强力磁铁'artifacts:universal_attractor'且饰品栏存在强力磁铁时,将周围的掉落物聚集在自身位置...

*下文'栏位'指'项链necklace、戒指ring'等,'槽位'指第几个槽

实例中的相关方法:获取佩戴特定物品的计数;为特定栏位的特定槽位设置物品;获取特定栏位的第n槽位中的物品(n为索引,从0开始,0代表第1位);获取玩家拥有的槽位总数;获取饰品栏中所有物品;

KJS6#进阶实例#Curios实例及ambiguous歧义方法处理-第1张图片

部分简述

Internal.ICuriosHelper.findCurios

这个方法分为3种,其中1和2的arg1(即参数2)都是物品,方法3中arg1要填的是string[]KJS6#进阶实例#Curios实例及ambiguous歧义方法处理-第2张图片KJS6#进阶实例#Curios实例及ambiguous歧义方法处理-第3张图片KJS6#进阶实例#Curios实例及ambiguous歧义方法处理-第4张图片

平常的做法是直接写,像下图1这样,然而实际运行时会发现触发报错(下图2):Java method ... is ambiguous ,大致可以理解为表示参数有歧义,然后它紧接着提示了引发歧义的格式,这个时候就需要手动指定参数类型,具体做法写在了下图1的360/361/362行中,简单来说就是把curiosHelper.findCurios中.findCurios换成[],然后去报错提示里把想要的其中一种复制作为字符串写进[]里,这个时候歧义处理就完成了。

*注:这种做法处理完之后的类型会变为any,需要手动进行标注(如第358行),方便后续代码补全。

KJS6#进阶实例#Curios实例及ambiguous歧义方法处理-第5张图片KJS6#进阶实例#Curios实例及ambiguous歧义方法处理-第6张图片

Internal.ItemCooldowns.isOnCooldown(arg0: Internal.Item_)

实例中353行有用到,检测物品是否处于冷却中,但是原版这个东西有漏洞,玩家重新进入存档时冷却会被重置


题外话:即使把带有属性加成的饰品设置在不合理的栏位时(比如手饰放项链槽),属性依然会生效KJS6#进阶实例#Curios实例及ambiguous歧义方法处理-第7张图片

CuriosApi中还有其他一些方法,可以自行研究。

如果觉得太复杂或难以驾驭,不妨使用模组自身提供的命令/curios