init.lua 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. minetest.register_node("moognu:moognu", {
  2. description = "MooGNU",
  3. tiles = {"moognu_side.png", "moognu_side.png", "moognu_side.png",
  4. "moognu_side.png", "moognu_back.png", "moognu_front.png"},
  5. paramtype = "light",
  6. light_source = default.LIGHT_MAX,
  7. paramtype2 = "facedir",
  8. groups = {cracky = 2},
  9. is_ground_content = false,
  10. legacy_facedir_simple = true,
  11. sounds = default.node_sound_defaults(),
  12. })
  13. minetest.register_node("moognu:moognu_rainbow", {
  14. description = "MooGNU Rainbow",
  15. tiles = {
  16. "moognu_rainbow.png^[transformR90",
  17. "moognu_rainbow.png^[transformR90",
  18. "moognu_rainbow.png"
  19. },
  20. paramtype = "light",
  21. light_source = default.LIGHT_MAX,
  22. paramtype2 = "facedir",
  23. groups = {cracky = 2},
  24. is_ground_content = false,
  25. sounds = default.node_sound_defaults(),
  26. })
  27. minetest.register_craft({
  28. type = "fuel",
  29. recipe = "moognu:moognu",
  30. burntime = 1,
  31. })
  32. minetest.register_craft({
  33. type = "fuel",
  34. recipe = "moognu:moognu_rainbow",
  35. burntime = 1,
  36. })
  37. moognu = {}
  38. function moognu.place(pos, facedir, length)
  39. if facedir > 3 then
  40. facedir = 0
  41. end
  42. local tailvec = minetest.facedir_to_dir(facedir)
  43. local p = {x = pos.x, y = pos.y, z = pos.z}
  44. minetest.set_node(p, {name = "moognu:moognu", param2 = facedir})
  45. for i = 1, length do
  46. p.x = p.x + tailvec.x
  47. p.z = p.z + tailvec.z
  48. minetest.set_node(p, {name = "moognu:moognu_rainbow", param2 = facedir})
  49. end
  50. end
  51. function moognu.generate(minp, maxp, seed)
  52. local height_min = -31000
  53. local height_max = -32
  54. if maxp.y < height_min or minp.y > height_max then
  55. return
  56. end
  57. local y_min = math.max(minp.y, height_min)
  58. local y_max = math.min(maxp.y, height_max)
  59. local volume = (maxp.x - minp.x + 1) * (y_max - y_min + 1) * (maxp.z - minp.z + 1)
  60. local pr = PseudoRandom(seed + 9324342)
  61. local max_num_moognus = math.floor(volume / (16 * 16 * 16))
  62. for i = 1, max_num_moognus do
  63. if pr:next(0, 1000) == 0 then
  64. local x0 = pr:next(minp.x, maxp.x)
  65. local y0 = pr:next(minp.y, maxp.y)
  66. local z0 = pr:next(minp.z, maxp.z)
  67. local p0 = {x = x0, y = y0, z = z0}
  68. moognu.place(p0, pr:next(0, 3), pr:next(3, 15))
  69. end
  70. end
  71. end
  72. minetest.register_on_generated(function(minp, maxp, seed)
  73. moognu.generate(minp, maxp, seed)
  74. end)
  75. -- Legacy
  76. minetest.register_alias("default:nyancat", "moognu:moognu")
  77. minetest.register_alias("nyancat:nyancat", "moognu:moognu")
  78. minetest.register_alias("default:nyancat_rainbow", "moognu:moognu_rainbow")
  79. minetest.register_alias("nyancat:nyancat_rainbow", "moognu:moognu_rainbow")