tools.lua 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420
  1. -- mods/default/tools.lua
  2. -- The hand
  3. minetest.register_item(":", {
  4. type = "none",
  5. wield_image = "wieldhand.png",
  6. wield_scale = {x=1,y=1,z=2.5},
  7. tool_capabilities = {
  8. full_punch_interval = 0.9,
  9. max_drop_level = 0,
  10. groupcaps = {
  11. crumbly = {times={[2]=3.00, [3]=0.70}, uses=0, maxlevel=1},
  12. snappy = {times={[3]=0.40}, uses=0, maxlevel=1},
  13. oddly_breakable_by_hand = {times={[1]=3.50,[2]=2.00,[3]=0.70}, uses=0}
  14. },
  15. damage_groups = {fleshy=1},
  16. }
  17. })
  18. --
  19. -- Picks
  20. --
  21. minetest.register_tool("default:pick_wood", {
  22. description = "Wooden Pickaxe",
  23. inventory_image = "default_tool_woodpick.png",
  24. tool_capabilities = {
  25. full_punch_interval = 1.2,
  26. max_drop_level=0,
  27. groupcaps={
  28. cracky = {times={[3]=1.60}, uses=10, maxlevel=1},
  29. },
  30. damage_groups = {fleshy=2},
  31. },
  32. groups = {flammable = 2},
  33. sound = {breaks = "default_tool_breaks"},
  34. })
  35. minetest.register_tool("default:pick_stone", {
  36. description = "Stone Pickaxe",
  37. inventory_image = "default_tool_stonepick.png",
  38. tool_capabilities = {
  39. full_punch_interval = 1.3,
  40. max_drop_level=0,
  41. groupcaps={
  42. cracky = {times={[2]=2.0, [3]=1.00}, uses=20, maxlevel=1},
  43. },
  44. damage_groups = {fleshy=3},
  45. },
  46. sound = {breaks = "default_tool_breaks"},
  47. })
  48. minetest.register_tool("default:pick_steel", {
  49. description = "Steel Pickaxe",
  50. inventory_image = "default_tool_steelpick.png",
  51. tool_capabilities = {
  52. full_punch_interval = 1.0,
  53. max_drop_level=1,
  54. groupcaps={
  55. cracky = {times={[1]=4.00, [2]=1.60, [3]=0.80}, uses=20, maxlevel=2},
  56. },
  57. damage_groups = {fleshy=4},
  58. },
  59. sound = {breaks = "default_tool_breaks"},
  60. })
  61. minetest.register_tool("default:pick_bronze", {
  62. description = "Bronze Pickaxe",
  63. inventory_image = "default_tool_bronzepick.png",
  64. tool_capabilities = {
  65. full_punch_interval = 1.0,
  66. max_drop_level=1,
  67. groupcaps={
  68. cracky = {times={[1]=4.00, [2]=1.60, [3]=0.80}, uses=30, maxlevel=2},
  69. },
  70. damage_groups = {fleshy=4},
  71. },
  72. sound = {breaks = "default_tool_breaks"},
  73. })
  74. minetest.register_tool("default:pick_mese", {
  75. description = "Mese Pickaxe",
  76. inventory_image = "default_tool_mesepick.png",
  77. tool_capabilities = {
  78. full_punch_interval = 0.9,
  79. max_drop_level=3,
  80. groupcaps={
  81. cracky = {times={[1]=2.4, [2]=1.2, [3]=0.60}, uses=20, maxlevel=3},
  82. },
  83. damage_groups = {fleshy=5},
  84. },
  85. sound = {breaks = "default_tool_breaks"},
  86. })
  87. minetest.register_tool("default:pick_diamond", {
  88. description = "Diamond Pickaxe",
  89. inventory_image = "default_tool_diamondpick.png",
  90. tool_capabilities = {
  91. full_punch_interval = 0.9,
  92. max_drop_level=3,
  93. groupcaps={
  94. cracky = {times={[1]=2.0, [2]=1.0, [3]=0.50}, uses=30, maxlevel=3},
  95. },
  96. damage_groups = {fleshy=5},
  97. },
  98. sound = {breaks = "default_tool_breaks"},
  99. })
  100. --
  101. -- Shovels
  102. --
  103. minetest.register_tool("default:shovel_wood", {
  104. description = "Wooden Shovel",
  105. inventory_image = "default_tool_woodshovel.png",
  106. wield_image = "default_tool_woodshovel.png^[transformR90",
  107. tool_capabilities = {
  108. full_punch_interval = 1.2,
  109. max_drop_level=0,
  110. groupcaps={
  111. crumbly = {times={[1]=3.00, [2]=1.60, [3]=0.60}, uses=10, maxlevel=1},
  112. },
  113. damage_groups = {fleshy=2},
  114. },
  115. groups = {flammable = 2},
  116. sound = {breaks = "default_tool_breaks"},
  117. })
  118. minetest.register_tool("default:shovel_stone", {
  119. description = "Stone Shovel",
  120. inventory_image = "default_tool_stoneshovel.png",
  121. wield_image = "default_tool_stoneshovel.png^[transformR90",
  122. tool_capabilities = {
  123. full_punch_interval = 1.4,
  124. max_drop_level=0,
  125. groupcaps={
  126. crumbly = {times={[1]=1.80, [2]=1.20, [3]=0.50}, uses=20, maxlevel=1},
  127. },
  128. damage_groups = {fleshy=2},
  129. },
  130. sound = {breaks = "default_tool_breaks"},
  131. })
  132. minetest.register_tool("default:shovel_steel", {
  133. description = "Steel Shovel",
  134. inventory_image = "default_tool_steelshovel.png",
  135. wield_image = "default_tool_steelshovel.png^[transformR90",
  136. tool_capabilities = {
  137. full_punch_interval = 1.1,
  138. max_drop_level=1,
  139. groupcaps={
  140. crumbly = {times={[1]=1.50, [2]=0.90, [3]=0.40}, uses=30, maxlevel=2},
  141. },
  142. damage_groups = {fleshy=3},
  143. },
  144. sound = {breaks = "default_tool_breaks"},
  145. })
  146. minetest.register_tool("default:shovel_bronze", {
  147. description = "Bronze Shovel",
  148. inventory_image = "default_tool_bronzeshovel.png",
  149. wield_image = "default_tool_bronzeshovel.png^[transformR90",
  150. tool_capabilities = {
  151. full_punch_interval = 1.1,
  152. max_drop_level=1,
  153. groupcaps={
  154. crumbly = {times={[1]=1.50, [2]=0.90, [3]=0.40}, uses=40, maxlevel=2},
  155. },
  156. damage_groups = {fleshy=3},
  157. },
  158. sound = {breaks = "default_tool_breaks"},
  159. })
  160. minetest.register_tool("default:shovel_mese", {
  161. description = "Mese Shovel",
  162. inventory_image = "default_tool_meseshovel.png",
  163. wield_image = "default_tool_meseshovel.png^[transformR90",
  164. tool_capabilities = {
  165. full_punch_interval = 1.0,
  166. max_drop_level=3,
  167. groupcaps={
  168. crumbly = {times={[1]=1.20, [2]=0.60, [3]=0.30}, uses=20, maxlevel=3},
  169. },
  170. damage_groups = {fleshy=4},
  171. },
  172. sound = {breaks = "default_tool_breaks"},
  173. })
  174. minetest.register_tool("default:shovel_diamond", {
  175. description = "Diamond Shovel",
  176. inventory_image = "default_tool_diamondshovel.png",
  177. wield_image = "default_tool_diamondshovel.png^[transformR90",
  178. tool_capabilities = {
  179. full_punch_interval = 1.0,
  180. max_drop_level=1,
  181. groupcaps={
  182. crumbly = {times={[1]=1.10, [2]=0.50, [3]=0.30}, uses=30, maxlevel=3},
  183. },
  184. damage_groups = {fleshy=4},
  185. },
  186. sound = {breaks = "default_tool_breaks"},
  187. })
  188. --
  189. -- Axes
  190. --
  191. minetest.register_tool("default:axe_wood", {
  192. description = "Wooden Axe",
  193. inventory_image = "default_tool_woodaxe.png",
  194. tool_capabilities = {
  195. full_punch_interval = 1.0,
  196. max_drop_level=0,
  197. groupcaps={
  198. choppy = {times={[2]=3.00, [3]=1.60}, uses=10, maxlevel=1},
  199. },
  200. damage_groups = {fleshy=2},
  201. },
  202. groups = {flammable = 2},
  203. sound = {breaks = "default_tool_breaks"},
  204. })
  205. minetest.register_tool("default:axe_stone", {
  206. description = "Stone Axe",
  207. inventory_image = "default_tool_stoneaxe.png",
  208. tool_capabilities = {
  209. full_punch_interval = 1.2,
  210. max_drop_level=0,
  211. groupcaps={
  212. choppy={times={[1]=3.00, [2]=2.00, [3]=1.30}, uses=20, maxlevel=1},
  213. },
  214. damage_groups = {fleshy=3},
  215. },
  216. sound = {breaks = "default_tool_breaks"},
  217. })
  218. minetest.register_tool("default:axe_steel", {
  219. description = "Steel Axe",
  220. inventory_image = "default_tool_steelaxe.png",
  221. tool_capabilities = {
  222. full_punch_interval = 1.0,
  223. max_drop_level=1,
  224. groupcaps={
  225. choppy={times={[1]=2.50, [2]=1.40, [3]=1.00}, uses=20, maxlevel=2},
  226. },
  227. damage_groups = {fleshy=4},
  228. },
  229. sound = {breaks = "default_tool_breaks"},
  230. })
  231. minetest.register_tool("default:axe_bronze", {
  232. description = "Bronze Axe",
  233. inventory_image = "default_tool_bronzeaxe.png",
  234. tool_capabilities = {
  235. full_punch_interval = 1.0,
  236. max_drop_level=1,
  237. groupcaps={
  238. choppy={times={[1]=2.50, [2]=1.40, [3]=1.00}, uses=30, maxlevel=2},
  239. },
  240. damage_groups = {fleshy=4},
  241. },
  242. sound = {breaks = "default_tool_breaks"},
  243. })
  244. minetest.register_tool("default:axe_mese", {
  245. description = "Mese Axe",
  246. inventory_image = "default_tool_meseaxe.png",
  247. tool_capabilities = {
  248. full_punch_interval = 0.9,
  249. max_drop_level=1,
  250. groupcaps={
  251. choppy={times={[1]=2.20, [2]=1.00, [3]=0.60}, uses=20, maxlevel=3},
  252. },
  253. damage_groups = {fleshy=6},
  254. },
  255. sound = {breaks = "default_tool_breaks"},
  256. })
  257. minetest.register_tool("default:axe_diamond", {
  258. description = "Diamond Axe",
  259. inventory_image = "default_tool_diamondaxe.png",
  260. tool_capabilities = {
  261. full_punch_interval = 0.9,
  262. max_drop_level=1,
  263. groupcaps={
  264. choppy={times={[1]=2.10, [2]=0.90, [3]=0.50}, uses=30, maxlevel=3},
  265. },
  266. damage_groups = {fleshy=7},
  267. },
  268. sound = {breaks = "default_tool_breaks"},
  269. })
  270. --
  271. -- Swords
  272. --
  273. minetest.register_tool("default:sword_wood", {
  274. description = "Wooden Sword",
  275. inventory_image = "default_tool_woodsword.png",
  276. tool_capabilities = {
  277. full_punch_interval = 1,
  278. max_drop_level=0,
  279. groupcaps={
  280. snappy={times={[2]=1.6, [3]=0.40}, uses=10, maxlevel=1},
  281. },
  282. damage_groups = {fleshy=2},
  283. },
  284. groups = {flammable = 2},
  285. sound = {breaks = "default_tool_breaks"},
  286. })
  287. minetest.register_tool("default:sword_stone", {
  288. description = "Stone Sword",
  289. inventory_image = "default_tool_stonesword.png",
  290. tool_capabilities = {
  291. full_punch_interval = 1.2,
  292. max_drop_level=0,
  293. groupcaps={
  294. snappy={times={[2]=1.4, [3]=0.40}, uses=20, maxlevel=1},
  295. },
  296. damage_groups = {fleshy=4},
  297. },
  298. sound = {breaks = "default_tool_breaks"},
  299. })
  300. minetest.register_tool("default:sword_steel", {
  301. description = "Steel Sword",
  302. inventory_image = "default_tool_steelsword.png",
  303. tool_capabilities = {
  304. full_punch_interval = 0.8,
  305. max_drop_level=1,
  306. groupcaps={
  307. snappy={times={[1]=2.5, [2]=1.20, [3]=0.35}, uses=30, maxlevel=2},
  308. },
  309. damage_groups = {fleshy=6},
  310. },
  311. sound = {breaks = "default_tool_breaks"},
  312. })
  313. minetest.register_tool("default:sword_bronze", {
  314. description = "Bronze Sword",
  315. inventory_image = "default_tool_bronzesword.png",
  316. tool_capabilities = {
  317. full_punch_interval = 0.8,
  318. max_drop_level=1,
  319. groupcaps={
  320. snappy={times={[1]=2.5, [2]=1.20, [3]=0.35}, uses=40, maxlevel=2},
  321. },
  322. damage_groups = {fleshy=6},
  323. },
  324. sound = {breaks = "default_tool_breaks"},
  325. })
  326. minetest.register_tool("default:sword_mese", {
  327. description = "Mese Sword",
  328. inventory_image = "default_tool_mesesword.png",
  329. tool_capabilities = {
  330. full_punch_interval = 0.7,
  331. max_drop_level=1,
  332. groupcaps={
  333. snappy={times={[1]=2.0, [2]=1.00, [3]=0.35}, uses=30, maxlevel=3},
  334. },
  335. damage_groups = {fleshy=7},
  336. },
  337. sound = {breaks = "default_tool_breaks"},
  338. })
  339. minetest.register_tool("default:sword_diamond", {
  340. description = "Diamond Sword",
  341. inventory_image = "default_tool_diamondsword.png",
  342. tool_capabilities = {
  343. full_punch_interval = 0.7,
  344. max_drop_level=1,
  345. groupcaps={
  346. snappy={times={[1]=1.90, [2]=0.90, [3]=0.30}, uses=40, maxlevel=3},
  347. },
  348. damage_groups = {fleshy=8},
  349. },
  350. sound = {breaks = "default_tool_breaks"},
  351. })
  352. minetest.register_tool("default:key", {
  353. description = "Key",
  354. inventory_image = "default_key.png",
  355. groups = {key = 1, not_in_creative_inventory = 1},
  356. stack_max = 1,
  357. on_place = function(itemstack, placer, pointed_thing)
  358. local under = pointed_thing.under
  359. local node = minetest.get_node(under)
  360. local def = minetest.registered_nodes[node.name]
  361. if def and def.on_rightclick and
  362. not (placer and placer:is_player() and
  363. placer:get_player_control().sneak) then
  364. return def.on_rightclick(under, node, placer, itemstack,
  365. pointed_thing) or itemstack
  366. end
  367. if pointed_thing.type ~= "node" then
  368. return itemstack
  369. end
  370. local pos = pointed_thing.under
  371. node = minetest.get_node(pos)
  372. if not node or node.name == "ignore" then
  373. return itemstack
  374. end
  375. local ndef = minetest.registered_nodes[node.name]
  376. if not ndef then
  377. return itemstack
  378. end
  379. local on_key_use = ndef.on_key_use
  380. if on_key_use then
  381. on_key_use(pos, placer)
  382. end
  383. return nil
  384. end
  385. })