init.lua 43 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193
  1. viaduct = {}
  2. function viaduct.register_wood_bridge(name, def)
  3. local node_def = minetest.registered_nodes[name]
  4. if not node_def then
  5. if minetest.get_current_modname() ~= "viaduct" then minetest.log("warning", "["..minetest.get_current_modname().."] node "..name.." not found in function viaduct.register_wood_bridge") end
  6. return
  7. end
  8. local item = name:split(':')[2]
  9. if not def.description then
  10. def.description = node_def.description.." Bridge"
  11. end
  12. if not def.tiles then
  13. def.tiles = node_def.tiles
  14. end
  15. local group
  16. if not def.groups then
  17. group = table.copy(node_def.groups)
  18. group.wood = 0
  19. group.planks = 0
  20. else
  21. group = def.groups
  22. end
  23. group.bridge = 1
  24. if not def.sounds then
  25. def.sounds = node_def.sounds
  26. end
  27. local nocgroup = table.copy(group)
  28. nocgroup.not_in_creative_inventory = 1
  29. local stick
  30. if not def.stick then
  31. stick = "group:stick"
  32. else
  33. stick = def.stick
  34. end
  35. local update = function(pos)
  36. local north = minetest.get_node({x = pos.x, y = pos.y, z = pos.z + 1})
  37. local east = minetest.get_node({x = pos.x + 1, y = pos.y, z = pos.z})
  38. local south = minetest.get_node({x = pos.x, y = pos.y, z = pos.z - 1})
  39. local west = minetest.get_node({x = pos.x - 1, y = pos.y, z = pos.z})
  40. local northup = minetest.get_node({x = pos.x, y = pos.y + 1, z = pos.z + 1})
  41. local eastup = minetest.get_node({x = pos.x + 1, y = pos.y + 1, z = pos.z})
  42. local southup = minetest.get_node({x = pos.x, y = pos.y + 1, z = pos.z - 1})
  43. local westup = minetest.get_node({x = pos.x - 1, y = pos.y + 1, z = pos.z})
  44. local above = minetest.get_node({x = pos.x, y = pos.y + 1, z = pos.z})
  45. local northdown = minetest.get_node({x = pos.x, y = pos.y - 1, z = pos.z + 1})
  46. local eastdown = minetest.get_node({x = pos.x + 1, y = pos.y - 1, z = pos.z})
  47. local southdown = minetest.get_node({x = pos.x, y = pos.y - 1, z = pos.z - 1})
  48. local westdown = minetest.get_node({x = pos.x - 1, y = pos.y - 1, z = pos.z})
  49. local bridgeus
  50. if northdown.name:split('_bridge_')[2] == "us" then bridgeus = true else bridgeus = false end
  51. local bridgeuw
  52. if eastdown.name:split('_bridge_')[2] == "uw" then bridgeuw = true else bridgeuw = false end
  53. local bridgeun
  54. if southdown.name:split('_bridge_')[2] == "un" then bridgeun = true else bridgeun = false end
  55. local bridgeue
  56. if westdown.name:split('_bridge_')[2] == "ue" then bridgeue = true else bridgeue = false end
  57. local n
  58. if minetest.get_item_group(north.name, "bridge") == 1 or bridgeus then n = true else n = false end
  59. local e
  60. if minetest.get_item_group(east.name, "bridge") == 1 or bridgeuw then e = true else e = false end
  61. local s
  62. if minetest.get_item_group(south.name, "bridge") == 1 or bridgeun then s = true else s = false end
  63. local w
  64. if minetest.get_item_group(west.name, "bridge") == 1 or bridgeue then w = true else w = false end
  65. local nu
  66. if minetest.get_item_group(northup.name, "bridge") == 1 and above.name == "air" then nu = true else nu = false end
  67. local eu
  68. if minetest.get_item_group(eastup.name, "bridge") == 1 and above.name == "air" then eu = true else eu = false end
  69. local su
  70. if minetest.get_item_group(southup.name, "bridge") == 1 and above.name == "air" then su = true else su = false end
  71. local wu
  72. if minetest.get_item_group(westup.name, "bridge") == 1 and above.name == "air" then wu = true else wu = false end
  73. local nd
  74. if northdown.name == "air" then nd = true else nd = false end
  75. local ed
  76. if eastdown.name == "air" then ed = true else ed = false end
  77. local sd
  78. if southdown.name == "air" then sd = true else sd = false end
  79. local wd
  80. if westdown.name == "air" then wd = true else wd = false end
  81. if n and e and s and w then
  82. minetest.swap_node(pos, {name = "viaduct:"..item.."_bridge_nesw"})
  83. elseif n and e and s and not w then
  84. minetest.swap_node(pos, {name = "viaduct:"..item.."_bridge_nes"})
  85. elseif n and e and not s and w then
  86. minetest.swap_node(pos, {name = "viaduct:"..item.."_bridge_new"})
  87. elseif n and e and not s and not w then
  88. minetest.swap_node(pos, {name = "viaduct:"..item.."_bridge_ne"})
  89. elseif n and not e and s and w then
  90. minetest.swap_node(pos, {name = "viaduct:"..item.."_bridge_nsw"})
  91. elseif n and not e and s and not w then
  92. minetest.swap_node(pos, {name = "viaduct:"..item.."_bridge_ns"})
  93. elseif n and not e and not s and w then
  94. minetest.swap_node(pos, {name = "viaduct:"..item.."_bridge_nw"})
  95. elseif n and not e and not s and not w then
  96. if su then
  97. minetest.swap_node(pos, {name = "viaduct:"..item.."_bridge_us"})
  98. elseif sd then
  99. minetest.swap_node(pos, {name = "viaduct:"..item.."_bridge_n"})
  100. else
  101. minetest.swap_node(pos, {name = "viaduct:"..item.."_bridge_ns"})
  102. end
  103. elseif not n and e and s and w then
  104. minetest.swap_node(pos, {name = "viaduct:"..item.."_bridge_esw"})
  105. elseif not n and e and s and not w then
  106. minetest.swap_node(pos, {name = "viaduct:"..item.."_bridge_es"})
  107. elseif not n and e and not s and w then
  108. minetest.swap_node(pos, {name = "viaduct:"..item.."_bridge_ew"})
  109. elseif not n and e and not s and not w then
  110. if wu then
  111. minetest.swap_node(pos, {name = "viaduct:"..item.."_bridge_uw"})
  112. elseif wd then
  113. minetest.swap_node(pos, {name = "viaduct:"..item.."_bridge_e"})
  114. else
  115. minetest.swap_node(pos, {name = "viaduct:"..item.."_bridge_ew"})
  116. end
  117. elseif not n and not e and s and w then
  118. minetest.swap_node(pos, {name = "viaduct:"..item.."_bridge_sw"})
  119. elseif not n and not e and s and not w then
  120. if nu then
  121. minetest.swap_node(pos, {name = "viaduct:"..item.."_bridge_un"})
  122. elseif nd then
  123. minetest.swap_node(pos, {name = "viaduct:"..item.."_bridge_s"})
  124. else
  125. minetest.swap_node(pos, {name = "viaduct:"..item.."_bridge_ns"})
  126. end
  127. elseif not n and not e and not s and w then
  128. if eu then
  129. minetest.swap_node(pos, {name = "viaduct:"..item.."_bridge_ue"})
  130. elseif ed then
  131. minetest.swap_node(pos, {name = "viaduct:"..item.."_bridge_w"})
  132. else
  133. minetest.swap_node(pos, {name = "viaduct:"..item.."_bridge_ew"})
  134. end
  135. else
  136. if nu then
  137. minetest.swap_node(pos, {name = "viaduct:"..item.."_bridge_un"})
  138. elseif eu then
  139. minetest.swap_node(pos, {name = "viaduct:"..item.."_bridge_ue"})
  140. elseif su then
  141. minetest.swap_node(pos, {name = "viaduct:"..item.."_bridge_us"})
  142. elseif wu then
  143. minetest.swap_node(pos, {name = "viaduct:"..item.."_bridge_uw"})
  144. else
  145. minetest.swap_node(pos, {name = "viaduct:"..item.."_bridge"})
  146. end
  147. end
  148. end
  149. minetest.register_node(":viaduct:"..item.."_bridge", {
  150. description = def.description,
  151. tiles = def.tiles,
  152. paramtype = "light",
  153. drawtype = "nodebox",
  154. node_box = {
  155. type = "fixed",
  156. fixed = {
  157. {-0.5, -0.5, -0.5, 0.5, -0.4375, 0.5},
  158. {-0.5, -0.4375, 0.375, -0.375, 0.5, 0.5},
  159. {0.375, -0.4375, 0.375, 0.5, 0.5, 0.5},
  160. {-0.5, -0.4375, -0.5, -0.375, 0.5, -0.375},
  161. {0.375, -0.4375, -0.5, 0.5, 0.5, -0.375},
  162. {-0.375, 0.3125, 0.375, 0.375, 0.4375, 0.4375},
  163. {-0.375, -0.1875, 0.375, 0.375, -0.0625, 0.4375},
  164. {0.375, 0.3125, -0.375, 0.4375, 0.4375, 0.375},
  165. {0.375, -0.1875, -0.375, 0.4375, -0.0625, 0.375},
  166. {-0.375, 0.3125, -0.4375, 0.375, 0.4375, -0.375},
  167. {-0.375, -0.1875, -0.4375, 0.375, -0.0625, -0.375},
  168. {-0.4375, 0.3125, -0.375, -0.375, 0.4375, 0.375},
  169. {-0.4375, -0.1875, -0.375, -0.375, -0.0625, 0.375},
  170. },
  171. },
  172. selection_box = {
  173. type = "fixed",
  174. fixed = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
  175. },
  176. drop = "viaduct:"..item.."_bridge",
  177. sounds = def.sounds,
  178. groups = group,
  179. after_place_node = function(pos, placer, itemstack, pointed_thing)
  180. local node = minetest.get_node(pos)
  181. local node_def = minetest.registered_nodes[node.name]
  182. node_def.update_bridge(pos)
  183. local nodes = minetest.find_nodes_in_area({x = pos.x - 1, y = pos.y - 1, z = pos.z - 1}, {x = pos.x + 1, y = pos.y + 1, z = pos.z + 1}, {"group:bridge"})
  184. for i,v in ipairs(nodes) do
  185. local node = minetest.get_node(v)
  186. local node_def = minetest.registered_nodes[node.name]
  187. node_def.update_bridge(v)
  188. end
  189. end,
  190. after_dig_node = function(pos, oldnode, oldmetadata, digger)
  191. local nodes = minetest.find_nodes_in_area({x = pos.x - 1, y = pos.y - 1, z = pos.z - 1}, {x = pos.x + 1, y = pos.y + 1, z = pos.z + 1}, {"group:bridge"})
  192. for i,v in ipairs(nodes) do
  193. local node = minetest.get_node(v)
  194. local node_def = minetest.registered_nodes[node.name]
  195. node_def.update_bridge(v)
  196. end
  197. end,
  198. update_bridge = function(pos)
  199. update(pos)
  200. end,
  201. })
  202. minetest.register_node(":viaduct:"..item.."_bridge_w", {
  203. description = def.description,
  204. tiles = def.tiles,
  205. paramtype = "light",
  206. drawtype = "nodebox",
  207. node_box = {
  208. type = "fixed",
  209. fixed = {
  210. {-0.5, -0.5, -0.5, 0.5, -0.4375, 0.5},
  211. {-0.5, -0.4375, 0.375, -0.375, 0.5, 0.5},
  212. {0.375, -0.4375, 0.375, 0.5, 0.5, 0.5},
  213. {-0.5, -0.4375, -0.5, -0.375, 0.5, -0.375},
  214. {0.375, -0.4375, -0.5, 0.5, 0.5, -0.375},
  215. {-0.375, 0.3125, 0.375, 0.375, 0.4375, 0.4375},
  216. {-0.375, -0.1875, 0.375, 0.375, -0.0625, 0.4375},
  217. {0.375, 0.3125, -0.375, 0.4375, 0.4375, 0.375},
  218. {0.375, -0.1875, -0.375, 0.4375, -0.0625, 0.375},
  219. {-0.375, 0.3125, -0.4375, 0.375, 0.4375, -0.375},
  220. {-0.375, -0.1875, -0.4375, 0.375, -0.0625, -0.375},
  221. },
  222. },
  223. selection_box = {
  224. type = "fixed",
  225. fixed = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
  226. },
  227. drop = "viaduct:"..item.."_bridge",
  228. sounds = def.sounds,
  229. groups = nocgroup,
  230. after_dig_node = function(pos, oldnode, oldmetadata, digger)
  231. local nodes = minetest.find_nodes_in_area({x = pos.x - 1, y = pos.y - 1, z = pos.z - 1}, {x = pos.x + 1, y = pos.y + 1, z = pos.z + 1}, {"group:bridge"})
  232. for i,v in ipairs(nodes) do
  233. local node = minetest.get_node(v)
  234. local node_def = minetest.registered_nodes[node.name]
  235. node_def.update_bridge(v)
  236. end
  237. end,
  238. update_bridge = function(pos)
  239. update(pos)
  240. end,
  241. })
  242. minetest.register_node(":viaduct:"..item.."_bridge_s", {
  243. description = def.description,
  244. tiles = def.tiles,
  245. paramtype = "light",
  246. drawtype = "nodebox",
  247. node_box = {
  248. type = "fixed",
  249. fixed = {
  250. {-0.5, -0.5, -0.5, 0.5, -0.4375, 0.5},
  251. {-0.5, -0.4375, 0.375, -0.375, 0.5, 0.5},
  252. {0.375, -0.4375, 0.375, 0.5, 0.5, 0.5},
  253. {-0.5, -0.4375, -0.5, -0.375, 0.5, -0.375},
  254. {0.375, -0.4375, -0.5, 0.5, 0.5, -0.375},
  255. {-0.375, 0.3125, 0.375, 0.375, 0.4375, 0.4375},
  256. {-0.375, -0.1875, 0.375, 0.375, -0.0625, 0.4375},
  257. {0.375, 0.3125, -0.375, 0.4375, 0.4375, 0.375},
  258. {0.375, -0.1875, -0.375, 0.4375, -0.0625, 0.375},
  259. {-0.4375, 0.3125, -0.375, -0.375, 0.4375, 0.375},
  260. {-0.4375, -0.1875, -0.375, -0.375, -0.0625, 0.375},
  261. },
  262. },
  263. selection_box = {
  264. type = "fixed",
  265. fixed = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
  266. },
  267. drop = "viaduct:"..item.."_bridge",
  268. sounds = def.sounds,
  269. groups = nocgroup,
  270. after_dig_node = function(pos, oldnode, oldmetadata, digger)
  271. local nodes = minetest.find_nodes_in_area({x = pos.x - 1, y = pos.y - 1, z = pos.z - 1}, {x = pos.x + 1, y = pos.y + 1, z = pos.z + 1}, {"group:bridge"})
  272. for i,v in ipairs(nodes) do
  273. local node = minetest.get_node(v)
  274. local node_def = minetest.registered_nodes[node.name]
  275. node_def.update_bridge(v)
  276. end
  277. end,
  278. update_bridge = function(pos)
  279. update(pos)
  280. end,
  281. })
  282. minetest.register_node(":viaduct:"..item.."_bridge_sw", {
  283. description = def.description,
  284. tiles = def.tiles,
  285. paramtype = "light",
  286. drawtype = "nodebox",
  287. node_box = {
  288. type = "fixed",
  289. fixed = {
  290. {-0.5, -0.5, -0.5, 0.5, -0.4375, 0.5},
  291. {-0.5, -0.4375, 0.375, -0.375, 0.5, 0.5},
  292. {0.375, -0.4375, 0.375, 0.5, 0.5, 0.5},
  293. {-0.5, -0.4375, -0.5, -0.375, 0.5, -0.375},
  294. {0.375, -0.4375, -0.5, 0.5, 0.5, -0.375},
  295. {-0.375, 0.3125, 0.375, 0.375, 0.4375, 0.4375},
  296. {-0.375, -0.1875, 0.375, 0.375, -0.0625, 0.4375},
  297. {0.375, 0.3125, -0.375, 0.4375, 0.4375, 0.375},
  298. {0.375, -0.1875, -0.375, 0.4375, -0.0625, 0.375},
  299. },
  300. },
  301. selection_box = {
  302. type = "fixed",
  303. fixed = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
  304. },
  305. drop = "viaduct:"..item.."_bridge",
  306. sounds = def.sounds,
  307. groups = nocgroup,
  308. after_dig_node = function(pos, oldnode, oldmetadata, digger)
  309. local nodes = minetest.find_nodes_in_area({x = pos.x - 1, y = pos.y - 1, z = pos.z - 1}, {x = pos.x + 1, y = pos.y + 1, z = pos.z + 1}, {"group:bridge"})
  310. for i,v in ipairs(nodes) do
  311. local node = minetest.get_node(v)
  312. local node_def = minetest.registered_nodes[node.name]
  313. node_def.update_bridge(v)
  314. end
  315. end,
  316. update_bridge = function(pos)
  317. update(pos)
  318. end,
  319. })
  320. minetest.register_node(":viaduct:"..item.."_bridge_e", {
  321. description = def.description,
  322. tiles = def.tiles,
  323. paramtype = "light",
  324. drawtype = "nodebox",
  325. node_box = {
  326. type = "fixed",
  327. fixed = {
  328. {-0.5, -0.5, -0.5, 0.5, -0.4375, 0.5},
  329. {-0.5, -0.4375, 0.375, -0.375, 0.5, 0.5},
  330. {0.375, -0.4375, 0.375, 0.5, 0.5, 0.5},
  331. {-0.5, -0.4375, -0.5, -0.375, 0.5, -0.375},
  332. {0.375, -0.4375, -0.5, 0.5, 0.5, -0.375},
  333. {-0.375, 0.3125, 0.375, 0.375, 0.4375, 0.4375},
  334. {-0.375, -0.1875, 0.375, 0.375, -0.0625, 0.4375},
  335. {-0.375, 0.3125, -0.4375, 0.375, 0.4375, -0.375},
  336. {-0.375, -0.1875, -0.4375, 0.375, -0.0625, -0.375},
  337. {-0.4375, 0.3125, -0.375, -0.375, 0.4375, 0.375},
  338. {-0.4375, -0.1875, -0.375, -0.375, -0.0625, 0.375},
  339. },
  340. },
  341. selection_box = {
  342. type = "fixed",
  343. fixed = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
  344. },
  345. drop = "viaduct:"..item.."_bridge",
  346. sounds = def.sounds,
  347. groups = nocgroup,
  348. after_dig_node = function(pos, oldnode, oldmetadata, digger)
  349. local nodes = minetest.find_nodes_in_area({x = pos.x - 1, y = pos.y - 1, z = pos.z - 1}, {x = pos.x + 1, y = pos.y + 1, z = pos.z + 1}, {"group:bridge"})
  350. for i,v in ipairs(nodes) do
  351. local node = minetest.get_node(v)
  352. local node_def = minetest.registered_nodes[node.name]
  353. node_def.update_bridge(v)
  354. end
  355. end,
  356. update_bridge = function(pos)
  357. update(pos)
  358. end,
  359. })
  360. minetest.register_node(":viaduct:"..item.."_bridge_ew", {
  361. description = def.description,
  362. tiles = def.tiles,
  363. paramtype = "light",
  364. drawtype = "nodebox",
  365. node_box = {
  366. type = "fixed",
  367. fixed = {
  368. {-0.5, -0.5, -0.5, 0.5, -0.4375, 0.5},
  369. {-0.5, -0.4375, 0.375, -0.375, 0.5, 0.5},
  370. {0.375, -0.4375, 0.375, 0.5, 0.5, 0.5},
  371. {-0.5, -0.4375, -0.5, -0.375, 0.5, -0.375},
  372. {0.375, -0.4375, -0.5, 0.5, 0.5, -0.375},
  373. {-0.375, 0.3125, 0.375, 0.375, 0.4375, 0.4375},
  374. {-0.375, -0.1875, 0.375, 0.375, -0.0625, 0.4375},
  375. {-0.375, 0.3125, -0.4375, 0.375, 0.4375, -0.375},
  376. {-0.375, -0.1875, -0.4375, 0.375, -0.0625, -0.375},
  377. },
  378. },
  379. selection_box = {
  380. type = "fixed",
  381. fixed = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
  382. },
  383. drop = "viaduct:"..item.."_bridge",
  384. sounds = def.sounds,
  385. groups = nocgroup,
  386. after_dig_node = function(pos, oldnode, oldmetadata, digger)
  387. local nodes = minetest.find_nodes_in_area({x = pos.x - 1, y = pos.y - 1, z = pos.z - 1}, {x = pos.x + 1, y = pos.y + 1, z = pos.z + 1}, {"group:bridge"})
  388. for i,v in ipairs(nodes) do
  389. local node = minetest.get_node(v)
  390. local node_def = minetest.registered_nodes[node.name]
  391. node_def.update_bridge(v)
  392. end
  393. end,
  394. update_bridge = function(pos)
  395. update(pos)
  396. end,
  397. })
  398. minetest.register_node(":viaduct:"..item.."_bridge_es", {
  399. description = def.description,
  400. tiles = def.tiles,
  401. paramtype = "light",
  402. drawtype = "nodebox",
  403. node_box = {
  404. type = "fixed",
  405. fixed = {
  406. {-0.5, -0.5, -0.5, 0.5, -0.4375, 0.5},
  407. {-0.5, -0.4375, 0.375, -0.375, 0.5, 0.5},
  408. {0.375, -0.4375, 0.375, 0.5, 0.5, 0.5},
  409. {-0.5, -0.4375, -0.5, -0.375, 0.5, -0.375},
  410. {0.375, -0.4375, -0.5, 0.5, 0.5, -0.375},
  411. {-0.375, 0.3125, 0.375, 0.375, 0.4375, 0.4375},
  412. {-0.375, -0.1875, 0.375, 0.375, -0.0625, 0.4375},
  413. {-0.4375, 0.3125, -0.375, -0.375, 0.4375, 0.375},
  414. {-0.4375, -0.1875, -0.375, -0.375, -0.0625, 0.375},
  415. },
  416. },
  417. selection_box = {
  418. type = "fixed",
  419. fixed = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
  420. },
  421. drop = "viaduct:"..item.."_bridge",
  422. sounds = def.sounds,
  423. groups = nocgroup,
  424. after_dig_node = function(pos, oldnode, oldmetadata, digger)
  425. local nodes = minetest.find_nodes_in_area({x = pos.x - 1, y = pos.y - 1, z = pos.z - 1}, {x = pos.x + 1, y = pos.y + 1, z = pos.z + 1}, {"group:bridge"})
  426. for i,v in ipairs(nodes) do
  427. local node = minetest.get_node(v)
  428. local node_def = minetest.registered_nodes[node.name]
  429. node_def.update_bridge(v)
  430. end
  431. end,
  432. update_bridge = function(pos)
  433. update(pos)
  434. end,
  435. })
  436. minetest.register_node(":viaduct:"..item.."_bridge_esw", {
  437. description = def.description,
  438. tiles = def.tiles,
  439. paramtype = "light",
  440. drawtype = "nodebox",
  441. node_box = {
  442. type = "fixed",
  443. fixed = {
  444. {-0.5, -0.5, -0.5, 0.5, -0.4375, 0.5},
  445. {-0.5, -0.4375, 0.375, -0.375, 0.5, 0.5},
  446. {0.375, -0.4375, 0.375, 0.5, 0.5, 0.5},
  447. {-0.5, -0.4375, -0.5, -0.375, 0.5, -0.375},
  448. {0.375, -0.4375, -0.5, 0.5, 0.5, -0.375},
  449. {-0.375, 0.3125, 0.375, 0.375, 0.4375, 0.4375},
  450. {-0.375, -0.1875, 0.375, 0.375, -0.0625, 0.4375},
  451. },
  452. },
  453. selection_box = {
  454. type = "fixed",
  455. fixed = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
  456. },
  457. drop = "viaduct:"..item.."_bridge",
  458. sounds = def.sounds,
  459. groups = nocgroup,
  460. after_dig_node = function(pos, oldnode, oldmetadata, digger)
  461. local nodes = minetest.find_nodes_in_area({x = pos.x - 1, y = pos.y - 1, z = pos.z - 1}, {x = pos.x + 1, y = pos.y + 1, z = pos.z + 1}, {"group:bridge"})
  462. for i,v in ipairs(nodes) do
  463. local node = minetest.get_node(v)
  464. local node_def = minetest.registered_nodes[node.name]
  465. node_def.update_bridge(v)
  466. end
  467. end,
  468. update_bridge = function(pos)
  469. update(pos)
  470. end,
  471. })
  472. minetest.register_node(":viaduct:"..item.."_bridge_n", {
  473. description = def.description,
  474. tiles = def.tiles,
  475. paramtype = "light",
  476. drawtype = "nodebox",
  477. node_box = {
  478. type = "fixed",
  479. fixed = {
  480. {-0.5, -0.5, -0.5, 0.5, -0.4375, 0.5},
  481. {-0.5, -0.4375, 0.375, -0.375, 0.5, 0.5},
  482. {0.375, -0.4375, 0.375, 0.5, 0.5, 0.5},
  483. {-0.5, -0.4375, -0.5, -0.375, 0.5, -0.375},
  484. {0.375, -0.4375, -0.5, 0.5, 0.5, -0.375},
  485. {0.375, 0.3125, -0.375, 0.4375, 0.4375, 0.375},
  486. {0.375, -0.1875, -0.375, 0.4375, -0.0625, 0.375},
  487. {-0.375, 0.3125, -0.4375, 0.375, 0.4375, -0.375},
  488. {-0.375, -0.1875, -0.4375, 0.375, -0.0625, -0.375},
  489. {-0.4375, 0.3125, -0.375, -0.375, 0.4375, 0.375},
  490. {-0.4375, -0.1875, -0.375, -0.375, -0.0625, 0.375},
  491. },
  492. },
  493. selection_box = {
  494. type = "fixed",
  495. fixed = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
  496. },
  497. drop = "viaduct:"..item.."_bridge",
  498. sounds = def.sounds,
  499. groups = nocgroup,
  500. after_dig_node = function(pos, oldnode, oldmetadata, digger)
  501. local nodes = minetest.find_nodes_in_area({x = pos.x - 1, y = pos.y - 1, z = pos.z - 1}, {x = pos.x + 1, y = pos.y + 1, z = pos.z + 1}, {"group:bridge"})
  502. for i,v in ipairs(nodes) do
  503. local node = minetest.get_node(v)
  504. local node_def = minetest.registered_nodes[node.name]
  505. node_def.update_bridge(v)
  506. end
  507. end,
  508. update_bridge = function(pos)
  509. update(pos)
  510. end,
  511. })
  512. minetest.register_node(":viaduct:"..item.."_bridge_nw", {
  513. description = def.description,
  514. tiles = def.tiles,
  515. paramtype = "light",
  516. drawtype = "nodebox",
  517. node_box = {
  518. type = "fixed",
  519. fixed = {
  520. {-0.5, -0.5, -0.5, 0.5, -0.4375, 0.5},
  521. {-0.5, -0.4375, 0.375, -0.375, 0.5, 0.5},
  522. {0.375, -0.4375, 0.375, 0.5, 0.5, 0.5},
  523. {-0.5, -0.4375, -0.5, -0.375, 0.5, -0.375},
  524. {0.375, -0.4375, -0.5, 0.5, 0.5, -0.375},
  525. {0.375, 0.3125, -0.375, 0.4375, 0.4375, 0.375},
  526. {0.375, -0.1875, -0.375, 0.4375, -0.0625, 0.375},
  527. {-0.375, 0.3125, -0.4375, 0.375, 0.4375, -0.375},
  528. {-0.375, -0.1875, -0.4375, 0.375, -0.0625, -0.375},
  529. },
  530. },
  531. selection_box = {
  532. type = "fixed",
  533. fixed = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
  534. },
  535. drop = "viaduct:"..item.."_bridge",
  536. sounds = def.sounds,
  537. groups = nocgroup,
  538. after_dig_node = function(pos, oldnode, oldmetadata, digger)
  539. local nodes = minetest.find_nodes_in_area({x = pos.x - 1, y = pos.y - 1, z = pos.z - 1}, {x = pos.x + 1, y = pos.y + 1, z = pos.z + 1}, {"group:bridge"})
  540. for i,v in ipairs(nodes) do
  541. local node = minetest.get_node(v)
  542. local node_def = minetest.registered_nodes[node.name]
  543. node_def.update_bridge(v)
  544. end
  545. end,
  546. update_bridge = function(pos)
  547. update(pos)
  548. end,
  549. })
  550. minetest.register_node(":viaduct:"..item.."_bridge_ns", {
  551. description = def.description,
  552. tiles = def.tiles,
  553. paramtype = "light",
  554. drawtype = "nodebox",
  555. node_box = {
  556. type = "fixed",
  557. fixed = {
  558. {-0.5, -0.5, -0.5, 0.5, -0.4375, 0.5},
  559. {-0.5, -0.4375, 0.375, -0.375, 0.5, 0.5},
  560. {0.375, -0.4375, 0.375, 0.5, 0.5, 0.5},
  561. {-0.5, -0.4375, -0.5, -0.375, 0.5, -0.375},
  562. {0.375, -0.4375, -0.5, 0.5, 0.5, -0.375},
  563. {0.375, 0.3125, -0.375, 0.4375, 0.4375, 0.375},
  564. {0.375, -0.1875, -0.375, 0.4375, -0.0625, 0.375},
  565. {-0.4375, 0.3125, -0.375, -0.375, 0.4375, 0.375},
  566. {-0.4375, -0.1875, -0.375, -0.375, -0.0625, 0.375},
  567. },
  568. },
  569. selection_box = {
  570. type = "fixed",
  571. fixed = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
  572. },
  573. drop = "viaduct:"..item.."_bridge",
  574. sounds = def.sounds,
  575. groups = nocgroup,
  576. after_dig_node = function(pos, oldnode, oldmetadata, digger)
  577. local nodes = minetest.find_nodes_in_area({x = pos.x - 1, y = pos.y - 1, z = pos.z - 1}, {x = pos.x + 1, y = pos.y + 1, z = pos.z + 1}, {"group:bridge"})
  578. for i,v in ipairs(nodes) do
  579. local node = minetest.get_node(v)
  580. local node_def = minetest.registered_nodes[node.name]
  581. node_def.update_bridge(v)
  582. end
  583. end,
  584. update_bridge = function(pos)
  585. update(pos)
  586. end,
  587. })
  588. minetest.register_node(":viaduct:"..item.."_bridge_nsw", {
  589. description = def.description,
  590. tiles = def.tiles,
  591. paramtype = "light",
  592. drawtype = "nodebox",
  593. node_box = {
  594. type = "fixed",
  595. fixed = {
  596. {-0.5, -0.5, -0.5, 0.5, -0.4375, 0.5},
  597. {-0.5, -0.4375, 0.375, -0.375, 0.5, 0.5},
  598. {0.375, -0.4375, 0.375, 0.5, 0.5, 0.5},
  599. {-0.5, -0.4375, -0.5, -0.375, 0.5, -0.375},
  600. {0.375, -0.4375, -0.5, 0.5, 0.5, -0.375},
  601. {0.375, 0.3125, -0.375, 0.4375, 0.4375, 0.375},
  602. {0.375, -0.1875, -0.375, 0.4375, -0.0625, 0.375},
  603. },
  604. },
  605. selection_box = {
  606. type = "fixed",
  607. fixed = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
  608. },
  609. drop = "viaduct:"..item.."_bridge",
  610. sounds = def.sounds,
  611. groups = nocgroup,
  612. after_dig_node = function(pos, oldnode, oldmetadata, digger)
  613. local nodes = minetest.find_nodes_in_area({x = pos.x - 1, y = pos.y - 1, z = pos.z - 1}, {x = pos.x + 1, y = pos.y + 1, z = pos.z + 1}, {"group:bridge"})
  614. for i,v in ipairs(nodes) do
  615. local node = minetest.get_node(v)
  616. local node_def = minetest.registered_nodes[node.name]
  617. node_def.update_bridge(v)
  618. end
  619. end,
  620. update_bridge = function(pos)
  621. update(pos)
  622. end,
  623. })
  624. minetest.register_node(":viaduct:"..item.."_bridge_ne", {
  625. description = def.description,
  626. tiles = def.tiles,
  627. paramtype = "light",
  628. drawtype = "nodebox",
  629. node_box = {
  630. type = "fixed",
  631. fixed = {
  632. {-0.5, -0.5, -0.5, 0.5, -0.4375, 0.5},
  633. {-0.5, -0.4375, 0.375, -0.375, 0.5, 0.5},
  634. {0.375, -0.4375, 0.375, 0.5, 0.5, 0.5},
  635. {-0.5, -0.4375, -0.5, -0.375, 0.5, -0.375},
  636. {0.375, -0.4375, -0.5, 0.5, 0.5, -0.375},
  637. {-0.375, 0.3125, -0.4375, 0.375, 0.4375, -0.375},
  638. {-0.375, -0.1875, -0.4375, 0.375, -0.0625, -0.375},
  639. {-0.4375, 0.3125, -0.375, -0.375, 0.4375, 0.375},
  640. {-0.4375, -0.1875, -0.375, -0.375, -0.0625, 0.375},
  641. },
  642. },
  643. selection_box = {
  644. type = "fixed",
  645. fixed = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
  646. },
  647. drop = "viaduct:"..item.."_bridge",
  648. sounds = def.sounds,
  649. groups = nocgroup,
  650. after_dig_node = function(pos, oldnode, oldmetadata, digger)
  651. local nodes = minetest.find_nodes_in_area({x = pos.x - 1, y = pos.y - 1, z = pos.z - 1}, {x = pos.x + 1, y = pos.y + 1, z = pos.z + 1}, {"group:bridge"})
  652. for i,v in ipairs(nodes) do
  653. local node = minetest.get_node(v)
  654. local node_def = minetest.registered_nodes[node.name]
  655. node_def.update_bridge(v)
  656. end
  657. end,
  658. update_bridge = function(pos)
  659. update(pos)
  660. end,
  661. })
  662. minetest.register_node(":viaduct:"..item.."_bridge_new", {
  663. description = def.description,
  664. tiles = def.tiles,
  665. paramtype = "light",
  666. drawtype = "nodebox",
  667. node_box = {
  668. type = "fixed",
  669. fixed = {
  670. {-0.5, -0.5, -0.5, 0.5, -0.4375, 0.5},
  671. {-0.5, -0.4375, 0.375, -0.375, 0.5, 0.5},
  672. {0.375, -0.4375, 0.375, 0.5, 0.5, 0.5},
  673. {-0.5, -0.4375, -0.5, -0.375, 0.5, -0.375},
  674. {0.375, -0.4375, -0.5, 0.5, 0.5, -0.375},
  675. {-0.375, 0.3125, -0.4375, 0.375, 0.4375, -0.375},
  676. {-0.375, -0.1875, -0.4375, 0.375, -0.0625, -0.375},
  677. },
  678. },
  679. selection_box = {
  680. type = "fixed",
  681. fixed = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
  682. },
  683. drop = "viaduct:"..item.."_bridge",
  684. sounds = def.sounds,
  685. groups = nocgroup,
  686. after_dig_node = function(pos, oldnode, oldmetadata, digger)
  687. local nodes = minetest.find_nodes_in_area({x = pos.x - 1, y = pos.y - 1, z = pos.z - 1}, {x = pos.x + 1, y = pos.y + 1, z = pos.z + 1}, {"group:bridge"})
  688. for i,v in ipairs(nodes) do
  689. local node = minetest.get_node(v)
  690. local node_def = minetest.registered_nodes[node.name]
  691. node_def.update_bridge(v)
  692. end
  693. end,
  694. update_bridge = function(pos)
  695. update(pos)
  696. end,
  697. })
  698. minetest.register_node(":viaduct:"..item.."_bridge_nes", {
  699. description = def.description,
  700. tiles = def.tiles,
  701. paramtype = "light",
  702. drawtype = "nodebox",
  703. node_box = {
  704. type = "fixed",
  705. fixed = {
  706. {-0.5, -0.5, -0.5, 0.5, -0.4375, 0.5},
  707. {-0.5, -0.4375, 0.375, -0.375, 0.5, 0.5},
  708. {0.375, -0.4375, 0.375, 0.5, 0.5, 0.5},
  709. {-0.5, -0.4375, -0.5, -0.375, 0.5, -0.375},
  710. {0.375, -0.4375, -0.5, 0.5, 0.5, -0.375},
  711. {-0.4375, 0.3125, -0.375, -0.375, 0.4375, 0.375},
  712. {-0.4375, -0.1875, -0.375, -0.375, -0.0625, 0.375},
  713. },
  714. },
  715. selection_box = {
  716. type = "fixed",
  717. fixed = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
  718. },
  719. drop = "viaduct:"..item.."_bridge",
  720. sounds = def.sounds,
  721. groups = nocgroup,
  722. after_dig_node = function(pos, oldnode, oldmetadata, digger)
  723. local nodes = minetest.find_nodes_in_area({x = pos.x - 1, y = pos.y - 1, z = pos.z - 1}, {x = pos.x + 1, y = pos.y + 1, z = pos.z + 1}, {"group:bridge"})
  724. for i,v in ipairs(nodes) do
  725. local node = minetest.get_node(v)
  726. local node_def = minetest.registered_nodes[node.name]
  727. node_def.update_bridge(v)
  728. end
  729. end,
  730. update_bridge = function(pos)
  731. update(pos)
  732. end,
  733. })
  734. minetest.register_node(":viaduct:"..item.."_bridge_nesw", {
  735. description = def.description,
  736. tiles = def.tiles,
  737. paramtype = "light",
  738. drawtype = "nodebox",
  739. node_box = {
  740. type = "fixed",
  741. fixed = {
  742. {-0.5, -0.5, -0.5, 0.5, -0.4375, 0.5},
  743. {-0.5, -0.4375, 0.375, -0.375, 0.5, 0.5},
  744. {0.375, -0.4375, 0.375, 0.5, 0.5, 0.5},
  745. {-0.5, -0.4375, -0.5, -0.375, 0.5, -0.375},
  746. {0.375, -0.4375, -0.5, 0.5, 0.5, -0.375},
  747. },
  748. },
  749. selection_box = {
  750. type = "fixed",
  751. fixed = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
  752. },
  753. drop = "viaduct:"..item.."_bridge",
  754. sounds = def.sounds,
  755. groups = nocgroup,
  756. after_dig_node = function(pos, oldnode, oldmetadata, digger)
  757. local nodes = minetest.find_nodes_in_area({x = pos.x - 1, y = pos.y - 1, z = pos.z - 1}, {x = pos.x + 1, y = pos.y + 1, z = pos.z + 1}, {"group:bridge"})
  758. for i,v in ipairs(nodes) do
  759. local node = minetest.get_node(v)
  760. local node_def = minetest.registered_nodes[node.name]
  761. node_def.update_bridge(v)
  762. end
  763. end,
  764. update_bridge = function(pos)
  765. update(pos)
  766. end,
  767. })
  768. minetest.register_node(":viaduct:"..item.."_bridge_un", {
  769. description = def.description,
  770. tiles = def.tiles,
  771. paramtype = "light",
  772. drawtype = "nodebox",
  773. node_box = {
  774. type = "fixed",
  775. fixed = {
  776. {-0.5, -0.5, -0.5, 0.5, -0.4375, 0},
  777. {-0.5, 0, 0, 0.5, 0.0625, 0.5},
  778. {-0.5, 0.0625, 0.375, -0.375, 1, 0.5},
  779. {0.375, 0.0625, 0.375, 0.5, 1, 0.5},
  780. {-0.5, 0.0625, 0, -0.375, 1, 0.125},
  781. {0.375, 0.0625, 0, 0.5, 1, 0.125},
  782. {-0.5, -0.4375, -0.125, -0.375, 0.5, 0},
  783. {0.375, -0.4375, -0.125, 0.5, 0.5, 0},
  784. {-0.5, -0.4375, -0.5, -0.375, 0.5, -0.375},
  785. {0.375, -0.4375, -0.5, 0.5, 0.5, -0.375},
  786. {-0.4375, 0.8125, 0.125, -0.375, 0.9375, 0.375},
  787. {-0.4375, 0.3125, 0.125, -0.375, 0.4375, 0.375},
  788. {0.375, 0.8125, 0.125, 0.4375, 0.9375, 0.375},
  789. {0.375, 0.3125, 0.125, 0.4375, 0.4375, 0.375},
  790. {-0.4375, 0.3125, -0.375, -0.375, 0.4375, -0.125},
  791. {-0.4375, -0.1875, -0.375, -0.375, -0.0625, -0.125},
  792. {0.375, 0.3125, -0.375, 0.4375, 0.4375, -0.125},
  793. {0.375, -0.1875, -0.375, 0.4375, -0.0625, -0.125},
  794. },
  795. },
  796. selection_box = {
  797. type = "fixed",
  798. fixed = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
  799. },
  800. drop = "viaduct:"..item.."_bridge",
  801. sounds = def.sounds,
  802. groups = nocgroup,
  803. after_dig_node = function(pos, oldnode, oldmetadata, digger)
  804. local nodes = minetest.find_nodes_in_area({x = pos.x - 1, y = pos.y - 1, z = pos.z - 1}, {x = pos.x + 1, y = pos.y + 1, z = pos.z + 1}, {"group:bridge"})
  805. for i,v in ipairs(nodes) do
  806. local node = minetest.get_node(v)
  807. local node_def = minetest.registered_nodes[node.name]
  808. node_def.update_bridge(v)
  809. end
  810. end,
  811. update_bridge = function(pos)
  812. update(pos)
  813. end,
  814. })
  815. minetest.register_node(":viaduct:"..item.."_bridge_ue", {
  816. description = def.description,
  817. tiles = def.tiles,
  818. paramtype = "light",
  819. drawtype = "nodebox",
  820. node_box = {
  821. type = "fixed",
  822. fixed = {
  823. {-0.5, -0.5, -0.5, 0, -0.4375, 0.5},
  824. {0, 0, -0.5, 0.5, 0.0625, 0.5},
  825. {-0.5, -0.4375, 0.375, -0.375, 0.5, 0.5},
  826. {-0.125, -0.4375, 0.375, 0, 0.5, 0.5},
  827. {-0.5, -0.4375, -0.5, -0.375, 0.5, -0.375},
  828. {-0.125, -0.4375, -0.5, 0, 0.5, -0.375},
  829. {0, 0.0625, 0.375, 0.125, 1, 0.5},
  830. {0.375, 0.0625, 0.375, 0.5, 1, 0.5},
  831. {0, 0.0625, -0.5, 0.125, 1, -0.375},
  832. {0.375, 0.0625, -0.5, 0.5, 1, -0.375},
  833. {-0.375, 0.3125, 0.375, -0.125, 0.4375, 0.4375},
  834. {-0.375, -0.1875, 0.375, -0.125, -0.0625, 0.4375},
  835. {-0.375, 0.3125, -0.4375, -0.125, 0.4375, -0.375},
  836. {-0.375, -0.1875, -0.4375, -0.125, -0.0625, -0.375},
  837. {0.125, 0.8125, 0.375, 0.375, 0.9375, 0.4375},
  838. {0.125, 0.3125, 0.375, 0.375, 0.4375, 0.4375},
  839. {0.125, 0.8125, -0.4375, 0.375, 0.9375, -0.375},
  840. {0.125, 0.3125, -0.4375, 0.375, 0.4375, -0.375},
  841. },
  842. },
  843. selection_box = {
  844. type = "fixed",
  845. fixed = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
  846. },
  847. drop = "viaduct:"..item.."_bridge",
  848. sounds = def.sounds,
  849. groups = nocgroup,
  850. after_dig_node = function(pos, oldnode, oldmetadata, digger)
  851. local nodes = minetest.find_nodes_in_area({x = pos.x - 1, y = pos.y - 1, z = pos.z - 1}, {x = pos.x + 1, y = pos.y + 1, z = pos.z + 1}, {"group:bridge"})
  852. for i,v in ipairs(nodes) do
  853. local node = minetest.get_node(v)
  854. local node_def = minetest.registered_nodes[node.name]
  855. node_def.update_bridge(v)
  856. end
  857. end,
  858. update_bridge = function(pos)
  859. update(pos)
  860. end,
  861. })
  862. minetest.register_node(":viaduct:"..item.."_bridge_us", {
  863. description = def.description,
  864. tiles = def.tiles,
  865. paramtype = "light",
  866. drawtype = "nodebox",
  867. node_box = {
  868. type = "fixed",
  869. fixed = {
  870. {-0.5, 0, -0.5, 0.5, 0.0625, 0},
  871. {-0.5, -0.5, 0, 0.5, -0.4375, 0.5},
  872. {-0.5, -0.4375, 0.375, -0.375, 0.5, 0.5},
  873. {0.375, -0.4375, 0.375, 0.5, 0.5, 0.5},
  874. {-0.5, -0.4375, 0, -0.375, 0.5, 0.125},
  875. {0.375, -0.4375, 0, 0.5, 0.5, 0.125},
  876. {-0.5, 0.0625, -0.125, -0.375, 1, 0},
  877. {0.375, 0.0625, -0.125, 0.5, 1, 0},
  878. {-0.5, 0.0625, -0.5, -0.375, 1, -0.375},
  879. {0.375, 0.0625, -0.5, 0.5, 1, -0.375},
  880. {-0.4375, 0.3125, 0.125, -0.375, 0.4375, 0.375},
  881. {-0.4375, -0.1875, 0.125, -0.375, -0.0625, 0.375},
  882. {0.375, 0.3125, 0.125, 0.4375, 0.4375, 0.375},
  883. {0.375, -0.1875, 0.125, 0.4375, -0.0625, 0.375},
  884. {-0.4375, 0.8125, -0.375, -0.375, 0.9375, -0.125},
  885. {-0.4375, 0.3125, -0.375, -0.375, 0.4375, -0.125},
  886. {0.375, 0.8125, -0.375, 0.4375, 0.9375, -0.125},
  887. {0.375, 0.3125, -0.375, 0.4375, 0.4375, -0.125},
  888. },
  889. },
  890. selection_box = {
  891. type = "fixed",
  892. fixed = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
  893. },
  894. drop = "viaduct:"..item.."_bridge",
  895. sounds = def.sounds,
  896. groups = nocgroup,
  897. after_dig_node = function(pos, oldnode, oldmetadata, digger)
  898. local nodes = minetest.find_nodes_in_area({x = pos.x - 1, y = pos.y - 1, z = pos.z - 1}, {x = pos.x + 1, y = pos.y + 1, z = pos.z + 1}, {"group:bridge"})
  899. for i,v in ipairs(nodes) do
  900. local node = minetest.get_node(v)
  901. local node_def = minetest.registered_nodes[node.name]
  902. node_def.update_bridge(v)
  903. end
  904. end,
  905. update_bridge = function(pos)
  906. update(pos)
  907. end,
  908. })
  909. minetest.register_node(":viaduct:"..item.."_bridge_uw", {
  910. description = def.description,
  911. tiles = def.tiles,
  912. paramtype = "light",
  913. drawtype = "nodebox",
  914. node_box = {
  915. type = "fixed",
  916. fixed = {
  917. {-0.5, 0, -0.5, 0, 0.0625, 0.5},
  918. {0, -0.5, -0.5, 0.5, -0.4375, 0.5},
  919. {-0.5, 0.0625, 0.375, -0.375, 1, 0.5},
  920. {-0.125, 0.0625, 0.375, 0, 1, 0.5},
  921. {-0.5, 0.0625, -0.5, -0.375, 1, -0.375},
  922. {-0.125, 0.0625, -0.5, 0, 1, -0.375},
  923. {0, -0.4375, 0.375, 0.125, 0.5, 0.5},
  924. {0.375, -0.4375, 0.375, 0.5, 0.5, 0.5},
  925. {0, -0.4375, -0.5, 0.125, 0.5, -0.375},
  926. {0.375, -0.4375, -0.5, 0.5, 0.5, -0.375},
  927. {-0.375, 0.8125, 0.375, -0.125, 0.9375, 0.4375},
  928. {-0.375, 0.3125, 0.375, -0.125, 0.4375, 0.4375},
  929. {-0.375, 0.8125, -0.4375, -0.125, 0.9375, -0.375},
  930. {-0.375, 0.3125, -0.4375, -0.125, 0.4375, -0.375},
  931. {0.125, 0.3125, 0.375, 0.375, 0.4375, 0.4375},
  932. {0.125, -0.1875, 0.375, 0.375, -0.0625, 0.4375},
  933. {0.125, 0.3125, -0.4375, 0.375, 0.4375, -0.375},
  934. {0.125, -0.1875, -0.4375, 0.375, -0.0625, -0.375},
  935. },
  936. },
  937. selection_box = {
  938. type = "fixed",
  939. fixed = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
  940. },
  941. drop = "viaduct:"..item.."_bridge",
  942. sounds = def.sounds,
  943. groups = nocgroup,
  944. after_dig_node = function(pos, oldnode, oldmetadata, digger)
  945. local nodes = minetest.find_nodes_in_area({x = pos.x - 1, y = pos.y - 1, z = pos.z - 1}, {x = pos.x + 1, y = pos.y + 1, z = pos.z + 1}, {"group:bridge"})
  946. for i,v in ipairs(nodes) do
  947. local node = minetest.get_node(v)
  948. local node_def = minetest.registered_nodes[node.name]
  949. node_def.update_bridge(v)
  950. end
  951. end,
  952. update_bridge = function(pos)
  953. update(pos)
  954. end,
  955. })
  956. minetest.register_craft({
  957. output = "viaduct:"..item.."_bridge 3",
  958. recipe = {
  959. {stick, "", stick},
  960. {stick, "", stick},
  961. {name, name, name},
  962. }
  963. })
  964. end
  965. function viaduct.register_rope_bridge(name, def)
  966. local node_def = minetest.registered_nodes[name]
  967. if not node_def then
  968. if minetest.get_current_modname() ~= "viaduct" then minetest.log("warning", "["..minetest.get_current_modname().."] node "..name.." not found in function viaduct.register_rope_bridge") end
  969. return
  970. end
  971. local item = name:split(':')[2]
  972. if not def.description then
  973. def.description = node_def.description.." Bridge"
  974. end
  975. if not def.tiles then
  976. def.tiles = node_def.tiles
  977. end
  978. local group
  979. if not def.groups then
  980. group = table.copy(node_def.groups)
  981. else
  982. group = def.groups
  983. end
  984. group.bridge = 1
  985. if not def.sounds then
  986. def.sounds = node_def.sounds
  987. end
  988. minetest.register_node(":viaduct:"..item.."_bridge_rope", {
  989. description = def.description,
  990. tiles = def.tiles,
  991. paramtype = "light",
  992. paramtype2 = "facedir",
  993. drawtype = "nodebox",
  994. node_box = {
  995. type = "fixed",
  996. fixed = {
  997. {-0.5, 0.375, -0.5, -0.375, 0.5, 0.5},
  998. {0.375, 0.375, -0.5, 0.5, 0.5, 0.5},
  999. {-0.5, -0.5, -0.5, -0.375, -0.375, 0.5},
  1000. {0.375, -0.5, -0.5, 0.5, -0.375, 0.5},
  1001. {-0.5, -0.375, -0.0625, -0.375, 0.375, 0.0625},
  1002. {0.375, -0.375, -0.0625, 0.5, 0.375, 0.0625},
  1003. {-0.1875, -0.5, -0.5, -0.0625, -0.375, 0.5},
  1004. {0.0625, -0.5, -0.5, 0.1875, -0.375, 0.5},
  1005. {-0.375, -0.5, 0.25, 0.375, -0.375, 0.375},
  1006. {-0.375, -0.5, -0.0625, 0.375, -0.375, 0.0625},
  1007. {-0.375, -0.5, -0.375, 0.375, -0.375, -0.25},
  1008. },
  1009. },
  1010. selection_box = {
  1011. type = "fixed",
  1012. fixed = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
  1013. },
  1014. drop = "viaduct:"..item.."_bridge_rope",
  1015. sounds = def.sounds,
  1016. groups = group,
  1017. after_place_node = function(pos, placer, itemstack, pointed_thing)
  1018. local node = minetest.get_node(pos)
  1019. local node_def = minetest.registered_nodes[node.name]
  1020. node_def.update_bridge(pos)
  1021. local nodes = minetest.find_nodes_in_area({x = pos.x - 1, y = pos.y - 1, z = pos.z - 1}, {x = pos.x + 1, y = pos.y + 1, z = pos.z + 1}, {"group:bridge"})
  1022. for i,v in ipairs(nodes) do
  1023. local node = minetest.get_node(v)
  1024. local node_def = minetest.registered_nodes[node.name]
  1025. node_def.update_bridge(v)
  1026. end
  1027. end,
  1028. after_dig_node = function(pos, oldnode, oldmetadata, digger)
  1029. local nodes = minetest.find_nodes_in_area({x = pos.x - 1, y = pos.y - 1, z = pos.z - 1}, {x = pos.x + 1, y = pos.y + 1, z = pos.z + 1}, {"group:bridge"})
  1030. for i,v in ipairs(nodes) do
  1031. local node = minetest.get_node(v)
  1032. local node_def = minetest.registered_nodes[node.name]
  1033. node_def.update_bridge(v)
  1034. end
  1035. end,
  1036. update_bridge = function(pos)
  1037. local north = minetest.get_node({x = pos.x, y = pos.y, z = pos.z + 1})
  1038. local south = minetest.get_node({x = pos.x, y = pos.y, z = pos.z - 1})
  1039. if minetest.get_item_group(north.name, "bridge") == 1 or minetest.get_item_group(south.name, "bridge") == 1 then
  1040. minetest.swap_node(pos, {name = "viaduct:"..item.."_bridge_rope", param2 = 0})
  1041. else
  1042. minetest.swap_node(pos, {name = "viaduct:"..item.."_bridge_rope", param2 = 1})
  1043. end
  1044. end,
  1045. })
  1046. minetest.register_alias("viaduct:"..item.."_bridge_rope_r", "viaduct:"..item.."_bridge_rope")
  1047. minetest.register_craft({
  1048. output = "viaduct:"..item.."_bridge_rope",
  1049. recipe = {
  1050. {name, "", name},
  1051. {"", "", ""},
  1052. {name, name, name},
  1053. }
  1054. })
  1055. minetest.register_craft({
  1056. type = "shapeless",
  1057. output = name.." 5",
  1058. recipe = {"viaduct:"..item.."_bridge_rope"},
  1059. })
  1060. end
  1061. function viaduct.register_wood_bridge_alias(old, new)
  1062. minetest.register_alias("viaduct:"..old.."_bridge", "viaduct:"..new.."_bridge")
  1063. minetest.register_alias("viaduct:"..old.."_bridge_w", "viaduct:"..new.."_bridge_w")
  1064. minetest.register_alias("viaduct:"..old.."_bridge_s", "viaduct:"..new.."_bridge_s")
  1065. minetest.register_alias("viaduct:"..old.."_bridge_sw", "viaduct:"..new.."_bridge_sw")
  1066. minetest.register_alias("viaduct:"..old.."_bridge_e", "viaduct:"..new.."_bridge_e")
  1067. minetest.register_alias("viaduct:"..old.."_bridge_ew", "viaduct:"..new.."_bridge_ew")
  1068. minetest.register_alias("viaduct:"..old.."_bridge_es", "viaduct:"..new.."_bridge_es")
  1069. minetest.register_alias("viaduct:"..old.."_bridge_esw", "viaduct:"..new.."_bridge_esw")
  1070. minetest.register_alias("viaduct:"..old.."_bridge_n", "viaduct:"..new.."_bridge_n")
  1071. minetest.register_alias("viaduct:"..old.."_bridge_nw", "viaduct:"..new.."_bridge_nw")
  1072. minetest.register_alias("viaduct:"..old.."_bridge_ns", "viaduct:"..new.."_bridge_ns")
  1073. minetest.register_alias("viaduct:"..old.."_bridge_nsw", "viaduct:"..new.."_bridge_nsw")
  1074. minetest.register_alias("viaduct:"..old.."_bridge_ne", "viaduct:"..new.."_bridge_ne")
  1075. minetest.register_alias("viaduct:"..old.."_bridge_new", "viaduct:"..new.."_bridge_new")
  1076. minetest.register_alias("viaduct:"..old.."_bridge_nes", "viaduct:"..new.."_bridge_nes")
  1077. minetest.register_alias("viaduct:"..old.."_bridge_nesw", "viaduct:"..new.."_bridge_nesw")
  1078. minetest.register_alias("viaduct:"..old.."_bridge_un", "viaduct:"..new.."_bridge_un")
  1079. minetest.register_alias("viaduct:"..old.."_bridge_ue", "viaduct:"..new.."_bridge_ue")
  1080. minetest.register_alias("viaduct:"..old.."_bridge_us", "viaduct:"..new.."_bridge_us")
  1081. minetest.register_alias("viaduct:"..old.."_bridge_uw", "viaduct:"..new.."_bridge_uw")
  1082. end
  1083. viaduct.register_wood_bridge("default:wood", {description="Wooden Bridge"})
  1084. viaduct.register_wood_bridge("default:junglewood", {description="Junglewood Bridge"})
  1085. viaduct.register_wood_bridge("default:pine_wood", {description="Pine Wood Bridge"})
  1086. viaduct.register_wood_bridge("default:acacia_wood", {description="Acacia Wood Bridge"})
  1087. viaduct.register_wood_bridge("default:aspen_wood", {description="Aspen Wood Bridge"})
  1088. viaduct.register_wood_bridge("default:birch_wood", {})
  1089. viaduct.register_wood_bridge("default:maple_wood", {})
  1090. viaduct.register_wood_bridge("default:cherry_wood", {})
  1091. viaduct.register_wood_bridge("default:papyrus_block", {stick="default:papyrus"})
  1092. viaduct.register_wood_bridge("default:planks", {})
  1093. viaduct.register_wood_bridge("default:planks_oak", {})
  1094. viaduct.register_wood_bridge("default:planks_birch", {})
  1095. viaduct.register_rope_bridge("default:vine", {tiles={"viaduct_vine.png"}})
  1096. viaduct.register_rope_bridge("default:rope", {})
  1097. -- Add Ethereal support to Viaduct
  1098. if minetest.get_modpath("ethereal") then
  1099. viaduct.register_wood_bridge("ethereal:banana_wood", {description="Banana Wood Bridge"})
  1100. viaduct.register_wood_bridge("ethereal:birch_wood", {description="Birch Wood Bridge"})
  1101. viaduct.register_wood_bridge("ethereal:frost_wood", {description="Frost Wood Bridge"})
  1102. viaduct.register_wood_bridge("ethereal:mushroom_trunk", {description="Mushroom Trunk Bridge"})
  1103. viaduct.register_wood_bridge("ethereal:palm_wood", {description="Palm Wood Bridge"})
  1104. viaduct.register_wood_bridge("ethereal:redwood_wood", {description="Redwood Bridge"})
  1105. viaduct.register_wood_bridge("ethereal:sakura_wood", {description="Sakura Wood Bridge"})
  1106. viaduct.register_wood_bridge("ethereal:scorched_tree", {description="Scorched Bridge"})
  1107. viaduct.register_wood_bridge("ethereal:willow_wood", {description="Willow Wood Bridge"})
  1108. viaduct.register_wood_bridge("ethereal:yellow_wood", {description="Yellow Wood Bridge"})
  1109. end
  1110. -- Add df_caverns support to viaduct.
  1111. if minetest.get_modpath("df_trees") then
  1112. viaduct.register_wood_bridge("df_trees:black_cap_wood", {description="Black Cap Bridge"})
  1113. viaduct.register_wood_bridge("df_trees:blood_thorn_wood", {description="Blood Thorn Bridge"})
  1114. viaduct.register_wood_bridge("df_trees:fungiwood_wood", {description="Fungiwood Bridge"})
  1115. viaduct.register_wood_bridge("df_trees:goblin_cap_stem_wood", {description="Goblin Cap Stem Bridge"})
  1116. viaduct.register_wood_bridge("df_trees:goblin_cap_wood", {description="Goblin Cap Bridge"})
  1117. viaduct.register_wood_bridge("df_trees:nether_cap_wood", {description="Nether Cap Bridge"})
  1118. viaduct.register_wood_bridge("df_trees:tower_cap_wood", {description="Tower Cap Bridge"})
  1119. viaduct.register_wood_bridge("df_trees:spore_tree_wood", {description="Spore Tree Bridge"})
  1120. viaduct.register_wood_bridge("df_trees:tunnel_tube_wood", {description="Tunnel Tube Bridge"})
  1121. end
  1122. if(minetest.get_modpath("deco")) then
  1123. viaduct.register_wood_bridge("deco:oak_plank", {stick="tools:stick"})
  1124. viaduct.register_wood_bridge("deco:birch_plank", {stick="tools:stick"})
  1125. viaduct.register_wood_bridge("deco:cherry_plank", {stick="tools:stick"})
  1126. viaduct.register_wood_bridge("deco:evergreen_plank", {stick="tools:stick"})
  1127. end
  1128. if(minetest.get_modpath("hemp")) then
  1129. viaduct.register_rope_bridge("hemp:hemp_rope", {})
  1130. end
  1131. if(minetest.get_modpath("lottblocks")) then
  1132. viaduct.register_rope_bridge("lottblocks:elven_rope", {tiles={"viaduct_elven_rope.png"}})
  1133. end
  1134. if(minetest.get_modpath("lottplants")) then
  1135. viaduct.register_wood_bridge("lottplants:pinewood", {})
  1136. viaduct.register_wood_bridge("lottplants:birchwood", {})
  1137. viaduct.register_wood_bridge("lottplants:alderwood", {})
  1138. viaduct.register_wood_bridge("lottplants:lebethronwood", {})
  1139. viaduct.register_wood_bridge("lottplants:mallornwood", {})
  1140. end
  1141. if(minetest.get_modpath("moreblocks")) then
  1142. viaduct.register_rope_bridge("moreblocks:rope", {tiles={"viaduct_vine.png"}})
  1143. end