本篇教程由作者设定未经允许禁止转载。
适用于1.20.1版本,1.18-1.19和1.16分别是另外的方法具体查看官方教程https://newdocs.masterfulmc.com/
使用主要模组为Masterful Machinery,同时该模组提供了kubejs支持以及几个模组的联动以实现模组特有的加工方式。如果不想使用kubejs还可以通过数据包编写,但比较麻烦这里不做介绍
这里以机械动力为例,创建一个多方块“虚空飞轮”产生应力,效果见视频https://www.bilibili.com/video/BV1FQbDeVExn/
一.创建控制器与端口(这一步也可以用kubejs来写,有基础的自行查看教程)
首先,需要创建一个控制器,控制器将会判定多方块的结构。找到配置文件里mm文件夹,打开放控制器的controllers文件夹
游戏版本名\config\mm\controllers
新创建一个txt文本,后缀改成json,文件命名建议直接是id方便查看,里面输入如下
{
"type": "mm:machine",
"id": "my_controller",
"name": "My Controller"
}
type是控制器的类型,目前只有这一种,不用改
id这里是你注册的控制器的物品id,可以改成你想的id
name是游戏中默认显示的名字,你可以用语言文件来翻译,直接写中文命名也行
注意在后面需要引用这个id时前面加上'mm:',如mm:my_controller
返回到mm文件夹打开ports文件夹,我们来创建端口,还是新建json文件
{
"id": "my_port",
"controllerIds": "mm:controller_a",
"name": "My Item Port",
"type": "mm:item",
"config": {
"rows": 3,
"columns": 3
}
}
端口是一个用来暂时存储物品并进行后续转换的方块,是多方块机器的接口。这是一个物品端口
id是端口的物品id
"controllerIds"这里写你想连接的控制器的id,"name"是游戏名称,"type"后面的指这个端口只能进行物品的交互
"config": { "rows": 3, "columns": 3 }指这个端口内可以存储3行3列的物品
下面是一些其他端口,按需创建你需要的端口
流体端口
{
"id": "my_port",
"controllerIds": "mm:controller_a",
"name": "My Item Port",
"type": "mm:fluid",
"config": {
"rows": 3,
"columns": 3,
"slotCapacity": 1000
}
}
"config": {"rows": 3,"columns": 3, "slotCapacity": 1000 }这里指有3*3的格子每格子存1000mb液体液体为什么能用格子存
能量端口(EF)
{
"id": "my_port",
"controllerIds": "mm:controller_a",
"name": "My Port",
"type": "mm:energy",
"config": {
"capacity": 1000000,
"maxReceive": 1000,
"maxExtract": 1000
}
}
"config": { "capacity": 1000000, "maxReceive": 1000, "maxExtract": 1000 }最大存储量1000000,每刻从端口接收和提取的最大能量为1000
通用机械联动端口
气体端口
{
"id": "my_gas_port",
"controllerIds": "mm:controller_a",
"name": "My Gas Port",
"type": "mm:mekanism/gas",
"config": {
"capacity": 10000000
}
}
浆液端口
{
"id": "my_slurry_port",
"controllerIds": "mm:controller_a",
"name": "My Slurry Port",
"type": "mm:mekanism/slurry",
"config": {
"capacity": 10000000
}
}
颜料端口
{
"id": "my_pigment_port",
"controllerIds": "mm:controller_a",
"name": "My Pigment Port",
"type": "mm:mekanism/pigment",
"config": {
"capacity": 10000000
}
}
输液端口
{
"id": "my_infuse_port",
"controllerIds": "mm:controller_a",
"name": "My Infuse Port",
"type": "mm:mekanism/infuse",
"config": {
"capacity": 10000000
}
}
机械动力联动端口
{
"id": "my_kinetic_port",
"controllerIds": "mm:controller_a",
"name": "My Create Kinetic",
"type": "mm:create/kinetic",
"config": {
"stress": 4
}
}
"config": { "stress": 4 }端口方块对于应力的影响,数值越大转换/消耗的应力就越大
气动工艺联动
{
"id": "my_air_port",
"controllerIds": "mm:controller_a",
"name": "My Air Port",
"type": "mm:pneumaticcraft/air",
"config": {
"danger": 11.0,
"critical": 12.0,
"volume": 20000
}
}
"config": {"danger": 11.0, "critical": 12.0, "volume": 20000}
"volume"是储存的空气容积,"danger"高压红区,"critical"压力阈值
这时你打开游戏应该能在mm的标签页下找到所创建的控制器和端口,这里我创建了一个控制器、一个机械动力传动端口、一个液体端口,每个端口有输入输出两个方块
二.搭建多方块结构
准备工作完成,开始搭建多方块结构,后面两步在只有【MM】情况下只能通过数据包实现,推荐使用kubejs模组更加方便。以下操作都可以打开游戏进行
安装kubejs后,游戏文件夹会多出一个kubejs文件夹,打开下面位置
游戏版本\kubejs\server_scripts
新建txt文本,后缀改成js,这里推荐使用VScode打开,没有的话记事本先打开写完后再改后缀也行。游戏中命令输入/reload来重新加载
MMEvents.createStructures(event => {
event.create("mm:my_structure")//你的结构id
.controllerId("mm:controller_a")//使用的控制器id
.name("My Machine")//结构显示名称
.layout(a => {
a.layer([
"BCB"//从上往下第一层方块
]).layer([
"ABA"//第二层方块
]).key("A", {
block: "minecraft:glass"//方块id
}).key("B", {
block: "minecraft:white_wool"
})
})
})
利用字母,你可以自由搭建你的结构,最后方块注册时记得把字母对应的方块id填入。
代替方块的字母:可以使用除了大写C以外的所有大小写字母和数字,每一个代表一种方块,大写C则代表控制器方块,所有多方块结构中必须含有C(控制器),C最后不需要方块注册,
在官方给出的案例中,多方块结构长这样
这是第二个例子,我搭建的多方块
MMEvents.createStructures(event => {
event.create("mm:cloud")
.controllerId("mm:cloud")
.name("静电传动")
.layout(a => {
a.layer([
" AAA ",
" AAA ",
" AAA ",
" AAA "
]).layer([
"A A",
"A A",
"A A",
"A A"
]).layer([
"A B A",
"A D A",
"A C A",
"A E A"
]).layer([
"A A",
"A A",
"A A",
"A A"
]).layer([
" AAA ",
" AAA ",
" AAA ",
" AAA "
]).key("A", {
block: "cloudstorage:static_cloud"
}).key("B", {
block: "create:flywheel"
}).key("E", {
block: "mm:cloud_port_input"
}).key("D", {
block: "mm:cloud_port_output"
})
})
})
这是我搭建的多方块长这样,用JEI可以按U查看多方块,JEI里像机械动力里飞轮这种模型可能不会渲染但不影响使用,同时显示画面时会以控制器为中心,如果位置太偏结构会显示不全。如果你要用多方块结构进行输入输出,结构内要包含至少两个相应的端口方块
三.多方块结构配方
文件位置还是在server_scripts,新建或者在上面结构文件接着写都行
MMEvents.createProcesses(event => {
event.create("mm:my_process_recipe") //配方id
.structureId("mm:my_structure") //配方所使用的结构id
.ticks(1000)
.input({ //输入
type: "mm:input/consume",
ingredient: { //不同类型配方下面参数不同
type: "mm:item", //类型是物品
item: "minecraft:glass", //物品id
count: 10 //数量
}
})
.input({ //输入
type: "mm:input/consume",
ingredient: {
type: "mm:fluid", //类型是流体
fluid: "minecraft:water", //液体id
amount: 1000 //1000mb
}
})
.output({ //输出
type: "mm:output/simple",
chance: 0.5, //0.5概率输出可选默认百分百概率
ingredient: {
type: "mm:energy", //类型是能量
amount: 1000 //输出1000FE
}
})
})
下面是不同类型的配方的参数形式
物品
ingredient: {
type: "mm:item",
tag: "forge:ingots",
count: 5
}
流体
ingredient: {
type: "mm:fluid",
fluid: "minecraft:water",
amount: 1000
}
能量
ingredient: {
type: "mm:energy",
amount: 1000
}
通用机械
气体
ingredient: {
type: "mm:mekanism/gas",
gas: "mekanism:hydrogen",
amount: 10
}
浆液
ingredient: {
type: "mm:mekanism/slurry",
slurry: "mekanism:clean_tin",
amount: 10
}
颜料
ingredient: {
type: "mm:mekanism/pigment",
pigment: "mekanism:blue",
amount: 20
}
输液
ingredient: {
type: "mm:mekanism/infuse",
infuse: "mekanism:bio",
amount: 20
}
机械动力转速
ingredient: {
type: "mm:create/kinetic",
speed: 16
}
还是我上面那个多方块结构的例子
MMEvents.createProcesses(event => {
event.create("mm:cloud")
.structureId("mm:cloud")
.ticks(1000)
.input({
type: "mm:input/consume",
ingredient: {
type: "mm:create/kinetic",
speed: 0
}
})
.output({
type: "mm:output/simple",
ingredient: {
type: "mm:create/kinetic",
speed: 256
}
})
})
输入输出全是机械动力的RPM转速,输入0转速,输出256,代表无需消耗资源只要搭建好即可输出应力
同样,也可以稍微改一下
MMEvents.createProcesses(event => {
event.create("mm:cloud")
.structureId("mm:cloud")
.ticks(1000)
.input({
type: "mm:input/consume",
ingredient: {
type: "mm:fluid",
fluid: "minecraft:water",
amount: 1000
}
})
.output({
type: "mm:output/simple",
ingredient: {
type: "mm:create/kinetic",
speed: 256
}
})
})
输入1000mb水才能产生应力,注意构件多方块结构相应的输入接口也要从机动端口改成液体端口
#疑似有小bug,有时候改了结构后/reload重载会把多方块结构判定删掉,需要重启游戏一下
现在你可以自由搭建自己结构魔改配方了!
四.自定义纹理
如果你觉得默认的控制器和接口材质不符合你的整合包风格,可以自定义。找到这个位置
游戏版本/config/mm/pack/assets/mm/models/block/(json文件)
这里放着刚刚注册的控制器和端口方块文件,根据ID打开你要修改的方块,找到这里
"base": {
"parent": "minecraft:block/cube_all",
"render_type": "minecraft:solid",
"textures": {
"all": "mm:block/base_block"
}
}
"all": "mm:block/base_block"可以修改纹理,比如改成"all": ""minecraft:block/sponge""就是以原版海绵为底纹理。F3+T重新加载资源包方块纹理就更新了
模组方块引用
比如我要用机械动力的铜机壳做纹理,先打开mod文件找到对应模组,用压缩文件管理器打开找到你要用到的方块纹理
assets\create\textures\block\copper_casing.png
从纹理文件夹(textures)开始写,注意斜杠方向,不用加图片格式后缀
"all": "create:block/copper_casing"
我把控制器和端口全改一下,F3+T重载资源包,修改纹理只是修改底图,相应的方块特征(如控制器的像显示屏一样的图案)还是在的
如果打开纹理文件有另一种情况,比如机械动力的铜砖瓦,纹理在纹理文件夹-方块纹理-铜-铜砖瓦里,套了好几层文件夹
assets\create\textures\block\copper\copper_shingles.png
格式要这样写,把所有文件夹都要带进去
"all": "create:block/copper/copper_shingles"
到此一个完整的多方块结构就完成了!