Machine
Official compatibility
| Element | Reference |
|---|---|
TypeWriter | Required. Use the official TypeWriter release supported by the extension release. |
| Related extensions | Install the related extensions listed on this page before using entries that depend on them. |
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 |
User guide
- 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. |
Troubleshooting
The extension is not visible
Check that the installed release matches the supported TypeWriter release and that the related extensions listed in the compatibility section are present.
An entry is missing
In the Typewriter Web panel, use the Search bar or the + button to find or create the entry with its exact identifier. Entry IDs and field names are case-sensitive; do not translate them.
The entry saves but nothing happens
Check that the entry is connected to the trigger, command, objective, event, or menu interaction required by its type. Test with optional permissions and criteria removed, then add them back one at a time.
An integration does not work
Verify the dependency and version shown in the extension card, then check the server log for the first error. Do not replace a missing dependency with a similarly named plugin unless the extension source explicitly supports it.