nodes.lua 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722
  1. local chest_formspec =
  2. "size[8,9]" ..
  3. default.gui_bg ..
  4. default.gui_bg_img ..
  5. default.gui_slots ..
  6. "list[current_name;main;0,0.3;8,4;]" ..
  7. "list[current_player;main;0,4.85;8,1;]" ..
  8. "list[current_player;main;0,6.08;8,3;8]" ..
  9. "listring[current_name;main]" ..
  10. "listring[current_player;main]" ..
  11. default.get_hotbar_bg(0,4.85)
  12. minetest.register_node("ufowreck:locked_crate", {
  13. description = "Locked Crate",
  14. tiles = {"scifi_nodes_crate.png"},
  15. paramtype2 = "facedir",
  16. groups = {cracky = 1, oddly_breakable_by_hand = 2, fuel = 8},
  17. legacy_facedir_simple = true,
  18. is_ground_content = false,
  19. sounds = default.node_sound_metal_defaults(),
  20. drop = {
  21. max_items = 3,
  22. items = {
  23. {items = {'ufowreck:pad'}, rarity = 10},
  24. {items = {'ufowreck:glow_plant'},rarity = 5},
  25. {items = {'ufowreck:eye'},rarity = 5},
  26. {items = {'ufowreck:predatory_plant'},rarity = 5},
  27. {items = {'default:mese'},rarity = 5},
  28. {items = {'default:mese'},rarity = 5},
  29. {items = {'ufowreck:powered_stand'},rarity = 5},
  30. {items = {'ufowreck:ladder 9'},rarity = 5},
  31. {items = {'ufowreck:crate'}},
  32. }
  33. },
  34. })
  35. minetest.register_node("ufowreck:crate", {
  36. description = "Crate",
  37. tiles = {"scifi_nodes_crate.png"},
  38. paramtype2 = "facedir",
  39. groups = {cracky = 1, oddly_breakable_by_hand = 2},
  40. legacy_facedir_simple = true,
  41. is_ground_content = false,
  42. sounds = default.node_sound_metal_defaults(),
  43. on_construct = function(pos)
  44. local meta = minetest.get_meta(pos)
  45. meta:set_string("formspec", chest_formspec)
  46. meta:set_string("infotext", "Crate")
  47. local inv = meta:get_inventory()
  48. inv:set_size("main", 8 * 4)
  49. end,
  50. on_metadata_inventory_move = function(pos, from_list, from_index,
  51. to_list, to_index, count, player)
  52. minetest.log("action", player:get_player_name() ..
  53. " moves stuff in chest at " .. minetest.pos_to_string(pos))
  54. end,
  55. on_metadata_inventory_put = function(pos, listname, index, stack, player)
  56. minetest.log("action", player:get_player_name() ..
  57. " moves stuff to chest at " .. minetest.pos_to_string(pos))
  58. end,
  59. on_metadata_inventory_take = function(pos, listname, index, stack, player)
  60. minetest.log("action", player:get_player_name() ..
  61. " takes stuff from chest at " .. minetest.pos_to_string(pos))
  62. end,
  63. })
  64. minetest.register_node("ufowreck:alien_metal", {
  65. description = "Alien Metal Block",
  66. tiles = {"scifi_nodes_lighttop.png"},
  67. drawtype = "nodebox",
  68. paramtype2 = "facedir",
  69. paramtype = "light",
  70. sunlight_propagates = true,
  71. is_ground_content = false,
  72. groups = {cracky = 1},
  73. sounds = default.node_sound_metal_defaults(),
  74. })
  75. minetest.register_craft({
  76. output = "default:steel_ingot 9",
  77. type = "shapeless",
  78. recipe = {"ufowreck:alien_metal"}
  79. })
  80. minetest.register_node("ufowreck:alien_light", {
  81. description = "Alien Lightbox",
  82. sunlight_propagates = false,
  83. tiles = {
  84. "scifi_nodes_lighttop.png",
  85. "scifi_nodes_lighttop.png",
  86. "scifi_nodes_greenlight.png",
  87. "scifi_nodes_greenlight.png",
  88. "scifi_nodes_greenlight.png",
  89. "scifi_nodes_greenlight.png"
  90. },
  91. light_source = 10,
  92. paramtype = "light",
  93. groups = {cracky=1},
  94. sounds = default.node_sound_glass_defaults()
  95. })
  96. minetest.register_craft({
  97. output = "ufowreck:alien_light",
  98. type = "shapeless",
  99. recipe = {"ufowreck:alien_metal", "default:tin_ingot","default:mese_crystal_fragment"}
  100. })
  101. minetest.register_node("ufowreck:alien_glass", {
  102. description = "Alien Glass",
  103. drawtype = "glasslike",
  104. sunlight_propagates = true,
  105. tiles = {
  106. "scifi_nodes_glass.png"
  107. },
  108. use_texture_alpha = true,
  109. paramtype = "light",
  110. groups = {cracky=1},
  111. sounds = default.node_sound_glass_defaults()
  112. })
  113. minetest.register_craft({
  114. output = "ufowreck:alien_glass 2",
  115. type = "shapeless",
  116. recipe = {"ufowreck:alien_metal", "default:obsidian_glass"}
  117. })
  118. minetest.register_node("ufowreck:alien_control", {
  119. description = "Alien Control Block",
  120. sunlight_propagates = false,
  121. tiles = {{
  122. name="scifi_nodes_black_lights.png",
  123. animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=3.50}, --length=0.50
  124. }},
  125. paramtype = "light",
  126. groups = {cracky=1},
  127. sounds = default.node_sound_metal_defaults(),
  128. })
  129. --door
  130. minetest.register_node("ufowreck:alien_door_closed", {
  131. description = "Alien Door",
  132. inventory_image = "scifi_nodes_door_black_inv.png",
  133. wield_image = "scifi_nodes_door_black_inv.png",
  134. tiles = {
  135. "scifi_nodes_door_black_edge.png",
  136. "scifi_nodes_door_black_edge.png",
  137. "scifi_nodes_door_black_edge.png",
  138. "scifi_nodes_door_black_edge.png",
  139. "scifi_nodes_door_black_rbottom.png",
  140. "scifi_nodes_door_black_bottom.png"
  141. },
  142. drawtype = "nodebox",
  143. paramtype = "light",
  144. paramtype2 = "facedir",
  145. groups = {cracky = 1, oddly_breakable_by_hand = 1},
  146. node_box = {
  147. type = "fixed",
  148. fixed = {
  149. {-0.5, -0.5, -0.0625, 0.5, 0.5, 0.0625}
  150. }
  151. },
  152. selection_box = {
  153. type = "fixed",
  154. fixed = {
  155. {-0.5, -0.5, -0.0625, 0.5, 1.5, 0.0625}
  156. }
  157. },
  158. on_place = function(itemstack, placer, pointed_thing)
  159. -- Is there room enough ?
  160. local pos1 = pointed_thing.above
  161. local pos2 = {x=pos1.x, y=pos1.y, z=pos1.z}
  162. pos2.y = pos2.y+1 -- 2 nodes above
  163. if
  164. not minetest.registered_nodes[minetest.get_node(pos1).name].buildable_to or
  165. not minetest.registered_nodes[minetest.get_node(pos2).name].buildable_to or
  166. not placer or
  167. not placer:is_player() or
  168. minetest.is_protected(pos1, placer:get_player_name()) or
  169. minetest.is_protected(pos2, placer:get_player_name()) then
  170. return
  171. end
  172. local pt = pointed_thing.above
  173. local pt2 = {x=pt.x, y=pt.y, z=pt.z}
  174. pt2.y = pt2.y+1
  175. -- Player look dir is converted to node rotation ?
  176. local p2 = minetest.dir_to_facedir(placer:get_look_dir())
  177. -- Where to look for another door ?
  178. local pt3 = {x=pt.x, y=pt.y, z=pt.z}
  179. -- Door param2 depends of placer's look dir
  180. local p4 = 0
  181. if p2 == 0 then
  182. pt3.x = pt3.x-1
  183. p4 = 2
  184. elseif p2 == 1 then
  185. pt3.z = pt3.z+1
  186. p4 = 3
  187. elseif p2 == 2 then
  188. pt3.x = pt3.x+1
  189. p4 = 0
  190. elseif p2 == 3 then
  191. pt3.z = pt3.z-1
  192. p4 = 1
  193. end
  194. -- First door of a pair is already there
  195. if minetest.get_node(pt3).name == "ufowreck:alien_door_closed" then
  196. minetest.set_node(pt, {name="ufowreck:alien_door_closed", param2=p4,})
  197. minetest.set_node(pt2, {name="ufowreck:alien_door_closed_top", param2=p4})
  198. -- Placed door is the first of a pair
  199. else
  200. minetest.set_node(pt, {name="ufowreck:alien_door_closed", param2=p2,})
  201. minetest.set_node(pt2, {name="ufowreck:alien_door_closed_top", param2=p2})
  202. end
  203. itemstack:take_item(1)
  204. return itemstack;
  205. end,
  206. after_destruct = function(pos, oldnode)
  207. minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z},{name="air"})
  208. end,
  209. on_rightclick = function(pos, node, player, itemstack, pointed_thing)
  210. -- play sound
  211. minetest.sound_play("scifi_nodes_door_mechanic",{
  212. max_hear_distance = 16,
  213. pos = pos,
  214. gain = 1.0
  215. })
  216. local timer = minetest.get_node_timer(pos)
  217. local a = minetest.get_node({x=pos.x, y=pos.y, z=pos.z-1})
  218. local b = minetest.get_node({x=pos.x, y=pos.y, z=pos.z+1})
  219. local c = minetest.get_node({x=pos.x+1, y=pos.y, z=pos.z})
  220. local d = minetest.get_node({x=pos.x-1, y=pos.y, z=pos.z})
  221. local e = minetest.get_node({x=pos.x+1, y=pos.y, z=pos.z-1})
  222. local f = minetest.get_node({x=pos.x-1, y=pos.y, z=pos.z-1})
  223. local g = minetest.get_node({x=pos.x+1, y=pos.y, z=pos.z+1})
  224. local h = minetest.get_node({x=pos.x-1, y=pos.y, z=pos.z+1})
  225. minetest.set_node(pos, {name="ufowreck:alien_door_opened", param2=node.param2})
  226. minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z}, {name="ufowreck:alien_door_opened_top", param2=node.param2})
  227. if a.name == "ufowreck:alien_door_closed" then
  228. minetest.set_node({x=pos.x, y=pos.y, z=pos.z-1}, {name="ufowreck:alien_door_opened", param2=a.param2})
  229. minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z-1}, {name="ufowreck:alien_door_opened_top", param2=a.param2})
  230. end
  231. if b.name == "ufowreck:alien_door_closed" then
  232. minetest.set_node({x=pos.x, y=pos.y, z=pos.z+1}, {name="ufowreck:alien_door_opened", param2=b.param2})
  233. minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z+1}, {name="ufowreck:alien_door_opened_top", param2=b.param2})
  234. end
  235. if c.name == "ufowreck:alien_door_closed" then
  236. minetest.set_node({x=pos.x+1, y=pos.y, z=pos.z}, {name="ufowreck:alien_door_opened", param2=c.param2})
  237. minetest.set_node({x=pos.x+1,y=pos.y+1,z=pos.z}, {name="ufowreck:alien_door_opened_top", param2=c.param2})
  238. end
  239. if d.name == "ufowreck:alien_door_closed" then
  240. minetest.set_node({x=pos.x-1, y=pos.y, z=pos.z}, {name="ufowreck:alien_door_opened", param2=d.param2})
  241. minetest.set_node({x=pos.x-1,y=pos.y+1,z=pos.z}, {name="ufowreck:alien_door_opened_top", param2=d.param2})
  242. end
  243. if e.name == "ufowreck:alien_door_closed" then
  244. minetest.set_node({x=pos.x+1, y=pos.y, z=pos.z-1}, {name="ufowreck:alien_door_opened", param2=e.param2})
  245. minetest.set_node({x=pos.x+1, y=pos.y+1, z=pos.z-1}, {name="ufowreck:alien_door_opened_top", param2=e.param2})
  246. end
  247. if f.name == "ufowreck:alien_door_closed" then
  248. minetest.set_node({x=pos.x-1, y=pos.y, z=pos.z-1}, {name="ufowreck:alien_door_opened", param2=f.param2})
  249. minetest.set_node({x=pos.x-1, y=pos.y+1, z=pos.z-1}, {name="ufowreck:alien_door_opened_top", param2=f.param2})
  250. end
  251. if g.name == "ufowreck:alien_door_closed" then
  252. minetest.set_node({x=pos.x+1, y=pos.y, z=pos.z+1}, {name="ufowreck:alien_door_opened", param2=g.param2})
  253. minetest.set_node({x=pos.x+1, y=pos.y+1, z=pos.z+1}, {name="ufowreck:alien_door_opened_top", param2=g.param2})
  254. end
  255. if h.name == "ufowreck:alien_door_closed" then
  256. minetest.set_node({x=pos.x-1, y=pos.y, z=pos.z+1}, {name="ufowreck:alien_door_opened", param2=h.param2})
  257. minetest.set_node({x=pos.x-1, y=pos.y+1, z=pos.z+1}, {name="ufowreck:alien_door_opened_top", param2=h.param2})
  258. end
  259. timer:start(5)
  260. end,
  261. })
  262. minetest.register_node("ufowreck:alien_door_closed_top", {
  263. tiles = {
  264. "scifi_nodes_door_black_edge.png",
  265. "scifi_nodes_door_black_edge.png",
  266. "scifi_nodes_door_black_edge.png",
  267. "scifi_nodes_door_black_edge.png",
  268. "scifi_nodes_door_black_rtop.png",
  269. "scifi_nodes_door_black_top.png"
  270. },
  271. drawtype = "nodebox",
  272. paramtype = "light",
  273. paramtype2 = "facedir",
  274. groups = {cracky = 1},
  275. node_box = {
  276. type = "fixed",
  277. fixed = {
  278. {-0.5, -0.5, -0.0625, 0.5, 0.5, 0.0625}
  279. }
  280. },
  281. selection_box = {
  282. type = "fixed",
  283. fixed = {
  284. {0, 0, 0, 0, 0, 0},
  285. }
  286. },
  287. can_dig = function(pos, player)
  288. return false
  289. end,
  290. })
  291. minetest.register_node("ufowreck:alien_door_opened", {
  292. tiles = {
  293. "scifi_nodes_door_black_edge.png",
  294. "scifi_nodes_door_black_edge.png",
  295. "scifi_nodes_door_black_edge.png",
  296. "scifi_nodes_door_black_edge.png",
  297. "scifi_nodes_door_black_rbottom0.png",
  298. "scifi_nodes_door_black_bottom0.png"
  299. },
  300. drawtype = "nodebox",
  301. paramtype = "light",
  302. paramtype2 = "facedir",
  303. drop = {
  304. items = {
  305. {items = {'ufowreck:alien_door_closed'}},
  306. }
  307. },
  308. groups = {cracky = 1},
  309. node_box = {
  310. type = "fixed",
  311. fixed = {
  312. {-0.5, -0.5, -0.0625, -0.25, 0.5, 0.0625},
  313. }
  314. },
  315. selection_box = {
  316. type = "fixed",
  317. fixed = {
  318. {-0.5, -0.5, -0.0625, -0.25, 1.5, 0.0625},
  319. }
  320. },
  321. after_place_node = function(pos, placer, itemstack, pointed_thing)
  322. local node = minetest.get_node(pos)
  323. minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z},{name="ufowreck:alien_door_opened_top",param2=node.param2})
  324. end,
  325. after_destruct = function(pos, oldnode)
  326. minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z},{name="air"})
  327. end,
  328. on_timer = function(pos, elapsed)
  329. -- play sound
  330. minetest.sound_play("scifi_nodes_door_mechanic",{
  331. max_hear_distance = 16,
  332. pos = pos,
  333. gain = 1.0
  334. })
  335. local node = minetest.get_node(pos)
  336. local a = minetest.get_node({x=pos.x, y=pos.y, z=pos.z-1})
  337. local b = minetest.get_node({x=pos.x, y=pos.y, z=pos.z+1})
  338. local c = minetest.get_node({x=pos.x+1, y=pos.y, z=pos.z})
  339. local d = minetest.get_node({x=pos.x-1, y=pos.y, z=pos.z})
  340. local e = minetest.get_node({x=pos.x+1, y=pos.y, z=pos.z-1})
  341. local f = minetest.get_node({x=pos.x-1, y=pos.y, z=pos.z-1})
  342. local g = minetest.get_node({x=pos.x+1, y=pos.y, z=pos.z+1})
  343. local h = minetest.get_node({x=pos.x-1, y=pos.y, z=pos.z+1})
  344. minetest.set_node(pos, {name="ufowreck:alien_door_closed", param2=node.param2})
  345. minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z}, {name="ufowreck:alien_door_closed_top", param2=node.param2})
  346. if a.name == "ufowreck:alien_door_opened" then
  347. minetest.set_node({x=pos.x, y=pos.y, z=pos.z-1}, {name="ufowreck:alien_door_closed", param2=a.param2})
  348. minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z-1}, {name="ufowreck:alien_door_closed_top", param2=a.param2})
  349. end
  350. if b.name == "ufowreck:alien_door_opened" then
  351. minetest.set_node({x=pos.x, y=pos.y, z=pos.z+1}, {name="ufowreck:alien_door_closed", param2=b.param2})
  352. minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z+1}, {name="ufowreck:alien_door_closed_top", param2=b.param2})
  353. end
  354. if c.name == "ufowreck:alien_door_opened" then
  355. minetest.set_node({x=pos.x+1, y=pos.y, z=pos.z}, {name="ufowreck:alien_door_closed", param2=c.param2})
  356. minetest.set_node({x=pos.x+1,y=pos.y+1,z=pos.z}, {name="ufowreck:alien_door_closed_top", param2=c.param2})
  357. end
  358. if d.name == "ufowreck:alien_door_opened" then
  359. minetest.set_node({x=pos.x-1, y=pos.y, z=pos.z}, {name="ufowreck:alien_door_closed", param2=d.param2})
  360. minetest.set_node({x=pos.x-1,y=pos.y+1,z=pos.z}, {name="ufowreck:alien_door_closed_top", param2=d.param2})
  361. end
  362. if e.name == "ufowreck:alien_door_opened" then
  363. minetest.set_node({x=pos.x+1, y=pos.y, z=pos.z-1}, {name="ufowreck:alien_door_closed", param2=e.param2})
  364. minetest.set_node({x=pos.x+1, y=pos.y+1, z=pos.z-1}, {name="ufowreck:alien_door_closed_top", param2=e.param2})
  365. end
  366. if f.name == "ufowreck:alien_door_opened" then
  367. minetest.set_node({x=pos.x-1, y=pos.y, z=pos.z-1}, {name="ufowreck:alien_door_closed", param2=f.param2})
  368. minetest.set_node({x=pos.x-1, y=pos.y+1, z=pos.z-1}, {name="ufowreck:alien_door_closed_top", param2=f.param2})
  369. end
  370. if g.name == "ufowreck:alien_door_opened" then
  371. minetest.set_node({x=pos.x+1, y=pos.y, z=pos.z+1}, {name="ufowreck:alien_door_closed", param2=g.param2})
  372. minetest.set_node({x=pos.x+1, y=pos.y+1, z=pos.z+1}, {name="ufowreck:alien_door_closed_top", param2=g.param2})
  373. end
  374. if h.name == "ufowreck:alien_door_opened" then
  375. minetest.set_node({x=pos.x-1, y=pos.y, z=pos.z+1}, {name="ufowreck:alien_door_closed", param2=h.param2})
  376. minetest.set_node({x=pos.x-1, y=pos.y+1, z=pos.z+1}, {name="ufowreck:alien_door_closed_top", param2=h.param2})
  377. end
  378. end,
  379. can_dig = function(pos, player)
  380. return false
  381. end,
  382. })
  383. minetest.register_node("ufowreck:alien_door_opened_top", {
  384. tiles = {
  385. "scifi_nodes_door_black_edge.png",
  386. "scifi_nodes_door_black_edge.png",
  387. "scifi_nodes_door_black_edge.png",
  388. "scifi_nodes_door_black_edge.png",
  389. "scifi_nodes_door_black_rtopo.png",
  390. "scifi_nodes_door_black_topo.png"
  391. },
  392. drawtype = "nodebox",
  393. paramtype = "light",
  394. paramtype2 = "facedir",
  395. groups = {cracky = 1},
  396. node_box = {
  397. type = "fixed",
  398. fixed = {
  399. {-0.5, -0.5, -0.0625, -0.25, 0.5, 0.0625},
  400. }
  401. },
  402. selection_box = {
  403. type = "fixed",
  404. fixed = {
  405. {0, 0, 0, 0, 0, 0},
  406. }
  407. },
  408. can_dig = function(pos, player)
  409. return false
  410. end,
  411. })
  412. minetest.register_node("ufowreck:bar_light", {
  413. description = "Alien Lightbars",
  414. tiles = {
  415. "scifi_nodes_orange2.png",
  416. },
  417. drawtype = "nodebox",
  418. paramtype = "light",
  419. use_texture_alpha = true,
  420. light_source = 9,
  421. node_box = {
  422. type = "fixed",
  423. fixed = {
  424. {0.125, -0.5, 0.125, 0.375, 0.5, 0.375}, -- NodeBox1
  425. {-0.375, -0.5, 0.125, -0.125, 0.5, 0.375}, -- NodeBox2
  426. {-0.375, -0.5, -0.375, -0.125, 0.5, -0.125}, -- NodeBox3
  427. {0.125, -0.5, -0.375, 0.375, 0.5, -0.125}, -- NodeBox4
  428. }
  429. },
  430. groups = {cracky=1},
  431. sounds = default.node_sound_glass_defaults()
  432. })
  433. minetest.register_node("ufowreck:alien_egg", {
  434. description = "Alien Egg",
  435. tiles = {
  436. "scifi_nodes_egg_top.png",
  437. "scifi_nodes_egg_top.png",
  438. "scifi_nodes_egg_side.png",
  439. "scifi_nodes_egg_side.png",
  440. "scifi_nodes_egg_side.png",
  441. "scifi_nodes_egg_side.png"
  442. },
  443. sunlight_propagates = false,
  444. drawtype = "nodebox",
  445. paramtype = "light",
  446. groups = {cracky=1, oddly_breakable_by_hand=1, dig_immediate=2, falling_node=1},
  447. light_source = 5,
  448. node_box = {
  449. type = "fixed",
  450. fixed = {
  451. {-0.25, -0.5, -0.25, 0.25, -0.4375, 0.25}, -- NodeBox1
  452. {-0.375, -0.4375, -0.375, 0.375, -0.3125, 0.375}, -- NodeBox2
  453. {-0.4375, -0.3125, -0.375, 0.4375, 0.3125, 0.375}, -- NodeBox3
  454. {-0.375, 0.3125, -0.375, 0.375, 0.4375, 0.375}, -- NodeBox4
  455. {-0.3125, 0.4375, -0.3125, 0.3125, 0.5625, 0.3125}, -- NodeBox5
  456. {-0.25, 0.5625, -0.25, 0.25, 0.6875, 0.25}, -- NodeBox6
  457. {-0.1875, 0.6875, -0.1875, 0.1875, 0.75, 0.1875}, -- NodeBox7
  458. {-0.125, 0.75, -0.125, 0.125, 0.8125, 0.125}, -- NodeBox8
  459. {-0.375, -0.3125, -0.4375, 0.375, 0.3125, 0.4375}, -- NodeBox9
  460. },
  461. sounds = default.node_sound_wood_defaults()
  462. }
  463. })
  464. if minetest.get_modpath("mobs_spider") then
  465. mobs:spawn({name = "mobs_spider:spider",
  466. nodes = {"ufowreck:alien_egg"},
  467. active_object_count = 10,
  468. chance = 10,
  469. interval = 30,
  470. })
  471. end
  472. minetest.register_node("ufowreck:eye_tree", {
  473. description = "Alien Eye Tree",
  474. tiles = {{
  475. name="scifi_nodes_eyetree.png",
  476. animation={type="vertical_frames", aspect_w=48, aspect_h=48, length=10}, --length=0.50
  477. }},
  478. drawtype = "plantlike",
  479. groups = {snappy=2, choppy=2, oddly_breakable_by_hand=2, dig_immediate=3, flora=1},
  480. paramtype = "light",
  481. visual_scale = 2.5,
  482. buildable_to = true,
  483. walkable = false,
  484. selection_box = {
  485. type = "fixed",
  486. fixed = {
  487. {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3},
  488. }
  489. },
  490. drop = {
  491. items = {
  492. {items = {'ufowreck:eye 4'}},
  493. }
  494. },
  495. after_destruct = function(pos, oldnode)
  496. minetest.set_node(pos, {name = "ufowreck:eye_tree_empty"})
  497. end,
  498. is_ground_content = false,
  499. })
  500. minetest.register_node("ufowreck:eye_tree_empty", {
  501. description = "Alien Eye Tree",
  502. tiles = {"scifi_nodes_eyetree_2.png"},
  503. drawtype = "plantlike",
  504. inventory_image = {"scifi_nodes_eyetree_2.png"},
  505. groups = {snappy=2, choppy=2, oddly_breakable_by_hand=2, flora=1},
  506. paramtype = "light",
  507. visual_scale = 2.5,
  508. buildable_to = true,
  509. walkable = false,
  510. selection_box = {
  511. type = "fixed",
  512. fixed = {
  513. {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3},
  514. }
  515. },
  516. drop = {
  517. items = {
  518. {items = {'ufowreck:eye'}},
  519. }
  520. },
  521. on_construct = function(pos)
  522. minetest.get_node_timer(pos):start(math.random(300, 1500))
  523. end,
  524. on_timer = function(pos)
  525. minetest.set_node(pos, {name = "ufowreck:eye_tree"})
  526. end,
  527. is_ground_content = false,
  528. })
  529. local buff_speed = 1 --add to physics multiplier
  530. local buff_jump = 0.5 --add to physics multiplier
  531. minetest.register_node("ufowreck:eye", {
  532. description = "Alien Eye",
  533. tiles = {"eye.png"},
  534. drawtype = "plantlike",
  535. inventory_image = "eye.png",
  536. wield_image = "eye.png",
  537. groups = { food = 2, eatable = 4 },
  538. buildable_to = true,
  539. walkable = false,
  540. on_construct = function(pos)
  541. minetest.get_node_timer(pos):start(math.random(300, 1500))
  542. end,
  543. on_timer = function(pos)
  544. minetest.set_node(pos, {name = "ufowreck:eye_tree"})
  545. end,
  546. on_use = function(itemstack, user, pointed_thing)
  547. local physics = user:get_physics_override()
  548. user:set_physics_override({
  549. speed = physics.speed + buff_speed,
  550. jump = physics.jump + buff_jump,
  551. })
  552. minetest.after(10, function(user)
  553. if user and user:is_player() then
  554. local phys = user:get_physics_override()
  555. user:set_physics_override({
  556. speed = phys.speed - buff_speed,
  557. jump = phys.jump - buff_jump,
  558. })
  559. end
  560. end, user)
  561. return minetest.do_item_eat(4, nil, itemstack, user, pointed_thing)
  562. end
  563. })
  564. minetest.register_node("ufowreck:predatory_plant", {
  565. description = "Alien Predatory Plant",
  566. tiles = {"scifi_nodes_flower3.png"},
  567. drawtype = "plantlike",
  568. inventory_image = {"scifi_nodes_flower3.png"},
  569. groups = {snappy=1, choppy=1, oddly_breakable_by_hand=1, dig_immediate=3, flora=1},
  570. paramtype = "light",
  571. visual_scale = 2.5,
  572. buildable_to = true,
  573. walkable = false,
  574. damage_per_second = 0.5,
  575. selection_box = {
  576. type = "fixed",
  577. fixed = {
  578. {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3},
  579. }
  580. },
  581. is_ground_content = false,
  582. })
  583. minetest.register_node("ufowreck:glow_plant", {
  584. description = "Alien Glow Plant",
  585. tiles = {{
  586. name="scifi_nodes_plant2_anim.png",
  587. animation={type="vertical_frames", aspect_w=32, aspect_h=32, length=5},
  588. }},
  589. inventory_image = "scifi_nodes_plant2.png",
  590. wield_image = "scifi_nodes_plant2.png",
  591. drawtype = "plantlike",
  592. groups = {snappy=2, choppy=2, oddly_breakable_by_hand=2, dig_immediate=3, flora=1},
  593. paramtype = "light",
  594. visual_scale = 1.5,
  595. buildable_to = true,
  596. walkable = false,
  597. selection_box = {
  598. type = "fixed",
  599. fixed = {
  600. {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3},
  601. }
  602. },
  603. is_ground_content = false,
  604. light_source = 14,
  605. })
  606. minetest.register_node("ufowreck:powered_stand", {
  607. description = "Powered Stand",
  608. tiles = {
  609. "scifi_nodes_pwrstnd_top.png",
  610. "scifi_nodes_pwrstnd_top.png",
  611. "scifi_nodes_pwrstnd_side.png",
  612. "scifi_nodes_pwrstnd_side.png",
  613. "scifi_nodes_pwrstnd_side.png",
  614. "scifi_nodes_pwrstnd_side.png"
  615. },
  616. drawtype = "nodebox",
  617. paramtype = "light",
  618. node_box = {
  619. type = "fixed",
  620. fixed = {
  621. {-0.375, 0.25, -0.3125, 0.375, 0.4375, 0.3125}, -- NodeBox1
  622. {-0.3125, 0.25, -0.375, 0.3125, 0.4375, 0.375}, -- NodeBox2
  623. {-0.3125, 0.4375, -0.3125, 0.3125, 0.5, 0.3125}, -- NodeBox3
  624. {-0.5, -0.5, -0.125, 0.5, 0.125, 0.125}, -- NodeBox4
  625. {-0.125, -0.5, -0.5, 0.125, 0.125, 0.5}, -- NodeBox5
  626. {-0.4375, 0.125, -0.125, 0.4375, 0.25, 0.125}, -- NodeBox6
  627. {-0.125, 0.125, -0.4375, 0.125, 0.25, 0.4375}, -- NodeBox7
  628. {-0.3125, -0.5, -0.375, 0.3125, 0.0625, 0.3125}, -- NodeBox8
  629. {-0.25, 0.0625, -0.3125, 0.25, 0.125, 0.3125}, -- NodeBox9
  630. }
  631. },
  632. groups = {cracky=1, oddly_breakable_by_hand=1},
  633. on_rightclick = function(pos, node, clicker, item, _)
  634. local wield_item_stack = clicker:get_wielded_item()
  635. local wield_item = wield_item_stack:get_name()
  636. local taken = item:take_item()
  637. if taken and not taken:is_empty() then
  638. if wield_item_stack:get_count() == 1 then
  639. -- only 1 item in "hands" copy over entire stack with metadata
  640. wield_item = wield_item_stack
  641. end
  642. minetest.add_item({x=pos.x, y=pos.y+1, z=pos.z}, wield_item)
  643. return item
  644. end
  645. end,
  646. })
  647. minetest.register_node("ufowreck:ladder", {
  648. description = "Metal Ladder",
  649. tiles = {
  650. "scifi_nodes_ladder.png",
  651. },
  652. drawtype = "nodebox",
  653. paramtype = "light",
  654. selection_box = {
  655. type = "wallmounted",
  656. fixed = {-0.5, -0.5, -0.5, -0.45, 0.5, 0.5}
  657. },
  658. node_box = {
  659. type = "fixed",
  660. fixed = {
  661. {0.3125, -0.5, -0.4375, 0.4375, -0.375, -0.3125}, -- NodeBox12
  662. {-0.4375, -0.5, -0.4375, -0.3125, -0.375, -0.3125}, -- NodeBox13
  663. {-0.375, -0.375, -0.4375, 0.375, -0.3125, -0.3125}, -- NodeBox14
  664. {-0.375, -0.375, 0.3125, 0.375, -0.3125, 0.4375}, -- NodeBox18
  665. {-0.375, -0.375, 0.0625, 0.375, -0.3125, 0.1875}, -- NodeBox19
  666. {-0.375, -0.375, -0.1875, 0.375, -0.3125, -0.0625}, -- NodeBox20
  667. {-0.4375, -0.5, -0.1875, -0.3125, -0.375, -0.0625}, -- NodeBox21
  668. {-0.4375, -0.5, 0.0625, -0.3125, -0.375, 0.1875}, -- NodeBox22
  669. {-0.4375, -0.5, 0.3125, -0.3125, -0.375, 0.4375}, -- NodeBox23
  670. {0.3125, -0.5, 0.3125, 0.4375, -0.375, 0.4375}, -- NodeBox24
  671. {0.3125, -0.5, 0.0625, 0.4375, -0.375, 0.1875}, -- NodeBox25
  672. {0.3125, -0.5, -0.1875, 0.4375, -0.375, -0.0625}, -- NodeBox26
  673. },
  674. sounds = default.node_sound_metal_defaults()
  675. },
  676. paramtype2 = "wallmounted",
  677. walkable = false,
  678. climbable = true,
  679. groups = {cracky=1, oddly_breakable_by_hand=1},
  680. })