Back to mods
Multiblock Lib 1174 project artwork

CurseForge · Minecraft mod

Multiblock Lib 1174

A custom multiblock mod

Choose a version Pick your version below, then grab the matching file.

Quick answer

Which Multiblock Lib 1174 release should I use?

Updated 5 days ago
Latest stable file multiblocklibes-0.0.12.jar
Game version 26.2
Loader NeoForge

Multiblock Lib 1174 multiblocklibes-0.0.12.jar targets 26.2 with NeoForge. The project page does not say whether this file belongs on the client, dedicated server, or both. No extra mods listed for this file.

Where it goes

Is Multiblock Lib 1174 required on the client, server, or both?

The project page does not say whether this file belongs on the client, dedicated server, or both.

Client Source doesn’t say
Dedicated server Source doesn’t say
Loader for this release NeoForge
Required install it here Optional supported, not mandatory Not supported do not install here Source doesn’t say do not assume

The source does not explicitly classify this release as client-only or server-only.

What else does Multiblock Lib 1174 multiblocklibes-0.0.12.jar need?

multiblocklibes-0.0.12.jar. Change the file and its required mods may change too.

No extra mods listed for this file

This file does not list any required mods. Do not add a library just because a different file uses it.

This file does not list any required or optional mods.

Before you install it

Add Multiblock Lib 1174 without breaking your instance.

Built for Multiblock Lib 1174 multiblocklibes-0.0.12.jar. Pick another file and the loader, install side or required mods may change.

  1. 01

    Stick to this file

    Use multiblocklibes-0.0.12.jar. It targets 26.2 with NeoForge; another release may have different loader, side or dependency requirements.

  2. 02

    Bring the mods it needs

    This file does not list any required mods. Do not add a library just because a different file uses it.

  3. 03

    Put it on the correct side

    The project page does not say whether this file belongs on the client, dedicated server, or both.

  4. 04

    Pick the file you checked

    Use the “Get this file” button beside multiblocklibes-0.0.12.jar. It opens that exact file at the source.

About this project

What does Multiblock Lib 1174 add?

1174's MultiblockLib

This is a mod which custom multiblock structure
How to use?

00 Config project

Add this mod's cursemaven to your build.gradle

01 Register Controller And Port

public class Register {
    public static final DeferredRegister.Blocks BLOCKS = DeferredRegister.createBlocks(MultiblockLib.MOD_ID);
    public static final DeferredRegister.Items ITEMS = DeferredRegister.createItems(MultiblockLib.MOD_ID);

    // 1.Port
    public static final DeferredBlock<Block> TEST_ITEM_PORT_IN_B = BLOCKS.register(
            "test_item_port_in",
            //                         ↓You can use ItemPortBlock, FluidPortBlock, FEPortBlock to register different port types
            registryName -> new ItemPortBlock(BlockBehaviour.Properties.of()
                    .setId(ResourceKey.create(Registries.BLOCK, registryName)),
                    //  ↓The IO Mode of the port, INPUT, OUTPUT or BOTH
                    4, IOMode.INPUT
                 // ↑The size of the port
            ));

    public static final DeferredItem<Item> TEST_ITEM_PORT_IN =
            ITEMS.register("test_item_port_in",
                    registryName -> new PortBlockItem(TEST_ITEM_PORT_IN_B.get(), new Item.Properties()
                            .setId(ResourceKey.create(Registries.ITEM, registryName)),
                            IOMode.INPUT
                    ));

    // If your port isn't directional, pls register like this
    public static final DeferredBlock<Block> TEST_WASTE_B = BLOCKS.register(
            "test_waste",
            registryName -> new ItemPortBlock(BlockBehaviour.Properties.of()
                    .setId(ResourceKey.create(Registries.BLOCK, registryName)),
                    1, IOMode.OUTPUT
            ) {
                @Override
                public boolean isDirectional() {
                    return false;
                }
            });

    // 2.Detector, which can make player know where need to place something
    public static final DeferredItem<Item> TEST_DETECTOR =
            ITEMS.register("test_detector",
                    registryName -> new MultiblockDetector(new Item.Properties()
                            .setId(ResourceKey.create(Registries.ITEM, registryName))
                    ));

    // 3.Builder, which can build the structure automatically
    public static final DeferredItem<Item> TEST_BUILDER =
            ITEMS.register("test_builder",
                    registryName -> new MultiblockBuilder(new Item.Properties()
                            .setId(ResourceKey.create(Registries.ITEM, registryName))
                    ));
}

