invisiblelamp.lua 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. --[[
  2. Tubelib Addons 2
  3. ================
  4. Copyright (C) 2017-2020 Joachim Stolberg
  5. AGPL v3
  6. See LICENSE.txt for more information
  7. invisiblelamp.lua:
  8. ]]--
  9. -- Load support for I18n
  10. local S = tubelib_addons2.S
  11. local function switch_on(pos, node)
  12. node.name = "tubelib_addons2:invisiblelamp_on"
  13. minetest.swap_node(pos, node)
  14. end
  15. local function switch_off(pos, node)
  16. node.name = "tubelib_addons2:invisiblelamp"
  17. minetest.swap_node(pos, node)
  18. local pos1 = {x=pos.x-5, y=pos.y-5, z=pos.z-5}
  19. local pos2 = {x=pos.x+5, y=pos.y+5, z=pos.z+5}
  20. minetest.fix_light(pos1, pos2)
  21. end
  22. minetest.register_node("tubelib_addons2:invisiblelamp", {
  23. description = S("Tubelib Invisible Lamp"),
  24. drawtype = "glasslike_framed_optional",
  25. tiles = {"tubelib_addons2_invisiblelamp.png"},
  26. inventory_image = 'tubelib_addons2_invisiblelamp_inventory.png',
  27. after_place_node = function(pos, placer)
  28. local number = tubelib.add_node(pos, "tubelib_addons2:invisiblelamp")
  29. local meta = minetest.get_meta(pos)
  30. meta:set_string("infotext", S("Tubelib Invisible Lamp").." "..number)
  31. end,
  32. on_rightclick = function(pos, node, clicker)
  33. if not minetest.is_protected(pos, clicker:get_player_name()) then
  34. switch_on(pos, node)
  35. end
  36. end,
  37. after_dig_node = function(pos)
  38. tubelib.remove_node(pos)
  39. end,
  40. paramtype = "light",
  41. light_source = 0,
  42. sunlight_propagates = true,
  43. walkable = false,
  44. is_ground_content = false,
  45. groups = {cracky = 3, oddly_breakable_by_hand = 3},
  46. sounds = default.node_sound_glass_defaults(),
  47. })
  48. minetest.register_node("tubelib_addons2:invisiblelamp_on", {
  49. description = S("Tubelib Invisible Lamp"),
  50. drawtype = "glasslike_framed_optional",
  51. tiles = {"tubelib_addons2_invisiblelamp.png"},
  52. on_rightclick = function(pos, node, clicker)
  53. if not minetest.is_protected(pos, clicker:get_player_name()) then
  54. switch_off(pos, node)
  55. end
  56. end,
  57. after_dig_node = function(pos)
  58. tubelib.remove_node(pos)
  59. end,
  60. paramtype = "light",
  61. light_source = minetest.LIGHT_MAX,
  62. sunlight_propagates = true,
  63. walkable = false,
  64. is_ground_content = false,
  65. drop = "tubelib_addons2:invisiblelamp",
  66. groups = {cracky = 3, oddly_breakable_by_hand = 3, not_in_creative_inventory=1},
  67. sounds = default.node_sound_glass_defaults(),
  68. })
  69. minetest.register_craft({
  70. output = "tubelib_addons2:invisiblelamp 2",
  71. recipe = {
  72. {"", "default:torch", ""},
  73. {"default:torch", "tubelib:wlanchip", "default:torch"},
  74. {"", "default:torch", ""},
  75. }
  76. })
  77. tubelib.register_node("tubelib_addons2:invisiblelamp", {"tubelib_addons2:invisiblelamp_on"}, {
  78. on_recv_message = function(pos, topic, payload)
  79. local node = minetest.get_node(pos)
  80. if topic == "on" then
  81. switch_on(pos, node)
  82. elseif topic == "off" then
  83. switch_off(pos, node)
  84. end
  85. end,
  86. })