logic_not.lua 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. --[[
  2. Tubelib Addons 2
  3. ================
  4. Copyright (C) 2017-2020 Joachim Stolberg
  5. AGPL v3
  6. See LICENSE.txt for more information
  7. logic_not.lua:
  8. ]]--
  9. -- Load support for I18n
  10. local S = tubelib_addons2.S
  11. local function formspec(meta)
  12. local numbers = meta:get_string("numbers")
  13. return "size[7,5]"..
  14. "field[0.5,2;6,1;number;"..S("Destination node numbers")..";"..numbers.."]" ..
  15. "button_exit[1,3;2,1;exit;"..S("Save").."]"
  16. end
  17. minetest.register_node("tubelib_addons2:logic_not", {
  18. description = S("Tubelib Logic Not"),
  19. tiles = {
  20. -- up, down, right, left, back, front
  21. 'tubelib_front.png',
  22. 'tubelib_front.png',
  23. 'tubelib_front.png^tubelib_addon2_logic_not.png',
  24. },
  25. after_place_node = function(pos, placer)
  26. local meta = minetest.get_meta(pos)
  27. local own_number = tubelib.add_node(pos, "tubelib_addons2:logic_not")
  28. meta:set_string("own_number", own_number)
  29. meta:set_string("formspec", formspec(meta))
  30. meta:set_string("infotext", S("Tubelib Logic Not").." "..own_number..S(": not connected"))
  31. meta:set_string("owner", placer:get_player_name())
  32. end,
  33. on_receive_fields = function(pos, formname, fields, player)
  34. local meta = minetest.get_meta(pos)
  35. local owner = meta:get_string("owner")
  36. if owner ~= player:get_player_name() then
  37. return
  38. end
  39. if tubelib.check_numbers(fields.number) then
  40. meta:set_string("numbers", fields.number)
  41. local own_number = meta:get_string("own_number")
  42. meta:set_string("infotext", S("Tubelib Logic Not").." "..own_number..S(": connected with").." "..fields.number)
  43. meta:set_string("formspec", formspec(meta))
  44. end
  45. end,
  46. after_dig_node = function(pos)
  47. tubelib.remove_node(pos)
  48. end,
  49. paramtype = "light",
  50. sunlight_propagates = true,
  51. paramtype2 = "facedir",
  52. groups = {choppy=2, cracky=2, crumbly=2},
  53. is_ground_content = false,
  54. sounds = default.node_sound_stone_defaults(),
  55. })
  56. minetest.register_craft({
  57. output = "tubelib_addons2:logic_not",
  58. recipe = {
  59. {"", "tubelib:wlanchip", ""},
  60. {"group:wood", "", "group:wood"},
  61. {"", "tubelib:wlanchip", ""},
  62. },
  63. })
  64. tubelib.register_node("tubelib_addons2:logic_not", {}, {
  65. on_recv_message = function(pos, topic, payload)
  66. if tubelib.data_not_corrupted(pos) then
  67. local meta = minetest.get_meta(pos)
  68. local owner = meta:get_string("owner")
  69. local numbers = meta:get_string("numbers")
  70. local own_number = meta:get_string("own_number")
  71. if topic == "set_numbers" then
  72. meta:set_string("infotext", S("Tubelib Logic Not").." "..own_number..S(": connected with").." "..payload)
  73. meta:set_string("numbers", payload)
  74. meta:set_string("formspec", formspec(meta))
  75. return true
  76. elseif topic == "on" then
  77. return tubelib.send_message(numbers, owner, nil, "off", payload)
  78. elseif topic == "off" then
  79. return tubelib.send_message(numbers, owner, nil, "on", payload)
  80. end
  81. end
  82. end,
  83. })