Assembler

Assembler

alaindustrial:assembler
MachinesMVImplementedtier-mvprocessingautomationassemblerblueprintcrafting

Summary

The Assembler is the mod's first MV machine and the end of hand-crafting 64 stacks at a time. It remembers crafting-table recipes — stored on an Assembly Blueprint and stamps them out continuously for as long as materials and charge hold out. No redstone needed; the machine runs on its own.

It draws materials neither from its own inventory nor from pipes, but from its own store built out of Storage Modules. Finished items go into a separate output area so product never mixes with feedstock.

Unlike the vanilla Crafter, which re-solves the grid on every redstone pulse and remembers nothing, the Assembler holds a queue of three blueprints and switches between them by itself.

Energy

FieldValue
Roleconsumer
Buffer (EU/FE)12000
Max input (EU/FE/tick)128 (MV)
Max output (EU/FE/tick)n/a
EU/FE/tick12

It runs off existing generators through a Gold Cable (MV transport, 48 EU/FE/t) — no dedicated MV generator or transformer is required to get it going. A copper LV cable (12 EU/FE/t) is just barely enough: the machine needs exactly 12 EU/FE/t.

Energy is spent only on a working tick. Idling for any reason — no blueprint, no ingredients, no room in the output area — costs no EU/FE at all.

Processing

FieldValue
What it can assembleany crafting-table recipe, shaped or shapeless
Duration (ticks)40
Cost per operation (EU/FE)480
Auto-ejectno

The Assembler has no recipe type of its own. It solves ordinary crafting-table recipes through the stock the ordinary crafting-table recipes, which means it automatically supports vanilla recipes, this mod's own recipes (they are declared as plain minecraft:crafting_shaped), recipes from any third-party mod, and datapacks. Tags come for free: #minecraft:planks in a recipe means "any planks", exactly as at a crafting table.

The mod's own machine recipes (macerating, smelting, extracting) are not run by the Assembler — those are separate recipe types and separate machines.

Picking a blueprint from the queue

Blueprints are polled round-robin, and the cursor position persists between cycles. A blueprint is skipped if any of the following holds:

the store is missing an ingredient; there is no room for the result in the output area; the blueprint's recipe no longer exists (e.g. after a datapack change).

If no blueprint is ready, the machine sleeps and wakes when the store or the charge changes.

Round-robin was chosen deliberately over strict top-down priority: under strict priority the first blueprint with an endless supply would never hand the queue over to the others.

Order of a single operation

The order is strict; deviating breaks either the result or the return of remainders:

  1. Build the input from the blueprint grid and check every ingredient against the store.
  2. Check that the result fits the output area and the remainders fit the store. If not, do not

start the operation at all — this is what protects against item loss.

  1. Spend EU/FE and advance progress.
  2. On completion: take the recipe result, then the remainders, and only then consume the ingredients.

Steps 1–2 run on copies of the store and the output area: an operation is either worked out in full or not begun, and what is written back to the world is exactly the arrays the fitting check ran on. The check and the act are the same code, so "it will fit" and "it was placed" cannot drift apart.

The planning happens twice per operation — once to decide whether to start, once at the finish (the store may have changed over forty ticks) — and not on the forty ticks in between. If the plan no longer holds at the finish (the store ran dry, the recipe vanished), the machine parks on the finish line: progress and the EU/FE already spent are kept, and it completes the moment the plan holds again.

Ingredient substitution

By default the Assembler takes exactly the items recorded on the blueprint, matching by item and ignoring components (the same comparison the stock Ingredient makes). A worn tool therefore satisfies a blueprint written with a fresh one.

The substitution toggle — the square arrow button right of "Write" — flips this for whichever blueprint the window is showing, that is, the one ringed in the queue. The setting lives on the blueprint item itself: move the blueprint to another Assembler and it substitutes there too.

With substitution on, the order is:

  1. The item the player recorded comes first. As long as the store holds it, that is what is

taken. Refined Storage does not do this, and it is a standing player complaint.

  1. If it is out of stock, candidates come from the Ingredient of that particular recipe slot,

in the recipe's own order. Never "from the tag in general": a recipe written as #minecraft:planks (sticks, crafting table, bowl) has twelve candidates, while oak_stairs, whose ingredient is literally minecraft:oak_planks, has none at all and never substitutes. The "any planks in the blueprint, oak and birch in the store, which stairs do I get" situation cannot arise: vanilla family recipes are per-species.

  1. A stand-in is accepted only if re-assembling gives the same result — the recipe still matches

