migrate.lua 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. -- for lazy programmers
  2. local S = function(pos) if pos then return minetest.pos_to_string(pos) end end
  3. local P = minetest.string_to_pos
  4. local M = minetest.get_meta
  5. local Tube = tubelib.Tube
  6. local TubesTranslation = {
  7. ["tubelib:tube1"] = {[0]=
  8. {12, "S"},
  9. {21, "S"},
  10. {12, "S"},
  11. {21, "S"},
  12. },
  13. ["tubelib:tube2"] = {[0]=
  14. { 4, "S"},
  15. { 4, "S"},
  16. { 4, "S"},
  17. { 4, "S"},
  18. },
  19. ["tubelib:tube3"] = {[0]=
  20. { 5, "A"},
  21. {14, "A"},
  22. {11, "A"},
  23. { 7, "A"},
  24. },
  25. ["tubelib:tube4"] = {[0]=
  26. { 0, "A"},
  27. {15, "A"},
  28. { 8, "A"},
  29. { 3, "A"},
  30. },
  31. ["tubelib:tube5"] = {[0]=
  32. {20, "A"},
  33. {13, "A"},
  34. {10, "A"},
  35. {19, "A"},
  36. },
  37. }
  38. minetest.register_lbm({
  39. label = "[Tubelib] tubes migration",
  40. name = "tubelib:migrate",
  41. nodenames = {
  42. "tubelib:tube1",
  43. "tubelib:tube2",
  44. "tubelib:tube3",
  45. "tubelib:tube4",
  46. "tubelib:tube5",
  47. "tubelib_addons3:teleporter",
  48. },
  49. run_at_every_load = true,
  50. action = function(pos, node)
  51. if node.name == "tubelib_addons3:teleporter" then
  52. local meta = M(pos)
  53. local peer = meta:get_string("peer")
  54. if peer ~= "" then
  55. meta:set_string("tele_pos", peer)
  56. local peer_pos = P(peer)
  57. local _,node = Tube:get_node(peer_pos)
  58. local tube_dir = ((3 + (node.param2 % 4)) % 4) + 1
  59. --print("migrate "..node.name.." at "..S(pos))
  60. meta:set_string("peer", nil)
  61. if tube_dir then
  62. meta:set_int("tube_dir", tube_dir)
  63. end
  64. tube_dir = Tube:get_primary_dir(pos)
  65. Tube:tool_repair_tube(Tube:get_pos(pos, tube_dir))
  66. end
  67. else
  68. local items = TubesTranslation[node.name][node.param2]
  69. if items then
  70. --print("migrate "..node.name.." at "..S(pos))
  71. local param2, ntype = items[1], items[2]
  72. minetest.set_node(pos, {name = "tubelib:tube"..ntype, param2 = param2})
  73. end
  74. end
  75. end
  76. })
  77. -- legacy tube, to be converted after placed
  78. minetest.register_node("tubelib:tube1", {
  79. description = "Tubelib Tube (old)",
  80. tiles = { -- Top, base, right, left, front, back
  81. "tubelib_tube.png^tubelib_defect.png^[transformR90",
  82. "tubelib_tube.png^tubelib_defect.png^[transformR90",
  83. "tubelib_tube.png^tubelib_defect.png",
  84. "tubelib_tube.png^tubelib_defect.png",
  85. "tubelib_hole.png",
  86. "tubelib_hole.png",
  87. },
  88. after_place_node = function(pos, placer, itemstack, pointed_thing)
  89. if not Tube:after_place_tube(pos, placer, pointed_thing) then
  90. minetest.remove_node(pos)
  91. return true
  92. end
  93. return false
  94. end,
  95. after_dig_node = function(pos, oldnode, oldmetadata, digger)
  96. Tube:after_dig_tube(pos, oldnode, oldmetadata)
  97. end,
  98. paramtype2 = "facedir",
  99. drawtype = "nodebox",
  100. node_box = {
  101. type = "fixed",
  102. fixed = {
  103. {-2/8, -2/8, -4/8, 2/8, 2/8, 4/8},
  104. },
  105. },
  106. selection_box = {
  107. type = "fixed",
  108. fixed = { -1/4, -1/4, -1/2, 1/4, 1/4, 1/2 },
  109. },
  110. collision_box = {
  111. type = "fixed",
  112. fixed = { -1/4, -1/4, -1/2, 1/4, 1/4, 1/2 },
  113. },
  114. on_rotate = screwdriver.disallow,
  115. paramtype = "light",
  116. sunlight_propagates = true,
  117. is_ground_content = false,
  118. groups = {choppy=2, cracky=3, stone=1, not_in_creative_inventory=1},
  119. sounds = default.node_sound_wood_defaults(),
  120. })
  121. minetest.register_craft({
  122. type = "shapeless",
  123. output = "tubelib:tubeS",
  124. recipe = {"tubelib:tube1"},
  125. })