printer/scanner.lua

87 lines
2.9 KiB
Lua
Raw Normal View History

2014-11-05 19:44:28 +00:00
local dbg
if moddebug then dbg=moddebug.dbg("printer") else dbg={v1=function() end,v2=function() end,v3=function() end} end
local function clone_node(name)
local node2 = {}
local node = minetest.registered_nodes[name]
for k, v in pairs(node) do
node2[k] = v
end
return node2
end
local scanner = clone_node("default:chest")
scanner.description = "Scanner"
scanner.tiles[1] = "printer_scanner.png^pipeworks_tube_connection_metallic.png"
scanner.tiles[2] = "printer_scanner.png^pipeworks_tube_connection_metallic.png"
scanner.tiles[3] = "printer_scanner.png^pipeworks_tube_connection_metallic.png"
scanner.tiles[4] = "printer_scanner.png^pipeworks_tube_connection_metallic.png"
scanner.tiles[5] = "printer_scanner.png^pipeworks_tube_connection_metallic.png"
scanner.tiles[6] = "printer_scanner.png"
scanner.groups.tubedevice = 1
scanner.groups.tubedevice_receiver = 1
scanner.tube = {
insert_object = function(pos, node, stack, direction)
local meta = minetest.get_meta(pos)
local inv = meta:get_inventory()
local res = inv:add_item("main", stack)
if res then
if stack:get_name() == "memorandum:letter" then
local channel = "scanner"
2014-03-12 18:31:04 +00:00
local text = stack:get_metadata()
-- TODO: Parsing code from memorandum - would be better if
-- that module exposed this as a callable function.
local scnt = string.sub (text, -2, -1)
if scnt == "00" then
mssg = string.sub (text, 1, -3)
sgnd = ""
elseif tonumber(scnt) == nil then -- to support previous versions
mssg = string.sub (text, 37, -1)
sgnd = ""
else
mssg = string.sub (text, 1, -scnt -3)
sgnd = string.sub (text, -scnt-2, -3)
end
digiline:receptor_send(pos, digiline.rules.default, channel, {text=mssg, signed=sgnd})
2014-11-05 19:44:28 +00:00
dbg.v1("Scanned '"..mssg.."' at "..minetest.pos_to_string(pos))
end
end
return res
end,
can_insert = function(pos, node, stack, direction)
2014-11-05 19:38:55 +00:00
-- Only letters can be scanned - don't even accept anything else.
if stack:get_name() ~= "memorandum:letter" then
return false
end
local meta = minetest.get_meta(pos)
local inv = meta:get_inventory()
if inv:room_for_item("main", stack) then
return true
end
-- Shred something when full
inv:remove_item("main", "memorandum:letter")
2014-11-05 19:44:28 +00:00
dbg.v1("Scanner shredded a letter at "..minetest.pos_to_string(pos))
return inv:room_for_item("main", stack)
end,
input_inventory = "main",
2014-11-19 21:48:53 +00:00
connect_sides = {top=1, back=1, left=1, right=1, bottom=1, front=1}
}
scanner.after_place_node = function(pos)
pipeworks.scan_for_tube_objects(pos)
end
scanner.after_dig_node = function(pos)
pipeworks.scan_for_tube_objects(pos)
end
scanner.digiline = {
receptor = {},
}
minetest.register_node("printer:scanner", scanner)