02 March 2021

We can pipe anything, directly into anything!
— Robert Sima
The Pipemaker

This project is free software licensed under the GPLv3 software license. Source code can be found on my GitLab repository.

How it works

Pipes are "virtual" objects that move items to and from storage blocks. Pipe ends (inputs and outputs) are created using the barrel block. To connect a pipe to a storage block, just point a barrel towards it.

Connected Pipe

A pipe ending can be either an input or an output.

  • An input will only take items from the connected storage block.

  • An output will only place items into the connected storage block.

We can connect multiple pipe endings into one complete pipe by making them part of the same named pipe. To achieve this, we will use the pipe wand. First, enable the pipe wand and set the current active pipe name. We will use the storage pipe name as an example.

/nopipes enable-wand storage

There are 4 major operations modes for the pipe wand. Left click uses the wand. Right click changes the mode.

  1. Input creates a new input ending for the active pipe.

  2. Output creates a new output ending for the active pipe.

  3. Remove removes an existing pipe ending.

  4. Inspect prints all information about the clicked pipe ending.

You can disable the pipe wand with /nopipes disable-wand or change the active pipe name with /nopipes change-pipe <pipe>


An input will try to take items from the container block it’s placed against (not from inside the barrel!) and push them in a valid output ending. If no suitable ending is found, no items are transferred.

The content of the barrel does not get pushed into the pipe. Instead, it acts as a filter.

An input will try to move items once every 10 ticks (twice a second). They will also try to move items in bulk. Insted of working like hoppers (one item at a time), a pipe will try to move 2 stacks of items at a time. This functionality makes pipes ideal for quickly moving and sorting large quantities of items or rapidly packing and unpacking shulkers.


An output will try to place items into a connected container’s inventory. If there are more than one suitable outputs, there can be no guarantee as to which one is used.

Transferred items do not get pushed inside the barrel. Instead, the barrel’s content acts as a filter.


By placing items inside an input or output, the pipe becomes filtered.

A filtered pipe will only accept items that are the same type as an item inside the barrel. Filtered inputs will only take certain items. Filtered outouts will only put certain items.

Filtered output priority

Filtred outputs always have higher priority. If an item can go to a filtered output or to a normal output, the filtered output will be chosen.

If an item matches an output and the container is full or it’s disabled by redstone signal, then the item can go to the unfiltered outputs.

If an item matches an output and the output’s chunk is not loaded, the item will not be transferred to a regular output. Instead, it will be transferred when the output becomes reacheable (and the input is loaded, too).


A pipe that receives a redstone signal will stop transmitting. This can be used to transfer exact amounts of items using comparators and a bit of redstone dust.

Pipe parameters

These pipe parameters are changed on a per-pipe basis. All outputs and inputs from the active pipe will be affected.

  • /nopipes transfer-speed <speed> defines how many stacks will be moved at once (twice per second). Default value is 2.

  • /nopipes stack-size <size> defines the maximum stack size an output will be allowed to stack items. Default value is 64. This parameter is useful when creating a smelter system that only stacks 8 items per furnace (to optimize coal usage).

  • /nopipes visibility public|hidden defined wether the pipe’s name will be available as an autocomplete option for enable-wand or change-pipe subcommands. This setting can be used to hide the existence of a pipe (unless the name is known).

Compatible blocks

  • Chests, Trapped chests, Barrels, Dispencers, Droppers, Hoppers and Shulkers will work as both inputs and outputs from any direction

  • Furnaces, Blast furnaces and Smokers will accept items into the smelting slot from the upper face and into the fuel slot from the sides. Input pipes will not interact with these blocks.

  • Brewing stands, Lecterns, Jokeboxes, Ender chests, Minecarts and other storage blocks will not interact with pipes.

Hopper interaction

When a hopper is pointing towards a pipe block (regardless of orientation), it will interact with the pipe’s filter. This allows for dynamic filtering of items (for example, when building search engines and item indexers).

The following configurations will probably lead to unintended behaviour:


We can fix transfering items between a pipe and a hopper like so:


If having hoppers change filter content is the desired behaviour, we can use a similar configuration. (note that this example is missing extra redstone logic to make it functional and useful)


Example machinery

Simple storage sorting system


There is a single pipe with 1 input and 3 outputs.

The pipe to the left is the input. That is where we feed items to the sorting system.

The two pipes in the center are filtered outputs. The items frames show what will be filtered in each chest (note that item frames are purely decorative and they do not affect the functioning of filters. Filter content is inside the barrel block).

The last pipe on the right is an regular output.

Any item fed into the input chest gets filtered first. It if matches diamonds or redstone, it will be routed to the first chest. If it matches iron or gold, it will be routed to the second chest. If it matches none, it will end up in the third output.

Fast, extendable and self-sustaining smelter

The "iron pipes" in this machine are for demonstration purposes. They don’t alter the functioning in any way. Also, the input chest can’t be opened because it has a solid block on top (the pipe).

The filters present inside the barrels are displayed in item frames.

The smelt-in (green) pipe takes wood and ore from the chest and routes it to the smelter unit. We are smelting using coal, therefore the stack-size parameter for this pipe is set to 8 to make pipes place maximum 8 items into each furnace. This will help with coal economy.

The smelt-out (black) pipe takes items from the hopper line and puts them into the output chest. Charcoal generated by the furnaces is routed back to the smelter input, to refuel itself when needed.

The smelt-fuel (yellow & black) pipe takes charcoal and coal from the input and fuels the furnaces.

Input pipes will not interact with furnaces, therefore I’m using hopper lines. A single hopper line can serve up to 25 furnaces. Also the last hopper is pointing away from the pipe input.

Fast, precise Shulker loader


This mechanism can load a precise amount of items into shulker boxes. This particular implementation is not self-starting and needs to be restarted from the button in the back if it stops (due to no shulkers avaialble). If it runs out of items, it will continue as normal when more are available.

The quantity loaded can be controlled by changing the position of the redstone repeater in the loop. The closer it is to the comparator, the less items it will load. This implementation loads 13 stacks.

Known bugs

  • By placing an input and output of the same pipe towards the same container, looped items will be destroyed to prevent a duplication mechanism.

This website is open-source. The source code is available on my GitLab repository

© 2021 | Mixed with Bootstrap v5.0.0 | Baked with JBake v2.6.7