and the assembled stack equals what the blueprint promises in its tooltip, components and count included. If it does not, the operation never starts: no EU/FE spent, nothing taken from the store.

The positions come from Recipe.placementInfoslotsToIngredientIndex is a list parallel to the recipe's placement slots whose value indexes ingredients (or −1 for a cell the recipe leaves empty). For a ShapedRecipe those slots are the pattern cells, so the index is mapped onto the 3×3 grid through the same trim — and, for a mirrored match, the same reflection — as the remainder return. Anything that is not a ShapedRecipe (shapeless above all) has no positions by definition; there every ingredient of the recipe is offered for every filled cell, and step 3 is what keeps that honest.

Why it is off by default. The stock Ingredient compares items and ignores components, so with substitution on an enchanted book can be taken where a plain one was recorded, or a worn tool where a fresh one was. The button's tooltip says so, and a blueprint with substitution on carries an extra line of its own.

Materials from other mods (copper, tin, silver) work exactly as far as recipe ingredients are written with common c: tags — that is separate work, not a property of the machine.

Remaining items

Recipes with containers (the bucket in a cake, a bottle) hand the item back. A remainder goes back into the very store slot its ingredient came from; if that slot cannot take it, into any free store slot; if the store is full, into the output area; and if that is full too, the operation never started (step 2).

Returning it home is not cosmetic: it is what makes the Forge Hammer stay put and simply lose a point of durability instead of creeping across the store one craft at a time. It is also the reason the CraftingInput trimming has to be undone — the remainder list arrives in trimmed grid coordinates, and without mapping them back the "home slot" would be computed wrong.

Stack-dependent remainders (this mod's hammer, which loses a point of durability instead of disappearing) work automatically, because remainders are taken through the recipe rather than straight off the item.

Inventory

SlotAcceptsCount
BlueprintsAssembly Blueprint with a recorded recipe3
Output areaoutput only (the machine fills it, you empty it)6
Blank slota blank assembly blueprint — what "Write" stamps onto1
Upgradesupgrade modules4 (the first one is live)
Storeany items27, plus 27 per module, capped at 108

The recipe grid is not an inventory: it is nine ghost cells whose items are neither consumed nor stored — they only show what will be written to the blueprint.

A 6-slot output area is a deliberate choice: a single output slot is a well-known cause of machines jamming once the result fills the one cell available.

Outside automation: an item pipe fills the store and empties the output area. Feeding ingredients straight into the machine by pipe is neither needed nor supported.

Interface

Machine window (right-click the Assembler) has two tabs: "Work" and "Record". One block, one window — only what is shown changes.

The window used to do two unrelated jobs side by side: the 3×3 grid a recipe is authored in sat next to the machine's live production state, and such a window does not tell you what had been recorded, what was being made right now, or which grid was which. Recording and producing are different jobs; each now has a tab, and they share no screen space at all.

Switching tabs is a view switch, not a mode switch. The machine keeps crafting while you are on the recording tab: the tab touches neither the queue, nor the progress, nor the energy. There is deliberately no mode that halts production while you record — it would turn "I want to record one more recipe" into stopping the line.

The "Work" tab

What the machine is doing right now:

three blueprint slots — the queue, the active one ringed; the active blueprint's 3×3 layout and its product — view only (see below); the 6-slot output area; an energy bar and a progress bar; a status line: working / no blueprint / missing materials / output full / no energy / recipe not found. You must be able to tell the reasons apart — otherwise "the machine is idle" is indistinguishable from "the machine is broken".

The "Record" tab

a 3×3 grid of ghost cells; a result preview — what that layout makes; a slot for a blank blueprint; a "Write" button — turns the blank into a recorded blueprint; the square arrow button to the left of "Write" — the substitution toggle for the blueprint on show: grey arrows for off, green for on.

Grid cells are filled by clicking: hover a cell and click while holding an item on the cursor and one copy of it lands in the cell; clicking with an empty cursor clears it. Nothing is consumed — the grid shows a layout, it does not hold one.

The blank sits here rather than in the blueprint queue, and that follows from the same decision: the recording tab has to stand on its own. If "Write" took its blank from the queue you would have to visit the Work tab in order to record a recipe, and the two jobs would be tangled together again. The recorded blueprint appears where the blank was; from there you pick it up and put it in the queue on the Work tab. Recording is not queueing, and the order of operations says so out loud.

A hidden tab's slots are out of reach

A slot belonging to the tab that is not on screen can be neither filled nor emptied — not by clicking, not by shift-clicking, not by dragging, not by a double-click "collect all". A hidden tab is not merely undrawn: while it is hidden, its slots do not exist as far as the game is concerned.

The tab is window state, not machine state: it is never saved, and two players at one Assembler can be on different tabs without getting in each other's way.

Showing the active blueprint

The Work tab shows the layout of a blueprint from the queue — the one the machine is running, or the first recorded one while it is idle. Without that, a working machine looked like this: status "Assembling", the output filling up, and an empty window. The blueprint's product is drawn under the output area it is filling.

The shown layout is marked borrowed and not editable: the items are dimmed, and hovering a cell adds the line "Blueprint N layout — view only". A pale cyan ring sits around the blueprint slot the layout came from, so it is clear which of the three is on display.

It cannot be mistaken for your own layout: the shown blueprint is only drawn on top of the tab's artwork, and there are no slots in that area at all — there is nothing to take out of it on any client. Your own layout lives on the other tab and does not affect this one: while you lay out a recipe, the Work tab goes on showing what the machine is doing. (Before the tabs it was the other way round — your layout overrode the display, and the machine's vanished from under you.)

The two rings in the queue mean different things: orange is the blueprint the current operation is running from, pale cyan is the one whose layout is on display. Usually the same blueprint, and the orange one wins there.

On top of that, every written blueprint carries its product in the item's own icon — see the Assembly Blueprint. Three queued blueprints are told apart without hovering anything, and so are three sitting in a chest.

Storage window — this is the Storage Module's own window, opened by right-clicking a module rather than by a button in the Assembler:

the shared storage grid, 3 to 12 rows depending on how many modules are connected; no scrolling, no scrollbar, no search — the 108-slot cap was picked so everything fits one screen.

The storage window is the very same one the storage module opens.

With no store attached at all the Assembler behaves exactly as it does with an empty one: the status line reads "missing materials", no EU/FE is spent, and nothing breaks.

Block properties

FieldValue
Shapefull cube 16³
Hardness3.0
Blast resistance6.0
Toolpickaxe
Drops with energy NBTno

Breaking the Assembler drops the blueprints from its slots and the contents of the output area. The store's contents stay in the modules — only connectivity is lost, and the modules idle until a new assembler is placed. Pinned by TC-ASM-026: the drops are counted exactly, so both a lost blueprint (which cannot be crafted back) and a doubled output area show up.

The blueprint queue, the progress and the round-robin cursor survive a reload — TC-ASM-027 takes the machine through NBT, the same path a chunk save and load takes. The cursor is the one field with no visible symptom: were it lost, the rotation would silently restart at the first blueprint and the fairness it exists for would quietly stop working.

The front face is marked and, as on the mod's other machines, excluded from automation: a pipe pushed against the front will see no slots.

Recipes

No processing recipes — the machine uses vanilla minecraft:crafting

The composition follows the genre pattern — a tier casing, two circuits, an "identity" part and a "storage" part, with the four corners taken by the mechanics that move the parts:

At the centre sits the Advanced Machine Casing — the heart, and the tier the machine belongs to. Above it a crafting table, which is what the machine does; below it a Storage Module, where it draws its parts from. Left and right of the casing are two Electronic Circuits, the logic that reads a blueprint. All four corners are Iron Gears — the arms that move a part into the grid.

The corners are Iron Gears rather than more plating: the assembler is the first machine in the mod that moves parts around on its own, and the gear is the part this mod already spends on exactly that — the Fluid Tank and the Item Pipe read the same way. Filling all nine cells also puts the craft in line with the mod's other machines, where an empty corner is the exception.

Progression

Tier: MV — the first MV machine in the mod, the anchor of the MV phase Requires: a Storage Module (with no store the machine has nowhere to draw from) and an Assembly Blueprint Since it also requires a finished oil line — not directly, but through the Advanced Machine Casing, which now seats 2 Advanced Circuits, each costing 4 rubber. The assembler's own crafting grid is unchanged, but its full cost grew by those 2 circuits, and it can no longer be built before a Polymerizer and a Vulcanizer Upgrades into: nothing. On-demand autocrafting (order "make 64 X" with a sub-craft tree) is a separate future system, not an upgrade to this machine

Storage Module — the store the Assembler draws from Assembly Blueprint — the item that holds a recipe Gold Cable — powering an MV machine Item Pipe — fills the store, empties the output Sawmill — reference for a machine with switchable modes in its GUI

Crafting

Shaped Crafting
Iron Gear
Crafting Table
Iron Gear
Electronic Circuit
Advanced Machine Casing
Electronic Circuit
Iron Gear
Storage Module
Iron Gear
Crafting Table
Assembler
Assembler