本篇教程由作者设定使用 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 [];
}
}

