如何在不安装KubeJS Mek的情况下使用Mek的api用KubeJS注册倍矿物品和气体
本篇所有内容都基于1.20.1的KubeJS和通用机械
可以注册的内容有:倍矿物品(碎块/结晶/污浊粉/碎片)、气体(可以设置燃烧属性/放射性属性/冷却属性)、浆液(污浊+纯净)、颜料类型、灌注类型
这段是主要的,代码写在startup_scripts/materials_mek.js(js名字取什么随你)
//注册mek倍矿物品(item)
global.mekStackAdditions = [
//材料的名称,颜色,布尔值(是否需要创建对应的粉末物品)
{ material: 'bismuth', name: '铋', color: '#f5dd6d', makeDust: false }
]
//加载MEK Java类
const $Slurry = Java.loadClass('mekanism.api.chemical.slurry.Slurry')
const $SlurryBuilder = Java.loadClass('mekanism.api.chemical.slurry.SlurryBuilder')
const $Gas = Java.loadClass('mekanism.api.chemical.gas.Gas')
const $GasBuilder = Java.loadClass('mekanism.api.chemical.gas.GasBuilder')
const $InfuseType = Java.loadClass('mekanism.api.chemical.infuse.InfuseType')
const $InfuseTypeBuilder = Java.loadClass('mekanism.api.chemical.infuse.InfuseTypeBuilder')
const $Pigment = Java.loadClass('mekanism.api.chemical.pigment.Pigment')
const $PigmentBuilder = Java.loadClass('mekanism.api.chemical.pigment.PigmentBuilder')
const $GasAttributes = Java.loadClass('mekanism.api.chemical.gas.attribute.GasAttributes')
const $FloatingLong = Java.loadClass('mekanism.api.math.FloatingLong')
const $Radiation = $GasAttributes.Radiation
const $Fuel = $GasAttributes.Fuel
//注册mek倍矿物品(item)
StartupEvents.registry('item', event => {
const mekItems = ['clump', 'crystal', 'dirty_dust', 'shard']
function mekStack(name, color) {
mekItems.forEach(type => {
event.create(`mekanism:${type}_${name}`)
.texture('layer0', 'mekanism:item/empty')
.texture('layer1', `mekanism:item/${type}`)
.texture('layer2', `mekanism:item/${type}_overlay`)
.color(1, color)
.tag(`mekanism:${type}s`)
.tag(`mekanism:${type}s/${name}`)
})
}
global.mekStackAdditions.forEach(entry => {
mekStack(entry.material, entry.color)
if (entry.makeDust) {
event.create(`mekanism:dust_${entry.material}`)
.texture('layer0', 'mekanism:item/empty')
.texture('layer1', `mekanism:item/dust`)
.color(1, entry.color)
.tag(`forge:dusts`)
.tag(`forge:dusts/${entry.material}`)
}
})
})
//注册mek浆液(slurry),“纯净”和“污浊”。每个浆液类型都与特定的矿石类型相关联,并具有特定的颜色
StartupEvents.registry('mekanism:slurry', event => {
global.mekStackAdditions.forEach(entry => {
event.createCustom(`mekanism:clean_${entry.material}`, () => new $Slurry($SlurryBuilder.clean().ore(`forge:ores/${entry.material}`).tint(Color.of(entry.color).getRgbJS())))
event.createCustom(`mekanism:dirty_${entry.material}`, () => new $Slurry($SlurryBuilder.dirty().ore(`forge:ores/${entry.material}`).tint(Color.of(entry.color).getRgbJS())))
})
})
//注册mek气体(gas)
StartupEvents.registry('mekanism:gas', event => {
event.createCustom('an_item:qiti_gas', () => new $Gas($GasBuilder.builder().tint(Color.of('#555555').getRgbJS())))
//添加气体燃烧属性
event.createCustom('an_item:ranshao_qiti_gas', () =>
new $Gas($GasBuilder.builder()
.tint(Color.of('#555555').getRgbJS())
.with(new $Fuel(() => 1, () => //1表示燃烧时间1t
$FloatingLong.create(200)) //200代表能量密度80FE/mB
)))
//添加气体放射性属性
event.createCustom('an_item:fangshexing_qiti_gas', () =>
new $Gas($GasBuilder.builder()
.tint(Color.of('#555555').getRgbJS())
.with(new $Radiation(0.01)) //0.01代表10.0mSv/h
))
//添加气体冷却属性
event.createCustom('an_item:lengque_ceshi_qiti_gas', () =>
new $Gas($GasBuilder.builder()
.tint(Color.of('#555555').getRgbJS())
.with(new $CooledCoolant(
null, 2.0, 1.0 //其中null代表没有关联气体,2.0代表热焓值800mFE/mB,1.0代表冷却剂效率100%
)) //(冷却剂效率不能大于1.0,不然会崩游戏)
))
//关于关联的气体,如mek的钠蒸汽和过热纳相互关联
//添加[冷却态]气体冷却属性
event.createCustom('an_item:lengque_lengque_qiti_gas', () =>
new $Gas(
$GasBuilder.builder()
.tint(Color.of('#55AAFF').getRgbJS())
.with(new $CooledCoolant(() =>
event.get('an_item:lengque_retai_qiti_gas').get(), //代表关联的[加热态]气体
10.0, 1.0 //10.0代表热焓值4FE/mB,1.0代表冷却剂效率100%
)) //(设置的两个值要和关联的[加热态]的值一样,不然会崩)
))
//添加[加热态]气体冷却属性
event.createCustom('an_item:lengque_retai_qiti_gas', () =>
new $Gas(
$GasBuilder.builder()
.tint(Color.of('#FF5555').getRgbJS())
.with(new $HeatedCoolant(() =>
event.get('an_item:lengque_lengque_qiti_gas').get(), //代表关联的[冷却态]气体
10.0, 1.0 //10.0代表热焓值4FE/mB,1.0代表冷却剂效率100%
)) //(设置的两个值要和关联的[冷却态]的值一样,不然会崩)
))
//注册mek灌注类型(infuse_type)
StartupEvents.registry('mekanism:infuse_type', event => {
event.createCustom('an_item:guanzhu_infuse', () => new $InfuseType($InfuseTypeBuilder.builder().tint(Color.of('#555555').getRgbJS())))
})
//注册mek颜料类型(pigment)
StartupEvents.registry('mekanism:pigment', event => {
event.createCustom('an_item:yanliao_pigment', () => new $Pigment($PigmentBuilder.builder().tint(Color.of('#555555').getRgbJS())))
})
2.这段是倍矿配方,代码写在server_scripts/enriching_materials.js
ServerEvents.recipes(event => {
global.mekStackAdditions.forEach(data => {
let dust = data.dust ?? `an_item:${data.material}_dust`
//化学溶解
//矿石
event.custom({ "type": "mekanism:dissolution", "gasInput": { "amount": 1, "gas": "mekanism:sulfuric_acid" }, "itemInput": { "ingredient": { "tag": `forge:ores/${data.material}` } }, "output": { "amount": 1000, "chemicalType": "slurry", "slurry": `mekanism:dirty_${data.material}` } }).id(`mekanism:processing/${data.material}/slurry/dirty/from_ore`)
//粗矿
event.custom({ "type": "mekanism:dissolution", "gasInput": { "amount": 1, "gas": "mekanism:sulfuric_acid" }, "itemInput": { "amount": 3, "ingredient": { "tag": `forge:raw_materials/${data.material}` } }, "output": { "amount": 2000, "chemicalType": "slurry", "slurry": `mekanism:dirty_${data.material}` } }).id(`mekanism:processing/${data.material}/slurry/dirty/from_raw_ore`)
//粗块
event.custom({ "type": "mekanism:dissolution", "gasInput": { "amount": 2, "gas": "mekanism:sulfuric_acid" }, "itemInput": { "ingredient": { "tag": `forge:storage_blocks/raw_${data.material}` } }, "output": { "amount": 6000, "chemicalType": "slurry", "slurry": `mekanism:dirty_${data.material}` } }).id(`mekanism:processing/${data.material}/slurry/dirty/from_raw_block`)
//化学清洗
event.custom({ 'type': 'mekanism:washing', 'fluidInput': { 'amount': 5, 'tag': 'minecraft:water' }, 'output': { 'amount': 1, 'slurry': `mekanism:clean_${data.material}` }, 'slurryInput': { 'amount': 1, 'slurry': `mekanism:dirty_${data.material}` } }).id(`mekanism:processing/${data.material}/slurry/clean`)
//化学结晶
event.custom({ 'type': 'mekanism:crystallizing', 'chemicalType': 'slurry', 'input': { 'amount': 200, 'slurry': `mekanism:clean_${data.material}` }, 'output': { 'item': `mekanism:crystal_${data.material}` } }).id(`mekanism:processing/${data.material}/crystal/from_slurry`)
//化学压射
event.custom({ 'type': 'mekanism:injecting', 'chemicalInput': { 'amount': 1, 'gas': 'mekanism:hydrogen_chloride' }, 'itemInput': { 'ingredient': { 'tag': `mekanism:crystals/${data.material}` } }, 'output': { 'item': `mekanism:shard_${data.material}` } }).id(`mekanism:processing/${data.material}/shard/from_crystal`)
event.custom({ "type": "mekanism:injecting", "chemicalInput": { "amount": 1, "gas": "mekanism:hydrogen_chloride" }, "itemInput": { "ingredient": { "tag": `forge:ores/${data.material}` } }, "output": { "count": 4, "item": `mekanism:shard_${data.material}` } }).id(`mekanism:processing/${data.material}/shard/from_ore`)
event.custom({ "type": "mekanism:injecting", "chemicalInput": { "amount": 1, "gas": "mekanism:hydrogen_chloride" }, "itemInput": { "amount": 3, "ingredient": { "tag": `forge:raw_materials/${data.material}` } }, "output": { "count": 8, "item": `mekanism:shard_${data.material}` } }).id(`mekanism:processing/${data.material}/shard/from_raw_ore`)
event.custom({ "type": "mekanism:injecting", "chemicalInput": { "amount": 2, "gas": "mekanism:hydrogen_chloride" }, "itemInput": { "ingredient": { "tag": `forge:storage_blocks/raw_${data.material}` } }, "output": { "count": 24, "item": `mekanism:shard_${data.material}` } }).id(`mekanism:processing/${data.material}/shard/from_raw_block`)
//提纯
event.custom({ 'type': 'mekanism:purifying', 'chemicalInput': { 'amount': 1, 'gas': 'mekanism:oxygen' }, 'itemInput': { 'ingredient': { 'tag': `mekanism:shards/${data.material}` } }, 'output': { 'item': `mekanism:clump_${data.material}` } }).id(`mekanism:processing/${data.material}/clump/from_shard`)
event.custom({ "type": "mekanism:purifying", "chemicalInput": { "amount": 1, "gas": "mekanism:oxygen" }, "itemInput": { "ingredient": { "tag": `forge:ores/${data.material}` } }, "output": { "count": 3, "item": `mekanism:clump_${data.material}` } }).id(`mekanism:processing/${data.material}/clump/from_ore`)
event.custom({ "type": "mekanism:purifying", "chemicalInput": { "amount": 1, "gas": "mekanism:oxygen" }, "itemInput": { "ingredient": { "tag": `forge:raw_materials/${data.material}` } }, "output": { "count": 2, "item": `mekanism:clump_${data.material}` } }).id(`mekanism:processing/${data.material}/clump/from_raw_ore`)
event.custom({ "type": "mekanism:purifying", "chemicalInput": { "amount": 2, "gas": "mekanism:oxygen" }, "itemInput": { "ingredient": { "tag": `forge:storage_blocks/raw_${data.material}` } }, "output": { "count": 18, "item": `mekanism:clump_${data.material}` } }).id(`mekanism:processing/${data.material}/clump/from_raw_block`)
// 粉碎
event.custom({ 'type': 'mekanism:crushing', 'input': { 'ingredient': { 'tag': `mekanism:clumps/${data.material}` } }, 'output': { 'item': `mekanism:dirty_dust_${data.material}` } }).id(`mekanism:processing/${data.material}/dirty_dust/from_clump`)
event.custom({ "type": "mekanism:crushing", "input": { "ingredient": { "tag": `forge:ingots/${data.material}` } }, "output": { "item": dust } }).id(`mekanism:processing/${data.material}/dust/from_ingot`)
//富集
event.custom({ 'type': 'mekanism:enriching', 'input': { 'ingredient': { 'tag': `mekanism:dirty_dusts/${data.material}` } }, 'output': { 'item': `an_item:${data.material}_dust` } }).id(`mekanism:processing/${data.material}/dust/from_dirty_dust`)
event.custom({ "type": "mekanism:enriching", "input": { "ingredient": { "tag": `forge:ores/${data.material}` } }, "output": { "count": 2, "item": `an_item:${data.material}_dust` } }).id(`mekanism:processing/${data.material}/dust/from_ore`)
event.custom({ "type": "mekanism:enriching", "input": { "amount": 3, "ingredient": { "tag": `forge:raw_materials/${data.material}` } }, "output": { "count": 4, "item": `an_item:${data.material}_dust` } }).id(`mekanism:processing/${data.material}/dust/from_raw_ore`)
event.custom({ "type": "mekanism:enriching", "input": { "ingredient": { "tag": `forge:storage_blocks/raw_${data.material}` } }, "output": { "count": 12, "item": `an_item:${data.material}_dust` } }).id(`mekanism:processing/${data.material}/dust/from_raw_block`)
//熔炼
Ingredient.of(`#forge:ingots/${data.material}`).getItemIds().forEach(item => {
event.smelting(item, `#forge:dusts/${data.material}`, 0.35, 200)//.id(`an_item:smelting/dust/${data.material}_ingot`)
event.blasting(item, `#forge:dusts/${data.material}`, 0.5, 100)//.id(`an_item:blasting/dust/${data.material}_ingot`)
})
})
})
3.这段是汉化,代码写在client_scripts/zh_cn_mek_material.js
ClientEvents.lang('zh_cn', event => {
global.mekStackAdditions.forEach(data => {
event.add(`item.mekanism.crystal_${data.material}`, `${data.name}结晶`)
event.add(`item.mekanism.clump_${data.material}`, `${data.name}碎块`)
event.add(`item.mekanism.dirty_dust_${data.material}`, `污浊${data.name}粉`)
event.add(`item.mekanism.shard_${data.material}`, `${data.name}碎片`)
event.add(`item.mekanism.dust_${data.material}`, `${data.name}粉`)
event.add(`slurry.mekanism.clean_${data.material}`, `纯净${data.name}浆液`)
event.add(`slurry.mekanism.dirty_${data.material}`, `污浊${data.name}浆液`)
})
event.add('gas.an_item.qiti_gas', "测试气体")
event.add('gas.an_item.ranshao_qiti_gas', "燃烧气体")
event.add('gas.an_item.fangshexing_qiti_gas', "放射性气体")
event.add('gas.an_item.lengque_ceshi_qiti_gas', "[无关联]冷却性气体")
event.add('gas.an_item.lengque_lengque_qiti_gas', "[冷却态]冷却属性气体")
event.add('gas.an_item.lengque_retai_qiti_gas', "[加热态]冷却属性气体")
event.add('infuse_type.an_item.guanzhu_infuse', "测试灌注类型")
event.add('pigment.an_item.yanliao_pigment', "测试颜料类型")
})