colorlamp.lua 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. --[[
  2. Tubelib Addons 2
  3. ================
  4. Copyright (C) 2017-2020 Joachim Stolberg
  5. AGPL v3
  6. See LICENSE.txt for more information
  7. colorlamp.lua:
  8. ]]--
  9. -- Load support for I18n
  10. local S = tubelib_addons2.S
  11. local tColors = {"#0000FF", "#00FFFF", "#00FF00", "#FFFF00", "#FF0000", "#FF00FF",
  12. "#FFFFFF", "#000000", "#3BC23B", "#CA3131", "#FFA500", "#FFC0CB"}
  13. local sColor = "1,2,3,4,5,6,7,8,9,10,11,12"
  14. local function switch_node(pos, num, player)
  15. if player == nil or not minetest.is_protected(pos, player:get_player_name()) then
  16. local meta = minetest.get_meta(pos)
  17. local node = minetest.get_node(pos)
  18. node.name = "tubelib_addons2:lamp"..num
  19. minetest.swap_node(pos, node)
  20. local number = meta:get_int("number")
  21. number = string.format("%.04u", number)
  22. meta:set_string("infotext", S("Tubelib Color Lamp").." "..number)
  23. if num ~= "" then
  24. meta:set_int("color", num)
  25. end
  26. end
  27. end
  28. minetest.register_node("tubelib_addons2:lamp", {
  29. description = S("Tubelib Color Lamp"),
  30. tiles = {"tubelib_addons2_lamp.png^[colorize:#000000:100"},
  31. after_place_node = function(pos, placer)
  32. local number = tubelib.add_node(pos, "tubelib_addons2:lamp")
  33. local meta = minetest.get_meta(pos)
  34. meta:set_int("number", number)
  35. switch_node(pos, "", placer)
  36. meta:set_string("formspec", "size[3,2]"..
  37. "label[0,0;Select color]"..
  38. "dropdown[0,0.5;3;type;"..sColor..";1]"..
  39. "button_exit[0.5,1.5;2,1;exit;"..S("Save").."]")
  40. meta:set_int("color", 1)
  41. end,
  42. on_receive_fields = function(pos, formname, fields, player)
  43. local meta = minetest.get_meta(pos)
  44. if fields.type then
  45. switch_node(pos, fields.type, player)
  46. end
  47. if fields.exit then
  48. meta:set_string("formspec", nil, player)
  49. end
  50. end,
  51. on_rightclick = function(pos, node, clicker)
  52. local meta = minetest.get_meta(pos)
  53. switch_node(pos, meta:get_int("color"), clicker)
  54. end,
  55. after_dig_node = function(pos)
  56. tubelib.remove_node(pos)
  57. end,
  58. paramtype = 'light',
  59. sunlight_propagates = true,
  60. sounds = default.node_sound_stone_defaults(),
  61. groups = {choppy=2, cracky=1},
  62. is_ground_content = false,
  63. })
  64. tubelib.register_node("tubelib_addons2:lamp", {}, {
  65. on_recv_message = function(pos, topic, payload)
  66. if topic == "on" then
  67. local meta = minetest.get_meta(pos)
  68. switch_node(pos, meta:get_int("color") or "", nil)
  69. elseif topic == "off" then
  70. switch_node(pos, "", nil)
  71. end
  72. end,
  73. })
  74. minetest.register_craft({
  75. output = "tubelib_addons2:lamp 2",
  76. recipe = {
  77. {"wool:green", "wool:red", "wool:blue"},
  78. {"tubelib:wlanchip", "default:coal_lump", "tubelib:wlanchip"},
  79. {"group:wood", "", "group:wood"},
  80. },
  81. })
  82. for idx,color in ipairs(tColors) do
  83. minetest.register_node("tubelib_addons2:lamp"..idx, {
  84. description = S("Tubelib Color Lamp"),
  85. tiles = {
  86. "tubelib_addons2_lamp.png^[colorize:"..color..":120",
  87. },
  88. on_receive_fields = function(pos, formname, fields, player)
  89. local meta = minetest.get_meta(pos)
  90. if fields.type then
  91. switch_node(pos, fields.type, player)
  92. end
  93. if fields.exit then
  94. meta:set_string("formspec", nil)
  95. end
  96. end,
  97. on_rightclick = function(pos, node, clicker)
  98. switch_node(pos, "", clicker)
  99. end,
  100. after_dig_node = function(pos)
  101. tubelib.remove_node(pos)
  102. end,
  103. paramtype = 'light',
  104. light_source = minetest.LIGHT_MAX,
  105. sounds = default.node_sound_stone_defaults(),
  106. groups = {choppy=2, cracky=1, not_in_creative_inventory=1},
  107. is_ground_content = false,
  108. drop = "tubelib_addons2:lamp"
  109. })
  110. end