jdoors1.lua 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439
  1. local doors = {
  2. {"my_sliding_doors:door1a","my_sliding_doors:door1b","my_sliding_doors:door1c","my_sliding_doors:door1d","1","White"},
  3. {"my_sliding_doors:door2a","my_sliding_doors:door2b","my_sliding_doors:door2c","my_sliding_doors:door2d","2","Flower"},
  4. {"my_sliding_doors:door3a","my_sliding_doors:door3b","my_sliding_doors:door3c","my_sliding_doors:door3d","3","Framed"},
  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 pos = pos1
  16. local pos2 = minetest.find_node_near(pos1, 1, {doora})
  17. local par = minetest.dir_to_facedir(placer:get_look_dir())
  18. local par2 = par + 2
  19. if par2 == 4 then par2 = 0 end
  20. if par2 == 5 then par2 = 1 end
  21. if pos2 == nil then
  22. minetest.set_node(pos, {name=doora,param2=par})
  23. minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z}, {name=doorb,param2=par})
  24. else
  25. minetest.set_node(pos, {name=doora.."2",param2=par2})
  26. minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z}, {name=doorb.."2",param2=par2})
  27. end
  28. end
  29. function afterdestruct(pos, oldnode)
  30. minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z},{name="air"})
  31. end
  32. function rightclick(pos, node, player, itemstack, pointed_thing)
  33. local a = minetest.get_node({x=pos.x, y=pos.y, z=pos.z-1})
  34. local b = minetest.get_node({x=pos.x, y=pos.y, z=pos.z+1})
  35. local c = minetest.get_node({x=pos.x+1, y=pos.y, z=pos.z})
  36. local d = minetest.get_node({x=pos.x-1, y=pos.y, z=pos.z})
  37. if node.name == doora then
  38. minetest.set_node(pos, {name=doorc, param2=node.param2})
  39. minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z}, {name=doord, param2=node.param2})
  40. elseif node.name == doorc then
  41. minetest.set_node(pos, {name=doora, param2=node.param2})
  42. minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z}, {name=doorb, param2=node.param2})
  43. end
  44. if a.name == doora then
  45. minetest.set_node({x=pos.x, y=pos.y, z=pos.z-1}, {name=doorc, param2=a.param2})
  46. minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z-1}, {name=doord, param2=a.param2})
  47. end
  48. if b.name == doora then
  49. minetest.set_node({x=pos.x, y=pos.y, z=pos.z+1}, {name=doorc, param2=b.param2})
  50. minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z+1}, {name=doord, param2=b.param2})
  51. end
  52. if c.name == doora then
  53. minetest.set_node({x=pos.x+1, y=pos.y, z=pos.z}, {name=doorc, param2=c.param2})
  54. minetest.set_node({x=pos.x+1,y=pos.y+1,z=pos.z}, {name=doord, param2=c.param2})
  55. end
  56. if d.name == doora then
  57. minetest.set_node({x=pos.x-1, y=pos.y, z=pos.z}, {name=doorc, param2=d.param2})
  58. minetest.set_node({x=pos.x-1,y=pos.y+1,z=pos.z}, {name=doord, param2=d.param2})
  59. end
  60. if a.name == doora.."2" then
  61. minetest.set_node({x=pos.x, y=pos.y, z=pos.z-1}, {name=doorc.."2", param2=a.param2})
  62. minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z-1}, {name=doord.."2", param2=a.param2})
  63. end
  64. if b.name == doora.."2" then
  65. minetest.set_node({x=pos.x, y=pos.y, z=pos.z+1}, {name=doorc.."2", param2=b.param2})
  66. minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z+1}, {name=doord.."2", param2=b.param2})
  67. end
  68. if c.name == doora.."2" then
  69. minetest.set_node({x=pos.x+1, y=pos.y, z=pos.z}, {name=doorc.."2", param2=c.param2})
  70. minetest.set_node({x=pos.x+1,y=pos.y+1,z=pos.z}, {name=doord.."2", param2=c.param2})
  71. end
  72. if d.name == doora.."2" then
  73. minetest.set_node({x=pos.x-1, y=pos.y, z=pos.z}, {name=doorc.."2", param2=d.param2})
  74. minetest.set_node({x=pos.x-1,y=pos.y+1,z=pos.z}, {name=doord.."2", param2=d.param2})
  75. end
  76. if a.name == doorc then
  77. minetest.set_node({x=pos.x, y=pos.y, z=pos.z-1}, {name=doora, param2=a.param2})
  78. minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z-1}, {name=doorb, param2=a.param2})
  79. end
  80. if b.name == doorc then
  81. minetest.set_node({x=pos.x, y=pos.y, z=pos.z+1}, {name=doora, param2=b.param2})
  82. minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z+1}, {name=doorb, param2=b.param2})
  83. end
  84. if c.name == doorc then
  85. minetest.set_node({x=pos.x+1, y=pos.y, z=pos.z}, {name=doora, param2=c.param2})
  86. minetest.set_node({x=pos.x+1,y=pos.y+1,z=pos.z}, {name=doorb, param2=c.param2})
  87. end
  88. if d.name == doorc then
  89. minetest.set_node({x=pos.x-1, y=pos.y, z=pos.z}, {name=doora, param2=d.param2})
  90. minetest.set_node({x=pos.x-1,y=pos.y+1,z=pos.z}, {name=doorb, param2=d.param2})
  91. end
  92. if a.name == doorc.."2" then
  93. minetest.set_node({x=pos.x, y=pos.y, z=pos.z-1}, {name=doora.."2", param2=a.param2})
  94. minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z-1}, {name=doorb.."2", param2=a.param2})
  95. end
  96. if b.name == doorc.."2" then
  97. minetest.set_node({x=pos.x, y=pos.y, z=pos.z+1}, {name=doora.."2", param2=b.param2})
  98. minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z+1}, {name=doorb.."2", param2=b.param2})
  99. end
  100. if c.name == doorc.."2" then
  101. minetest.set_node({x=pos.x+1, y=pos.y, z=pos.z}, {name=doora.."2", param2=c.param2})
  102. minetest.set_node({x=pos.x+1,y=pos.y+1,z=pos.z}, {name=doorb.."2", param2=c.param2})
  103. end
  104. if d.name == doorc.."2" then
  105. minetest.set_node({x=pos.x-1, y=pos.y, z=pos.z}, {name=doora.."2", param2=d.param2})
  106. minetest.set_node({x=pos.x-1,y=pos.y+1,z=pos.z}, {name=doorb.."2", param2=d.param2})
  107. end
  108. end
  109. function afterplace(pos, placer, itemstack, pointed_thing)
  110. minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z},{name=doord,param2=nodeu.param2})
  111. end
  112. minetest.register_node(doora, {
  113. description = des.." Sliding Door",
  114. inventory_image = "myjdoors_door"..num.."a_inv.png",
  115. wield_image = "myjdoors_door"..num.."a_inv.png",
  116. tiles = {
  117. "myjdoors_door"..num.."a_edge.png",
  118. "myjdoors_door"..num.."a_edge.png",
  119. "myjdoors_door"..num.."a_edge.png",
  120. "myjdoors_door"..num.."a_edge.png",
  121. "myjdoors_door"..num.."a_bottom.png^[transformFX",
  122. "myjdoors_door"..num.."a_bottom.png"
  123. },
  124. drawtype = "nodebox",
  125. paramtype = "light",
  126. paramtype2 = "facedir",
  127. sunlight_propagates = true,
  128. groups = {cracky = 3},
  129. node_box = {
  130. type = "fixed",
  131. fixed = {
  132. {0.375, -0.5, 0.1875, 0.5, 0.5, 0.0625},
  133. {-0.5, -0.5, 0.1875, -0.375, 0.5, 0.0625},
  134. {-0.5, -0.5, 0.1875, 0.5, -0.375, 0.0625},
  135. {-0.5, -0.5, 0.125, 0.5, 0.5, 0.145},
  136. {-0.625, -0.5, -0.0625, -0.5, 0.5, 0.0625},
  137. {-1.5, -0.5, -0.0625, -1.375, 0.5, 0.0625},
  138. {-1.5, -0.5, -0.0625, -0.5, -0.375, 0.0625},
  139. {-1.5, -0.5, 0, -0.5, 0.5, 0.02},
  140. }
  141. },
  142. 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}}},
  143. on_place = onplace,
  144. after_destruct = afterdestruct,
  145. on_rightclick = rightclick,
  146. })
  147. minetest.register_node(doorb, {
  148. tiles = {
  149. "myjdoors_door"..num.."a_edge.png",
  150. "myjdoors_door"..num.."a_edge.png",
  151. "myjdoors_door"..num.."a_edge.png",
  152. "myjdoors_door"..num.."a_edge.png",
  153. "myjdoors_door"..num.."a_top.png^[transformFX",
  154. "myjdoors_door"..num.."a_top.png"
  155. },
  156. drawtype = "nodebox",
  157. paramtype = "light",
  158. paramtype2 = "facedir",
  159. sunlight_propagates = true,
  160. groups = {cracky = 1},
  161. node_box = {
  162. type = "fixed",
  163. fixed = {
  164. {0.375, -0.5, 0.1875, 0.5, 0.5, 0.0625},
  165. {-0.5, -0.5, 0.1875, -0.375, 0.5, 0.0625},
  166. {-0.5, 0.5, 0.1875, 0.5, 0.375, 0.0625},
  167. {-0.5, -0.5, 0.125, 0.5, 0.5, 0.145},
  168. {-0.625, -0.5, -0.0625, -0.5, 0.5, 0.0625},
  169. {-1.5, -0.5, -0.0625, -1.375, 0.5, 0.0625},
  170. {-1.5, 0.5, -0.0625, -0.5, 0.375, 0.0625},
  171. {-1.5, -0.5, 0, -0.5, 0.5, 0.02},
  172. }
  173. },
  174. selection_box = {
  175. type = "fixed",
  176. fixed = {
  177. {0, 0, 0, 0, 0, 0},
  178. }
  179. },
  180. })minetest.register_node(doorc, {
  181. tiles = {
  182. "myjdoors_door"..num.."a_edge.png",
  183. "myjdoors_door"..num.."a_edge.png",
  184. "myjdoors_door"..num.."a_edge.png",
  185. "myjdoors_door"..num.."a_edge.png",
  186. "myjdoors_door"..num.."a_bottom.png^[transformFX",
  187. "myjdoors_door"..num.."a_bottom.png"
  188. },
  189. drawtype = "nodebox",
  190. paramtype = "light",
  191. paramtype2 = "facedir",
  192. sunlight_propagates = true,
  193. drop = doora,
  194. groups = {cracky = 1},
  195. node_box = {
  196. type = "fixed",
  197. fixed = {
  198. {-0.625, -0.5, 0.1875, -0.5, 0.5, 0.0625},
  199. {-1.5, -0.5, 0.1875, -1.375, 0.5, 0.0625},
  200. {-1.5, -0.5, 0.1875, -0.5, -0.375, 0.0625},
  201. {-1.5, -0.5, 0.125, -0.5, 0.5, 0.145},
  202. {-0.625, -0.5, -0.0625, -0.5, 0.5, 0.0625},
  203. {-1.5, -0.5, -0.0625, -1.375, 0.5, 0.0625},
  204. {-1.5, -0.5, -0.0625, -0.5, -0.375, 0.0625},
  205. {-1.5, -0.5, 0, -0.5, 0.5, 0.02},
  206. }
  207. },
  208. selection_box = {
  209. type = "fixed",
  210. fixed = {
  211. {-1.5, -0.5, -0.0625, -0.5, 1.5, 0.1875}
  212. }
  213. },
  214. after_place_node = afterplace,
  215. after_destruct = afterdestruct,
  216. on_rightclick = rightclick,
  217. })
  218. minetest.register_node(doord, {
  219. tiles = {
  220. "myjdoors_door"..num.."a_edge.png",
  221. "myjdoors_door"..num.."a_edge.png",
  222. "myjdoors_door"..num.."a_edge.png",
  223. "myjdoors_door"..num.."a_edge.png",
  224. "myjdoors_door"..num.."a_top.png^[transformFX",
  225. "myjdoors_door"..num.."a_top.png"
  226. },
  227. drawtype = "nodebox",
  228. paramtype = "light",
  229. paramtype2 = "facedir",
  230. sunlight_propagates = true,
  231. groups = {cracky = 1},
  232. node_box = {
  233. type = "fixed",
  234. fixed = {
  235. {-0.625, -0.5, 0.1875, -0.5, 0.5, 0.0625},
  236. {-1.5, -0.5, 0.1875, -1.375, 0.5, 0.0625},
  237. {-1.5, 0.5, 0.1875, -0.5, 0.375, 0.0625},
  238. {-1.5, -0.5, 0.125, -0.5, 0.5, 0.145},
  239. {-0.625, -0.5, -0.0625, -0.5, 0.5, 0.0625},
  240. {-1.5, -0.5, -0.0625, -1.375, 0.5, 0.0625},
  241. {-1.5, 0.5, -0.0625, -0.5, 0.375, 0.0625},
  242. {-1.5, -0.5, 0, -0.5, 0.5, 0.02},
  243. }
  244. },
  245. selection_box = {
  246. type = "fixed",
  247. fixed = {
  248. {0, 0, 0, 0, 0, 0},
  249. }
  250. },
  251. })
  252. minetest.register_node("my_sliding_doors:jpanel"..num, {
  253. description = des.." Panel",
  254. inventory_image = "myjdoors_panel"..num.."_inv.png",
  255. wield_image = "myjdoors_panel"..num.."_inv.png",
  256. tiles = {
  257. "myjdoors_door"..num.."a_edge.png",
  258. "myjdoors_door"..num.."a_edge.png",
  259. "myjdoors_door"..num.."a_edge.png",
  260. "myjdoors_door"..num.."a_edge.png",
  261. "myjdoors_door"..num.."a_bottom.png",
  262. "myjdoors_door"..num.."a_bottom.png"
  263. },
  264. drawtype = "nodebox",
  265. paramtype = "light",
  266. paramtype2 = "facedir",
  267. sunlight_propagates = true,
  268. groups = {cracky = 3},
  269. node_box = {
  270. type = "fixed",
  271. fixed = {
  272. {0.375, -0.5, -0.0625, 0.5, 0.5, 0.0625},
  273. {-0.5, -0.5, -0.0625, -0.375, 0.5, 0.0625},
  274. {-0.5, -0.5, -0.0625, 0.5, -0.375, 0.0625},
  275. {-0.4375, -0.5, 0, 0.4375, 0.5, 0.02},
  276. }
  277. },
  278. selection_box = {type = "fixed",fixed = {{-0.5, -0.5, -0.0625, 0.5, 1.5, 0.0625}}},
  279. collision_box = {type = "fixed",fixed = {{-0.5, -0.5, -0.0625, 0.5, 1.5, 0.0625}}},
  280. on_place = function(itemstack, placer, pointed_thing)
  281. local p2 = minetest.dir_to_facedir(placer:get_look_dir())
  282. local pos = pointed_thing.above
  283. local na = minetest.get_node({x=pos.x,y=pos.y+1,z=pos.z})
  284. if na.name == "air" then
  285. minetest.set_node(pos,{name = "my_sliding_doors:jpanel"..num, param2 = p2})
  286. minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z},{name = "my_sliding_doors:jpanel_top"..num, param2 = p2})
  287. else
  288. return
  289. end
  290. end,
  291. on_destruct = function(pos)
  292. minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z},{name="air"})
  293. end,
  294. })
  295. minetest.register_node("my_sliding_doors:jpanel_top"..num, {
  296. tiles = {
  297. "myjdoors_door"..num.."a_edge.png",
  298. "myjdoors_door"..num.."a_edge.png",
  299. "myjdoors_door"..num.."a_edge.png",
  300. "myjdoors_door"..num.."a_edge.png",
  301. "myjdoors_door"..num.."a_top.png",
  302. "myjdoors_door"..num.."a_top.png"
  303. },
  304. drawtype = "nodebox",
  305. paramtype = "light",
  306. paramtype2 = "facedir",
  307. sunlight_propagates = true,
  308. drop = "",
  309. groups = {cracky = 3},
  310. node_box = {
  311. type = "fixed",
  312. fixed = {
  313. {0.375, -0.5, -0.0625, 0.5, 0.5, 0.0625},
  314. {-0.5, -0.5, -0.0625, -0.375, 0.5, 0.0625},
  315. {-0.5, 0.5, -0.0625, 0.5, 0.375, 0.0625},
  316. {-0.4375, -0.5, 0, 0.4375, 0.5, 0.02},
  317. }
  318. },
  319. selection_box = {
  320. type = "fixed",
  321. fixed = {
  322. {0, 0, 0, 0, 0, 0}
  323. }
  324. },
  325. })
  326. minetest.register_node("my_sliding_doors:jpanel_corner_"..num, {
  327. description = des.." Panel Corner",
  328. inventory_image = "myjdoors_panel"..num.."_corner_inv.png",
  329. wield_image = "myjdoors_panel"..num.."_corner_inv.png",
  330. tiles = {
  331. "myjdoors_door"..num.."a_edge.png",
  332. "myjdoors_door"..num.."a_edge.png",
  333. "myjdoors_door"..num.."a_bottom.png",
  334. "myjdoors_door"..num.."a_bottom.png",
  335. "myjdoors_door"..num.."a_bottom.png",
  336. "myjdoors_door"..num.."a_bottom.png"
  337. },
  338. drawtype = "nodebox",
  339. paramtype = "light",
  340. paramtype2 = "facedir",
  341. sunlight_propagates = true,
  342. groups = {cracky = 3},
  343. node_box = {
  344. type = "fixed",
  345. fixed = {
  346. {-0.0625, -0.5, -0.5, 0.0625001, 0.5, -0.375},
  347. {-0.5, -0.5, -0.0625, -0.375, 0.5, 0.0625},
  348. {-0.5, -0.5, -0.0625, 0.0624999, -0.375, 0.0625},
  349. {-0.5, -0.5, 0, 0, 0.5, 0.02},
  350. {-0.0625, -0.5, -0.5, 0.0625, -0.375, 0.0625},
  351. {0.02, -0.5, -0.5, 0, 0.5, 0},
  352. }
  353. },
  354. selection_box = {
  355. type = "fixed",
  356. fixed = {
  357. {-0.0625, -0.5, -0.5, 0.0625, 1.5, 0},
  358. {-0.5, -0.5, -0.0625, 0, 1.5, 0.0625},
  359. }
  360. },
  361. on_place = function(itemstack, placer, pointed_thing)
  362. local p2 = minetest.dir_to_facedir(placer:get_look_dir())
  363. local pos = pointed_thing.above
  364. local na = minetest.get_node({x=pos.x,y=pos.y+1,z=pos.z})
  365. if na.name == "air" then
  366. minetest.set_node(pos,{name = "my_sliding_doors:jpanel_corner_"..num, param2 = p2})
  367. minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z},{name = "my_sliding_doors:jpanel_corner_top"..num, param2 = p2})
  368. else
  369. return
  370. end
  371. end,
  372. on_destruct = function(pos)
  373. minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z},{name="air"})
  374. end,
  375. })
  376. minetest.register_node("my_sliding_doors:jpanel_corner_top"..num, {
  377. tiles = {
  378. "myjdoors_door"..num.."a_edge.png",
  379. "myjdoors_door"..num.."a_edge.png",
  380. "myjdoors_door"..num.."a_top.png",
  381. "myjdoors_door"..num.."a_top.png",
  382. "myjdoors_door"..num.."a_top.png",
  383. "myjdoors_door"..num.."a_top.png"
  384. },
  385. drawtype = "nodebox",
  386. paramtype = "light",
  387. paramtype2 = "facedir",
  388. sunlight_propagates = true,
  389. drop = "",
  390. groups = {cracky = 3},
  391. node_box = {
  392. type = "fixed",
  393. fixed = {
  394. {-0.0625, -0.5, -0.5, 0.0625001, 0.5, -0.375},
  395. {-0.5, -0.5, -0.0625, -0.375, 0.5, 0.0625},
  396. {-0.5, 0.375, -0.0625, 0.0625, 0.5, 0.0625},
  397. {-0.5, -0.5, 0, 0, 0.5, 0.02},
  398. {-0.0625, 0.375, -0.5, 0.0625, 0.5, 0.0625},
  399. {0.02, -0.5, -0.5, 0, 0.5, 0},
  400. }
  401. },
  402. selection_box = {
  403. type = "fixed",
  404. fixed = {
  405. {0, 0, 0, 0, 0, 0}
  406. }
  407. },
  408. })
  409. end