You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

533 lines
19KB

  1. local S = moretrees.intllib
  2. moretrees.avoidnodes = {}
  3. moretrees.treelist = {
  4. {"beech", "Beech Tree"},
  5. {"apple_tree", "Apple Tree"},
  6. {"oak", "Oak Tree", "acorn", "Acorn", {-0.2, -0.5, -0.2, 0.2, 0, 0.2}, 0.8 },
  7. {"sequoia", "Giant Sequoia"},
  8. {"birch", "Birch Tree"},
  9. {"palm", "Palm Tree", "palm_fruit_trunk_gen", "Palm Tree", {-0.2, -0.5, -0.2, 0.2, 0, 0.2}, 1.0 },
  10. {"date_palm", "Date Palm Tree", "date_palm_fruit_trunk", "Date Palm Tree", {0, 0, 0, 0, 0, 0}, 0.0 },
  11. {"spruce", "Spruce Tree", "spruce_cone", "Spruce Cone", {-0.2, -0.5, -0.2, 0.2, 0, 0.2}, 0.8 },
  12. {"cedar", "Cedar Tree", "cedar_cone", "Cedar Cone", {-0.2, -0.5, -0.2, 0.2, 0, 0.2}, 0.8 },
  13. {"poplar", "Poplar Tree"},
  14. {"poplar_small", "Poplar Tree"},
  15. {"willow", "Willow Tree"},
  16. {"rubber_tree", "Rubber Tree"},
  17. {"fir", "Douglas Fir", "fir_cone", "Fir Cone", {-0.2, -0.5, -0.2, 0.2, 0, 0.2}, 0.8 },
  18. {"jungletree", "Jungle Tree", nil, nil, nil, nil, "default_junglesapling.png" },
  19. }
  20. local dirs1 = { 21, 20, 23, 22, 21 }
  21. local dirs2 = { 12, 9, 18, 7, 12 }
  22. local dirs3 = { 14, 11, 16, 5, 14 }
  23. local moretrees_new_leaves_drawtype = "allfaces_optional"
  24. local moretrees_plantlike_leaves_visual_scale = 1
  25. if moretrees.plantlike_leaves then
  26. moretrees_new_leaves_drawtype = "plantlike"
  27. moretrees_plantlike_leaves_visual_scale = math.sqrt(2)
  28. end
  29. -- redefine default leaves to handle plantlike and/or leaf decay options
  30. if moretrees.plantlike_leaves then
  31. minetest.override_item("default:leaves", {
  32. inventory_image = minetest.inventorycube("default_leaves.png"),
  33. drawtype = "plantlike",
  34. visual_scale = math.sqrt(2)
  35. })
  36. end
  37. -- redefine default jungle leaves for same
  38. if moretrees.plantlike_leaves then
  39. minetest.override_item("default:jungleleaves", {
  40. inventory_image = minetest.inventorycube("default_jungleleaves.png"),
  41. drawtype = "plantlike",
  42. visual_scale = math.sqrt(2)
  43. })
  44. end
  45. for i in ipairs(moretrees.treelist) do
  46. local treename = moretrees.treelist[i][1]
  47. local treedesc = moretrees.treelist[i][2]
  48. local fruit = moretrees.treelist[i][3]
  49. local fruitdesc = moretrees.treelist[i][4]
  50. local selbox = moretrees.treelist[i][5]
  51. local vscale = moretrees.treelist[i][6]
  52. local saptex = moretrees.treelist[i][7]
  53. -- player will get a sapling with 1/100 chance
  54. -- player will get leaves only if he/she gets no saplings,
  55. -- this is because max_items is 1
  56. local droprarity = 100
  57. local decay = moretrees.leafdecay_radius
  58. if treename == "palm" then
  59. droprarity = 20
  60. decay = moretrees.palm_leafdecay_radius
  61. elseif treename == "date_palm" then
  62. decay = moretrees.palm_leafdecay_radius
  63. end
  64. if treename ~= "jungletree" -- the default game provides jungle tree and pine trunk/planks nodes.
  65. and treename ~= "poplar_small"
  66. and treename ~= "pine" then
  67. saptex = "moretrees_"..treename.."_sapling.png"
  68. minetest.register_node("moretrees:"..treename.."_trunk", {
  69. description = S(treedesc.." Trunk"),
  70. tiles = {
  71. "moretrees_"..treename.."_trunk_top.png",
  72. "moretrees_"..treename.."_trunk_top.png",
  73. "moretrees_"..treename.."_trunk.png"
  74. },
  75. paramtype2 = "facedir",
  76. is_ground_content = false,
  77. groups = {tree=1,snappy=1,choppy=2,oddly_breakable_by_hand=1,flammable=2},
  78. sounds = default.node_sound_wood_defaults(),
  79. on_place = minetest.rotate_node,
  80. })
  81. minetest.register_node("moretrees:"..treename.."_planks", {
  82. description = S(treedesc.." Planks"),
  83. tiles = {"moretrees_"..treename.."_wood.png"},
  84. is_ground_content = false,
  85. groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3,wood=1},
  86. sounds = default.node_sound_wood_defaults(),
  87. })
  88. minetest.register_node("moretrees:"..treename.."_sapling", {
  89. description = S(treedesc.." Sapling"),
  90. drawtype = "plantlike",
  91. tiles = {saptex},
  92. inventory_image = saptex,
  93. paramtype = "light",
  94. paramtype2 = "waving",
  95. walkable = false,
  96. is_ground_content = true,
  97. selection_box = {
  98. type = "fixed",
  99. fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3}
  100. },
  101. groups = {snappy=2,dig_immediate=3,flammable=2,attached_node=1,sapling=1},
  102. sounds = default.node_sound_defaults(),
  103. })
  104. local moretrees_leaves_inventory_image = nil
  105. local moretrees_new_leaves_waving = nil
  106. if moretrees.plantlike_leaves then
  107. moretrees_leaves_inventory_image = minetest.inventorycube("moretrees_"..treename.."_leaves.png")
  108. else
  109. moretrees_new_leaves_waving = 1
  110. end
  111. minetest.register_node("moretrees:"..treename.."_leaves", {
  112. description = S(treedesc.." Leaves"),
  113. drawtype = moretrees_new_leaves_drawtype,
  114. waving = moretrees_new_leaves_waving,
  115. visual_scale = moretrees_plantlike_leaves_visual_scale,
  116. tiles = { "moretrees_"..treename.."_leaves.png" },
  117. inventory_image = moretrees_leaves_inventory_image,
  118. paramtype = "light",
  119. is_ground_content = false,
  120. groups = {snappy = 3, flammable = 2, leaves = 1, moretrees_leaves = 1, leafdecay = 1},
  121. sounds = default.node_sound_leaves_defaults(),
  122. drop = {
  123. max_items = 1,
  124. items = {
  125. {items = {"moretrees:"..treename.."_sapling"}, rarity = droprarity },
  126. {items = {"moretrees:"..treename.."_leaves"} }
  127. }
  128. },
  129. })
  130. if moretrees.enable_stairs then
  131. if minetest.get_modpath("moreblocks") then
  132. -- stairsplus:register_all(modname, subname, recipeitem, {fields})
  133. stairsplus:register_all(
  134. "moretrees",
  135. treename.."_trunk",
  136. "moretrees:"..treename.."_trunk",
  137. {
  138. groups = { snappy=1, choppy=2, oddly_breakable_by_hand=1, flammable=2, not_in_creative_inventory=1 },
  139. tiles = {
  140. "moretrees_"..treename.."_trunk_top.png",
  141. "moretrees_"..treename.."_trunk_top.png",
  142. "moretrees_"..treename.."_trunk.png"
  143. },
  144. description = S(treedesc.." Trunk"),
  145. drop = treename.."_trunk",
  146. }
  147. )
  148. stairsplus:register_all(
  149. "moretrees",
  150. treename.."_planks",
  151. "moretrees:"..treename.."_planks",
  152. {
  153. groups = { snappy=1, choppy=2, oddly_breakable_by_hand=2, flammable=3, not_in_creative_inventory=1 },
  154. tiles = { "moretrees_"..treename.."_wood.png" },
  155. description = S(treedesc.." Planks"),
  156. drop = treename.."_planks",
  157. }
  158. )
  159. elseif minetest.get_modpath("stairs") then
  160. stairs.register_stair_and_slab(
  161. "moretrees_"..treename.."_trunk",
  162. "moretrees:"..treename.."_trunk",
  163. { snappy=1, choppy=2, oddly_breakable_by_hand=1, flammable=2 },
  164. { "moretrees_"..treename.."_trunk_top.png",
  165. "moretrees_"..treename.."_trunk_top.png",
  166. "moretrees_"..treename.."_trunk.png"
  167. },
  168. S(treedesc.." Trunk Stair"),
  169. S(treedesc.." Trunk Slab"),
  170. default.node_sound_wood_defaults()
  171. )
  172. stairs.register_stair_and_slab(
  173. "moretrees_"..treename.."_planks",
  174. "moretrees:"..treename.."_planks",
  175. { snappy=1, choppy=2, oddly_breakable_by_hand=2, flammable=3 },
  176. { "moretrees_"..treename.."_wood.png" },
  177. S(treedesc.." Planks Stair"),
  178. S(treedesc.." Planks Slab"),
  179. default.node_sound_wood_defaults()
  180. )
  181. end
  182. end
  183. if moretrees.enable_fences then
  184. local planks_name = "moretrees:" .. treename .. "_planks"
  185. local planks_tile = "moretrees_" .. treename .. "_wood.png"
  186. default.register_fence("moretrees:" .. treename .. "_fence", {
  187. description = S(treedesc.." Fence"),
  188. texture = planks_tile,
  189. inventory_image = "default_fence_overlay.png^" .. planks_tile ..
  190. "^default_fence_overlay.png^[makealpha:255,126,126",
  191. wield_image = "default_fence_overlay.png^" .. planks_tile ..
  192. "^default_fence_overlay.png^[makealpha:255,126,126",
  193. material = planks_name,
  194. groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2},
  195. sounds = default.node_sound_wood_defaults()
  196. })
  197. default.register_fence_rail("moretrees:" .. treename .. "_fence_rail", {
  198. description = S(treedesc.." Fence Rail"),
  199. texture = planks_tile,
  200. inventory_image = "default_fence_rail_overlay.png^" .. planks_tile ..
  201. "^default_fence_rail_overlay.png^[makealpha:255,126,126",
  202. wield_image = "default_fence_rail_overlay.png^" .. planks_tile ..
  203. "^default_fence_rail_overlay.png^[makealpha:255,126,126",
  204. material = planks_name,
  205. groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2},
  206. sounds = default.node_sound_wood_defaults()
  207. })
  208. if minetest.global_exists("doors") then
  209. doors.register_fencegate("moretrees:" .. treename .. "_gate", {
  210. description = S(treedesc .. " Fence Gate"),
  211. texture = planks_tile,
  212. material = planks_name,
  213. groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}
  214. })
  215. end
  216. end
  217. end
  218. minetest.register_node("moretrees:"..treename.."_sapling_ongen", {
  219. description = S(treedesc.." Sapling (fast growth)"),
  220. drawtype = "plantlike",
  221. tiles = {saptex},
  222. inventory_image = saptex,
  223. paramtype = "light",
  224. paramtype2 = "waving",
  225. walkable = false,
  226. is_ground_content = true,
  227. selection_box = {
  228. type = "fixed",
  229. fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3}
  230. },
  231. groups = {snappy=2,dig_immediate=3,flammable=2,attached_node=1,sapling=1},
  232. sounds = default.node_sound_defaults(),
  233. drop = "moretrees:"..treename.."_sapling"
  234. })
  235. local fruitname = nil
  236. if fruit then
  237. fruitname = "moretrees:"..fruit
  238. minetest.register_node(fruitname, {
  239. description = S(fruitdesc),
  240. drawtype = "plantlike",
  241. tiles = { "moretrees_"..fruit..".png" },
  242. inventory_image = "moretrees_"..fruit..".png^[transformR180",
  243. wield_image = "moretrees_"..fruit..".png^[transformR180",
  244. visual_scale = vscale,
  245. paramtype = "light",
  246. sunlight_propagates = true,
  247. is_ground_content = false,
  248. walkable = false,
  249. selection_box = {
  250. type = "fixed",
  251. fixed = selbox
  252. },
  253. groups = {fleshy=3,dig_immediate=3,flammable=2, attached_node=1, leafdecay = 1, leafdecay_drop = 1},
  254. sounds = default.node_sound_defaults(),
  255. })
  256. end
  257. if treename ~= "jungletree"
  258. and treename ~= "poplar_small"
  259. and treename ~= "pine" then
  260. default.register_leafdecay({
  261. trunks = { "moretrees:"..treename.."_trunk" },
  262. leaves = { "moretrees:"..treename.."_leaves", fruitname },
  263. radius = decay,
  264. })
  265. end
  266. minetest.register_abm({
  267. nodenames = { "moretrees:"..treename.."_trunk_sideways" },
  268. interval = 1,
  269. chance = 1,
  270. action = function(pos, node, active_object_count, active_object_count_wider)
  271. local fdir = node.param2 or 0
  272. nfdir = dirs2[fdir+1]
  273. minetest.add_node(pos, {name = "moretrees:"..treename.."_trunk", param2 = nfdir})
  274. end,
  275. })
  276. table.insert(moretrees.avoidnodes, "moretrees:"..treename.."_trunk")
  277. if moretrees.spawn_saplings then
  278. table.insert(moretrees.avoidnodes, "moretrees:"..treename.."_sapling")
  279. table.insert(moretrees.avoidnodes, "moretrees:"..treename.."_sapling_ongen")
  280. end
  281. end
  282. -- Add small poplar saplings
  283. local poplar_sapling = minetest.registered_nodes["moretrees:poplar_sapling"]
  284. local poplar_sapling_ongen = minetest.registered_nodes["moretrees:poplar_sapling_ongen"]
  285. local poplar_small_sapling = {}
  286. local poplar_small_sapling_ongen = {}
  287. for k,v in pairs(poplar_sapling) do
  288. poplar_small_sapling[k] = v
  289. end
  290. for k,v in pairs(poplar_sapling_ongen) do
  291. poplar_small_sapling_ongen[k] = v
  292. end
  293. poplar_small_sapling.tiles = {"moretrees_poplar_small_sapling.png"}
  294. poplar_small_sapling.inventory_image = "moretrees_poplar_small_sapling.png"
  295. poplar_small_sapling.is_ground_content = true
  296. poplar_small_sapling_ongen.tiles_ongen = {"moretrees_poplar_small_sapling.png"}
  297. poplar_small_sapling_ongen.inventory_image_ongen = "moretrees_poplar_small_sapling.png"
  298. poplar_small_sapling_ongen.drop = "moretrees:poplar_small_sapling"
  299. poplar_small_sapling_ongen.is_ground_content = true
  300. minetest.register_node("moretrees:poplar_small_sapling", poplar_small_sapling)
  301. minetest.register_node("moretrees:poplar_small_sapling_ongen", poplar_small_sapling_ongen)
  302. if moretrees.spawn_saplings then
  303. table.insert(moretrees.avoidnodes, "moretrees:poplar_sapling")
  304. table.insert(moretrees.avoidnodes, "moretrees:poplar_small_sapling_ongen")
  305. end
  306. local poplar_leaves_drop = minetest.registered_nodes["moretrees:poplar_leaves"].drop
  307. minetest.override_item("moretrees:poplar_leaves", {
  308. drop = {
  309. max_items = poplar_leaves_drop.maxitems,
  310. items = {
  311. {items = {"moretrees:poplar_sapling"}, rarity = 1.33 * poplar_leaves_drop.items[1].rarity },
  312. {items = {"moretrees:poplar_small_sapling"}, rarity = 1.33 * poplar_leaves_drop.items[1].rarity },
  313. {items = {"moretrees:poplar_leaves"} }
  314. }
  315. }
  316. })
  317. -- Extra nodes for jungle trees:
  318. local jungleleaves = {"yellow","red"}
  319. local jungleleavesnames = {"Yellow", "Red"}
  320. for color = 1, #jungleleaves do
  321. local leave_name = "moretrees:jungletree_leaves_"..jungleleaves[color]
  322. local moretrees_leaves_inventory_image = nil
  323. if moretrees.plantlike_leaves then
  324. moretrees_leaves_inventory_image = minetest.inventorycube("moretrees_jungletree_leaves_"..jungleleaves[color]..".png")
  325. else
  326. moretrees_new_leaves_waving = 1
  327. end
  328. minetest.register_node(leave_name, {
  329. description = S("Jungle Tree Leaves ("..jungleleavesnames[color]..")"),
  330. drawtype = moretrees_new_leaves_drawtype,
  331. waving = moretrees_new_leaves_waving,
  332. visual_scale = moretrees_plantlike_leaves_visual_scale,
  333. tiles = {"moretrees_jungletree_leaves_"..jungleleaves[color]..".png"},
  334. inventory_image = moretrees_leaves_inventory_image,
  335. paramtype = "light",
  336. is_ground_content = false,
  337. groups = {snappy = 3, flammable = 2, leaves = 1, moretrees_leaves = 1, leafdecay = 3 },
  338. drop = {
  339. max_items = 1,
  340. items = {
  341. {items = {"default:junglesapling"}, rarity = 100 },
  342. {items = {"moretrees:jungletree_leaves_"..jungleleaves[color]} }
  343. }
  344. },
  345. sounds = default.node_sound_leaves_defaults(),
  346. })
  347. end
  348. -- To get Moretrees to generate its own jungle trees among the default mapgen
  349. -- we need our own copy of that node, which moretrees will match against.
  350. local jungle_tree = table.copy(minetest.registered_nodes["default:jungletree"])
  351. jungle_tree.drop = "default:jungletree"
  352. minetest.register_node("moretrees:jungletree_trunk", jungle_tree)
  353. default.register_leafdecay({
  354. trunks = { "default:jungletree", "moretrees:jungletree_trunk" },
  355. leaves = { "default:jungleleaves", "moretrees:jungletree_leaves_yellow", "moretrees:jungletree_leaves_red" },
  356. radius = moretrees.leafdecay_radius,
  357. })
  358. -- Extra needles for firs
  359. local moretrees_leaves_inventory_image = nil
  360. if moretrees.plantlike_leaves then
  361. moretrees_leaves_inventory_image = minetest.inventorycube("moretrees_fir_leaves_bright.png")
  362. end
  363. minetest.register_node("moretrees:fir_leaves_bright", {
  364. drawtype = moretrees_new_leaves_drawtype,
  365. waving = moretrees_new_leaves_waving,
  366. visual_scale = moretrees_plantlike_leaves_visual_scale,
  367. description = S("Douglas Fir Leaves (Bright)"),
  368. tiles = { "moretrees_fir_leaves_bright.png" },
  369. inventory_image = moretrees_leaves_inventory_image,
  370. paramtype = "light",
  371. is_ground_content = false,
  372. groups = {snappy = 3, flammable = 2, leaves = 1, moretrees_leaves = 1, leafdecay = 3 },
  373. drop = {
  374. max_items = 1,
  375. items = {
  376. {items = {'moretrees:fir_sapling'}, rarity = 100 },
  377. {items = {'moretrees:fir_leaves_bright'} }
  378. }
  379. },
  380. sounds = default.node_sound_leaves_defaults()
  381. })
  382. default.register_leafdecay({
  383. trunks = { "moretrees:fir_trunk" },
  384. leaves = { "moretrees:fir_leaves", "moretrees:fir_leaves_bright" },
  385. radius = moretrees.leafdecay_radius,
  386. })
  387. if moretrees.enable_redefine_apple then
  388. local appledef = table.copy(minetest.registered_nodes["default:apple"])
  389. appledef.groups.attached_node = 1
  390. minetest.register_node(":default:apple", appledef)
  391. end
  392. table.insert(moretrees.avoidnodes, "default:jungletree")
  393. table.insert(moretrees.avoidnodes, "default:pine_tree")
  394. table.insert(moretrees.avoidnodes, "default:acacia_tree")
  395. table.insert(moretrees.avoidnodes, "moretrees:fir_trunk")
  396. table.insert(moretrees.avoidnodes, "default:tree")
  397. if moretrees.spawn_saplings then
  398. table.insert(moretrees.avoidnodes, "snow:sapling_pine")
  399. table.insert(moretrees.avoidnodes, "default:junglesapling")
  400. table.insert(moretrees.avoidnodes, "default:pine_sapling")
  401. end
  402. -- "empty" (tapped) rubber tree nodes
  403. minetest.register_node("moretrees:rubber_tree_trunk_empty", {
  404. description = S("Rubber Tree Trunk (Empty)"),
  405. tiles = {
  406. "moretrees_rubber_tree_trunk_top.png",
  407. "moretrees_rubber_tree_trunk_top.png",
  408. "moretrees_rubber_tree_trunk_empty.png"
  409. },
  410. is_ground_content = true,
  411. groups = {tree=1,snappy=1,choppy=2,oddly_breakable_by_hand=1,flammable=2},
  412. sounds = default.node_sound_wood_defaults(),
  413. paramtype2 = "facedir",
  414. is_ground_content = false,
  415. on_place = minetest.rotate_node,
  416. })
  417. minetest.register_abm({
  418. nodenames = { "moretrees:rubber_tree_trunk_empty_sideways" },
  419. interval = 1,
  420. chance = 1,
  421. action = function(pos, node, active_object_count, active_object_count_wider)
  422. local fdir = node.param2 or 0
  423. nfdir = dirs2[fdir+1]
  424. minetest.add_node(pos, {name = "moretrees:rubber_tree_trunk_empty", param2 = nfdir})
  425. end,
  426. })
  427. -- For compatibility with old nodes, recently-changed nodes, and default nodes
  428. minetest.register_alias("technic:rubber_tree_full", "moretrees:rubber_tree_trunk")
  429. minetest.register_alias("farming_plus:rubber_tree_full", "moretrees:rubber_tree_trunk")
  430. minetest.register_alias("farming:rubber_tree_full", "moretrees:rubber_tree_trunk")
  431. minetest.register_alias("technic:rubber_leaves", "moretrees:rubber_tree_leaves")
  432. minetest.register_alias("farming_plus:rubber_leaves", "moretrees:rubber_tree_leaves")
  433. minetest.register_alias("farming:rubber_leaves", "moretrees:rubber_tree_leaves")
  434. minetest.register_alias("technic:rubber_tree_sapling", "moretrees:rubber_tree_sapling")
  435. minetest.register_alias("farming_plus:rubber_sapling", "moretrees:rubber_tree_sapling")
  436. minetest.register_alias("farming:rubber_sapling", "moretrees:rubber_tree_sapling")
  437. minetest.register_alias("moretrees:conifer_trunk", "moretrees:fir_trunk")
  438. minetest.register_alias("moretrees:conifer_trunk_sideways", "moretrees:fir_trunk_sideways")
  439. minetest.register_alias("moretrees:conifer_leaves", "moretrees:fir_leaves")
  440. minetest.register_alias("moretrees:conifer_leaves_bright", "moretrees:fir_leaves_bright")
  441. minetest.register_alias("moretrees:conifer_sapling", "moretrees:fir_sapling")
  442. minetest.register_alias("conifers:trunk", "moretrees:fir_trunk")
  443. minetest.register_alias("conifers:trunk_reversed", "moretrees:fir_trunk_sideways")
  444. minetest.register_alias("conifers:leaves", "moretrees:fir_leaves")
  445. minetest.register_alias("conifers:leaves_special", "moretrees:fir_leaves_bright")
  446. minetest.register_alias("conifers:sapling", "moretrees:fir_sapling")
  447. minetest.register_alias("moretrees:jungletree_sapling", "default:junglesapling")
  448. minetest.register_alias("moretrees:jungletree_trunk_sideways", "moreblocks:horizontal_jungle_tree")
  449. minetest.register_alias("moretrees:jungletree_planks", "default:junglewood")
  450. minetest.register_alias("moretrees:jungletree_leaves_green", "default:jungleleaves")
  451. minetest.register_alias("moretrees:acacia_trunk", "default:acacia_tree")
  452. minetest.register_alias("moretrees:acacia_planks", "default:acacia_wood")
  453. minetest.register_alias("moretrees:acacia_sapling", "default:acacia_sapling")
  454. minetest.register_alias("moretrees:acacia_leaves", "default:acacia_leaves")
  455. minetest.register_alias("moretrees:pine_trunk", "moretrees:cedar_trunk")
  456. minetest.register_alias("moretrees:pine_planks", "moretrees:cedar_planks")
  457. minetest.register_alias("moretrees:pine_sapling", "moretrees:cedar_sapling")
  458. minetest.register_alias("moretrees:pine_leaves", "moretrees:cedar_leaves")
  459. minetest.register_alias("moretrees:pine_cone", "moretrees:cedar_cone")
  460. minetest.register_alias("moretrees:pine_nuts", "moretrees:cedar_nuts")
  461. minetest.register_alias("moretrees:pine_sapling_ongen", "moretrees:cedar_sapling_ongen")
  462. minetest.register_alias("moretrees:dates", "moretrees:dates_f4")