init.lua 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978
  1. if not minetest.global_exists("rackstone") then rackstone = {} end
  2. rackstone.modpath = minetest.get_modpath("rackstone")
  3. -- group:rackstone is being used to check if a node should be considered naturally occuring for ambiance purposes.
  4. -- Localize for performance.
  5. local math_random = math.random
  6. -- Base light-level for all nether nodes.
  7. -- Otherwise the nether would be black.
  8. rackstone.light_source = 2
  9. rackstone.rackstone_sounds =
  10. function()
  11. local table = {
  12. dig = {name="rackstone_dugstonemetal", gain=1.0},
  13. dug = {name="rackstone_digstonemetal", gain=1.0},
  14. --place = {name="rackstone_placestonemetal", gain=1.0},
  15. }
  16. return default.node_sound_stone_defaults(table)
  17. end
  18. rackstone.cobble_sounds =
  19. function()
  20. local table = {
  21. footstep = {name="default_gravel_footstep", gain=0.5},
  22. }
  23. return default.node_sound_stone_defaults(table)
  24. end
  25. rackstone.destabilize_dauthsand =
  26. function(pos)
  27. local minp = {x=pos.x-1, y=pos.y, z=pos.z-1}
  28. local maxp = {x=pos.x+1, y=pos.y, z=pos.z+1}
  29. local nodes = minetest.find_nodes_in_area(minp, maxp, "rackstone:dauthsand_stable")
  30. for k, v in ipairs(nodes) do
  31. minetest.swap_node(v, {name="rackstone:dauthsand"})
  32. minetest.check_for_falling(v)
  33. end
  34. end
  35. minetest.register_node("rackstone:rackstone", {
  36. description = "Rackstone",
  37. tiles = {"rackstone_rackstone.png"},
  38. groups = utility.dig_groups("stone", {rackstone=1, stabilize_dauthsand=1, netherack=1}),
  39. sounds = default.node_sound_stone_defaults(),
  40. after_destruct = rackstone.destabilize_dauthsand,
  41. movement_speed_multiplier = default.ROAD_SPEED_NETHER,
  42. --light_source = rackstone.light_source,
  43. is_ground_content = false,
  44. -- Common stone does not count toward tool's dig count.
  45. _toolranks = {
  46. ignore = true,
  47. },
  48. drop = "rackstone:cobble",
  49. _is_bulk_mapgen_stone = true,
  50. })
  51. minetest.register_node("rackstone:cobble", {
  52. description = "Rackstone Cobble",
  53. tiles = {"rackstone_rackstone_cobble.png"},
  54. groups = utility.dig_groups("cobble", {rackstone=1, stabilize_dauthsand=1, netherack=1}),
  55. sounds = rackstone.cobble_sounds(),
  56. after_destruct = rackstone.destabilize_dauthsand,
  57. movement_speed_multiplier = default.ROAD_SPEED_NETHER,
  58. -- Common stone does not count toward tool's dig count.
  59. _toolranks = {
  60. ignore = true,
  61. },
  62. _no_auto_pop = true,
  63. _is_bulk_mapgen_stone = true,
  64. })
  65. minetest.register_node("rackstone:rackstone_brick2", {
  66. description = "Rackstone Brick",
  67. paramtype2 = "facedir",
  68. place_param2 = 0,
  69. tiles = {"rackstone_rackstone_brick.png"},
  70. groups = utility.dig_groups("brick", {rackstone=1, brick=1}),
  71. sounds = default.node_sound_stone_defaults(),
  72. })
  73. minetest.register_node("rackstone:rackstone_block", {
  74. description = "Rackstone Block",
  75. paramtype2 = "facedir",
  76. place_param2 = 0,
  77. tiles = {"rackstone_rackstone_block.png"},
  78. groups = utility.dig_groups("block", {rackstone=1}),
  79. sounds = default.node_sound_stone_defaults(),
  80. })
  81. local after_redrack_remove = function(pos)
  82. -- Remove netherflame above.
  83. local flamepos = {x=pos.x, y=pos.y+1, z=pos.z}
  84. if minetest.get_node(flamepos).name == "fire:nether_flame" then
  85. minetest.remove_node(flamepos)
  86. end
  87. -- Tricks!
  88. if math_random(1, 500) == 1 then
  89. local which = math_random(1, 4)
  90. ambiance.sound_play("tnt_gunpowder_burning", pos, 2, 20)
  91. if which == 1 then
  92. minetest.add_node(pos, {name='rackstone:evilrack'})
  93. core.check_for_falling(pos)
  94. elseif which == 2 then
  95. minetest.add_node(pos, {name="fire:nether_flame"})
  96. elseif which == 3 then
  97. minetest.add_node(pos, {name="default:lava_source"})
  98. else
  99. --ambiance.sound_play("tnt_gunpowder_burning", pos, 2, 20)
  100. -- Delay after TNT gunpowder burning sound to give warning.
  101. minetest.after(1.5, function()
  102. local def = {
  103. radius = 3,
  104. damage_radius = 2,
  105. ignore_protection = false,
  106. disable_drops = true,
  107. ignore_on_blast = false,
  108. }
  109. tnt.boom(pos, def)
  110. end)
  111. end
  112. end
  113. end
  114. rackstone.after_redrack_remove = after_redrack_remove
  115. local on_redrack_place = function(pos)
  116. if math_random(1, 6) == 1 then
  117. local posabove = {x=pos.x, y=pos.y+1, z=pos.z}
  118. local light = minetest.get_node_light(posabove)
  119. if light then
  120. if light >= 15 then
  121. -- Copy position table, just in case.
  122. local npos = {x=pos.x, y=pos.y, z=pos.z}
  123. ambiance.sound_play("default_gravel_footstep", npos, 1, 20)
  124. minetest.after(math_random(1, 6), function()
  125. minetest.remove_node(npos)
  126. local def = {
  127. radius = 2,
  128. damage_radius = 2,
  129. ignore_protection = false,
  130. disable_drops = true,
  131. ignore_on_blast = false,
  132. }
  133. tnt.boom(npos, def)
  134. end)
  135. end
  136. end
  137. end
  138. end
  139. rackstone.on_redrack_place = on_redrack_place
  140. minetest.register_node("rackstone:redrack", {
  141. description = "Netherack",
  142. tiles = {"rackstone_redrack.png"},
  143. groups = utility.dig_groups("netherack", {rackstone=1, stabilize_dauthsand=1, netherack=1}),
  144. sounds = rackstone.rackstone_sounds(),
  145. movement_speed_multiplier = default.SLOW_SPEED_NETHER,
  146. is_ground_content = false,
  147. drop = {
  148. max_items = 1,
  149. items = {
  150. {
  151. rarity = 2,
  152. tool_groups = {
  153. "gem_tool",
  154. },
  155. items = {},
  156. },
  157. {
  158. rarity = 1,
  159. items = {"rackstone:redrack_cobble"},
  160. }
  161. },
  162. },
  163. _is_bulk_mapgen_stone = true,
  164. -- Common stone does not count toward tool's dig count.
  165. _toolranks = {
  166. ignore = true,
  167. },
  168. light_source = rackstone.light_source,
  169. after_destruct = function(...)
  170. after_redrack_remove(...)
  171. rackstone.destabilize_dauthsand(...)
  172. end,
  173. on_construct = function(...)
  174. on_redrack_place(...)
  175. end,
  176. on_player_walk_over = function(pos, player)
  177. if math_random(1, 2000) == 1 then
  178. minetest.after(math_random(1, 4), function()
  179. if not minetest.test_protection(pos, "") then
  180. tnt.boom(pos, {
  181. radius = 2,
  182. ignore_protection = false,
  183. ignore_on_blast = false,
  184. damage_radius = 3,
  185. disable_drops = true,
  186. })
  187. end
  188. end)
  189. end
  190. end,
  191. })
  192. minetest.register_node("rackstone:redrack_cobble", {
  193. description = "Cobbled Netherack",
  194. tiles = {"rackstone_redrack_cobble.png"},
  195. groups = utility.dig_groups("netherack", {rackstone=1, stabilize_dauthsand=1, netherack=1}),
  196. sounds = rackstone.rackstone_sounds(),
  197. movement_speed_multiplier = default.SLOW_SPEED_NETHER,
  198. -- Common stone does not count toward tool's dig count.
  199. _toolranks = {
  200. ignore = true,
  201. },
  202. _no_auto_pop = true,
  203. _is_bulk_mapgen_stone = true,
  204. after_destruct = function(...)
  205. rackstone.destabilize_dauthsand(...)
  206. end,
  207. on_construct = function(...)
  208. on_redrack_place(...)
  209. end,
  210. on_player_walk_over = function(pos, player)
  211. if math_random(1, 10000) == 1 then
  212. minetest.after(math_random(1, 4), function()
  213. if not minetest.test_protection(pos, "") then
  214. tnt.boom(pos, {
  215. radius = 2,
  216. ignore_protection = false,
  217. ignore_on_blast = false,
  218. damage_radius = 2,
  219. disable_drops = true,
  220. })
  221. end
  222. end)
  223. end
  224. end,
  225. })
  226. minetest.register_node("rackstone:nether_grit", {
  227. description = "Nether Grit",
  228. tiles = {{
  229. name = "rackstone_redrack2_animated.png",
  230. animation = {type = "vertical_frames", aspect_w = 16, aspect_h = 16, length = 5.0},
  231. }},
  232. --tiles = {"rackstone_redrack2.png"},
  233. groups = utility.dig_groups("racksand", {falling_node=1, disable_jump=1}),
  234. sounds = rackstone.rackstone_sounds(),
  235. movement_speed_multiplier = default.SLOW_SPEED_NETHER,
  236. liquid_viscosity = 8,
  237. liquidtype = "source",
  238. liquid_alternative_flowing = "rackstone:nether_grit",
  239. liquid_alternative_source = "rackstone:nether_grit",
  240. liquid_renewable = false,
  241. liquid_range = 0,
  242. light_source = rackstone.light_source,
  243. walkable = false,
  244. -- This was an attempt to make the pathfinder avoid these nodes, but by making
  245. -- the node walkable, the pathfinder just generates paths that go *over* them,
  246. -- anyway.
  247. --walkable = true,
  248. --collision_box = {type="fixed", fixed={0,0,0, 0,0,0}},
  249. drawtype = "glasslike",
  250. paramtype = "light",
  251. post_effect_color = {a = 200, r = 30, g = 0, b = 0},
  252. damage_per_second = 1*500,
  253. _damage_per_second_type = "poison",
  254. _death_message = {
  255. "Nether tar ate a new hole in <player>.",
  256. "<player> succumbed to the horrors of nether grit.",
  257. "<player> died: stuck in nether grit.",
  258. },
  259. drop = {
  260. max_items = 1,
  261. items = {
  262. {items = {'default:flint'}, rarity = 16},
  263. {items = {'rackstone:nether_grit'}}
  264. }
  265. },
  266. _is_bulk_mapgen_stone = true,
  267. })
  268. minetest.register_node("rackstone:void", {
  269. description = "Nether Void Gap (You Hacker!)",
  270. tiles = {"rackstone_redrack.png"},
  271. groups = utility.dig_groups("cobble"),
  272. sounds = rackstone.rackstone_sounds(),
  273. movement_speed_multiplier = default.SLOW_SPEED_NETHER,
  274. walkable = false,
  275. drawtype = "glasslike",
  276. paramtype = "light",
  277. post_effect_color = {a = 200, r = 30, g = 0, b = 0},
  278. damage_per_second = 1*500,
  279. _damage_per_second_type = "crush",
  280. _death_message = "<player> found a void pocket.",
  281. drop = "",
  282. _is_bulk_mapgen_stone = true,
  283. light_source = rackstone.light_source,
  284. })
  285. minetest.register_node("rackstone:redrack_with_iron", {
  286. description = "Netherack With Iron",
  287. tiles = {
  288. "rackstone_redrack.png",
  289. "rackstone_redrack.png",
  290. "rackstone_redrack.png^default_mineral_iron3.png",
  291. "rackstone_redrack.png^default_mineral_iron3.png",
  292. "rackstone_redrack.png^default_mineral_iron3.png",
  293. "rackstone_redrack.png^default_mineral_iron3.png",
  294. },
  295. groups = utility.dig_groups("mineral", {rackstone=1, netherack=1, ore = 1}),
  296. sounds = rackstone.rackstone_sounds(),
  297. drop = "default:iron_lump",
  298. _tnt_drop = "default:iron_lump 2",
  299. silverpick_drop = true,
  300. movement_speed_multiplier = default.SLOW_SPEED_NETHER,
  301. place_param2 = 10,
  302. light_source = rackstone.light_source,
  303. after_destruct = function(...)
  304. after_redrack_remove(...)
  305. end,
  306. })
  307. minetest.register_node("rackstone:redrack_with_copper", {
  308. description = "Netherack With Copper",
  309. tiles = {
  310. "rackstone_redrack.png",
  311. "rackstone_redrack.png",
  312. "rackstone_redrack.png^default_mineral_copper3.png",
  313. "rackstone_redrack.png^default_mineral_copper3.png",
  314. "rackstone_redrack.png^default_mineral_copper3.png",
  315. "rackstone_redrack.png^default_mineral_copper3.png",
  316. },
  317. groups = utility.dig_groups("mineral", {rackstone=1, netherack=1, ore=1}),
  318. sounds = rackstone.rackstone_sounds(),
  319. drop = "default:copper_lump",
  320. _tnt_drop = "default:copper_lump 2",
  321. silverpick_drop = true,
  322. movement_speed_multiplier = default.SLOW_SPEED_NETHER,
  323. place_param2 = 10,
  324. light_source = rackstone.light_source,
  325. after_destruct = function(...)
  326. after_redrack_remove(...)
  327. end,
  328. })
  329. minetest.register_craftitem("rackstone:dauth_lump", {
  330. description = "Dauth Lump",
  331. inventory_image = "rackstone_dauth_lump.png",
  332. })
  333. minetest.register_craft({
  334. type = "fuel",
  335. recipe = "rackstone:dauth_lump",
  336. burntime = 60,
  337. })
  338. minetest.register_node("rackstone:redrack_with_coal", {
  339. description = "Netherack With Dauth",
  340. tiles = {
  341. "rackstone_redrack.png",
  342. "rackstone_redrack.png",
  343. "rackstone_redrack.png^default_mineral_coal3.png",
  344. "rackstone_redrack.png^default_mineral_coal3.png",
  345. "rackstone_redrack.png^default_mineral_coal3.png",
  346. "rackstone_redrack.png^default_mineral_coal3.png",
  347. },
  348. groups = utility.dig_groups("mineral", {rackstone=1, netherack=1}),
  349. sounds = rackstone.rackstone_sounds(),
  350. drop = "rackstone:dauth_lump",
  351. silverpick_drop = true,
  352. movement_speed_multiplier = default.SLOW_SPEED_NETHER,
  353. place_param2 = 10,
  354. light_source = rackstone.light_source,
  355. after_destruct = function(...)
  356. after_redrack_remove(...)
  357. end,
  358. })
  359. minetest.register_node("rackstone:redrack_with_tin", {
  360. description = "Netherack With Tin",
  361. tiles = {
  362. "rackstone_redrack.png",
  363. "rackstone_redrack.png",
  364. "rackstone_redrack.png^moreores_mineral_tin2.png",
  365. "rackstone_redrack.png^moreores_mineral_tin2.png",
  366. "rackstone_redrack.png^moreores_mineral_tin2.png",
  367. "rackstone_redrack.png^moreores_mineral_tin2.png",
  368. },
  369. groups = utility.dig_groups("mineral", {rackstone=1, netherack=1, ore=1}),
  370. sounds = rackstone.rackstone_sounds(),
  371. drop = "moreores:tin_lump",
  372. _tnt_drop = "moreores:tin_lump 2",
  373. silverpick_drop = true,
  374. movement_speed_multiplier = default.SLOW_SPEED_NETHER,
  375. place_param2 = 10,
  376. light_source = rackstone.light_source,
  377. after_destruct = function(...)
  378. after_redrack_remove(...)
  379. end,
  380. })
  381. minetest.register_node("rackstone:tile", {
  382. description = "Nether Grit Tile",
  383. paramtype2 = "facedir",
  384. place_param2 = 0,
  385. tiles = {"rackstone_redtile.png"},
  386. groups = utility.dig_groups("brick", {brick=1}),
  387. sounds = default.node_sound_stone_defaults(),
  388. })
  389. minetest.register_node("rackstone:brick", {
  390. description = "Netherack Brick",
  391. paramtype2 = "facedir",
  392. place_param2 = 0,
  393. tiles = {"rackstone_brick.png"},
  394. groups = utility.dig_groups("brick", {brick=1}),
  395. sounds = default.node_sound_stone_defaults(),
  396. })
  397. minetest.register_node("rackstone:redrack_block", {
  398. description = "Netherack Block",
  399. paramtype2 = "facedir",
  400. place_param2 = 0,
  401. tiles = {"rackstone_redrack_block.png"},
  402. groups = utility.dig_groups("block"),
  403. sounds = default.node_sound_stone_defaults(),
  404. })
  405. minetest.register_node("rackstone:brick_black", {
  406. description = "Black Rackstone Brick",
  407. paramtype2 = "facedir",
  408. place_param2 = 0,
  409. tiles = {"rackstone_brick_black.png"},
  410. groups = utility.dig_groups("brick", {brick=1}),
  411. sounds = default.node_sound_stone_defaults(),
  412. })
  413. minetest.register_node("rackstone:blackrack_block", {
  414. description = "Black Rackstone Block",
  415. paramtype2 = "facedir",
  416. place_param2 = 0,
  417. tiles = {"rackstone_blackrack_block.png"},
  418. groups = utility.dig_groups("block"),
  419. sounds = default.node_sound_stone_defaults(),
  420. })
  421. minetest.register_node("rackstone:bluerack", {
  422. description = "Blue Rackstone",
  423. tiles = {"rackstone_bluerack.png"},
  424. groups = utility.dig_groups("hardstone", {rackstone=1, netherack=1}),
  425. sounds = rackstone.rackstone_sounds(),
  426. movement_speed_multiplier = default.SLOW_SPEED_NETHER,
  427. })
  428. minetest.register_node("rackstone:bluerack_brick", {
  429. description = "Blue Rackstone Brick",
  430. paramtype2 = "facedir",
  431. place_param2 = 0,
  432. tiles = {"rackstone_bluerack_brick.png"},
  433. groups = utility.dig_groups("brick", {rackstone=1, brick=1}),
  434. sounds = rackstone.rackstone_sounds(),
  435. })
  436. minetest.register_node("rackstone:bluerack_block", {
  437. description = "Blue Rackstone Block",
  438. paramtype2 = "facedir",
  439. place_param2 = 0,
  440. tiles = {"rackstone_bluerack_block.png"},
  441. groups = utility.dig_groups("block", {rackstone=1}),
  442. sounds = rackstone.rackstone_sounds(),
  443. })
  444. minetest.register_node("rackstone:blackrack", {
  445. description = "Black Rackstone",
  446. tiles = {"rackstone_blackrack.png"},
  447. groups = utility.dig_groups("cobble", {rackstone=1, native_stone=1, stabilize_dauthsand=1, netherack=1}),
  448. sounds = rackstone.rackstone_sounds(),
  449. movement_speed_multiplier = default.SLOW_SPEED_NETHER,
  450. paramtype2 = "none",
  451. after_destruct = rackstone.destabilize_dauthsand,
  452. _is_bulk_mapgen_stone = true,
  453. -- Nodes placed shall not produce starpearls when dug.
  454. after_place_node = function(pos, placer, itemstack, pointed_thing)
  455. if placer then
  456. local node = minetest.get_node(pos)
  457. node.param2 = 1
  458. minetest.swap_node(pos, node)
  459. end
  460. end,
  461. -- Digging nodes placed by mapgen shall sometimes produce starpearls.
  462. after_dig_node = function(pos, oldnode, oldmetadata, digger)
  463. if digger and oldnode.param2 == 0 then
  464. -- Only drop them rarely.
  465. -- Only drop if blackrack was placed by mapgen.
  466. -- This prevents place-harvest-place-harvest exploit.
  467. -- Only if realm does NOT reset.
  468. local realm = rc.current_realm_at_pos(pos)
  469. local rdata = rc.get_realm_data(realm)
  470. if rdata and rdata.realm_resets then
  471. return
  472. end
  473. -- Otherwise, pearls would be WAY too easy to get in this realm, due to large blackrack deposits.
  474. if realm == "ariba" then
  475. return
  476. end
  477. local chance = 80
  478. local tool = digger:get_wielded_item():get_name()
  479. if tool:find("pick") and tool:find("silver") then
  480. chance = 20
  481. end
  482. if math_random(1, chance) == 1 then
  483. local inv = digger:get_inventory()
  484. local leftover = inv:add_item("main", ItemStack('starpearl:pearl'))
  485. minetest.add_item(pos, leftover)
  486. end
  487. end
  488. end,
  489. })
  490. minetest.register_node("rackstone:evilrack", {
  491. description = "Witchrack",
  492. tiles = {"rackstone_evilstone.png"},
  493. groups = utility.dig_groups("netherack", {falling_node=1, rackstone=1, netherack=1}),
  494. sounds = rackstone.rackstone_sounds(),
  495. movement_speed_multiplier = default.SLOW_SPEED_NETHER,
  496. })
  497. minetest.register_node("rackstone:dauthsand", {
  498. description = "Dauthsand",
  499. tiles = {"rackstone_dauthsand.png"},
  500. groups = utility.dig_groups("racksand", {falling_node=1, racksand=1, nether_soil=1}),
  501. --damage_per_second = 4*500,
  502. post_effect_color = {a=255, r=0, g=0, b=0},
  503. sounds = default.node_sound_gravel_defaults(),
  504. drop = {
  505. items = {
  506. {items = {'bluegrass:seed'}, rarity = 32},
  507. {items = {'rackstone:dauthsand'}},
  508. {items = {'default:flint'}, rarity = 16}
  509. }
  510. },
  511. movement_speed_multiplier = default.SLOW_SPEED,
  512. -- Stabilize dauth sand if held by rackstone.
  513. on_construct = function(pos)
  514. local x1 = minetest.get_node({x=pos.x+1, y=pos.y, z=pos.z}).name
  515. local x2 = minetest.get_node({x=pos.x-1, y=pos.y, z=pos.z}).name
  516. local z1 = minetest.get_node({x=pos.x, y=pos.y, z=pos.z+1}).name
  517. local z2 = minetest.get_node({x=pos.x, y=pos.y, z=pos.z-1}).name
  518. if minetest.get_item_group(x1, "stabilize_dauthsand") > 0 and
  519. minetest.get_item_group(x2, "stabilize_dauthsand") > 0 then
  520. minetest.swap_node(pos, {name="rackstone:dauthsand_stable"})
  521. elseif minetest.get_item_group(z1, "stabilize_dauthsand") > 0 and
  522. minetest.get_item_group(z2, "stabilize_dauthsand") > 0 then
  523. minetest.swap_node(pos, {name="rackstone:dauthsand_stable"})
  524. end
  525. end,
  526. })
  527. -- Special sand type that doesn't fall.
  528. -- Not supposed to be player-obtainable.
  529. minetest.register_node("rackstone:dauthsand_stable", {
  530. description = "Stable Dauthsand (You Hacker)",
  531. tiles = {"rackstone_dauthsand.png"},
  532. groups = utility.dig_groups("gravel", {racksand=1, nether_soil=1}),
  533. --damage_per_second = 4*500,
  534. post_effect_color = {a=255, r=0, g=0, b=0},
  535. sounds = default.node_sound_gravel_defaults(),
  536. drop = 'rackstone:dauthsand',
  537. movement_speed_multiplier = default.SLOW_SPEED,
  538. on_finish_collapse = function(pos, node)
  539. minetest.swap_node(pos, {name="rackstone:dauthsand"})
  540. end,
  541. on_collapse_to_entity = function(pos, node)
  542. return {ItemStack("rackstone:dauthsand")}
  543. end,
  544. })
  545. minetest.register_craft({
  546. type = "cooking",
  547. output = "default:glass",
  548. recipe = "rackstone:dauthsand",
  549. })
  550. -- Netherack Crafts
  551. minetest.register_craft({
  552. output = "rackstone:brick 4",
  553. recipe = {
  554. {"rackstone:redrack", "rackstone:redrack"},
  555. {"rackstone:redrack", "rackstone:redrack"},
  556. }
  557. })
  558. minetest.register_craft({
  559. output = "rackstone:redrack_block 9",
  560. recipe = {
  561. {"rackstone:redrack", "rackstone:redrack", "rackstone:redrack"},
  562. {"rackstone:redrack", "rackstone:redrack", "rackstone:redrack"},
  563. {"rackstone:redrack", "rackstone:redrack", "rackstone:redrack"},
  564. }
  565. })
  566. -- Blue Rackstone Crafts
  567. minetest.register_craft({
  568. output = "rackstone:bluerack_brick 4",
  569. recipe = {
  570. {"rackstone:bluerack", "rackstone:bluerack"},
  571. {"rackstone:bluerack", "rackstone:bluerack"},
  572. }
  573. })
  574. minetest.register_craft({
  575. output = "rackstone:bluerack_block 9",
  576. recipe = {
  577. {"rackstone:bluerack", "rackstone:bluerack", "rackstone:bluerack"},
  578. {"rackstone:bluerack", "rackstone:bluerack", "rackstone:bluerack"},
  579. {"rackstone:bluerack", "rackstone:bluerack", "rackstone:bluerack"},
  580. }
  581. })
  582. -- Black Rackstone Crafts
  583. minetest.register_craft({
  584. output = "rackstone:brick_black 4",
  585. recipe = {
  586. {"rackstone:blackrack", "rackstone:blackrack"},
  587. {"rackstone:blackrack", "rackstone:blackrack"},
  588. }
  589. })
  590. minetest.register_craft({
  591. output = "rackstone:blackrack_block 9",
  592. recipe = {
  593. {"rackstone:blackrack", "rackstone:blackrack", "rackstone:blackrack"},
  594. {"rackstone:blackrack", "rackstone:blackrack", "rackstone:blackrack"},
  595. {"rackstone:blackrack", "rackstone:blackrack", "rackstone:blackrack"},
  596. }
  597. })
  598. -- Rackstone Crafts
  599. minetest.register_craft({
  600. output = "rackstone:rackstone_brick2 4",
  601. recipe = {
  602. {"rackstone:rackstone", "rackstone:rackstone"},
  603. {"rackstone:rackstone", "rackstone:rackstone"},
  604. }
  605. })
  606. minetest.register_craft({
  607. output = "rackstone:rackstone_block 9",
  608. recipe = {
  609. {"rackstone:rackstone", "rackstone:rackstone", "rackstone:rackstone"},
  610. {"rackstone:rackstone", "rackstone:rackstone", "rackstone:rackstone"},
  611. {"rackstone:rackstone", "rackstone:rackstone", "rackstone:rackstone"},
  612. }
  613. })
  614. minetest.register_craft({
  615. type = "cooking",
  616. output = 'rackstone:tile',
  617. recipe = 'rackstone:nether_grit',
  618. cooktime = 20,
  619. })
  620. minetest.register_craft({
  621. type = "cooking",
  622. output = 'rackstone:rackstone',
  623. recipe = 'rackstone:cobble',
  624. cooktime = 6,
  625. })
  626. minetest.register_craft({
  627. type = "cooking",
  628. output = 'rackstone:redrack',
  629. recipe = 'rackstone:redrack_cobble',
  630. cooktime = 3,
  631. })
  632. minetest.register_craft({
  633. type = "grinding",
  634. output = 'rackstone:dauthsand',
  635. recipe = 'rackstone:redrack',
  636. time = 20,
  637. })
  638. minetest.register_craft({
  639. type = "crushing",
  640. output = 'rackstone:nether_grit',
  641. recipe = 'rackstone:redrack',
  642. time = 60*1.0,
  643. })
  644. minetest.register_craft({
  645. type = "crushing",
  646. output = 'rackstone:dauthsand',
  647. recipe = 'rackstone:nether_grit',
  648. time = 60*1.0,
  649. })
  650. -- Rackstone
  651. stairs.register_stair_and_slab(
  652. "rackstone",
  653. "rackstone:rackstone",
  654. {cracky=1},
  655. {"rackstone_rackstone.png"},
  656. "Rackstone",
  657. default.node_sound_stone_defaults()
  658. )
  659. stairs.register_stair_and_slab(
  660. "rackstone_cobble",
  661. "rackstone:cobble",
  662. {cracky=2},
  663. {"rackstone_rackstone_cobble.png"},
  664. "Rackstone Cobble",
  665. default.node_sound_stone_defaults()
  666. )
  667. -- Rackstone Block
  668. stairs.register_stair_and_slab(
  669. "rackstone_block",
  670. "rackstone:rackstone_block",
  671. {cracky=1},
  672. {"rackstone_rackstone_block.png"},
  673. "Rackstone Block",
  674. default.node_sound_stone_defaults()
  675. )
  676. -- Rackstone Brick
  677. stairs.register_stair_and_slab(
  678. "rackstone_brick2",
  679. "rackstone:rackstone_brick2",
  680. {cracky=1},
  681. {"rackstone_rackstone_brick.png"},
  682. "Rackstone Brick",
  683. default.node_sound_stone_defaults()
  684. )
  685. -- Netherack
  686. stairs.register_stair_and_slab(
  687. "redrack",
  688. "rackstone:redrack",
  689. {cracky=3},
  690. {"rackstone_redrack.png"},
  691. "Netherack",
  692. rackstone.rackstone_sounds()
  693. )
  694. stairs.register_stair_and_slab(
  695. "redrack_cobble",
  696. "rackstone:redrack_cobble",
  697. {cracky=3},
  698. {"rackstone_redrack_cobble.png"},
  699. "Cobbled Netherack",
  700. rackstone.rackstone_sounds()
  701. )
  702. -- Netherack Block
  703. stairs.register_stair_and_slab(
  704. "redrack_block",
  705. "rackstone:redrack_block",
  706. {cracky=3},
  707. {"rackstone_redrack_block.png"},
  708. "Netherack Block",
  709. default.node_sound_stone_defaults()
  710. )
  711. -- Netherack Brick
  712. stairs.register_stair_and_slab(
  713. "rackstone_brick",
  714. "rackstone:brick",
  715. {cracky=2},
  716. {"rackstone_brick.png"},
  717. "Rackstone Brick",
  718. default.node_sound_stone_defaults()
  719. )
  720. -- Blue Rackstone
  721. stairs.register_stair_and_slab(
  722. "bluerack",
  723. "rackstone:bluerack",
  724. {cracky=2},
  725. {"rackstone_bluerack.png"},
  726. "Blue Rackstone",
  727. rackstone.rackstone_sounds()
  728. )
  729. -- Blue Rackstone Block
  730. stairs.register_stair_and_slab(
  731. "bluerack_block",
  732. "rackstone:bluerack_block",
  733. {cracky=2},
  734. {"rackstone_bluerack.png"},
  735. "Blue Rackstone Block",
  736. default.node_sound_stone_defaults()
  737. )
  738. -- Blue Rackstone Brick
  739. stairs.register_stair_and_slab(
  740. "bluerack_brick",
  741. "rackstone:bluerack_brick",
  742. {cracky=2},
  743. {"rackstone_bluerack_brick.png"},
  744. "Blue Rackstone Brick",
  745. default.node_sound_stone_defaults()
  746. )
  747. -- Blackrack
  748. stairs.register_stair_and_slab(
  749. "blackrack",
  750. "rackstone:blackrack",
  751. {cracky=2},
  752. {"rackstone_blackrack.png"},
  753. "Black Rackstone",
  754. rackstone.rackstone_sounds()
  755. )
  756. -- Black Rackstone Block
  757. stairs.register_stair_and_slab(
  758. "blackrack_block",
  759. "rackstone:blackrack_block",
  760. {cracky=2},
  761. {"rackstone_blackrack_block.png"},
  762. "Black Rackstone Block",
  763. default.node_sound_stone_defaults()
  764. )
  765. -- Black Rackstone Brick
  766. stairs.register_stair_and_slab(
  767. "rackstone_brick_black",
  768. "rackstone:brick_black",
  769. {cracky=2},
  770. {"rackstone_brick_black.png"},
  771. "Black Rackstone Brick",
  772. default.node_sound_stone_defaults()
  773. )
  774. -- These nodes appear only in the Outback.
  775. -- They have enhanced drops in order to help new players.
  776. -- Also appears in Mesa/Canyon realm.
  777. minetest.register_node("rackstone:rackstone_with_coal", {
  778. description = "Rackstone With Coal",
  779. tiles = {"rackstone_rackstone.png^default_mineral_coal.png"},
  780. groups = utility.dig_groups("mineral", {rackstone=1, netherack=1}),
  781. sounds = default.node_sound_stone_defaults(),
  782. drop = "default:coal_lump 3",
  783. silverpick_drop = true,
  784. movement_speed_multiplier = default.SLOW_SPEED_NETHER,
  785. place_param2 = 10,
  786. })
  787. minetest.register_node("rackstone:rackstone_with_iron", {
  788. description = "Rackstone With Iron",
  789. tiles = {"rackstone_rackstone.png^default_mineral_iron.png"},
  790. groups = utility.dig_groups("mineral", {rackstone=1, netherack=1}),
  791. sounds = default.node_sound_stone_defaults(),
  792. drop = "default:iron_lump 3",
  793. silverpick_drop = true,
  794. movement_speed_multiplier = default.SLOW_SPEED_NETHER,
  795. place_param2 = 10,
  796. })
  797. minetest.register_node("rackstone:rackstone_with_copper", {
  798. description = "Rackstone With Copper",
  799. tiles = {"rackstone_rackstone.png^default_mineral_copper.png"},
  800. groups = utility.dig_groups("mineral", {rackstone=1, netherack=1}),
  801. sounds = default.node_sound_stone_defaults(),
  802. drop = "default:copper_lump 2",
  803. silverpick_drop = true,
  804. movement_speed_multiplier = default.SLOW_SPEED_NETHER,
  805. place_param2 = 10,
  806. })
  807. minetest.register_node("rackstone:rackstone_with_gold", {
  808. description = "Rackstone With Gold",
  809. tiles = {"rackstone_rackstone.png^default_mineral_gold.png"},
  810. groups = utility.dig_groups("mineral", {rackstone=1, netherack=1}),
  811. sounds = default.node_sound_stone_defaults(),
  812. drop = "default:gold_lump 2",
  813. silverpick_drop = true,
  814. movement_speed_multiplier = default.SLOW_SPEED_NETHER,
  815. place_param2 = 10,
  816. })
  817. minetest.register_node("rackstone:rackstone_with_diamond", {
  818. description = "Rackstone With Diamond",
  819. tiles = {"rackstone_rackstone.png^default_mineral_diamond.png"},
  820. groups = utility.dig_groups("mineral", {rackstone=1, netherack=1}),
  821. sounds = default.node_sound_stone_defaults(),
  822. drop = "default:diamond 2",
  823. _tnt_drop = {
  824. 'default:diamond 2',
  825. 'dusts:diamond_shard 3',
  826. },
  827. silverpick_drop = true,
  828. movement_speed_multiplier = default.SLOW_SPEED_NETHER,
  829. place_param2 = 10,
  830. })
  831. minetest.register_node("rackstone:rackstone_with_mese", {
  832. description = "Rackstone With Mese",
  833. tiles = {"rackstone_rackstone.png^default_mineral_mese.png"},
  834. groups = utility.dig_groups("mineral", {rackstone=1, netherack=1}),
  835. sounds = default.node_sound_stone_defaults(),
  836. drop = "default:mese_crystal 2",
  837. _tnt_drop = "default:mese_crystal_fragment 2",
  838. silverpick_drop = true,
  839. movement_speed_multiplier = default.SLOW_SPEED_NETHER,
  840. place_param2 = 10,
  841. })
  842. minetest.register_node("rackstone:rackstone_with_meat", {
  843. description = "Rackstone With Unidentified Meat",
  844. tiles = {"rackstone_rackstone.png^rackstone_meat.png"},
  845. groups = utility.dig_groups("netherack", {rackstone=1, netherack=1}),
  846. sounds = default.node_sound_stone_defaults(),
  847. drop = "mobs:meat_raw 4",
  848. silverpick_drop = true,
  849. movement_speed_multiplier = default.SLOW_SPEED_NETHER,
  850. place_param2 = 10,
  851. })