12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- --[[
- Tubelib Addons 2
- ================
- Copyright (C) 2017-2020 Joachim Stolberg
- AGPL v3
- See LICENSE.txt for more information
- programmer.lua:
-
- ]]--
- -- Load support for I18n
- local S = tubelib_addons2.S
- local function join_to_string(tbl)
- local t = {}
- for key,_ in pairs(tbl) do
- t[#t + 1] = key .. " "
- end
- -- remove the last blank
- return string.sub(table.concat(t), 1, -2)
- end
- local function reset_programmer(itemstack, user, pointed_thing)
- user:set_attribute("tubelib_prog_numbers", nil)
- minetest.chat_send_player(user:get_player_name(), S("[Tubelib Programmer] programmer reset"))
- return itemstack
- end
- local function read_number(itemstack, user, pointed_thing)
- local pos = pointed_thing.under
- if pos then
- local number = tubelib.get_node_number(pos)
- if number then
- local numbers = minetest.deserialize(user:get_attribute("tubelib_prog_numbers")) or {}
- numbers[number] = true
- user:set_attribute("tubelib_prog_numbers", minetest.serialize(numbers))
- minetest.chat_send_player(user:get_player_name(), S("[Tubelib Programmer] number").." "..number.." "..S("read"))
- else
- minetest.chat_send_player(user:get_player_name(), S("[Tubelib Programmer] Unknown node on").." "..minetest.pos_to_string(pos))
- end
- else
- return reset_programmer(itemstack, user, pointed_thing)
- end
- return itemstack
- end
- local function program_numbers(itemstack, placer, pointed_thing)
- local pos = pointed_thing.under
- if pos then
- local meta = minetest.get_meta(pos)
- local node_number = tubelib.get_node_number(pos)
- local numbers = minetest.deserialize(placer:get_attribute("tubelib_prog_numbers")) or {}
- placer:set_attribute("tubelib_prog_numbers", nil)
- local text = join_to_string(numbers)
- local player_name = placer:get_player_name()
- if meta and meta:get_string("owner") ~= player_name then
- minetest.chat_send_player(player_name, S("[Tubelib Programmer] foreign or unknown node!"))
- return itemstack
- end
- local res = tubelib.send_request(node_number, "set_numbers", text)
- if res == true then
- minetest.chat_send_player(player_name, S("[Tubelib Programmer] node programmed!"))
- else
- minetest.chat_send_player(player_name, S("[Tubelib Programmer] Error: programmer not supported!"))
- end
- return itemstack
- else
- return reset_programmer(itemstack, placer, pointed_thing)
- end
- end
- minetest.register_craftitem("tubelib_addons2:programmer", {
- description = S("Tubelib Programmer"),
- inventory_image = "tubelib_addons2_programmer.png",
- stack_max = 1,
- wield_image = "tubelib_addons2_programmer_wield.png",
- groups = {cracky=1, book=1},
- -- left mouse button = program
- on_use = program_numbers,
- on_secondary_use = reset_programmer,
- -- right mouse button = read
- on_place = read_number,
- })
- minetest.register_craft({
- output = "tubelib_addons2:programmer",
- recipe = {
- {"", "default:steel_ingot", ""},
- {"", "tubelib:wlanchip", ""},
- {"", "dye:red", ""},
- },
- })
|