The hardest part is the Controller
First, code Controller's BlockEntity

public class TestControllerBlockEntity extends ControllerBlockEntity {
    public TestControllerBlockEntity(BlockPos worldPosition, BlockState blockState) {
        super(Register.TEST_CONTROLLER_BE.get(), worldPosition, blockState);
        //    ↑This is its blockentity type, we'll code them later
    }

    // Both of these values can be changed dynamically
    // Number of recipes the machine can handle at the same time
    @Override
    public int getParallels() {
        return 1;
    }

    // Speed. The bigger, the faster
    @Override
    public int getParseSpeed() {
        return 1;
    }
}

Then, code its Block

public class TestControllerBlock extends ControllerBlock {
    public TestControllerBlock(Properties properties) {
        super(properties);
    }

    @Override
    public @Nullable <T extends BlockEntity> BlockEntityTicker<T> getTicker(Level level, BlockState blockState, BlockEntityType<T> type) {
        return createTickerHelper(type, Register.TEST_CONTROLLER_BE.get(), TestControllerBlockEntity::tick);
        //                              ↑This is its block register, we'll code them later
    }

    @Override
    protected MapCodec<? extends BaseEntityBlock> codec() {
        return simpleCodec(TestControllerBlock::new);
    }

    @Override
    public @Nullable BlockEntity newBlockEntity(BlockPos blockPos, BlockState blockState) {
        return new TestControllerBlockEntity(blockPos, blockState);
    }
}

Last, go back into your register class

public static final DeferredRegister<BlockEntityType<?>> BLOCK_ENTITY_TYPES =
        DeferredRegister.create(Registries.BLOCK_ENTITY_TYPE, MultiblockLib.MOD_ID);

public static final DeferredBlock<Block> TEST_CONTROLLER_B = BLOCKS.register(
        "test_controller",
        registryName -> new TestControllerBlock(BlockBehaviour.Properties.of()
                .setId(ResourceKey.create(Registries.BLOCK, registryName))
        ));

public static final DeferredItem<Item> TEST_CONTROLLER =
        ITEMS.register("test_controller",
                registryName -> new BlockItem(TEST_CONTROLLER_B.get(), new Item.Properties()
                        .setId(ResourceKey.create(Registries.ITEM, registryName))
                ));

public static final Supplier<BlockEntityType<TestControllerBlockEntity>> TEST_CONTROLLER_BE = BLOCK_ENTITY_TYPES.register(
        "test_controller",
        () -> new BlockEntityType<>(
                TestControllerBlockEntity::new,
                false,
                TEST_CONTROLLER_B.get()
        )
);

02 Structure

Build your structure in you world
Use this command

/multiblocklibes structure -104 56 -61 -109 59 -64 -99 56 -61 TestExport

First BlockPos is the controller pos
Second & third is block of two corners The string is the file's name Find your file at /GameFile/multiblockes/xxx.json
It's a recipe json file

