init.lua 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. local modname = minetest.get_current_modname()
  2. local S = minetest.get_translator(modname)
  3. local plant_sounds =
  4. {
  5. dig = "plant_dig",
  6. dug = "plant_dug",
  7. footstep = "plant_footstep",
  8. place = "plant_place",
  9. }
  10. minetest.register_node(modname .. ":plant",
  11. {
  12. tiles = {modname .. "_base.png"},
  13. description = S("Bromelia"),
  14. drawtype = "plantlike",
  15. groups = {dig_immediate = 2, attached_node = 1},
  16. walkable = false,
  17. paramtype = "light",
  18. floodable = true,
  19. sounds = plant_sounds,
  20. is_ground_content = false,
  21. })
  22. minetest.register_node(modname .. ":plant_stalked",
  23. {
  24. tiles = {modname .. "_base.png^" .. modname .. "_bloom_stalk.png"},
  25. description = S("Bromelia"),
  26. drawtype = "plantlike",
  27. groups = {dig_immediate = 2, attached_node = 1},
  28. walkable = false,
  29. paramtype = "light",
  30. floodable = true,
  31. sounds = plant_sounds,
  32. is_ground_content = false,
  33. after_destruct = function(pos)
  34. pos.y = pos.y + 1
  35. local node = minetest.get_node(pos)
  36. if node.name == modname .. ":fruit" or
  37. node.name == modname .. ":bloom"
  38. then
  39. minetest.dig_node(pos)
  40. end
  41. end,
  42. on_flood = function(pos)
  43. pos.y = pos.y + 1
  44. local above = minetest.get_node(pos)
  45. if above.name == modname .. ":fruit" or
  46. above.name == modname .. ":bloom"
  47. then
  48. minetest.dig_node(pos)
  49. end
  50. end,
  51. drop = modname .. ":plant",
  52. })
  53. local function bloom_fruit_destructor(pos)
  54. pos = pos - 1
  55. local node = minetest.get_node(pos)
  56. if node.name == modname .. ":plant_stalked"
  57. then
  58. minetest.set_node(pos, {name = modname .. ":plant"})
  59. end
  60. end
  61. minetest.register_node(modname .. ":fruit",
  62. {
  63. tiles = {modname .. "_fruit.png"},
  64. description = S("Bromelia Fruit"),
  65. drawtype = "plantlike",
  66. groups = {dig_immediate = 3},
  67. walkable = false,
  68. paramtype = "light",
  69. floodable = true,
  70. sounds = plant_sounds,
  71. is_ground_content = false,
  72. drop =
  73. {
  74. max_items = 1,
  75. items =
  76. {
  77. {rarity = 15, items = {modname .. ":appleapple"}},
  78. {rarity = 10, items = {modname .. ":coconutapple"}},
  79. {rarity = 5, items = {modname .. ":spruceapple"}},
  80. {rarity = 1.3, items = {modname .. ":pineapple"}},
  81. }
  82. },
  83. })
  84. minetest.register_node(modname .. ":bloom",
  85. {
  86. tiles = {modname .. "_bloom.png"},
  87. description = S("Bromelia Fruit"),
  88. drawtype = "plantlike",
  89. groups = {dig_immediate = 3, flower = 1},
  90. drop = "",
  91. walkable = false,
  92. paramtype = "light",
  93. floodable = true,
  94. sounds = plant_sounds,
  95. is_ground_content = false,
  96. })
  97. --Growth ABM
  98. minetest.register_abm(
  99. {
  100. label = "Bromelia growing",
  101. nodenames = {modname .. ":plant", modname .. ":plant_stalked"},
  102. interval = 15,
  103. chance = 60,
  104. catch_up = true,
  105. action = function(pos, node)
  106. local above = vector.new(pos.x, pos.y + 1, pos.z)
  107. local above_node = minetest.get_node(above)
  108. local name = above_node.name
  109. if name == "air"
  110. then
  111. minetest.set_node(pos, {name = modname .. ":plant_stalked"})
  112. minetest.set_node(above, {name = modname .. ":bloom"})
  113. elseif name == modname .. ":bloom"
  114. then
  115. minetest.set_node(above, {name = modname .. ":fruit"})
  116. elseif name == modname .. ":fruit"
  117. then
  118. minetest.set_node(pos, {name = modname .. ":plant"})
  119. minetest.set_node(above, {name = "air"})
  120. end
  121. end
  122. })
  123. if minetest.get_modpath("eg_mapgen")
  124. then
  125. --Spawning as decoration
  126. minetest.register_decoration(
  127. {
  128. deco_type = "simple",
  129. place_on = "eg_mapgen:grass",
  130. sidelen = 8,
  131. noise_params =
  132. {
  133. offset = -0.29,
  134. scale = 0.2,
  135. spread = {x = 500, y = 500, z = 500},
  136. seed = 5024,
  137. octaves = 3,
  138. persist = 0.7,
  139. lacunarity = 16.0,
  140. },
  141. decoration = modname .. ":plant",
  142. height = 1,
  143. })
  144. end
  145. --FRUIT ITEMS
  146. minetest.register_tool(modname .. ":pineapple",
  147. {
  148. on_use = minetest.item_eat(4), --TODO: use own eat stuff with hunger
  149. description = S("Pineapple"),
  150. inventory_image = modname .. "_pineapple.png",
  151. })
  152. minetest.register_tool(modname .. ":spruceapple",
  153. {
  154. on_use = minetest.item_eat(4), --TODO: use own eat stuff with hunger
  155. description = S("Spruceapple"),
  156. inventory_image = modname .. "_spruceapple.png",
  157. })
  158. minetest.register_tool(modname .. ":coconutapple",
  159. {
  160. on_use = minetest.item_eat(4), --TODO: use own eat stuff with hunger
  161. description = S("Coconutapple"),
  162. inventory_image = modname .. "_coconutapple.png",
  163. })
  164. minetest.register_tool(modname .. ":appleapple",
  165. {
  166. on_use = minetest.item_eat(4), --TODO: use own eat stuff with hunger
  167. description = S("Appleapple"),
  168. inventory_image = modname .. "_appleapple.png",
  169. })