diff --git a/sl_controller/commands.lua b/sl_controller/commands.lua index 61a37dc..0508ee2 100644 --- a/sl_controller/commands.lua +++ b/sl_controller/commands.lua @@ -94,6 +94,21 @@ sl_controller.register_action("send_cmnd", { ' example: $send_cmnd("1234", "on")' }) +sl_controller.register_action("set_filter", { + cmnd = function(self, num, slot, val) + num = tostring(num or "") + slot = tostring(slot or "red") + val = tostring(val or "on") + tubelib.send_message(num, self.meta.owner, nil, "filter", {slot=slot, val=val}) + end, + help = " $set_filter(num, slot, val)\n".. + ' Turn on/off a Distributor filter slot.\n'.. + " For more help, see:\n".. + " https://github.com/joe7575/techpack/wiki/nodes\n".. + ' example: $set_filter("1234", "red", "off")' +}) + + sl_controller.register_action("display", { cmnd = function(self, num, row, text1, text2, text3) text1 = tostring(text1 or "") diff --git a/sl_controller/server.lua b/sl_controller/server.lua index 81d8daa..dfe00a6 100644 --- a/sl_controller/server.lua +++ b/sl_controller/server.lua @@ -92,9 +92,9 @@ minetest.register_node("sl_controller:server", { minetest.register_craft({ output = "sl_controller:server", recipe = { - {"", "", ""}, - {"default:mese_crystal_fragment", "tubelib:wlanchip", "default:mese_crystal_fragment"}, - {"", "default:copper_ingot", ""}, + {"", "dye:black", ""}, + {"default:mese_crystal", "tubelib:wlanchip", "default:mese_crystal"}, + {"default:steel_ingot", "default:copper_ingot", "default:steel_ingot"}, }, }) diff --git a/tubelib/distributor.lua b/tubelib/distributor.lua index 151ffc1..0919191 100644 --- a/tubelib/distributor.lua +++ b/tubelib/distributor.lua @@ -311,6 +311,24 @@ local function on_receive_fields(pos, formname, fields, player) end end +-- tubelib command to turn on/off filter channels +local function change_filter_settings(pos, slot, val) + local slots = {["red"] = 1, ["green"] = 2, ["blue"] = 3, ["yellow"] = 4} + local meta = minetest.get_meta(pos) + local filter = minetest.deserialize(meta:get_string("filter")) + local num = slots[slot] or 1 + if num >= 1 and num <= 4 then + filter[num] = val == "on" + end + meta:set_string("filter", minetest.serialize(filter)) + + filter_settings(pos) + + local running = meta:get_int("running") + meta:set_string("formspec", distributor_formspec(tubelib.state(running), filter)) + return true +end + minetest.register_node("tubelib:distributor", { description = "Tubelib Distributor", tiles = { @@ -442,6 +460,8 @@ tubelib.register_node("tubelib:distributor", {"tubelib:distributor_active"}, { local meta = minetest.get_meta(pos) local running = meta:get_int("running") return tubelib.statestring(running) + elseif topic == "filter" then + return change_filter_settings(pos, payload.slot, payload.val) else return "unsupported" end