Guest User

wrong inventory images bug fix init.lua

a guest
Apr 4th, 2013
580
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 69.45 KB | None | 0 0
  1. -- Minetest 0.4 mod: default
  2. -- See README.txt for licensing and other information.
  3.  
  4. -- The API documentation in here was moved into doc/lua_api.txt
  5.  
  6. WATER_ALPHA = 160
  7. WATER_VISC = 1
  8. LAVA_VISC = 7
  9. LIGHT_MAX = 14
  10.  
  11. -- Definitions made by this mod that other mods can use too
  12. default = {}
  13.  
  14. -- Load other files
  15. dofile(minetest.get_modpath("default").."/player.lua")
  16. dofile(minetest.get_modpath("default").."/mapgen.lua")
  17. dofile(minetest.get_modpath("default").."/leafdecay.lua")
  18.  
  19. --
  20. -- Tool definition
  21. --
  22.  
  23. -- The hand
  24. minetest.register_item(":", {
  25. type = "none",
  26. wield_image = "wieldhand.png",
  27. wield_scale = {x=1,y=1,z=2.5},
  28. tool_capabilities = {
  29. full_punch_interval = 0.9,
  30. max_drop_level = 0,
  31. groupcaps = {
  32. crumbly = {times={[2]=3.00, [3]=0.70}, uses=0, maxlevel=1},
  33. snappy = {times={[3]=0.40}, uses=0, maxlevel=1},
  34. oddly_breakable_by_hand = {times={[1]=7.00,[2]=4.00,[3]=1.40}, uses=0, maxlevel=3}
  35. },
  36. damage_groups = {fleshy=1},
  37. }
  38. })
  39.  
  40. -- Picks
  41. minetest.register_tool("default:pick_wood", {
  42. description = "Wooden Pickaxe",
  43. inventory_image = "default_tool_woodpick.png",
  44. tool_capabilities = {
  45. full_punch_interval = 1.2,
  46. max_drop_level=0,
  47. groupcaps={
  48. cracky = {times={[3]=1.60}, uses=10, maxlevel=1},
  49. },
  50. damage_groups = {fleshy=2},
  51. },
  52. })
  53. minetest.register_tool("default:pick_stone", {
  54. description = "Stone Pickaxe",
  55. inventory_image = "default_tool_stonepick.png",
  56. tool_capabilities = {
  57. full_punch_interval = 1.3,
  58. max_drop_level=0,
  59. groupcaps={
  60. cracky = {times={[2]=2.0, [3]=1.20}, uses=20, maxlevel=1},
  61. },
  62. damage_groups = {fleshy=3},
  63. },
  64. })
  65. minetest.register_tool("default:pick_steel", {
  66. description = "Steel Pickaxe",
  67. inventory_image = "default_tool_steelpick.png",
  68. tool_capabilities = {
  69. full_punch_interval = 1.0,
  70. max_drop_level=1,
  71. groupcaps={
  72. cracky = {times={[1]=4.00, [2]=1.60, [3]=0.80}, uses=20, maxlevel=2},
  73. },
  74. damage_groups = {fleshy=4},
  75. },
  76. })
  77. minetest.register_tool("default:pick_bronze", {
  78. description = "Bronze Pickaxe",
  79. inventory_image = "default_tool_bronzepick.png",
  80. tool_capabilities = {
  81. full_punch_interval = 1.0,
  82. max_drop_level=1,
  83. groupcaps={
  84. cracky = {times={[1]=4.00, [2]=1.60, [3]=0.80}, uses=30, maxlevel=2},
  85. },
  86. damage_groups = {fleshy=4},
  87. },
  88. })
  89. minetest.register_tool("default:pick_mese", {
  90. description = "Mese Pickaxe",
  91. inventory_image = "default_tool_mesepick.png",
  92. tool_capabilities = {
  93. full_punch_interval = 0.9,
  94. max_drop_level=3,
  95. groupcaps={
  96. cracky = {times={[1]=2.4, [2]=1.2, [3]=0.60}, uses=20, maxlevel=3},
  97. },
  98. damage_groups = {fleshy=5},
  99. },
  100. })
  101. minetest.register_tool("default:pick_diamond", {
  102. description = "Diamond Pickaxe",
  103. inventory_image = "default_tool_diamondpick.png",
  104. tool_capabilities = {
  105. full_punch_interval = 0.9,
  106. max_drop_level=3,
  107. groupcaps={
  108. cracky = {times={[1]=2.0, [2]=1.0, [3]=0.50}, uses=30, maxlevel=3},
  109. },
  110. damage_groups = {fleshy=5},
  111. },
  112. })
  113.  
  114. -- Shovels
  115. minetest.register_tool("default:shovel_wood", {
  116. description = "Wooden Shovel",
  117. inventory_image = "default_tool_woodshovel.png",
  118. wield_image = "default_tool_woodshovel.png^[transformR90",
  119. tool_capabilities = {
  120. full_punch_interval = 1.2,
  121. max_drop_level=0,
  122. groupcaps={
  123. crumbly = {times={[1]=3.00, [2]=1.60, [3]=0.60}, uses=10, maxlevel=1},
  124. },
  125. damage_groups = {fleshy=2},
  126. },
  127. })
  128. minetest.register_tool("default:shovel_stone", {
  129. description = "Stone Shovel",
  130. inventory_image = "default_tool_stoneshovel.png",
  131. wield_image = "default_tool_stoneshovel.png^[transformR90",
  132. tool_capabilities = {
  133. full_punch_interval = 1.4,
  134. max_drop_level=0,
  135. groupcaps={
  136. crumbly = {times={[1]=1.80, [2]=1.20, [3]=0.50}, uses=20, maxlevel=1},
  137. },
  138. damage_groups = {fleshy=2},
  139. },
  140. })
  141. minetest.register_tool("default:shovel_steel", {
  142. description = "Steel Shovel",
  143. inventory_image = "default_tool_steelshovel.png",
  144. wield_image = "default_tool_steelshovel.png^[transformR90",
  145. tool_capabilities = {
  146. full_punch_interval = 1.1,
  147. max_drop_level=1,
  148. groupcaps={
  149. crumbly = {times={[1]=1.50, [2]=0.90, [3]=0.40}, uses=30, maxlevel=2},
  150. },
  151. damage_groups = {fleshy=3},
  152. },
  153. })
  154. minetest.register_tool("default:shovel_bronze", {
  155. description = "Bronze Shovel",
  156. inventory_image = "default_tool_bronzeshovel.png",
  157. wield_image = "default_tool_bronzeshovel.png^[transformR90",
  158. tool_capabilities = {
  159. full_punch_interval = 1.1,
  160. max_drop_level=1,
  161. groupcaps={
  162. crumbly = {times={[1]=1.50, [2]=0.90, [3]=0.40}, uses=40, maxlevel=2},
  163. },
  164. damage_groups = {fleshy=3},
  165. },
  166. })
  167. minetest.register_tool("default:shovel_mese", {
  168. description = "Mese Shovel",
  169. inventory_image = "default_tool_meseshovel.png",
  170. wield_image = "default_tool_meseshovel.png^[transformR90",
  171. tool_capabilities = {
  172. full_punch_interval = 1.0,
  173. max_drop_level=3,
  174. groupcaps={
  175. crumbly = {times={[1]=1.20, [2]=0.60, [3]=0.30}, uses=20, maxlevel=3},
  176. },
  177. damage_groups = {fleshy=4},
  178. },
  179. })
  180. minetest.register_tool("default:shovel_diamond", {
  181. description = "Diamond Shovel",
  182. inventory_image = "default_tool_diamondshovel.png",
  183. wield_image = "default_tool_diamondshovel.png^[transformR90",
  184. tool_capabilities = {
  185. full_punch_interval = 1.0,
  186. max_drop_level=1,
  187. groupcaps={
  188. crumbly = {times={[1]=1.10, [2]=0.50, [3]=0.30}, uses=30, maxlevel=3},
  189. },
  190. damage_groups = {fleshy=4},
  191. },
  192. })
  193.  
  194. -- Axes
  195. minetest.register_tool("default:axe_wood", {
  196. description = "Wooden Axe",
  197. inventory_image = "default_tool_woodaxe.png",
  198. tool_capabilities = {
  199. full_punch_interval = 1.0,
  200. max_drop_level=0,
  201. groupcaps={
  202. choppy = {times={[2]=3.00, [3]=2.00}, uses=10, maxlevel=1},
  203. },
  204. damage_groups = {fleshy=2},
  205. },
  206. })
  207. minetest.register_tool("default:axe_stone", {
  208. description = "Stone Axe",
  209. inventory_image = "default_tool_stoneaxe.png",
  210. tool_capabilities = {
  211. full_punch_interval = 1.2,
  212. max_drop_level=0,
  213. groupcaps={
  214. choppy={times={[1]=3.00, [2]=2.00, [3]=1.50}, uses=20, maxlevel=1},
  215. },
  216. damage_groups = {fleshy=3},
  217. },
  218. })
  219. minetest.register_tool("default:axe_steel", {
  220. description = "Steel Axe",
  221. inventory_image = "default_tool_steelaxe.png",
  222. tool_capabilities = {
  223. full_punch_interval = 1.0,
  224. max_drop_level=1,
  225. groupcaps={
  226. choppy={times={[1]=2.50, [2]=1.40, [3]=1.00}, uses=20, maxlevel=2},
  227. },
  228. damage_groups = {fleshy=4},
  229. },
  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. })
  243. minetest.register_tool("default:axe_mese", {
  244. description = "Mese Axe",
  245. inventory_image = "default_tool_meseaxe.png",
  246. tool_capabilities = {
  247. full_punch_interval = 0.9,
  248. max_drop_level=1,
  249. groupcaps={
  250. choppy={times={[1]=2.20, [2]=1.00, [3]=0.60}, uses=20, maxlevel=3},
  251. },
  252. damage_groups = {fleshy=6},
  253. },
  254. })
  255. minetest.register_tool("default:axe_diamond", {
  256. description = "Diamond Axe",
  257. inventory_image = "default_tool_diamondaxe.png",
  258. tool_capabilities = {
  259. full_punch_interval = 0.9,
  260. max_drop_level=1,
  261. groupcaps={
  262. choppy={times={[1]=2.10, [2]=0.90, [3]=0.50}, uses=30, maxlevel=2},
  263. },
  264. damage_groups = {fleshy=7},
  265. },
  266. })
  267.  
  268. -- Swords
  269. minetest.register_tool("default:sword_wood", {
  270. description = "Wooden Sword",
  271. inventory_image = "default_tool_woodsword.png",
  272. tool_capabilities = {
  273. full_punch_interval = 1,
  274. max_drop_level=0,
  275. groupcaps={
  276. snappy={times={[2]=1.6, [3]=0.40}, uses=10, maxlevel=1},
  277. },
  278. damage_groups = {fleshy=2},
  279. }
  280. })
  281. minetest.register_tool("default:sword_stone", {
  282. description = "Stone Sword",
  283. inventory_image = "default_tool_stonesword.png",
  284. tool_capabilities = {
  285. full_punch_interval = 1.2,
  286. max_drop_level=0,
  287. groupcaps={
  288. snappy={times={[2]=1.4, [3]=0.40}, uses=20, maxlevel=1},
  289. },
  290. damage_groups = {fleshy=4},
  291. }
  292. })
  293. minetest.register_tool("default:sword_steel", {
  294. description = "Steel Sword",
  295. inventory_image = "default_tool_steelsword.png",
  296. tool_capabilities = {
  297. full_punch_interval = 0.8,
  298. max_drop_level=1,
  299. groupcaps={
  300. snappy={times={[1]=2.5, [2]=1.20, [3]=0.35}, uses=30, maxlevel=2},
  301. },
  302. damage_groups = {fleshy=6},
  303. }
  304. })
  305. minetest.register_tool("default:sword_bronze", {
  306. description = "Bronze Sword",
  307. inventory_image = "default_tool_bronzesword.png",
  308. tool_capabilities = {
  309. full_punch_interval = 0.8,
  310. max_drop_level=1,
  311. groupcaps={
  312. snappy={times={[1]=2.5, [2]=1.20, [3]=0.35}, uses=40, maxlevel=2},
  313. },
  314. damage_groups = {fleshy=6},
  315. }
  316. })
  317. minetest.register_tool("default:sword_mese", {
  318. description = "Mese Sword",
  319. inventory_image = "default_tool_mesesword.png",
  320. tool_capabilities = {
  321. full_punch_interval = 0.7,
  322. max_drop_level=1,
  323. groupcaps={
  324. snappy={times={[1]=2.0, [2]=1.00, [3]=0.35}, uses=30, maxlevel=3},
  325. },
  326. damage_groups = {fleshy=7},
  327. }
  328. })
  329. minetest.register_tool("default:sword_diamond", {
  330. description = "Diamond Sword",
  331. inventory_image = "default_tool_diamondsword.png",
  332. tool_capabilities = {
  333. full_punch_interval = 0.7,
  334. max_drop_level=1,
  335. groupcaps={
  336. snappy={times={[1]=1.90, [2]=0.90, [3]=0.30}, uses=40, maxlevel=3},
  337. },
  338. damage_groups = {fleshy=8},
  339. }
  340. })
  341.  
  342. --
  343. -- Crafting definition
  344. --
  345.  
  346. minetest.register_craft({
  347. output = 'default:wood 4',
  348. recipe = {
  349. {'default:tree'},
  350. }
  351. })
  352.  
  353. minetest.register_craft({
  354. output = 'default:junglewood 4',
  355. recipe = {
  356. {'default:jungletree'},
  357. }
  358. })
  359.  
  360. minetest.register_craft({
  361. output = 'default:stick 4',
  362. recipe = {
  363. {'group:wood'},
  364. }
  365. })
  366.  
  367. minetest.register_craft({
  368. output = 'default:fence_wood 2',
  369. recipe = {
  370. {'default:stick', 'default:stick', 'default:stick'},
  371. {'default:stick', 'default:stick', 'default:stick'},
  372. }
  373. })
  374.  
  375. minetest.register_craft({
  376. output = 'default:sign_wall',
  377. recipe = {
  378. {'group:wood', 'group:wood', 'group:wood'},
  379. {'group:wood', 'group:wood', 'group:wood'},
  380. {'', 'default:stick', ''},
  381. }
  382. })
  383.  
  384. minetest.register_craft({
  385. output = 'default:torch 4',
  386. recipe = {
  387. {'default:coal_lump'},
  388. {'default:stick'},
  389. }
  390. })
  391.  
  392. minetest.register_craft({
  393. output = 'default:pick_wood',
  394. recipe = {
  395. {'group:wood', 'group:wood', 'group:wood'},
  396. {'', 'default:stick', ''},
  397. {'', 'default:stick', ''},
  398. }
  399. })
  400.  
  401. minetest.register_craft({
  402. output = 'default:pick_stone',
  403. recipe = {
  404. {'group:stone', 'group:stone', 'group:stone'},
  405. {'', 'default:stick', ''},
  406. {'', 'default:stick', ''},
  407. }
  408. })
  409.  
  410. minetest.register_craft({
  411. output = 'default:pick_steel',
  412. recipe = {
  413. {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'},
  414. {'', 'default:stick', ''},
  415. {'', 'default:stick', ''},
  416. }
  417. })
  418.  
  419. minetest.register_craft({
  420. output = 'default:pick_bronze',
  421. recipe = {
  422. {'default:bronze_ingot', 'default:bronze_ingot', 'default:bronze_ingot'},
  423. {'', 'default:stick', ''},
  424. {'', 'default:stick', ''},
  425. }
  426. })
  427.  
  428. minetest.register_craft({
  429. output = 'default:pick_mese',
  430. recipe = {
  431. {'default:mese_crystal', 'default:mese_crystal', 'default:mese_crystal'},
  432. {'', 'default:stick', ''},
  433. {'', 'default:stick', ''},
  434. }
  435. })
  436.  
  437. minetest.register_craft({
  438. output = 'default:pick_diamond',
  439. recipe = {
  440. {'default:diamond', 'default:diamond', 'default:diamond'},
  441. {'', 'default:stick', ''},
  442. {'', 'default:stick', ''},
  443. }
  444. })
  445.  
  446. minetest.register_craft({
  447. output = 'default:shovel_wood',
  448. recipe = {
  449. {'group:wood'},
  450. {'default:stick'},
  451. {'default:stick'},
  452. }
  453. })
  454.  
  455. minetest.register_craft({
  456. output = 'default:shovel_stone',
  457. recipe = {
  458. {'group:stone'},
  459. {'default:stick'},
  460. {'default:stick'},
  461. }
  462. })
  463.  
  464. minetest.register_craft({
  465. output = 'default:shovel_steel',
  466. recipe = {
  467. {'default:steel_ingot'},
  468. {'default:stick'},
  469. {'default:stick'},
  470. }
  471. })
  472.  
  473. minetest.register_craft({
  474. output = 'default:shovel_bronze',
  475. recipe = {
  476. {'default:bronze_ingot'},
  477. {'default:stick'},
  478. {'default:stick'},
  479. }
  480. })
  481.  
  482. minetest.register_craft({
  483. output = 'default:shovel_mese',
  484. recipe = {
  485. {'default:mese_crystal'},
  486. {'default:stick'},
  487. {'default:stick'},
  488. }
  489. })
  490.  
  491. minetest.register_craft({
  492. output = 'default:shovel_diamond',
  493. recipe = {
  494. {'default:diamond'},
  495. {'default:stick'},
  496. {'default:stick'},
  497. }
  498. })
  499.  
  500. minetest.register_craft({
  501. output = 'default:axe_wood',
  502. recipe = {
  503. {'group:wood', 'group:wood'},
  504. {'group:wood', 'default:stick'},
  505. {'', 'default:stick'},
  506. }
  507. })
  508.  
  509. minetest.register_craft({
  510. output = 'default:axe_stone',
  511. recipe = {
  512. {'group:stone', 'group:stone'},
  513. {'group:stone', 'default:stick'},
  514. {'', 'default:stick'},
  515. }
  516. })
  517.  
  518. minetest.register_craft({
  519. output = 'default:axe_steel',
  520. recipe = {
  521. {'default:steel_ingot', 'default:steel_ingot'},
  522. {'default:steel_ingot', 'default:stick'},
  523. {'', 'default:stick'},
  524. }
  525. })
  526.  
  527. minetest.register_craft({
  528. output = 'default:axe_bronze',
  529. recipe = {
  530. {'default:bronze_ingot', 'default:bronze_ingot'},
  531. {'default:bronze_ingot', 'default:stick'},
  532. {'', 'default:stick'},
  533. }
  534. })
  535.  
  536. minetest.register_craft({
  537. output = 'default:axe_mese',
  538. recipe = {
  539. {'default:mese_crystal', 'default:mese_crystal'},
  540. {'default:mese_crystal', 'default:stick'},
  541. {'', 'default:stick'},
  542. }
  543. })
  544.  
  545. minetest.register_craft({
  546. output = 'default:axe_diamond',
  547. recipe = {
  548. {'default:diamond', 'default:diamond'},
  549. {'default:diamond', 'default:stick'},
  550. {'', 'default:stick'},
  551. }
  552. })
  553.  
  554. minetest.register_craft({
  555. output = 'default:sword_wood',
  556. recipe = {
  557. {'group:wood'},
  558. {'group:wood'},
  559. {'default:stick'},
  560. }
  561. })
  562.  
  563. minetest.register_craft({
  564. output = 'default:sword_stone',
  565. recipe = {
  566. {'group:stone'},
  567. {'group:stone'},
  568. {'default:stick'},
  569. }
  570. })
  571.  
  572. minetest.register_craft({
  573. output = 'default:sword_steel',
  574. recipe = {
  575. {'default:steel_ingot'},
  576. {'default:steel_ingot'},
  577. {'default:stick'},
  578. }
  579. })
  580.  
  581. minetest.register_craft({
  582. output = 'default:sword_bronze',
  583. recipe = {
  584. {'default:bronze_ingot'},
  585. {'default:bronze_ingot'},
  586. {'default:stick'},
  587. }
  588. })
  589.  
  590. minetest.register_craft({
  591. output = 'default:sword_mese',
  592. recipe = {
  593. {'default:mese_crystal'},
  594. {'default:mese_crystal'},
  595. {'default:stick'},
  596. }
  597. })
  598.  
  599. minetest.register_craft({
  600. output = 'default:sword_diamond',
  601. recipe = {
  602. {'default:diamond'},
  603. {'default:diamond'},
  604. {'default:stick'},
  605. }
  606. })
  607.  
  608. minetest.register_craft({
  609. output = 'default:rail 15',
  610. recipe = {
  611. {'default:steel_ingot', '', 'default:steel_ingot'},
  612. {'default:steel_ingot', 'default:stick', 'default:steel_ingot'},
  613. {'default:steel_ingot', '', 'default:steel_ingot'},
  614. }
  615. })
  616.  
  617. minetest.register_craft({
  618. output = 'default:chest',
  619. recipe = {
  620. {'group:wood', 'group:wood', 'group:wood'},
  621. {'group:wood', '', 'group:wood'},
  622. {'group:wood', 'group:wood', 'group:wood'},
  623. }
  624. })
  625.  
  626. minetest.register_craft({
  627. output = 'default:chest_locked',
  628. recipe = {
  629. {'group:wood', 'group:wood', 'group:wood'},
  630. {'group:wood', 'default:steel_ingot', 'group:wood'},
  631. {'group:wood', 'group:wood', 'group:wood'},
  632. }
  633. })
  634.  
  635. minetest.register_craft({
  636. output = 'default:furnace',
  637. recipe = {
  638. {'group:stone', 'group:stone', 'group:stone'},
  639. {'group:stone', '', 'group:stone'},
  640. {'group:stone', 'group:stone', 'group:stone'},
  641. }
  642. })
  643.  
  644. minetest.register_craft({
  645. type = "shapeless",
  646. output = "default:bronze_ingot",
  647. recipe = {"default:steel_ingot", "default:copper_ingot"},
  648. })
  649.  
  650. minetest.register_craft({
  651. output = 'default:steelblock',
  652. recipe = {
  653. {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'},
  654. {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'},
  655. {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'},
  656. }
  657. })
  658.  
  659. minetest.register_craft({
  660. output = 'default:steel_ingot 9',
  661. recipe = {
  662. {'default:steelblock'},
  663. }
  664. })
  665.  
  666. minetest.register_craft({
  667. output = 'default:bronzeblock',
  668. recipe = {
  669. {'default:bronze_ingot', 'default:bronze_ingot', 'default:bronze_ingot'},
  670. {'default:bronze_ingot', 'default:bronze_ingot', 'default:bronze_ingot'},
  671. {'default:bronze_ingot', 'default:bronze_ingot', 'default:bronze_ingot'},
  672. }
  673. })
  674.  
  675. minetest.register_craft({
  676. output = 'default:bronze_ingot 9',
  677. recipe = {
  678. {'default:bronzeblock'},
  679. }
  680. })
  681.  
  682. minetest.register_craft({
  683. output = 'default:goldblock',
  684. recipe = {
  685. {'default:gold_ingot', 'default:gold_ingot', 'default:gold_ingot'},
  686. {'default:gold_ingot', 'default:gold_ingot', 'default:gold_ingot'},
  687. {'default:gold_ingot', 'default:gold_ingot', 'default:gold_ingot'},
  688. }
  689. })
  690.  
  691. minetest.register_craft({
  692. output = 'default:gold_ingot 9',
  693. recipe = {
  694. {'default:goldblock'},
  695. }
  696. })
  697.  
  698. minetest.register_craft({
  699. output = 'default:diamondblock',
  700. recipe = {
  701. {'default:diamond', 'default:diamond', 'default:diamond'},
  702. {'default:diamond', 'default:diamond', 'default:diamond'},
  703. {'default:diamond', 'default:diamond', 'default:diamond'},
  704. }
  705. })
  706.  
  707. minetest.register_craft({
  708. output = 'default:diamond 9',
  709. recipe = {
  710. {'default:diamondblock'},
  711. }
  712. })
  713.  
  714. minetest.register_craft({
  715. output = 'default:sandstone',
  716. recipe = {
  717. {'group:sand', 'group:sand'},
  718. {'group:sand', 'group:sand'},
  719. }
  720. })
  721.  
  722. minetest.register_craft({
  723. output = 'default:sand 4',
  724. recipe = {
  725. {'default:sandstone'},
  726. }
  727. })
  728.  
  729. minetest.register_craft({
  730. output = 'default:clay',
  731. recipe = {
  732. {'default:clay_lump', 'default:clay_lump'},
  733. {'default:clay_lump', 'default:clay_lump'},
  734. }
  735. })
  736.  
  737. minetest.register_craft({
  738. output = 'default:brick',
  739. recipe = {
  740. {'default:clay_brick', 'default:clay_brick'},
  741. {'default:clay_brick', 'default:clay_brick'},
  742. }
  743. })
  744.  
  745. minetest.register_craft({
  746. output = 'default:clay_brick 4',
  747. recipe = {
  748. {'default:brick'},
  749. }
  750. })
  751.  
  752. minetest.register_craft({
  753. output = 'default:paper',
  754. recipe = {
  755. {'default:papyrus', 'default:papyrus', 'default:papyrus'},
  756. }
  757. })
  758.  
  759. minetest.register_craft({
  760. output = 'default:book',
  761. recipe = {
  762. {'default:paper'},
  763. {'default:paper'},
  764. {'default:paper'},
  765. }
  766. })
  767.  
  768. minetest.register_craft({
  769. output = 'default:bookshelf',
  770. recipe = {
  771. {'group:wood', 'group:wood', 'group:wood'},
  772. {'default:book', 'default:book', 'default:book'},
  773. {'group:wood', 'group:wood', 'group:wood'},
  774. }
  775. })
  776.  
  777. minetest.register_craft({
  778. output = 'default:ladder',
  779. recipe = {
  780. {'default:stick', '', 'default:stick'},
  781. {'default:stick', 'default:stick', 'default:stick'},
  782. {'default:stick', '', 'default:stick'},
  783. }
  784. })
  785.  
  786. minetest.register_craft({
  787. output = 'default:mese',
  788. recipe = {
  789. {'default:mese_crystal', 'default:mese_crystal', 'default:mese_crystal'},
  790. {'default:mese_crystal', 'default:mese_crystal', 'default:mese_crystal'},
  791. {'default:mese_crystal', 'default:mese_crystal', 'default:mese_crystal'},
  792. }
  793. })
  794.  
  795. minetest.register_craft({
  796. output = 'default:mese_crystal 9',
  797. recipe = {
  798. {'default:mese'},
  799. }
  800. })
  801.  
  802. minetest.register_craft({
  803. output = 'default:mese_crystal_fragment 9',
  804. recipe = {
  805. {'default:mese_crystal'},
  806. }
  807. })
  808.  
  809. minetest.register_craft({
  810. output = 'default:obsidian_shard 9',
  811. recipe = {
  812. {'default:obsidian'}
  813. }
  814. })
  815.  
  816. minetest.register_craft({
  817. output = 'default:obsidian',
  818. recipe = {
  819. {'default:obsidian_shard', 'default:obsidian_shard', 'default:obsidian_shard'},
  820. {'default:obsidian_shard', 'default:obsidian_shard', 'default:obsidian_shard'},
  821. {'default:obsidian_shard', 'default:obsidian_shard', 'default:obsidian_shard'},
  822. }
  823. })
  824.  
  825. minetest.register_craft({
  826. output = 'default:stonebrick',
  827. recipe = {
  828. {'default:stone', 'default:stone'},
  829. {'default:stone', 'default:stone'},
  830. }
  831. })
  832.  
  833. --
  834. -- Crafting (tool repair)
  835. --
  836. minetest.register_craft({
  837. type = "toolrepair",
  838. additional_wear = -0.02,
  839. })
  840.  
  841. --
  842. -- Cooking recipes
  843. --
  844.  
  845. minetest.register_craft({
  846. type = "cooking",
  847. output = "default:glass",
  848. recipe = "group:sand",
  849. })
  850.  
  851. minetest.register_craft({
  852. type = "cooking",
  853. output = "default:obsidian_glass",
  854. recipe = "default:obsidian_shard",
  855. })
  856.  
  857. minetest.register_craft({
  858. type = "cooking",
  859. output = "default:stone",
  860. recipe = "default:cobble",
  861. })
  862.  
  863. minetest.register_craft({
  864. type = "cooking",
  865. output = "default:steel_ingot",
  866. recipe = "default:iron_lump",
  867. })
  868.  
  869. minetest.register_craft({
  870. type = "cooking",
  871. output = "default:copper_ingot",
  872. recipe = "default:copper_lump",
  873. })
  874.  
  875. minetest.register_craft({
  876. type = "cooking",
  877. output = "default:gold_ingot",
  878. recipe = "default:gold_lump",
  879. })
  880.  
  881. minetest.register_craft({
  882. type = "cooking",
  883. output = "default:clay_brick",
  884. recipe = "default:clay_lump",
  885. })
  886.  
  887. --
  888. -- Fuels
  889. --
  890.  
  891. minetest.register_craft({
  892. type = "fuel",
  893. recipe = "group:tree",
  894. burntime = 30,
  895. })
  896.  
  897. minetest.register_craft({
  898. type = "fuel",
  899. recipe = "default:junglegrass",
  900. burntime = 2,
  901. })
  902.  
  903. minetest.register_craft({
  904. type = "fuel",
  905. recipe = "group:leaves",
  906. burntime = 1,
  907. })
  908.  
  909. minetest.register_craft({
  910. type = "fuel",
  911. recipe = "default:cactus",
  912. burntime = 15,
  913. })
  914.  
  915. minetest.register_craft({
  916. type = "fuel",
  917. recipe = "default:papyrus",
  918. burntime = 1,
  919. })
  920.  
  921. minetest.register_craft({
  922. type = "fuel",
  923. recipe = "default:bookshelf",
  924. burntime = 30,
  925. })
  926.  
  927. minetest.register_craft({
  928. type = "fuel",
  929. recipe = "default:fence_wood",
  930. burntime = 15,
  931. })
  932.  
  933. minetest.register_craft({
  934. type = "fuel",
  935. recipe = "default:ladder",
  936. burntime = 5,
  937. })
  938.  
  939. minetest.register_craft({
  940. type = "fuel",
  941. recipe = "group:wood",
  942. burntime = 7,
  943. })
  944.  
  945. minetest.register_craft({
  946. type = "fuel",
  947. recipe = "default:lava_source",
  948. burntime = 60,
  949. })
  950.  
  951. minetest.register_craft({
  952. type = "fuel",
  953. recipe = "default:torch",
  954. burntime = 4,
  955. })
  956.  
  957. minetest.register_craft({
  958. type = "fuel",
  959. recipe = "default:sign_wall",
  960. burntime = 10,
  961. })
  962.  
  963. minetest.register_craft({
  964. type = "fuel",
  965. recipe = "default:chest",
  966. burntime = 30,
  967. })
  968.  
  969. minetest.register_craft({
  970. type = "fuel",
  971. recipe = "default:chest_locked",
  972. burntime = 30,
  973. })
  974.  
  975. minetest.register_craft({
  976. type = "fuel",
  977. recipe = "default:nyancat",
  978. burntime = 1,
  979. })
  980.  
  981. minetest.register_craft({
  982. type = "fuel",
  983. recipe = "default:nyancat_rainbow",
  984. burntime = 1,
  985. })
  986.  
  987. minetest.register_craft({
  988. type = "fuel",
  989. recipe = "default:sapling",
  990. burntime = 10,
  991. })
  992.  
  993. minetest.register_craft({
  994. type = "fuel",
  995. recipe = "default:apple",
  996. burntime = 3,
  997. })
  998.  
  999. minetest.register_craft({
  1000. type = "fuel",
  1001. recipe = "default:coal_lump",
  1002. burntime = 40,
  1003. })
  1004.  
  1005. minetest.register_craft({
  1006. type = "fuel",
  1007. recipe = "default:junglesapling",
  1008. burntime = 10,
  1009. })
  1010.  
  1011. minetest.register_craft({
  1012. type = "fuel",
  1013. recipe = "default:grass_1",
  1014. burntime = 2,
  1015. })
  1016.  
  1017. --
  1018. -- Node definitions
  1019. --
  1020.  
  1021. -- Default node sounds
  1022.  
  1023. function default.node_sound_defaults(table)
  1024. table = table or {}
  1025. table.footstep = table.footstep or
  1026. {name="", gain=1.0}
  1027. table.dug = table.dug or
  1028. {name="default_dug_node", gain=1.0}
  1029. table.place = table.place or
  1030. {name="default_place_node", gain=0.5}
  1031. return table
  1032. end
  1033.  
  1034. function default.node_sound_stone_defaults(table)
  1035. table = table or {}
  1036. table.footstep = table.footstep or
  1037. {name="default_hard_footstep", gain=0.2}
  1038. default.node_sound_defaults(table)
  1039. return table
  1040. end
  1041.  
  1042. function default.node_sound_dirt_defaults(table)
  1043. table = table or {}
  1044. table.footstep = table.footstep or
  1045. {name="", gain=0.5}
  1046. --table.dug = table.dug or
  1047. -- {name="default_dirt_break", gain=0.5}
  1048. default.node_sound_defaults(table)
  1049. return table
  1050. end
  1051.  
  1052. function default.node_sound_sand_defaults(table)
  1053. table = table or {}
  1054. table.footstep = table.footstep or
  1055. {name="default_grass_footstep", gain=0.25}
  1056. --table.dug = table.dug or
  1057. -- {name="default_dirt_break", gain=0.25}
  1058. table.dug = table.dug or
  1059. {name="", gain=0.25}
  1060. default.node_sound_defaults(table)
  1061. return table
  1062. end
  1063.  
  1064. function default.node_sound_wood_defaults(table)
  1065. table = table or {}
  1066. table.footstep = table.footstep or
  1067. {name="default_hard_footstep", gain=0.3}
  1068. default.node_sound_defaults(table)
  1069. return table
  1070. end
  1071.  
  1072. function default.node_sound_leaves_defaults(table)
  1073. table = table or {}
  1074. table.footstep = table.footstep or
  1075. {name="default_grass_footstep", gain=0.25}
  1076. table.dig = table.dig or
  1077. {name="default_dig_crumbly", gain=0.4}
  1078. table.dug = table.dug or
  1079. {name="", gain=1.0}
  1080. default.node_sound_defaults(table)
  1081. return table
  1082. end
  1083.  
  1084. function default.node_sound_glass_defaults(table)
  1085. table = table or {}
  1086. table.footstep = table.footstep or
  1087. {name="default_hard_footstep", gain=0.25}
  1088. table.dug = table.dug or
  1089. {name="default_break_glass", gain=1.0}
  1090. default.node_sound_defaults(table)
  1091. return table
  1092. end
  1093.  
  1094. --
  1095.  
  1096. minetest.register_node("default:stone", {
  1097. description = "Stone",
  1098. inventory_image = "default_stone.png",
  1099. tiles = {"default_stone.png"},
  1100. is_ground_content = true,
  1101. groups = {cracky=3, stone=1},
  1102. drop = 'default:cobble',
  1103. legacy_mineral = true,
  1104. sounds = default.node_sound_stone_defaults(),
  1105. })
  1106.  
  1107. minetest.register_node("default:desert_stone", {
  1108. description = "Desert Stone",
  1109. inventory_image = "default_desert_stone.png",
  1110. tiles = {"default_desert_stone.png"},
  1111. is_ground_content = true,
  1112. groups = {cracky=3, stone=1},
  1113. drop = 'default:desert_stone',
  1114. legacy_mineral = true,
  1115. sounds = default.node_sound_stone_defaults(),
  1116. })
  1117.  
  1118. minetest.register_node("default:stone_with_coal", {
  1119. description = "Coal Ore",
  1120. inventory_image = "default_stone.png^default_mineral_coal.png",
  1121. tiles = {"default_stone.png^default_mineral_coal.png"},
  1122. is_ground_content = true,
  1123. groups = {cracky=3},
  1124. drop = 'default:coal_lump',
  1125. sounds = default.node_sound_stone_defaults(),
  1126. })
  1127.  
  1128. minetest.register_node("default:stone_with_iron", {
  1129. description = "Iron Ore",
  1130. inventory_image = "default_stone.png^default_mineral_iron.png",
  1131. tiles = {"default_stone.png^default_mineral_iron.png"},
  1132. is_ground_content = true,
  1133. groups = {cracky=2},
  1134. drop = 'default:iron_lump',
  1135. sounds = default.node_sound_stone_defaults(),
  1136. })
  1137.  
  1138. minetest.register_node("default:stone_with_copper", {
  1139. description = "Copper Ore",
  1140. inventory_image = "default_stone.png^default_mineral_copper.png",
  1141. tiles = {"default_stone.png^default_mineral_copper.png"},
  1142. is_ground_content = true,
  1143. groups = {cracky=2},
  1144. drop = 'default:copper_lump',
  1145. sounds = default.node_sound_stone_defaults(),
  1146. })
  1147.  
  1148. minetest.register_node("default:stone_with_mese", {
  1149. description = "Mese Crystals in Stone",
  1150. inventory_image = "default_stone.png^default_mineral_mese.png",
  1151. tiles = {"default_stone.png^default_mineral_mese.png"},
  1152. is_ground_content = true,
  1153. groups = {cracky=1},
  1154. drop = "default:mese_crystal",
  1155. sounds = default.node_sound_stone_defaults(),
  1156. })
  1157.  
  1158. minetest.register_node("default:stone_with_gold", {
  1159. description = "Gold Ore",
  1160. inventory_image = "default_stone.png^default_mineral_gold.png",
  1161. tiles = {"default_stone.png^default_mineral_gold.png"},
  1162. is_ground_content = true,
  1163. groups = {cracky=2},
  1164. drop = "default:gold_lump",
  1165. sounds = default.node_sound_stone_defaults(),
  1166. })
  1167.  
  1168. minetest.register_node("default:stone_with_diamond", {
  1169. description = "Diamonds in Stone",
  1170. inventory_image = "default_stone.png^default_mineral_diamond.png",
  1171. tiles = {"default_stone.png^default_mineral_diamond.png"},
  1172. is_ground_content = true,
  1173. groups = {cracky=1},
  1174. drop = "default:diamond",
  1175. sounds = default.node_sound_stone_defaults(),
  1176. })
  1177.  
  1178. minetest.register_node("default:stonebrick", {
  1179. description = "Stone Brick",
  1180. inventory_image = "default_stone_brick.png",
  1181. tiles = {"default_stone_brick.png"},
  1182. groups = {cracky=3, stone=1},
  1183. sounds = default.node_sound_stone_defaults(),
  1184. })
  1185.  
  1186. minetest.register_node("default:dirt_with_grass", {
  1187. description = "Dirt with Grass",
  1188. inventory_image = "default_dirt.png^default_grass_side.png",
  1189. tiles = {"default_grass.png", "default_dirt.png", "default_dirt.png^default_grass_side.png"},
  1190. is_ground_content = true,
  1191. groups = {crumbly=3},
  1192. drop = 'default:dirt',
  1193. sounds = default.node_sound_dirt_defaults({
  1194. footstep = {name="default_grass_footstep", gain=0.4},
  1195. }),
  1196. })
  1197.  
  1198. minetest.register_node("default:dirt_with_grass_footsteps", {
  1199. description = "Dirt with Grass and Footsteps",
  1200. inventory_image = "default_grass_footsteps.png",
  1201. tiles = {"default_grass_footsteps.png", "default_dirt.png", "default_dirt.png^default_grass_side.png"},
  1202. is_ground_content = true,
  1203. groups = {crumbly=3, not_in_creative_inventory=1},
  1204. drop = 'default:dirt',
  1205. sounds = default.node_sound_dirt_defaults({
  1206. footstep = {name="default_grass_footstep", gain=0.4},
  1207. }),
  1208. })
  1209.  
  1210. minetest.register_node("default:dirt", {
  1211. description = "Dirt",
  1212. inventory_image = "default_dirt.png",
  1213. tiles = {"default_dirt.png"},
  1214. is_ground_content = true,
  1215. groups = {crumbly=3},
  1216. sounds = default.node_sound_dirt_defaults(),
  1217. })
  1218.  
  1219. minetest.register_node("default:sand", {
  1220. description = "Sand",
  1221. inventory_image = "default_sand.png",
  1222. tiles = {"default_sand.png"},
  1223. is_ground_content = true,
  1224. groups = {crumbly=3, falling_node=1, sand=1},
  1225. sounds = default.node_sound_sand_defaults(),
  1226. })
  1227.  
  1228. minetest.register_node("default:desert_sand", {
  1229. description = "Desert Sand",
  1230. inventory_image = "default_desert_sand.png",
  1231. tiles = {"default_desert_sand.png"},
  1232. is_ground_content = true,
  1233. groups = {crumbly=3, falling_node=1, sand=1},
  1234. sounds = default.node_sound_sand_defaults(),
  1235. })
  1236.  
  1237. minetest.register_node("default:gravel", {
  1238. description = "Gravel",
  1239. inventory_image = "default_gravel.png",
  1240. tiles = {"default_gravel.png"},
  1241. is_ground_content = true,
  1242. groups = {crumbly=2, falling_node=1},
  1243. sounds = default.node_sound_dirt_defaults({
  1244. footstep = {name="default_gravel_footstep", gain=0.45},
  1245. }),
  1246. })
  1247.  
  1248. minetest.register_node("default:sandstone", {
  1249. description = "Sandstone",
  1250. inventory_image = "default_sandstone.png",
  1251. tiles = {"default_sandstone.png"},
  1252. is_ground_content = true,
  1253. groups = {crumbly=2,cracky=2},
  1254. sounds = default.node_sound_stone_defaults(),
  1255. })
  1256.  
  1257. minetest.register_node("default:clay", {
  1258. description = "Clay",
  1259. inventory_image = "default_clay.png",
  1260. tiles = {"default_clay.png"},
  1261. is_ground_content = true,
  1262. groups = {crumbly=3},
  1263. drop = 'default:clay_lump 4',
  1264. sounds = default.node_sound_dirt_defaults({
  1265. footstep = "",
  1266. }),
  1267. })
  1268.  
  1269. minetest.register_node("default:brick", {
  1270. description = "Brick Block",
  1271. inventory_image = "default_brick.png",
  1272. tiles = {"default_brick.png"},
  1273. groups = {cracky=3},
  1274. sounds = default.node_sound_stone_defaults(),
  1275. })
  1276.  
  1277. minetest.register_node("default:tree", {
  1278. description = "Tree",
  1279. inventory_image = "default_tree_top.png",
  1280. tiles = {"default_tree_top.png", "default_tree_top.png", "default_tree.png"},
  1281. groups = {tree=1,choppy=2,oddly_breakable_by_hand=1,flammable=2},
  1282. sounds = default.node_sound_wood_defaults(),
  1283. })
  1284.  
  1285. minetest.register_node("default:jungletree", {
  1286. description = "Jungle Tree",
  1287. inventory_image = "default_jungletree_top.png",
  1288. tiles = {"default_jungletree_top.png", "default_jungletree_top.png", "default_jungletree.png"},
  1289. groups = {tree=1,choppy=2,oddly_breakable_by_hand=1,flammable=2},
  1290. sounds = default.node_sound_wood_defaults(),
  1291. })
  1292.  
  1293. minetest.register_node("default:junglewood", {
  1294. description = "Junglewood Planks",
  1295. inventory_image = "default_junglewood.png",
  1296. tiles = {"default_junglewood.png"},
  1297. groups = {choppy=2,oddly_breakable_by_hand=2,flammable=3,wood=1},
  1298. sounds = default.node_sound_wood_defaults(),
  1299. })
  1300.  
  1301. minetest.register_node("default:jungleleaves", {
  1302. description = "Jungle Leaves",
  1303. inventory_image = "default_jungleleaves.png",
  1304. drawtype = "allfaces_optional",
  1305. visual_scale = 1.3,
  1306. tiles = {"default_jungleleaves.png"},
  1307. paramtype = "light",
  1308. groups = {snappy=3, leafdecay=3, flammable=2, leaves=1},
  1309. drop = {
  1310. max_items = 1,
  1311. items = {
  1312. {
  1313. -- player will get sapling with 1/20 chance
  1314. items = {'default:junglesapling'},
  1315. rarity = 20,
  1316. },
  1317. {
  1318. -- player will get leaves only if he get no saplings,
  1319. -- this is because max_items is 1
  1320. items = {'default:jungleleaves'},
  1321. }
  1322. }
  1323. },
  1324. sounds = default.node_sound_leaves_defaults(),
  1325. })
  1326.  
  1327. minetest.register_node("default:junglesapling", {
  1328. description = "Jungle Sapling",
  1329. drawtype = "plantlike",
  1330. visual_scale = 1.0,
  1331. tiles = {"default_junglesapling.png"},
  1332. inventory_image = "default_junglesapling.png",
  1333. wield_image = "default_junglesapling.png",
  1334. paramtype = "light",
  1335. walkable = false,
  1336. selection_box = {
  1337. type = "fixed",
  1338. fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3}
  1339. },
  1340. groups = {snappy=2,dig_immediate=3,flammable=2,attached_node=1},
  1341. sounds = default.node_sound_defaults(),
  1342. })
  1343. -- aliases for tree growing abm in content_abm.cpp
  1344. minetest.register_alias("sapling", "default:sapling")
  1345. minetest.register_alias("junglesapling", "default:junglesapling")
  1346.  
  1347. minetest.register_node("default:junglegrass", {
  1348. description = "Jungle Grass",
  1349. drawtype = "plantlike",
  1350. visual_scale = 1.3,
  1351. tiles = {"default_junglegrass.png"},
  1352. inventory_image = "default_junglegrass.png",
  1353. wield_image = "default_junglegrass.png",
  1354. paramtype = "light",
  1355. walkable = false,
  1356. buildable_to = true,
  1357. is_ground_content = true,
  1358. groups = {snappy=3,flammable=2,attached_node=1},
  1359. sounds = default.node_sound_leaves_defaults(),
  1360. selection_box = {
  1361. type = "fixed",
  1362. fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},
  1363. },
  1364. })
  1365.  
  1366. minetest.register_node("default:leaves", {
  1367. description = "Leaves",
  1368. inventory_image = "default_leaves.png",
  1369. drawtype = "allfaces_optional",
  1370. visual_scale = 1.3,
  1371. tiles = {"default_leaves.png"},
  1372. paramtype = "light",
  1373. groups = {snappy=3, leafdecay=3, flammable=2, leaves=1},
  1374. drop = {
  1375. max_items = 1,
  1376. items = {
  1377. {
  1378. -- player will get sapling with 1/20 chance
  1379. items = {'default:sapling'},
  1380. rarity = 20,
  1381. },
  1382. {
  1383. -- player will get leaves only if he get no saplings,
  1384. -- this is because max_items is 1
  1385. items = {'default:leaves'},
  1386. }
  1387. }
  1388. },
  1389. sounds = default.node_sound_leaves_defaults(),
  1390. })
  1391.  
  1392. minetest.register_node("default:cactus", {
  1393. description = "Cactus",
  1394. inventory_image = "default_cactus_side.png",
  1395. tiles = {"default_cactus_top.png", "default_cactus_top.png", "default_cactus_side.png"},
  1396. is_ground_content = true,
  1397. groups = {snappy=1,choppy=3,flammable=2},
  1398. sounds = default.node_sound_wood_defaults(),
  1399. })
  1400.  
  1401. minetest.register_node("default:papyrus", {
  1402. description = "Papyrus",
  1403. drawtype = "plantlike",
  1404. tiles = {"default_papyrus.png"},
  1405. inventory_image = "default_papyrus.png",
  1406. wield_image = "default_papyrus.png",
  1407. paramtype = "light",
  1408. walkable = false,
  1409. is_ground_content = true,
  1410. selection_box = {
  1411. type = "fixed",
  1412. fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3}
  1413. },
  1414. groups = {snappy=3,flammable=2},
  1415. sounds = default.node_sound_leaves_defaults(),
  1416. })
  1417.  
  1418. minetest.register_node("default:bookshelf", {
  1419. description = "Bookshelf",
  1420. inventory_image = "default_bookshelf.png",
  1421. tiles = {"default_wood.png", "default_wood.png", "default_bookshelf.png"},
  1422. groups = {choppy=3,oddly_breakable_by_hand=2,flammable=3},
  1423. sounds = default.node_sound_wood_defaults(),
  1424. })
  1425.  
  1426. minetest.register_node("default:glass", {
  1427. description = "Glass",
  1428. drawtype = "glasslike",
  1429. tiles = {"default_glass.png"},
  1430. inventory_image = "default_glass.png",
  1431. paramtype = "light",
  1432. sunlight_propagates = true,
  1433. groups = {cracky=3,oddly_breakable_by_hand=3},
  1434. sounds = default.node_sound_glass_defaults(),
  1435. })
  1436.  
  1437. minetest.register_node("default:fence_wood", {
  1438. description = "Wooden Fence",
  1439. drawtype = "fencelike",
  1440. tiles = {"default_wood.png"},
  1441. inventory_image = "default_fence.png",
  1442. wield_image = "default_fence.png",
  1443. paramtype = "light",
  1444. selection_box = {
  1445. type = "fixed",
  1446. fixed = {-1/7, -1/2, -1/7, 1/7, 1/2, 1/7},
  1447. },
  1448. groups = {choppy=2,oddly_breakable_by_hand=2,flammable=2},
  1449. sounds = default.node_sound_wood_defaults(),
  1450. })
  1451.  
  1452. minetest.register_node("default:rail", {
  1453. description = "Rail",
  1454. drawtype = "raillike",
  1455. tiles = {"default_rail.png", "default_rail_curved.png", "default_rail_t_junction.png", "default_rail_crossing.png"},
  1456. inventory_image = "default_rail.png",
  1457. wield_image = "default_rail.png",
  1458. paramtype = "light",
  1459. walkable = false,
  1460. selection_box = {
  1461. type = "fixed",
  1462. -- but how to specify the dimensions for curved and sideways rails?
  1463. fixed = {-1/2, -1/2, -1/2, 1/2, -1/2+1/16, 1/2},
  1464. },
  1465. groups = {bendy=2,dig_immediate=2,attached_node=1},
  1466. })
  1467.  
  1468. minetest.register_node("default:ladder", {
  1469. description = "Ladder",
  1470. drawtype = "signlike",
  1471. tiles = {"default_ladder.png"},
  1472. inventory_image = "default_ladder.png",
  1473. wield_image = "default_ladder.png",
  1474. paramtype = "light",
  1475. paramtype2 = "wallmounted",
  1476. walkable = false,
  1477. climbable = true,
  1478. selection_box = {
  1479. type = "wallmounted",
  1480. --wall_top = = <default>
  1481. --wall_bottom = = <default>
  1482. --wall_side = = <default>
  1483. },
  1484. groups = {choppy=2,oddly_breakable_by_hand=3,flammable=2},
  1485. legacy_wallmounted = true,
  1486. sounds = default.node_sound_wood_defaults(),
  1487. })
  1488.  
  1489. minetest.register_node("default:wood", {
  1490. description = "Wooden Planks",
  1491. tiles = {"default_wood.png"},
  1492. groups = {choppy=2,oddly_breakable_by_hand=2,flammable=3,wood=1},
  1493. sounds = default.node_sound_wood_defaults(),
  1494. })
  1495.  
  1496. minetest.register_node("default:cloud", {
  1497. description = "Cloud",
  1498. inventory_image = "default_cloud.png",
  1499. tiles = {"default_cloud.png"},
  1500. sounds = default.node_sound_defaults(),
  1501. groups = {not_in_creative_inventory=1},
  1502. })
  1503.  
  1504. minetest.register_node("default:water_flowing", {
  1505. description = "Flowing Water",
  1506. inventory_image = "default_water.png",
  1507. drawtype = "flowingliquid",
  1508. tiles = {"default_water.png"},
  1509. special_tiles = {
  1510. {
  1511. image="default_water_flowing_animated.png",
  1512. backface_culling=false,
  1513. animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=0.8}
  1514. },
  1515. {
  1516. image="default_water_flowing_animated.png",
  1517. backface_culling=true,
  1518. animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=0.8}
  1519. },
  1520. },
  1521. alpha = WATER_ALPHA,
  1522. paramtype = "light",
  1523. walkable = false,
  1524. pointable = false,
  1525. diggable = false,
  1526. buildable_to = true,
  1527. drop = "",
  1528. liquidtype = "flowing",
  1529. liquid_alternative_flowing = "default:water_flowing",
  1530. liquid_alternative_source = "default:water_source",
  1531. liquid_viscosity = WATER_VISC,
  1532. post_effect_color = {a=64, r=100, g=100, b=200},
  1533. groups = {water=3, liquid=3, puts_out_fire=1, not_in_creative_inventory=1},
  1534. })
  1535.  
  1536. minetest.register_node("default:water_source", {
  1537. description = "Water Source",
  1538. inventory_image = "default_water.png",
  1539. drawtype = "liquid",
  1540. tiles = {
  1541. {name="default_water_source_animated.png", animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=2.0}}
  1542. },
  1543. special_tiles = {
  1544. -- New-style water source material (mostly unused)
  1545. {
  1546. name="default_water_source_animated.png",
  1547. animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=2.0},
  1548. backface_culling = false,
  1549. }
  1550. },
  1551. alpha = WATER_ALPHA,
  1552. paramtype = "light",
  1553. walkable = false,
  1554. pointable = false,
  1555. diggable = false,
  1556. buildable_to = true,
  1557. drop = "",
  1558. liquidtype = "source",
  1559. liquid_alternative_flowing = "default:water_flowing",
  1560. liquid_alternative_source = "default:water_source",
  1561. liquid_viscosity = WATER_VISC,
  1562. post_effect_color = {a=64, r=100, g=100, b=200},
  1563. groups = {water=3, liquid=3, puts_out_fire=1},
  1564. })
  1565.  
  1566. minetest.register_node("default:lava_flowing", {
  1567. description = "Flowing Lava",
  1568. inventory_image = "default_lava.png",
  1569. drawtype = "flowingliquid",
  1570. tiles = {"default_lava.png"},
  1571. special_tiles = {
  1572. {
  1573. image="default_lava_flowing_animated.png",
  1574. backface_culling=false,
  1575. animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=3.3}
  1576. },
  1577. {
  1578. image="default_lava_flowing_animated.png",
  1579. backface_culling=true,
  1580. animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=3.3}
  1581. },
  1582. },
  1583. paramtype = "light",
  1584. light_source = LIGHT_MAX - 1,
  1585. walkable = false,
  1586. pointable = false,
  1587. diggable = false,
  1588. buildable_to = true,
  1589. drop = "",
  1590. liquidtype = "flowing",
  1591. liquid_alternative_flowing = "default:lava_flowing",
  1592. liquid_alternative_source = "default:lava_source",
  1593. liquid_viscosity = LAVA_VISC,
  1594. liquid_renewable = false,
  1595. damage_per_second = 4*2,
  1596. post_effect_color = {a=192, r=255, g=64, b=0},
  1597. groups = {lava=3, liquid=2, hot=3, igniter=1, not_in_creative_inventory=1},
  1598. })
  1599.  
  1600. minetest.register_node("default:lava_source", {
  1601. description = "Lava Source",
  1602. inventory_image = "default_lava.png",
  1603. drawtype = "liquid",
  1604. tiles = {
  1605. {name="default_lava_source_animated.png", animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=3.0}}
  1606. },
  1607. special_tiles = {
  1608. -- New-style lava source material (mostly unused)
  1609. {
  1610. name="default_lava_source_animated.png",
  1611. animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=3.0},
  1612. backface_culling = false,
  1613. }
  1614. },
  1615. paramtype = "light",
  1616. light_source = LIGHT_MAX - 1,
  1617. walkable = false,
  1618. pointable = false,
  1619. diggable = false,
  1620. buildable_to = true,
  1621. drop = "",
  1622. liquidtype = "source",
  1623. liquid_alternative_flowing = "default:lava_flowing",
  1624. liquid_alternative_source = "default:lava_source",
  1625. liquid_viscosity = LAVA_VISC,
  1626. liquid_renewable = false,
  1627. damage_per_second = 4*2,
  1628. post_effect_color = {a=192, r=255, g=64, b=0},
  1629. groups = {lava=3, liquid=2, hot=3, igniter=1},
  1630. })
  1631.  
  1632. minetest.register_node("default:torch", {
  1633. description = "Torch",
  1634. drawtype = "torchlike",
  1635. --tiles = {"default_torch_on_floor.png", "default_torch_on_ceiling.png", "default_torch.png"},
  1636. tiles = {
  1637. {name="default_torch_on_floor_animated.png", animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=3.0}},
  1638. {name="default_torch_on_ceiling_animated.png", animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=3.0}},
  1639. {name="default_torch_animated.png", animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=3.0}}
  1640. },
  1641. inventory_image = "default_torch_on_floor.png",
  1642. wield_image = "default_torch_on_floor.png",
  1643. paramtype = "light",
  1644. paramtype2 = "wallmounted",
  1645. sunlight_propagates = true,
  1646. walkable = false,
  1647. light_source = LIGHT_MAX-1,
  1648. selection_box = {
  1649. type = "wallmounted",
  1650. wall_top = {-0.1, 0.5-0.6, -0.1, 0.1, 0.5, 0.1},
  1651. wall_bottom = {-0.1, -0.5, -0.1, 0.1, -0.5+0.6, 0.1},
  1652. wall_side = {-0.5, -0.3, -0.1, -0.5+0.3, 0.3, 0.1},
  1653. },
  1654. groups = {choppy=2,dig_immediate=3,flammable=1,attached_node=1},
  1655. legacy_wallmounted = true,
  1656. sounds = default.node_sound_defaults(),
  1657. })
  1658.  
  1659. minetest.register_node("default:sign_wall", {
  1660. description = "Sign",
  1661. drawtype = "signlike",
  1662. tiles = {"default_sign_wall.png"},
  1663. inventory_image = "default_sign_wall.png",
  1664. wield_image = "default_sign_wall.png",
  1665. paramtype = "light",
  1666. paramtype2 = "wallmounted",
  1667. sunlight_propagates = true,
  1668. walkable = false,
  1669. selection_box = {
  1670. type = "wallmounted",
  1671. --wall_top = <default>
  1672. --wall_bottom = <default>
  1673. --wall_side = <default>
  1674. },
  1675. groups = {choppy=2,dig_immediate=2,attached_node=1},
  1676. legacy_wallmounted = true,
  1677. sounds = default.node_sound_defaults(),
  1678. on_construct = function(pos)
  1679. --local n = minetest.env:get_node(pos)
  1680. local meta = minetest.env:get_meta(pos)
  1681. meta:set_string("formspec", "field[text;;${text}]")
  1682. meta:set_string("infotext", "\"\"")
  1683. end,
  1684. on_receive_fields = function(pos, formname, fields, sender)
  1685. --print("Sign at "..minetest.pos_to_string(pos).." got "..dump(fields))
  1686. local meta = minetest.env:get_meta(pos)
  1687. fields.text = fields.text or ""
  1688. print((sender:get_player_name() or "").." wrote \""..fields.text..
  1689. "\" to sign at "..minetest.pos_to_string(pos))
  1690. meta:set_string("text", fields.text)
  1691. meta:set_string("infotext", '"'..fields.text..'"')
  1692. end,
  1693. })
  1694.  
  1695. minetest.register_node("default:chest", {
  1696. description = "Chest",
  1697. inventory_image = "default_chest_front.png",
  1698. tiles = {"default_chest_top.png", "default_chest_top.png", "default_chest_side.png",
  1699. "default_chest_side.png", "default_chest_side.png", "default_chest_front.png"},
  1700. paramtype2 = "facedir",
  1701. groups = {choppy=2,oddly_breakable_by_hand=2},
  1702. legacy_facedir_simple = true,
  1703. sounds = default.node_sound_wood_defaults(),
  1704. on_construct = function(pos)
  1705. local meta = minetest.env:get_meta(pos)
  1706. meta:set_string("formspec",
  1707. "size[8,9]"..
  1708. "list[current_name;main;0,0;8,4;]"..
  1709. "list[current_player;main;0,5;8,4;]")
  1710. meta:set_string("infotext", "Chest")
  1711. local inv = meta:get_inventory()
  1712. inv:set_size("main", 8*4)
  1713. end,
  1714. can_dig = function(pos,player)
  1715. local meta = minetest.env:get_meta(pos);
  1716. local inv = meta:get_inventory()
  1717. return inv:is_empty("main")
  1718. end,
  1719. on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
  1720. minetest.log("action", player:get_player_name()..
  1721. " moves stuff in chest at "..minetest.pos_to_string(pos))
  1722. end,
  1723. on_metadata_inventory_put = function(pos, listname, index, stack, player)
  1724. minetest.log("action", player:get_player_name()..
  1725. " moves stuff to chest at "..minetest.pos_to_string(pos))
  1726. end,
  1727. on_metadata_inventory_take = function(pos, listname, index, stack, player)
  1728. minetest.log("action", player:get_player_name()..
  1729. " takes stuff from chest at "..minetest.pos_to_string(pos))
  1730. end,
  1731. })
  1732.  
  1733. local function has_locked_chest_privilege(meta, player)
  1734. if player:get_player_name() ~= meta:get_string("owner") then
  1735. return false
  1736. end
  1737. return true
  1738. end
  1739.  
  1740. minetest.register_node("default:chest_locked", {
  1741. description = "Locked Chest",
  1742. inventory_image = "default_chest_lock.png",
  1743. tiles = {"default_chest_top.png", "default_chest_top.png", "default_chest_side.png",
  1744. "default_chest_side.png", "default_chest_side.png", "default_chest_lock.png"},
  1745. paramtype2 = "facedir",
  1746. groups = {choppy=2,oddly_breakable_by_hand=2},
  1747. legacy_facedir_simple = true,
  1748. sounds = default.node_sound_wood_defaults(),
  1749. after_place_node = function(pos, placer)
  1750. local meta = minetest.env:get_meta(pos)
  1751. meta:set_string("owner", placer:get_player_name() or "")
  1752. meta:set_string("infotext", "Locked Chest (owned by "..
  1753. meta:get_string("owner")..")")
  1754. end,
  1755. on_construct = function(pos)
  1756. local meta = minetest.env:get_meta(pos)
  1757. meta:set_string("infotext", "Locked Chest")
  1758. meta:set_string("owner", "")
  1759. local inv = meta:get_inventory()
  1760. inv:set_size("main", 8*4)
  1761. end,
  1762. can_dig = function(pos,player)
  1763. local meta = minetest.env:get_meta(pos);
  1764. local inv = meta:get_inventory()
  1765. return inv:is_empty("main")
  1766. end,
  1767. allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
  1768. local meta = minetest.env:get_meta(pos)
  1769. if not has_locked_chest_privilege(meta, player) then
  1770. minetest.log("action", player:get_player_name()..
  1771. " tried to access a locked chest belonging to "..
  1772. meta:get_string("owner").." at "..
  1773. minetest.pos_to_string(pos))
  1774. return 0
  1775. end
  1776. return count
  1777. end,
  1778. allow_metadata_inventory_put = function(pos, listname, index, stack, player)
  1779. local meta = minetest.env:get_meta(pos)
  1780. if not has_locked_chest_privilege(meta, player) then
  1781. minetest.log("action", player:get_player_name()..
  1782. " tried to access a locked chest belonging to "..
  1783. meta:get_string("owner").." at "..
  1784. minetest.pos_to_string(pos))
  1785. return 0
  1786. end
  1787. return stack:get_count()
  1788. end,
  1789. allow_metadata_inventory_take = function(pos, listname, index, stack, player)
  1790. local meta = minetest.env:get_meta(pos)
  1791. if not has_locked_chest_privilege(meta, player) then
  1792. minetest.log("action", player:get_player_name()..
  1793. " tried to access a locked chest belonging to "..
  1794. meta:get_string("owner").." at "..
  1795. minetest.pos_to_string(pos))
  1796. return 0
  1797. end
  1798. return stack:get_count()
  1799. end,
  1800. on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
  1801. minetest.log("action", player:get_player_name()..
  1802. " moves stuff in locked chest at "..minetest.pos_to_string(pos))
  1803. end,
  1804. on_metadata_inventory_put = function(pos, listname, index, stack, player)
  1805. minetest.log("action", player:get_player_name()..
  1806. " moves stuff to locked chest at "..minetest.pos_to_string(pos))
  1807. end,
  1808. on_metadata_inventory_take = function(pos, listname, index, stack, player)
  1809. minetest.log("action", player:get_player_name()..
  1810. " takes stuff from locked chest at "..minetest.pos_to_string(pos))
  1811. end,
  1812. on_rightclick = function(pos, node, clicker)
  1813. local meta = minetest.env:get_meta(pos)
  1814. if has_locked_chest_privilege(meta, clicker) then
  1815. local pos = pos.x .. "," .. pos.y .. "," ..pos.z
  1816. minetest.show_formspec(clicker:get_player_name(), "default:chest_locked",
  1817. "size[8,9]"..
  1818. "list[nodemeta:".. pos .. ";main;0,0;8,4;]"..
  1819. "list[current_player;main;0,5;8,4;]")
  1820. end
  1821. end,
  1822. })
  1823.  
  1824. default.furnace_inactive_formspec =
  1825. "size[8,9]"..
  1826. "image[2,2;1,1;default_furnace_fire_bg.png]"..
  1827. "list[current_name;fuel;2,3;1,1;]"..
  1828. "list[current_name;src;2,1;1,1;]"..
  1829. "list[current_name;dst;5,1;2,2;]"..
  1830. "list[current_player;main;0,5;8,4;]"
  1831.  
  1832. minetest.register_node("default:furnace", {
  1833. description = "Furnace",
  1834. inventory_image = "default_furnace_front.png",
  1835. tiles = {"default_furnace_top.png", "default_furnace_bottom.png", "default_furnace_side.png",
  1836. "default_furnace_side.png", "default_furnace_side.png", "default_furnace_front.png"},
  1837. paramtype2 = "facedir",
  1838. groups = {cracky=2},
  1839. legacy_facedir_simple = true,
  1840. sounds = default.node_sound_stone_defaults(),
  1841. on_construct = function(pos)
  1842. local meta = minetest.env:get_meta(pos)
  1843. meta:set_string("formspec", default.furnace_inactive_formspec)
  1844. meta:set_string("infotext", "Furnace")
  1845. local inv = meta:get_inventory()
  1846. inv:set_size("fuel", 1)
  1847. inv:set_size("src", 1)
  1848. inv:set_size("dst", 4)
  1849. end,
  1850. can_dig = function(pos,player)
  1851. local meta = minetest.env:get_meta(pos);
  1852. local inv = meta:get_inventory()
  1853. if not inv:is_empty("fuel") then
  1854. return false
  1855. elseif not inv:is_empty("dst") then
  1856. return false
  1857. elseif not inv:is_empty("src") then
  1858. return false
  1859. end
  1860. return true
  1861. end,
  1862. allow_metadata_inventory_put = function(pos, listname, index, stack, player)
  1863. local meta = minetest.env:get_meta(pos)
  1864. local inv = meta:get_inventory()
  1865. if listname == "fuel" then
  1866. if minetest.get_craft_result({method="fuel",width=1,items={stack}}).time ~= 0 then
  1867. if inv:is_empty("src") then
  1868. meta:set_string("infotext","Furnace is empty")
  1869. end
  1870. return stack:get_count()
  1871. else
  1872. return 0
  1873. end
  1874. elseif listname == "src" then
  1875. return stack:get_count()
  1876. elseif listname == "dst" then
  1877. return 0
  1878. end
  1879. end,
  1880. allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
  1881. local meta = minetest.env:get_meta(pos)
  1882. local inv = meta:get_inventory()
  1883. local stack = inv:get_stack(from_list, from_index)
  1884. if to_list == "fuel" then
  1885. if minetest.get_craft_result({method="fuel",width=1,items={stack}}).time ~= 0 then
  1886. if inv:is_empty("src") then
  1887. meta:set_string("infotext","Furnace is empty")
  1888. end
  1889. return count
  1890. else
  1891. return 0
  1892. end
  1893. elseif to_list == "src" then
  1894. return count
  1895. elseif to_list == "dst" then
  1896. return 0
  1897. end
  1898. end,
  1899. })
  1900.  
  1901. minetest.register_node("default:furnace_active", {
  1902. description = "Furnace",
  1903. inventory_image = "default_furnace_front_active.png",
  1904. tiles = {"default_furnace_top.png", "default_furnace_bottom.png", "default_furnace_side.png",
  1905. "default_furnace_side.png", "default_furnace_side.png", "default_furnace_front_active.png"},
  1906. paramtype2 = "facedir",
  1907. light_source = 8,
  1908. drop = "default:furnace",
  1909. groups = {cracky=2, not_in_creative_inventory=1},
  1910. legacy_facedir_simple = true,
  1911. sounds = default.node_sound_stone_defaults(),
  1912. on_construct = function(pos)
  1913. local meta = minetest.env:get_meta(pos)
  1914. meta:set_string("formspec", default.furnace_inactive_formspec)
  1915. meta:set_string("infotext", "Furnace");
  1916. local inv = meta:get_inventory()
  1917. inv:set_size("fuel", 1)
  1918. inv:set_size("src", 1)
  1919. inv:set_size("dst", 4)
  1920. end,
  1921. can_dig = function(pos,player)
  1922. local meta = minetest.env:get_meta(pos);
  1923. local inv = meta:get_inventory()
  1924. if not inv:is_empty("fuel") then
  1925. return false
  1926. elseif not inv:is_empty("dst") then
  1927. return false
  1928. elseif not inv:is_empty("src") then
  1929. return false
  1930. end
  1931. return true
  1932. end,
  1933. allow_metadata_inventory_put = function(pos, listname, index, stack, player)
  1934. local meta = minetest.env:get_meta(pos)
  1935. local inv = meta:get_inventory()
  1936. if listname == "fuel" then
  1937. if minetest.get_craft_result({method="fuel",width=1,items={stack}}).time ~= 0 then
  1938. if inv:is_empty("src") then
  1939. meta:set_string("infotext","Furnace is empty")
  1940. end
  1941. return stack:get_count()
  1942. else
  1943. return 0
  1944. end
  1945. elseif listname == "src" then
  1946. return stack:get_count()
  1947. elseif listname == "dst" then
  1948. return 0
  1949. end
  1950. end,
  1951. allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
  1952. local meta = minetest.env:get_meta(pos)
  1953. local inv = meta:get_inventory()
  1954. local stack = inv:get_stack(from_list, from_index)
  1955. if to_list == "fuel" then
  1956. if minetest.get_craft_result({method="fuel",width=1,items={stack}}).time ~= 0 then
  1957. if inv:is_empty("src") then
  1958. meta:set_string("infotext","Furnace is empty")
  1959. end
  1960. return count
  1961. else
  1962. return 0
  1963. end
  1964. elseif to_list == "src" then
  1965. return count
  1966. elseif to_list == "dst" then
  1967. return 0
  1968. end
  1969. end,
  1970. })
  1971.  
  1972. function hacky_swap_node(pos,name)
  1973. local node = minetest.env:get_node(pos)
  1974. local meta = minetest.env:get_meta(pos)
  1975. local meta0 = meta:to_table()
  1976. if node.name == name then
  1977. return
  1978. end
  1979. node.name = name
  1980. local meta0 = meta:to_table()
  1981. minetest.env:set_node(pos,node)
  1982. meta = minetest.env:get_meta(pos)
  1983. meta:from_table(meta0)
  1984. end
  1985.  
  1986. minetest.register_abm({
  1987. nodenames = {"default:furnace","default:furnace_active"},
  1988. interval = 1.0,
  1989. chance = 1,
  1990. action = function(pos, node, active_object_count, active_object_count_wider)
  1991. local meta = minetest.env:get_meta(pos)
  1992. for i, name in ipairs({
  1993. "fuel_totaltime",
  1994. "fuel_time",
  1995. "src_totaltime",
  1996. "src_time"
  1997. }) do
  1998. if meta:get_string(name) == "" then
  1999. meta:set_float(name, 0.0)
  2000. end
  2001. end
  2002.  
  2003. local inv = meta:get_inventory()
  2004.  
  2005. local srclist = inv:get_list("src")
  2006. local cooked = nil
  2007. local aftercooked
  2008.  
  2009. if srclist then
  2010. cooked, aftercooked = minetest.get_craft_result({method = "cooking", width = 1, items = srclist})
  2011. end
  2012.  
  2013. local was_active = false
  2014.  
  2015. if meta:get_float("fuel_time") < meta:get_float("fuel_totaltime") then
  2016. was_active = true
  2017. meta:set_float("fuel_time", meta:get_float("fuel_time") + 1)
  2018. meta:set_float("src_time", meta:get_float("src_time") + 1)
  2019. if cooked and cooked.item and meta:get_float("src_time") >= cooked.time then
  2020. -- check if there's room for output in "dst" list
  2021. if inv:room_for_item("dst",cooked.item) then
  2022. -- Put result in "dst" list
  2023. inv:add_item("dst", cooked.item)
  2024. -- take stuff from "src" list
  2025. inv:set_stack("src", 1, aftercooked.items[1])
  2026. else
  2027. print("Could not insert '"..cooked.item:to_string().."'")
  2028. end
  2029. meta:set_string("src_time", 0)
  2030. end
  2031. end
  2032.  
  2033. if meta:get_float("fuel_time") < meta:get_float("fuel_totaltime") then
  2034. local percent = math.floor(meta:get_float("fuel_time") /
  2035. meta:get_float("fuel_totaltime") * 100)
  2036. meta:set_string("infotext","Furnace active: "..percent.."%")
  2037. hacky_swap_node(pos,"default:furnace_active")
  2038. meta:set_string("formspec",
  2039. "size[8,9]"..
  2040. "image[2,2;1,1;default_furnace_fire_bg.png^[lowpart:"..
  2041. (100-percent)..":default_furnace_fire_fg.png]"..
  2042. "list[current_name;fuel;2,3;1,1;]"..
  2043. "list[current_name;src;2,1;1,1;]"..
  2044. "list[current_name;dst;5,1;2,2;]"..
  2045. "list[current_player;main;0,5;8,4;]")
  2046. return
  2047. end
  2048.  
  2049. local fuel = nil
  2050. local afterfuel
  2051. local cooked = nil
  2052. local fuellist = inv:get_list("fuel")
  2053. local srclist = inv:get_list("src")
  2054.  
  2055. if srclist then
  2056. cooked = minetest.get_craft_result({method = "cooking", width = 1, items = srclist})
  2057. end
  2058. if fuellist then
  2059. fuel, afterfuel = minetest.get_craft_result({method = "fuel", width = 1, items = fuellist})
  2060. end
  2061.  
  2062. if fuel.time <= 0 then
  2063. meta:set_string("infotext","Furnace out of fuel")
  2064. hacky_swap_node(pos,"default:furnace")
  2065. meta:set_string("formspec", default.furnace_inactive_formspec)
  2066. return
  2067. end
  2068.  
  2069. if cooked.item:is_empty() then
  2070. if was_active then
  2071. meta:set_string("infotext","Furnace is empty")
  2072. hacky_swap_node(pos,"default:furnace")
  2073. meta:set_string("formspec", default.furnace_inactive_formspec)
  2074. end
  2075. return
  2076. end
  2077.  
  2078. meta:set_string("fuel_totaltime", fuel.time)
  2079. meta:set_string("fuel_time", 0)
  2080.  
  2081. inv:set_stack("fuel", 1, afterfuel.items[1])
  2082. end,
  2083. })
  2084.  
  2085. minetest.register_node("default:cobble", {
  2086. description = "Cobblestone",
  2087. inventory_image = "default_cobble.png",
  2088. tiles = {"default_cobble.png"},
  2089. is_ground_content = true,
  2090. groups = {cracky=3, stone=2},
  2091. sounds = default.node_sound_stone_defaults(),
  2092. })
  2093.  
  2094. minetest.register_node("default:mossycobble", {
  2095. description = "Mossy Cobblestone",
  2096. inventory_image = "default_mossycobble.png",
  2097. tiles = {"default_mossycobble.png"},
  2098. is_ground_content = true,
  2099. groups = {cracky=3},
  2100. sounds = default.node_sound_stone_defaults(),
  2101. })
  2102.  
  2103. minetest.register_node("default:steelblock", {
  2104. description = "Steel Block",
  2105. inventory_image = "default_steel_block.png",
  2106. tiles = {"default_steel_block.png"},
  2107. is_ground_content = true,
  2108. groups = {cracky=1,level=2},
  2109. sounds = default.node_sound_stone_defaults(),
  2110. })
  2111.  
  2112. minetest.register_node("default:bronzeblock", {
  2113. description = "Bronze Block",
  2114. inventory_image = "default_bronze_block.png",
  2115. tiles = {"default_bronze_block.png"},
  2116. is_ground_content = true,
  2117. groups = {cracky=1,level=2},
  2118. sounds = default.node_sound_stone_defaults(),
  2119. })
  2120.  
  2121. minetest.register_node("default:mese", {
  2122. description = "Mese Block",
  2123. inventory_image = "default_mese_block.png",
  2124. tiles = {"default_mese_block.png"},
  2125. is_ground_content = true,
  2126. groups = {cracky=1,level=2},
  2127. sounds = default.node_sound_stone_defaults(),
  2128. })
  2129. minetest.register_alias("default:mese_block", "default:mese")
  2130.  
  2131. minetest.register_node("default:goldblock", {
  2132. description = "Gold Block",
  2133. inventory_image = "default_gold_block.png",
  2134. tiles = {"default_gold_block.png"},
  2135. is_ground_content = true,
  2136. groups = {cracky=1},
  2137. sounds = default.node_sound_stone_defaults(),
  2138. })
  2139.  
  2140. minetest.register_node("default:diamondblock", {
  2141. description = "Diamond Block",
  2142. inventory_image = "default_diamond_block.png",
  2143. tiles = {"default_diamond_block.png"},
  2144. is_ground_content = true,
  2145. groups = {cracky=1,level=3},
  2146. sounds = default.node_sound_stone_defaults(),
  2147. })
  2148.  
  2149. minetest.register_node("default:obsidian_glass", {
  2150. description = "Obsidian Glass",
  2151. inventory_image = "default_obsidian_glass.png",
  2152. drawtype = "glasslike",
  2153. tiles = {"default_obsidian_glass.png"},
  2154. paramtype = "light",
  2155. sunlight_propagates = true,
  2156. sounds = default.node_sound_glass_defaults(),
  2157. groups = {cracky=3,oddly_breakable_by_hand=3},
  2158. })
  2159.  
  2160. minetest.register_node("default:obsidian", {
  2161. description = "Obsidian",
  2162. inventory_image = "default_obsidian.png",
  2163. tiles = {"default_obsidian.png"},
  2164. is_ground_content = true,
  2165. sounds = default.node_sound_stone_defaults(),
  2166. groups = {cracky=1,level=2},
  2167. })
  2168.  
  2169. minetest.register_node("default:nyancat", {
  2170. description = "Nyan Cat",
  2171. inventory_image = "default_nc_front.png",
  2172. tiles = {"default_nc_side.png", "default_nc_side.png", "default_nc_side.png",
  2173. "default_nc_side.png", "default_nc_back.png", "default_nc_front.png"},
  2174. paramtype2 = "facedir",
  2175. groups = {cracky=2},
  2176. legacy_facedir_simple = true,
  2177. sounds = default.node_sound_defaults(),
  2178. })
  2179.  
  2180. minetest.register_node("default:nyancat_rainbow", {
  2181. description = "Nyan Cat Rainbow",
  2182. inventory_image = "default_nc_rb.png",
  2183. tiles = {"default_nc_rb.png"},
  2184. groups = {cracky=2},
  2185. sounds = default.node_sound_defaults(),
  2186. })
  2187.  
  2188. minetest.register_node("default:sapling", {
  2189. description = "Sapling",
  2190. drawtype = "plantlike",
  2191. visual_scale = 1.0,
  2192. tiles = {"default_sapling.png"},
  2193. inventory_image = "default_sapling.png",
  2194. wield_image = "default_sapling.png",
  2195. paramtype = "light",
  2196. walkable = false,
  2197. selection_box = {
  2198. type = "fixed",
  2199. fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3}
  2200. },
  2201. groups = {snappy=2,dig_immediate=3,flammable=2,attached_node=1},
  2202. sounds = default.node_sound_defaults(),
  2203. })
  2204.  
  2205. minetest.register_node("default:apple", {
  2206. description = "Apple",
  2207. drawtype = "plantlike",
  2208. visual_scale = 1.0,
  2209. tiles = {"default_apple.png"},
  2210. inventory_image = "default_apple.png",
  2211. paramtype = "light",
  2212. sunlight_propagates = true,
  2213. walkable = false,
  2214. selection_box = {
  2215. type = "fixed",
  2216. fixed = {-0.2, -0.5, -0.2, 0.2, 0, 0.2}
  2217. },
  2218. groups = {fleshy=3,dig_immediate=3,flammable=2},
  2219. on_use = minetest.item_eat(4),
  2220. sounds = default.node_sound_defaults(),
  2221. })
  2222.  
  2223. minetest.register_node("default:dry_shrub", {
  2224. description = "Dry Shrub",
  2225. drawtype = "plantlike",
  2226. visual_scale = 1.0,
  2227. tiles = {"default_dry_shrub.png"},
  2228. inventory_image = "default_dry_shrub.png",
  2229. wield_image = "default_dry_shrub.png",
  2230. paramtype = "light",
  2231. walkable = false,
  2232. groups = {snappy=3,flammable=3,attached_node=1},
  2233. sounds = default.node_sound_leaves_defaults(),
  2234. selection_box = {
  2235. type = "fixed",
  2236. fixed = {-1/3, -1/2, -1/3, 1/3, 1/6, 1/3},
  2237. },
  2238. })
  2239.  
  2240. minetest.register_node("default:grass_1", {
  2241. description = "Grass",
  2242. drawtype = "plantlike",
  2243. tiles = {"default_grass_1.png"},
  2244. -- use a bigger inventory image
  2245. inventory_image = "default_grass_3.png",
  2246. wield_image = "default_grass_3.png",
  2247. paramtype = "light",
  2248. walkable = false,
  2249. buildable_to = true,
  2250. groups = {snappy=3,flammable=3,attached_node=1},
  2251. sounds = default.node_sound_leaves_defaults(),
  2252. selection_box = {
  2253. type = "fixed",
  2254. fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},
  2255. },
  2256. on_place = function(itemstack, placer, pointed_thing)
  2257. -- place a random grass node
  2258. local stack = ItemStack("default:grass_"..math.random(1,5))
  2259. local ret = minetest.item_place(stack, placer, pointed_thing)
  2260. return ItemStack("default:grass_1 "..itemstack:get_count()-(1-ret:get_count()))
  2261. end,
  2262. })
  2263.  
  2264. minetest.register_node("default:grass_2", {
  2265. description = "Grass",
  2266. drawtype = "plantlike",
  2267. tiles = {"default_grass_2.png"},
  2268. inventory_image = "default_grass_2.png",
  2269. wield_image = "default_grass_2.png",
  2270. paramtype = "light",
  2271. walkable = false,
  2272. buildable_to = true,
  2273. is_ground_content = true,
  2274. drop = "default:grass_1",
  2275. groups = {snappy=3,flammable=3,attached_node=1,not_in_creative_inventory=1},
  2276. sounds = default.node_sound_leaves_defaults(),
  2277. selection_box = {
  2278. type = "fixed",
  2279. fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},
  2280. },
  2281. })
  2282. minetest.register_node("default:grass_3", {
  2283. description = "Grass",
  2284. drawtype = "plantlike",
  2285. tiles = {"default_grass_3.png"},
  2286. inventory_image = "default_grass_3.png",
  2287. wield_image = "default_grass_3.png",
  2288. paramtype = "light",
  2289. walkable = false,
  2290. buildable_to = true,
  2291. is_ground_content = true,
  2292. drop = "default:grass_1",
  2293. groups = {snappy=3,flammable=3,attached_node=1,not_in_creative_inventory=1},
  2294. sounds = default.node_sound_leaves_defaults(),
  2295. selection_box = {
  2296. type = "fixed",
  2297. fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},
  2298. },
  2299. })
  2300.  
  2301. minetest.register_node("default:grass_4", {
  2302. description = "Grass",
  2303. drawtype = "plantlike",
  2304. tiles = {"default_grass_4.png"},
  2305. inventory_image = "default_grass_4.png",
  2306. wield_image = "default_grass_4.png",
  2307. paramtype = "light",
  2308. walkable = false,
  2309. buildable_to = true,
  2310. is_ground_content = true,
  2311. drop = "default:grass_1",
  2312. groups = {snappy=3,flammable=3,attached_node=1,not_in_creative_inventory=1},
  2313. sounds = default.node_sound_leaves_defaults(),
  2314. selection_box = {
  2315. type = "fixed",
  2316. fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},
  2317. },
  2318. })
  2319.  
  2320. minetest.register_node("default:grass_5", {
  2321. description = "Grass",
  2322. drawtype = "plantlike",
  2323. tiles = {"default_grass_5.png"},
  2324. inventory_image = "default_grass_5.png",
  2325. wield_image = "default_grass_5.png",
  2326. paramtype = "light",
  2327. walkable = false,
  2328. buildable_to = true,
  2329. is_ground_content = true,
  2330. drop = "default:grass_1",
  2331. groups = {snappy=3,flammable=3,attached_node=1,not_in_creative_inventory=1},
  2332. sounds = default.node_sound_leaves_defaults(),
  2333. selection_box = {
  2334. type = "fixed",
  2335. fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},
  2336. },
  2337. })
  2338.  
  2339. --
  2340. -- Crafting items
  2341. --
  2342.  
  2343. minetest.register_craftitem("default:stick", {
  2344. description = "Stick",
  2345. inventory_image = "default_stick.png",
  2346. })
  2347.  
  2348. minetest.register_craftitem("default:paper", {
  2349. description = "Paper",
  2350. inventory_image = "default_paper.png",
  2351. })
  2352.  
  2353. minetest.register_craftitem("default:book", {
  2354. description = "Book",
  2355. inventory_image = "default_book.png",
  2356. })
  2357.  
  2358. minetest.register_craftitem("default:coal_lump", {
  2359. description = "Coal Lump",
  2360. inventory_image = "default_coal_lump.png",
  2361. })
  2362.  
  2363. minetest.register_craftitem("default:iron_lump", {
  2364. description = "Iron Lump",
  2365. inventory_image = "default_iron_lump.png",
  2366. })
  2367.  
  2368. minetest.register_craftitem("default:copper_lump", {
  2369. description = "Copper Lump",
  2370. inventory_image = "default_copper_lump.png",
  2371. })
  2372.  
  2373. minetest.register_craftitem("default:mese_crystal", {
  2374. description = "Mese Crystal",
  2375. inventory_image = "default_mese_crystal.png",
  2376. })
  2377.  
  2378. minetest.register_craftitem("default:gold_lump", {
  2379. description = "Gold Lump",
  2380. inventory_image = "default_gold_lump.png",
  2381. })
  2382.  
  2383. minetest.register_craftitem("default:diamond", {
  2384. description = "Diamond",
  2385. inventory_image = "default_diamond.png",
  2386. })
  2387.  
  2388. minetest.register_craftitem("default:clay_lump", {
  2389. description = "Clay Lump",
  2390. inventory_image = "default_clay_lump.png",
  2391. })
  2392.  
  2393. minetest.register_craftitem("default:steel_ingot", {
  2394. description = "Steel Ingot",
  2395. inventory_image = "default_steel_ingot.png",
  2396. })
  2397.  
  2398. minetest.register_craftitem("default:copper_ingot", {
  2399. description = "Copper Ingot",
  2400. inventory_image = "default_copper_ingot.png",
  2401. })
  2402.  
  2403. minetest.register_craftitem("default:bronze_ingot", {
  2404. description = "Bronze Ingot",
  2405. inventory_image = "default_bronze_ingot.png",
  2406. })
  2407.  
  2408. minetest.register_craftitem("default:gold_ingot", {
  2409. description = "Gold Ingot",
  2410. inventory_image = "default_gold_ingot.png"
  2411. })
  2412.  
  2413. minetest.register_craftitem("default:mese_crystal_fragment", {
  2414. description = "Mese Crystal Fragment",
  2415. inventory_image = "default_mese_crystal_fragment.png",
  2416. })
  2417.  
  2418. minetest.register_craftitem("default:clay_brick", {
  2419. description = "Clay Brick",
  2420. inventory_image = "default_clay_brick.png",
  2421. })
  2422.  
  2423. minetest.register_craftitem("default:scorched_stuff", {
  2424. description = "Scorched Stuff",
  2425. inventory_image = "default_scorched_stuff.png",
  2426. })
  2427.  
  2428. minetest.register_craftitem("default:obsidian_shard", {
  2429. description = "Obsidian Shard",
  2430. inventory_image = "default_obsidian_shard.png",
  2431. })
  2432.  
  2433. -- Support old code
  2434. function default.spawn_falling_node(p, nodename)
  2435. spawn_falling_node(p, nodename)
  2436. end
  2437.  
  2438. -- Horrible crap to support old code
  2439. -- Don't use this and never do what this does, it's completely wrong!
  2440. -- (More specifically, the client and the C++ code doesn't get the group)
  2441. function default.register_falling_node(nodename, texture)
  2442. minetest.log("error", debug.traceback())
  2443. minetest.log('error', "WARNING: default.register_falling_node is deprecated")
  2444. if minetest.registered_nodes[nodename] then
  2445. minetest.registered_nodes[nodename].groups.falling_node = 1
  2446. end
  2447. end
  2448.  
  2449. --
  2450. -- Global callbacks
  2451. --
  2452.  
  2453. -- Global environment step function
  2454. function on_step(dtime)
  2455. -- print("on_step")
  2456. end
  2457. minetest.register_globalstep(on_step)
  2458.  
  2459. function on_placenode(p, node)
  2460. --print("on_placenode")
  2461. end
  2462. minetest.register_on_placenode(on_placenode)
  2463.  
  2464. function on_dignode(p, node)
  2465. --print("on_dignode")
  2466. end
  2467. minetest.register_on_dignode(on_dignode)
  2468.  
  2469. function on_punchnode(p, node)
  2470. end
  2471. minetest.register_on_punchnode(on_punchnode)
  2472.  
  2473. --
  2474. -- Lavacooling
  2475. --
  2476.  
  2477. default.cool_lava_source = function(pos)
  2478. minetest.env:set_node(pos, {name="default:obsidian"})
  2479. end
  2480.  
  2481. default.cool_lava_flowing = function(pos)
  2482. minetest.env:set_node(pos, {name="default:stone"})
  2483. end
  2484.  
  2485. minetest.register_abm({
  2486. nodenames = {"default:lava_flowing"},
  2487. neighbors = {"group:water"},
  2488. interval = 1,
  2489. chance = 1,
  2490. action = function(pos, node, active_object_count, active_object_count_wider)
  2491. default.cool_lava_flowing(pos, node, active_object_count, active_object_count_wider)
  2492. end,
  2493. })
  2494.  
  2495. minetest.register_abm({
  2496. nodenames = {"default:lava_source"},
  2497. neighbors = {"group:water"},
  2498. interval = 1,
  2499. chance = 1,
  2500. action = function(pos, node, active_object_count, active_object_count_wider)
  2501. default.cool_lava_source(pos, node, active_object_count, active_object_count_wider)
  2502. end,
  2503. })
  2504.  
  2505. --
  2506. -- Papyrus and cactus growing
  2507. --
  2508.  
  2509. minetest.register_abm({
  2510. nodenames = {"default:cactus"},
  2511. neighbors = {"group:sand"},
  2512. interval = 50,
  2513. chance = 20,
  2514. action = function(pos, node)
  2515. pos.y = pos.y-1
  2516. local name = minetest.env:get_node(pos).name
  2517. if minetest.get_item_group(name, "sand") ~= 0 then
  2518. pos.y = pos.y+1
  2519. local height = 0
  2520. while minetest.env:get_node(pos).name == "default:cactus" and height < 4 do
  2521. height = height+1
  2522. pos.y = pos.y+1
  2523. end
  2524. if height < 4 then
  2525. if minetest.env:get_node(pos).name == "air" then
  2526. minetest.env:set_node(pos, {name="default:cactus"})
  2527. end
  2528. end
  2529. end
  2530. end,
  2531. })
  2532.  
  2533. minetest.register_abm({
  2534. nodenames = {"default:papyrus"},
  2535. neighbors = {"default:dirt", "default:dirt_with_grass"},
  2536. interval = 50,
  2537. chance = 20,
  2538. action = function(pos, node)
  2539. pos.y = pos.y-1
  2540. local name = minetest.env:get_node(pos).name
  2541. if name == "default:dirt" or name == "default:dirt_with_grass" then
  2542. if minetest.env:find_node_near(pos, 3, {"group:water"}) == nil then
  2543. return
  2544. end
  2545. pos.y = pos.y+1
  2546. local height = 0
  2547. while minetest.env:get_node(pos).name == "default:papyrus" and height < 4 do
  2548. height = height+1
  2549. pos.y = pos.y+1
  2550. end
  2551. if height < 4 then
  2552. if minetest.env:get_node(pos).name == "air" then
  2553. minetest.env:set_node(pos, {name="default:papyrus"})
  2554. end
  2555. end
  2556. end
  2557. end,
  2558. })
  2559.  
  2560. -- END
Advertisement
Add Comment
Please, Sign In to add comment