本篇教程由作者设定使用 CC BY-NC 协议。
须知
注意!:该教程不支持1.2.0以上的版本!新版本修改了NBT路径获取方式,并且提供了更好的逻辑处理。
该教程适用于1.16.5,该脚本并未在其他版本进行过测试。
因本人技术有限,该教程必定存在不足之处,敬请谅解。如果您有更好的建议,请在评论区或私信指出。
教程中可能涉及到的名词多数不会进行解释,比如“键”。
这个脚本的作用是用NBT来重新定义或者增加钻石剑的武器等级需求。
该教程所需模组:[PMMO] Project MMO、PMMO and NBT Compat。
以一把附魔了亡灵杀手和抢夺的钻石剑作为示例,它的NBT是:{RepairCost:3,Enchantments:[{lvl:1s,id:"minecraft:smite"},{lvl:1s,id:"minecraft:looting"}],Damage:12}。需重点关注NBT!
配置的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
}
}]
}
]
}
}
结果
感谢:
感谢PMMO and NBT CompatMOD作者:Caltinor提供的帮助。