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

前言

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

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

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

  • 这个脚本的作用是使用钻石剑和末影水晶进行无序合成,合成出来的钻石剑保持原有耐久、附魔等数据并添加亡灵杀手5附魔。

示例代码

import crafttweaker.enchantments.IEnchantment;

import crafttweaker.item.IItemStack;

import crafttweaker.data.IData;

//    import导入相关包,没有导入对应的包会使脚本找不到我们创建的类型


//     建立了两个变量指向合成材料,一个是钻石剑,一个是末影水晶。

//    最好声明变量来指向想要修改的物品,我们要知道,两个<minecraft:diamond_sword>指向的钻石剑不是同一把。

//    “*”号是用来表示匹配所有耐久的。

var sword = <minecraft:diamond_sword:*>;

var end_crystal = <minecraft:end_crystal>;


//  一个无序合成注册脚本,我们需要对想要操作的材料进行标记(调用“marked”方法),比如我给sword标记了“mark”。这个可以随意标记(比如填入“end”也可以),标记后调用方式为“ins.end”来表示标记的ItemStack。

//  recipes.addShapeless(name,output,inputs,function,action)

//  如果function作为第三个被添加的参数,你可以使用函数以判定产物。 如果action函数作为第四个被添加的参数,你还可以决定当物品被合成时触发的事件。(引用自CraftTweaker简体中文文档

recipes.addShapeless("test_sword",sword, [sword.marked("mark"),end_crystal],

    //    添加一个函数作为第三个参数。建议参考:配方函数

    function(out, ins, cInfo){

        //    创建了一个enchTag来保存读取到的NBT数据。虽然现在是空的。

        var enchTag as IData = {};

        //    创建一个enchSmite来保存亡灵杀手附魔

        var enchSmite = <enchantment:minecraft:smite>;


        //    isEnchantable当没有附魔时返回true,所以在前面加了感叹号表示取反。

        if (!ins.mark.isEnchantable){

            //    如果这把钻石剑本身有附魔,则遍历所有附魔

            //    这里循环的是被“marked”方法标记为“mark”的输入材料,通过“enchantments”方法获取附魔列表。

            for ench in ins.mark.enchantments{

                //    判断一下遍历到的附魔是不是亡灵杀手,如果不是就记录到enchTag里。

                if(ench.definition.id != enchSmite.id){

                    enchTag += ench.makeTag();

                }

            }

        }

            //    循环结束后,再给enchTag添加上亡灵杀手5附魔。

            //    makeEnchantment(5)表示这个附魔等级是5,makeTag是表示返回这个附魔的nbt数据。

            enchTag += enchSmite.makeEnchantment(5).makeTag();

//    这里应该返回配方输出的ItemStack,也可以返回“null”来使配方无效。

//    因为我们要保持这把钻石剑的耐久和合成前一样,所以返回输入的钻石剑。

        return ins.mark.withTag(enchTag);

    },

//    在这里用不上事件,所以需要设为空

null);

代码结果

CrT合成魔改:配方函数应用-第1张图片

感谢: