jdoors2.lua 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297
  1. local doors = {
  2. {"my_sliding_doors:door1a","my_sliding_doors:door1b","my_sliding_doors:door1c","my_sliding_doors:door1d","1","White Right"},
  3. {"my_sliding_doors:door2a","my_sliding_doors:door2b","my_sliding_doors:door2c","my_sliding_doors:door2d","2","Flower Right"},
  4. {"my_sliding_doors:door3a","my_sliding_doors:door3b","my_sliding_doors:door3c","my_sliding_doors:door3d","3","Framed Right"},
  5. }
  6. for i in ipairs (doors) do
  7. local doora = doors[i][1]
  8. local doorb = doors[i][2]
  9. local doorc = doors[i][3]
  10. local doord = doors[i][4]
  11. local num = doors[i][5]
  12. --local des = doors[i][6]
  13. function onplace(itemstack, placer, pointed_thing)
  14. local pos1 = pointed_thing.above
  15. local pos2 = {x=pos1.x, y=pos1.y + 1, z=pos1.z}
  16. if
  17. not minetest.registered_nodes[minetest.get_node(pos1).name].buildable_to or
  18. not minetest.registered_nodes[minetest.get_node(pos2).name].buildable_to or
  19. not placer or not placer:is_player() then
  20. return
  21. end
  22. local pt = pointed_thing.above
  23. local pt2 = {x=pt.x, y=pt.y, z=pt.z}
  24. pt2.y = pt2.y+1
  25. local p2 = minetest.dir_to_facedir(placer:get_look_dir())
  26. local pt3 = {x=pt.x, y=pt.y, z=pt.z}
  27. if p2 == 0 then
  28. pt3.x = pt3.x-1
  29. elseif p2 == 1 then
  30. pt3.z = pt3.z+1
  31. elseif p2 == 2 then
  32. pt3.x = pt3.x+1
  33. elseif p2 == 3 then
  34. pt3.z = pt3.z-1
  35. end
  36. if minetest.get_node(pt3).name ~= "air" then
  37. minetest.chat_send_player(placer:get_player_name(),"Not enough room")
  38. return
  39. end
  40. if minetest.get_node(pt3).name == doora then
  41. minetest.set_node(pt, {name=doora.."2", param2=p2})
  42. minetest.set_node(pt2, {name=doorb.."2", param2=p2})
  43. else
  44. minetest.set_node(pt, {name=doora.."2", param2=p2})
  45. minetest.set_node(pt2, {name=doorb.."2", param2=p2})
  46. end
  47. end
  48. function afterdestruct(pos, oldnode)
  49. minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z},{name="air"})
  50. end
  51. function rightclick(pos, node, player, itemstack, pointed_thing)
  52. local a = minetest.get_node({x=pos.x, y=pos.y, z=pos.z-1})
  53. local b = minetest.get_node({x=pos.x, y=pos.y, z=pos.z+1})
  54. local c = minetest.get_node({x=pos.x+1, y=pos.y, z=pos.z})
  55. local d = minetest.get_node({x=pos.x-1, y=pos.y, z=pos.z})
  56. if node.name == doora.."2" then
  57. minetest.set_node(pos, {name=doorc.."2", param2=node.param2})
  58. minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z}, {name=doord.."2", param2=node.param2})
  59. elseif node.name == doorc.."2" then
  60. minetest.set_node(pos, {name=doora.."2", param2=node.param2})
  61. minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z}, {name=doorb.."2", param2=node.param2})
  62. end
  63. if a.name == doora then
  64. minetest.set_node({x=pos.x, y=pos.y, z=pos.z-1}, {name=doorc, param2=a.param2})
  65. minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z-1}, {name=doord, param2=a.param2})
  66. end
  67. if b.name == doora then
  68. minetest.set_node({x=pos.x, y=pos.y, z=pos.z+1}, {name=doorc, param2=b.param2})
  69. minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z+1}, {name=doord, param2=b.param2})
  70. end
  71. if c.name == doora then
  72. minetest.set_node({x=pos.x+1, y=pos.y, z=pos.z}, {name=doorc, param2=c.param2})
  73. minetest.set_node({x=pos.x+1,y=pos.y+1,z=pos.z}, {name=doord, param2=c.param2})
  74. end
  75. if d.name == doora then
  76. minetest.set_node({x=pos.x-1, y=pos.y, z=pos.z}, {name=doorc, param2=d.param2})
  77. minetest.set_node({x=pos.x-1,y=pos.y+1,z=pos.z}, {name=doord, param2=d.param2})
  78. end
  79. if a.name == doora.."2" then
  80. minetest.set_node({x=pos.x, y=pos.y, z=pos.z-1}, {name=doorc.."2", param2=a.param2})
  81. minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z-1}, {name=doord.."2", param2=a.param2})
  82. end
  83. if b.name == doora.."2" then
  84. minetest.set_node({x=pos.x, y=pos.y, z=pos.z+1}, {name=doorc.."2", param2=b.param2})
  85. minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z+1}, {name=doord.."2", param2=b.param2})
  86. end
  87. if c.name == doora.."2" then
  88. minetest.set_node({x=pos.x+1, y=pos.y, z=pos.z}, {name=doorc.."2", param2=c.param2})
  89. minetest.set_node({x=pos.x+1,y=pos.y+1,z=pos.z}, {name=doord.."2", param2=c.param2})
  90. end
  91. if d.name == doora.."2" then
  92. minetest.set_node({x=pos.x-1, y=pos.y, z=pos.z}, {name=doorc.."2", param2=d.param2})
  93. minetest.set_node({x=pos.x-1,y=pos.y+1,z=pos.z}, {name=doord.."2", param2=d.param2})
  94. end
  95. if a.name == doorc then
  96. minetest.set_node({x=pos.x, y=pos.y, z=pos.z-1}, {name=doora, param2=a.param2})
  97. minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z-1}, {name=doorb, param2=a.param2})
  98. end
  99. if b.name == doorc then
  100. minetest.set_node({x=pos.x, y=pos.y, z=pos.z+1}, {name=doora, param2=b.param2})
  101. minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z+1}, {name=doorb, param2=b.param2})
  102. end
  103. if c.name == doorc then
  104. minetest.set_node({x=pos.x+1, y=pos.y, z=pos.z}, {name=doora, param2=c.param2})
  105. minetest.set_node({x=pos.x+1,y=pos.y+1,z=pos.z}, {name=doorb, param2=c.param2})
  106. end
  107. if d.name == doorc then
  108. minetest.set_node({x=pos.x-1, y=pos.y, z=pos.z}, {name=doora, param2=d.param2})
  109. minetest.set_node({x=pos.x-1,y=pos.y+1,z=pos.z}, {name=doorb, param2=d.param2})
  110. end
  111. if a.name == doorc.."2" then
  112. minetest.set_node({x=pos.x, y=pos.y, z=pos.z-1}, {name=doora.."2", param2=a.param2})
  113. minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z-1}, {name=doorb.."2", param2=a.param2})
  114. end
  115. if b.name == doorc.."2" then
  116. minetest.set_node({x=pos.x, y=pos.y, z=pos.z+1}, {name=doora.."2", param2=b.param2})
  117. minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z+1}, {name=doorb.."2", param2=b.param2})
  118. end
  119. if c.name == doorc.."2" then
  120. minetest.set_node({x=pos.x+1, y=pos.y, z=pos.z}, {name=doora.."2", param2=c.param2})
  121. minetest.set_node({x=pos.x+1,y=pos.y+1,z=pos.z}, {name=doorb.."2", param2=c.param2})
  122. end
  123. if d.name == doorc.."2" then
  124. minetest.set_node({x=pos.x-1, y=pos.y, z=pos.z}, {name=doora.."2", param2=d.param2})
  125. minetest.set_node({x=pos.x-1,y=pos.y+1,z=pos.z}, {name=doorb.."2", param2=d.param2})
  126. end
  127. end
  128. function afterplace(pos, placer, itemstack, pointed_thing)
  129. minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z},{name=doord,param2=nodeu.param2})
  130. end
  131. minetest.register_node(doora.."2", {
  132. tiles = {
  133. "myjdoors_door"..num.."a_edge.png",
  134. "myjdoors_door"..num.."a_edge.png",
  135. "myjdoors_door"..num.."a_edge.png",
  136. "myjdoors_door"..num.."a_edge.png",
  137. "myjdoors_door"..num.."a_bottom.png^[transformFX",
  138. "myjdoors_door"..num.."a_bottom.png"
  139. },
  140. drawtype = "nodebox",
  141. paramtype = "light",
  142. paramtype2 = "facedir",
  143. drop = doora,
  144. sunlight_propagates = true,
  145. groups = {cracky = 3},
  146. node_box = {
  147. type = "fixed",
  148. fixed = {
  149. {0.375, -0.5, -0.1875, 0.5, 0.5, -0.0625},
  150. {-0.5, -0.5, -0.1875, -0.375, 0.5, -0.0625},
  151. {-0.5, -0.5, -0.1875, 0.5, -0.375, -0.0625},
  152. {-0.5, -0.5, -0.125, 0.5, 0.5, -0.145},
  153. {-0.625, -0.5, -0.0625, -0.5, 0.5, 0.0625},
  154. {-1.5, -0.5, -0.0625, -1.375, 0.5, 0.0625},
  155. {-1.5, -0.5, -0.0625, -0.5, -0.375, 0.0625},
  156. {-1.5, -0.5, 0, -0.5, 0.5, 0.02},
  157. }
  158. },
  159. selection_box = {type = "fixed",fixed = {{-1.5, -0.5, -0.0625, -0.5, 1.5, 0.0625},{-0.5, -0.5, -0.0625, 0.5, 1.5, -0.1875}}},
  160. on_place = onplace,
  161. after_destruct = afterdestruct,
  162. on_rightclick = rightclick,
  163. })
  164. minetest.register_node(doorb.."2", {
  165. tiles = {
  166. "myjdoors_door"..num.."a_edge.png",
  167. "myjdoors_door"..num.."a_edge.png",
  168. "myjdoors_door"..num.."a_edge.png",
  169. "myjdoors_door"..num.."a_edge.png",
  170. "myjdoors_door"..num.."a_top.png^[transformFX",
  171. "myjdoors_door"..num.."a_top.png"
  172. },
  173. drawtype = "nodebox",
  174. paramtype = "light",
  175. paramtype2 = "facedir",
  176. sunlight_propagates = true,
  177. groups = {cracky = 1},
  178. node_box = {
  179. type = "fixed",
  180. fixed = {
  181. {0.375, -0.5, -0.1875, 0.5, 0.5, -0.0625},
  182. {-0.5, -0.5, -0.1875, -0.375, 0.5, -0.0625},
  183. {-0.5, 0.5, -0.1875, 0.5, 0.375, -0.0625},
  184. {-0.5, -0.5, -0.125, 0.5, 0.5, -0.145},
  185. {-0.625, -0.5, -0.0625, -0.5, 0.5, 0.0625},
  186. {-1.5, -0.5, -0.0625, -1.375, 0.5, 0.0625},
  187. {-1.5, 0.5, -0.0625, -0.5, 0.375, 0.0625},
  188. {-1.5, -0.5, 0, -0.5, 0.5, 0.02},
  189. }
  190. },
  191. selection_box = {
  192. type = "fixed",
  193. fixed = {
  194. {0, 0, 0, 0, 0, 0},
  195. }
  196. },
  197. })minetest.register_node(doorc.."2", {
  198. tiles = {
  199. "myjdoors_door"..num.."a_edge.png",
  200. "myjdoors_door"..num.."a_edge.png",
  201. "myjdoors_door"..num.."a_edge.png",
  202. "myjdoors_door"..num.."a_edge.png",
  203. "myjdoors_door"..num.."a_bottom.png^[transformFX",
  204. "myjdoors_door"..num.."a_bottom.png"
  205. },
  206. drawtype = "nodebox",
  207. paramtype = "light",
  208. paramtype2 = "facedir",
  209. sunlight_propagates = true,
  210. drop = doora,
  211. groups = {cracky = 1},
  212. node_box = {
  213. type = "fixed",
  214. fixed = {
  215. {-0.625, -0.5, -0.1875, -0.5, 0.5, -0.0625},
  216. {-1.5, -0.5, -0.1875, -1.375, 0.5, -0.0625},
  217. {-1.5, -0.5, -0.1875, -0.5, -0.375, -0.0625},
  218. {-1.5, -0.5, -0.125, -0.5, 0.5, -0.145},
  219. {-0.625, -0.5, -0.0625, -0.5, 0.5, 0.0625},
  220. {-1.5, -0.5, -0.0625, -1.375, 0.5, 0.0625},
  221. {-1.5, -0.5, -0.0625, -0.5, -0.375, 0.0625},
  222. {-1.5, -0.5, 0, -0.5, 0.5, 0.02},
  223. }
  224. },
  225. selection_box = {
  226. type = "fixed",
  227. fixed = {
  228. {-1.5, -0.5, 0.0625, -0.5, 1.5, -0.1875}
  229. }
  230. },
  231. after_place_node = afterplace,
  232. after_destruct = afterdestruct,
  233. on_rightclick = rightclick,
  234. })
  235. minetest.register_node(doord.."2", {
  236. tiles = {
  237. "myjdoors_door"..num.."a_edge.png",
  238. "myjdoors_door"..num.."a_edge.png",
  239. "myjdoors_door"..num.."a_edge.png",
  240. "myjdoors_door"..num.."a_edge.png",
  241. "myjdoors_door"..num.."a_top.png^[transformFX",
  242. "myjdoors_door"..num.."a_top.png"
  243. },
  244. drawtype = "nodebox",
  245. paramtype = "light",
  246. paramtype2 = "facedir",
  247. sunlight_propagates = true,
  248. groups = {cracky = 1},
  249. node_box = {
  250. type = "fixed",
  251. fixed = {
  252. {-0.625, -0.5, -0.1875, -0.5, 0.5, -0.0625},
  253. {-1.5, -0.5, -0.1875, -1.375, 0.5, -0.0625},
  254. {-1.5, 0.5, -0.1875, -0.5, 0.375, -0.0625},
  255. {-1.5, -0.5, -0.125, -0.5, 0.5, -0.145},
  256. {-0.625, -0.5, -0.0625, -0.5, 0.5, 0.0625},
  257. {-1.5, -0.5, -0.0625, -1.375, 0.5, 0.0625},
  258. {-1.5, 0.5, -0.0625, -0.5, 0.375, 0.0625},
  259. {-1.5, -0.5, 0, -0.5, 0.5, 0.02},
  260. }
  261. },
  262. selection_box = {
  263. type = "fixed",
  264. fixed = {
  265. {0, 0, 0, 0, 0, 0},
  266. }
  267. },
  268. })
  269. end