From 0f4f603e2e8c9aa3f8e736ff6c6cf78bb6f3f493 Mon Sep 17 00:00:00 2001 From: cheapie Date: Thu, 16 May 2019 23:59:24 -0500 Subject: Add initial content --- init.lua | 1263 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1263 insertions(+) create mode 100644 init.lua (limited to 'init.lua') diff --git a/init.lua b/init.lua new file mode 100644 index 0000000..6cd1d57 --- /dev/null +++ b/init.lua @@ -0,0 +1,1263 @@ +minetest.register_node("elevatorparts:callbutton_up",{ + description = "Up Call Button (unprogrammed)", + groups = { + dig_immediate = 2, + }, + tiles = { + "elevatorparts_generic_bg.png", + "elevatorparts_generic_bg.png", + "elevatorparts_generic_bg.png", + "elevatorparts_generic_bg.png", + "elevatorparts_generic_bg.png", + "[combine:64x64:0,0=elevatorparts_generic_bg.png:22,24=elevatorparts_callbutton_bg.png:24,35=elevatorparts_callbutton_up.png", + }, + paramtype = "light", + paramtype2 = "facedir", + is_ground_content = false, + sunlight_propagates = true, + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, 0.48, 0.5, 0.5, 0.5 }, + {-0.16, -0.37, 0.45, 0.17, 0.13, 0.48}, + }, + }, + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("formspec","field[channel;Channel;${channel}") + end, + on_receive_fields = function(pos,_,fields,sender) + local name = sender:get_player_name() + if minetest.is_protected(pos,name) and not minetest.check_player_privs(name,{protection_bypass=true}) then + minetest.record_protection_violation(pos,name) + return + end + local meta = minetest.get_meta(pos) + if fields.channel then + meta:set_string("channel",fields.channel) + meta:set_string("formspec","") + local node = minetest.get_node(pos) + node.name = "elevatorparts:callbutton_up_off" + minetest.swap_node(pos,node) + end + end, +}) + +minetest.register_node("elevatorparts:callbutton_up_off",{ + description = "Up Call Button (programmed, off state - you hacker you!)", + groups = { + dig_immediate = 2, + not_in_creative_inventory = 1, + }, + tiles = { + "elevatorparts_generic_bg.png", + "elevatorparts_generic_bg.png", + "elevatorparts_generic_bg.png", + "elevatorparts_generic_bg.png", + "elevatorparts_generic_bg.png", + "[combine:64x64:0,0=elevatorparts_generic_bg.png:22,24=elevatorparts_callbutton_bg.png:24,35=elevatorparts_callbutton_up.png", + }, + drop = "elevatorparts:callbutton_up", + paramtype = "light", + paramtype2 = "facedir", + is_ground_content = false, + sunlight_propagates = true, + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, 0.48, 0.5, 0.5, 0.5 }, + {-0.16, -0.37, 0.45, 0.17, 0.13, 0.48}, + }, + }, + on_punch = function(pos) + digiline:receptor_send(pos,digiline.rules.default,minetest.get_meta(pos):get_string("channel"),"up_press") + end, + on_rightclick = function(pos) + digiline:receptor_send(pos,digiline.rules.default,minetest.get_meta(pos):get_string("channel"),"up_press") + end, + digiline = { + receptor = {}, + effector = { + action = function(pos,node,channel,msg) + local meta = minetest.get_meta(pos) + if meta:get_string("channel") ~= channel or type(msg) ~= "string" then return end + msg = string.lower(msg) + if msg == "up_light_on" then + node.name = "elevatorparts:callbutton_up_on" + minetest.swap_node(pos,node) + end + end + }, + }, +}) + +minetest.register_node("elevatorparts:callbutton_up_on",{ + description = "Up Call Button (programmed, on state - you hacker you!)", + groups = { + dig_immediate = 2, + not_in_creative_inventory = 1, + }, + tiles = { + "elevatorparts_generic_bg.png", + "elevatorparts_generic_bg.png", + "elevatorparts_generic_bg.png", + "elevatorparts_generic_bg.png", + "elevatorparts_generic_bg.png", + "[combine:64x64:0,0=elevatorparts_generic_bg.png:22,24=elevatorparts_callbutton_bg.png:24,35=elevatorparts_callbutton_up.png:33,36=elevatorparts_callbutton_light.png", + }, + drop = "elevatorparts:callbutton_up", + paramtype = "light", + paramtype2 = "facedir", + is_ground_content = false, + sunlight_propagates = true, + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, 0.48, 0.5, 0.5, 0.5 }, + {-0.16, -0.37, 0.45, 0.17, 0.13, 0.48}, + }, + }, + on_punch = function(pos) + digiline:receptor_send(pos,digiline.rules.default,minetest.get_meta(pos):get_string("channel"),"up_press") + end, + on_rightclick = function(pos) + digiline:receptor_send(pos,digiline.rules.default,minetest.get_meta(pos):get_string("channel"),"up_press") + end, + digiline = { + receptor = {}, + effector = { + action = function(pos,node,channel,msg) + local meta = minetest.get_meta(pos) + if meta:get_string("channel") ~= channel or type(msg) ~= "string" then return end + msg = string.lower(msg) + if msg == "up_light_off" then + node.name = "elevatorparts:callbutton_up_off" + minetest.swap_node(pos,node) + end + end + }, + }, +}) + +minetest.register_node("elevatorparts:callbutton_down",{ + description = "Down Call Button (unprogrammed)", + groups = { + dig_immediate = 2, + }, + tiles = { + "elevatorparts_generic_bg.png", + "elevatorparts_generic_bg.png", + "elevatorparts_generic_bg.png", + "elevatorparts_generic_bg.png", + "elevatorparts_generic_bg.png", + "[combine:64x64:0,0=elevatorparts_generic_bg.png:22,24=elevatorparts_callbutton_bg.png:24,35=elevatorparts_callbutton_down.png", + }, + paramtype = "light", + paramtype2 = "facedir", + is_ground_content = false, + sunlight_propagates = true, + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, 0.48, 0.5, 0.5, 0.5 }, + {-0.16, -0.37, 0.45, 0.17, 0.13, 0.48}, + }, + }, + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("formspec","field[channel;Channel;${channel}") + end, + on_receive_fields = function(pos,_,fields,sender) + local name = sender:get_player_name() + if minetest.is_protected(pos,name) and not minetest.check_player_privs(name,{protection_bypass=true}) then + minetest.record_protection_violation(pos,name) + return + end + local meta = minetest.get_meta(pos) + if fields.channel then + meta:set_string("channel",fields.channel) + meta:set_string("formspec","") + local node = minetest.get_node(pos) + node.name = "elevatorparts:callbutton_down_off" + minetest.swap_node(pos,node) + end + end, +}) + +minetest.register_node("elevatorparts:callbutton_down_off",{ + description = "Down Call Button (programmed, off state - you hacker you!)", + groups = { + dig_immediate = 2, + not_in_creative_inventory = 1, + }, + tiles = { + "elevatorparts_generic_bg.png", + "elevatorparts_generic_bg.png", + "elevatorparts_generic_bg.png", + "elevatorparts_generic_bg.png", + "elevatorparts_generic_bg.png", + "[combine:64x64:0,0=elevatorparts_generic_bg.png:22,24=elevatorparts_callbutton_bg.png:24,35=elevatorparts_callbutton_down.png", + }, + drop = "elevatorparts:callbutton_down", + paramtype = "light", + paramtype2 = "facedir", + is_ground_content = false, + sunlight_propagates = true, + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, 0.48, 0.5, 0.5, 0.5 }, + {-0.16, -0.37, 0.45, 0.17, 0.13, 0.48}, + }, + }, + on_punch = function(pos) + digiline:receptor_send(pos,digiline.rules.default,minetest.get_meta(pos):get_string("channel"),"down_press") + end, + on_rightclick = function(pos) + digiline:receptor_send(pos,digiline.rules.default,minetest.get_meta(pos):get_string("channel"),"down_press") + end, + digiline = { + receptor = {}, + effector = { + action = function(pos,node,channel,msg) + local meta = minetest.get_meta(pos) + if meta:get_string("channel") ~= channel or type(msg) ~= "string" then return end + msg = string.lower(msg) + if msg == "down_light_on" then + node.name = "elevatorparts:callbutton_down_on" + minetest.swap_node(pos,node) + end + end + }, + }, +}) + +minetest.register_node("elevatorparts:callbutton_down_on",{ + description = "Down Call Button (programmed, on state - you hacker you!)", + groups = { + dig_immediate = 2, + not_in_creative_inventory = 1, + }, + tiles = { + "elevatorparts_generic_bg.png", + "elevatorparts_generic_bg.png", + "elevatorparts_generic_bg.png", + "elevatorparts_generic_bg.png", + "elevatorparts_generic_bg.png", + "[combine:64x64:0,0=elevatorparts_generic_bg.png:22,24=elevatorparts_callbutton_bg.png:24,35=elevatorparts_callbutton_down.png:33,36=elevatorparts_callbutton_light.png", + }, + drop = "elevatorparts:callbutton_down", + paramtype = "light", + paramtype2 = "facedir", + is_ground_content = false, + sunlight_propagates = true, + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, 0.48, 0.5, 0.5, 0.5 }, + {-0.16, -0.37, 0.45, 0.17, 0.13, 0.48}, + }, + }, + on_punch = function(pos) + digiline:receptor_send(pos,digiline.rules.default,minetest.get_meta(pos):get_string("channel"),"down_press") + end, + on_rightclick = function(pos) + digiline:receptor_send(pos,digiline.rules.default,minetest.get_meta(pos):get_string("channel"),"down_press") + end, + digiline = { + receptor = {}, + effector = { + action = function(pos,node,channel,msg) + local meta = minetest.get_meta(pos) + if meta:get_string("channel") ~= channel or type(msg) ~= "string" then return end + msg = string.lower(msg) + if msg == "down_light_off" then + node.name = "elevatorparts:callbutton_down_off" + minetest.swap_node(pos,node) + end + end + }, + }, +}) + +minetest.register_node("elevatorparts:callbutton_both",{ + description = "Up and Down Call Buttons (unprogrammed)", + groups = { + dig_immediate = 2, + }, + tiles = { + "elevatorparts_generic_bg.png", + "elevatorparts_generic_bg.png", + "elevatorparts_generic_bg.png", + "elevatorparts_generic_bg.png", + "elevatorparts_generic_bg.png", + "[combine:64x64:0,0=elevatorparts_generic_bg.png:22,24=elevatorparts_callbutton_bg.png:24,28=elevatorparts_callbutton_up.png:24,43=elevatorparts_callbutton_down.png", + }, + paramtype = "light", + paramtype2 = "facedir", + is_ground_content = false, + sunlight_propagates = true, + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, 0.48, 0.5, 0.5, 0.5 }, + {-0.16, -0.37, 0.45, 0.17, 0.13, 0.48}, + }, + }, + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("formspec","field[channel;Channel;${channel}") + end, + on_receive_fields = function(pos,_,fields,sender) + local name = sender:get_player_name() + if minetest.is_protected(pos,name) and not minetest.check_player_privs(name,{protection_bypass=true}) then + minetest.record_protection_violation(pos,name) + return + end + local meta = minetest.get_meta(pos) + if fields.channel then + meta:set_string("channel",fields.channel) + meta:set_string("formspec","") + meta:set_string("infotext","Left-click for up or right-click for down") + local node = minetest.get_node(pos) + node.name = "elevatorparts:callbutton_both_off" + minetest.swap_node(pos,node) + end + end, +}) + +minetest.register_node("elevatorparts:callbutton_both_off",{ + description = "Up and Down Call Buttons (programmed, both off state - you hacker you!)", + groups = { + dig_immediate = 2, + not_in_creative_inventory = 1, + }, + tiles = { + "elevatorparts_generic_bg.png", + "elevatorparts_generic_bg.png", + "elevatorparts_generic_bg.png", + "elevatorparts_generic_bg.png", + "elevatorparts_generic_bg.png", + "[combine:64x64:0,0=elevatorparts_generic_bg.png:22,24=elevatorparts_callbutton_bg.png:24,28=elevatorparts_callbutton_up.png:24,43=elevatorparts_callbutton_down.png", + }, + drop = "elevatorparts:callbutton_both", + paramtype = "light", + paramtype2 = "facedir", + is_ground_content = false, + sunlight_propagates = true, + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, 0.48, 0.5, 0.5, 0.5 }, + {-0.16, -0.37, 0.45, 0.17, 0.13, 0.48}, + }, + }, + on_punch = function(pos) + digiline:receptor_send(pos,digiline.rules.default,minetest.get_meta(pos):get_string("channel"),"up_press") + end, + on_rightclick = function(pos) + digiline:receptor_send(pos,digiline.rules.default,minetest.get_meta(pos):get_string("channel"),"down_press") + end, + digiline = { + receptor = {}, + effector = { + action = function(pos,node,channel,msg) + local meta = minetest.get_meta(pos) + if meta:get_string("channel") ~= channel or type(msg) ~= "string" then return end + msg = string.lower(msg) + if msg == "up_light_on" then + node.name = "elevatorparts:callbutton_both_upon" + minetest.swap_node(pos,node) + elseif msg == "down_light_on" then + node.name = "elevatorparts:callbutton_both_downon" + minetest.swap_node(pos,node) + end + end + }, + }, +}) + +minetest.register_node("elevatorparts:callbutton_both_upon",{ + description = "Up and Down Call Buttons (programmed, up on, down off state - you hacker you!)", + groups = { + dig_immediate = 2, + not_in_creative_inventory = 1, + }, + tiles = { + "elevatorparts_generic_bg.png", + "elevatorparts_generic_bg.png", + "elevatorparts_generic_bg.png", + "elevatorparts_generic_bg.png", + "elevatorparts_generic_bg.png", + "[combine:64x64:0,0=elevatorparts_generic_bg.png:22,24=elevatorparts_callbutton_bg.png:24,28=elevatorparts_callbutton_up.png:24,43=elevatorparts_callbutton_down.png:33,29=elevatorparts_callbutton_light.png", + }, + drop = "elevatorparts:callbutton_both", + paramtype = "light", + paramtype2 = "facedir", + is_ground_content = false, + sunlight_propagates = true, + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, 0.48, 0.5, 0.5, 0.5 }, + {-0.16, -0.37, 0.45, 0.17, 0.13, 0.48}, + }, + }, + on_punch = function(pos) + digiline:receptor_send(pos,digiline.rules.default,minetest.get_meta(pos):get_string("channel"),"up_press") + end, + on_rightclick = function(pos) + digiline:receptor_send(pos,digiline.rules.default,minetest.get_meta(pos):get_string("channel"),"down_press") + end, + digiline = { + receptor = {}, + effector = { + action = function(pos,node,channel,msg) + local meta = minetest.get_meta(pos) + if meta:get_string("channel") ~= channel or type(msg) ~= "string" then return end + msg = string.lower(msg) + if msg == "up_light_off" then + node.name = "elevatorparts:callbutton_both_off" + minetest.swap_node(pos,node) + elseif msg == "down_light_on" then + node.name = "elevatorparts:callbutton_both_on" + minetest.swap_node(pos,node) + end + end + }, + }, +}) + +minetest.register_node("elevatorparts:callbutton_both_downon",{ + description = "Up and Down Call Buttons (programmed, up off, down on state - you hacker you!)", + groups = { + dig_immediate = 2, + not_in_creative_inventory = 1, + }, + tiles = { + "elevatorparts_generic_bg.png", + "elevatorparts_generic_bg.png", + "elevatorparts_generic_bg.png", + "elevatorparts_generic_bg.png", + "elevatorparts_generic_bg.png", + "[combine:64x64:0,0=elevatorparts_generic_bg.png:22,24=elevatorparts_callbutton_bg.png:24,28=elevatorparts_callbutton_up.png:24,43=elevatorparts_callbutton_down.png:33,44=elevatorparts_callbutton_light.png", + }, + drop = "elevatorparts:callbutton_both", + paramtype = "light", + paramtype2 = "facedir", + is_ground_content = false, + sunlight_propagates = true, + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, 0.48, 0.5, 0.5, 0.5 }, + {-0.16, -0.37, 0.45, 0.17, 0.13, 0.48}, + }, + }, + on_punch = function(pos) + digiline:receptor_send(pos,digiline.rules.default,minetest.get_meta(pos):get_string("channel"),"up_press") + end, + on_rightclick = function(pos) + digiline:receptor_send(pos,digiline.rules.default,minetest.get_meta(pos):get_string("channel"),"down_press") + end, + digiline = { + receptor = {}, + effector = { + action = function(pos,node,channel,msg) + local meta = minetest.get_meta(pos) + if meta:get_string("channel") ~= channel or type(msg) ~= "string" then return end + msg = string.lower(msg) + if msg == "up_light_on" then + node.name = "elevatorparts:callbutton_both_on" + minetest.swap_node(pos,node) + elseif msg == "down_light_off" then + node.name = "elevatorparts:callbutton_both_off" + minetest.swap_node(pos,node) + end + end + }, + }, +}) + +minetest.register_node("elevatorparts:callbutton_both_on",{ + description = "Up and Down Call Buttons (programmed, both on state - you hacker you!)", + groups = { + dig_immediate = 2, + not_in_creative_inventory = 1, + }, + tiles = { + "elevatorparts_generic_bg.png", + "elevatorparts_generic_bg.png", + "elevatorparts_generic_bg.png", + "elevatorparts_generic_bg.png", + "elevatorparts_generic_bg.png", + "[combine:64x64:0,0=elevatorparts_generic_bg.png:22,24=elevatorparts_callbutton_bg.png:24,28=elevatorparts_callbutton_up.png:24,43=elevatorparts_callbutton_down.png:33,29=elevatorparts_callbutton_light.png:33,44=elevatorparts_callbutton_light.png", + }, + drop = "elevatorparts:callbutton_both", + paramtype = "light", + paramtype2 = "facedir", + is_ground_content = false, + sunlight_propagates = true, + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, 0.48, 0.5, 0.5, 0.5 }, + {-0.16, -0.37, 0.45, 0.17, 0.13, 0.48}, + }, + }, + on_punch = function(pos) + digiline:receptor_send(pos,digiline.rules.default,minetest.get_meta(pos):get_string("channel"),"up_press") + end, + on_rightclick = function(pos) + digiline:receptor_send(pos,digiline.rules.default,minetest.get_meta(pos):get_string("channel"),"down_press") + end, + digiline = { + receptor = {}, + effector = { + action = function(pos,node,channel,msg) + local meta = minetest.get_meta(pos) + if meta:get_string("channel") ~= channel or type(msg) ~= "string" then return end + msg = string.lower(msg) + if msg == "up_light_off" then + node.name = "elevatorparts:callbutton_both_downon" + minetest.swap_node(pos,node) + elseif msg == "down_light_off" then + node.name = "elevatorparts:callbutton_both_upon" + minetest.swap_node(pos,node) + end + end + }, + }, +}) + +local chars = { + ["0"] = "elevatorparts_pi_0.png", + ["1"] = "elevatorparts_pi_1.png", + ["2"] = "elevatorparts_pi_2.png", + ["3"] = "elevatorparts_pi_3.png", + ["4"] = "elevatorparts_pi_4.png", + ["5"] = "elevatorparts_pi_5.png", + ["6"] = "elevatorparts_pi_6.png", + ["7"] = "elevatorparts_pi_7.png", + ["8"] = "elevatorparts_pi_8.png", + ["9"] = "elevatorparts_pi_9.png", + ["a"] = "elevatorparts_pi_a.png", + ["b"] = "elevatorparts_pi_b.png", + ["c"] = "elevatorparts_pi_c.png", + ["d"] = "elevatorparts_pi_d.png", + ["e"] = "elevatorparts_pi_e.png", + ["f"] = "elevatorparts_pi_f.png", + ["g"] = "elevatorparts_pi_9.png", + ["h"] = "elevatorparts_pi_h.png", + ["i"] = "elevatorparts_pi_1.png", + ["j"] = "elevatorparts_pi_j.png", + ["l"] = "elevatorparts_pi_l.png", + ["n"] = "elevatorparts_pi_n.png", + ["o"] = "elevatorparts_pi_0.png", + ["p"] = "elevatorparts_pi_p.png", + ["r"] = "elevatorparts_pi_r.png", + ["s"] = "elevatorparts_pi_5.png", + ["t"] = "elevatorparts_pi_t.png", + ["u"] = "elevatorparts_pi_u.png", + ["y"] = "elevatorparts_pi_y.png", + ["z"] = "elevatorparts_pi_2.png", + ["-"] = "elevatorparts_pi_dash.png", + [" "] = "elevatorparts_transparent.png", +} + +minetest.register_entity("elevatorparts:pi_entity",{ + initial_properties = { + visual = "upright_sprite", + physical = false, + collisionbox = {0,0,0,0,0,0,}, + textures = {"elevatorparts_transparent.png",}, + }, +}) + +local function removeEntity(pos) + local entitiesNearby = minetest.get_objects_inside_radius(pos,0.5) + for _,i in pairs(entitiesNearby) do + if i:get_luaentity() and i:get_luaentity().name == "elevatorparts:pi_entity" then + i:remove() + end + end +end + +local function generateTexture(text,uparrow,downarrow) + local out = string.format("[combine:64x64:0,0=elevatorparts_transparent.png") + local pos = 0 + for i=1,string.len(text),1 do + local char = string.sub(text,i,i) + out = out..string.format(":%d,7=%s",pos*12+22,chars[char] or chars["-"]) + pos = pos+1 + end + if uparrow then out = out..":6,7=elevatorparts_pi_arrow_up.png" + elseif downarrow then out = out..":6,7=elevatorparts_pi_arrow_down.png" end + return out +end + +local function updateDisplay(pos) + removeEntity(pos) + local meta = minetest.get_meta(pos) + local text = meta:get_string("text") + local entity = minetest.add_entity(pos,"elevatorparts:pi_entity") + local nname = minetest.get_node(pos).name + local fdir = minetest.facedir_to_dir(minetest.get_node(pos).param2) + local uparrow = meta:get_int("uparrow") > 0 + local downarrow = meta:get_int("downarrow") > 0 + local etex = generateTexture(text,uparrow,downarrow) + entity:set_properties({textures={etex}}) + entity:set_yaw((fdir.x ~= 0) and math.pi/2 or 0) + entity:setpos(vector.add(pos,vector.multiply(fdir,0.45))) +end + +local pi_ignore = { + up_light_on = true, + up_light_off = true, + down_light_on = true, + down_light_off = true, + up_press = true, + down_press = true, + arrow_up = true, + arrow_down = true, + arrow_off = true, +} + +minetest.register_node("elevatorparts:pilantern_up_off",{ + description = "PI + Up Lantern Combo", + groups = { + dig_immediate = 2, + elevatorparts_pi_lbm = 1, + }, + tiles = { + "elevatorparts_generic_bg.png", + "elevatorparts_generic_bg.png", + "elevatorparts_generic_bg.png", + "elevatorparts_generic_bg.png", + "elevatorparts_generic_bg.png", + "[combine:64x64:0,0=elevatorparts_pilantern_bg.png:25,37=elevatorparts_lantern_up_off.png", + }, + paramtype = "light", + paramtype2 = "facedir", + is_ground_content = false, + sunlight_propagates = true, + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, 0.48, 0.5, 0.5, 0.5 }, + }, + }, + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("formspec","field[channel;Channel;${channel}") + end, + on_receive_fields = function(pos,_,fields,sender) + local name = sender:get_player_name() + if minetest.is_protected(pos,name) and not minetest.check_player_privs(name,{protection_bypass=true}) then + minetest.record_protection_violation(pos,name) + return + end + local meta = minetest.get_meta(pos) + if fields.channel then + meta:set_string("channel",fields.channel) + end + end, + digiline = { + receptor = {}, + effector = { + action = function(pos,node,channel,msg) + local meta = minetest.get_meta(pos) + if meta:get_string("channel") ~= channel or type(msg) ~= "string" then return end + msg = string.lower(msg) + if msg == "up_light_on" then + node.name = "elevatorparts:pilantern_up_on" + minetest.swap_node(pos,node) + elseif msg == "arrow_up" then + meta:set_int("uparrow",1) + meta:set_int("downarrow",0) + elseif msg == "arrow_down" then + meta:set_int("uparrow",0) + meta:set_int("downarrow",1) + elseif msg == "arrow_off" then + meta:set_int("uparrow",0) + meta:set_int("downarrow",0) + elseif not pi_ignore[msg] then + meta:set_string("text",string.sub(" "..msg,-3,-1)) + end + updateDisplay(pos) + end + }, + }, +}) + +minetest.register_node("elevatorparts:pilantern_up_on",{ + description = "PI + Up Lantern Combo (on state - you hacker you!)", + groups = { + dig_immediate = 2, + not_in_creative_inventory = 1, + elevatorparts_pi_lbm = 1, + }, + tiles = { + "elevatorparts_generic_bg.png", + "elevatorparts_generic_bg.png", + "elevatorparts_generic_bg.png", + "elevatorparts_generic_bg.png", + "elevatorparts_generic_bg.png", + "[combine:64x64:0,0=elevatorparts_pilantern_bg.png:25,37=elevatorparts_lantern_up_on.png", + }, + drop = "elevatorparts:pilantern_up_off", + paramtype = "light", + paramtype2 = "facedir", + is_ground_content = false, + sunlight_propagates = true, + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, 0.48, 0.5, 0.5, 0.5 }, + }, + }, + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("formspec","field[channel;Channel;${channel}") + end, + on_receive_fields = function(pos,_,fields,sender) + local name = sender:get_player_name() + if minetest.is_protected(pos,name) and not minetest.check_player_privs(name,{protection_bypass=true}) then + minetest.record_protection_violation(pos,name) + return + end + local meta = minetest.get_meta(pos) + if fields.channel then + meta:set_string("channel",fields.channel) + end + end, + digiline = { + receptor = {}, + effector = { + action = function(pos,node,channel,msg) + local meta = minetest.get_meta(pos) + if meta:get_string("channel") ~= channel or type(msg) ~= "string" then return end + msg = string.lower(msg) + if msg == "up_light_off" then + node.name = "elevatorparts:pilantern_up_off" + minetest.swap_node(pos,node) + elseif msg == "arrow_up" then + meta:set_int("uparrow",1) + meta:set_int("downarrow",0) + elseif msg == "arrow_down" then + meta:set_int("uparrow",0) + meta:set_int("downarrow",1) + elseif msg == "arrow_off" then + meta:set_int("uparrow",0) + meta:set_int("downarrow",0) + elseif not pi_ignore[msg] then + meta:set_string("text",string.sub(" "..msg,-3,-1)) + end + updateDisplay(pos) + end + }, + }, +}) + +minetest.register_node("elevatorparts:pilantern_down_off",{ + description = "PI + Down Lantern Combo", + groups = { + dig_immediate = 2, + elevatorparts_pi_lbm = 1, + }, + tiles = { + "elevatorparts_generic_bg.png", + "elevatorparts_generic_bg.png", + "elevatorparts_generic_bg.png", + "elevatorparts_generic_bg.png", + "elevatorparts_generic_bg.png", + "[combine:64x64:0,0=elevatorparts_pilantern_bg.png:25,37=elevatorparts_lantern_down_off.png", + }, + paramtype = "light", + paramtype2 = "facedir", + is_ground_content = false, + sunlight_propagates = true, + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, 0.48, 0.5, 0.5, 0.5 }, + }, + }, + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("formspec","field[channel;Channel;${channel}") + end, + on_receive_fields = function(pos,_,fields,sender) + local name = sender:get_player_name() + if minetest.is_protected(pos,name) and not minetest.check_player_privs(name,{protection_bypass=true}) then + minetest.record_protection_violation(pos,name) + return + end + local meta = minetest.get_meta(pos) + if fields.channel then + meta:set_string("channel",fields.channel) + end + end, + digiline = { + receptor = {}, + effector = { + action = function(pos,node,channel,msg) + local meta = minetest.get_meta(pos) + if meta:get_string("channel") ~= channel or type(msg) ~= "string" then return end + msg = string.lower(msg) + if msg == "down_light_on" then + node.name = "elevatorparts:pilantern_down_on" + minetest.swap_node(pos,node) + elseif msg == "arrow_up" then + meta:set_int("uparrow",1) + meta:set_int("downarrow",0) + elseif msg == "arrow_down" then + meta:set_int("uparrow",0) + meta:set_int("downarrow",1) + elseif msg == "arrow_off" then + meta:set_int("uparrow",0) + meta:set_int("downarrow",0) + elseif not pi_ignore[msg] then + meta:set_string("text",string.sub(" "..msg,-3,-1)) + end + updateDisplay(pos) + end + }, + }, +}) + +minetest.register_node("elevatorparts:pilantern_down_on",{ + description = "PI + Down Lantern Combo (on state - you hacker you!)", + groups = { + dig_immediate = 2, + not_in_creative_inventory = 1, + elevatorparts_pi_lbm = 1, + }, + tiles = { + "elevatorparts_generic_bg.png", + "elevatorparts_generic_bg.png", + "elevatorparts_generic_bg.png", + "elevatorparts_generic_bg.png", + "elevatorparts_generic_bg.png", + "[combine:64x64:0,0=elevatorparts_pilantern_bg.png:25,37=elevatorparts_lantern_down_on.png", + }, + drop = "elevatorparts:pilantern_down_off", + paramtype = "light", + paramtype2 = "facedir", + is_ground_content = false, + sunlight_propagates = true, + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, 0.48, 0.5, 0.5, 0.5 }, + }, + }, + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("formspec","field[channel;Channel;${channel}") + end, + on_receive_fields = function(pos,_,fields,sender) + local name = sender:get_player_name() + if minetest.is_protected(pos,name) and not minetest.check_player_privs(name,{protection_bypass=true}) then + minetest.record_protection_violation(pos,name) + return + end + local meta = minetest.get_meta(pos) + if fields.channel then + meta:set_string("channel",fields.channel) + end + end, + digiline = { + receptor = {}, + effector = { + action = function(pos,node,channel,msg) + local meta = minetest.get_meta(pos) + if meta:get_string("channel") ~= channel or type(msg) ~= "string" then return end + msg = string.lower(msg) + if msg == "down_light_off" then + node.name = "elevatorparts:pilantern_down_off" + minetest.swap_node(pos,node) + elseif msg == "arrow_up" then + meta:set_int("uparrow",1) + meta:set_int("downarrow",0) + elseif msg == "arrow_down" then + meta:set_int("uparrow",0) + meta:set_int("downarrow",1) + elseif msg == "arrow_off" then + meta:set_int("uparrow",0) + meta:set_int("downarrow",0) + elseif not pi_ignore[msg] then + meta:set_string("text",string.sub(" "..msg,-3,-1)) + end + updateDisplay(pos) + end + }, + }, +}) + +minetest.register_node("elevatorparts:pilantern_updown_off",{ + description = "PI + Up and Down Lantern Combo", + groups = { + dig_immediate = 2, + elevatorparts_pi_lbm = 1, + }, + tiles = { + "elevatorparts_generic_bg.png", + "elevatorparts_generic_bg.png", + "elevatorparts_generic_bg.png", + "elevatorparts_generic_bg.png", + "elevatorparts_generic_bg.png", + "[combine:64x64:0,0=elevatorparts_pilantern_bg.png:10,37=elevatorparts_lantern_up_off.png:39,37=elevatorparts_lantern_down_off.png", + }, + paramtype = "light", + paramtype2 = "facedir", + is_ground_content = false, + sunlight_propagates = true, + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, 0.48, 0.5, 0.5, 0.5 }, + }, + }, + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("formspec","field[channel;Channel;${channel}") + end, + on_receive_fields = function(pos,_,fields,sender) + local name = sender:get_player_name() + if minetest.is_protected(pos,name) and not minetest.check_player_privs(name,{protection_bypass=true}) then + minetest.record_protection_violation(pos,name) + return + end + local meta = minetest.get_meta(pos) + if fields.channel then + meta:set_string("channel",fields.channel) + end + end, + digiline = { + receptor = {}, + effector = { + action = function(pos,node,channel,msg) + local meta = minetest.get_meta(pos) + if meta:get_string("channel") ~= channel or type(msg) ~= "string" then return end + msg = string.lower(msg) + if msg == "up_light_on" then + node.name = "elevatorparts:pilantern_updown_upon" + minetest.swap_node(pos,node) + elseif msg == "down_light_on" then + node.name = "elevatorparts:pilantern_updown_downon" + minetest.swap_node(pos,node) + elseif msg == "arrow_up" then + meta:set_int("uparrow",1) + meta:set_int("downarrow",0) + elseif msg == "arrow_down" then + meta:set_int("uparrow",0) + meta:set_int("downarrow",1) + elseif msg == "arrow_off" then + meta:set_int("uparrow",0) + meta:set_int("downarrow",0) + elseif not pi_ignore[msg] then + meta:set_string("text",string.sub(" "..msg,-3,-1)) + end + updateDisplay(pos) + end + }, + }, +}) + +minetest.register_node("elevatorparts:pilantern_updown_upon",{ + description = "PI + Up and Down Lantern Combo (up on, down off state - you hacker you!)", + groups = { + dig_immediate = 2, + not_in_creative_inventory = 1, + elevatorparts_pi_lbm = 1, + }, + tiles = { + "elevatorparts_generic_bg.png", + "elevatorparts_generic_bg.png", + "elevatorparts_generic_bg.png", + "elevatorparts_generic_bg.png", + "elevatorparts_generic_bg.png", + "[combine:64x64:0,0=elevatorparts_pilantern_bg.png:10,37=elevatorparts_lantern_up_on.png:39,37=elevatorparts_lantern_down_off.png", + }, + drop = "elevatorparts:pilantern_updown_off", + paramtype = "light", + paramtype2 = "facedir", + is_ground_content = false, + sunlight_propagates = true, + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, 0.48, 0.5, 0.5, 0.5 }, + }, + }, + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("formspec","field[channel;Channel;${channel}") + end, + on_receive_fields = function(pos,_,fields,sender) + local name = sender:get_player_name() + if minetest.is_protected(pos,name) and not minetest.check_player_privs(name,{protection_bypass=true}) then + minetest.record_protection_violation(pos,name) + return + end + local meta = minetest.get_meta(pos) + if fields.channel then + meta:set_string("channel",fields.channel) + end + end, + digiline = { + receptor = {}, + effector = { + action = function(pos,node,channel,msg) + local meta = minetest.get_meta(pos) + if meta:get_string("channel") ~= channel or type(msg) ~= "string" then return end + msg = string.lower(msg) + if msg == "up_light_off" then + node.name = "elevatorparts:pilantern_updown_off" + minetest.swap_node(pos,node) + elseif msg == "down_light_on" then + node.name = "elevatorparts:pilantern_updown_bothon" + minetest.swap_node(pos,node) + elseif msg == "arrow_up" then + meta:set_int("uparrow",1) + meta:set_int("downarrow",0) + elseif msg == "arrow_down" then + meta:set_int("uparrow",0) + meta:set_int("downarrow",1) + elseif msg == "arrow_off" then + meta:set_int("uparrow",0) + meta:set_int("downarrow",0) + elseif not pi_ignore[msg] then + meta:set_string("text",string.sub(" "..msg,-3,-1)) + end + updateDisplay(pos) + end + }, + }, +}) + +minetest.register_node("elevatorparts:pilantern_updown_downon",{ + description = "PI + Up and Down Lantern Combo (up off, down on state - you hacker you!)", + groups = { + dig_immediate = 2, + not_in_creative_inventory = 1, + elevatorparts_pi_lbm = 1, + }, + tiles = { + "elevatorparts_generic_bg.png", + "elevatorparts_generic_bg.png", + "elevatorparts_generic_bg.png", + "elevatorparts_generic_bg.png", + "elevatorparts_generic_bg.png", + "[combine:64x64:0,0=elevatorparts_pilantern_bg.png:10,37=elevatorparts_lantern_up_off.png:39,37=elevatorparts_lantern_down_on.png", + }, + drop = "elevatorparts:pilantern_updown_off", + paramtype = "light", + paramtype2 = "facedir", + is_ground_content = false, + sunlight_propagates = true, + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, 0.48, 0.5, 0.5, 0.5 }, + }, + }, + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("formspec","field[channel;Channel;${channel}") + end, + on_receive_fields = function(pos,_,fields,sender) + local name = sender:get_player_name() + if minetest.is_protected(pos,name) and not minetest.check_player_privs(name,{protection_bypass=true}) then + minetest.record_protection_violation(pos,name) + return + end + local meta = minetest.get_meta(pos) + if fields.channel then + meta:set_string("channel",fields.channel) + end + end, + digiline = { + receptor = {}, + effector = { + action = function(pos,node,channel,msg) + local meta = minetest.get_meta(pos) + if meta:get_string("channel") ~= channel or type(msg) ~= "string" then return end + msg = string.lower(msg) + if msg == "up_light_on" then + node.name = "elevatorparts:pilantern_updown_bothon" + minetest.swap_node(pos,node) + elseif msg == "down_light_off" then + node.name = "elevatorparts:pilantern_updown_off" + minetest.swap_node(pos,node) + elseif msg == "arrow_up" then + meta:set_int("uparrow",1) + meta:set_int("downarrow",0) + elseif msg == "arrow_down" then + meta:set_int("uparrow",0) + meta:set_int("downarrow",1) + elseif msg == "arrow_off" then + meta:set_int("uparrow",0) + meta:set_int("downarrow",0) + elseif not pi_ignore[msg] then + meta:set_string("text",string.sub(" "..msg,-3,-1)) + end + updateDisplay(pos) + end + }, + }, +}) + +minetest.register_node("elevatorparts:pilantern_updown_bothon",{ + description = "PI + Up and Down Lantern Combo (both on state - you hacker you!)", + groups = { + dig_immediate = 2, + not_in_creative_inventory = 1, + elevatorparts_pi_lbm = 1, + }, + tiles = { + "elevatorparts_generic_bg.png", + "elevatorparts_generic_bg.png", + "elevatorparts_generic_bg.png", + "elevatorparts_generic_bg.png", + "elevatorparts_generic_bg.png", + "[combine:64x64:0,0=elevatorparts_pilantern_bg.png:10,37=elevatorparts_lantern_up_on.png:39,37=elevatorparts_lantern_down_on.png", + }, + drop = "elevatorparts:pilantern_updown_off", + paramtype = "light", + paramtype2 = "facedir", + is_ground_content = false, + sunlight_propagates = true, + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, 0.48, 0.5, 0.5, 0.5 }, + }, + }, + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("formspec","field[channel;Channel;${channel}") + end, + on_receive_fields = function(pos,_,fields,sender) + local name = sender:get_player_name() + if minetest.is_protected(pos,name) and not minetest.check_player_privs(name,{protection_bypass=true}) then + minetest.record_protection_violation(pos,name) + return + end + local meta = minetest.get_meta(pos) + if fields.channel then + meta:set_string("channel",fields.channel) + end + end, + digiline = { + receptor = {}, + effector = { + action = function(pos,node,channel,msg) + local meta = minetest.get_meta(pos) + if meta:get_string("channel") ~= channel or type(msg) ~= "string" then return end + msg = string.lower(msg) + if msg == "up_light_off" then + node.name = "elevatorparts:pilantern_updown_downon" + minetest.swap_node(pos,node) + elseif msg == "down_light_off" then + node.name = "elevatorparts:pilantern_updown_upon" + minetest.swap_node(pos,node) + elseif msg == "arrow_up" then + meta:set_int("uparrow",1) + meta:set_int("downarrow",0) + elseif msg == "arrow_down" then + meta:set_int("uparrow",0) + meta:set_int("downarrow",1) + elseif msg == "arrow_off" then + meta:set_int("uparrow",0) + meta:set_int("downarrow",0) + elseif not pi_ignore[msg] then + meta:set_string("text",string.sub(" "..msg,-3,-1)) + end + updateDisplay(pos) + end + }, + }, +}) + +minetest.register_lbm({ + name = "elevatorparts:pi_respawn", + label = "Respawn PI display entities", + nodenames = {"group:elevatorparts_pi_lbm"}, + run_at_every_load = true, + action = updateDisplay, +}) + +minetest.register_craft({ + output = "elevatorparts:callbutton_up", + recipe = { + {"basic_materials:plastic_sheet","mesecons_button:button_off","basic_materials:plastic_sheet"}, + {"mesecons_luacontroller:luacontroller0000","mesecons_lightstone:lightstone_blue_off","basic_materials:plastic_sheet"}, + {"basic_materials:plastic_sheet","","basic_materials:plastic_sheet"}, + }, +}) + +minetest.register_craft({ + output = "elevatorparts:callbutton_down", + recipe = { + {"basic_materials:plastic_sheet","","basic_materials:plastic_sheet"}, + {"mesecons_luacontroller:luacontroller0000","mesecons_lightstone:lightstone_blue_off","basic_materials:plastic_sheet"}, + {"basic_materials:plastic_sheet","mesecons_button:button_off","basic_materials:plastic_sheet"}, + }, +}) + +minetest.register_craft({ + output = "elevatorparts:callbutton_both", + recipe = { + {"basic_materials:plastic_sheet","mesecons_button:button_off","basic_materials:plastic_sheet"}, + {"mesecons_luacontroller:luacontroller0000","mesecons_lightstone:lightstone_blue_off","basic_materials:plastic_sheet"}, + {"basic_materials:plastic_sheet","mesecons_button:button_off","basic_materials:plastic_sheet"}, + }, +}) + +minetest.register_craft({ + output = "elevatorparts:pilantern_up_off", + recipe = { + {"basic_materials:plastic_sheet","basic_materials:plastic_sheet","basic_materials:plastic_sheet"}, + {"mesecons_luacontroller:luacontroller0000","digilines:lcd","basic_materials:plastic_sheet"}, + {"basic_materials:plastic_sheet","mesecons_lightstone:lightstone_green_off","basic_materials:plastic_sheet"}, + }, +}) + +minetest.register_craft({ + output = "elevatorparts:pilantern_down_off", + recipe = { + {"basic_materials:plastic_sheet","basic_materials:plastic_sheet","basic_materials:plastic_sheet"}, + {"mesecons_luacontroller:luacontroller0000","digilines:lcd","basic_materials:plastic_sheet"}, + {"basic_materials:plastic_sheet","mesecons_lightstone:lightstone_red_off","basic_materials:plastic_sheet"}, + }, +}) + +minetest.register_craft({ + output = "elevatorparts:pilantern_updown_off", + recipe = { + {"basic_materials:plastic_sheet","basic_materials:plastic_sheet","basic_materials:plastic_sheet"}, + {"mesecons_luacontroller:luacontroller0000","digilines:lcd","basic_materials:plastic_sheet"}, + {"mesecons_lightstone:lightstone_green_off","basic_materials:plastic_sheet","mesecons_lightstone:lightstone_red_off"}, + }, +}) -- cgit v1.2.3