nodes.lua 38 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481
  1. -- mods/default/nodes.lua
  2. --[[ Index:
  3. Stone
  4. -----
  5. (1. Material 2. Cobble variant 3. Brick variant [4. Modified forms])
  6. default:stone
  7. default:cobble
  8. default:stonebrick
  9. default:mossycobble
  10. default:desert_stone
  11. default:desert_cobble
  12. default:desert_stonebrick
  13. default:sandstone
  14. default:sandstonebrick
  15. default:obsidian
  16. default:obsidianbrick
  17. Soft / Non-Stone
  18. ----------------
  19. (1. Material [2. Modified forms])
  20. default:dirt
  21. default:dirt_with_grass
  22. default:dirt_with_grass_footsteps
  23. default:dirt_with_snow
  24. default:sand
  25. default:desert_sand
  26. default:gravel
  27. default:clay
  28. default:snow
  29. default:snowblock
  30. default:ice
  31. Trees
  32. -----
  33. (1. Trunk 2. Fabricated trunk 3. Leaves 4. Sapling [5. Fruits])
  34. default:tree
  35. default:wood
  36. default:leaves
  37. default:sapling
  38. default:apple
  39. default:jungletree
  40. default:junglewood
  41. default:jungleleaves
  42. default:junglesapling
  43. default:pinetree
  44. default:pinewood
  45. default:pine_needles
  46. default:pine_sapling
  47. Ores
  48. ----
  49. (1. In stone 2. Block)
  50. default:stone_with_coal
  51. default:coalblock
  52. default:stone_with_iron
  53. default:steelblock
  54. default:stone_with_copper
  55. default:copperblock
  56. default:bronzeblock
  57. default:stone_with_gold
  58. default:goldblock
  59. default:stone_with_mese
  60. default:mese
  61. default:stone_with_diamond
  62. default:diamondblock
  63. Plantlife (non-cubic)
  64. ---------------------
  65. default:cactus
  66. default:papyrus
  67. default:dry_shrub
  68. default:junglegrass
  69. default:grass_1
  70. default:grass_2
  71. default:grass_3
  72. default:grass_4
  73. default:grass_5
  74. Liquids
  75. -------
  76. (1. Source 2. Flowing)
  77. default:water_source
  78. default:water_flowing
  79. default:lava_source
  80. default:lava_flowing
  81. Tools / "Advanced" crafting / Non-"natural"
  82. -------------------------------------------
  83. default:torch
  84. default:chest
  85. default:chest_locked
  86. default:bookshelf
  87. default:sign_wall
  88. default:ladder
  89. default:fence_wood
  90. default:glass
  91. default:obsidian_glass
  92. default:rail
  93. default:brick
  94. Misc
  95. ----
  96. default:cloud
  97. default:nyancat
  98. default:nyancat_rainbow
  99. --]]
  100. --
  101. -- Stone
  102. --
  103. minetest.register_node("default:stone", {
  104. description = "Stone",
  105. tiles = {"default_stone.png"},
  106. is_ground_content = true,
  107. groups = {cracky=3, stone=1},
  108. drop = 'default:cobble',
  109. legacy_mineral = true,
  110. sounds = default.node_sound_stone_defaults(),
  111. })
  112. minetest.register_node("default:cobble", {
  113. description = "Cobblestone",
  114. tiles = {"default_cobble.png"},
  115. is_ground_content = true,
  116. groups = {cracky=3, stone=2},
  117. sounds = default.node_sound_stone_defaults(),
  118. })
  119. minetest.register_node("default:stonebrick", {
  120. description = "Stone Brick",
  121. tiles = {"default_stone_brick.png"},
  122. groups = {cracky=2, stone=1},
  123. sounds = default.node_sound_stone_defaults(),
  124. })
  125. minetest.register_node("default:mossycobble", {
  126. description = "Mossy Cobblestone",
  127. tiles = {"default_mossycobble.png"},
  128. is_ground_content = true,
  129. groups = {cracky=3},
  130. sounds = default.node_sound_stone_defaults(),
  131. })
  132. minetest.register_node("default:desert_stone", {
  133. description = "Desert Stone",
  134. tiles = {"default_desert_stone.png"},
  135. is_ground_content = true,
  136. groups = {cracky=3, stone=1},
  137. drop = 'default:desert_cobble',
  138. legacy_mineral = true,
  139. sounds = default.node_sound_stone_defaults(),
  140. })
  141. minetest.register_node("default:desert_cobble", {
  142. description = "Desert Cobblestone",
  143. tiles = {"default_desert_cobble.png"},
  144. is_ground_content = true,
  145. groups = {cracky=3, stone=2},
  146. sounds = default.node_sound_stone_defaults(),
  147. })
  148. minetest.register_node("default:desert_stonebrick", {
  149. description = "Desert Stone Brick",
  150. tiles = {"default_desert_stone_brick.png"},
  151. groups = {cracky=2, stone=1},
  152. sounds = default.node_sound_stone_defaults(),
  153. })
  154. minetest.register_node("default:sandstone", {
  155. description = "Sandstone",
  156. tiles = {"default_sandstone.png"},
  157. is_ground_content = true,
  158. groups = {crumbly=2,cracky=3},
  159. sounds = default.node_sound_stone_defaults(),
  160. })
  161. minetest.register_node("default:sandstonebrick", {
  162. description = "Sandstone Brick",
  163. tiles = {"default_sandstone_brick.png"},
  164. is_ground_content = true,
  165. groups = {cracky=2},
  166. sounds = default.node_sound_stone_defaults(),
  167. })
  168. minetest.register_node("default:obsidian", {
  169. description = "Obsidian",
  170. tiles = {"default_obsidian.png"},
  171. is_ground_content = true,
  172. sounds = default.node_sound_stone_defaults(),
  173. groups = {cracky=1,level=2},
  174. })
  175. minetest.register_node("default:obsidianbrick", {
  176. description = "Obsidian Brick",
  177. tiles = {"default_obsidian_brick.png"},
  178. sounds = default.node_sound_stone_defaults(),
  179. groups = {cracky=1,level=2},
  180. })
  181. --
  182. -- Soft / Non-Stone
  183. --
  184. minetest.register_node("default:dirt", {
  185. description = "Dirt",
  186. tiles = {"default_dirt.png"},
  187. is_ground_content = true,
  188. groups = {crumbly=3,soil=1},
  189. sounds = default.node_sound_dirt_defaults(),
  190. })
  191. minetest.register_node("default:dirt_with_grass", {
  192. description = "Dirt with Grass",
  193. tiles = {"default_grass.png", "default_dirt.png", "default_dirt.png^default_grass_side.png"},
  194. is_ground_content = true,
  195. groups = {crumbly=3,soil=1},
  196. drop = 'default:dirt',
  197. sounds = default.node_sound_dirt_defaults({
  198. footstep = {name="default_grass_footstep", gain=0.25},
  199. }),
  200. })
  201. minetest.register_node("default:dirt_with_grass_footsteps", {
  202. description = "Dirt with Grass and Footsteps",
  203. tiles = {"default_grass_footsteps.png", "default_dirt.png", "default_dirt.png^default_grass_side.png"},
  204. is_ground_content = true,
  205. groups = {crumbly=3,soil=1,not_in_creative_inventory=1},
  206. drop = 'default:dirt',
  207. sounds = default.node_sound_dirt_defaults({
  208. footstep = {name="default_grass_footstep", gain=0.25},
  209. }),
  210. })
  211. minetest.register_node("default:dirt_with_snow", {
  212. description = "Dirt with Snow",
  213. tiles = {"default_snow.png", "default_dirt.png", "default_dirt.png^default_snow_side.png"},
  214. is_ground_content = true,
  215. groups = {crumbly=3,soil=1},
  216. drop = 'default:dirt',
  217. sounds = default.node_sound_dirt_defaults({
  218. footstep = {name="default_snow_footstep", gain=0.25},
  219. }),
  220. })
  221. minetest.register_node("default:sand", {
  222. description = "Sand",
  223. tiles = {"default_sand.png"},
  224. is_ground_content = true,
  225. groups = {crumbly=3, falling_node=1, sand=1},
  226. sounds = default.node_sound_sand_defaults(),
  227. })
  228. minetest.register_node("default:desert_sand", {
  229. description = "Desert Sand",
  230. tiles = {"default_desert_sand.png"},
  231. is_ground_content = true,
  232. groups = {crumbly=3, falling_node=1, sand=1},
  233. sounds = default.node_sound_sand_defaults(),
  234. })
  235. minetest.register_node("default:gravel", {
  236. description = "Gravel",
  237. tiles = {"default_gravel.png"},
  238. is_ground_content = true,
  239. groups = {crumbly=2, falling_node=1},
  240. sounds = default.node_sound_dirt_defaults({
  241. footstep = {name="default_gravel_footstep", gain=0.5},
  242. dug = {name="default_gravel_footstep", gain=1.0},
  243. }),
  244. })
  245. minetest.register_node("default:clay", {
  246. description = "Clay",
  247. tiles = {"default_clay.png"},
  248. is_ground_content = true,
  249. groups = {crumbly=3},
  250. drop = 'default:clay_lump 4',
  251. sounds = default.node_sound_dirt_defaults(),
  252. })
  253. minetest.register_node("default:snow", {
  254. description = "Snow",
  255. tiles = {"default_snow.png"},
  256. inventory_image = "default_snowball.png",
  257. wield_image = "default_snowball.png",
  258. is_ground_content = true,
  259. paramtype = "light",
  260. buildable_to = true,
  261. drawtype = "nodebox",
  262. node_box = {
  263. type = "fixed",
  264. fixed = {
  265. {-0.5, -0.5, -0.5, 0.5, -0.5+2/16, 0.5},
  266. },
  267. },
  268. groups = {crumbly=3,falling_node=1},
  269. sounds = default.node_sound_dirt_defaults({
  270. footstep = {name="default_snow_footstep", gain=0.25},
  271. dug = {name="default_snow_footstep", gain=0.75},
  272. }),
  273. on_construct = function(pos)
  274. pos.y = pos.y - 1
  275. if minetest.get_node(pos).name == "default:dirt_with_grass" then
  276. minetest.set_node(pos, {name="default:dirt_with_snow"})
  277. end
  278. end,
  279. })
  280. minetest.register_alias("snow", "default:snow")
  281. minetest.register_node("default:snowblock", {
  282. description = "Snow Block",
  283. tiles = {"default_snow.png"},
  284. is_ground_content = true,
  285. groups = {crumbly=3},
  286. sounds = default.node_sound_dirt_defaults({
  287. footstep = {name="default_snow_footstep", gain=0.25},
  288. dug = {name="default_snow_footstep", gain=0.75},
  289. }),
  290. })
  291. minetest.register_node("default:ice", {
  292. description = "Ice",
  293. tiles = {"default_ice.png"},
  294. is_ground_content = true,
  295. paramtype = "light",
  296. groups = {cracky=3},
  297. sounds = default.node_sound_glass_defaults(),
  298. })
  299. --
  300. -- Trees
  301. --
  302. minetest.register_node("default:tree", {
  303. description = "Tree",
  304. tiles = {"default_tree_top.png", "default_tree_top.png", "default_tree.png"},
  305. paramtype2 = "facedir",
  306. is_ground_content = false,
  307. groups = {tree=1,choppy=2,oddly_breakable_by_hand=1,flammable=2},
  308. sounds = default.node_sound_wood_defaults(),
  309. on_place = minetest.rotate_node
  310. })
  311. minetest.register_node("default:wood", {
  312. description = "Wooden Planks",
  313. tiles = {"default_wood.png"},
  314. groups = {choppy=2,oddly_breakable_by_hand=2,flammable=3,wood=1},
  315. sounds = default.node_sound_wood_defaults(),
  316. })
  317. minetest.register_node("default:sapling", {
  318. description = "Sapling",
  319. drawtype = "plantlike",
  320. visual_scale = 1.0,
  321. tiles = {"default_sapling.png"},
  322. inventory_image = "default_sapling.png",
  323. wield_image = "default_sapling.png",
  324. paramtype = "light",
  325. walkable = false,
  326. is_ground_content = true,
  327. selection_box = {
  328. type = "fixed",
  329. fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3}
  330. },
  331. groups = {snappy=2,dig_immediate=3,flammable=2,attached_node=1,sapling=1},
  332. sounds = default.node_sound_leaves_defaults(),
  333. })
  334. minetest.register_node("default:leaves", {
  335. description = "Leaves",
  336. drawtype = "allfaces_optional",
  337. waving = 1,
  338. visual_scale = 1.3,
  339. tiles = {"default_leaves.png"},
  340. paramtype = "light",
  341. is_ground_content = false,
  342. groups = {snappy=3, leafdecay=3, flammable=2, leaves=1},
  343. drop = {
  344. max_items = 1,
  345. items = {
  346. {
  347. -- player will get sapling with 1/20 chance
  348. items = {'default:sapling'},
  349. rarity = 20,
  350. },
  351. {
  352. -- player will get leaves only if he get no saplings,
  353. -- this is because max_items is 1
  354. items = {'default:leaves'},
  355. }
  356. }
  357. },
  358. sounds = default.node_sound_leaves_defaults(),
  359. after_place_node = default.after_place_leaves,
  360. })
  361. minetest.register_node("default:apple", {
  362. description = "Apple",
  363. drawtype = "plantlike",
  364. visual_scale = 1.0,
  365. tiles = {"default_apple.png"},
  366. inventory_image = "default_apple.png",
  367. paramtype = "light",
  368. sunlight_propagates = true,
  369. walkable = false,
  370. is_ground_content = true,
  371. selection_box = {
  372. type = "fixed",
  373. fixed = {-0.2, -0.5, -0.2, 0.2, 0, 0.2}
  374. },
  375. groups = {fleshy=3,dig_immediate=3,flammable=2,leafdecay=3,leafdecay_drop=1},
  376. on_use = minetest.item_eat(1),
  377. sounds = default.node_sound_leaves_defaults(),
  378. after_place_node = function(pos, placer, itemstack)
  379. if placer:is_player() then
  380. minetest.set_node(pos, {name="default:apple", param2=1})
  381. end
  382. end,
  383. })
  384. minetest.register_node("default:jungletree", {
  385. description = "Jungle Tree",
  386. tiles = {"default_jungletree_top.png", "default_jungletree_top.png", "default_jungletree.png"},
  387. paramtype2 = "facedir",
  388. is_ground_content = false,
  389. groups = {tree=1,choppy=2,oddly_breakable_by_hand=1,flammable=2},
  390. sounds = default.node_sound_wood_defaults(),
  391. on_place = minetest.rotate_node
  392. })
  393. minetest.register_node("default:junglewood", {
  394. description = "Junglewood Planks",
  395. tiles = {"default_junglewood.png"},
  396. groups = {choppy=2,oddly_breakable_by_hand=2,flammable=3,wood=1},
  397. sounds = default.node_sound_wood_defaults(),
  398. })
  399. minetest.register_node("default:jungleleaves", {
  400. description = "Jungle Leaves",
  401. drawtype = "allfaces_optional",
  402. waving = 1,
  403. visual_scale = 1.3,
  404. tiles = {"default_jungleleaves.png"},
  405. paramtype = "light",
  406. is_ground_content = false,
  407. groups = {snappy=3, leafdecay=3, flammable=2, leaves=1},
  408. drop = {
  409. max_items = 1,
  410. items = {
  411. {
  412. -- player will get sapling with 1/20 chance
  413. items = {'default:junglesapling'},
  414. rarity = 20,
  415. },
  416. {
  417. -- player will get leaves only if he get no saplings,
  418. -- this is because max_items is 1
  419. items = {'default:jungleleaves'},
  420. }
  421. }
  422. },
  423. sounds = default.node_sound_leaves_defaults(),
  424. after_place_node = default.after_place_leaves,
  425. })
  426. minetest.register_node("default:junglesapling", {
  427. description = "Jungle Sapling",
  428. drawtype = "plantlike",
  429. visual_scale = 1.0,
  430. tiles = {"default_junglesapling.png"},
  431. inventory_image = "default_junglesapling.png",
  432. wield_image = "default_junglesapling.png",
  433. paramtype = "light",
  434. walkable = false,
  435. selection_box = {
  436. type = "fixed",
  437. fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3}
  438. },
  439. groups = {snappy=2,dig_immediate=3,flammable=2,attached_node=1,sapling=1},
  440. sounds = default.node_sound_leaves_defaults(),
  441. })
  442. minetest.register_node("default:pinetree", {
  443. description = "Pine Tree",
  444. tiles = {"default_pinetree_top.png", "default_pinetree_top.png", "default_pinetree.png"},
  445. paramtype2 = "facedir",
  446. is_ground_content = false,
  447. groups = {tree=1,choppy=2,oddly_breakable_by_hand=1,flammable=2},
  448. sounds = default.node_sound_wood_defaults(),
  449. on_place = minetest.rotate_node
  450. })
  451. minetest.register_node("default:pinewood", {
  452. description = "Pinewood Planks",
  453. tiles = {"default_pinewood.png"},
  454. groups = {choppy=2,oddly_breakable_by_hand=2,flammable=3,wood=1},
  455. sounds = default.node_sound_wood_defaults(),
  456. })
  457. minetest.register_node("default:pine_needles",{
  458. description = "Pine Needles",
  459. drawtype = "allfaces_optional",
  460. visual_scale = 1.3,
  461. tiles = {"default_pine_needles.png"},
  462. waving = 1,
  463. paramtype = "light",
  464. is_ground_content = false,
  465. groups = {snappy=3, leafdecay=3, flammable=2, leaves=1},
  466. drop = {
  467. max_items = 1,
  468. items = {
  469. {
  470. -- player will get sapling with 1/20 chance
  471. items = {"default:pine_sapling"},
  472. rarity = 20,
  473. },
  474. {
  475. -- player will get leaves only if he get no saplings,
  476. -- this is because max_items is 1
  477. items = {"default:pine_needles"},
  478. }
  479. }
  480. },
  481. sounds = default.node_sound_leaves_defaults(),
  482. after_place_node = default.after_place_leaves,
  483. })
  484. minetest.register_node("default:pine_sapling", {
  485. description = "Pine Sapling",
  486. drawtype = "plantlike",
  487. visual_scale = 1.0,
  488. tiles = {"default_pine_sapling.png"},
  489. inventory_image = "default_pine_sapling.png",
  490. wield_image = "default_pine_sapling.png",
  491. paramtype = "light",
  492. walkable = false,
  493. is_ground_content = true,
  494. selection_box = {
  495. type = "fixed",
  496. fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3}
  497. },
  498. groups = {snappy=2,dig_immediate=3,flammable=2,attached_node=1,sapling=1},
  499. sounds = default.node_sound_leaves_defaults(),
  500. })
  501. --
  502. -- Ores
  503. --
  504. minetest.register_node("default:stone_with_coal", {
  505. description = "Coal Ore",
  506. tiles = {"default_stone.png^default_mineral_coal.png"},
  507. is_ground_content = true,
  508. groups = {cracky=3},
  509. drop = 'default:coal_lump',
  510. sounds = default.node_sound_stone_defaults(),
  511. })
  512. minetest.register_node("default:coalblock", {
  513. description = "Coal Block",
  514. tiles = {"default_coal_block.png"},
  515. is_ground_content = true,
  516. groups = {cracky=3},
  517. sounds = default.node_sound_stone_defaults(),
  518. })
  519. minetest.register_node("default:stone_with_iron", {
  520. description = "Iron Ore",
  521. tiles = {"default_stone.png^default_mineral_iron.png"},
  522. is_ground_content = true,
  523. groups = {cracky=2},
  524. drop = 'default:iron_lump',
  525. sounds = default.node_sound_stone_defaults(),
  526. })
  527. minetest.register_node("default:steelblock", {
  528. description = "Steel Block",
  529. tiles = {"default_steel_block.png"},
  530. is_ground_content = true,
  531. groups = {cracky=1,level=2},
  532. sounds = default.node_sound_stone_defaults(),
  533. })
  534. minetest.register_node("default:stone_with_copper", {
  535. description = "Copper Ore",
  536. tiles = {"default_stone.png^default_mineral_copper.png"},
  537. is_ground_content = true,
  538. groups = {cracky=2},
  539. drop = 'default:copper_lump',
  540. sounds = default.node_sound_stone_defaults(),
  541. })
  542. minetest.register_node("default:copperblock", {
  543. description = "Copper Block",
  544. tiles = {"default_copper_block.png"},
  545. is_ground_content = true,
  546. groups = {cracky=1,level=2},
  547. sounds = default.node_sound_stone_defaults(),
  548. })
  549. minetest.register_node("default:bronzeblock", {
  550. description = "Bronze Block",
  551. tiles = {"default_bronze_block.png"},
  552. is_ground_content = true,
  553. groups = {cracky=1,level=2},
  554. sounds = default.node_sound_stone_defaults(),
  555. })
  556. minetest.register_node("default:stone_with_mese", {
  557. description = "Mese Ore",
  558. tiles = {"default_stone.png^default_mineral_mese.png"},
  559. is_ground_content = true,
  560. groups = {cracky=1},
  561. drop = "default:mese_crystal",
  562. sounds = default.node_sound_stone_defaults(),
  563. })
  564. minetest.register_node("default:mese", {
  565. description = "Mese Block",
  566. tiles = {"default_mese_block.png"},
  567. is_ground_content = true,
  568. groups = {cracky=1,level=2},
  569. sounds = default.node_sound_stone_defaults(),
  570. })
  571. minetest.register_alias("default:mese_block", "default:mese")
  572. minetest.register_node("default:stone_with_gold", {
  573. description = "Gold Ore",
  574. tiles = {"default_stone.png^default_mineral_gold.png"},
  575. is_ground_content = true,
  576. groups = {cracky=2},
  577. drop = "default:gold_lump",
  578. sounds = default.node_sound_stone_defaults(),
  579. })
  580. minetest.register_node("default:goldblock", {
  581. description = "Gold Block",
  582. tiles = {"default_gold_block.png"},
  583. is_ground_content = true,
  584. groups = {cracky=1},
  585. sounds = default.node_sound_stone_defaults(),
  586. })
  587. minetest.register_node("default:stone_with_diamond", {
  588. description = "Diamond Ore",
  589. tiles = {"default_stone.png^default_mineral_diamond.png"},
  590. is_ground_content = true,
  591. groups = {cracky=1},
  592. drop = "default:diamond",
  593. sounds = default.node_sound_stone_defaults(),
  594. })
  595. minetest.register_node("default:diamondblock", {
  596. description = "Diamond Block",
  597. tiles = {"default_diamond_block.png"},
  598. is_ground_content = true,
  599. groups = {cracky=1,level=3},
  600. sounds = default.node_sound_stone_defaults(),
  601. })
  602. --
  603. -- Plantlife (non-cubic)
  604. --
  605. minetest.register_node("default:cactus", {
  606. description = "Cactus",
  607. tiles = {"default_cactus_top.png", "default_cactus_top.png", "default_cactus_side.png"},
  608. paramtype2 = "facedir",
  609. is_ground_content = true,
  610. groups = {snappy=1,choppy=3,flammable=2},
  611. sounds = default.node_sound_wood_defaults(),
  612. on_place = minetest.rotate_node,
  613. after_dig_node = function(pos, node, metadata, digger)
  614. default.dig_up(pos, node, digger)
  615. end,
  616. })
  617. minetest.register_node("default:papyrus", {
  618. description = "Papyrus",
  619. drawtype = "plantlike",
  620. tiles = {"default_papyrus.png"},
  621. inventory_image = "default_papyrus.png",
  622. wield_image = "default_papyrus.png",
  623. paramtype = "light",
  624. walkable = false,
  625. is_ground_content = true,
  626. selection_box = {
  627. type = "fixed",
  628. fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3}
  629. },
  630. groups = {snappy=3,flammable=2},
  631. sounds = default.node_sound_leaves_defaults(),
  632. after_dig_node = function(pos, node, metadata, digger)
  633. default.dig_up(pos, node, digger)
  634. end,
  635. })
  636. minetest.register_node("default:dry_shrub", {
  637. description = "Dry Shrub",
  638. drawtype = "plantlike",
  639. waving = 1,
  640. visual_scale = 1.0,
  641. tiles = {"default_dry_shrub.png"},
  642. inventory_image = "default_dry_shrub.png",
  643. wield_image = "default_dry_shrub.png",
  644. paramtype = "light",
  645. walkable = false,
  646. is_ground_content = true,
  647. buildable_to = true,
  648. groups = {snappy=3,flammable=3,attached_node=1},
  649. sounds = default.node_sound_leaves_defaults(),
  650. selection_box = {
  651. type = "fixed",
  652. fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},
  653. },
  654. })
  655. minetest.register_node("default:junglegrass", {
  656. description = "Jungle Grass",
  657. drawtype = "plantlike",
  658. waving = 1,
  659. visual_scale = 1.3,
  660. tiles = {"default_junglegrass.png"},
  661. inventory_image = "default_junglegrass.png",
  662. wield_image = "default_junglegrass.png",
  663. paramtype = "light",
  664. walkable = false,
  665. buildable_to = true,
  666. is_ground_content = true,
  667. groups = {snappy=3,flammable=2,flora=1,attached_node=1},
  668. sounds = default.node_sound_leaves_defaults(),
  669. selection_box = {
  670. type = "fixed",
  671. fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},
  672. },
  673. })
  674. minetest.register_node("default:grass_1", {
  675. description = "Grass",
  676. drawtype = "plantlike",
  677. waving = 1,
  678. tiles = {"default_grass_1.png"},
  679. -- Use texture of a taller grass stage in inventory
  680. inventory_image = "default_grass_3.png",
  681. wield_image = "default_grass_3.png",
  682. paramtype = "light",
  683. walkable = false,
  684. is_ground_content = true,
  685. buildable_to = true,
  686. groups = {snappy=3,flammable=3,flora=1,attached_node=1},
  687. sounds = default.node_sound_leaves_defaults(),
  688. selection_box = {
  689. type = "fixed",
  690. fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},
  691. },
  692. on_place = function(itemstack, placer, pointed_thing)
  693. -- place a random grass node
  694. local stack = ItemStack("default:grass_"..math.random(1,5))
  695. local ret = minetest.item_place(stack, placer, pointed_thing)
  696. return ItemStack("default:grass_1 "..itemstack:get_count()-(1-ret:get_count()))
  697. end,
  698. })
  699. for i=2,5 do
  700. minetest.register_node("default:grass_"..i, {
  701. description = "Grass",
  702. drawtype = "plantlike",
  703. waving = 1,
  704. tiles = {"default_grass_"..i..".png"},
  705. inventory_image = "default_grass_"..i..".png",
  706. wield_image = "default_grass_"..i..".png",
  707. paramtype = "light",
  708. walkable = false,
  709. buildable_to = true,
  710. is_ground_content = true,
  711. drop = "default:grass_1",
  712. groups = {snappy=3,flammable=3,flora=1,attached_node=1,not_in_creative_inventory=1},
  713. sounds = default.node_sound_leaves_defaults(),
  714. selection_box = {
  715. type = "fixed",
  716. fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},
  717. },
  718. })
  719. end
  720. --
  721. -- Liquids
  722. --
  723. minetest.register_node("default:water_source", {
  724. description = "Water Source",
  725. inventory_image = minetest.inventorycube("default_water.png"),
  726. drawtype = "liquid",
  727. tiles = {
  728. {
  729. name = "default_water_source_animated.png",
  730. animation = {
  731. type = "vertical_frames",
  732. aspect_w = 16,
  733. aspect_h = 16,
  734. length = 2.0,
  735. },
  736. },
  737. },
  738. special_tiles = {
  739. -- New-style water source material (mostly unused)
  740. {
  741. name = "default_water_source_animated.png",
  742. animation = {
  743. type = "vertical_frames",
  744. aspect_w = 16,
  745. aspect_h = 16,
  746. length = 2.0,
  747. },
  748. backface_culling = false,
  749. },
  750. },
  751. alpha = 160,
  752. paramtype = "light",
  753. walkable = false,
  754. pointable = false,
  755. diggable = false,
  756. buildable_to = true,
  757. drop = "",
  758. drowning = 1,
  759. liquidtype = "source",
  760. liquid_alternative_flowing = "default:water_flowing",
  761. liquid_alternative_source = "default:water_source",
  762. liquid_viscosity = 1,
  763. post_effect_color = {a=64, r=100, g=100, b=200},
  764. groups = {water=3, liquid=3, puts_out_fire=1},
  765. })
  766. minetest.register_node("default:water_flowing", {
  767. description = "Flowing Water",
  768. inventory_image = minetest.inventorycube("default_water.png"),
  769. drawtype = "flowingliquid",
  770. tiles = {"default_water.png"},
  771. special_tiles = {
  772. {
  773. name = "default_water_flowing_animated.png",
  774. backface_culling = false,
  775. animation = {
  776. type = "vertical_frames",
  777. aspect_w = 16,
  778. aspect_h = 16,
  779. length = 0.8,
  780. },
  781. },
  782. {
  783. name = "default_water_flowing_animated.png",
  784. backface_culling = true,
  785. animation = {
  786. type = "vertical_frames",
  787. aspect_w = 16,
  788. aspect_h = 16,
  789. length = 0.8,
  790. },
  791. },
  792. },
  793. alpha = 160,
  794. paramtype = "light",
  795. paramtype2 = "flowingliquid",
  796. walkable = false,
  797. pointable = false,
  798. diggable = false,
  799. buildable_to = true,
  800. drop = "",
  801. drowning = 1,
  802. liquidtype = "flowing",
  803. liquid_alternative_flowing = "default:water_flowing",
  804. liquid_alternative_source = "default:water_source",
  805. liquid_viscosity = 1,
  806. post_effect_color = {a=64, r=100, g=100, b=200},
  807. groups = {water=3, liquid=3, puts_out_fire=1, not_in_creative_inventory=1},
  808. })
  809. minetest.register_node("default:lava_source", {
  810. description = "Lava Source",
  811. inventory_image = minetest.inventorycube("default_lava.png"),
  812. drawtype = "liquid",
  813. tiles = {
  814. {
  815. name = "default_lava_source_animated.png",
  816. animation = {
  817. type = "vertical_frames",
  818. aspect_w = 16,
  819. aspect_h = 16,
  820. length = 3.0,
  821. },
  822. },
  823. },
  824. special_tiles = {
  825. -- New-style lava source material (mostly unused)
  826. {
  827. name = "default_lava_source_animated.png",
  828. animation = {
  829. type = "vertical_frames",
  830. aspect_w = 16,
  831. aspect_h = 16,
  832. length = 3.0,
  833. },
  834. backface_culling = false,
  835. },
  836. },
  837. paramtype = "light",
  838. light_source = default.LIGHT_MAX - 1,
  839. walkable = false,
  840. pointable = false,
  841. diggable = false,
  842. buildable_to = true,
  843. drop = "",
  844. drowning = 1,
  845. liquidtype = "source",
  846. liquid_alternative_flowing = "default:lava_flowing",
  847. liquid_alternative_source = "default:lava_source",
  848. liquid_viscosity = 7,
  849. liquid_renewable = false,
  850. damage_per_second = 4 * 2,
  851. post_effect_color = {a=192, r=255, g=64, b=0},
  852. groups = {lava=3, liquid=2, hot=3, igniter=1},
  853. })
  854. minetest.register_node("default:lava_flowing", {
  855. description = "Flowing Lava",
  856. inventory_image = minetest.inventorycube("default_lava.png"),
  857. drawtype = "flowingliquid",
  858. tiles = {"default_lava.png"},
  859. special_tiles = {
  860. {
  861. name = "default_lava_flowing_animated.png",
  862. backface_culling = false,
  863. animation = {
  864. type = "vertical_frames",
  865. aspect_w = 16,
  866. aspect_h = 16,
  867. length = 3.3,
  868. },
  869. },
  870. {
  871. name = "default_lava_flowing_animated.png",
  872. backface_culling = true,
  873. animation = {
  874. type = "vertical_frames",
  875. aspect_w = 16,
  876. aspect_h = 16,
  877. length = 3.3,
  878. },
  879. },
  880. },
  881. paramtype = "light",
  882. paramtype2 = "flowingliquid",
  883. light_source = default.LIGHT_MAX - 1,
  884. walkable = false,
  885. pointable = false,
  886. diggable = false,
  887. buildable_to = true,
  888. drop = "",
  889. drowning = 1,
  890. liquidtype = "flowing",
  891. liquid_alternative_flowing = "default:lava_flowing",
  892. liquid_alternative_source = "default:lava_source",
  893. liquid_viscosity = 7,
  894. liquid_renewable = false,
  895. damage_per_second = 4 * 2,
  896. post_effect_color = {a=192, r=255, g=64, b=0},
  897. groups = {lava=3, liquid=2, hot=3, igniter=1, not_in_creative_inventory=1},
  898. })
  899. --
  900. -- Tools / "Advanced" crafting / Non-"natural"
  901. --
  902. minetest.register_node("default:torch", {
  903. description = "Torch",
  904. drawtype = "torchlike",
  905. tiles = {
  906. {
  907. name = "default_torch_on_floor_animated.png",
  908. animation = {
  909. type = "vertical_frames",
  910. aspect_w = 16,
  911. aspect_h = 16,
  912. length = 3.0
  913. },
  914. },
  915. {
  916. name="default_torch_on_ceiling_animated.png",
  917. animation = {
  918. type = "vertical_frames",
  919. aspect_w = 16,
  920. aspect_h = 16,
  921. length = 3.0
  922. },
  923. },
  924. {
  925. name="default_torch_animated.png",
  926. animation = {
  927. type = "vertical_frames",
  928. aspect_w = 16,
  929. aspect_h = 16,
  930. length = 3.0
  931. },
  932. },
  933. },
  934. inventory_image = "default_torch_on_floor.png",
  935. wield_image = "default_torch_on_floor.png",
  936. paramtype = "light",
  937. paramtype2 = "wallmounted",
  938. sunlight_propagates = true,
  939. is_ground_content = false,
  940. walkable = false,
  941. light_source = default.LIGHT_MAX - 1,
  942. selection_box = {
  943. type = "wallmounted",
  944. wall_top = {-0.1, 0.5-0.6, -0.1, 0.1, 0.5, 0.1},
  945. wall_bottom = {-0.1, -0.5, -0.1, 0.1, -0.5+0.6, 0.1},
  946. wall_side = {-0.5, -0.3, -0.1, -0.5+0.3, 0.3, 0.1},
  947. },
  948. groups = {choppy=2,dig_immediate=3,flammable=1,attached_node=1},
  949. legacy_wallmounted = true,
  950. sounds = default.node_sound_defaults(),
  951. })
  952. local chest_formspec =
  953. "size[8,9]"..
  954. default.gui_bg..
  955. default.gui_bg_img..
  956. default.gui_slots..
  957. "list[current_name;main;0,0.3;8,4;]"..
  958. "list[current_player;main;0,4.85;8,1;]"..
  959. "list[current_player;main;0,6.08;8,3;8]"..
  960. default.get_hotbar_bg(0,4.85)
  961. local function get_locked_chest_formspec(pos)
  962. local spos = pos.x .. "," .. pos.y .. "," ..pos.z
  963. local formspec =
  964. "size[8,9]"..
  965. default.gui_bg..
  966. default.gui_bg_img..
  967. default.gui_slots..
  968. "list[nodemeta:".. spos .. ";main;0,0.3;8,4;]"..
  969. "list[current_player;main;0,4.85;8,1;]"..
  970. "list[current_player;main;0,6.08;8,3;8]"..
  971. default.get_hotbar_bg(0,4.85)
  972. return formspec
  973. end
  974. local function has_locked_chest_privilege(meta, player)
  975. if player:get_player_name() ~= meta:get_string("owner") then
  976. return false
  977. end
  978. return true
  979. end
  980. minetest.register_node("default:chest", {
  981. description = "Chest",
  982. tiles = {"default_chest_top.png", "default_chest_top.png", "default_chest_side.png",
  983. "default_chest_side.png", "default_chest_side.png", "default_chest_front.png"},
  984. paramtype2 = "facedir",
  985. groups = {choppy=2,oddly_breakable_by_hand=2},
  986. legacy_facedir_simple = true,
  987. is_ground_content = false,
  988. sounds = default.node_sound_wood_defaults(),
  989. on_construct = function(pos)
  990. local meta = minetest.get_meta(pos)
  991. meta:set_string("formspec", chest_formspec)
  992. meta:set_string("infotext", "Chest")
  993. local inv = meta:get_inventory()
  994. inv:set_size("main", 8*4)
  995. end,
  996. can_dig = function(pos,player)
  997. local meta = minetest.get_meta(pos);
  998. local inv = meta:get_inventory()
  999. return inv:is_empty("main")
  1000. end,
  1001. on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
  1002. minetest.log("action", player:get_player_name()..
  1003. " moves stuff in chest at "..minetest.pos_to_string(pos))
  1004. end,
  1005. on_metadata_inventory_put = function(pos, listname, index, stack, player)
  1006. minetest.log("action", player:get_player_name()..
  1007. " moves stuff to chest at "..minetest.pos_to_string(pos))
  1008. end,
  1009. on_metadata_inventory_take = function(pos, listname, index, stack, player)
  1010. minetest.log("action", player:get_player_name()..
  1011. " takes stuff from chest at "..minetest.pos_to_string(pos))
  1012. end,
  1013. })
  1014. minetest.register_node("default:chest_locked", {
  1015. description = "Locked Chest",
  1016. tiles = {"default_chest_top.png", "default_chest_top.png", "default_chest_side.png",
  1017. "default_chest_side.png", "default_chest_side.png", "default_chest_lock.png"},
  1018. paramtype2 = "facedir",
  1019. groups = {choppy=2,oddly_breakable_by_hand=2},
  1020. legacy_facedir_simple = true,
  1021. is_ground_content = false,
  1022. sounds = default.node_sound_wood_defaults(),
  1023. after_place_node = function(pos, placer)
  1024. local meta = minetest.get_meta(pos)
  1025. meta:set_string("owner", placer:get_player_name() or "")
  1026. meta:set_string("infotext", "Locked Chest (owned by "..
  1027. meta:get_string("owner")..")")
  1028. end,
  1029. on_construct = function(pos)
  1030. local meta = minetest.get_meta(pos)
  1031. meta:set_string("infotext", "Locked Chest")
  1032. meta:set_string("owner", "")
  1033. local inv = meta:get_inventory()
  1034. inv:set_size("main", 8*4)
  1035. end,
  1036. can_dig = function(pos,player)
  1037. local meta = minetest.get_meta(pos);
  1038. local inv = meta:get_inventory()
  1039. return inv:is_empty("main") and has_locked_chest_privilege(meta, player)
  1040. end,
  1041. allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
  1042. local meta = minetest.get_meta(pos)
  1043. if not has_locked_chest_privilege(meta, player) then
  1044. return 0
  1045. end
  1046. return count
  1047. end,
  1048. allow_metadata_inventory_put = function(pos, listname, index, stack, player)
  1049. local meta = minetest.get_meta(pos)
  1050. if not has_locked_chest_privilege(meta, player) then
  1051. return 0
  1052. end
  1053. return stack:get_count()
  1054. end,
  1055. allow_metadata_inventory_take = function(pos, listname, index, stack, player)
  1056. local meta = minetest.get_meta(pos)
  1057. if not has_locked_chest_privilege(meta, player) then
  1058. return 0
  1059. end
  1060. return stack:get_count()
  1061. end,
  1062. on_metadata_inventory_put = function(pos, listname, index, stack, player)
  1063. minetest.log("action", player:get_player_name()..
  1064. " moves stuff to locked chest at "..minetest.pos_to_string(pos))
  1065. end,
  1066. on_metadata_inventory_take = function(pos, listname, index, stack, player)
  1067. minetest.log("action", player:get_player_name()..
  1068. " takes stuff from locked chest at "..minetest.pos_to_string(pos))
  1069. end,
  1070. on_rightclick = function(pos, node, clicker)
  1071. local meta = minetest.get_meta(pos)
  1072. if has_locked_chest_privilege(meta, clicker) then
  1073. minetest.show_formspec(
  1074. clicker:get_player_name(),
  1075. "default:chest_locked",
  1076. get_locked_chest_formspec(pos)
  1077. )
  1078. end
  1079. end,
  1080. })
  1081. local bookshelf_formspec =
  1082. "size[8,7;]"..
  1083. default.gui_bg..
  1084. default.gui_bg_img..
  1085. default.gui_slots..
  1086. "list[context;books;0,0.3;8,2;]"..
  1087. "list[current_player;main;0,2.85;8,1;]"..
  1088. "list[current_player;main;0,4.08;8,3;8]"..
  1089. default.get_hotbar_bg(0,2.85)
  1090. minetest.register_node("default:bookshelf", {
  1091. description = "Bookshelf",
  1092. tiles = {"default_wood.png", "default_wood.png", "default_bookshelf.png"},
  1093. is_ground_content = false,
  1094. groups = {choppy=3,oddly_breakable_by_hand=2,flammable=3},
  1095. sounds = default.node_sound_wood_defaults(),
  1096. on_construct = function(pos)
  1097. local meta = minetest.get_meta(pos)
  1098. meta:set_string("formspec", bookshelf_formspec)
  1099. local inv = meta:get_inventory()
  1100. inv:set_size("books", 8*2)
  1101. end,
  1102. can_dig = function(pos,player)
  1103. local meta = minetest.get_meta(pos);
  1104. local inv = meta:get_inventory()
  1105. return inv:is_empty("books")
  1106. end,
  1107. allow_metadata_inventory_put = function(pos, listname, index, stack, player)
  1108. local meta = minetest.get_meta(pos)
  1109. local inv = meta:get_inventory()
  1110. local to_stack = inv:get_stack(listname, index)
  1111. if listname == "books" then
  1112. if minetest.get_item_group(stack:get_name(), "book") ~= 0
  1113. and to_stack:is_empty() then
  1114. return 1
  1115. else
  1116. return 0
  1117. end
  1118. end
  1119. end,
  1120. allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
  1121. local meta = minetest.get_meta(pos)
  1122. local inv = meta:get_inventory()
  1123. local stack = inv:get_stack(from_list, from_index)
  1124. local to_stack = inv:get_stack(to_list, to_index)
  1125. if to_list == "books" then
  1126. if stack:get_name() == "default:book" and to_stack:is_empty() then
  1127. return 1
  1128. else
  1129. return 0
  1130. end
  1131. end
  1132. end,
  1133. on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
  1134. minetest.log("action", player:get_player_name()..
  1135. " moves stuff in bookshelf at "..minetest.pos_to_string(pos))
  1136. end,
  1137. on_metadata_inventory_put = function(pos, listname, index, stack, player)
  1138. minetest.log("action", player:get_player_name()..
  1139. " moves stuff to bookshelf at "..minetest.pos_to_string(pos))
  1140. end,
  1141. on_metadata_inventory_take = function(pos, listname, index, stack, player)
  1142. minetest.log("action", player:get_player_name()..
  1143. " takes stuff from bookshelf at "..minetest.pos_to_string(pos))
  1144. end,
  1145. })
  1146. minetest.register_node("default:sign_wall", {
  1147. description = "Sign",
  1148. drawtype = "nodebox",
  1149. tiles = {"default_sign.png"},
  1150. inventory_image = "default_sign_wall.png",
  1151. wield_image = "default_sign_wall.png",
  1152. paramtype = "light",
  1153. paramtype2 = "wallmounted",
  1154. sunlight_propagates = true,
  1155. is_ground_content = false,
  1156. walkable = false,
  1157. node_box = {
  1158. type = "wallmounted",
  1159. wall_top = {-0.4375, 0.4375, -0.3125, 0.4375, 0.5, 0.3125},
  1160. wall_bottom = {-0.4375, -0.5, -0.3125, 0.4375, -0.4375, 0.3125},
  1161. wall_side = {-0.5, -0.3125, -0.4375, -0.4375, 0.3125, 0.4375},
  1162. },
  1163. groups = {choppy=2,dig_immediate=2,attached_node=1},
  1164. legacy_wallmounted = true,
  1165. sounds = default.node_sound_defaults(),
  1166. on_construct = function(pos)
  1167. --local n = minetest.get_node(pos)
  1168. local meta = minetest.get_meta(pos)
  1169. meta:set_string("formspec", "field[text;;${text}]")
  1170. meta:set_string("infotext", "\"\"")
  1171. end,
  1172. on_receive_fields = function(pos, formname, fields, sender)
  1173. --print("Sign at "..minetest.pos_to_string(pos).." got "..dump(fields))
  1174. if minetest.is_protected(pos, sender:get_player_name()) then
  1175. minetest.record_protection_violation(pos, sender:get_player_name())
  1176. return
  1177. end
  1178. local meta = minetest.get_meta(pos)
  1179. if not fields.text then return end
  1180. minetest.log("action", (sender:get_player_name() or "").." wrote \""..fields.text..
  1181. "\" to sign at "..minetest.pos_to_string(pos))
  1182. meta:set_string("text", fields.text)
  1183. meta:set_string("infotext", '"'..fields.text..'"')
  1184. end,
  1185. })
  1186. minetest.register_node("default:ladder", {
  1187. description = "Ladder",
  1188. drawtype = "signlike",
  1189. tiles = {"default_ladder.png"},
  1190. inventory_image = "default_ladder.png",
  1191. wield_image = "default_ladder.png",
  1192. paramtype = "light",
  1193. paramtype2 = "wallmounted",
  1194. walkable = false,
  1195. climbable = true,
  1196. is_ground_content = false,
  1197. selection_box = {
  1198. type = "wallmounted",
  1199. --wall_top = = <default>
  1200. --wall_bottom = = <default>
  1201. --wall_side = = <default>
  1202. },
  1203. groups = {choppy=2,oddly_breakable_by_hand=3,flammable=2},
  1204. legacy_wallmounted = true,
  1205. sounds = default.node_sound_wood_defaults(),
  1206. })
  1207. local fence_texture = "default_fence_overlay.png^default_wood.png^default_fence_overlay.png^[makealpha:255,126,126"
  1208. minetest.register_node("default:fence_wood", {
  1209. description = "Wooden Fence",
  1210. drawtype = "fencelike",
  1211. tiles = {"default_wood.png"},
  1212. inventory_image = fence_texture,
  1213. wield_image = fence_texture,
  1214. paramtype = "light",
  1215. is_ground_content = false,
  1216. selection_box = {
  1217. type = "fixed",
  1218. fixed = {-1/7, -1/2, -1/7, 1/7, 1/2, 1/7},
  1219. },
  1220. groups = {choppy=2,oddly_breakable_by_hand=2,flammable=2},
  1221. sounds = default.node_sound_wood_defaults(),
  1222. })
  1223. minetest.register_node("default:glass", {
  1224. description = "Glass",
  1225. drawtype = "glasslike_framed_optional",
  1226. tiles = {"default_glass.png", "default_glass_detail.png"},
  1227. inventory_image = minetest.inventorycube("default_glass.png"),
  1228. paramtype = "light",
  1229. sunlight_propagates = true,
  1230. is_ground_content = false,
  1231. groups = {cracky=3,oddly_breakable_by_hand=3},
  1232. sounds = default.node_sound_glass_defaults(),
  1233. })
  1234. minetest.register_node("default:obsidian_glass", {
  1235. description = "Obsidian Glass",
  1236. drawtype = "glasslike",
  1237. tiles = {"default_obsidian_glass.png"},
  1238. paramtype = "light",
  1239. is_ground_content = false,
  1240. sunlight_propagates = true,
  1241. sounds = default.node_sound_glass_defaults(),
  1242. groups = {cracky=3,oddly_breakable_by_hand=3},
  1243. })
  1244. minetest.register_node("default:rail", {
  1245. description = "Rail",
  1246. drawtype = "raillike",
  1247. tiles = {"default_rail.png", "default_rail_curved.png", "default_rail_t_junction.png", "default_rail_crossing.png"},
  1248. inventory_image = "default_rail.png",
  1249. wield_image = "default_rail.png",
  1250. paramtype = "light",
  1251. walkable = false,
  1252. is_ground_content = false,
  1253. selection_box = {
  1254. type = "fixed",
  1255. -- but how to specify the dimensions for curved and sideways rails?
  1256. fixed = {-1/2, -1/2, -1/2, 1/2, -1/2+1/16, 1/2},
  1257. },
  1258. groups = {bendy=2,dig_immediate=2,attached_node=1},
  1259. })
  1260. minetest.register_node("default:brick", {
  1261. description = "Brick Block",
  1262. tiles = {"default_brick.png"},
  1263. is_ground_content = false,
  1264. groups = {cracky=3},
  1265. sounds = default.node_sound_stone_defaults(),
  1266. })
  1267. --
  1268. -- Misc
  1269. --
  1270. minetest.register_node("default:cloud", {
  1271. description = "Cloud",
  1272. tiles = {"default_cloud.png"},
  1273. sounds = default.node_sound_defaults(),
  1274. groups = {not_in_creative_inventory=1},
  1275. })
  1276. minetest.register_node("default:nyancat", {
  1277. description = "Nyan Cat",
  1278. tiles = {"default_nc_side.png", "default_nc_side.png", "default_nc_side.png",
  1279. "default_nc_side.png", "default_nc_back.png", "default_nc_front.png"},
  1280. paramtype2 = "facedir",
  1281. groups = {cracky=2},
  1282. is_ground_content = false,
  1283. legacy_facedir_simple = true,
  1284. sounds = default.node_sound_defaults(),
  1285. })
  1286. minetest.register_node("default:nyancat_rainbow", {
  1287. description = "Nyan Cat Rainbow",
  1288. tiles = {
  1289. "default_nc_rb.png^[transformR90", "default_nc_rb.png^[transformR90",
  1290. "default_nc_rb.png", "default_nc_rb.png"
  1291. },
  1292. paramtype2 = "facedir",
  1293. groups = {cracky=2},
  1294. is_ground_content = false,
  1295. sounds = default.node_sound_defaults(),
  1296. })