tools_register.lua 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. local S = farming.intllib
  2. farming.register_billhook = function(name,def)
  3. if not def.groups["billhook"] then
  4. def.groups["billhook"]=1
  5. end
  6. if not def.material then
  7. return
  8. end
  9. if def.max_uses == nil then
  10. def.max_uses = 30
  11. end
  12. if def.on_use == nil then
  13. def.on_use = function(itemstack, user, pointed_thing)
  14. return farming.use_billhook(itemstack, user, pointed_thing, def.max_uses)
  15. end
  16. end
  17. if not def.recipe then
  18. def.recipe = {
  19. {"", def.material, def.material},
  20. {"", "group:stick", ""},
  21. {"group:stick", "", ""} }
  22. end
  23. farming.register_tool(name,def)
  24. end
  25. farming.register_scythe = function(name,def)
  26. if not def.groups["scythe"] then
  27. def.groups["scythe"]=1
  28. end
  29. if not def.material then
  30. return
  31. end
  32. if not def.recipe then
  33. def.recipe = {
  34. {def.material, def.material, "group:stick"},
  35. {def.material, "group:stick", ""},
  36. {"group:stick", "", ""} }
  37. end
  38. farming.register_tool(name,def)
  39. end
  40. -- Register new Scythes
  41. farming.register_tool = function(name, def)
  42. -- recipe has to be provided
  43. if not def.recipe then
  44. return
  45. end
  46. -- Check for : prefix (register new hoes in your mod's namespace)
  47. if name:sub(1,1) ~= ":" then
  48. name = ":" .. name
  49. end
  50. -- Check def table
  51. if def.inventory_image == nil then
  52. def.inventory_image = "unknown_item.png"
  53. end
  54. if def.max_uses == nil then
  55. def.max_uses = 30
  56. end
  57. if def.description == nil then
  58. def.description = "Farming tool"
  59. end
  60. def.description=def.description.."\nmax uses: "..def.max_uses
  61. if def.farming_change then
  62. def.description=def.description.."\nfarming change: "..def.farming_change
  63. end
  64. def.sound={breaks = "default_tool_breaks"}
  65. -- Register the tool
  66. minetest.register_tool(name, def)
  67. -- Register its recipe
  68. minetest.register_craft({
  69. output = name:sub(2),
  70. recipe = def.recipe
  71. })
  72. end
  73. -- copied from farming_redo
  74. farming.hoe_on_use = function(itemstack, user, pointed_thing, uses)
  75. local pt = pointed_thing
  76. -- check if pointing at a node
  77. if not pt then
  78. return
  79. end
  80. if pt.type ~= "node" then
  81. return
  82. end
  83. local under = minetest.get_node(pt.under)
  84. local p = {x=pt.under.x, y=pt.under.y+1, z=pt.under.z}
  85. local above = minetest.get_node(p)
  86. -- return if any of the nodes is not registered
  87. if not minetest.registered_nodes[under.name] then
  88. return
  89. end
  90. if not minetest.registered_nodes[above.name] then
  91. return
  92. end
  93. -- check if the node above the pointed thing is air
  94. if above.name ~= "air" then
  95. return
  96. end
  97. -- check if pointing at soil
  98. if minetest.get_item_group(under.name, "soil") ~= 1 then
  99. return
  100. end
  101. -- check if (wet) soil defined
  102. local regN = minetest.registered_nodes
  103. if regN[under.name].soil == nil or regN[under.name].soil.wet == nil or regN[under.name].soil.dry == nil then
  104. return
  105. end
  106. if minetest.is_protected(pt.under, user:get_player_name()) then
  107. minetest.record_protection_violation(pt.under, user:get_player_name())
  108. return
  109. end
  110. if minetest.is_protected(pt.above, user:get_player_name()) then
  111. minetest.record_protection_violation(pt.above, user:get_player_name())
  112. return
  113. end
  114. -- turn the node into soil and play sound
  115. minetest.set_node(pt.under, {name = regN[under.name].soil.dry})
  116. minetest.sound_play("default_dig_crumbly", {
  117. pos = pt.under,
  118. gain = 0.5,
  119. })
  120. if not (creative and creative.is_enabled_for
  121. and creative.is_enabled_for(user:get_player_name())) then
  122. -- wear tool
  123. local wdef = itemstack:get_definition()
  124. itemstack:add_wear(65535/(uses-1))
  125. -- tool break sound
  126. if itemstack:get_count() == 0 and wdef.sound and wdef.sound.breaks then
  127. minetest.sound_play(wdef.sound.breaks, {pos = pt.above, gain = 0.5})
  128. end
  129. end
  130. return itemstack
  131. end
  132. -- Register new hoes
  133. -- copied from farming_redo
  134. farming.register_hoe = function(name, def)
  135. -- Check for : prefix (register new hoes in your mod's namespace)
  136. if name:sub(1,1) ~= ":" then
  137. name = ":" .. name
  138. end
  139. -- Check def table
  140. if def.description == nil then
  141. def.description = "Hoe"
  142. end
  143. if def.inventory_image == nil then
  144. def.inventory_image = "unknown_item.png"
  145. end
  146. if def.max_uses == nil then
  147. def.max_uses = 30
  148. end
  149. -- Register the tool
  150. minetest.register_tool(name, {
  151. description = def.description,
  152. inventory_image = def.inventory_image,
  153. on_use = function(itemstack, user, pointed_thing)
  154. return farming.hoe_on_use(itemstack, user, pointed_thing, def.max_uses)
  155. end,
  156. groups = def.groups,
  157. sound = {breaks = "default_tool_breaks"},
  158. })
  159. -- Register its recipe
  160. if def.recipe then
  161. minetest.register_craft({
  162. output = name:sub(2),
  163. recipe = def.recipe
  164. })
  165. elseif def.material then
  166. minetest.register_craft({
  167. output = name:sub(2),
  168. recipe = {
  169. {def.material, def.material, ""},
  170. {"", "group:stick", ""},
  171. {"", "group:stick", ""}
  172. }
  173. })
  174. end
  175. end