From 49511b24b31a760e4b0fa607fbf3902e4c36fd38 Mon Sep 17 00:00:00 2001 From: thunderdog1138 Date: Mon, 18 May 2020 15:45:40 +0000 Subject: [PATCH] Upload files to 'mods/ethereal' --- mods/ethereal/README.md | 377 +++++++++++++++++++++++++++++++++++ mods/ethereal/plantpack.lua | 193 ++++++++++++++++++ mods/ethereal/sapling.lua | 235 ++++++++++++++++++++++ mods/ethereal/screenshot.png | Bin 0 -> 44078 bytes mods/ethereal/sealife.lua | 295 +++++++++++++++++++++++++++ 5 files changed, 1100 insertions(+) create mode 100644 mods/ethereal/README.md create mode 100644 mods/ethereal/plantpack.lua create mode 100644 mods/ethereal/sapling.lua create mode 100644 mods/ethereal/screenshot.png create mode 100644 mods/ethereal/sealife.lua diff --git a/mods/ethereal/README.md b/mods/ethereal/README.md new file mode 100644 index 00000000..da751c50 --- /dev/null +++ b/mods/ethereal/README.md @@ -0,0 +1,377 @@ +# ethereal + +Ethereal Mapgen mod for Minetest (works on all except v6) + +## Forum Topic +- https://forum.minetest.net/viewtopic.php?f=11&t=14638 + +## Lucky Blocks +42 + +## Changelog + +### 1.27 + + - Added Etherium ore and dust + - Added sparse decoration of dry grass and shrub to caves biome + - Added sponges that spawn near coral, dry sponge in furnace to soak up water + - Added new savanna dirt and decorations + - Use default grass abms + +### 1.26 + + - Added Sakura biome, pink sakura trees and saplings + - 1 in 10 chance of sakura sapling growing into white sakura + - Bamboo grows in higher elevation while sakura grows in lower + - Added sakura wood, stairs, fence, gate and door + - Added 5.0 checks to add new biomes and decorations + - Fixed water abm for dry dirt and added check for minetest 5.1 dry dirt also + +### 1.25 + + - Converted .mts files into schematic tables for easier editing + - Added firethorn shrub in glacier areas (can be crafted into jelly) + - Tweaked mapgen decorations + - Added more lucky blocks + - Added igloo to glacier biome + - 2x2 bamboo = bamboo floor, 3x3 bamboo or 2x bamboo floor = bamboo block, blocks can be made into sticks, bamboo stairs need blocks to craft + +### 1.24 + + - Updating code to newer functions, requires Minetest 0.4.16 and above + - Added food groups to be more compatible with other food mods + - Bonemeal removed (use Bonemeal mod to replace https://forum.minetest.net/viewtopic.php?f=9&t=16446 ) + - Crystal Ingot recipe requires a bucket of water, unless you are using builtin_item mod where you can mix ingredients by dropping in a pool of water instead + +### 1.23 + + - Added bonemeal support for bush sapling and acacia bush sapling + - Added support for [toolranks] mod if found + - Reworked Crystal Shovel so it acts more like a normal shovel with soft touch + +### 1.22 + + - Added coral and silver sand to mapgen (0.4.15 only) + - Replaced ethereal:green_dirt with default:dirt_with_grass for mortrees compatibility + - Mesa biomes are now topped with dirt with dry grass (redwood saplings grow on dry grass) + - Added bonemeal support for moretree's saplings + - Added settings.conf file example so that settings remain after mod update + - Added support for Real Torch so that torches near water drop an unlit torch + - Added support for new leafdecay functions (0.4.15 dev) + - Mapgen will use dirt_with_rainforest_litter for jungles if found + - Added bushes to mapgen + +### 1.21 + + - Saplings need clear space above to grow (depending on height of tree) + - Bonemeal changes to suit new sapling growth + - Fixes and tweaks + - Added default Abm overrides + - Added 4 new plants from baked clay mod to mapgen + - Added swamp biome to outskirts of bamboo areas + +### 1.20 + +- Tweaked Ethereal to work with new features and nodes in Minetest 0.4.14 +- Added bones found in dirt and bonemeal to make tree's and crops grow quicker +- Tree's follow default rules where saplings need light to grow +- Using default schematics for apple, pine, acacia and jungle tree's +- Tidied and split code into separate files +- Redid coloured grass spread function to run better +- Added support for moreblock's stairsplus feature + +### 1.19 + +- Added new biome routine to help restructure biomes +- Tweaked biome values so that they are more spread out (no more huge bamboo biome) +- Tweaked biome plant and tree decorations +- Fixed farming compatibility when using hoe on ethereal dirt +- Dirt with dry grass turns into green grass when near water +- Ice or snow above sea level melts into river water +- Disabling ethereal biomes no longer shows error messages +- Fire Flowers re-generate, can also be made into Fire Dust and both are fuel +- Optimize and tidy code + +### 1.18 + +- Added Birch tree, also stairs; fence and gate +- Added Fire flower to fiery biomes (careful, it hurts) +- Tweaked biomes and decoration slightly +- Added tree_tool for admin to quickly grow tree's +- Cobble to Mossycobble when near water has been toned down a bit + +### 1.17 + +- Added new Glacier biome filled with snow and ice +- Changed Mesa biome to have more coloured clay patterns +- Changed Bamboo biome to have tall tree-like stalks with leaves that give +- Bamboo sprouts are now saplings to grow new stalks +- Removed farmed mushrooms and replaced with default game mushrooms with spores + +### 1.16 + +- Added new tree schematics that change when placed with random leaves, fruit and height +- Changed frost dirt so that it no longer freezes water (saves lag) +- Torches cannot be placed next to water, otherwise they drop as items +- Added latest farming redo Bean Bushes to mapgen +- Code tidy (thanks HybridDog) and bug fix +- Banana, Orange and Apple fruits now drop when tree has been removed. + +### 1.15 + +- Added Staff of Light (thanks Xanthin), crafted from illumishrooms and can turn stone into glostone and back again +- Changed how Crystal Spikes reproduce +- Crystal Ingots now require 2x mese crystal and 2x crystal spikes to craft +- Removed obsidian brick & stairs now they are in default game, also removed pine wood stairs for same reason +- Tidied code and optimized a few routines + + +### 1.14 + +- Changed Ethereal to work with Minetest 0.4.11 update and new mapgen features +- Changed Pine tree's to use default pine wood +- Added pine wood fence, gate and stairs +- Crystal Spikes now re-generate in crystal biomes +- Removed layer mapgen, keeping spread as default + + +### 1.13 + +- Changed melting feature to work with 0.4.11 pre-release now that group:hot and group:melt have been removed + + +### 1.12 + +- Added ability to disable biomes in the init.lua file by setting to 1 (enable) or 0 (disable) +- Supports Framing Redo 1.10 foods + + +### 1.11 + +- Added Stairs for Ethereal wood types, mushroom, dry dirt, obsidian brick and clay +- Added Green Coral which can be used as green dye +- Craft 5x Ice in X pattern to give 5x Snow +- Added Snow and Ice Bricks with their own stairs and slabs which melt when near heat + + +### 1.10 + +- Added Stone Ladders (another use for cobble) +- Craft 5x Gravel in X pattern to give 5 dirt, and 5x dirt in X pattern for 5 sand +- Added Acacia tree's to desert biome (a nice pink wood to build with, thanks to VanessaE for textures) +- Added Acacia fences and gates +- Added Vines, craftable with 2x3 leaves + + +### 1.09 + +- Fixed Quicksand bug where player see's only black when sinking instead of yellow effect, note this will only work on new maps or newly generated areas of map containing quicksand +- Hot nodes will melt ice and snow in a better way +- Few spelling errors sorted for sapling and wood names + + +### 1.08 + +- Saplings produce better placed tree's when grown, routines have been redone +- Orange tree's now spawn in prairie biomes +- The usual code tidy and few bug fixes along the way + +### 1.07 + +- If Farming Redo mod detected then it's growing routines will be used for Ethereal plantlife instead of default +Leaftype and Mapstyle settings can be changed within init.lua file, new layered style maps are being tested +Changed crafting recipe for Fences, they tie in with Gates a little better + +### 1.06 + +- Added support for Farming Redo mod, all plants spawn on newly generated areas: + - https://forum.minetest.net/viewtopic.php?id=9019 + +### 1.05b + +- Added Gates for each of the fence types (thanks to Blockmen for gate model) +- Players can no longer jump over fences unless they wear crystal boots < REMOVED + +### 1.04 + +- Farming of Mushrooms, Wild Onions and Strawberries now use minetest 0.4.10 functions +- Strawberries can be grown by using actual fruit, seeds no longer needed +- Tree leaves are no longer walkable, player can go through them +- Saplings now fall if block underneath disturbed + +### 1.03 + +- Changed Fence recipe's so it doesn't interfere with 3d armor's wooden boots +- Tweaked textures to bring down file sizes +- Flowers, Sprouts and Ferns now spread over ALL grassland + +### 1.02 + +- Fences added for each type of wood in Ethereal +- Changes to biome settings, less artifacts + +### 1.01 + +- Quicksand generates throughout world near sandy water +- Bamboo as well as Papyrus now grow on dirt near water +- Fixed Coral textures and light + +### 1.00 + +- Seaweed now spawns in deep water and can grow up to 10 high +- Coral also spawns in deep water and glows slightly (orange, pink and blue) +- Above items can be crafted into dye, also Seaweed is edible +- So long as sand isn't disturbed under the ocean, sealife will re-generate +- Fixed Leaves inventory images and Mushroom selection box (thanks Wuzzy) + +### 0.0.9 +#### 0.0.9p + +- Willow Trees now spawn in grey biome instead of tiny grey trees (model by Phiwari123) +- Redwood Trees now spawn in Mesa biome (model by Wes42033) +- BakedClay mod no longer required for Mesa biome but used if found +- Paper Wall added + +#### 0.0.9o + +- Added Obsidian Brick craft for building +- Changed Illumishroom cave levels +- Changed *is_ground_content* to false for ethereal dirt so mapgen doesn't carve it up with caves + +#### 0.0.9n + +- New textures for farming mushrooms and spores +- Illumi-shrooms spawn in caves to brighten things up a little +- Crafting a wooden sign now gives 4 instead of 1 + +#### 0.0.9m + +- Changed Bamboo biome slightly, Bamboo Sprout has new image +- Abm timings changed and a few bugs fixed +- Crystal Gilly Staff has to be used (left-click) to replenish air while underwater +- Crystal Shovel now works with protection mods +- Tidied code and changed ladder recipe's to double output + +#### 0.0.9L + +- Scorched Tree's are now different sizes +- Crystal Shovel with soft touch can now be used to dig up sand and gravel +- Bamboo and Papyrus drop entire stalk when bottom node dug +- Crystal Spikes require steel pick or better to dig and fall when dirt below is removed +- Few changes to mapgen and water functions + +#### 0.0.9k + +- Fixed bug in charcoal lumps (no more placing as unknown nodes) +- Added Crystal Shovel with soft touch, can be used to dig up dirt with grass intact +- Fixed bug in Crystal Shovel, now works with dirt_with_snow and has sounds +- Tweaked Fiery Biomes slightly, smaller craters on outside, large in hotter areas + +#### 0.0.9i + +- Cleaned up mapgen_v7.lua file, maps now generate a little faster +- Removed cactus.mts, no longer required +- Removed mushroomtwo.mts, no longer required +- Removed bamboo.mts, no longer required +- Removed deadtree.mts, no longer required +- Few new textures added +- Papyrus also spawns on jungle dirt near water +- Replaced dead tree's with scorched tree's +- Each scorched tree trunk crafts into 2x charcoal Lumps (fixed) +- Torches can also be crafted from Charcoal + +#### 0.0.9h + +- Added Strawberry farming, Strawberry Seeds and new Textures +- Tidied up mapgen_v7.lua for better spawning of plants and trees +- Player can no longer walk through Bamboo Stalks + +#### 0.0.9g + +- Changed Ethereal's growing routine for Saplings, it now uses 1 single abm to grow all tree's + +#### 0.0.9f + +- Added Fishing to Ethereal, Fishing Rod, Worms, Fish and Cooked Fish (Left-click the water with a Baited Rod in the hope of landing your prize) + +#### 0.0.9e + +- Changed textures for Bowl, Mushroom Soup, Crystal Spike, Banana Loaf, Strawberry & Bush +- Added Hearty Stew Recipes +- If BakedClay mod is installed, Mesa Biome will be added to the mix + +#### 0.0.9d + +- Added Bamboo Grove and Bamboo Sprouts ) +- Craft Bamboo into Paper and Bamboo Flooring +- Cactus is now edible when crafted beside empty bucket + +#### 0.0.9c + +- Code re-worked so mod now uses sections for each function (easier to read and edit) +- New textures for Strawberry Bush and Crystal Spikes + +#### 0.0.9b + +- Pine Tree Leaves have new texture and sometimes give Pine Nuts +- Jungle Tree's now use default Jungle Wood as texture + +#### 0.0.9 + +- Prairie, Grove, Jungle and Snowy biomes have their own dirt +- Saplings will only grow in the biomes they were taken from +- Mapgen tweaks and code changes for new dirt added + +### 0.0.8 Changes +#### 0.0.8m + +- Added Banana Trunk and Wood +- Added Boston Ferns to Grove biome +- Added edible Fern Tubers +- Mushroom Biome now has different sized mushrooms +- Changed Pine Needles texture + +#### 0.0.8k + +- Added Desert Sand biome +- Added Alpine biome with Pine Trees and Snow +- Added Grove biome with Banana Tree's (saplings only grow in that temperate area) +- Added Bananas, Banana Dough and Banana Bread +- Changed biome generation to be more like real-world environs (e.g. shrooms like hot & humid so that's where they spawn) +- Tidied up code and removed redundant lines + +#### 0.0.8e + +- New Plains biome added between Fiery and Green areas to hopefully stop forest fires, these have dry dirt and dead trees +- Placing water near Dry Dirt turns it into normal dirt, cooking normal dirt changes it into Dry Dirt + +Note: if your Ethereal world does have a few forest fires appearing you can always add this line to your minetest.conf file: + +disable_fire = true + +#### 0.0.8 + +- Healing Tree (grows on high snowy peaks, leaves are edible and golden apples heal all hearts) +- Added some new images for Cooked Mushroom Soup, Mushroom Spores and Palm Trees +- 2D leaves or 3D leaves option, both wave in wind if enabled +- All new saplings can grow on their native dirt, and palm tree's on sand +- Crystal Spike or Crystal Dirt freezes nearby water, Heat can also melt ice +- Wild Mushrooms now give Spores, plant these to grow edible mushrooms +- Cobble in water turns mossy +- Palm Leaves can be cooked into Palm Wax and made into Candles + +### 0.0.7c + +- Gravel can be found under lake biomes (or craft 5 cobble in X pattern) +- Papyrus is found and grows on dirt near water (also craft 2x3 string for paper) +- Mushroom Heads have a chance of giving Mushroom Sapling (craft 1 head = 4x Mushrooms ready for Planting) +- Trees and Mushrooms have a chance of giving Saplings +- Frost Trunk and Mushroom Trunk are rotatable (craft 1 Mushroom Trunk = 4x White Dye) +- Desert areas have Dry Shrubs added +- Crystal Spikes added to Crystal Biome (watch out they hurt) +- Crystal Ingots added to make Sword and Pick +- New Pine Tree model added to snowy biome which adds Pine leaves and drops Pine Saplings +- Fixed GrassyTwo biome so that BigTree now spawns and grows from sapling +- Added Crystal Gilly Staff to allow breathing underwater (so long as it's in hand) +- Added Palm Trees, Trunk, Wood, Sapling, Coconuts, Coconut Slice (to eat) +- Thanks to VanessaE's for the Palm textures diff --git a/mods/ethereal/plantpack.lua b/mods/ethereal/plantpack.lua new file mode 100644 index 00000000..51d7aaaf --- /dev/null +++ b/mods/ethereal/plantpack.lua @@ -0,0 +1,193 @@ + +--= Register Biome Decoration Using Plants Mega Pack Lite + +--= Desert Biome + +-- Cactus +minetest.register_decoration({ + deco_type = "simple", + place_on = {"default:desert_sand", "default:sandstone"}, + sidelen = 16, + fill_ratio = 0.005, + biomes = {"desert", "sandstone"}, + decoration = { + "xanadu:cactus_echinocereus", "xanadu:cactus_matucana", + "xanadu:cactus_baseball", "xanadu:cactus_golden" + }, +}) + +-- Desert Plants +minetest.register_decoration({ + deco_type = "simple", + place_on = {"default:desert_sand", "default:sandstone", "default:sand"}, + sidelen = 16, + fill_ratio = 0.004, + biomes = {"desert", "sandstone"}, + decoration = { + "xanadu:desert_kangaroo", "xanadu:desert_brittle", + "xanadu:desert_ocotillo", "xanadu:desert_whitesage" + }, +}) + +--= Prairie Biome + +-- Grass +minetest.register_decoration({ + deco_type = "simple", + place_on = {"ethereal:prairie_dirt", "default:dirt_with_grass"}, + sidelen = 16, + fill_ratio = 0.005, + biomes = {"prairie", "grassy", "grassytwo"}, + decoration = { + "xanadu:grass_prairie", "xanadu:grass_cord", + "xanadu:grass_wheatgrass", "xanadu:desert_whitesage" + }, +}) + +-- Flowers +minetest.register_decoration({ + deco_type = "simple", + place_on = { + "ethereal:prairie_grass", "default:dirt_with_grass", + "ethereal:grove_dirt", "ethereal:bamboo_dirt" + }, + sidelen = 16, + fill_ratio = 0.005, + biomes = {"prairie", "grassy", "grassytwo", "bamboo"}, + decoration = { + "xanadu:flower_jacobsladder", "xanadu:flower_thistle", + "xanadu:flower_wildcarrot" + }, +}) + +minetest.register_decoration({ + deco_type = "simple", + place_on = { + "ethereal:prairie_grass", "default:dirt_with_grass", + "ethereal:grove_dirt" + }, + sidelen = 16, + fill_ratio = 0.005, + biomes = {"prairie", "grassy", "grassytwo", "grove"}, + decoration = { + "xanadu:flower_delphinium", "xanadu:flower_celosia", + "xanadu:flower_daisy", "xanadu:flower_bluerose" + }, +}) + +-- Shrubs +minetest.register_decoration({ + deco_type = "simple", + place_on = { + "ethereal:prairie_grass", "default:dirt_with_grass", + "ethereal:grove_dirt", "ethereal:jungle_grass", + "ethereal:gray_dirt", "default:dirt_with_rainforest_litter" + }, + sidelen = 16, + fill_ratio = 0.005, + biomes = { + "prairie", "grassy", "grassytwo", "grove", "junglee", + "grayness", "jumble" + }, + decoration = {"xanadu:shrub_kerria", "xanadu:shrub_spicebush"}, +}) + +--= Jungle Biome + +minetest.register_decoration({ + deco_type = "simple", + place_on = {"ethereal:jungle_dirt", "default:dirt_with_grass", "default:dirt_with_rainforest_litter"}, + sidelen = 16, + fill_ratio = 0.007, + biomes = {"junglee", "jumble"}, + decoration = { + "xanadu:rainforest_guzmania", "xanadu:rainforest_devil", + "xanadu:rainforest_lazarus", "xanadu:rainforest_lollipop", + "xanadu:mushroom_woolly" + }, +}) + +--= Cold Biomes + +minetest.register_decoration({ + deco_type = "simple", + place_on = { + "default:dirt_with_snow", "ethereal:cold_dirt", + "ethereal:gray_dirt" + }, + sidelen = 16, + fill_ratio = 0.005, + biomes = {"snowy", "alpine", "grayness"}, + decoration = { + "xanadu:mountain_edelweiss", "xanadu:mountain_armeria", + "xanadu:mountain_bellflower", "xanadu:mountain_willowherb", + "xanadu:mountain_bistort" + }, + +}) + +--= Mushroom Biome + +minetest.register_decoration({ + deco_type = "simple", + place_on = {"ethereal:mushroom_dirt"}, + sidelen = 16, + fill_ratio = 0.005, + biomes = {"mushroom"}, + decoration = { + "xanadu:mushroom_powderpuff", "xanadu:mushroom_chanterelle", + "xanadu:mushroom_parasol" + }, +}) + +--= Lakeside + +minetest.register_decoration({ + deco_type = "simple", + place_on = {"default:sand", "default:dirt_with_grass"}, + sidelen = 16, + fill_ratio = 0.015, + biomes = {"sandclay", "grassy_ocean", "grassy", "grassytwo", "jumble", "swamp"}, + decoration = { + "xanadu:wetlands_cattails", "xanadu:wetlands_pickerel", + "xanadu:wetlands_mannagrass", "xanadu:wetlands_turtle" + }, + spawn_by = "default:water_source", + num_spawn_by = 1, +}) + +--= Harsh Biomes + +minetest.register_decoration({ + deco_type = "simple", + place_on = { + "ethereal:mushroom_dirt", "default:dirt_with_grass", + "ethereal:gray_dirt", "ethereal:cold_dirt", + "ethereal:dirt_with_snow", "ethereal:jungle_dirt", + "ethereal:prairie_dirt", "ethereal:grove_dirt", + "ethereal:dry_dirt", "ethereal:fiery_dirt", "default:sand", + "default:desert_sand", "xanadu:red", "ethereal:bamboo_dirt", + "default:dirt_with_rainforest_litter" + }, + sidelen = 16, + fill_ratio = 0.004, + biomes = { + "mushroom", "prairie", "grayness", "plains", "desert", + "junglee", "grassy", "grassytwo", "jumble", "snowy", "alpine", + "fiery", "mesa", "bamboo" + }, + decoration = {"xanadu:spooky_thornbush", "xanadu:spooky_baneberry"}, +}) + +--= Poppy's growing in Clearing Biome in memory of RealBadAngel + +minetest.register_decoration({ + deco_type = "simple", + place_on = { + "default:dirt_with_grass", + }, + sidelen = 16, + fill_ratio = 0.004, + biomes = {"clearing"}, + decoration = {"xanadu:poppy"}, +}) diff --git a/mods/ethereal/sapling.lua b/mods/ethereal/sapling.lua new file mode 100644 index 00000000..92990c2a --- /dev/null +++ b/mods/ethereal/sapling.lua @@ -0,0 +1,235 @@ + +local S = ethereal.intllib + +-- Bamboo Sprout +minetest.register_node("ethereal:bamboo_sprout", { + description = S("Bamboo Sprout"), + drawtype = "plantlike", + tiles = {"bamboo_sprout.png"}, + inventory_image = "bamboo_sprout.png", + wield_image = "bamboo_sprout.png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + groups = { + food_bamboo_sprout = 1, snappy = 3, attached_node = 1, flammable = 2, + dig_immediate = 3, ethereal_sapling = 1, sapling = 1, + }, + sounds = default.node_sound_defaults(), + selection_box = { + type = "fixed", + fixed = {-4 / 16, -0.5, -4 / 16, 4 / 16, 0, 4 / 16} + }, + on_use = minetest.item_eat(2), + grown_height = 11, +}) + +-- Register Saplings +local register_sapling = function(name, desc, texture, height) + + minetest.register_node(name .. "_sapling", { + description = S(desc .. " Tree Sapling"), + drawtype = "plantlike", + tiles = {texture .. ".png"}, + inventory_image = texture .. ".png", + wield_image = texture .. ".png", + paramtype = "light", + sunlight_propagates = true, + is_ground_content = false, + walkable = false, + selection_box = { + type = "fixed", + fixed = {-4 / 16, -0.5, -4 / 16, 4 / 16, 7 / 16, 4 / 16} + }, + groups = { + snappy = 2, dig_immediate = 3, flammable = 2, + ethereal_sapling = 1, attached_node = 1, sapling = 1 + }, + sounds = default.node_sound_leaves_defaults(), + grown_height = height, + }) +end + +register_sapling("ethereal:willow", "Willow", "willow_sapling", 14) +register_sapling("ethereal:yellow_tree", "Healing", "yellow_tree_sapling", 19) +register_sapling("ethereal:big_tree", "Big", "ethereal_big_tree_sapling", 7) +register_sapling("ethereal:banana_tree", "Banana", "banana_tree_sapling", 8) +register_sapling("ethereal:frost_tree", "Frost", "ethereal_frost_tree_sapling", 19) +register_sapling("ethereal:mushroom", "Mushroom", "ethereal_mushroom_sapling", 11) +register_sapling("ethereal:palm", "Palm", "moretrees_palm_sapling", 9) +register_sapling("ethereal:redwood", "Redwood", "redwood_sapling", 31) +register_sapling("ethereal:orange_tree", "Orange", "orange_tree_sapling", 6) +register_sapling("ethereal:birch", "Birch", "moretrees_birch_sapling", 7) +register_sapling("ethereal:sakura", "Sakura", "ethereal_sakura_sapling", 10) + +local add_tree = function (pos, ofx, ofy, ofz, schem, replace) + -- check for schematic + if not schem then + print (S("Schematic not found")) + return + end + -- remove sapling and place schematic + minetest.swap_node(pos, {name = "air"}) + minetest.place_schematic( + {x = pos.x - ofx, y = pos.y - ofy, z = pos.z - ofz}, + schem, 0, replace, false) +end + +local path = minetest.get_modpath("ethereal") .. "/schematics/" + +-- grow tree functions +function ethereal.grow_yellow_tree(pos) + add_tree(pos, 4, 0, 4, ethereal.yellowtree) +end + +function ethereal.grow_big_tree(pos) + add_tree(pos, 4, 0, 4, ethereal.bigtree) +end + +function ethereal.grow_banana_tree(pos) + add_tree(pos, 3, 0, 3, ethereal.bananatree) +end + +function ethereal.grow_frost_tree(pos) + add_tree(pos, 4, 0, 4, ethereal.frosttrees) +end + +function ethereal.grow_mushroom_tree(pos) + add_tree(pos, 4, 0, 4, ethereal.mushroomone) +end + +function ethereal.grow_palm_tree(pos) + add_tree(pos, 4, 0, 4, ethereal.palmtree) +end + +function ethereal.grow_willow_tree(pos) + add_tree(pos, 5, 0, 5, ethereal.willow) +end + +function ethereal.grow_redwood_tree(pos) + add_tree(pos, 7, 0, 7, ethereal.redwood_tree) +end + +function ethereal.grow_orange_tree(pos) + add_tree(pos, 1, 0, 1, ethereal.orangetree) +end + +function ethereal.grow_bamboo_tree(pos) + add_tree(pos, 1, 0, 1, ethereal.bambootree) +end + +function ethereal.grow_birch_tree(pos) + add_tree(pos, 2, 0, 2, ethereal.birchtree) +end + +function ethereal.grow_sakura_tree(pos) + if math.random(10) == 1 then + add_tree(pos, 4, 0, 3, ethereal.sakura_tree, + {{"ethereal:sakura_leaves", "ethereal:sakura_leaves2"}}) + else + add_tree(pos, 4, 0, 3, ethereal.sakura_tree) + end +end + +-- check if sapling has enough height room to grow +local enough_height = function(pos, height) + + local nod = minetest.line_of_sight( + {x = pos.x, y = pos.y + 1, z = pos.z}, + {x = pos.x, y = pos.y + height, z = pos.z}) + + if not nod then + return false -- obstructed + else + return true -- can grow + end +end + +local grow_sapling = function(pos, node) + + local under = minetest.get_node({ + x = pos.x, + y = pos.y - 1, + z = pos.z + }).name + + if not minetest.registered_nodes[node.name] then + return + end + + local height = minetest.registered_nodes[node.name].grown_height + + -- do we have enough height to grow sapling into tree? + if not height or not enough_height(pos, height) then + return + end + + -- Check if Ethereal Sapling is growing on correct substrate + if node.name == "ethereal:yellow_tree_sapling" + and minetest.get_item_group(under, "soil") > 0 then + ethereal.grow_yellow_tree(pos) + + elseif node.name == "ethereal:big_tree_sapling" + and under == "default:dirt_with_grass" then + ethereal.grow_big_tree(pos) + + elseif node.name == "ethereal:banana_tree_sapling" + and under == "ethereal:grove_dirt" then + ethereal.grow_banana_tree(pos) + + elseif node.name == "ethereal:frost_tree_sapling" + and under == "ethereal:crystal_dirt" then + ethereal.grow_frost_tree(pos) + + elseif node.name == "ethereal:mushroom_sapling" + and under == "ethereal:mushroom_dirt" then + ethereal.grow_mushroom_tree(pos) + + elseif node.name == "ethereal:palm_sapling" + and under == "default:sand" then + ethereal.grow_palm_tree(pos) + + elseif node.name == "ethereal:willow_sapling" + and under == "ethereal:gray_dirt" then + ethereal.grow_willow_tree(pos) + + elseif node.name == "ethereal:redwood_sapling" + and under == "default:dirt_with_dry_grass" then + ethereal.grow_redwood_tree(pos) + + elseif node.name == "ethereal:orange_tree_sapling" + and under == "ethereal:prairie_dirt" then + ethereal.grow_orange_tree(pos) + + elseif node.name == "ethereal:bamboo_sprout" + and under == "ethereal:bamboo_dirt" then + ethereal.grow_bamboo_tree(pos) + + elseif node.name == "ethereal:birch_sapling" + and under == "default:dirt_with_grass" then + ethereal.grow_birch_tree(pos) + + elseif node.name == "ethereal:sakura_sapling" + and under == "ethereal:bamboo_dirt" then + ethereal.grow_sakura_tree(pos) + end +end + +-- Grow saplings +minetest.register_abm({ + label = "Ethereal grow sapling", + nodenames = {"group:ethereal_sapling"}, + interval = 10, + chance = 50, + catch_up = false, + action = function(pos, node) + + local light_level = minetest.get_node_light(pos) or 0 + + if light_level < 13 then + return + end + + grow_sapling(pos, node) + end, +}) diff --git a/mods/ethereal/screenshot.png b/mods/ethereal/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..c4d8001276a06bf8c57cd0c59dfac5c7f9672650 GIT binary patch literal 44078 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