{
    "type": "multiblocklibes:structure",
    // Structure's id
    "structure_id": "blast",
    // Controller's block id
    "controller_id": "multiblocklibes:test_controller",
    "pattern": [
        // Block can exist in somewhere, it's a json array
        [1, 0, 0, ["minecraft:oxidized_cut_copper", "multiblocklibes:test_item_port_in", "multiblocklibes:test_item_port_ou", "multiblocklibes:test_fluid_port_in", "multiblocklibes:test_fluid_port_ou", "multiblocklibes:test_fe_port"]],
        [-1, 0, 0, ["minecraft:oxidized_cut_copper", "multiblocklibes:test_item_port_in", "multiblocklibes:test_item_port_ou", "multiblocklibes:test_fluid_port_in", "multiblocklibes:test_fluid_port_ou", "multiblocklibes:test_fe_port"]],
        [1, 0, 1, ["minecraft:oxidized_cut_copper", "multiblocklibes:test_item_port_in", "multiblocklibes:test_item_port_ou", "multiblocklibes:test_fluid_port_in", "multiblocklibes:test_fluid_port_ou", "multiblocklibes:test_fe_port"]],
        [-1, 0, 1, ["minecraft:oxidized_cut_copper", "multiblocklibes:test_item_port_in", "multiblocklibes:test_item_port_ou", "multiblocklibes:test_fluid_port_in", "multiblocklibes:test_fluid_port_ou", "multiblocklibes:test_fe_port"]],
        [1, 0, 2, ["minecraft:oxidized_cut_copper", "multiblocklibes:test_item_port_in", "multiblocklibes:test_item_port_ou", "multiblocklibes:test_fluid_port_in", "multiblocklibes:test_fluid_port_ou", "multiblocklibes:test_fe_port"]],
        [0, 0, 2, ["minecraft:oxidized_cut_copper", "multiblocklibes:test_item_port_in", "multiblocklibes:test_item_port_ou", "multiblocklibes:test_fluid_port_in", "multiblocklibes:test_fluid_port_ou", "multiblocklibes:test_fe_port"]],
        [-1, 0, 2, ["minecraft:oxidized_cut_copper", "multiblocklibes:test_item_port_in", "multiblocklibes:test_item_port_ou", "multiblocklibes:test_fluid_port_in", "multiblocklibes:test_fluid_port_ou", "multiblocklibes:test_fe_port"]],
        [0, 0, 1, ["minecraft:oxidized_cut_copper", "multiblocklibes:test_item_port_in", "multiblocklibes:test_item_port_ou", "multiblocklibes:test_fluid_port_in", "multiblocklibes:test_fluid_port_ou", "multiblocklibes:test_fe_port"]],

        [1, 3, 0, ["minecraft:oxidized_cut_copper", "multiblocklibes:test_item_port_in", "multiblocklibes:test_item_port_ou", "multiblocklibes:test_fluid_port_in", "multiblocklibes:test_fluid_port_ou", "multiblocklibes:test_fe_port"]],
        [0, 3, 0, ["minecraft:oxidized_cut_copper", "multiblocklibes:test_item_port_in", "multiblocklibes:test_item_port_ou", "multiblocklibes:test_fluid_port_in", "multiblocklibes:test_fluid_port_ou", "multiblocklibes:test_fe_port"]],
        [-1, 3, 0, ["minecraft:oxidized_cut_copper", "multiblocklibes:test_item_port_in", "multiblocklibes:test_item_port_ou", "multiblocklibes:test_fluid_port_in", "multiblocklibes:test_fluid_port_ou", "multiblocklibes:test_fe_port"]],
        [1, 3, 1, ["minecraft:oxidized_cut_copper", "multiblocklibes:test_item_port_in", "multiblocklibes:test_item_port_ou", "multiblocklibes:test_fluid_port_in", "multiblocklibes:test_fluid_port_ou", "multiblocklibes:test_fe_port"]],
        [-1, 3, 1, ["minecraft:oxidized_cut_copper", "multiblocklibes:test_item_port_in", "multiblocklibes:test_item_port_ou", "multiblocklibes:test_fluid_port_in", "multiblocklibes:test_fluid_port_ou", "multiblocklibes:test_fe_port"]],
        [1, 3, 2, ["minecraft:oxidized_cut_copper", "multiblocklibes:test_item_port_in", "multiblocklibes:test_item_port_ou", "multiblocklibes:test_fluid_port_in", "multiblocklibes:test_fluid_port_ou", "multiblocklibes:test_fe_port"]],
        [0, 3, 2, ["minecraft:oxidized_cut_copper", "multiblocklibes:test_item_port_in", "multiblocklibes:test_item_port_ou", "multiblocklibes:test_fluid_port_in", "multiblocklibes:test_fluid_port_ou", "multiblocklibes:test_fe_port"]],
        [-1, 3, 2, ["minecraft:oxidized_cut_copper", "multiblocklibes:test_item_port_in", "multiblocklibes:test_item_port_ou", "multiblocklibes:test_fluid_port_in", "multiblocklibes:test_fluid_port_ou", "multiblocklibes:test_fe_port"]],

        [0, 1, 0, ["minecraft:diamond_block", "minecraft:emerald_block"]],
        [1, 1, 0, ["minecraft:diamond_block", "minecraft:emerald_block"]],
        [-1, 1, 0, ["minecraft:diamond_block", "minecraft:emerald_block"]],
        [1, 1, 1, ["minecraft:diamond_block", "minecraft:emerald_block"]],
        [-1, 1, 1, ["minecraft:diamond_block", "minecraft:emerald_block"]],
        [1, 1, 2, ["minecraft:diamond_block", "minecraft:emerald_block"]],
        [0, 1, 2, ["minecraft:diamond_block", "minecraft:emerald_block"]],
        [-1, 1, 2, ["minecraft:diamond_block", "minecraft:emerald_block"]],

        [0, 2, 0, ["minecraft:diamond_block", "minecraft:emerald_block"]],
        [1, 2, 0, ["minecraft:diamond_block", "minecraft:emerald_block"]],
        [-1, 2, 0, ["minecraft:diamond_block", "minecraft:emerald_block"]],
        [1, 2, 1, ["minecraft:diamond_block", "minecraft:emerald_block"]],
        [-1, 2, 1, ["minecraft:diamond_block", "minecraft:emerald_block"]],
        [1, 2, 2, ["minecraft:diamond_block", "minecraft:emerald_block"]],
        [0, 2, 2, ["minecraft:diamond_block", "minecraft:emerald_block"]],
        [-1, 2, 2, ["minecraft:diamond_block", "minecraft:emerald_block"]],

        [0, 3, 1, ["multiblocklibes:test_waste"]]
    ],
    "requirements": [
        // The Structure Requirements
    ]
}

