--[[ Tubelib Addons 1 ================ Copyright (C) 2017-2020 Joachim Stolberg AGPL v3 See LICENSE.txt for more information detector.lua: ]]-- -- Load support for I18n local S = tubelib_addons1.S local function switch_on(pos) if tubelib.data_not_corrupted(pos) then local node = minetest.get_node(pos) node.name = "tubelib_addons1:detector_active" minetest.swap_node(pos, node) minetest.get_node_timer(pos):start(1) local meta = minetest.get_meta(pos) local own_num = meta:get_string("own_num") local numbers = meta:get_string("numbers") local placer_name = meta:get_string("placer_name") tubelib.send_message(numbers, placer_name, nil, "on", own_num) end end local function switch_off(pos) if tubelib.data_not_corrupted(pos) then local node = minetest.get_node(pos) node.name = "tubelib_addons1:detector" minetest.swap_node(pos, node) local meta = minetest.get_meta(pos) local own_num = meta:get_string("own_num") local numbers = meta:get_string("numbers") local placer_name = meta:get_string("placer_name") tubelib.send_message(numbers, placer_name, nil, "off", own_num) end end minetest.register_node("tubelib_addons1:detector", { description = S("Tubelib Detector"), tiles = { -- up, down, right, left, back, front 'tubelib_front.png', 'tubelib_front.png', 'tubelib_outp.png', 'tubelib_inp.png', 'tubelib_addons1_detector.png^[transformFX', "tubelib_addons1_detector.png", }, after_place_node = function(pos, placer) local meta = minetest.get_meta(pos) local own_num = tubelib.add_node(pos, "tubelib_addons1:detector") meta:set_string("own_num", own_num) meta:set_string("formspec", "size[7.5,3]".. "field[0.5,1;7,1;numbers;"..S("Insert destination node number(s)")..";]" .. "button_exit[2,2;3,1;exit;"..S("Save").."]") meta:set_string("placer_name", placer:get_player_name()) meta:set_string("infotext", S("Tubelib Detector, unconfigured")) end, on_receive_fields = function(pos, formname, fields, player) local meta = minetest.get_meta(pos) if tubelib.check_numbers(fields.numbers) then meta:set_string("numbers", fields.numbers) local own_num = meta:get_string("own_num") meta:set_string("infotext", S("Tubelib Detector, connected")) meta:set_string("formspec", "size[7.5,3]".. "field[0.5,1;7,1;numbers;"..S("Insert destination node number(s)")..";"..fields.numbers.."]" .. "button_exit[2,2;3,1;exit;"..S("Save").."]") end end, after_dig_node = function(pos, oldnode, oldmetadata, digger) tubelib.remove_node(pos) end, on_rotate = screwdriver.disallow, paramtype = "light", sunlight_propagates = true, paramtype2 = "facedir", groups = {choppy=2, cracky=2, crumbly=2}, is_ground_content = false, sounds = default.node_sound_wood_defaults(), }) minetest.register_node("tubelib_addons1:detector_active", { description = S("Tubelib Detector"), tiles = { -- up, down, right, left, back, front 'tubelib_front.png', 'tubelib_front.png', 'tubelib_outp.png', 'tubelib_inp.png', 'tubelib_addons1_detector_active.png^[transformFX', "tubelib_addons1_detector_active.png", }, on_timer = switch_off, on_rotate = screwdriver.disallow, after_dig_node = function(pos, oldnode, oldmetadata, digger) tubelib.remove_node(pos) end, paramtype = "light", light_source = 2, sunlight_propagates = true, paramtype2 = "facedir", groups = {choppy=2, cracky=2, crumbly=2, not_in_creative_inventory=1}, is_ground_content = false, sounds = default.node_sound_wood_defaults(), drop = "tubelib_addons1:detector", }) minetest.register_craft({ output = "tubelib_addons1:detector", recipe = { {"", "group:wood", ""}, {"tubelib:tubeS", "tubelib:wlanchip", "tubelib:tubeS"}, {"", "group:wood", ""}, }, }) tubelib.register_node("tubelib_addons1:detector", {"tubelib_addons1:detector_active"}, { valid_sides = {"R","L"}, on_push_item = function(pos, side, item) if side ~= "L" then return false end local player_name = minetest.get_meta(pos):get_string("player_name") if tubelib.push_items(pos, "R", item, player_name) then switch_on(pos) return true end return false end, is_pusher = true, -- is a pulling/pushing node })