local update_formspec = function(meta) local inv = meta:get_inventory() local active = meta:get_int("active") == 1 local state = "Inactive" if active then state = "Active" end local name = meta:get_string("name") meta:set_string("infotext", "Locator: " .. name .. " (" .. state .. ")") meta:set_string("formspec", "size[8,3;]" .. -- col 1 "field[0,1.5;4,1;name;Name;" .. name .. "]" .. "button_exit[4,1;4,1;save;Save]" .. "button_exit[0,2;8,1;toggle;Toggle]" .. "") end -- base beacon minetest.register_node("locator:beacon_base", { description = "Locator beacon base", tiles = { "locator_beacon_base.png", "locator_beacon_base.png", "locator_beacon_base.png", "locator_beacon_base.png", "locator_beacon_base.png", "locator_beacon_base.png", }, groups = {cracky=3,oddly_breakable_by_hand=3}, sounds = default.node_sound_glass_defaults() }) -- level/range register beacon local register_beacon = function(level, range) minetest.register_node("locator:beacon_" .. level, { description = "Locator beacon, level: " .. level .. ", range: " .. range, tiles = { "locator_beacon_level" .. level .. ".png", "locator_beacon_level" .. level .. ".png", "locator_beacon_level" .. level .. ".png", "locator_beacon_level" .. level .. ".png", "locator_beacon_level" .. level .. ".png", "locator_beacon_level" .. level .. ".png" }, groups = {cracky=3,oddly_breakable_by_hand=3}, sounds = default.node_sound_glass_defaults(), after_place_node = function(pos, placer) local meta = minetest.get_meta(pos) meta:set_string("owner", placer:get_player_name() or "") end, on_dig = function(pos) locator.remove_beacon(pos) return true end, on_construct = function(pos) local meta = minetest.get_meta(pos) meta:set_string("name", "") meta:set_int("range", range) meta:set_int("active", 0) update_formspec(meta) end, on_receive_fields = function(pos, formname, fields, sender) local meta = minetest.get_meta(pos) local playername = sender:get_player_name() if playername == meta:get_string("owner") then -- owner if fields.save then local name = fields.name meta:set_string("name", fields.name) end if fields.toggle then if meta:get_int("active") == 1 then meta:set_int("active", 0) else meta:set_int("active", 1) end end else -- non-owner end update_formspec(meta) locator.update_beacon(pos, meta) end }) end register_beacon(1, 500) -- short range register_beacon(2, 5000) -- mid range register_beacon(3, 30000) -- long range