J88F|V-V04@hP$^+v9aFC+6HaEK&_Bfv1oFVz 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 1 then + + minetest.swap_node(pos, {name = "ethereal:coral" .. sel}) + + return + end + + if nod == "ethereal:seaweed" + or sel == 1 then + + local height = 0 + local high = 14 + + while height < high + and minetest.get_node(pos).name == "ethereal:seaweed" do + height = height + 1 + pos.y = pos.y + 1 + end + + if pos.y < 1 + and height < high + and minetest.get_node(pos).name == "default:water_source" then + + minetest.swap_node(pos, {name = "ethereal:seaweed"}) + end + + end + + end, +}) +end + +-- sponges + +minetest.register_node("ethereal:sponge_air", { + drawtype = "airlike", + paramtype = "light", + walkable = false, + buildable_to = true, + sunlight_propagates = true, + pointable = false, + drop = "", + groups = {not_in_creative_inventory = 1}, +}) + + +minetest.register_node("ethereal:sponge", { + description = S("Sponge"), + tiles = {"ethereal_sponge.png"}, + groups = {crumbly = 3}, + sounds = default.node_sound_sand_defaults(), + + after_place_node = function(pos, placer, itemstack, pointed_thing) + + -- get player name + local name = placer:get_player_name() + + -- is area protected + if minetest.is_protected(pos, name) then + return + end + + -- get water nodes within range + local num = minetest.find_nodes_in_area( + {x = pos.x - 3, y = pos.y - 3, z = pos.z - 3}, + {x = pos.x + 3, y = pos.y + 3, z = pos.z + 3}, + {"group:water"}) + + -- no water + if #num == 0 then return end + + -- replace water nodes with sponge air + for _, w in pairs(num) do + + if not minetest.is_protected(pos, name) then + minetest.swap_node(w, {name = "ethereal:sponge_air"}) + end + end + + -- replace dry sponge with wet sponge + minetest.swap_node(pos, {name="ethereal:sponge_wet"}) + end +}) + + +minetest.register_node("ethereal:sponge_wet", { + description = S("Wet sponge"), + tiles = {"ethereal_sponge_wet.png"}, + groups = {crumbly = 3}, + sounds = default.node_sound_sand_defaults(), +}) + +-- cook wet sponge into dry sponge +minetest.register_craft({ + type = "cooking", + recipe = "ethereal:sponge_wet", + output = "ethereal:sponge", + cooktime = 3, +}) + +-- use leaf decay to remove sponge air nodes +default.register_leafdecay({ + trunks = {"ethereal:sponge_wet"}, + leaves = {"ethereal:sponge_air"}, + radius = 3 +}) + +-- dry sponges can be used as fuel +minetest.register_craft({ + type = "fuel", + recipe = "ethereal:sponge", + burntime = 5, +})