You can also add sth in "The Structure Requirements"

{
    // How many blocks in Structure
    "id": "right_count_blocks_structure_requirement",
    "property": [
        ["multiblocklibes:test_fe_port"],
        1
    ]
}
{
    "id": "max_blocks_structure_requirement",
    "property": [
        ["multiblocklibes:test_fe_port"],
        1
    ]
}
{
    "id": "min_blocks_structure_requirement",
    "property": [
        ["multiblocklibes:test_fe_port"],
        1
    ]
}
// Add Description to the Structure
// Translatable
{
    "id": "desc_structure_requirement",
    "property": [
        "tran",
        "key.modid.sth"
    ]
},
// Literal
{
    "id": "desc_structure_requirement",
    "property": [
        "lite",
        "Also Trys War Thunder !!"
    ]
}
// Some block need be same
{
    "id": "same_block_structure_requirement",
    "property": [
        [0, 1, 0],
        [1, 1, 0],
        [-1, 1, 0],
        [1, 1, 1],
        [-1, 1, 1],
        [1, 1, 2],
        [0, 1, 2],
        [-1, 1, 2],

        [0, 2, 0],
        [1, 2, 0],
        [-1, 2, 0],
        [1, 2, 1],
        [-1, 2, 1],
        [1, 2, 2],
        [0, 2, 2],
        [-1, 2, 2]
    ]
}

03 Recipe

This is an example recipe

{
    "type": "multiblocklibes:recipe",
    // Recipe Time
    "time": 100,
    // Recipe ID
    "recipe_id": "blast_revipe_test",
    // Binding Structure
    "structure_id": "blast",
    "requirements": [
        // Recipe requirement
    ]
}

Recipe requirements:

// Item Requirement
{
    "id": "item_recipe_requirement",
    "property": [
        "input",
        "minecraft:iron_ingot",
        3
    ]
},
{
    "id": "item_recipe_requirement",
    "property": [
        "output",
        "minecraft:netherite_ingot",
        1,
        // If you want to make the item can only be output through ports of a specified type
        // Also can be use in fluid and FE requirement
        ["multiblocklibes:test_item_port_ou"]
    ]
}
{
    "id": "fluid_recipe_requirement",
    "property": [
        "output",
        "mod_id:some_fluid",
        2
    ]
}
{
    "id": "fe_recipe_requirement",
    "property": [
        "input",
        5000
    ]
}
{
    "id": "block_recipe_requirement",
    "property": [
        // It won't destroy block when input
        "input",
        ["modid:blovkkkkk"],
        0,3,0
    ]
}
{
    "id": "command_recipe_requirement",
    "property": [
        // When execute, input or output!
        "input",
        "summon modid:sth_mob",
        0,3,0
    ]
}
{
    "id": "desc_recipe_requirement",
    "property": [
        // When execute, input or output!
        "input",
        "tran",
        "key.modid.eeeeeee"
    ]
}
{
    // How many blocks in Structure
    "id": "right_count_blocks_structure_requirement",
    "property": [
        ["modid:sth_block"],
        10
    ]
}
{
    "id": "min_count_blocks_structure_requirement",
    "property": [
        ["modid:sth_block"],
        10
    ]
}
{
    "id": "max_count_blocks_structure_requirement",
    "property": [
        ["modid:sth_block"],
        10
    ]
}

Project description from CurseForge.

Pick your setup

Multiblock Lib 1174 by Minecraft version and loader

Choose the version and loader you play, then open the matching release.

2 available setups

Check the dependencies, then try the file in a copied instance before changing a world you care about.

Recent files

Multiblock Lib 1174 versions and loaders

14 of 14 releases match

Looking for an older file? The official CurseForge project page is in Resources.