(e.g. if there's room for 50 of some item, and you send a stack of 99,
50 are added to the chest and a stack of 49 is rejected and sent
on to the next destination)
that is, if there are more than X number of items in a tube. Default is
40 in a tube, but breaking is also disabled by default.
(original framework by Novatux, with changes by VanessaE)
caveats: in order to cleanly handle the entry panel, valve, and sensor
I had to rotate the valve and sensor models 90 degrees
so that their in-/outlet pipes point the same direction as the
entry panel.
This also enables proper handling of a valve or sensor turned vertically.
Some objects have rotation disabled entirely (as flipping them over/around makes
no sense)
When a valve is rotated, it is turned off automatically, to work around a glitch in
the rotation code.
"on" and "off" messages turn it on or off, "single" crafts one item, and sending nested tables in the shape of the crafting grid sets the craft. Example message:
{
{"default:wood","default:wood","default:wood"},
{"default:wood","","default:wood"},
{"default:wood","default:wood","default:wood"}
}
You can now make reqyests like `{group="stick"}`, `"default:pick_wood 1
30000"`, and `"mod:block <count> <exact wear> <meta>"` to match
items precisely.
If you don't specify a field, that field won't be checked. If you
specify a field in an invalid way, that rule will match nothing.
You can also specify wear as a table `wear={min, max}` to specify
a range `[min, max)` of acceptable wear values. For example,
`{name="default:pick_wood", wear={0, 32768}}` matches only wooden
pickaxes that have at least half of their life left.
You can even do things like `{count=2, metadata="whatever")}`, which
will match any item at all, as long as its metadata matches, and will
retrieve at most two of those items.
* Made digiline filter-injectors not pull a whole stack if the count is exactly 1
* Made digiline filter-injectors pull a whole stack if no count specified
* `default:dirt` still has a count of 1, but `{name="name"}` has no count
* Add digiline detector tube
The digiline detector tube outputs an itemstring of every stack
that passes through it on the channel specified in its formspec.
* Don't store digiline detector tube's formspec in a temporary local
The table lookup will fail if node.param2 is outside [0-3] which
is easily possible since there are several ways to modify param2
values of nodes. Force truncating param2 to always be 0-3 before
using it in a table lookup.
Before, init.lua called io.open on
pipeworks.worldpath..'/pipeworks_settings.txt'
to see if it existed, but did not close the resulting file handle if
it was found to exist. It instead erroneously called io.close() with
no argument, which does nothing if the default output file is set to
stdout, which it is.
Now, the result of io.open is saved to a local variable. If that value
is not nil (i.e. if the world settings file exists), the file handle is
passed to io.close before calling dofile.
Also, this saves pipeworks.worldpath..'/pipeworks_settings.txt' to a
local variable to reduce redundancy.