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

看了这个教程之后,感觉不错机械动力xTaCZ 原价弹药配方数据包 - [TaCZ]永恒枪械工坊:零 (Timeless and Classics Zero) - MC百科|最大的Minecraft中文MOD百科

但是有个问题,需要一个一个枪包手动添加,有点麻烦。

于是琢磨了一天,完成了这个kubejs自动注册配方的代码。

需要mod:kubejs,Kubejs Create。

这个kubejs代码可以自动添加所有子弹的机械动力原价压块配方。(将compating改成mixing可以改成搅拌盆配方)

如果需要修改产出数量,只需要改count0就行了(单次不要超过一组,因为工作盆最大单次输出一组,多了不工作)。

改材料数量只需要修改cnt0。

如果需要加热,在compacting最后面加上.heated(),超级加热加上.superheated()做子弹需要加热?关键是和火药一起

原理是读取配方json,然后转换格式,注册到机械动力压块配方。

ServerEvents.recipes(event=>{
    const create = event.recipes.create;
    event.forEachRecipe({},(recipe)=>{
        if(recipe.getType()=='tacz:gun_smith_table_crafting' && recipe.getId().includes('ammo') ){
            let json=recipe.json
            if(json.get('result').get('type').toString()=='"ammo"'){
                let inputs=processItemConversion(String(json.get('materials').asJsonArray))
                let id0=String(json.get('result').get('id'))
                let count00=json.get('result').get('count').toString()
                let count0
                if(typeof count00 != 'undefined'){
                    count0=parseInt(count00,10)
                }else{
                    count0=1
                }
                create.compacting(Item.of('tacz:ammo').withCount(Math.ceil(count0)).withNBT('{AmmoId:'+id0+'}'),inputs)
                //recipe.remove()//如果需要移除原来的配方解除注释即可
            }
        }
    })
})
function processItemConversion(inputStr) {
    try {
        // 处理每个项目
        return JSON.parse(inputStr).map(elem => {
            const cnt = typeof elem.count != 'undefined' ? elem.count : 1;
            let id;
           
            // 检查是否有tag属性
            if (elem.item && elem.item.tag) {
                id = `#${elem.item.tag}`;
            }
            // 检查是否有item属性
            else if (elem.item && elem.item.item) {
                id = elem.item.item;
            }
            // 如果都没有,尝试直接获取item
            else if (elem.item) {
                id = elem.item;
            } else {
                id = 'unknown';
            }
           let cnt0 = parseInt(cnt)
            // 返回格式:数量x 物品标识符
            return `${cnt0}x ${id}`;
        });
    } catch (err) {
        console.error('解析字符串时出错:'+err);
        return [];
    }
}

示例:需要机械动力做子弹的材料 消耗x0.5,产出x2,需要超级加热,移除枪械工作台做子弹的配方,只需要改成:

ServerEvents.recipes(event=>{
    const create = event.recipes.create;
    event.forEachRecipe({},(recipe)=>{
        if(recipe.getType()=='tacz:gun_smith_table_crafting' && recipe.getId().includes('ammo') ){
            let json=recipe.json
            if(json.get('result').get('type').toString()=='"ammo"'){
                let inputs=processItemConversion(String(json.get('materials').asJsonArray))
                let id0=String(json.get('result').get('id'))
                let count00=json.get('result').get('count').toString()
                let count0
                if(typeof count00 != 'undefined'){
                    count0=parseInt(count00,10)
                }else{
                    count0=1
                }
                count0=Math.min(count0*2,64)//输出x2,不超过一组
                create.compacting(Item.of('tacz:ammo').withCount(Math.ceil(count0)).withNBT('{AmmoId:'+id0+'}'),inputs).superheated()//超级加热 
                recipe.remove()//移除原来的配方
            }
        }
    })
})
function processItemConversion(inputStr) {
    try {
        // 处理每个项目
        return JSON.parse(inputStr).map(elem => {
            const cnt = typeof elem.count != 'undefined' ? elem.count : 1;
            let id;
           
            // 检查是否有tag属性
            if (elem.item && elem.item.tag) {
                id = `#${elem.item.tag}`;
            }
            // 检查是否有item属性
            else if (elem.item && elem.item.item) {
                id = elem.item.item;
            }
            // 如果都没有,尝试直接获取item
            else if (elem.item) {
                id = elem.item;
            } else {
                id = 'unknown';
            }
            let cnt0 = parseInt(cnt)
            cnt0=Math.ceil(cnt0*0.5)//消耗材料x0.5
            // 返回格式:数量x 物品标识符
            return `${cnt0}x ${id}`;
        });
    } catch (err) {
        console.error('解析字符串时出错:'+err);
        return [];
    }
}