本篇教程由作者设定使用 CC BY-NC 协议。

须知

  • 注意!:该教程不支持1.2.0以上的版本!新版本修改了NBT路径获取方式,并且提供了更好的逻辑处理。

  • 该教程适用于1.16.5,该脚本并未在其他版本进行过测试。

  • 因本人技术有限,该教程必定存在不足之处,敬请谅解。如果您有更好的建议,请在评论区或私信指出。

  • 教程中可能涉及到的名词多数不会进行解释,比如“键”。

  • 这个脚本的作用是用NBT来重新定义或者增加钻石剑的武器等级需求。

  • 该教程所需模组:[PMMO] Project MMOPMMO and NBT Compat

  • 以一把附魔了亡灵杀手和抢夺的钻石剑作为示例,它的NBT是:{RepairCost:3,Enchantments:[{lvl:1s,id:"minecraft:smite"},{lvl:1s,id:"minecraft:looting"}],Damage:12}。重点关注NBT!

    [1.2.0版本以下]等级配置:NBT匹配-第1张图片

  • 配置的Json文件路径(未开启版本隔离的情况下):“.minecraft\config\pmmo\req_<ItemType>_nbt.json”。<ItemType>表示设定的用途需求,比如一把镐子进行挖矿时是匹配工具的等级需求(req_tool.json),进行战斗时是匹配武器的等级需求(req_weapon.json)。

  • 本脚本因为是修改武器,所以是修改“req_weapon_nbt.json”。

  • 关于1.16.5匠魂匹配,这是我自制的两个匹配文件。可能不是很平衡,读者可以根据自己的需要来调整。PMMO模组的NBT等级匹配JSON (github.com)

示例代码

{
    "minecraft:diamond_sword": {
        "_summative_comment":"true表示等级相加,false表示以最高的为准",
        "summative": true,
        "_values_comment":"一个数组,在这个数组里填写内容",
        "values": [
            {
                "_type_comment": "指向NBT数据的第一级元素,如果它的值带有方括号说明是一个数组。需要填入“list”作为类型。type只支持:“list”、“compound”、“id”",
                "type": "list",
                "_keys_comment":"指向了附魔这个一级元素。",
                "keys": [
                    "Enchantments"
                ],
                "_index_comment": "任意正整数是指向这个数组的指定位置(第一个元素为0),-1表示遍历所有元素",
                "index": -1,
                "_sub_comment": "表示嵌套结构,用来描述附魔的下一级的元素。",
                "sub_references": [
                    {
                        "_type_comment":"compound表示复合结构,它用来指向被“{}”大括号保存的对象。",
                        "type": "compound",
                        "_keys_comment":"因为这个对象没有键,所以填双引号就好了",
                        "keys": [""],
                        "sub_references": [
                            {
                                "_type_comment":"id表示指向一个元素",
                                "type": "id",
                                "_keys_comment":"这里的id是亡灵杀手的键,读者应当根据nbt来调整。",
                                "keys": ["id"],
                                "_predicates_comment":"我们在这里开始设定条件了,前面都是用来描述怎么走到我们要修改的内容。",
                                "predicates": [
                                    {
                                        "_operator_comment":"这是设定操作符,请参照操作符篇。“EQUALS”表示对比是否相同",
                                        "operator": "EQUALS",
                                        "_comparator_comment":"在这里输入一个值,我们比较的是附魔名称,所以填入“minecraft:smite”亡灵杀手",
                                        "comparator": "minecraft:smite",
                                        "_value_comment": "如果符合条件,我们在这里设置的值就会用到这把钻石剑上。combat是战斗技能。这里要注意的是,我们通过这个PMMO and NBT Compat模组设定的等级可以超过PMMO配置的最大等级(你可以修改PMMO的配置文件提高最大等级)。",
                                        "value": {
                                            "combat": 200
                                        }
                                    }
                                ]
                            }
                        ]
                    }
                ]
            },
            {
                "_type_comment":"这是第二个条件,它和上面那个是“或”的关系,上面的条件符不符合跟这个没有关系。我们是values这个数组的第二个元素。",
                "type": "id",
                "_keys_comment":"因为它是键值对的形式,我们直接指向键,然后在predicates直接设定条件就好。Damage是表示消耗的耐久。",
                "keys": [
                    "Damage"
                ],
                "predicates": [
                    {
                        "_operator_comment":"表示大于",
                        "operator": "GREATER_THAN",
                        "_comparator_comment":"如果Damage大于4,则战斗技能需求+2级的意思。",
                        "comparator": 4,
                        "value": {
                            "combat": 2
                        }
                    }
                ]
            },
            {
                "type":"id",
                "keys":["Damage"],
                "predicates":[{
                    "_operator_comment":"这里是表示大于等于0的场合设定等级,为什么这么做:因为会覆盖掉原本PMMO的动态赋值,所以我们还得给他设定一个默认等级。因此,最终的等级需求会是40+2或者40+2+200",
                    "operator":"GREATER_THAN_OR_EQUAL",
                    "comparator":0,
                    "value":{
                        "combat":40
                    }
                }]
            }
        ]
    }
}

结果




[1.2.0版本以下]等级配置:NBT匹配-第2张图片[1.2.0版本以下]等级配置:NBT匹配-第3张图片


感谢: