Machine
The Machine Extension turns machine design into pure configuration. One machine_definition entry describes what a machine is — its slots, recipes, energy needs, visuals, holograms, tiers and upgrade slots — and the extension runs it: a transformation machine is a panel entry, zero code.
Features
- Data-Driven Definitions — One
machine_definitionentry per machine type. Placement, ticking, menus, persistence and holograms are handled by the engine.- 20 Processing Types — A generic recipe processor covers 13 transformation types (smelting, grinding, sawing, mixing, compacting, enriching, recycling, brewing, auto-crafting…), plus Storage, Vacuum, Shearing, Sorting, Charging, Assembler, EnergyCell and EnergyGenerator archetypes.
- Shared Energy Grid — Energy lives in EnergyCell machines and is pooled per world. Generators fill the pool (fuel or solar); consumers must be linked to the grid before they can draw from it.
- Tiers & Upgrades — Permanent tiers (T1→T3) and removable upgrade modules (SPEED, YIELD, ENERGY_EFFICIENCY, FORTUNE, RANGE, FILTER) stack multiplicatively. Each definition declares which upgrades it accepts.
- Progress Holograms — Per-machine hologram with progress bar, idle/active/low-energy/full messages, fully MiniMessage-formatted.
- Instance Persistence — Placed machines, their inventories, energy charge and progress survive restarts through artifact-backed persistence.
The Data-Driven System
- Definition — Machine Definition: the single entry that describes a machine type — slots, recipes, fuel, energy, visuals, holograms, tiers, upgrades, limits.
- Actions & Storage — Open Machine GUI: opens a machine's menu from any trigger. Machine Menu: OmniGUI-layout menu bound to a machine. Machine Data Artifact: persistence backend for placed instances.
Processing types
| Category | Types |
|---|---|
| Recipe transformations | SMELTING, LIQUID_SMELTING, MULTI_SMELTING, GRINDING, SAWING, MIXING, COMPACTING, ENRICHING, RECYCLING, BREWING, AUTO_CRAFTING, INDUSTRIAL, GENERIC |
| Storage & logistics | STORAGE (OmniGUI-backed chest), SORTING (filter slots route items), CONVEYOR (directional belt moving one item type behind → ahead, chaining belt to belt), VOID (deletes filtered items) |
| Production | GENERATOR (produces items on an interval with no input — cobble/resource generator, optional energy cost) |
| Area automation | VACUUM (collects drops in a radius), SHEARING (shears nearby sheep) |
| Energy | ENERGY_CELL (stores the pool), ENERGY_GENERATOR (fuel or solar), CHARGING (charges an item via persistent data — the charge travels with the item) |
| Entities | ASSEMBLER (SPAWN: ingredients + energy → entity; COLLECT: harvests nearby entities' produce) |
Energy in the public build
The grid is pooled per world: every machine in the same world shares one energy pool, aggregated over its EnergyCell machines. A consumer only draws when linked to the grid, which keeps powering a machine a deliberate player act. If you run an island/claim plugin, scope the grid tighter by adapting MachineProtectionService.islandIdAt.
Tiers in the public build
Tiers are designed to be gated by a research system. The public build has none, so a tier with a blank researchNode is considered unlocked (highest one wins); tiers naming a research node stay locked. This keeps configs portable with setups that do have research.
Legacy Machines
The action-driven machines from earlier releases still work and now share the same protection gate and persistence:
- Actions (Machines) — Furnace: Standard custom furnace. Multi Furnace: Advanced multi-slot machine. Smeltery: Liquid melting machine. Sheep Shearer: Auto shearer. Dropper Furnace: Minimal dropper-based furnace. Dropper Smeltery: Minimal dropper-based smeltery.
- Artifacts — Furnace Artifacts: Fuel, input, output, and liquid storage for machine furnaces.
Chest storage is no longer a dedicated action: use a machine_definition with processingType: STORAGE and a guiStorageRef pointing at an OmniGUI storage entry.
Placeholders
Format: %typewriter_<action_id>:<machine_type>:<stat>%
| Placeholder | Description |
|---|---|
%typewriter_<id>:furnace:fuel% | Remaining fuel |
%typewriter_<id>:furnace:input% | Input presence |
%typewriter_<id>:smeltery:fuel% | Remaining fuel |
%typewriter_<id>:smeltery:liquid% | Liquid presence |
Quick Start
- 1. Create the persistence artifact — Add a machine_data_artifact entry — every placed machine instance (inventory, energy, progress) is stored in it. → machine_data_artifact
- 2. Define the machine — Add a machine_definition: pick a
processingType, declare slots, recipes and fuel, pointstorageRefat the artifact, and set aspawnItemso players can place it. → machine_definition - 3. Let players use it — Placing the
spawnItemcreates a live instance: it ticks on its own, renders its hologram, and right-click opens its menu. No further wiring needed.
Commands
This extension does not provide standalone commands. All functionality is accessed through Typewriter entries.
Permissions
| Permission | Description |
|---|---|
machine.protection.bypass | Place/break/interact with machines anywhere, ignoring per-player limits. |
Per-player placement limits are set on each definition via machineLimit.
Dependencies
| Extension | Required | Usage |
|---|---|---|
| OmniGUI (GuiAndDialogs) | Required | Menu rendering and STORAGE machine backing. |
| PlaceholderAPI | Optional | For @Placeholder fields. |